{
  "version": 3,
  "sources": ["../../core/dist/context.js", "../../core/dist/http-route.js", "../../core/dist/document-types.js", "../../core/dist/wake-app-result.js", "../../core/dist/platform-capacity-profile.js", "../../core/dist/grounded-answer-types.js", "../../core/dist/realtime-query-subscription.js", "../../core/dist/realtime-query-registry.js", "../../core/dist/reactive-query.js", "../../core/dist/realtime-channel.js", "../../core/dist/realtime-channel-registry.js", "../../core/dist/reactive-realtime.js", "../../core/dist/reactive-mutation.js", "../../core/dist/v.js", "../../core/dist/procedure.js", "../../core/dist/http-action.js", "../../core/dist/realtime-ticket.js", "../../core/dist/storage-shared.js", "../../core/dist/storage.js", "../../core/dist/unread-cursor.js", "../../core/dist/job-admission.js", "../../core/dist/workflow-admission.js", "../../core/dist/workflow-json.js", "../../core/dist/workflow-wake-signal.js", "../../core/dist/workflow-payload-policy.js", "../../core/dist/workflow-types.js", "../../core/dist/workflows-api.js", "../../core/dist/workflow.js", "../../core/dist/retry.js", "../../core/dist/runtime-env-policy.js", "../../core/dist/crons.js", "../../core/dist/cron-action-token.js", "../../core/dist/rls-session.js", "../../core/dist/rls-context-contract.js", "../../core/dist/auth-config.js", "../../core/dist/config.js", "../../core/dist/rls-context-key.js", "../../core/dist/rls-define-table.js", "../../core/dist/rls.js", "../../core/dist/pg-base-table.js", "../../core/dist/rls-db.js", "../../core/dist/crud.js", "../../core/dist/createCrud.filters.js", "../../core/dist/createCrud.owner.js", "../../core/dist/createCrud.realtime.js", "../../core/dist/createCrud.validators.js", "../../core/dist/createCrud.cursor.js", "../../core/dist/createCrud.js", "../../core/dist/index.js", "../../internal/dist/src/codegen/domain/auth-schema.js", "../../internal/dist/src/introspection/schema-paths.js", "../../internal/dist/src/analyzer/consumers/auditor/module-auditor-plugin.js", "../../internal/dist/src/analyzer/internal/source-files.js", "../../internal/dist/src/analyzer/adapters/app-schema-graph.js", "../../internal/dist/src/analyzer/adapters/app-project.js", "../../internal/dist/src/analyzer/core/analyzer-types.js", "../../internal/dist/src/analyzer/core/analyzer-fix-flow.js", "../../internal/dist/src/analyzer/core/analyzer-materialization.js", "../../internal/dist/src/analyzer/core/analyzer-policy.js", "../../internal/dist/src/analyzer/core/analyzer-plugin-utils.js", "../../internal/dist/src/analyzer/core/analyzer-runtime.js", "../../internal/dist/src/analyzer/shared/db-operation-inspector.js", "../../internal/dist/src/analyzer/shared/db-access-plugin.js", "../../internal/dist/src/analyzer/shared/schema-plugin.js", "../../internal/dist/src/analyzer/shared/source-patterns-plugin.js", "../../internal/dist/src/analyzer/consumers/auditor/source-auditor.js", "../../internal/dist/src/analyzer/consumers/auditor/run-app-analysis.js", "../../internal/dist/src/analyzer/consumers/auditor/security-auditor-plugin.js", "../../internal/dist/src/analyzer/consumers/auditor/index.js", "../../server/dist/server-execution.js", "../../server/dist/workflow-runner-state.js", "webpack://pdf.js/node_modules/core-js/internals/is-object.js", "webpack://pdf.js/node_modules/core-js/internals/get-iterator.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.find.js", "webpack://pdf.js/node_modules/core-js/internals/make-built-in.js", "webpack://pdf.js/node_modules/core-js/internals/function-name.js", "webpack://pdf.js/node_modules/core-js/internals/html.js", "webpack://pdf.js/node_modules/core-js/internals/hidden-keys.js", "webpack://pdf.js/node_modules/core-js/modules/es.uint8-array.to-hex.js", "webpack://pdf.js/node_modules/core-js/internals/iterate-simple.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.flat-map.js", "webpack://pdf.js/node_modules/core-js/internals/function-bind-native.js", "webpack://pdf.js/node_modules/core-js/internals/to-string.js", "webpack://pdf.js/node_modules/core-js/internals/an-instance.js", "webpack://pdf.js/node_modules/core-js/internals/iterator-helper-throws-on-invalid-iterator.js", "webpack://pdf.js/node_modules/core-js/internals/math-trunc.js", "webpack://pdf.js/node_modules/core-js/internals/is-symbol.js", "webpack://pdf.js/node_modules/core-js/internals/get-iterator-method.js", "webpack://pdf.js/node_modules/core-js/internals/get-alphabet-option.js", "webpack://pdf.js/node_modules/core-js/internals/object-keys.js", "webpack://pdf.js/node_modules/core-js/internals/perform.js", "webpack://pdf.js/node_modules/core-js/internals/is-big-int-array.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.every.js", "webpack://pdf.js/node_modules/core-js/internals/internal-state.js", "webpack://pdf.js/node_modules/core-js/internals/to-integer-or-infinity.js", "webpack://pdf.js/node_modules/core-js/internals/iterator-close-all.js", "webpack://pdf.js/node_modules/core-js/internals/structured-clone-proper-transfer.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.uint8-array.set-from-base64.js", "webpack://pdf.js/node_modules/core-js/internals/object-is-prototype-of.js", "webpack://pdf.js/node_modules/core-js/modules/es.promise.try.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.union.v2.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.map.js", "webpack://pdf.js/node_modules/core-js/internals/get-iterator-direct.js", "webpack://pdf.js/node_modules/core-js/internals/object-keys-internal.js", "webpack://pdf.js/node_modules/core-js/internals/define-built-in-accessor.js", "webpack://pdf.js/node_modules/core-js/internals/to-string-tag-support.js", "webpack://pdf.js/node_modules/core-js/internals/classof-raw.js", "webpack://pdf.js/node_modules/core-js/internals/correct-prototype-getter.js", "webpack://pdf.js/node_modules/core-js/internals/uint8-from-hex.js", "webpack://pdf.js/node_modules/core-js/internals/object-create.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.is-superset-of.v2.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.filter.js", "webpack://pdf.js/node_modules/core-js/internals/create-iter-result-object.js", "webpack://pdf.js/node_modules/core-js/internals/normalize-string-argument.js", "webpack://pdf.js/node_modules/core-js/internals/iterate.js", "webpack://pdf.js/node_modules/core-js/internals/to-primitive.js", "webpack://pdf.js/node_modules/core-js/internals/object-get-prototype-of.js", "webpack://pdf.js/node_modules/core-js/internals/is-forced.js", "webpack://pdf.js/node_modules/core-js/internals/base64-map.js", "webpack://pdf.js/node_modules/core-js/internals/validate-arguments-length.js", "webpack://pdf.js/node_modules/core-js/internals/environment-user-agent.js", "webpack://pdf.js/node_modules/core-js/internals/object-set-prototype-of.js", "webpack://pdf.js/node_modules/core-js/modules/es.math.sum-precise.js", "webpack://pdf.js/node_modules/core-js/internals/inherit-if-required.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-is-detached.js", "webpack://pdf.js/node_modules/core-js/internals/uid.js", "webpack://pdf.js/node_modules/core-js/internals/set-difference.js", "webpack://pdf.js/node_modules/core-js/internals/a-string.js", "webpack://pdf.js/node_modules/core-js/internals/a-possible-prototype.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.some.js", "webpack://pdf.js/node_modules/core-js/internals/set-symmetric-difference.js", "webpack://pdf.js/node_modules/core-js/internals/inspect-source.js", "webpack://pdf.js/node_modules/core-js/internals/object-get-own-property-symbols.js", "webpack://pdf.js/node_modules/core-js/internals/descriptors.js", "webpack://pdf.js/node_modules/core-js/internals/get-set-record.js", "webpack://pdf.js/node_modules/core-js/internals/set-is-subset-of.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.is-disjoint-from.v2.js", "webpack://pdf.js/node_modules/core-js/internals/is-possible-prototype.js", "webpack://pdf.js/node_modules/core-js/internals/an-object-or-undefined.js", "webpack://pdf.js/node_modules/core-js/internals/document-create-element.js", "webpack://pdf.js/node_modules/core-js/modules/es.array.push.js", "webpack://pdf.js/node_modules/core-js/internals/is-null-or-undefined.js", "webpack://pdf.js/node_modules/core-js/internals/not-a-nan.js", "webpack://pdf.js/node_modules/core-js/internals/an-uint8-array.js", "webpack://pdf.js/node_modules/core-js/internals/set-union.js", "webpack://pdf.js/node_modules/core-js/internals/is-array-iterator-method.js", "webpack://pdf.js/node_modules/core-js/internals/environment.js", "webpack://pdf.js/node_modules/core-js/modules/es.uint8-array.set-from-hex.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.math.sum-precise.js", "webpack://pdf.js/node_modules/core-js/internals/ordinary-to-primitive.js", "webpack://pdf.js/node_modules/core-js/internals/is-array.js", "webpack://pdf.js/node_modules/core-js/internals/set-helpers.js", "webpack://pdf.js/node_modules/core-js/internals/set-is-disjoint-from.js", "webpack://pdf.js/node_modules/core-js/internals/detach-transferable.js", "webpack://pdf.js/node_modules/core-js/internals/symbol-constructor-detection.js", "webpack://pdf.js/node_modules/core-js/internals/array-set-length.js", "webpack://pdf.js/node_modules/core-js/internals/iterator-helper-without-closing-on-early-error.js", "webpack://pdf.js/node_modules/core-js/internals/global-this.js", "webpack://pdf.js/node_modules/core-js/modules/web.url-search-params.delete.js", "webpack://pdf.js/node_modules/core-js/modules/es.promise.with-resolvers.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-view-core.js", "webpack://pdf.js/node_modules/core-js/internals/create-property.js", "webpack://pdf.js/node_modules/core-js/internals/is-callable.js", "webpack://pdf.js/node_modules/core-js/internals/object-define-property.js", "webpack://pdf.js/node_modules/core-js/internals/set-method-accept-set-like.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.take.js", "webpack://pdf.js/node_modules/core-js/modules/web.dom-exception.stack.js", "webpack://pdf.js/node_modules/core-js/internals/dom-exception-constants.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.symmetric-difference.v2.js", "webpack://pdf.js/node_modules/core-js/internals/own-keys.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-not-detached.js", "webpack://pdf.js/node_modules/core-js/internals/set-size.js", "webpack://pdf.js/node_modules/core-js/modules/es.uint8-array.from-base64.js", "webpack://pdf.js/node_modules/core-js/internals/array-from-constructor-and-list.js", "webpack://pdf.js/node_modules/core-js/internals/to-indexed-object.js", "webpack://pdf.js/node_modules/core-js/internals/to-absolute-index.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.uint8-array.to-hex.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-transfer.js", "webpack://pdf.js/node_modules/core-js/internals/shared.js", "webpack://pdf.js/node_modules/core-js/modules/web.url.parse.js", "webpack://pdf.js/node_modules/core-js/internals/to-big-int.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.is-subset-of.v2.js", "webpack://pdf.js/node_modules/core-js/internals/ie8-dom-define.js", "webpack://pdf.js/node_modules/core-js/internals/get-method.js", "webpack://pdf.js/node_modules/core-js/internals/new-promise-capability.js", "webpack://pdf.js/node_modules/core-js/internals/function-bind-context.js", "webpack://pdf.js/node_modules/core-js/internals/shared-key.js", "webpack://pdf.js/node_modules/core-js/internals/environment-is-node.js", "webpack://pdf.js/node_modules/core-js/internals/length-of-array-like.js", "webpack://pdf.js/node_modules/core-js/internals/iterators.js", "webpack://pdf.js/node_modules/core-js/internals/define-built-ins.js", "webpack://pdf.js/node_modules/core-js/internals/call-with-safe-iteration-closing.js", "webpack://pdf.js/node_modules/core-js/internals/is-pure.js", "webpack://pdf.js/node_modules/core-js/internals/export.js", "webpack://pdf.js/node_modules/core-js/modules/es.array-buffer.detached.js", "webpack://pdf.js/node_modules/core-js/modules/es.uint8-array.set-from-base64.js", "webpack://pdf.js/node_modules/core-js/internals/create-non-enumerable-property.js", "webpack://pdf.js/node_modules/core-js/internals/function-uncurry-this-accessor.js", "webpack://pdf.js/node_modules/core-js/internals/object-define-properties.js", "webpack://pdf.js/node_modules/core-js/internals/try-to-string.js", "webpack://pdf.js/node_modules/core-js/internals/does-not-exceed-safe-integer.js", "webpack://pdf.js/node_modules/core-js/internals/define-built-in.js", "webpack://pdf.js/node_modules/core-js/internals/classof.js", "webpack://pdf.js/node_modules/core-js/internals/to-property-key.js", "webpack://pdf.js/node_modules/core-js/internals/create-property-descriptor.js", "webpack://pdf.js/node_modules/core-js/internals/use-symbol-as-uid.js", "webpack://pdf.js/node_modules/core-js/internals/indexed-object.js", "webpack://pdf.js/node_modules/core-js/internals/a-set.js", "webpack://pdf.js/node_modules/core-js/internals/object-get-own-property-descriptor.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-byte-length.js", "webpack://pdf.js/node_modules/core-js/internals/url-constructor-detection.js", "webpack://pdf.js/node_modules/core-js/internals/function-uncurry-this-clause.js", "webpack://pdf.js/node_modules/core-js/modules/web.url-search-params.has.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.for-each.js", "webpack://pdf.js/node_modules/core-js/internals/shared-store.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.difference.v2.js", "webpack://pdf.js/node_modules/core-js/internals/iterators-core.js", "webpack://pdf.js/node_modules/core-js/internals/array-slice.js", "webpack://pdf.js/node_modules/core-js/internals/to-index.js", "webpack://pdf.js/node_modules/core-js/internals/copy-constructor-properties.js", "webpack://pdf.js/node_modules/core-js/internals/require-object-coercible.js", "webpack://pdf.js/node_modules/core-js/internals/get-built-in.js", "webpack://pdf.js/node_modules/core-js/internals/array-buffer-basic-detection.js", "webpack://pdf.js/node_modules/core-js/modules/es.array-buffer.transfer-to-fixed-length.js", "webpack://pdf.js/node_modules/core-js/modules/es.set.intersection.v2.js", "webpack://pdf.js/node_modules/core-js/internals/to-length.js", "webpack://pdf.js/node_modules/core-js/modules/es.array-buffer.transfer.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.constructor.js", "webpack://pdf.js/node_modules/core-js/internals/well-known-symbol.js", "webpack://pdf.js/node_modules/core-js/internals/parse-json-string.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.reduce.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.json.parse.js", "webpack://pdf.js/node_modules/core-js/internals/set-iterate.js", "webpack://pdf.js/node_modules/core-js/internals/object-get-own-property-names.js", "webpack://pdf.js/node_modules/core-js/internals/set-is-superset-of.js", "webpack://pdf.js/node_modules/core-js/internals/an-object.js", "webpack://pdf.js/node_modules/core-js/internals/error-stack-clear.js", "webpack://pdf.js/node_modules/core-js/internals/weak-map-basic-detection.js", "webpack://pdf.js/node_modules/core-js/internals/get-iterator-flattenable.js", "webpack://pdf.js/node_modules/core-js/internals/v8-prototype-define-bug.js", "webpack://pdf.js/node_modules/core-js/modules/web.url-search-params.size.js", "webpack://pdf.js/node_modules/core-js/internals/enum-bug-keys.js", "webpack://pdf.js/node_modules/core-js/internals/function-apply.js", "webpack://pdf.js/node_modules/core-js/internals/set-intersection.js", "webpack://pdf.js/node_modules/core-js/internals/object-property-is-enumerable.js", "webpack://pdf.js/node_modules/core-js/internals/to-object.js", "webpack://pdf.js/node_modules/core-js/internals/fails.js", "webpack://pdf.js/node_modules/core-js/internals/uint8-from-base64.js", "webpack://pdf.js/node_modules/core-js/internals/set-clone.js", "webpack://pdf.js/node_modules/core-js/internals/has-own-property.js", "webpack://pdf.js/node_modules/core-js/internals/a-callable.js", "webpack://pdf.js/node_modules/core-js/modules/es.iterator.drop.js", "webpack://pdf.js/node_modules/core-js/internals/get-built-in-node-module.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.uint8-array.from-base64.js", "webpack://pdf.js/node_modules/core-js/internals/define-global-property.js", "webpack://pdf.js/node_modules/core-js/internals/iterator-create-proxy.js", "webpack://pdf.js/node_modules/core-js/modules/es.uint8-array.to-base64.js", "webpack://pdf.js/node_modules/core-js/internals/function-uncurry-this.js", "webpack://pdf.js/node_modules/core-js/internals/environment-v8-version.js", "webpack://pdf.js/node_modules/core-js/internals/iterator-close.js", "webpack://pdf.js/node_modules/core-js/internals/function-call.js", "webpack://pdf.js/node_modules/core-js/modules/es.typed-array.with.js", "webpack://pdf.js/node_modules/core-js/internals/to-positive-integer.js", "webpack://pdf.js/node_modules/core-js/internals/array-includes.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.uint8-array.to-base64.js", "webpack://pdf.js/node_modules/core-js/modules/esnext.uint8-array.set-from-hex.js", "webpack://pdf.js/node_modules/core-js/internals/set-method-get-keys-before-cloning-detection.js", "webpack://pdf.js/node_modules/core-js/internals/array-with.js", "webpack://pdf.js/webpack/bootstrap", "webpack://pdf.js/webpack/runtime/define%20property%20getters", "webpack://pdf.js/webpack/runtime/hasOwnProperty%20shorthand", "webpack://pdf.js/src/shared/util.js", "webpack://pdf.js/src/display/xfa_text.js", "webpack://pdf.js/src/display/xfa_layer.js", "webpack://pdf.js/src/display/display_utils.js", "webpack://pdf.js/src/display/editor/toolbar.js", "webpack://pdf.js/src/display/editor/tools.js", "webpack://pdf.js/src/display/editor/alt_text.js", "webpack://pdf.js/src/display/editor/comment.js", "webpack://pdf.js/src/display/touch_manager.js", "webpack://pdf.js/src/display/editor/editor.js", "webpack://pdf.js/src/shared/murmurhash3.js", "webpack://pdf.js/src/display/annotation_storage.js", "webpack://pdf.js/src/display/font_loader.js", "webpack://pdf.js/src/display/api_utils.js", "webpack://pdf.js/src/shared/message_handler.js", "webpack://pdf.js/src/display/canvas_factory.js", "webpack://pdf.js/src/display/cmap_reader_factory.js", "webpack://pdf.js/src/display/filter_factory.js", "webpack://pdf.js/src/display/standard_fontdata_factory.js", "webpack://pdf.js/src/display/wasm_factory.js", "webpack://pdf.js/src/display/node_utils.js", "webpack://pdf.js/src/display/canvas_dependency_tracker.js", "webpack://pdf.js/src/display/pattern_helper.js", "webpack://pdf.js/src/shared/image_utils.js", "webpack://pdf.js/src/display/canvas.js", "webpack://pdf.js/src/shared/obj-bin-transform.js", "webpack://pdf.js/src/display/worker_options.js", "webpack://pdf.js/src/display/metadata.js", "webpack://pdf.js/src/display/optional_content_config.js", "webpack://pdf.js/src/display/transport_stream.js", "webpack://pdf.js/src/display/content_disposition.js", "webpack://pdf.js/src/display/network_utils.js", "webpack://pdf.js/src/display/fetch_stream.js", "webpack://pdf.js/src/display/network.js", "webpack://pdf.js/src/display/node_stream.js", "webpack://pdf.js/src/display/pdf_objects.js", "webpack://pdf.js/src/display/text_layer.js", "webpack://pdf.js/src/display/api.js", "webpack://pdf.js/src/display/editor/color_picker.js", "webpack://pdf.js/src/shared/scripting_utils.js", "webpack://pdf.js/src/display/svg_factory.js", "webpack://pdf.js/src/display/annotation_layer.js", "webpack://pdf.js/src/display/editor/freetext.js", "webpack://pdf.js/src/display/editor/drawers/outline.js", "webpack://pdf.js/src/display/editor/drawers/freedraw.js", "webpack://pdf.js/src/display/editor/drawers/highlight.js", "webpack://pdf.js/src/display/editor/highlight.js", "webpack://pdf.js/src/display/editor/draw.js", "webpack://pdf.js/src/display/editor/drawers/inkdraw.js", "webpack://pdf.js/src/display/editor/ink.js", "webpack://pdf.js/src/display/editor/drawers/contour.js", "webpack://pdf.js/src/display/editor/drawers/signaturedraw.js", "webpack://pdf.js/src/display/editor/signature.js", "webpack://pdf.js/src/display/editor/stamp.js", "webpack://pdf.js/src/display/editor/annotation_editor_layer.js", "webpack://pdf.js/src/display/draw_layer.js", "webpack://pdf.js/src/pdf.js", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/Exception.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/Shape.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/Point.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/Line.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/TableData.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/Table.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/LineStore.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/Rectangle.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/geometry/index.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/ImageResult.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/InfoResult.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/ParseParameters.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/PathGeometry.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/ScreenshotResult.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/TableResult.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/TextResult.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/PDFParse.ts", "../../../node_modules/.pnpm/pdf-parse@2.4.5/node_modules/pdf-parse/src/pdf-parse/index.ts", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_setup.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/restArguments.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isObject.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isNull.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isUndefined.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isBoolean.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isElement.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_tagTester.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isString.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isNumber.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isDate.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isRegExp.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isError.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isSymbol.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isArrayBuffer.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isFunction.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_hasObjectTag.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_stringTagBug.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isDataView.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isArray.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_has.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isArguments.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isFinite.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isNaN.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/constant.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createSizePropertyCheck.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_shallowProperty.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_getByteLength.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_isBufferLike.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isTypedArray.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_getLength.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_collectNonEnumProps.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/keys.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isEmpty.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isMatch.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/underscore.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_toBufferView.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isEqual.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/allKeys.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_methodFingerprint.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isMap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isWeakMap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isSet.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/isWeakSet.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/values.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/pairs.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/invert.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/functions.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createAssigner.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/extend.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/extendOwn.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/defaults.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_baseCreate.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/create.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/clone.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/tap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/toPath.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_toPath.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_deepGet.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/get.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/has.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/identity.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/matcher.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/property.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_optimizeCb.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_baseIteratee.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/iteratee.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_cb.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/mapObject.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/noop.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/propertyOf.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/times.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/random.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/now.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createEscaper.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_escapeMap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/escape.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_unescapeMap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/unescape.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/templateSettings.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/template.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/result.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/uniqueId.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/chain.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_executeBound.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/partial.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/bind.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_isArrayLike.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_flatten.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/bindAll.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/memoize.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/delay.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/defer.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/throttle.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/debounce.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/wrap.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/negate.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/compose.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/after.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/before.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/once.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/findKey.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createPredicateIndexFinder.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/findIndex.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/findLastIndex.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/sortedIndex.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createIndexFinder.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/indexOf.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/lastIndexOf.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/find.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/findWhere.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/each.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/map.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_createReduce.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/reduce.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/reduceRight.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/filter.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/reject.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/every.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/some.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/contains.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/invoke.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/pluck.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/where.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/max.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/min.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/toArray.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/sample.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/shuffle.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/sortBy.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_group.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/groupBy.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/indexBy.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/countBy.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/partition.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/size.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_keyInObj.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/pick.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/omit.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/initial.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/first.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/rest.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/last.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/compact.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/flatten.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/difference.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/without.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/uniq.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/union.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/intersection.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/unzip.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/zip.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/object.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/range.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/chunk.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/_chainResult.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/mixin.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/underscore-array-methods.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/index.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/index-default.js", "../../../node_modules/.pnpm/underscore@1.13.8/node_modules/underscore/modules/index-all.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/es5.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/util.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/schedule.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/queue.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/async.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/errors.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/thenables.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/promise_array.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/context.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/debuggability.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/finally.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/catch_filter.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/nodeback.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/method.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/bind.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/cancel.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/direct_resolve.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/synchronous_inspection.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/join.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/map.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/call_get.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/using.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/timers.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/generators.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/nodeify.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/promisify.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/props.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/race.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/reduce.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/settle.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/some.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/filter.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/each.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/any.js", "../../../node_modules/.pnpm/bluebird@3.4.7/node_modules/bluebird/js/release/promise.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/promises.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/documents.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/results.js", "../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js", "../../../node_modules/.pnpm/process-nextick-args@2.0.1/node_modules/process-nextick-args/index.js", "../../../node_modules/.pnpm/isarray@1.0.0/node_modules/isarray/index.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/stream.js", "../../../node_modules/.pnpm/safe-buffer@5.1.2/node_modules/safe-buffer/index.js", "../../../node_modules/.pnpm/core-util-is@1.0.3/node_modules/core-util-is/lib/util.js", "../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js", "../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/BufferList.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/node.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/readable.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/support.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/base64.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/nodejsUtils.js", "../../../node_modules/.pnpm/immediate@3.0.6/node_modules/immediate/lib/index.js", "../../../node_modules/.pnpm/lie@3.3.0/node_modules/lie/lib/index.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/external.js", "../../../node_modules/.pnpm/setimmediate@1.0.5/node_modules/setimmediate/setImmediate.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/utils.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/GenericWorker.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/utf8.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/ConvertWorker.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/StreamHelper.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/defaults.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/DataWorker.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/crc32.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/Crc32Probe.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/stream/DataLengthProbe.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/compressedObject.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/zipObject.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js", "../../../node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/flate.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/compressions.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/signature.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/generate/ZipFileWorker.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/generate/index.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/object.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/DataReader.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/ArrayReader.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/StringReader.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/Uint8ArrayReader.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/NodeBufferReader.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/reader/readerFor.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/zipEntry.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/zipEntries.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/load.js", "../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/zipfile.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/xml/nodes.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/conventions.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/dom.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/entities.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/sax.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/dom-parser.js", "../../../node_modules/.pnpm/@xmldom+xmldom@0.8.13/node_modules/@xmldom/xmldom/lib/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/xml/xmldom.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/xml/reader.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/Utility.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLAttribute.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLElement.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLCData.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLComment.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDeclaration.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDTDAttList.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDTDEntity.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDTDElement.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDTDNotation.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDocType.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLRaw.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLText.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDummy.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLNode.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLStringifier.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLWriterBase.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLStringWriter.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDocument.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLDocumentCB.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/XMLStreamWriter.js", "../../../node_modules/.pnpm/xmlbuilder@10.1.1/node_modules/xmlbuilder/lib/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/xml/writer.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/xml/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/office-xml-reader.js", "../../../node_modules/.pnpm/dingbat-to-unicode@1.0.1/node_modules/dingbat-to-unicode/dist/dingbats.js", "../../../node_modules/.pnpm/dingbat-to-unicode@1.0.1/node_modules/dingbat-to-unicode/dist/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/transforms.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/uris.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/body-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/document-xml-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/relationships-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/content-types-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/numbering-xml.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/styles-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/notes-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/comments-reader.js", "../../../node_modules/.pnpm/path-is-absolute@1.0.1/node_modules/path-is-absolute/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/files.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/docx-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/docx/style-map.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/html/ast.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/html/simplify.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/html/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/styles/html-paths.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/images.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/writers/html-writer.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/writers/markdown-writer.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/writers/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/document-to-html.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/raw-text.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/TokenIterator.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/parser.js", "../../../node_modules/.pnpm/option@0.2.4/node_modules/option/index.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/parsing-results.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/errors.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/lazy-iterators.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/rules.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/StringSource.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/Token.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/bottom-up.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/lib/regex-tokeniser.js", "../../../node_modules/.pnpm/lop@0.4.2/node_modules/lop/index.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/styles/document-matchers.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/styles/parser/tokeniser.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/style-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/options-reader.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/unzip.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/underline.js", "../../../node_modules/.pnpm/mammoth@1.12.0/node_modules/mammoth/lib/index.js", "../../server/dist/document-convert-local.js", "../../server/dist/rag-corpus-policy.js", "../../server/dist/server-document-runtime.js", "../../server/dist/provider-rate-limit-retry.js", "../../server/dist/workflow-runtime-contract.js", "../../server/dist/workflow-kernel-v2-db.js", "../../server/dist/workflow-kernel-v2-capacity-locks.js", "../../server/dist/workflow-kernel-v2-json.js", "../../server/dist/workflow-kernel-v2-store.js", "../../server/dist/workflow-checkpoint-policy.js", "../../server/dist/workflow-runner.js", "../../server/dist/auth-oauth-exchange-schema.js", "../../server/dist/rag-ingest-schema.js", "../../server/dist/server-template-marketplace-bootstrap.js", "../../server/dist/server-platform-email-bootstrap.js", "../../server/dist/server-platform-webhook-bootstrap.js", "../../server/dist/server-platform-rls.js", "../../server/dist/server-provider-rate-limit-bootstrap.js", "../../server/dist/server-service-credit-grants-bootstrap.js", "../../server/dist/server-service-price-meters-bootstrap.js", "../../server/dist/server-platform-billing-bootstrap.js", "../../server/dist/server-platform-ai-stream-bootstrap.js", "../../server/dist/server-platform-activity-bootstrap.js", "../../server/dist/server-ai-audio-job-bootstrap.js", "../../server/dist/server-platform-analytics-bootstrap.js", "../../server/dist/server-platform-account-lifecycle-bootstrap.js", "../../server/dist/server-deployment-runtime-bootstrap.js", "../../server/dist/server-app-quota-bootstrap.js", "../../server/dist/server-platform-runtime-preflight-bootstrap.js", "../../server/dist/server-usage-adjustments-bootstrap.js", "../../server/dist/server-usage-metering-bootstrap.js", "../../server/dist/server-platform-migration-diagnostics-bootstrap.js", "../../server/dist/server-platform-deprecated-api-snapshots-bootstrap.js", "../../server/dist/server-platform-db-bootstrap.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/is.js", "../../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/process.js", "../../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/filesystem.js", "../../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/elf.js", "../../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/detect-libc.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/coerce.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/package.json", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/libvips.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/sharp.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/constructor.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/input.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/resize.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/composite.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/operation.js", "../../../node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/color.cjs", "../../../node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/index.cjs", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/colour.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/channel.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/output.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/utility.js", "../../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.js", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/create-id.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/logger.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/promise/tracked-promise.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/scheduler/runner.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/convertion/month-names-conversion.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/convertion/week-day-names-conversion.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/convertion/asterisk-to-range-conversion.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/convertion/range-conversion.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/convertion/index.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/time/localized-time.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/time/matcher-walker.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/time/time-matcher.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/tasks/state-machine.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/tasks/inline-scheduled-task.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/task-registry.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/pattern/validation/pattern-validation.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/tasks/background-scheduled-task/background-scheduled-task.ts", "../../../node_modules/.pnpm/node-cron@4.2.1/node_modules/node-cron/src/node-cron.ts", "../../server/dist/wake-signal/single-flight-wake.js", "../../server/dist/wake-signal/wake-signal-types.js", "../../server/dist/wake-signal/wake-signal-diagnostics.js", "../../server/dist/workflow-resume-args.js", "../../server/dist/wake-signal/postgres-wake-signal-bus.js", "../../server/dist/wake-signal/postgres-wake-signal-runtime.js", "../../server/dist/server-platform-app-proxy-domain.js", "../../server/dist/server-platform-media-worker-storage-runtime.js", "../../server/dist/server-platform-maintenance.js", "../../server/dist/server-realtime-connection-limit.js", "../../server/dist/ws-gateway.js", "../../server/dist/server-node-routing-metrics.js", "../../server/dist/static-file-routing.js", "../../server/dist/server-platform-static-file.js", "../../server/dist/server-app-account-hold.js", "../../server/dist/server-platform-storage-direct.js", "../../server/dist/server-platform-node-routing.js", "../../server/dist/server-platform-app-proxy.js", "../../server/dist/server-db-connection-check.js", "../../server/dist/runtime-reconciliation-policy.js", "../../server/dist/server-platform-auto-recovery.js", "../../server/dist/platform-active-slot.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/types.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronField.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronDayOfMonth.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronDayOfWeek.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronHour.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronMinute.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/errors.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/formats.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/zone.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/zones/systemZone.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/zones/IANAZone.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/locale.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/zones/fixedOffsetZone.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/zones/invalidZone.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/zoneUtil.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/digits.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/settings.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/invalid.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/conversions.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/util.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/english.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/formatter.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/regexParser.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/duration.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/interval.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/info.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/diff.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/impl/tokenParser.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/datetime.js", "../../../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/src/luxon.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/CronDate.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronMonth.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/CronSecond.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/fields/index.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/CronFieldCollection.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/CronExpression.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/utils/random.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/CronExpressionParser.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/CronFileParser.js", "../../../node_modules/.pnpm/cron-parser@5.5.0/node_modules/cron-parser/dist/index.js", "../../server/dist/server-platform-cron-scheduler.js", "../../server/dist/job-admission-policy.js", "../../server/dist/scheduled-jobs-poller.js", "../../server/dist/server-scheduled-jobs-runtime.js", "../../server/dist/server-platform-worker-diagnostics.js", "../../server/dist/server-wake-signal-diagnostics-route.js", "../../server/dist/server-platform-node-routes-bootstrap.js", "../../server/dist/server-platform-ai-audio-worker-runtime.js", "../../server/dist/server-platform-notification-worker-runtime.js", "../../server/dist/server-node-proxy-ws-tunnel.js", "../../server/dist/server-platform-storage-direct-runtime.js", "../../server/dist/server-platform-account-deletion-finalizer-runtime.js", "../../server/dist/runtime-metrics.js", "../../server/dist/server-platform-runtime-bootstrap.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/compose.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/request/constants.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/body.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/url.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/request.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/html.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/context.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/constants.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/hono-base.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/smart-router/router.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/trie-router/node.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/router/trie-router/router.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/hono.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/color.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/middleware/logger/index.js", "../../server/dist/index.js", "../../server/dist/database.js", "../../server/dist/database-config.js", "../../server/dist/runtime-postgres-client.js", "../../server/dist/env-runtime.js", "../../server/dist/server-env-runtime-bootstrap.js", "../../server/dist/server-bootstrap.js", "../../internal/dist/src/introspection/codegen-schema-types.js", "../../internal/dist/src/introspection/crud-route-maps.js", "../../internal/dist/src/introspection/procedure-route-maps.js", "../../internal/dist/src/introspection/functions-entrypoint.js", "../../internal/dist/src/introspection/index.js", "../../internal/dist/src/introspection/source-entrypoints.js", "../../internal/dist/src/introspection/table-introspector.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-CA.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/kh.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ta.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ua.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-CN.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-TW.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-generator.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.js", "../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/coerce.js", "../../internal/dist/src/config/index.js", "../../server/dist/runtime-operation-inventory.js", "../../server/dist/procedure-route-maps.js", "../../server/dist/auditor.js", "../../server/dist/auditor-unsafe-db.js", "../../server/dist/runtime-auth-schema-contract.js", "../../server/dist/server-lifecycle.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/middleware/cors/index.js", "../../server/dist/server-system-schema-bootstrap.js", "../../server/dist/server-main-runtime.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/adapter/bun/serve-static.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/compress.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/mime.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/middleware/serve-static/path.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/middleware/serve-static/index.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/helper/ssg/middleware.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/adapter/bun/ssg.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/helper/websocket/index.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/adapter/bun/server.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/adapter/bun/websocket.js", "../../server/dist/storage-azure-blob.js", "../../server/dist/storage-adapter-limits.js", "../../server/dist/storage-azure-blob-transfer.js", "../../server/dist/storage-azure-direct-upload.js", "../../server/dist/storage-azure-direct-upload-common.js", "../../server/dist/storage-upload-session-catalog.js", "../../server/dist/storage-azure-direct-upload-legacy.js", "../../server/dist/storage-visibility.js", "../../server/dist/storage-read-grant.js", "../../server/dist/storage-system-files-catalog.js", "../../server/dist/storage-local-filesystem.js", "../../server/dist/storage-routes.js", "../../server/dist/storage-metering.js", "../../server/dist/storage-route-access.js", "../../server/dist/storage-config.js", "../../server/dist/storage-limit-config.js", "../../server/dist/admin-function-details.js", "../../server/dist/scheduler.js", "../../server/dist/cron-action-tokens.js", "../../server/dist/cron-schedule-collect.js", "../../server/dist/http-route-collect.js", "../../server/dist/server-ai-runtime.js", "../../server/dist/server-internal-cron-route.js", "../../server/dist/scheduled-action-resolver.js", "../../server/dist/server-declarative-crons.js", "../../server/dist/server-http-actions.js", "../../server/dist/admin.js", "../../server/dist/admin-sql-guard.js", "../../server/dist/server-admin-access.js", "../../server/dist/server-admin-files-query.js", "../../server/dist/server-admin-files-bulk.js", "../../server/dist/server-admin-files.js", "../../server/dist/server-admin-logs.js", "../../server/dist/server-admin-maintenance.js", "../../server/dist/server-admin-redaction.js", "../../server/dist/server-deprecated-runtime-usage.js", "../../server/dist/server-api-surface.js", "../../server/dist/server-process-runtime.js", "../../server/dist/server-request-context.js", "../../server/dist/build-rls-session-context.js", "../../server/dist/rag-operations-metrics.js", "../../server/dist/server-claim-gap-analysis.js", "../../server/dist/server-grounding-common.js", "../../server/dist/server-claim-verifier.js", "../../server/dist/server-grounded-answer-finalizer.js", "../../server/dist/server-grounding-citations.js", "../../server/dist/server-grounded-answer-runtime.js", "../../server/dist/server-search-config.js", "../../server/dist/server-search-runtime.js", "../../server/dist/server-search-lexical-plan.js", "../../server/dist/server-realtime-channel-route.js", "../../server/dist/realtime/realtime-outbox.js", "../../server/dist/server-realtime-outbox-diagnostics-route.js", "../../server/dist/server-realtime-query-route.js", "../../server/dist/server-realtime-ticket-route.js", "../../server/dist/rag-ingest-runtime.js", "../../server/dist/rag-embedding-runtime.js", "../../server/dist/rag-chunk-embedding-persistence.js", "../../server/dist/rag-ingest-metrics.js", "../../server/dist/rag-ingest-policy.js", "../../server/dist/rag-ingest-jobs.js", "../../server/dist/rag-corpora-runtime.js", "../../server/dist/builtins/rag/schemas.js", "../../server/dist/rag-operations-runtime.js", "../../server/dist/cloud-features.js", "../../server/dist/builtins/rag/procedures.js", "../../server/dist/builtins/index.js", "../../client/dist/adapters/procedure-rpc/codec.js", "../../client/dist/adapters/procedure-rpc/handler.js", "../../server/dist/db-retry-policy.js", "../../server/dist/server-rpc-error.js", "../../server/dist/server-rpc-routes.js", "../../server/dist/server-scheduler-bootstrap.js", "../../server/dist/workflow-kernel-v2-dispatcher.js", "../../server/dist/workflow-kernel-v2-durable.js", "../../server/dist/workflow-kernel-v2-runner.js", "../../server/dist/workflow-kernel-v2-capacity.js", "../../server/dist/workflow-kernel-v2-steps.js", "../../server/dist/workflow-kernel-v2-read-model.js", "../../server/dist/workflow-kernel-v2-reconciler.js", "../../server/dist/workflow-kernel-v2-terminalizers.js", "../../server/dist/server-shell-runtime.js", "../../server/dist/server-cloud-dashboard-static.js", "../../server/dist/realtime/http-gateway-fanout.js", "../../server/dist/realtime/local-fanout.js", "../../server/dist/server-platform-analytics-routes.js", "../../server/dist/server-platform-db-routing.js", "../../server/dist/server-main-runtime-helpers.js", "../../server/dist/server-analytics-db.js", "../../server/dist/server-websocket-runtime.js", "../../server/dist/server-request-log-redaction.js", "../../server/dist/auth-schema.js", "../../server/dist/better-auth.js", "../../server/dist/admin-verification-email-delivery.js", "../../server/dist/auth-activity-coverage.js", "../../server/dist/auth-better-auth-delegate-audit.js", "../../server/dist/auth-activity-log.js", "../../server/dist/auth-log-redaction.js", "../../server/dist/auth-activity-transport.js", "../../server/dist/server-origin-policy.js", "../../server/dist/auth-oauth-callback.js", "../../server/dist/auth-oauth-exchange-store.js", "../../server/dist/crypto.js", "../../server/dist/auth-oauth-return-mode.js", "../../server/dist/auth-session-presenter.js", "../../server/dist/better-auth-options.js", "../../server/dist/auth-social-config.js", "../../server/dist/better-auth-trusted-origins.js", "../../server/dist/auth-error-sanitization.js", "../../server/dist/auth-session-resolution.js", "../../server/dist/auth-oauth-invite-reservation.js", "../../server/dist/invite-code.js", "../../server/dist/auth-oauth-signup-handoff.js", "../../server/dist/better-auth-identity.js", "../../server/dist/auth-rate-limit.js", "../../server/dist/server-node-proxy-signature.js", "../../server/dist/server-node-proxy-delegated-auth.js", "../../server/dist/auth-account-status.js", "../../server/dist/auth-account-status-route-guards.js", "../../server/dist/auth-social-signin-route.js", "../../server/dist/platform-legacy-auth.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/encode.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/jwa.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/helper/adapter/index.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/types.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/utf8.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/jws.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/jwt.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/jwt/index.js", "../../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/middleware/jwt/jwt.js", "../../server/dist/settings-db-retry.js", "../../server/dist/settings-db-env.js", "../../server/dist/settings.js", "../../server/dist/platform-failover.js", "../../server/dist/server-platform-config-file.js", "../../server/dist/server-auth-runtime-db.js", "../../server/dist/server-host-aware-cors.js", "../../server/dist/server-runtime-mode.js", "../../server/dist/server-official-domain-canonical.js", "../../server/dist/server-startup-timing.js", "../../server/dist/server-spend-cap.js", "../../server/dist/response-bandwidth-meter.js"],
  "sourcesContent": ["export function defineApi(api) {\n    return api;\n}\n", "function hasStandardSchema(schema) {\n    return (!!schema &&\n        typeof schema === \"object\" &&\n        \"~standard\" in schema &&\n        !!schema[\"~standard\"] &&\n        typeof schema[\"~standard\"].validate === \"function\");\n}\nclass HttpRouteInputValidationError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"HttpRouteInputValidationError\";\n    }\n}\nclass HttpRouteOutputValidationError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"HttpRouteOutputValidationError\";\n    }\n}\nasync function validateInput(schema, value) {\n    if (!schema)\n        return value;\n    if (!hasStandardSchema(schema)) {\n        throw new Error(\"httpRoute .input only supports Standard Schema v1 validators\");\n    }\n    const result = (await schema[\"~standard\"].validate(value));\n    if (\"issues\" in result && result.issues.length > 0) {\n        throw new HttpRouteInputValidationError(result.issues[0]?.message ?? \"Invalid input\");\n    }\n    if (\"value\" in result)\n        return result.value;\n    throw new HttpRouteInputValidationError(\"Invalid input\");\n}\nasync function validateOutput(schema, value) {\n    if (!schema)\n        return value;\n    if (!hasStandardSchema(schema)) {\n        throw new Error(\"httpRoute .output only supports Standard Schema v1 validators\");\n    }\n    const result = (await schema[\"~standard\"].validate(value));\n    if (\"issues\" in result && result.issues.length > 0) {\n        throw new HttpRouteOutputValidationError(result.issues[0]?.message ?? \"Invalid output\");\n    }\n    if (\"value\" in result)\n        return result.value;\n    throw new HttpRouteOutputValidationError(\"Invalid output\");\n}\nconst METHODS_WITH_BODY = new Set([\"POST\", \"PUT\", \"PATCH\"]);\nasync function buildInputFromRequest(method, req) {\n    // GET / DELETE \u2192 query string. POST / PUT / PATCH \u2192 JSON body.\n    if (METHODS_WITH_BODY.has(method)) {\n        try {\n            return await req.json();\n        }\n        catch (err) {\n            const message = err instanceof Error ? err.message : String(err);\n            throw new HttpRouteInputValidationError(`Invalid JSON body: ${message}`);\n        }\n    }\n    return { ...req.query };\n}\nasync function maybeValidateRouteOutput(result, outputSchema) {\n    if (!outputSchema)\n        return result;\n    const isSuccessStatus = result?.status === undefined || result.status < 400;\n    if (!isSuccessStatus)\n        return result;\n    const validatedBody = await validateOutput(outputSchema, result?.body);\n    return { status: result?.status, headers: result?.headers, body: validatedBody };\n}\nfunction composeRouteMiddlewares(middlewares, handler, inputSchema, outputSchema, inputValidationIndex, outputValidationIndex) {\n    return async (initialContext, initialInput, request) => {\n        let idx = -1;\n        const boundedInputValidationIndex = Math.min(Math.max(0, inputValidationIndex), middlewares.length);\n        const boundedOutputValidationIndex = Math.min(Math.max(0, outputValidationIndex), middlewares.length);\n        const run = async (currentIdx, context, input) => {\n            if (currentIdx <= idx) {\n                throw new Error(\"next() called multiple times in the same middleware\");\n            }\n            idx = currentIdx;\n            let currentInput = input;\n            if (currentIdx === boundedInputValidationIndex) {\n                currentInput = (await validateInput(inputSchema, currentInput));\n            }\n            if (currentIdx === middlewares.length) {\n                let result = await handler({ context, input: currentInput, request });\n                if (currentIdx === boundedOutputValidationIndex) {\n                    result = await maybeValidateRouteOutput(result, outputSchema);\n                }\n                return result;\n            }\n            const middleware = middlewares[currentIdx];\n            let result = await middleware({\n                context,\n                input: currentInput,\n                request,\n                next: async (overrides) => {\n                    return await run(currentIdx + 1, (overrides?.context ?? context), (overrides?.input ?? currentInput));\n                },\n            });\n            if (currentIdx === boundedOutputValidationIndex) {\n                result = await maybeValidateRouteOutput(result, outputSchema);\n            }\n            return result;\n        };\n        return await run(0, initialContext, initialInput);\n    };\n}\nclass HttpRouteBuilderImpl {\n    method;\n    routePath;\n    middlewares;\n    inputSchema;\n    outputSchema;\n    inputValidationIndex;\n    outputValidationIndex;\n    anonymousAllowed;\n    constructor(method, routePath, middlewares = [], inputSchema, outputSchema, inputValidationIndex = -1, outputValidationIndex = -1, anonymousAllowed = false) {\n        this.method = method;\n        this.routePath = routePath;\n        this.middlewares = middlewares;\n        this.inputSchema = inputSchema;\n        this.outputSchema = outputSchema;\n        this.inputValidationIndex = inputValidationIndex;\n        this.outputValidationIndex = outputValidationIndex;\n        this.anonymousAllowed = anonymousAllowed;\n    }\n    path(path) {\n        return new HttpRouteBuilderImpl(this.method, path, this.middlewares, this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    allowAnonymous() {\n        return new HttpRouteBuilderImpl(this.method, this.routePath, this.middlewares, this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, true);\n    }\n    use(middleware) {\n        return new HttpRouteBuilderImpl(this.method, this.routePath, [...this.middlewares, middleware], this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    input(schema) {\n        const nextInputValidationIndex = this.middlewares.length;\n        return new HttpRouteBuilderImpl(this.method, this.routePath, this.middlewares, schema, this.outputSchema, nextInputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    output(schema) {\n        const nextOutputValidationIndex = this.middlewares.length;\n        return new HttpRouteBuilderImpl(this.method, this.routePath, this.middlewares, this.inputSchema, schema, this.inputValidationIndex, nextOutputValidationIndex, this.anonymousAllowed);\n    }\n    handler(handler) {\n        if (!this.routePath) {\n            throw new Error(\"httpRoute path is required. Call .path(...) before .handler(...)\");\n        }\n        const method = this.method;\n        const routePath = this.routePath;\n        const isPublic = this.anonymousAllowed;\n        const inputSchema = this.inputSchema;\n        const outputSchema = this.outputSchema;\n        const runRoute = composeRouteMiddlewares(this.middlewares, handler, inputSchema, outputSchema, this.inputValidationIndex, this.outputValidationIndex);\n        const wrappedHandler = async (ctx, req) => {\n            let normalizedInput;\n            try {\n                normalizedInput = inputSchema ? await buildInputFromRequest(method, req) : undefined;\n            }\n            catch (err) {\n                if (err instanceof HttpRouteInputValidationError) {\n                    return { status: 400, body: { error: err.message } };\n                }\n                throw err;\n            }\n            let result;\n            try {\n                result = await runRoute(ctx, normalizedInput, req);\n            }\n            catch (err) {\n                if (err instanceof HttpRouteInputValidationError) {\n                    return { status: 400, body: { error: err.message } };\n                }\n                if (err instanceof HttpRouteOutputValidationError) {\n                    return { status: 500, body: { error: `Output validation failed: ${err.message}` } };\n                }\n                throw err;\n            }\n            return result;\n        };\n        return {\n            method,\n            path: routePath,\n            isPublic,\n            handler: wrappedHandler,\n            middlewares: [...this.middlewares],\n            inputValidationIndex: this.inputValidationIndex,\n            outputValidationIndex: this.outputValidationIndex,\n            ...(inputSchema ? { inputSchema } : {}),\n            ...(outputSchema ? { outputSchema } : {}),\n        };\n    }\n}\n/**\n * Canonical factory for typed `httpRoute.<verb>` builders. Bind once in app `gencow/runtime.ts`\n * with `typeof schema` and optional `AppUser` (see spec-typed-app-context).\n *\n * @example\n * ```ts\n * // gencow/runtime.ts\n * export const httpRoute = createGencowHttpRouteBuilders<typeof schema, AppUser>();\n *\n * // gencow/http-routes.ts\n * const healthz = httpRoute.get.path(\"/api/healthz\").allowAnonymous().handler(...);\n * ```\n */\nexport function createGencowHttpRouteBuilders() {\n    const verb = (method) => new HttpRouteBuilderImpl(method);\n    return {\n        get: verb(\"GET\"),\n        post: verb(\"POST\"),\n        put: verb(\"PUT\"),\n        delete: verb(\"DELETE\"),\n        patch: verb(\"PATCH\"),\n    };\n}\n", "function normalizeCachePart(value) {\n    return value.trim() || \"unknown\";\n}\nexport function buildDocumentCacheKey(input) {\n    const owner = input.ownerUserId?.trim() ? input.ownerUserId.trim() : \"shared\";\n    return [\n        `app:${normalizeCachePart(input.appId)}`,\n        `user:${normalizeCachePart(owner)}`,\n        `corpus:${normalizeCachePart(input.corpus)}`,\n        `source:${normalizeCachePart(input.sourceKey)}`,\n        `checksum:${normalizeCachePart(input.checksum)}`,\n        `provider:${normalizeCachePart(input.provider)}`,\n        `artifact:${normalizeCachePart(input.artifact)}`,\n    ].join(\":\");\n}\n", "export const DEFAULT_WAKE_RETRY_AFTER_SEC = 30;\nexport function buildWakeAppSuccessResult(status, port) {\n    return { ok: true, status, port };\n}\nexport function buildWakeAppBootFailedResult(error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return { ok: false, status: \"boot_failed\", error: message };\n}\nexport function isWakeAppDeferredResult(result) {\n    return !result.ok && (result.status === \"capacity_rejected\" || result.status === \"queue_timeout\");\n}\n", "export const PLATFORM_CAPACITY_PROFILE_ENV = \"GENCOW_CAPACITY_PROFILE\";\nexport const PLATFORM_CAPACITY_ENV_KEYS = [\n    PLATFORM_CAPACITY_PROFILE_ENV,\n    \"MAX_CONCURRENT_RUNNING\",\n    \"MAX_CONCURRENT_WAKE\",\n    \"MAX_WAKE_QUEUE_MS\",\n    \"MIN_AVAILABLE_RAM_MB\",\n    \"WAKE_RETRY_AFTER_SEC\",\n    \"EVICTION_THRESHOLD_MB\",\n    \"GENCOW_SLEEP_TIMEOUT_MINUTES\",\n    \"GENCOW_SLEEP_MAX_PER_CYCLE\",\n    \"WARM_POOL_MIN_IDLE\",\n    \"WARM_POOL_MAX\",\n    \"DEPLOY_CANDIDATE_RESERVE\",\n    \"GENCOW_APP_PORT_RANGE\",\n    \"COWBOX_WARM_POOL_PORT_RANGE\",\n];\nexport const PLATFORM_CAPACITY_PRESETS = Object.freeze({\n    prod: Object.freeze({\n        profile: \"prod\",\n        maxConcurrentRunning: 600,\n        maxConcurrentWake: 20,\n        maxWakeQueueMs: 5000,\n        minAvailableRamMB: 8192,\n        evictionThresholdMB: 16384,\n        sleepTimeoutMinutes: 15,\n        sleepMaxPerCycle: 50,\n        warmPoolMinIdle: 10,\n        warmPoolMax: 650,\n        deployCandidateReserve: 40,\n    }),\n    dev: Object.freeze({\n        profile: \"dev\",\n        maxConcurrentRunning: 60,\n        maxConcurrentWake: 5,\n        maxWakeQueueMs: 3000,\n        minAvailableRamMB: 2048,\n        evictionThresholdMB: 4096,\n        sleepTimeoutMinutes: 10,\n        sleepMaxPerCycle: 20,\n        warmPoolMinIdle: 3,\n        warmPoolMax: 70,\n        deployCandidateReserve: 5,\n    }),\n    local: Object.freeze({\n        profile: \"local\",\n        maxConcurrentRunning: null,\n        maxConcurrentWake: null,\n        maxWakeQueueMs: 5000,\n        minAvailableRamMB: null,\n        evictionThresholdMB: null,\n        sleepTimeoutMinutes: 30,\n        sleepMaxPerCycle: 10,\n        warmPoolMinIdle: 3,\n        warmPoolMax: 10,\n        deployCandidateReserve: 0,\n    }),\n});\nfunction normalizeDomain(value) {\n    return (value || \"\")\n        .trim()\n        .toLowerCase()\n        .replace(/^https?:\\/\\//, \"\")\n        .replace(/\\/.*$/, \"\");\n}\nexport function detectPlatformCapacityProfile(env = process.env) {\n    const explicit = env[PLATFORM_CAPACITY_PROFILE_ENV]?.trim().toLowerCase();\n    if (explicit) {\n        if ([\"prod\", \"production\", \"128gb\"].includes(explicit))\n            return \"prod\";\n        if ([\"dev\", \"development\", \"16gb\"].includes(explicit))\n            return \"dev\";\n        if ([\"local\", \"test\", \"disabled\"].includes(explicit))\n            return \"local\";\n        throw new Error(`Invalid ${PLATFORM_CAPACITY_PROFILE_ENV}: ${explicit}. Expected prod, dev, or local.`);\n    }\n    const baseDomain = normalizeDomain(env.BASE_DOMAIN);\n    if (baseDomain === \"gencow.dev\")\n        return \"dev\";\n    if (baseDomain === \"gencow.app\")\n        return \"prod\";\n    const platformUrl = normalizeDomain(env.GENCOW_PLATFORM_URL);\n    if (platformUrl === \"gencow.dev\")\n        return \"dev\";\n    if (platformUrl === \"gencow.app\")\n        return \"prod\";\n    if (env.NODE_ENV === \"production\" && env.IS_PLATFORM === \"true\")\n        return \"prod\";\n    return \"local\";\n}\nexport function resolvePlatformCapacityPreset(env = process.env) {\n    const profile = detectPlatformCapacityProfile(env);\n    return { ...PLATFORM_CAPACITY_PRESETS[profile] };\n}\n", "export const DEFAULT_GROUNDING_BUDGET = {\n    maxVerifyLoops: 2,\n    maxResearchQueriesPerLoop: 3,\n    maxCitationsPerClaim: 3,\n    maxClaimsPerAnswer: 12,\n};\n", "import { createHash, createHmac, randomBytes, timingSafeEqual } from \"crypto\";\nconst QUERY_TOKEN_PREFIX = \"gencow_qs1\";\nconst QUERY_KEY_SEPARATOR = \"::\";\nconst DEFAULT_TTL_SECONDS = 300;\nconst MAX_TTL_SECONDS = 3600;\nconst MAX_TOKEN_LENGTH = 8192;\nfunction normalizeForStableJson(value) {\n    if (value === undefined)\n        return undefined;\n    if (value === null)\n        return null;\n    if (value instanceof Date)\n        return value.toISOString();\n    if (Array.isArray(value))\n        return value.map((item) => normalizeForStableJson(item));\n    if (typeof value === \"object\") {\n        const source = value;\n        const sorted = {};\n        for (const key of Object.keys(source).sort()) {\n            const normalized = normalizeForStableJson(source[key]);\n            if (normalized !== undefined)\n                sorted[key] = normalized;\n        }\n        return sorted;\n    }\n    return value;\n}\nfunction isEmptyPlainObject(value) {\n    return !!value && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0;\n}\nfunction encodeBase64Url(value) {\n    return Buffer.from(value, \"utf8\").toString(\"base64url\");\n}\nfunction decodeBase64Url(value) {\n    try {\n        return Buffer.from(value, \"base64url\").toString(\"utf8\");\n    }\n    catch {\n        return null;\n    }\n}\nfunction signSegment(segment, secret) {\n    return createHmac(\"sha256\", secret).update(segment).digest(\"base64url\");\n}\nfunction safeEqual(a, b) {\n    const left = Buffer.from(a);\n    const right = Buffer.from(b);\n    return left.length === right.length && timingSafeEqual(left, right);\n}\nfunction resolveTtlMs(ttlSeconds) {\n    const ttl = Number.isFinite(ttlSeconds) && ttlSeconds > 0 ? ttlSeconds : DEFAULT_TTL_SECONDS;\n    return Math.floor(Math.min(ttl, MAX_TTL_SECONDS) * 1000);\n}\nfunction randomNonce() {\n    return randomBytes(16).toString(\"base64url\");\n}\nfunction validateRequiredString(value, label) {\n    if (typeof value !== \"string\" || value.length === 0)\n        throw new Error(`${label} required`);\n}\nfunction isRealtimeSubscriptionPolicy(value) {\n    return value === \"public\" || value === \"authenticated\" || value === \"authorized\";\n}\nexport function normalizeRealtimeQuerySubscriptionEpoch(epoch) {\n    if (epoch === undefined || epoch === null)\n        return undefined;\n    if (typeof epoch === \"number\") {\n        if (!Number.isFinite(epoch))\n            throw new Error(\"epoch must be finite\");\n        return String(epoch);\n    }\n    if (typeof epoch !== \"string\" || epoch.length === 0) {\n        throw new Error(\"epoch must be a non-empty string\");\n    }\n    return epoch;\n}\nexport function buildRealtimeQuerySubscriptionKey(query, args) {\n    validateRequiredString(query, \"query\");\n    const normalized = normalizeForStableJson(args);\n    if (normalized === undefined || isEmptyPlainObject(normalized))\n        return query;\n    return `${query}${QUERY_KEY_SEPARATOR}${JSON.stringify(normalized)}`;\n}\nexport function buildRealtimeQueryScopeHash(input) {\n    validateRequiredString(input.query, \"query\");\n    const normalizedScope = input.scope === undefined\n        ? { query: input.query, subscriptionKey: input.subscriptionKey ?? input.query }\n        : normalizeForStableJson(input.scope);\n    return createHash(\"sha256\").update(JSON.stringify(normalizedScope)).digest(\"base64url\");\n}\nexport function createRealtimeQuerySubscriptionToken(input) {\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.query, \"query\");\n    validateRequiredString(input.userId, \"userId\");\n    validateRequiredString(input.secret, \"secret\");\n    if (!isRealtimeSubscriptionPolicy(input.policy))\n        throw new Error(\"policy required\");\n    const nowMs = input.nowMs ?? Date.now();\n    const args = normalizeForStableJson(input.args);\n    const subscriptionKey = input.subscriptionKey ?? buildRealtimeQuerySubscriptionKey(input.query, args);\n    validateRequiredString(subscriptionKey, \"subscriptionKey\");\n    const epoch = normalizeRealtimeQuerySubscriptionEpoch(input.epoch);\n    const scopeHash = input.scopeHash ??\n        buildRealtimeQueryScopeHash({\n            query: input.query,\n            subscriptionKey,\n            scope: input.scope,\n        });\n    const payload = {\n        v: 1,\n        appName: input.appName,\n        query: input.query,\n        subscriptionKey,\n        policy: input.policy,\n        scopeHash,\n        userId: input.userId,\n        ...(epoch ? { epoch } : {}),\n        iat: nowMs,\n        exp: nowMs + resolveTtlMs(input.ttlSeconds),\n        nonce: input.nonce ?? randomNonce(),\n    };\n    const payloadSegment = encodeBase64Url(JSON.stringify(payload));\n    const signature = signSegment(payloadSegment, input.secret);\n    return `${QUERY_TOKEN_PREFIX}.${payloadSegment}.${signature}`;\n}\nexport function verifyRealtimeQuerySubscriptionToken(token, input) {\n    if (typeof token !== \"string\" || token.length === 0 || token.length > MAX_TOKEN_LENGTH) {\n        return { ok: false, reason: \"malformed\" };\n    }\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.secret, \"secret\");\n    const parts = token.split(\".\");\n    if (parts.length !== 3 || parts[0] !== QUERY_TOKEN_PREFIX)\n        return { ok: false, reason: \"malformed\" };\n    const [, payloadSegment, signature] = parts;\n    if (!safeEqual(signature, signSegment(payloadSegment, input.secret))) {\n        return { ok: false, reason: \"bad_signature\" };\n    }\n    const decoded = decodeBase64Url(payloadSegment);\n    if (!decoded)\n        return { ok: false, reason: \"malformed\" };\n    let payload;\n    try {\n        payload = JSON.parse(decoded);\n    }\n    catch {\n        return { ok: false, reason: \"malformed\" };\n    }\n    if (!payload || typeof payload !== \"object\")\n        return { ok: false, reason: \"invalid_payload\" };\n    const record = payload;\n    if (record.v !== 1 ||\n        typeof record.query !== \"string\" ||\n        typeof record.subscriptionKey !== \"string\" ||\n        typeof record.userId !== \"string\" ||\n        typeof record.scopeHash !== \"string\" ||\n        !isRealtimeSubscriptionPolicy(record.policy)) {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    if (record.appName !== input.appName)\n        return { ok: false, reason: \"app_mismatch\" };\n    if (typeof record.exp !== \"number\" || (input.nowMs ?? Date.now()) >= record.exp) {\n        return { ok: false, reason: \"expired\" };\n    }\n    if (record.epoch !== undefined && (typeof record.epoch !== \"string\" || record.epoch.length === 0)) {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    return {\n        ok: true,\n        appName: String(record.appName),\n        query: record.query,\n        subscriptionKey: record.subscriptionKey,\n        policy: record.policy,\n        scopeHash: record.scopeHash,\n        userId: record.userId,\n        epoch: typeof record.epoch === \"string\" ? record.epoch : undefined,\n        issuedAt: Number(record.iat),\n        expiresAt: record.exp,\n    };\n}\n", "import { buildRealtimeQueryScopeHash, buildRealtimeQuerySubscriptionKey, } from \"./realtime-query-subscription.js\";\nif (!globalThis.__gencow_realtimeQuerySubscriptionRegistry) {\n    globalThis.__gencow_realtimeQuerySubscriptionRegistry = new Map();\n}\nexport const realtimeQuerySubscriptionRegistry = globalThis.__gencow_realtimeQuerySubscriptionRegistry;\nexport function defineRealtimeSubscriptions(subscriptions) {\n    for (const [name, def] of Object.entries(subscriptions)) {\n        realtimeQuerySubscriptionRegistry.set(name, {\n            name,\n            policy: def.policy,\n            argsSchema: def.args,\n            subscriptionKey: def.subscriptionKey,\n            scope: def.scope,\n            authorize: def.authorize,\n        });\n    }\n    return subscriptions;\n}\nexport function getRealtimeSubscriptionDef(name) {\n    return realtimeQuerySubscriptionRegistry.get(name);\n}\nexport function getRegisteredRealtimeSubscriptions() {\n    return [...realtimeQuerySubscriptionRegistry.keys()];\n}\nexport function resolveRealtimeQuerySubscriptionKey(params) {\n    if (params.result === false || params.result === null)\n        return null;\n    if (typeof params.result === \"string\")\n        return params.result.length > 0 ? params.result : null;\n    if (params.result && typeof params.result === \"object\" && \"subscriptionKey\" in params.result) {\n        const key = params.result.subscriptionKey;\n        if (key !== undefined)\n            return typeof key === \"string\" && key.length > 0 ? key : null;\n    }\n    const def = getRealtimeSubscriptionDef(params.query);\n    const subscriptionKey = def?.subscriptionKey?.(params.args);\n    if (subscriptionKey !== undefined) {\n        return typeof subscriptionKey === \"string\" && subscriptionKey.length > 0 ? subscriptionKey : null;\n    }\n    return buildRealtimeQuerySubscriptionKey(params.query, params.args);\n}\nexport function resolveRealtimeQueryScopeHash(params) {\n    const objectResult = params.result && typeof params.result === \"object\" && !Array.isArray(params.result)\n        ? params.result\n        : null;\n    const resultScope = objectResult && \"scope\" in objectResult ? objectResult.scope : undefined;\n    const def = getRealtimeSubscriptionDef(params.query);\n    const scope = resultScope !== undefined ? resultScope : def?.scope?.(params.args);\n    return buildRealtimeQueryScopeHash({\n        query: params.query,\n        subscriptionKey: params.subscriptionKey,\n        scope,\n    });\n}\nexport function resetRealtimeSubscriptionRegistryForTests() {\n    realtimeQuerySubscriptionRegistry.clear();\n}\n", "import { defineRealtimeSubscriptions } from \"./realtime-query-registry.js\";\nif (!globalThis.__gencow_queryRegistry)\n    globalThis.__gencow_queryRegistry = new Map();\n/**\n * @deprecated Internal legacy registry.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport const queryRegistry = globalThis.__gencow_queryRegistry;\n/**\n * @deprecated Use `procedure.query` from your app's `gencow/runtime.ts` instead.\n */\nexport function query(key, handlerOrDef) {\n    let handler;\n    let argsSchema;\n    let isPublic = false;\n    let realtime;\n    if (typeof handlerOrDef === \"function\") {\n        handler = handlerOrDef;\n    }\n    else {\n        handler = handlerOrDef.handler;\n        argsSchema = handlerOrDef.args;\n        isPublic = handlerOrDef.public === true;\n        realtime = handlerOrDef.realtime;\n    }\n    const def = { key, handler, argsSchema, isPublic, realtime };\n    queryRegistry.set(key, def);\n    if (realtime) {\n        const subscriptionInput = {\n            [key]: {\n                ...realtime,\n                args: realtime.args ?? argsSchema,\n            },\n        };\n        defineRealtimeSubscriptions(subscriptionInput);\n    }\n    return def;\n}\n/**\n * @deprecated Legacy query registry API.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport function getQueryHandler(key) {\n    return queryRegistry.get(key)?.handler;\n}\n/**\n * @deprecated Legacy query registry API.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport function getQueryDef(key) {\n    return queryRegistry.get(key);\n}\n/**\n * @deprecated Legacy query registry API.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport function getRegisteredQueries() {\n    return Array.from(queryRegistry.keys());\n}\n", "import { createHmac, randomBytes, timingSafeEqual } from \"crypto\";\nconst CHANNEL_KEY_SEPARATOR = \"::\";\nconst TOKEN_PREFIX = \"gencow_ch1\";\nconst DEFAULT_TTL_SECONDS = 300;\nconst MAX_TTL_SECONDS = 3600;\nconst MAX_TOKEN_LENGTH = 8192;\nfunction normalizeForStableJson(value) {\n    if (value === undefined)\n        return undefined;\n    if (value === null)\n        return null;\n    if (value instanceof Date)\n        return value.toISOString();\n    if (Array.isArray(value))\n        return value.map((item) => normalizeForStableJson(item));\n    if (typeof value === \"object\") {\n        const source = value;\n        const sorted = {};\n        for (const key of Object.keys(source).sort()) {\n            const normalized = normalizeForStableJson(source[key]);\n            if (normalized !== undefined)\n                sorted[key] = normalized;\n        }\n        return sorted;\n    }\n    return value;\n}\nfunction isEmptyPlainObject(value) {\n    return !!value && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0;\n}\nfunction encodeBase64Url(value) {\n    return Buffer.from(value, \"utf8\").toString(\"base64url\");\n}\nfunction decodeBase64Url(value) {\n    try {\n        return Buffer.from(value, \"base64url\").toString(\"utf8\");\n    }\n    catch {\n        return null;\n    }\n}\nfunction signSegment(segment, secret) {\n    return createHmac(\"sha256\", secret).update(segment).digest(\"base64url\");\n}\nfunction safeEqual(a, b) {\n    const left = Buffer.from(a);\n    const right = Buffer.from(b);\n    return left.length === right.length && timingSafeEqual(left, right);\n}\nfunction resolveTtlMs(ttlSeconds) {\n    const ttl = Number.isFinite(ttlSeconds) && ttlSeconds > 0 ? ttlSeconds : DEFAULT_TTL_SECONDS;\n    return Math.floor(Math.min(ttl, MAX_TTL_SECONDS) * 1000);\n}\nfunction randomNonce() {\n    return randomBytes(16).toString(\"base64url\");\n}\nfunction validateRequiredString(value, label) {\n    if (typeof value !== \"string\" || value.length === 0) {\n        throw new Error(`${label} required`);\n    }\n}\nexport function normalizeRealtimeChannelEpoch(epoch) {\n    if (epoch === undefined || epoch === null)\n        return undefined;\n    if (typeof epoch === \"number\") {\n        if (!Number.isFinite(epoch))\n            throw new Error(\"epoch must be finite\");\n        return String(epoch);\n    }\n    if (typeof epoch !== \"string\" || epoch.length === 0) {\n        throw new Error(\"epoch must be a non-empty string\");\n    }\n    return epoch;\n}\nexport function buildRealtimeChannelKey(channel, args) {\n    validateRequiredString(channel, \"channel\");\n    const normalized = normalizeForStableJson(args);\n    if (normalized === undefined || isEmptyPlainObject(normalized))\n        return channel;\n    return `${channel}${CHANNEL_KEY_SEPARATOR}${JSON.stringify(normalized)}`;\n}\nexport function createRealtimeChannelToken(input) {\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.channel, \"channel\");\n    if (input.channelKey !== undefined)\n        validateRequiredString(input.channelKey, \"channelKey\");\n    validateRequiredString(input.userId, \"userId\");\n    validateRequiredString(input.secret, \"secret\");\n    const nowMs = input.nowMs ?? Date.now();\n    const args = normalizeForStableJson(input.args);\n    const epoch = normalizeRealtimeChannelEpoch(input.epoch);\n    const payload = {\n        v: 1,\n        appName: input.appName,\n        channel: input.channel,\n        channelKey: input.channelKey ?? buildRealtimeChannelKey(input.channel, args),\n        args,\n        userId: input.userId,\n        ...(epoch ? { epoch } : {}),\n        iat: nowMs,\n        exp: nowMs + resolveTtlMs(input.ttlSeconds),\n        nonce: input.nonce ?? randomNonce(),\n    };\n    const payloadSegment = encodeBase64Url(JSON.stringify(payload));\n    const signature = signSegment(payloadSegment, input.secret);\n    return `${TOKEN_PREFIX}.${payloadSegment}.${signature}`;\n}\nexport function verifyRealtimeChannelToken(token, input) {\n    if (typeof token !== \"string\" || token.length === 0 || token.length > MAX_TOKEN_LENGTH) {\n        return { ok: false, reason: \"malformed\" };\n    }\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.secret, \"secret\");\n    const parts = token.split(\".\");\n    if (parts.length !== 3 || parts[0] !== TOKEN_PREFIX)\n        return { ok: false, reason: \"malformed\" };\n    const [, payloadSegment, signature] = parts;\n    if (!safeEqual(signature, signSegment(payloadSegment, input.secret))) {\n        return { ok: false, reason: \"bad_signature\" };\n    }\n    const decoded = decodeBase64Url(payloadSegment);\n    if (!decoded)\n        return { ok: false, reason: \"malformed\" };\n    let payload;\n    try {\n        payload = JSON.parse(decoded);\n    }\n    catch {\n        return { ok: false, reason: \"malformed\" };\n    }\n    if (payload?.v !== 1 || typeof payload.channel !== \"string\" || typeof payload.userId !== \"string\") {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    if (payload.appName !== input.appName)\n        return { ok: false, reason: \"app_mismatch\" };\n    if (typeof payload.exp !== \"number\" || (input.nowMs ?? Date.now()) >= payload.exp) {\n        return { ok: false, reason: \"expired\" };\n    }\n    if (typeof payload.channelKey !== \"string\" || payload.channelKey.length === 0) {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    if (payload.epoch !== undefined && (typeof payload.epoch !== \"string\" || payload.epoch.length === 0)) {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    return {\n        ok: true,\n        appName: payload.appName,\n        channel: payload.channel,\n        channelKey: payload.channelKey,\n        args: payload.args,\n        userId: payload.userId,\n        epoch: payload.epoch,\n        issuedAt: payload.iat,\n        expiresAt: payload.exp,\n    };\n}\n", "import { buildRealtimeChannelKey } from \"./realtime-channel.js\";\nif (!globalThis.__gencow_realtimeChannelRegistry) {\n    globalThis.__gencow_realtimeChannelRegistry = new Map();\n}\nexport const realtimeChannelRegistry = globalThis.__gencow_realtimeChannelRegistry;\nexport function defineRealtimeChannels(channels) {\n    for (const [name, def] of Object.entries(channels)) {\n        realtimeChannelRegistry.set(name, {\n            name,\n            argsSchema: def.args,\n            channelKey: def.channelKey,\n            authorize: def.authorize,\n        });\n    }\n    return channels;\n}\nexport function getRealtimeChannelDef(name) {\n    return realtimeChannelRegistry.get(name);\n}\nexport function getRegisteredRealtimeChannels() {\n    return [...realtimeChannelRegistry.keys()];\n}\nexport function resolveRealtimeChannelKey(params) {\n    if (params.result === false || params.result === null)\n        return null;\n    if (typeof params.result === \"string\")\n        return params.result.length > 0 ? params.result : null;\n    if (params.result && typeof params.result === \"object\" && \"channelKey\" in params.result) {\n        const channelKey = params.result.channelKey;\n        if (channelKey !== undefined)\n            return typeof channelKey === \"string\" && channelKey.length > 0 ? channelKey : null;\n    }\n    const def = getRealtimeChannelDef(params.channel);\n    const channelKey = def?.channelKey?.(params.args);\n    if (channelKey !== undefined)\n        return typeof channelKey === \"string\" && channelKey.length > 0 ? channelKey : null;\n    return buildRealtimeChannelKey(params.channel, params.args);\n}\nexport function resetRealtimeChannelRegistryForTests() {\n    realtimeChannelRegistry.clear();\n}\n", "import { queryRegistry } from \"./reactive-query.js\";\nimport { createRealtimeChannelToken, normalizeRealtimeChannelEpoch, } from \"./realtime-channel.js\";\nimport { resolveRealtimeChannelKey } from \"./realtime-channel-registry.js\";\nimport { createRealtimeQuerySubscriptionToken, normalizeRealtimeQuerySubscriptionEpoch, } from \"./realtime-query-subscription.js\";\nimport { resolveRealtimeQueryScopeHash, resolveRealtimeQuerySubscriptionKey, } from \"./realtime-query-registry.js\";\nconst SUBSCRIPTION_KEY_SEPARATOR = \"::\";\nfunction createRealtimeEventId() {\n    const randomUUID = globalThis.crypto?.randomUUID;\n    if (typeof randomUUID === \"function\")\n        return `evt_${randomUUID.call(globalThis.crypto)}`;\n    return `evt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;\n}\nfunction normalizeForStableJson(value) {\n    if (value === undefined)\n        return undefined;\n    if (value === null)\n        return null;\n    if (value instanceof Date)\n        return value.toISOString();\n    if (Array.isArray(value))\n        return value.map((item) => normalizeForStableJson(item));\n    if (typeof value === \"object\") {\n        const source = value;\n        const sorted = {};\n        for (const key of Object.keys(source).sort()) {\n            const normalized = normalizeForStableJson(source[key]);\n            if (normalized !== undefined)\n                sorted[key] = normalized;\n        }\n        return sorted;\n    }\n    return value;\n}\nfunction isEmptyPlainObject(value) {\n    return !!value && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0;\n}\n/** Stable subscription key for WebSocket / invalidate fanout (also used by crud for query keys). */\nexport function buildQuerySubscriptionKey(queryKey, args) {\n    const normalized = normalizeForStableJson(args);\n    if (normalized === undefined || isEmptyPlainObject(normalized))\n        return queryKey;\n    return `${queryKey}${SUBSCRIPTION_KEY_SEPARATOR}${JSON.stringify(normalized)}`;\n}\nexport function subscriptionKeyMatchesQueryKey(subscriptionKey, queryKey) {\n    return (subscriptionKey === queryKey || subscriptionKey.startsWith(`${queryKey}${SUBSCRIPTION_KEY_SEPARATOR}`));\n}\n/**\n * mutation \uC2E4\uD589 \uC2DC\uC810\uC5D0 \uC0DD\uC131\uB418\uB294 RealtimeCtx.\n * emit(): \uB370\uC774\uD130\uB97C \uC9C1\uC811 push (\uCD08\uACE0\uBE48\uB3C4 mutation\uC6A9).\n * refresh(): queryKey\uB97C pending \uD050\uC5D0 \uCD94\uAC00, mutation \uC644\uB8CC \uD6C4 \uC11C\uBC84\uAC00 query re-run\uD558\uC5EC push.\n *\n * \uD83D\uDCA1 Batching: \uAC19\uC740 queryKey\uC5D0 \uB300\uD55C emit\uC774 50ms \uB0B4\uC5D0 \uC5EC\uB7EC \uBC88 \uD638\uCD9C\uB418\uBA74\n * \uB9C8\uC9C0\uB9C9 \uB370\uC774\uD130\uB9CC push\uD558\uC5EC \uBD88\uD544\uC694\uD55C \uC804\uC1A1\uC744 \uBC29\uC9C0\uD569\uB2C8\uB2E4.\n *\n * \u26A0\uFE0F \uB9E4 mutation \uD638\uCD9C\uB9C8\uB2E4 \uC0C8\uB85C \uC0DD\uC131\uD574\uC57C \uD569\uB2C8\uB2E4 (debounce timer\uAC00 mutation scope\uC5D0 \uACA9\uB9AC).\n *\n * @param options.fanout        Runtime-specific fanout adapter.\n * @param options.queryMap      legacy `query()` registry \u2014 refresh()\uC5D0\uC11C query handler\uB97C \uCC3E\uC544 re-run.\n * @param options.getProcedureQuery  `procedure.query` lookup \u2014 arg-less queries re-run; arg queries invalidate.\n * @param options.buildCtxForRefresh  refresh \uC2DC query handler\uC5D0 \uC804\uB2EC\uD560 ctx \uC0DD\uC131 \uD568\uC218.\n */\nexport function buildRealtimeCtx(options) {\n    const pendingEmits = new Map();\n    const pendingEvents = [];\n    const _pendingRefresh = [];\n    let _hasEmitted = false;\n    function dispatchEvent(event) {\n        if (options.deferFanout) {\n            pendingEvents.push(event);\n            return;\n        }\n        void options.fanout.notify(event);\n    }\n    return {\n        emit(queryKey, data) {\n            _hasEmitted = true;\n            if (options.deferFanout) {\n                pendingEvents.push({ type: \"emit\", queryKey, data });\n                return;\n            }\n            // \uAE30\uC874 pending timer\uAC00 \uC788\uC73C\uBA74 \uCDE8\uC18C (debounce)\n            const existing = pendingEmits.get(queryKey);\n            if (existing)\n                clearTimeout(existing.timer);\n            const timer = setTimeout(() => {\n                pendingEmits.delete(queryKey);\n                dispatchEvent({ type: \"emit\", queryKey, data });\n            }, 50); // 50ms batch window\n            pendingEmits.set(queryKey, { data, timer });\n        },\n        invalidate(queryKey) {\n            _hasEmitted = true;\n            const queryKeys = Array.isArray(queryKey) ? [...new Set(queryKey)] : [queryKey];\n            dispatchEvent({ type: \"invalidate\", queryKeys });\n        },\n        refresh(queryKey) {\n            _hasEmitted = true; // \uACBD\uACE0 \uC5B5\uC81C\n            if (!_pendingRefresh.includes(queryKey)) {\n                _pendingRefresh.push(queryKey);\n            }\n        },\n        channel(channel, args) {\n            const channelKey = resolveRealtimeChannelKey({ channel, args });\n            if (!channelKey)\n                throw new Error(`Realtime channel \"${channel}\" resolved to an invalid channelKey`);\n            return {\n                authorize(authOptions) {\n                    if (!options.appName || !options.channelTokenSecret || !options.auth) {\n                        throw new Error(\"Authorized realtime channel token signer is not configured\");\n                    }\n                    const user = options.auth.requireAuth();\n                    const nowMs = authOptions?.nowMs ?? Date.now();\n                    const rawTtl = authOptions?.ttlSeconds;\n                    const ttlSeconds = Number.isFinite(rawTtl) && rawTtl > 0 ? Math.min(rawTtl, 3600) : 300;\n                    const epoch = normalizeRealtimeChannelEpoch(authOptions?.epoch);\n                    return {\n                        token: createRealtimeChannelToken({\n                            appName: options.appName,\n                            channel,\n                            channelKey,\n                            args,\n                            userId: user.id,\n                            secret: options.channelTokenSecret,\n                            ttlSeconds,\n                            nowMs,\n                            nonce: authOptions?.nonce,\n                            epoch,\n                        }),\n                        channel,\n                        channelKey,\n                        userId: user.id,\n                        expiresAt: nowMs + Math.floor(ttlSeconds * 1000),\n                        ...(epoch ? { epoch } : {}),\n                    };\n                },\n                publish(data, publishOptions) {\n                    _hasEmitted = true;\n                    dispatchEvent({\n                        type: \"channel_publish\",\n                        channelKey,\n                        data,\n                        eventId: publishOptions?.eventId ?? createRealtimeEventId(),\n                    });\n                },\n                invalidate() {\n                    _hasEmitted = true;\n                    dispatchEvent({ type: \"channel_invalidate\", channelKey });\n                },\n                revoke(revokeOptions) {\n                    _hasEmitted = true;\n                    const epoch = normalizeRealtimeChannelEpoch(revokeOptions?.epoch);\n                    const reason = typeof revokeOptions?.reason === \"string\" && revokeOptions.reason.length > 0\n                        ? revokeOptions.reason\n                        : undefined;\n                    dispatchEvent({\n                        type: \"channel_revoke\",\n                        channelKey,\n                        ...(epoch ? { epoch } : {}),\n                        ...(reason ? { reason } : {}),\n                    });\n                },\n            };\n        },\n        query(query, args) {\n            const subscriptionKey = resolveRealtimeQuerySubscriptionKey({ query, args });\n            if (!subscriptionKey)\n                throw new Error(`Realtime query \"${query}\" resolved to an invalid subscriptionKey`);\n            const scopeHash = resolveRealtimeQueryScopeHash({ query, args, subscriptionKey });\n            return {\n                authorize(authOptions) {\n                    if (!options.appName || !options.channelTokenSecret || !options.auth) {\n                        throw new Error(\"Authorized realtime query token signer is not configured\");\n                    }\n                    const user = options.auth.requireAuth();\n                    const nowMs = authOptions?.nowMs ?? Date.now();\n                    const rawTtl = authOptions?.ttlSeconds;\n                    const ttlSeconds = Number.isFinite(rawTtl) && rawTtl > 0 ? Math.min(rawTtl, 3600) : 300;\n                    const epoch = normalizeRealtimeQuerySubscriptionEpoch(authOptions?.epoch);\n                    return {\n                        token: createRealtimeQuerySubscriptionToken({\n                            appName: options.appName,\n                            query,\n                            subscriptionKey,\n                            args,\n                            scopeHash,\n                            policy: \"authorized\",\n                            userId: user.id,\n                            secret: options.channelTokenSecret,\n                            ttlSeconds,\n                            nowMs,\n                            nonce: authOptions?.nonce,\n                            epoch,\n                        }),\n                        query,\n                        subscriptionKey,\n                        policy: \"authorized\",\n                        userId: user.id,\n                        expiresAt: nowMs + Math.floor(ttlSeconds * 1000),\n                        ...(epoch ? { epoch } : {}),\n                    };\n                },\n                invalidate(invalidateOptions) {\n                    _hasEmitted = true;\n                    dispatchEvent({\n                        type: \"query_invalidate\",\n                        query,\n                        subscriptionKey,\n                        scopeHash,\n                        eventId: invalidateOptions?.eventId ?? createRealtimeEventId(),\n                    });\n                },\n                revoke(revokeOptions) {\n                    _hasEmitted = true;\n                    const epoch = normalizeRealtimeQuerySubscriptionEpoch(revokeOptions?.epoch);\n                    const reason = typeof revokeOptions?.reason === \"string\" && revokeOptions.reason.length > 0\n                        ? revokeOptions.reason\n                        : undefined;\n                    dispatchEvent({\n                        type: \"query_revoke\",\n                        query,\n                        subscriptionKey,\n                        scopeHash,\n                        ...(epoch ? { epoch } : {}),\n                        ...(reason ? { reason } : {}),\n                    });\n                },\n            };\n        },\n        invalidateScoped(input) {\n            _hasEmitted = true;\n            const subscriptionKey = input.subscriptionKey ??\n                resolveRealtimeQuerySubscriptionKey({ query: input.query, args: input.args });\n            if (!subscriptionKey)\n                throw new Error(`Realtime query \"${input.query}\" resolved to an invalid subscriptionKey`);\n            const scopeHash = input.scopeHash ??\n                resolveRealtimeQueryScopeHash({\n                    query: input.query,\n                    args: input.args,\n                    subscriptionKey,\n                });\n            dispatchEvent({\n                type: \"query_invalidate\",\n                query: input.query,\n                subscriptionKey,\n                scopeHash,\n                eventId: input.eventId ?? createRealtimeEventId(),\n            });\n        },\n        invalidateCrudQuery(input) {\n            _hasEmitted = true;\n            const subscriptionKey = input.subscriptionKey ??\n                resolveRealtimeQuerySubscriptionKey({ query: input.query, args: input.args });\n            if (!subscriptionKey)\n                throw new Error(`Realtime query \"${input.query}\" resolved to an invalid subscriptionKey`);\n            const scopeHash = input.scopeHash ??\n                resolveRealtimeQueryScopeHash({\n                    query: input.query,\n                    args: input.args,\n                    subscriptionKey,\n                });\n            dispatchEvent({\n                type: \"query_invalidate\",\n                query: input.query,\n                subscriptionKey,\n                scopeHash,\n                eventId: input.eventId ?? createRealtimeEventId(),\n                legacyQueryKey: input.legacyQueryKey,\n                crudRealtimeEmitMode: input.crudRealtimeEmitMode ?? options.generatedCrudRealtimeEmitMode ?? \"dual\",\n            });\n        },\n        get _hasEmitted() {\n            return _hasEmitted;\n        },\n        get _pendingRefresh() {\n            return [..._pendingRefresh];\n        },\n        async _flushRefresh() {\n            if (_pendingRefresh.length === 0)\n                return;\n            // queryMap\uC774 \uC5C6\uC73C\uBA74 refresh \uB3D9\uC791 \uBD88\uAC00 (\uB85C\uADF8 \uACBD\uACE0)\n            const qMap = options.queryMap ?? queryRegistry;\n            for (const key of _pendingRefresh) {\n                const legacyDef = qMap.get(key);\n                const procedureDef = legacyDef ? undefined : options.getProcedureQuery?.(key);\n                if (!legacyDef && !procedureDef) {\n                    console.warn(`[gencow] refresh(\"${key}\"): query not found in registry. Skipping.`);\n                    continue;\n                }\n                // procedure.query with input cannot re-run without subscriber args \u2014 invalidate instead.\n                if (procedureDef?.inputSchema) {\n                    options.fanout.notify({ type: \"invalidate\", queryKeys: [key] });\n                    continue;\n                }\n                try {\n                    // refresh\uC6A9 ctx \uC0DD\uC131 (mutation ctx\uC640 \uB3D9\uC77C\uD55C DB/auth \uC2A4\uCF54\uD504)\n                    if (!options.buildCtxForRefresh) {\n                        console.warn(`[gencow] \u26A0\uFE0F  refresh(\"${key}\"): buildCtxForRefresh not provided. ` +\n                            `Query handler will receive an empty ctx \u2014 ctx.db will be undefined. ` +\n                            `This is a framework configuration error. ` +\n                            `\uD83D\uDCA1 Ensure buildRealtimeCtx() receives a buildCtxForRefresh callback.`);\n                    }\n                    const refreshCtx = options.buildCtxForRefresh?.() ?? {};\n                    const result = legacyDef\n                        ? await legacyDef.handler(refreshCtx, {})\n                        : await procedureDef.handler(refreshCtx, {});\n                    // emit\uACFC \uB3D9\uC77C\uD55C \uACBD\uB85C\uB85C push\n                    dispatchEvent({ type: \"emit\", queryKey: key, data: result });\n                }\n                catch (e) {\n                    console.warn(`[gencow] refresh(\"${key}\") failed:`, e instanceof Error ? e.message : e);\n                }\n            }\n            _pendingRefresh.length = 0;\n        },\n        async _flushRealtimeEvents() {\n            while (pendingEvents.length > 0) {\n                const event = pendingEvents.shift();\n                await options.fanout.notify(event);\n            }\n        },\n    };\n}\n", "if (!globalThis.__gencow_mutationRegistry)\n    globalThis.__gencow_mutationRegistry = [];\n/**\n * @deprecated Internal legacy registry.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport const mutationRegistry = globalThis.__gencow_mutationRegistry;\nlet mutationCounter = 0;\n/**\n * mutation \u2014 \uB370\uC774\uD130 \uBCC0\uACBD \uD568\uC218\uB97C \uC120\uC5B8\uC801\uC73C\uB85C \uB4F1\uB85D\uD569\uB2C8\uB2E4.\n *\n * @deprecated Use `procedure.mutation` from your app's `gencow/runtime.ts` instead.\n *\n * 3\uAC00\uC9C0 \uD638\uCD9C \uBC29\uC2DD \uC9C0\uC6D0 (query\uC640 \uB3D9\uC77C\uD55C \uD328\uD134 \uC6B0\uC120):\n *\n * @example\n * ```typescript\n * // \u2705 \uAD8C\uC7A5: query\uC640 \uB3D9\uC77C\uD55C (name, def) \uD328\uD134\n * mutation(\"tasks.create\", {\n *     args: { title: v.string() },\n *     handler: async (ctx, args) => { ... },\n * });\n *\n * // \u2705 \uAC1D\uCCB4 \uC2A4\uD0C0\uC77C (\uD558\uC704 \uD638\uD658)\n * mutation({\n *     name: \"tasks.create\",\n *     handler: async (ctx) => { ... },\n * });\n *\n * // \u26A0\uFE0F Legacy \uBC30\uC5F4 \uC2A4\uD0C0\uC77C (\uBE44\uAD8C\uC7A5)\n * mutation([\"tasks.list\"], handler, \"tasks.create\");\n * ```\n *\n * @note invalidates \uD544\uB4DC\uB294 deprecated \u2014 \uC804\uB2EC\uD574\uB3C4 \uBB34\uC2DC\uB429\uB2C8\uB2E4.\n *       \uB9AC\uC5BC\uD0C0\uC784 UI \uAC31\uC2E0\uC5D0\uB294 ctx.realtime.emit() \uB610\uB294 ctx.realtime.refresh()\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.\n */\nexport function mutation(nameOrInvalidatesOrDef, handlerOrDef, name) {\n    let argsSchema;\n    let actualHandler;\n    let mutName;\n    let isPublic = false;\n    if (typeof nameOrInvalidatesOrDef === \"string\") {\n        // New primary style: mutation(\"name\", { args?, public?, handler })\n        mutName = nameOrInvalidatesOrDef;\n        const def = handlerOrDef;\n        actualHandler = def.handler;\n        argsSchema = def.args;\n        isPublic = def.public === true;\n    }\n    else if (Array.isArray(nameOrInvalidatesOrDef)) {\n        // Legacy style: mutation([...], handler, \"name\") \u2014 invalidates ignored\n        actualHandler = handlerOrDef;\n        mutName = name || `mutation_${++mutationCounter}`;\n    }\n    else {\n        // Object style: mutation({ name?, args?, public?, handler })\n        actualHandler = nameOrInvalidatesOrDef.handler;\n        argsSchema = nameOrInvalidatesOrDef.args;\n        isPublic = nameOrInvalidatesOrDef.public === true;\n        mutName =\n            nameOrInvalidatesOrDef.name ||\n                (typeof name === \"string\" ? name : \"\") ||\n                `mutation_${++mutationCounter}`;\n    }\n    // \uC774\uB984 \uBBF8\uC9C0\uC815 \uC2DC \uACBD\uACE0 \u2014 \uB514\uBC84\uAE45 \uC9C0\uC6D0\n    if (mutName.startsWith(\"mutation_\")) {\n        console.warn(`[gencow] mutation registered without explicit name \u2192 \"${mutName}\". ` +\n            `Use mutation(\"myMutation\", { handler }) for better debugging.`);\n    }\n    const def = {\n        name: mutName,\n        handler: actualHandler,\n        argsSchema,\n        isPublic,\n    };\n    mutationRegistry.push(def);\n    return def;\n}\n/**\n * @deprecated Legacy mutation registry API.\n * Use `procedure` from your app's `gencow/runtime.ts` instead.\n */\nexport function getRegisteredMutations() {\n    return [...mutationRegistry];\n}\n", "/**\n * packages/core/src/v.ts\n *\n * Convex-style schema validator for API arguments.\n * Provides runtime validation, TypeScript inference, and Standard Schema v1\n * (`~standard.validate`) for procedure.query / procedure.mutation.\n */\n/**\n * Validation-specific error \u2014 thrown by parseArgs on invalid input.\n * Allows the server dispatcher to safely distinguish 400 from 500\n * without fragile string-matching on the error message.\n */\nexport class GencowValidationError extends Error {\n    statusCode = 400;\n    constructor(message) {\n        super(message);\n        this.name = \"GencowValidationError\";\n    }\n}\n/** Resolves unwrapped field schema for `v.object` JSON Schema and `required` keys. */\nconst GENCOW_OPTIONAL_INNER = Symbol.for(\"gencow.v.optionalInner\");\nfunction assertStandardResult(value) {\n    return { value };\n}\nfunction failStandardResult(message) {\n    return { issues: [{ message }] };\n}\nfunction readJsonSchemaFragment(validator) {\n    const opt = validator[GENCOW_OPTIONAL_INNER];\n    const target = opt ?? validator;\n    const raw = target[\"~standard\"]?.jsonSchema;\n    if (raw === undefined)\n        return {};\n    return typeof raw === \"function\" ? raw() : raw;\n}\nfunction isOptionalValidator(validator) {\n    return !!validator && Object.prototype.hasOwnProperty.call(validator, GENCOW_OPTIONAL_INNER);\n}\nfunction readGencowStandardJsonSchema(schema) {\n    if (!schema || typeof schema !== \"object\" || !(\"~standard\" in schema))\n        return undefined;\n    const props = schema[\"~standard\"];\n    if (!props || props.vendor !== \"gencow\")\n        return undefined;\n    const raw = props.jsonSchema;\n    if (raw === undefined)\n        return undefined;\n    return typeof raw === \"function\" ? raw() : raw;\n}\nfunction isRecord(value) {\n    return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nexport function isAllOptionalObjectSchema(schema) {\n    const jsonSchema = readGencowStandardJsonSchema(schema);\n    if (!isRecord(jsonSchema) || jsonSchema.type !== \"object\")\n        return false;\n    const required = jsonSchema.required;\n    return required === undefined || (Array.isArray(required) && required.length === 0);\n}\nexport function normalizeMissingOptionalObjectInput(schema, value) {\n    if (value !== undefined)\n        return value;\n    return isAllOptionalObjectSchema(schema) ? {} : value;\n}\nfunction matchesMimeType(fileType, pattern) {\n    const normalizedFileType = fileType.split(\";\")[0].trim().toLowerCase();\n    const normalizedPattern = pattern.trim().toLowerCase();\n    if (normalizedPattern === \"*/*\")\n        return true;\n    if (normalizedPattern.endsWith(\"/*\")) {\n        const prefix = normalizedPattern.slice(0, -1);\n        return normalizedFileType.startsWith(prefix);\n    }\n    return normalizedFileType === normalizedPattern;\n}\nfunction buildObjectJsonSchema(fields) {\n    const properties = {};\n    const required = [];\n    for (const key of Object.keys(fields)) {\n        const field = fields[key];\n        properties[key] = readJsonSchemaFragment(field);\n        if (!isOptionalValidator(field)) {\n            required.push(key);\n        }\n    }\n    return {\n        type: \"object\",\n        properties,\n        ...(required.length > 0 ? { required } : {}),\n    };\n}\nfunction createValidator(config) {\n    const { parse, _type, jsonSchema } = config;\n    const standard = {\n        version: 1,\n        vendor: \"gencow\",\n        types: {},\n        validate: async (value) => {\n            try {\n                return assertStandardResult(parse(value));\n            }\n            catch (e) {\n                const message = e instanceof Error ? e.message : \"Validation failed\";\n                return failStandardResult(message);\n            }\n        },\n        ...(jsonSchema !== undefined ? { jsonSchema } : {}),\n    };\n    return {\n        parse,\n        _type,\n        \"~standard\": standard,\n    };\n}\nexport const v = {\n    string() {\n        return createValidator({\n            parse: (val) => {\n                if (typeof val !== \"string\")\n                    throw new Error(`Expected string, got ${typeof val}`);\n                return val;\n            },\n            _type: \"\",\n            jsonSchema: { type: \"string\" },\n        });\n    },\n    number() {\n        return createValidator({\n            parse: (val) => {\n                // Accept numeric strings (e.g. from URL params / form data)\n                const n = typeof val === \"string\" ? Number(val) : val;\n                if (typeof n !== \"number\" || isNaN(n))\n                    throw new Error(`Expected number, got ${typeof val}`);\n                return n;\n            },\n            _type: 0,\n            jsonSchema: { type: \"number\" },\n        });\n    },\n    boolean() {\n        return createValidator({\n            parse: (val) => {\n                if (typeof val !== \"boolean\")\n                    throw new Error(`Expected boolean, got ${typeof val}`);\n                return val;\n            },\n            _type: false,\n            jsonSchema: { type: \"boolean\" },\n        });\n    },\n    /** ISO / `Date` \u2014 used for Drizzle `timestamp` columns; codegen maps to `Date`. */\n    dateTime() {\n        return createValidator({\n            parse: (val) => {\n                if (val instanceof Date && !Number.isNaN(val.getTime()))\n                    return val;\n                if (typeof val === \"string\") {\n                    const d = new Date(val);\n                    if (!Number.isNaN(d.getTime()))\n                        return d;\n                }\n                if (typeof val === \"number\" && Number.isFinite(val)) {\n                    const d = new Date(val);\n                    if (!Number.isNaN(d.getTime()))\n                        return d;\n                }\n                throw new Error(`Expected date, got ${typeof val}`);\n            },\n            _type: new Date(0),\n            jsonSchema: { type: \"string\", format: \"date-time\" },\n        });\n    },\n    any() {\n        return createValidator({\n            parse: (val) => val,\n            _type: null,\n        });\n    },\n    optional(inner) {\n        const out = createValidator({\n            parse: (val) => {\n                if (val === undefined || val === null)\n                    return undefined;\n                return inner.parse(val);\n            },\n            _type: undefined,\n            jsonSchema: readJsonSchemaFragment(inner),\n        });\n        out[GENCOW_OPTIONAL_INNER] = inner;\n        return out;\n    },\n    nullable(inner) {\n        return createValidator({\n            parse: (val) => {\n                if (val === null)\n                    return null;\n                return inner.parse(val);\n            },\n            _type: null,\n            jsonSchema: { anyOf: [readJsonSchemaFragment(inner), { type: \"null\" }] },\n        });\n    },\n    object(fields) {\n        return createValidator({\n            parse: (val) => {\n                if (val === undefined && Object.values(fields).every((field) => isOptionalValidator(field))) {\n                    val = {};\n                }\n                if (typeof val !== \"object\" || val === null)\n                    throw new Error(\"Expected object\");\n                const result = {};\n                for (const key in fields) {\n                    result[key] = fields[key].parse(val[key]);\n                }\n                return result;\n            },\n            _type: {},\n            jsonSchema: buildObjectJsonSchema(fields),\n        });\n    },\n    array(inner) {\n        const items = readJsonSchemaFragment(inner);\n        return createValidator({\n            parse: (val) => {\n                if (!Array.isArray(val))\n                    throw new Error(\"Expected array\");\n                return val.map((item) => inner.parse(item));\n            },\n            _type: [],\n            jsonSchema: { type: \"array\", items },\n        });\n    },\n    /** Browser `File` / `Blob` for procedure multipart uploads. */\n    file() {\n        const base = createValidator({\n            parse: (val) => {\n                if (!(val instanceof Blob)) {\n                    throw new Error(`Expected file, got ${typeof val}`);\n                }\n                return val;\n            },\n            _type: null,\n            jsonSchema: { type: \"string\", format: \"binary\", \"x-gencow-type\": \"file\" },\n        });\n        return Object.assign(base, {\n            mime(mimeType) {\n                return createValidator({\n                    parse: (val) => {\n                        const blob = base.parse(val);\n                        if (!matchesMimeType(blob.type, mimeType)) {\n                            throw new Error(`Expected a file of type ${mimeType} but got ${blob.type || \"unknown\"}`);\n                        }\n                        return blob;\n                    },\n                    _type: null,\n                    jsonSchema: {\n                        type: \"string\",\n                        format: \"binary\",\n                        \"x-gencow-type\": \"file\",\n                        \"x-gencow-mime\": mimeType,\n                    },\n                });\n            },\n        });\n    },\n};\n/**\n * Validates and parses arguments against a schema at runtime.\n *\n * Supports:\n *   - Full validators: `v.object({ id: v.number() })`, `v.string()`, `v.any()`, etc.\n *   - Shorthand record: `{ id: v.number(), title: v.string() }` (Convex style)\n *\n * Throws `GencowValidationError` (HTTP 400) on validation failure.\n */\nexport function parseArgs(schema, args) {\n    if (!schema)\n        return args;\n    // Direct Validator (has a .parse method)\n    if (typeof schema.parse === \"function\") {\n        try {\n            return schema.parse(normalizeMissingOptionalObjectInput(schema, args));\n        }\n        catch (e) {\n            throw new GencowValidationError(e.message);\n        }\n    }\n    // Shorthand object \u2014 e.g. { id: v.number(), title: v.optional(v.string()) }\n    if (typeof schema === \"object\" && schema !== null) {\n        // Empty schema {} \u2192 passthrough all args (e.g. FormData with file field)\n        const schemaKeys = Object.keys(schema);\n        if (schemaKeys.length === 0)\n            return args;\n        if (typeof args !== \"object\" || args === null) {\n            throw new GencowValidationError(\"Expected an object for arguments\");\n        }\n        const result = {};\n        for (const key of schemaKeys) {\n            const validator = schema[key];\n            if (validator && typeof validator.parse === \"function\") {\n                try {\n                    result[key] = validator.parse(args[key]);\n                }\n                catch (e) {\n                    throw new GencowValidationError(`Argument \"${key}\": ${e.message}`);\n                }\n            }\n            else {\n                result[key] = args[key];\n            }\n        }\n        return result;\n    }\n    return args;\n}\n", "import { normalizeMissingOptionalObjectInput } from \"./v.js\";\nfunction hasStandardSchema(schema) {\n    return (!!schema &&\n        typeof schema === \"object\" &&\n        \"~standard\" in schema &&\n        !!schema[\"~standard\"] &&\n        typeof schema[\"~standard\"].validate === \"function\");\n}\nasync function validateWithSchema(schema, value, options) {\n    if (!schema)\n        return value;\n    const valueToValidate = options?.normalizeMissingOptionalObject\n        ? normalizeMissingOptionalObjectInput(schema, value)\n        : value;\n    if (hasStandardSchema(schema)) {\n        const result = (await schema[\"~standard\"].validate(valueToValidate));\n        if (\"issues\" in result && result.issues.length > 0) {\n            throw new Error(result.issues[0]?.message ?? \"Validation failed\");\n        }\n        if (\"value\" in result) {\n            return result.value;\n        }\n        throw new Error(\"Validation failed\");\n    }\n    throw new Error(\"procedure.query / procedure.mutation / procedure.internal only supports Standard Schema v1 validators\");\n}\nfunction composeMiddlewares(middlewares, handler, inputSchema, outputSchema, inputValidationIndex, outputValidationIndex) {\n    return async (initialContext, initialInput) => {\n        let idx = -1;\n        const boundedInputValidationIndex = Math.min(Math.max(0, inputValidationIndex), middlewares.length);\n        const boundedOutputValidationIndex = Math.min(Math.max(0, outputValidationIndex), middlewares.length);\n        const run = async (currentIdx, context, input) => {\n            if (currentIdx <= idx) {\n                throw new Error(\"next() called multiple times in the same middleware\");\n            }\n            idx = currentIdx;\n            let currentInput = input;\n            if (currentIdx === boundedInputValidationIndex) {\n                currentInput = (await validateWithSchema(inputSchema, currentInput, {\n                    normalizeMissingOptionalObject: true,\n                }));\n            }\n            if (currentIdx === middlewares.length) {\n                const output = await handler({ context, input: currentInput });\n                if (currentIdx === boundedOutputValidationIndex) {\n                    return await validateWithSchema(outputSchema, output);\n                }\n                return output;\n            }\n            const middleware = middlewares[currentIdx];\n            const output = await middleware({\n                context,\n                input: currentInput,\n                next: async (overrides) => {\n                    return await run(currentIdx + 1, (overrides?.context ?? context), (overrides?.input ?? currentInput));\n                },\n            });\n            if (currentIdx === boundedOutputValidationIndex) {\n                return await validateWithSchema(outputSchema, output);\n            }\n            return output;\n        };\n        return await run(0, initialContext, initialInput);\n    };\n}\nclass GencowProcedureBuilderImpl {\n    kind;\n    procedureName;\n    middlewares;\n    inputSchema;\n    outputSchema;\n    inputValidationIndex;\n    outputValidationIndex;\n    anonymousAllowed;\n    constructor(kind, procedureName, middlewares = [], inputSchema, outputSchema, inputValidationIndex = -1, outputValidationIndex = -1, anonymousAllowed = false) {\n        this.kind = kind;\n        this.procedureName = procedureName;\n        this.middlewares = middlewares;\n        this.inputSchema = inputSchema;\n        this.outputSchema = outputSchema;\n        this.inputValidationIndex = inputValidationIndex;\n        this.outputValidationIndex = outputValidationIndex;\n        this.anonymousAllowed = anonymousAllowed;\n    }\n    name(name) {\n        return new GencowProcedureBuilderImpl(this.kind, name, this.middlewares, this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    allowAnonymous() {\n        return new GencowProcedureBuilderImpl(this.kind, this.procedureName, this.middlewares, this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, true);\n    }\n    use(middleware) {\n        return new GencowProcedureBuilderImpl(this.kind, this.procedureName, [...this.middlewares, middleware], this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    input(schema) {\n        const nextInputValidationIndex = this.middlewares.length < 0 ? 0 : this.middlewares.length;\n        return new GencowProcedureBuilderImpl(this.kind, this.procedureName, this.middlewares, schema, this.outputSchema, nextInputValidationIndex, this.outputValidationIndex, this.anonymousAllowed);\n    }\n    output(schema) {\n        const nextOutputValidationIndex = this.middlewares.length < 0 ? 0 : this.middlewares.length;\n        return new GencowProcedureBuilderImpl(this.kind, this.procedureName, this.middlewares, this.inputSchema, schema, this.inputValidationIndex, nextOutputValidationIndex, this.anonymousAllowed);\n    }\n    handler(handler) {\n        if (!this.procedureName) {\n            throw new Error(\"Procedure name is required. Call .name(...) before .handler(...)\");\n        }\n        const run = composeMiddlewares(this.middlewares, handler, this.inputSchema, this.outputSchema, this.inputValidationIndex, this.outputValidationIndex);\n        return {\n            kind: this.kind,\n            name: this.procedureName,\n            allowAnonymous: this.kind === \"internal\" ? false : this.anonymousAllowed,\n            middlewares: [...this.middlewares],\n            inputSchema: this.inputSchema,\n            outputSchema: this.outputSchema,\n            inputValidationIndex: this.inputValidationIndex,\n            outputValidationIndex: this.outputValidationIndex,\n            handler: run,\n        };\n    }\n}\n/**\n * Canonical factory for typed `procedure.query` / `procedure.mutation` / `procedure.internal`. Bind once in app\n * `gencow/runtime.ts` with `typeof schema` and optional `AppUser` (see spec-typed-app-context).\n */\nexport function createGencowProcedureBuilders() {\n    return {\n        query: new GencowProcedureBuilderImpl(\"query\"),\n        mutation: new GencowProcedureBuilderImpl(\"mutation\"),\n        internal: new GencowProcedureBuilderImpl(\"internal\"),\n    };\n}\n", "if (!globalThis.__gencow_httpActionRegistry)\n    globalThis.__gencow_httpActionRegistry = [];\n/**\n * @deprecated Internal legacy registry.\n * Use `httpRoute` and expose routes via `defineApi({ httpRoutes })` instead.\n */\nexport const httpActionRegistry = globalThis.__gencow_httpActionRegistry;\n/**\n * \uCEE4\uC2A4\uD140 HTTP \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB97C \uC120\uC5B8\uC801\uC73C\uB85C \uB4F1\uB85D\uD569\uB2C8\uB2E4.\n * query/mutation\uC740 RPC \uD328\uD134\uC774\uC9C0\uB9CC, httpAction\uC740 RESTful HTTP \uB77C\uC6B0\uD2B8\uB97C \uC9C1\uC811 \uC815\uC758\uD569\uB2C8\uB2E4.\n *\n * @deprecated Use `httpRoute` and expose routes via `defineApi({ httpRoutes })` instead.\n *\n * \uC0AC\uC6A9 \uC0AC\uB840:\n *   - CLI Device Auth (POST /api/cli/auth-start)\n *   - \uD30C\uC77C \uC5C5\uB85C\uB4DC (POST /api/apps/:id/deploy)\n *   - Webhook \uC218\uC2E0\n *   - \uC678\uBD80 \uC11C\uBE44\uC2A4 \uCF5C\uBC31\n *\n * @example\n * ```typescript\n * import { httpAction } from \"@gencow/core\";\n *\n * export const authStart = httpAction({\n *     method: \"POST\",\n *     path: \"/api/cli/auth-start\",\n *     public: true,\n *     handler: async (ctx, req) => {\n *         const code = crypto.randomUUID().slice(0, 8);\n *         return { body: { code, url: `https://gencow.com/cli-auth?code=${code}` } };\n *     },\n * });\n * ```\n */\nexport function httpAction(def) {\n    const actionDef = {\n        method: def.method,\n        path: def.path,\n        isPublic: def.public === true,\n        handler: def.handler,\n    };\n    httpActionRegistry.push(actionDef);\n    return actionDef;\n}\n/**\n * @deprecated Legacy HTTP action registry API.\n * Use `httpRoute` and expose routes via `defineApi({ httpRoutes })` instead.\n */\nexport function getRegisteredHttpActions() {\n    return [...httpActionRegistry];\n}\n", "import { createHmac, randomBytes, timingSafeEqual } from \"crypto\";\nconst TICKET_PREFIX = \"gencow_ws1\";\nconst DEFAULT_TTL_SECONDS = 60;\nconst MAX_TTL_SECONDS = 120;\nconst MAX_TICKET_LENGTH = 4096;\nfunction encodeBase64Url(value) {\n    return Buffer.from(value, \"utf8\").toString(\"base64url\");\n}\nfunction decodeBase64Url(value) {\n    try {\n        return Buffer.from(value, \"base64url\").toString(\"utf8\");\n    }\n    catch {\n        return null;\n    }\n}\nfunction signSegment(segment, secret) {\n    return createHmac(\"sha256\", secret).update(segment).digest(\"base64url\");\n}\nfunction safeEqual(a, b) {\n    const left = Buffer.from(a);\n    const right = Buffer.from(b);\n    return left.length === right.length && timingSafeEqual(left, right);\n}\nfunction validateRequiredString(value, label) {\n    if (typeof value !== \"string\" || value.length === 0) {\n        throw new Error(`${label} required`);\n    }\n}\nfunction resolveTtlMs(ttlSeconds) {\n    const ttl = Number.isFinite(ttlSeconds) && ttlSeconds > 0 ? ttlSeconds : DEFAULT_TTL_SECONDS;\n    return Math.floor(Math.min(ttl, MAX_TTL_SECONDS) * 1000);\n}\nfunction randomNonce() {\n    return randomBytes(16).toString(\"base64url\");\n}\nfunction resolveRealtimeCapabilityNegotiation(value) {\n    const record = value && typeof value === \"object\" ? value : null;\n    return {\n        crudRealtimeMode: record?.crudRealtimeMode === \"scoped\" ? \"scoped\" : \"legacy\",\n    };\n}\nexport function createRealtimeTicket(input) {\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.userId, \"userId\");\n    validateRequiredString(input.secret, \"secret\");\n    const nowMs = input.nowMs ?? Date.now();\n    const realtime = resolveRealtimeCapabilityNegotiation({\n        crudRealtimeMode: input.realtime?.crudRealtimeMode,\n    });\n    const payload = {\n        v: 1,\n        appName: input.appName,\n        userId: input.userId,\n        sessionId: input.sessionId ?? null,\n        rt: {\n            crudRealtimeMode: realtime.crudRealtimeMode,\n        },\n        iat: nowMs,\n        exp: nowMs + resolveTtlMs(input.ttlSeconds),\n        nonce: input.nonce ?? randomNonce(),\n    };\n    const payloadSegment = encodeBase64Url(JSON.stringify(payload));\n    const signature = signSegment(payloadSegment, input.secret);\n    return `${TICKET_PREFIX}.${payloadSegment}.${signature}`;\n}\nexport function verifyRealtimeTicket(ticket, input) {\n    if (typeof ticket !== \"string\" || ticket.length === 0 || ticket.length > MAX_TICKET_LENGTH) {\n        return { ok: false, reason: \"malformed\" };\n    }\n    validateRequiredString(input.appName, \"appName\");\n    validateRequiredString(input.secret, \"secret\");\n    const parts = ticket.split(\".\");\n    if (parts.length !== 3 || parts[0] !== TICKET_PREFIX)\n        return { ok: false, reason: \"malformed\" };\n    const [, payloadSegment, signature] = parts;\n    if (!safeEqual(signature, signSegment(payloadSegment, input.secret))) {\n        return { ok: false, reason: \"bad_signature\" };\n    }\n    const decoded = decodeBase64Url(payloadSegment);\n    if (!decoded)\n        return { ok: false, reason: \"malformed\" };\n    let payload;\n    try {\n        payload = JSON.parse(decoded);\n    }\n    catch {\n        return { ok: false, reason: \"malformed\" };\n    }\n    if (!payload || typeof payload !== \"object\")\n        return { ok: false, reason: \"invalid_payload\" };\n    const record = payload;\n    if (record.v !== 1 ||\n        typeof record.appName !== \"string\" ||\n        typeof record.userId !== \"string\" ||\n        typeof record.nonce !== \"string\" ||\n        typeof record.iat !== \"number\" ||\n        typeof record.exp !== \"number\") {\n        return { ok: false, reason: \"invalid_payload\" };\n    }\n    if (record.appName !== input.appName)\n        return { ok: false, reason: \"app_mismatch\" };\n    if ((input.nowMs ?? Date.now()) >= record.exp)\n        return { ok: false, reason: \"expired\" };\n    return {\n        ok: true,\n        appName: record.appName,\n        userId: record.userId,\n        sessionId: typeof record.sessionId === \"string\" ? record.sessionId : null,\n        nonce: record.nonce,\n        issuedAt: record.iat,\n        expiresAt: record.exp,\n        realtime: resolveRealtimeCapabilityNegotiation(record.rt),\n    };\n}\n", "/** \uD30C\uC77C \uC5C5\uB85C\uB4DC \uCD5C\uB300 \uD06C\uAE30: 50MB */\nexport const MAX_FILE_SIZE = 50 * 1024 * 1024;\n/** \uAE30\uBCF8 \uC2A4\uD1A0\uB9AC\uC9C0 \uCFFC\uD130: 1GB */\nexport const DEFAULT_STORAGE_QUOTA = 1024 * 1024 * 1024;\n/** `listMeta` \uAE30\uBCF8 \uD398\uC774\uC9C0 \uD06C\uAE30 (\uC785\uB825 \uC0DD\uB7B5 \uC2DC \uC694\uCCAD\uB418\uB294 \uD56D\uBAA9 \uC218) */\nexport const STORAGE_LIST_DEFAULT_LIMIT = 20;\n/** `listMeta` \uD398\uC774\uC9C0 \uD06C\uAE30 \uC0C1\uD55C (\uD55C \uD638\uCD9C\uB2F9 \uBC18\uD658 \uAC00\uB2A5\uD55C \uCD5C\uB300 \uD56D\uBAA9 \uC218) */\nexport const STORAGE_LIST_MAX_LIMIT = 100;\n/**\n * \uC5B4\uB311\uD130\uAC00 `listMeta`\uB97C \uAD6C\uD604\uD560 \uC218 \uC5C6\uC744 \uB54C \uB358\uC9C0\uB294 \uC5D0\uB7EC.\n * \uC2A4\uD399 \u00A76.2 Option B \u2014 \uBE48 \uC751\uB2F5 \uB300\uC2E0 \uBA85\uC2DC\uC801\uC73C\uB85C throw \uD55C\uB2E4.\n */\nexport class StorageListUnsupportedError extends Error {\n    code = \"STORAGE_LIST_UNSUPPORTED\";\n    constructor(message = \"Storage adapter does not support listMeta\") {\n        super(message);\n        this.name = \"StorageListUnsupportedError\";\n    }\n}\nexport function formatBytes(bytes) {\n    if (bytes < 1024)\n        return `${bytes}B`;\n    if (bytes < 1024 * 1024)\n        return `${(bytes / 1024).toFixed(1)}KB`;\n    if (bytes < 1024 * 1024 * 1024)\n        return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n    return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)}GB`;\n}\n", "export { DEFAULT_STORAGE_QUOTA, MAX_FILE_SIZE, STORAGE_LIST_DEFAULT_LIMIT, STORAGE_LIST_MAX_LIMIT, StorageListUnsupportedError, formatBytes, } from \"./storage-shared.js\";\n", "function normalizePosition(position, label) {\n    if (!Number.isFinite(position) || position < 0) {\n        throw new Error(`${label}.position must be a non-negative finite number`);\n    }\n    return position;\n}\nexport function normalizeUnreadCursor(input, label = \"cursor\") {\n    const id = input.id.trim();\n    if (!id)\n        throw new Error(`${label}.id is required`);\n    if (id.length > 512)\n        throw new Error(`${label}.id is too long`);\n    return {\n        position: normalizePosition(input.position, label),\n        id,\n    };\n}\nexport function compareUnreadCursors(left, right) {\n    const normalizedLeft = normalizeUnreadCursor(left, \"left\");\n    const normalizedRight = normalizeUnreadCursor(right, \"right\");\n    if (normalizedLeft.position < normalizedRight.position)\n        return -1;\n    if (normalizedLeft.position > normalizedRight.position)\n        return 1;\n    if (normalizedLeft.id < normalizedRight.id)\n        return -1;\n    if (normalizedLeft.id > normalizedRight.id)\n        return 1;\n    return 0;\n}\nexport function advanceUnreadCursor(current, next) {\n    if (!current && !next)\n        return null;\n    if (!current)\n        return normalizeUnreadCursor(next, \"next\");\n    if (!next)\n        return normalizeUnreadCursor(current, \"current\");\n    return compareUnreadCursors(current, next) >= 0\n        ? normalizeUnreadCursor(current, \"current\")\n        : normalizeUnreadCursor(next, \"next\");\n}\nexport function isUnreadAfterCursor(event, readCursor) {\n    if (!readCursor)\n        return true;\n    return compareUnreadCursors(event.cursor, readCursor) > 0;\n}\nexport function countUnreadAfterCursor(events, readCursor) {\n    let count = 0;\n    for (const event of events) {\n        if (isUnreadAfterCursor(event, readCursor))\n            count++;\n    }\n    return count;\n}\n", "export class JobAdmissionError extends Error {\n    code;\n    status;\n    retryAfterMs;\n    details;\n    constructor(code, message, options = {}) {\n        super(message);\n        this.name = \"JobAdmissionError\";\n        this.code = code;\n        this.status = options.status ?? getJobAdmissionStatus(code);\n        this.retryAfterMs = options.retryAfterMs;\n        this.details = options.details;\n    }\n}\nexport function getJobAdmissionStatus(code) {\n    switch (code) {\n        case \"job_payload_too_large\":\n            return 413;\n        case \"job_min_delay_violation\":\n        case \"job_schedule_horizon_exceeded\":\n            return 400;\n        case \"job_admission_disabled\":\n            return 503;\n        case \"job_rate_limited\":\n        case \"job_backlog_limit_exceeded\":\n        case \"job_queue_depth_limit_exceeded\":\n            return 429;\n    }\n}\nexport function isJobAdmissionError(error) {\n    return error instanceof JobAdmissionError;\n}\nexport function buildJobAdmissionErrorBody(error) {\n    return {\n        error: error.message,\n        code: error.code,\n        ...(error.retryAfterMs != null ? { retryAfterMs: error.retryAfterMs } : {}),\n        ...(error.details ? { details: error.details } : {}),\n    };\n}\nexport function jsonByteLength(value) {\n    try {\n        return new TextEncoder().encode(JSON.stringify(value)).length;\n    }\n    catch {\n        return Number.POSITIVE_INFINITY;\n    }\n}\nexport function readPositiveIntegerEnv(env, key) {\n    const raw = env[key];\n    if (raw == null || raw.trim() === \"\")\n        return undefined;\n    const value = Number(raw);\n    if (!Number.isInteger(value) || value <= 0)\n        return undefined;\n    return value;\n}\nexport function readNonNegativeIntegerEnv(env, key) {\n    const raw = env[key];\n    if (raw == null || raw.trim() === \"\")\n        return undefined;\n    const value = Number(raw);\n    if (!Number.isInteger(value) || value < 0)\n        return undefined;\n    return value;\n}\nexport function readBooleanEnv(env, key) {\n    const raw = env[key]?.trim().toLowerCase();\n    return raw === \"1\" || raw === \"true\" || raw === \"yes\" || raw === \"on\";\n}\nexport function getMinuteBucketStart(date = new Date()) {\n    const bucket = new Date(date);\n    bucket.setUTCSeconds(0, 0);\n    return bucket;\n}\nexport function getMsUntilNextMinute(date = new Date()) {\n    const next = getMinuteBucketStart(date);\n    next.setUTCMinutes(next.getUTCMinutes() + 1);\n    return Math.max(1_000, next.getTime() - date.getTime());\n}\nexport function isJobAdmissionKillSwitchActive(env, scope) {\n    const raw = env.GENCOW_JOB_ADMISSION_KILL_SWITCH ?? env.GENCOW_JOB_KILL_SWITCH ?? env.GENCOW_PLATFORM_JOB_KILL_SWITCH;\n    if (!raw)\n        return false;\n    const normalized = raw\n        .split(\",\")\n        .map((item) => item.trim().toLowerCase())\n        .filter(Boolean);\n    if (normalized.length === 0)\n        return false;\n    if (normalized.some((item) => item === \"1\" || item === \"true\" || item === \"all\"))\n        return true;\n    const wanted = scope.toLowerCase();\n    return normalized.some((item) => wanted === item || wanted.startsWith(`${item}:`));\n}\n", "import { sql } from \"drizzle-orm\";\nimport { JobAdmissionError, getMsUntilNextMinute, isJobAdmissionKillSwitchActive, jsonByteLength, readPositiveIntegerEnv, } from \"./job-admission.js\";\nconst DEFAULT_WORKFLOW_PENDING_PER_APP = 1_000;\nconst DEFAULT_WORKFLOW_RUNNING_PER_APP = 50;\nconst DEFAULT_WORKFLOW_PENDING_PER_NAME = 300;\nconst DEFAULT_WORKFLOW_STARTS_PER_MINUTE_PER_APP = 120;\nconst DEFAULT_WORKFLOW_PAYLOAD_MAX_BYTES = 64 * 1024;\nconst WORKFLOW_ADMISSION_ENV_KEYS = [\n    \"GENCOW_JOB_ADMISSION_ENABLED\",\n    \"GENCOW_JOB_ADMISSION_KILL_SWITCH\",\n    \"GENCOW_JOB_KILL_SWITCH\",\n    \"GENCOW_PLATFORM_JOB_KILL_SWITCH\",\n    \"GENCOW_WORKFLOW_PENDING_PER_APP\",\n    \"GENCOW_WORKFLOW_RUNNING_PER_APP\",\n    \"GENCOW_WORKFLOW_PENDING_PER_NAME\",\n    \"GENCOW_WORKFLOW_STARTS_PER_MINUTE_PER_APP\",\n    \"GENCOW_WORKFLOW_STARTS_PER_MINUTE_PER_NAME\",\n    \"GENCOW_WORKFLOW_PAYLOAD_MAX_BYTES\",\n    \"GENCOW_JOB_PENDING_PER_APP\",\n    \"GENCOW_JOB_CREATES_PER_MINUTE_PER_APP\",\n    \"GENCOW_JOB_PAYLOAD_MAX_BYTES\",\n];\nfunction rows(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction numberFrom(value) {\n    const parsed = Number(value ?? 0);\n    return Number.isFinite(parsed) ? parsed : 0;\n}\nfunction isMissingAdmissionSchemaError(error) {\n    const code = error && typeof error === \"object\" && \"code\" in error ? String(error.code) : \"\";\n    const cause = error && typeof error === \"object\" && \"cause\" in error ? error.cause : null;\n    const causeCode = cause && typeof cause === \"object\" && \"code\" in cause ? String(cause.code) : \"\";\n    const message = error instanceof Error ? error.message : String(error);\n    return (code === \"42P01\" ||\n        causeCode === \"42P01\" ||\n        message.includes('relation \"_gencow_job_admission_buckets\" does not exist') ||\n        message.includes(\"relation _gencow_job_admission_buckets does not exist\"));\n}\nfunction isMissingWorkflowV2SchemaError(error) {\n    const code = error && typeof error === \"object\" && \"code\" in error ? String(error.code) : \"\";\n    const cause = error && typeof error === \"object\" && \"cause\" in error ? error.cause : null;\n    const causeCode = cause && typeof cause === \"object\" && \"code\" in cause ? String(cause.code) : \"\";\n    const message = error instanceof Error ? error.message : String(error);\n    return (code === \"42P01\" ||\n        code === \"42703\" ||\n        causeCode === \"42P01\" ||\n        causeCode === \"42703\" ||\n        message.includes('relation \"_gencow_workflow_runs_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_runs_v2 does not exist\"));\n}\nfunction isWorkflowAdmissionEnabled(env) {\n    if ((env.GENCOW_JOB_ADMISSION_ENABLED ?? \"\").trim().toLowerCase() === \"false\")\n        return false;\n    if (env.GENCOW_APP_NAME)\n        return true;\n    return WORKFLOW_ADMISSION_ENV_KEYS.some((key) => env[key] != null && env[key] !== \"\");\n}\nfunction resolveWorkflowAdmissionPolicy(env) {\n    return {\n        pendingPerApp: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_PENDING_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_PENDING_PER_APP\") ??\n            DEFAULT_WORKFLOW_PENDING_PER_APP,\n        runningPerApp: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_RUNNING_PER_APP\") ?? DEFAULT_WORKFLOW_RUNNING_PER_APP,\n        pendingPerName: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_PENDING_PER_NAME\") ?? DEFAULT_WORKFLOW_PENDING_PER_NAME,\n        startsPerMinutePerApp: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_STARTS_PER_MINUTE_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_CREATES_PER_MINUTE_PER_APP\") ??\n            DEFAULT_WORKFLOW_STARTS_PER_MINUTE_PER_APP,\n        startsPerMinutePerName: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_STARTS_PER_MINUTE_PER_NAME\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_STARTS_PER_MINUTE_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_CREATES_PER_MINUTE_PER_APP\") ??\n            DEFAULT_WORKFLOW_STARTS_PER_MINUTE_PER_APP,\n        payloadMaxBytes: readPositiveIntegerEnv(env, \"GENCOW_WORKFLOW_PAYLOAD_MAX_BYTES\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_PAYLOAD_MAX_BYTES\") ??\n            DEFAULT_WORKFLOW_PAYLOAD_MAX_BYTES,\n    };\n}\nasync function countWorkflowV2Backlog(db, workflowName) {\n    const result = await db.execute(sql `\n    SELECT\n      COALESCE(SUM(CASE WHEN completed_at IS NULL AND status IN ('queued', 'waiting', 'sleeping') THEN 1 ELSE 0 END), 0)::int AS pending,\n      COALESCE(SUM(CASE WHEN completed_at IS NULL AND status = 'running' THEN 1 ELSE 0 END), 0)::int AS running,\n      COALESCE(SUM(CASE WHEN completed_at IS NULL AND status IN ('queued', 'waiting', 'sleeping') AND workflow_name = ${workflowName} THEN 1 ELSE 0 END), 0)::int AS pending_by_name\n    FROM _gencow_workflow_runs_v2\n  `);\n    const row = rows(result)[0];\n    return {\n        pending: numberFrom(row?.pending),\n        running: numberFrom(row?.running),\n        pendingByName: numberFrom(row?.pending_by_name),\n    };\n}\nasync function countWorkflowV1Backlog(db, workflowName) {\n    const result = await db.execute(sql `\n    SELECT\n      COALESCE(SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END), 0)::int AS pending,\n      COALESCE(SUM(CASE WHEN status = 'running' THEN 1 ELSE 0 END), 0)::int AS running,\n      COALESCE(SUM(CASE WHEN status = 'pending' AND name = ${workflowName} THEN 1 ELSE 0 END), 0)::int AS pending_by_name\n    FROM _gencow_workflows\n  `);\n    const row = rows(result)[0];\n    return {\n        pending: numberFrom(row?.pending),\n        running: numberFrom(row?.running),\n        pendingByName: numberFrom(row?.pending_by_name),\n    };\n}\nasync function countWorkflowBacklog(db, workflowName) {\n    try {\n        return await countWorkflowV2Backlog(db, workflowName);\n    }\n    catch (error) {\n        if (!isMissingWorkflowV2SchemaError(error))\n            throw error;\n        return countWorkflowV1Backlog(db, workflowName);\n    }\n}\nasync function consumeWorkflowRateBucket(db, scope, limit, now) {\n    try {\n        const result = await db.execute(sql `\n      INSERT INTO _gencow_job_admission_buckets (scope, bucket_start, count, updated_at)\n      VALUES (${scope}, date_trunc('minute', ${now.toISOString()}::timestamptz), 1, NOW())\n      ON CONFLICT (scope, bucket_start) DO UPDATE\n        SET count = _gencow_job_admission_buckets.count + 1,\n            updated_at = NOW()\n        WHERE _gencow_job_admission_buckets.count < ${limit}\n      RETURNING count\n    `);\n        return rows(result).length > 0;\n    }\n    catch (error) {\n        if (!isMissingAdmissionSchemaError(error))\n            throw error;\n        throw new JobAdmissionError(\"job_admission_disabled\", \"workflow admission bucket schema is not initialized\");\n    }\n}\nasync function acquireWorkflowStartAdmissionLock(db) {\n    await db.execute(sql `SELECT pg_advisory_xact_lock(hashtextextended('workflow:create', 0))`);\n}\nexport async function applyWorkflowStartAdmission(options) {\n    const env = options.env ?? (typeof process === \"undefined\" ? {} : process.env);\n    if (!isWorkflowAdmissionEnabled(env))\n        return;\n    if (isJobAdmissionKillSwitchActive(env, `workflow:create:name:${options.workflowName}`)) {\n        throw new JobAdmissionError(\"job_admission_disabled\", \"workflow start admission is disabled\");\n    }\n    const policy = resolveWorkflowAdmissionPolicy(env);\n    const payloadBytes = jsonByteLength(options.args);\n    if (payloadBytes > policy.payloadMaxBytes) {\n        throw new JobAdmissionError(\"job_payload_too_large\", \"workflow start payload is too large\", {\n            details: { limitBytes: policy.payloadMaxBytes, payloadBytes },\n        });\n    }\n    await acquireWorkflowStartAdmissionLock(options.db);\n    const counts = await countWorkflowBacklog(options.db, options.workflowName);\n    if (counts.pending >= policy.pendingPerApp) {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"workflow pending backlog limit exceeded\", {\n            details: { limit: policy.pendingPerApp, pending: counts.pending },\n        });\n    }\n    if (counts.running >= policy.runningPerApp) {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"workflow running backlog limit exceeded\", {\n            details: { limit: policy.runningPerApp, running: counts.running },\n        });\n    }\n    if (counts.pendingByName >= policy.pendingPerName) {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"workflow name pending backlog limit exceeded\", {\n            details: {\n                limit: policy.pendingPerName,\n                pending: counts.pendingByName,\n                workflowName: options.workflowName,\n            },\n        });\n    }\n    const now = options.now?.() ?? new Date();\n    const consumed = await consumeWorkflowRateBucket(options.db, \"workflow:create\", policy.startsPerMinutePerApp, now);\n    if (!consumed) {\n        throw new JobAdmissionError(\"job_rate_limited\", \"workflow start rate limit exceeded\", {\n            retryAfterMs: getMsUntilNextMinute(now),\n            details: { limit: policy.startsPerMinutePerApp },\n        });\n    }\n    const nameConsumed = await consumeWorkflowRateBucket(options.db, `workflow:create:name:${options.workflowName}`, policy.startsPerMinutePerName, now);\n    if (!nameConsumed) {\n        throw new JobAdmissionError(\"job_rate_limited\", \"workflow name start rate limit exceeded\", {\n            retryAfterMs: getMsUntilNextMinute(now),\n            details: { limit: policy.startsPerMinutePerName, workflowName: options.workflowName },\n        });\n    }\n}\nexport async function runWorkflowAdmissionCriticalSection(db, callback) {\n    if (db.transaction) {\n        return db.transaction(callback);\n    }\n    return callback(db);\n}\n", "import { sql } from \"drizzle-orm\";\nexport function workflowJsonb(value) {\n    const json = JSON.stringify(value ?? {});\n    return sql `${json}::text::jsonb`;\n}\n", "export const WORKFLOW_WAKE_SIGNAL_CHANNEL = \"gencow_app_wake_v1\";\nexport const WORKFLOW_WAKE_SIGNAL_PAYLOAD = JSON.stringify({ kind: \"workflow\" });\n", "const CHECKPOINT_MODE_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_LIMIT_MODE\";\nconst CHECKPOINT_SOFT_LIMIT_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES\";\nconst CHECKPOINT_HARD_LIMIT_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES\";\nconst DEFAULT_SOFT_LIMIT_BYTES = 64 * 1024;\nconst DEFAULT_HARD_LIMIT_BYTES = 256 * 1024;\nconst BOOT_ENV_SNAPSHOT = {\n    mode: process.env[CHECKPOINT_MODE_ENV],\n    softLimitBytes: process.env[CHECKPOINT_SOFT_LIMIT_ENV],\n    hardLimitBytes: process.env[CHECKPOINT_HARD_LIMIT_ENV],\n};\nconst ERROR_CODES = {\n    args: \"workflow_args_too_large\",\n    signal: \"workflow_signal_payload_too_large\",\n};\nexport class WorkflowPayloadPolicyError extends Error {\n    errorCode;\n    code;\n    status = 413;\n    kind;\n    sizeBytes;\n    hardLimitBytes;\n    constructor(params) {\n        const errorCode = ERROR_CODES[params.kind];\n        super(`${errorCode}: Workflow \"${params.workflowName}\" ${params.kind} payload is ${params.sizeBytes} bytes, exceeding the ${params.hardLimitBytes} byte hard limit. Store large values in an app table/storage object and pass only an id/reference/count/checksum.`);\n        this.name = \"WorkflowPayloadPolicyError\";\n        this.errorCode = errorCode;\n        this.code = errorCode;\n        this.kind = params.kind;\n        this.sizeBytes = params.sizeBytes;\n        this.hardLimitBytes = params.hardLimitBytes;\n    }\n}\nfunction normalizeLimit(value, fallback) {\n    if (!value?.trim())\n        return fallback;\n    const parsed = Number(value);\n    return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;\n}\nfunction normalizeMode(value) {\n    return value === \"platform_enforce\" || value === \"enforce\" ? value : \"observe\";\n}\nexport function resolveWorkflowPayloadPolicyConfig(env = BOOT_ENV_SNAPSHOT) {\n    const hardLimitBytes = normalizeLimit(env.hardLimitBytes, DEFAULT_HARD_LIMIT_BYTES);\n    return {\n        mode: normalizeMode(env.mode),\n        softLimitBytes: Math.min(normalizeLimit(env.softLimitBytes, DEFAULT_SOFT_LIMIT_BYTES), hardLimitBytes),\n        hardLimitBytes,\n    };\n}\nexport function assertWorkflowPayloadWithinLimit(params) {\n    const config = params.config ?? resolveWorkflowPayloadPolicyConfig();\n    const serializedJson = JSON.stringify(params.serializedValue) ?? \"null\";\n    const sizeBytes = new TextEncoder().encode(serializedJson).byteLength;\n    const level = sizeBytes > config.hardLimitBytes\n        ? \"hard_limit\"\n        : sizeBytes > config.softLimitBytes\n            ? \"soft_limit\"\n            : \"ok\";\n    if (level !== \"ok\") {\n        (params.logger ?? console).warn(`[workflow] ${params.workflowName} ${params.kind} workflow payload ${level} (sizeBytes=${sizeBytes}, softLimitBytes=${config.softLimitBytes}, hardLimitBytes=${config.hardLimitBytes}, mode=${config.mode}, errorCode=${level === \"hard_limit\" ? ERROR_CODES[params.kind] : \"none\"})`);\n    }\n    const enforced = config.mode === \"enforce\" ||\n        (config.mode === \"platform_enforce\" && params.workflowName.startsWith(\"__gencow.\"));\n    if (enforced && sizeBytes > config.hardLimitBytes) {\n        throw new WorkflowPayloadPolicyError({\n            workflowName: params.workflowName,\n            kind: params.kind,\n            sizeBytes,\n            hardLimitBytes: config.hardLimitBytes,\n        });\n    }\n    return sizeBytes;\n}\n", "export function deriveWorkflowStatus(status, currentStep) {\n    if (status !== \"pending\") {\n        return status;\n    }\n    if (currentStep?.startsWith(\"sleep#\")) {\n        return \"sleeping\";\n    }\n    if (currentStep?.startsWith(\"wait:\")) {\n        return \"waiting\";\n    }\n    return \"queued\";\n}\n", "import { sql } from \"drizzle-orm\";\nimport { query } from \"./reactive-query.js\";\nimport { mutation } from \"./reactive-mutation.js\";\nimport { createWorkflowRealtimeToken, deserializeWorkflowValue, getWorkflowResumeActionName, getWorkflowRealtimeKey, serializeWorkflowValue, } from \"./workflow.js\";\nimport { workflowJsonb } from \"./workflow-json.js\";\nimport { WORKFLOW_WAKE_SIGNAL_CHANNEL, WORKFLOW_WAKE_SIGNAL_PAYLOAD } from \"./workflow-wake-signal.js\";\nimport { GencowValidationError, v } from \"./v.js\";\nimport { assertWorkflowPayloadWithinLimit } from \"./workflow-payload-policy.js\";\nimport { deriveWorkflowStatus } from \"./workflow-types.js\";\nconst WORKFLOW_STATUSES = new Set([\"pending\", \"running\", \"completed\", \"failed\"]);\nconst WORKFLOW_DERIVED_PENDING_STATUSES = new Set([\"queued\", \"waiting\", \"sleeping\"]);\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction parseJsonField(value) {\n    if (typeof value !== \"string\")\n        return value;\n    try {\n        return JSON.parse(value);\n    }\n    catch {\n        return value;\n    }\n}\nfunction toIsoString(value) {\n    if (value instanceof Date)\n        return value.toISOString();\n    const parsed = new Date(value);\n    return Number.isFinite(parsed.getTime()) ? parsed.toISOString() : String(value);\n}\nfunction toOptionalIsoString(value) {\n    return value ? toIsoString(value) : null;\n}\nfunction mapWorkflowSummary(row) {\n    return {\n        id: row.id,\n        name: row.name,\n        status: row.status,\n        derivedStatus: deriveWorkflowStatus(row.status, row.current_step),\n        currentStep: row.current_step,\n        error: row.error,\n        errorCode: row.error_code,\n        retryCount: row.retry_count,\n        maxRetries: row.max_retries,\n        maxDurationMs: Number(row.max_duration_ms),\n        startedAt: toIsoString(row.started_at),\n        updatedAt: toIsoString(row.updated_at),\n        completedAt: toOptionalIsoString(row.completed_at),\n    };\n}\nfunction mapWorkflowStep(row) {\n    return {\n        name: row.step_name,\n        status: row.status,\n        output: deserializeWorkflowValue(parseJsonField(row.output)),\n        error: row.error,\n        startedAt: toOptionalIsoString(row.started_at),\n        updatedAt: toIsoString(row.updated_at),\n        completedAt: toOptionalIsoString(row.completed_at),\n    };\n}\nfunction normalizeListLimit(limit) {\n    if (limit == null)\n        return 20;\n    if (!Number.isFinite(limit)) {\n        throw new GencowValidationError(`Argument \"limit\": expected a finite number, got ${limit}`);\n    }\n    return Math.max(1, Math.min(100, Math.floor(limit)));\n}\nfunction normalizeStatus(status) {\n    if (status == null)\n        return undefined;\n    if (!WORKFLOW_STATUSES.has(status)) {\n        throw new GencowValidationError(`Argument \"status\": expected one of pending, running, completed, failed`);\n    }\n    return status;\n}\nfunction normalizeDerivedStatus(status) {\n    if (status == null)\n        return undefined;\n    if (WORKFLOW_DERIVED_PENDING_STATUSES.has(status)) {\n        return status;\n    }\n    return normalizeStatus(status);\n}\nfunction toWorkflowStatusFilter(status) {\n    if (status == null)\n        return undefined;\n    if (WORKFLOW_DERIVED_PENDING_STATUSES.has(status)) {\n        return \"pending\";\n    }\n    return status;\n}\nasync function ensureWorkflowRealtimeToken(db, workflowId, currentToken) {\n    if (currentToken && currentToken.trim() !== \"\")\n        return currentToken;\n    const nextToken = createWorkflowRealtimeToken();\n    const updateResult = await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET realtime_token = ${nextToken}\n        WHERE id = ${workflowId}\n          AND (realtime_token IS NULL OR realtime_token = '')\n        RETURNING realtime_token\n    `);\n    const updatedToken = rowsFromResult(updateResult)[0]?.realtime_token ?? null;\n    if (updatedToken && updatedToken.trim() !== \"\")\n        return updatedToken;\n    const rereadResult = await db.execute(sql `\n        SELECT realtime_token\n        FROM _gencow_workflows\n        WHERE id = ${workflowId}\n        LIMIT 1\n    `);\n    const rereadToken = rowsFromResult(rereadResult)[0]?.realtime_token ?? null;\n    return rereadToken && rereadToken.trim() !== \"\" ? rereadToken : null;\n}\nasync function loadWorkflowSignalTarget(db, workflowId) {\n    const result = await db.execute(sql `\n        SELECT\n            id,\n            name,\n            status,\n            current_step,\n            user_id\n        FROM _gencow_workflows\n        WHERE id = ${workflowId}\n        LIMIT 1\n  `);\n    return rowsFromResult(result)[0] ?? null;\n}\nfunction isMissingWorkflowV2SignalSchemaError(error) {\n    const code = error && typeof error === \"object\" && \"code\" in error ? String(error.code) : \"\";\n    const cause = error && typeof error === \"object\" && \"cause\" in error ? error.cause : null;\n    const causeCode = cause && typeof cause === \"object\" && \"code\" in cause ? String(cause.code) : \"\";\n    const message = error instanceof Error ? error.message : String(error);\n    return (code === \"42P01\" ||\n        code === \"42703\" ||\n        causeCode === \"42P01\" ||\n        causeCode === \"42703\" ||\n        ((code === \"23503\" || causeCode === \"23503\") && message.includes(\"_gencow_workflow_signals_v2\")) ||\n        message.includes('relation \"_gencow_workflow_signals_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_signals_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_runs_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_runs_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_outbox_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_outbox_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_steps_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_steps_v2 does not exist\"));\n}\nfunction isMissingWorkflowV2PayloadSchemaError(error) {\n    const code = error && typeof error === \"object\" && \"code\" in error ? String(error.code) : \"\";\n    const cause = error && typeof error === \"object\" && \"cause\" in error ? error.cause : null;\n    const causeCode = cause && typeof cause === \"object\" && \"code\" in cause ? String(cause.code) : \"\";\n    const message = error instanceof Error ? error.message : String(error);\n    return (code === \"42P01\" ||\n        causeCode === \"42P01\" ||\n        message.includes('relation \"_gencow_workflow_runs_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_runs_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_steps_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_steps_v2 does not exist\"));\n}\nasync function loadWorkflowV2PayloadSnapshot(db, workflowId) {\n    try {\n        const runResult = await db.execute(sql `\n      SELECT args_json, result_json\n      FROM _gencow_workflow_runs_v2\n      WHERE id = ${workflowId}\n      LIMIT 1\n    `);\n        const run = rowsFromResult(runResult)[0];\n        if (!run)\n            return null;\n        const stepResult = await db.execute(sql `\n      SELECT step_key, output_json\n      FROM _gencow_workflow_steps_v2\n      WHERE run_id = ${workflowId}\n    `);\n        return {\n            run,\n            steps: new Map(rowsFromResult(stepResult).map((step) => [\n                step.step_key,\n                parseJsonField(step.output_json),\n            ])),\n        };\n    }\n    catch (error) {\n        if (isMissingWorkflowV2PayloadSchemaError(error))\n            return null;\n        throw error;\n    }\n}\nasync function tryRecordWorkflowV2Signal(options) {\n    try {\n        await options.db.execute(sql `\n      WITH inserted AS (\n        INSERT INTO _gencow_workflow_signals_v2 (\n          id,\n          run_id,\n          event_name,\n          payload_json,\n          idempotency_key\n        )\n        VALUES (\n          ${crypto.randomUUID()},\n          ${options.workflowId},\n          ${options.event},\n          ${workflowJsonb(options.payload)},\n          ${crypto.randomUUID()}\n        )\n        RETURNING id, run_id\n      ),\n      inserted_legacy AS (\n        INSERT INTO _gencow_workflow_events (\n          id,\n          workflow_id,\n          event_name,\n          payload\n        )\n        VALUES (\n          ${options.eventId},\n          ${options.workflowId},\n          ${options.event},\n          NULL\n        )\n        RETURNING id\n      ),\n      queued_run AS (\n        UPDATE _gencow_workflow_runs_v2 run\n        SET\n          status = 'queued',\n          runnable_at = NOW(),\n          lease_owner = NULL,\n          lease_expires_at = NULL,\n          heartbeat_at = NULL,\n          updated_at = NOW()\n        FROM inserted\n        WHERE run.id = inserted.run_id\n          AND run.status = 'waiting'\n          AND run.completed_at IS NULL\n          AND run.cancel_requested_at IS NULL\n        RETURNING run.id\n      ),\n      wake_outbox AS (\n        INSERT INTO _gencow_workflow_outbox_v2 (\n          id,\n          run_id,\n          kind,\n          available_at,\n          status\n        )\n        SELECT\n          'signal:' || inserted.id,\n          inserted.run_id,\n          'wake_signal',\n          NOW(),\n          'pending'\n        FROM inserted\n        JOIN queued_run ON queued_run.id = inserted.run_id\n        ON CONFLICT (id) DO NOTHING\n        RETURNING id\n      ),\n      wake_notified AS (\n        SELECT pg_notify(${WORKFLOW_WAKE_SIGNAL_CHANNEL}, ${WORKFLOW_WAKE_SIGNAL_PAYLOAD})\n        FROM wake_outbox\n      )\n      SELECT 1\n      FROM inserted\n      LEFT JOIN inserted_legacy ON TRUE\n      LEFT JOIN wake_notified ON TRUE\n    `);\n        return true;\n    }\n    catch (error) {\n        if (isMissingWorkflowV2SignalSchemaError(error))\n            return false;\n        throw error;\n    }\n}\nexport async function loadWorkflowSnapshot(db, workflowId, options) {\n    const workflowResult = await db.execute(sql `\n        SELECT\n            id,\n            name,\n            args,\n            status,\n            current_step,\n            result,\n            error,\n            error_code,\n            retry_count,\n            max_retries,\n            max_duration_ms,\n            started_at,\n            updated_at,\n            completed_at,\n            realtime_token,\n            user_id\n        FROM _gencow_workflows\n        WHERE id = ${workflowId}\n        LIMIT 1\n    `);\n    const row = rowsFromResult(workflowResult)[0] ?? null;\n    if (!row)\n        return null;\n    const viewerUserId = options?.viewerUserId ?? null;\n    if (options?.requireViewerMatch && row.user_id && row.user_id !== viewerUserId) {\n        return null;\n    }\n    const realtimeToken = await ensureWorkflowRealtimeToken(db, workflowId, row.realtime_token);\n    if (!realtimeToken)\n        return null;\n    const v2Payload = await loadWorkflowV2PayloadSnapshot(db, workflowId);\n    const stepsResult = await db.execute(sql `\n        SELECT\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        FROM _gencow_workflow_steps\n        WHERE workflow_id = ${workflowId}\n        ORDER BY COALESCE(started_at, updated_at) ASC, step_name ASC\n    `);\n    const steps = rowsFromResult(stepsResult).map((stepRow) => {\n        const mapped = mapWorkflowStep(stepRow);\n        return v2Payload?.steps.has(stepRow.step_name)\n            ? { ...mapped, output: v2Payload.steps.get(stepRow.step_name) }\n            : mapped;\n    });\n    return {\n        ...mapWorkflowSummary(row),\n        args: v2Payload\n            ? deserializeWorkflowValue(parseJsonField(v2Payload.run.args_json))\n            : deserializeWorkflowValue(parseJsonField(row.args)),\n        result: v2Payload\n            ? parseJsonField(v2Payload.run.result_json)\n            : deserializeWorkflowValue(parseJsonField(row.result)),\n        steps,\n        realtimeKey: getWorkflowRealtimeKey(row.id, realtimeToken),\n    };\n}\nexport function registerWorkflowsApi() {\n    if (globalThis.__gencow_workflowsApiRegistered)\n        return;\n    globalThis.__gencow_workflowsApiRegistered = true;\n    query(\"workflows.get\", {\n        args: { id: v.string() },\n        public: true,\n        handler: async (ctx, args) => {\n            return loadWorkflowSnapshot(ctx.unsafeDb, args.id, {\n                viewerUserId: ctx.auth.getUserIdentity()?.id ?? null,\n                requireViewerMatch: true,\n            });\n        },\n    });\n    mutation(\"workflows.signal\", {\n        args: {\n            id: v.string(),\n            event: v.string(),\n            payload: v.optional(v.any()),\n        },\n        public: true,\n        handler: async (ctx, args) => {\n            const normalizedEvent = args.event.trim();\n            if (!normalizedEvent) {\n                throw new GencowValidationError(`Argument \"event\": expected a non-empty string`);\n            }\n            const workflow = await loadWorkflowSignalTarget(ctx.unsafeDb, args.id);\n            const viewerUserId = ctx.auth.getUserIdentity()?.id ?? null;\n            if (!workflow || (workflow.user_id && workflow.user_id !== viewerUserId)) {\n                return {\n                    ok: false,\n                    workflowId: args.id,\n                    event: normalizedEvent,\n                    scheduledJobId: null,\n                };\n            }\n            if (workflow.status === \"completed\" || workflow.status === \"failed\") {\n                return {\n                    ok: false,\n                    workflowId: workflow.id,\n                    event: normalizedEvent,\n                    scheduledJobId: null,\n                };\n            }\n            const persistedPayload = serializeWorkflowValue(args.payload);\n            assertWorkflowPayloadWithinLimit({\n                workflowName: workflow.name,\n                kind: \"signal\",\n                serializedValue: persistedPayload,\n            });\n            const eventId = crypto.randomUUID();\n            const recordedV2 = await tryRecordWorkflowV2Signal({\n                db: ctx.unsafeDb,\n                workflowId: workflow.id,\n                event: normalizedEvent,\n                eventId,\n                payload: persistedPayload,\n            });\n            if (!recordedV2) {\n                await ctx.unsafeDb.execute(sql `\n                INSERT INTO _gencow_workflow_events (\n                    id,\n                    workflow_id,\n                    event_name,\n                    payload\n                )\n                VALUES (\n                    ${eventId},\n                    ${workflow.id},\n                    ${normalizedEvent},\n                  ${workflowJsonb(persistedPayload)}\n                )\n            `);\n            }\n            let scheduledJobId = null;\n            if (workflow.status === \"pending\" && workflow.current_step?.startsWith(\"wait:\")) {\n                try {\n                    scheduledJobId = ctx.scheduler.runAfter(0, getWorkflowResumeActionName(workflow.name), {\n                        workflowId: workflow.id,\n                    });\n                }\n                catch {\n                    scheduledJobId = null;\n                }\n            }\n            return {\n                ok: true,\n                workflowId: workflow.id,\n                event: normalizedEvent,\n                scheduledJobId,\n            };\n        },\n    });\n    query(\"workflows.list\", {\n        args: {\n            limit: v.optional(v.number()),\n            status: v.optional(v.string()),\n        },\n        handler: async (ctx, args) => {\n            const userId = ctx.auth.requireAuth().id;\n            const limit = normalizeListLimit(args.limit);\n            const requestedStatus = normalizeDerivedStatus(args.status);\n            const status = toWorkflowStatusFilter(requestedStatus);\n            const result = status == null\n                ? await ctx.unsafeDb.execute(sql `\n                    SELECT\n                        id,\n                        name,\n                        args,\n                        status,\n                        current_step,\n                        result,\n                        error,\n                        error_code,\n                        retry_count,\n                        max_retries,\n                        max_duration_ms,\n                        started_at,\n                        updated_at,\n                        completed_at,\n                        user_id\n                    FROM _gencow_workflows\n                    WHERE user_id = ${userId}\n                    ORDER BY started_at DESC\n                    LIMIT ${limit}\n                `)\n                : await ctx.unsafeDb.execute(sql `\n                    SELECT\n                        id,\n                        name,\n                        args,\n                        status,\n                        current_step,\n                        result,\n                        error,\n                        error_code,\n                        retry_count,\n                        max_retries,\n                        max_duration_ms,\n                        started_at,\n                        updated_at,\n                        completed_at,\n                        user_id\n                    FROM _gencow_workflows\n                    WHERE user_id = ${userId}\n                      AND status = ${status}\n                    ORDER BY started_at DESC\n                    LIMIT ${limit}\n                `);\n            return rowsFromResult(result)\n                .map(mapWorkflowSummary)\n                .filter((row) => requestedStatus == null || row.derivedStatus === requestedStatus);\n        },\n    });\n}\n", "import { sql } from \"drizzle-orm\";\nimport { mutation } from \"./reactive-mutation.js\";\nimport { applyWorkflowStartAdmission, runWorkflowAdmissionCriticalSection } from \"./workflow-admission.js\";\nimport { workflowJsonb } from \"./workflow-json.js\";\nimport { WORKFLOW_WAKE_SIGNAL_CHANNEL, WORKFLOW_WAKE_SIGNAL_PAYLOAD } from \"./workflow-wake-signal.js\";\nimport { registerWorkflowsApi } from \"./workflows-api.js\";\nimport { assertWorkflowPayloadWithinLimit } from \"./workflow-payload-policy.js\";\nconst workflowRegistry = (globalThis.__gencow_workflowRegistry ??= new Map());\nexport const DEFAULT_WORKFLOW_MAX_DURATION_MS = 30 * 60 * 1000;\nexport const DEFAULT_WORKFLOW_MAX_RETRIES = 3;\nexport const WORKFLOW_RESUME_ACTION_PREFIX = \"__gencow.workflow.resume\";\nexport const WORKFLOW_REALTIME_KEY_PREFIX = \"__gencow.workflow.state\";\nfunction isSerializedWorkflowValue(value) {\n    return !!value && typeof value === \"object\" && (\"__gencowUndefined\" in value || \"value\" in value);\n}\nexport function serializeWorkflowValue(value) {\n    const payload = value === undefined ? { __gencowUndefined: true } : { value };\n    try {\n        return JSON.parse(JSON.stringify(payload));\n    }\n    catch (error) {\n        const reason = error instanceof Error ? error.message : String(error);\n        throw new Error(`workflow() only persists JSON-serializable values. Failed to serialize workflow payload: ${reason}`);\n    }\n}\nexport function deserializeWorkflowValue(value) {\n    if (!isSerializedWorkflowValue(value))\n        return value;\n    if (\"__gencowUndefined\" in value)\n        return undefined;\n    return value.value;\n}\nfunction clampRetries(retries) {\n    if (retries == null)\n        return DEFAULT_WORKFLOW_MAX_RETRIES;\n    if (!Number.isFinite(retries) || retries < 0) {\n        throw new Error(`workflow() retries must be a non-negative finite number, got \"${retries}\"`);\n    }\n    return Math.floor(retries);\n}\nfunction parseDurationString(raw, label) {\n    const normalized = raw.trim().toLowerCase();\n    const match = normalized.match(/^(\\d+)(ms|s|m|h|d)$/);\n    if (!match) {\n        throw new Error(`${label} must be a number of ms or a string like \"30m\", \"90s\", \"1h\" \u2014 got \"${raw}\"`);\n    }\n    const value = Number(match[1]);\n    const unit = match[2];\n    const unitMs = unit === \"ms\" ? 1 : unit === \"s\" ? 1_000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n    return value * unitMs;\n}\nexport function parseWorkflowDurationMs(raw, label = \"workflow duration\") {\n    if (typeof raw === \"number\") {\n        if (!Number.isFinite(raw) || raw <= 0) {\n            throw new Error(`${label} must be a positive finite number, got \"${raw}\"`);\n        }\n        return Math.floor(raw);\n    }\n    if (typeof raw !== \"string\") {\n        throw new Error(`${label} must be a positive finite number or a string like \"30m\", \"90s\", \"1h\" \u2014 got \"${String(raw)}\"`);\n    }\n    return parseDurationString(raw, label);\n}\nfunction normalizeMaxDurationMs(maxDuration, label = \"workflow() maxDuration\") {\n    if (maxDuration == null)\n        return DEFAULT_WORKFLOW_MAX_DURATION_MS;\n    return parseWorkflowDurationMs(maxDuration, label);\n}\nfunction normalizeOptionalDurationMs(duration, label) {\n    return duration == null ? null : parseWorkflowDurationMs(duration, label);\n}\nfunction normalizeConcurrency(concurrency) {\n    if (concurrency == null)\n        return null;\n    if (!Number.isFinite(concurrency) || concurrency <= 0) {\n        throw new Error(`workflow() concurrency must be a positive finite number, got \"${concurrency}\"`);\n    }\n    return Math.floor(concurrency);\n}\nfunction isMissingWorkflowV2SchemaError(error) {\n    const code = error && typeof error === \"object\" && \"code\" in error ? String(error.code) : \"\";\n    const cause = error && typeof error === \"object\" && \"cause\" in error ? error.cause : null;\n    const causeCode = cause && typeof cause === \"object\" && \"code\" in cause ? String(cause.code) : \"\";\n    const message = error instanceof Error ? error.message : String(error);\n    return (code === \"42P01\" ||\n        code === \"42703\" ||\n        causeCode === \"42P01\" ||\n        causeCode === \"42703\" ||\n        message.includes('relation \"_gencow_workflow_runs_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_runs_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_outbox_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_outbox_v2 does not exist\") ||\n        message.includes('column \"max_active_duration_ms\"') ||\n        message.includes('column \"retry_count\"') ||\n        message.includes('column \"user_id\"'));\n}\nfunction rows(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction numberFrom(value) {\n    const parsed = Number(value ?? 0);\n    return Number.isFinite(parsed) ? parsed : 0;\n}\nasync function hasWorkflowV2StartSchema(db) {\n    const runColumns = [\n        \"id\",\n        \"workflow_name\",\n        \"workflow_version\",\n        \"args_json\",\n        \"user_id\",\n        \"max_active_duration_ms\",\n        \"lifecycle_deadline_at\",\n        \"retry_count\",\n        \"max_retries\",\n        \"max_attempts\",\n    ];\n    const outboxColumns = [\"id\", \"run_id\", \"kind\", \"available_at\", \"status\"];\n    const runColumnList = sql.join(runColumns.map((column) => sql `${column}`), sql `, `);\n    const outboxColumnList = sql.join(outboxColumns.map((column) => sql `${column}`), sql `, `);\n    const result = await db.execute(sql `\n    SELECT\n      (\n        SELECT COUNT(*)::int\n        FROM information_schema.columns\n        WHERE table_schema = 'public'\n          AND table_name = '_gencow_workflow_runs_v2'\n          AND column_name IN (${runColumnList})\n      ) AS run_column_count,\n      (\n        SELECT COUNT(*)::int\n        FROM information_schema.columns\n        WHERE table_schema = 'public'\n          AND table_name = '_gencow_workflow_outbox_v2'\n          AND column_name IN (${outboxColumnList})\n      ) AS outbox_column_count\n  `);\n    const row = rows(result)[0];\n    return (numberFrom(row?.run_column_count) === runColumns.length &&\n        numberFrom(row?.outbox_column_count) === outboxColumns.length);\n}\nasync function tryInsertWorkflowV2Run(options) {\n    try {\n        if (!(await hasWorkflowV2StartSchema(options.db)))\n            return false;\n        await options.db.execute(sql `\n      WITH inserted_run AS (\n        INSERT INTO _gencow_workflow_runs_v2 (\n          id,\n          workflow_name,\n          workflow_version,\n          args_json,\n          user_id,\n          max_active_duration_ms,\n          lifecycle_deadline_at,\n          retry_count,\n          max_retries,\n          max_attempts\n        )\n        VALUES (\n          ${options.workflowId},\n          ${options.workflowName},\n          ${options.workflowVersion ?? null},\n          ${workflowJsonb(options.args)},\n          ${options.userId},\n          ${options.maxActiveDurationMs},\n          CASE\n            WHEN ${options.lifecycleTimeoutMs}::bigint IS NULL THEN NULL\n            ELSE NOW() + (${options.lifecycleTimeoutMs}::bigint * INTERVAL '1 millisecond')\n          END,\n          0,\n          ${options.maxRetries},\n          ${options.maxRetries + 1}\n        )\n        RETURNING id\n      ),\n      inserted_outbox AS (\n        INSERT INTO _gencow_workflow_outbox_v2 (\n          id,\n          run_id,\n          kind,\n          available_at,\n          status\n        )\n        SELECT\n          'start:' || inserted_run.id,\n          inserted_run.id,\n          'wake_run',\n          NOW(),\n          'pending'\n        FROM inserted_run\n        ON CONFLICT (id) DO NOTHING\n        RETURNING id\n      ),\n      wake_notified AS (\n        SELECT pg_notify(${WORKFLOW_WAKE_SIGNAL_CHANNEL}, ${WORKFLOW_WAKE_SIGNAL_PAYLOAD})\n        FROM inserted_outbox\n      )\n      SELECT inserted_run.id\n      FROM inserted_run\n      LEFT JOIN wake_notified ON TRUE\n    `);\n        return true;\n    }\n    catch (error) {\n        if (isMissingWorkflowV2SchemaError(error))\n            return false;\n        throw error;\n    }\n}\nasync function tryDeleteWorkflowV2Run(db, workflowId) {\n    try {\n        await db.execute(sql `\n      DELETE FROM _gencow_workflow_runs_v2\n      WHERE id = ${workflowId}\n    `);\n    }\n    catch (error) {\n        if (!isMissingWorkflowV2SchemaError(error))\n            throw error;\n    }\n}\nexport function getWorkflowResumeActionName(name) {\n    return `${WORKFLOW_RESUME_ACTION_PREFIX}.${name}`;\n}\nexport function createWorkflowRealtimeToken() {\n    return crypto.randomUUID().replace(/-/g, \"\");\n}\nexport function getWorkflowRealtimeKey(workflowId, realtimeToken) {\n    return `${WORKFLOW_REALTIME_KEY_PREFIX}.${workflowId}.${realtimeToken}`;\n}\nexport function getWorkflowDef(name) {\n    return workflowRegistry.get(name);\n}\nexport function getRegisteredWorkflows() {\n    return Array.from(workflowRegistry.values());\n}\n/**\n * workflow() \u2014 durable multi-step execution with step memoization.\n *\n * The returned value is still a mutation definition, so existing API codegen and\n * frontend hooks keep working without extra workflow-specific tooling.\n */\nexport function workflow(name, options) {\n    registerWorkflowsApi();\n    const maxActiveDurationMs = normalizeMaxDurationMs(options.maxActiveDuration ?? options.maxDuration, options.maxActiveDuration == null ? \"workflow() maxDuration\" : \"workflow() maxActiveDuration\");\n    const lifecycleTimeoutMs = normalizeOptionalDurationMs(options.lifecycleTimeout, \"workflow() lifecycleTimeout\");\n    const maxRetries = clampRetries(options.retries);\n    const def = {\n        name,\n        argsSchema: options.args,\n        isPublic: options.public === true,\n        version: options.version,\n        maxDurationMs: maxActiveDurationMs,\n        maxActiveDurationMs,\n        lifecycleTimeoutMs,\n        concurrency: normalizeConcurrency(options.concurrency),\n        maxRetries,\n        handler: options.handler,\n    };\n    workflowRegistry.set(name, def);\n    return mutation(name, {\n        args: options.args,\n        public: options.public,\n        handler: async (ctx, args) => {\n            const workflowId = crypto.randomUUID();\n            const resumeAction = getWorkflowResumeActionName(name);\n            const ownerId = ctx.auth.getUserIdentity()?.id ?? null;\n            const persistedArgs = serializeWorkflowValue(args ?? {});\n            assertWorkflowPayloadWithinLimit({\n                workflowName: name,\n                kind: \"args\",\n                serializedValue: persistedArgs,\n            });\n            const realtimeToken = createWorkflowRealtimeToken();\n            let insertedWorkflowV2 = false;\n            try {\n                await runWorkflowAdmissionCriticalSection(ctx.unsafeDb, async (db) => {\n                    await applyWorkflowStartAdmission({\n                        db,\n                        workflowName: name,\n                        args: persistedArgs,\n                    });\n                    insertedWorkflowV2 = await tryInsertWorkflowV2Run({\n                        db,\n                        workflowId,\n                        workflowName: name,\n                        workflowVersion: options.version ?? null,\n                        args: persistedArgs,\n                        userId: ownerId,\n                        maxActiveDurationMs,\n                        lifecycleTimeoutMs,\n                        maxRetries,\n                    });\n                    const legacyArgs = insertedWorkflowV2 ? serializeWorkflowValue(undefined) : persistedArgs;\n                    await db.execute(sql `\n                    INSERT INTO _gencow_workflows (\n                        id,\n                        name,\n                        args,\n                        realtime_token,\n                        status,\n                        retry_count,\n                        max_retries,\n                        max_duration_ms,\n                        user_id\n                    )\n                    VALUES (\n                        ${workflowId},\n                        ${name},\n                        ${workflowJsonb(legacyArgs)},\n                      ${realtimeToken},\n                      'pending',\n                      0,\n                      ${maxRetries},\n                      ${maxActiveDurationMs},\n                      ${ownerId}\n                    )\n                `);\n                });\n                const scheduledJobId = insertedWorkflowV2\n                    ? `start:${workflowId}`\n                    : ctx.scheduler.runAfter(0, resumeAction, { workflowId });\n                return {\n                    id: workflowId,\n                    name,\n                    status: \"pending\",\n                    scheduledJobId,\n                };\n            }\n            catch (error) {\n                await ctx.unsafeDb.execute(sql `\n                    DELETE FROM _gencow_workflows\n                    WHERE id = ${workflowId}\n                `);\n                if (insertedWorkflowV2) {\n                    await tryDeleteWorkflowV2Run(ctx.unsafeDb, workflowId);\n                }\n                throw error;\n            }\n        },\n    });\n}\n", "/**\n * packages/core/src/retry.ts\n *\n * Retry \uC720\uD2F8\uB9AC\uD2F0 \u2014 exponential backoff + jitter\n *\n * \uC678\uBD80 API(LLM, \uACB0\uC81C, \uC774\uBA54\uC77C \uB4F1) \uD638\uCD9C \uC2E4\uD328 \uC2DC \uC790\uB3D9 \uC7AC\uC2DC\uB3C4.\n * ctx.retry() \uB610\uB294 \uB3C5\uB9BD \uD568\uC218 withRetry()\uB85C \uC0AC\uC6A9 \uAC00\uB2A5.\n *\n * @example\n * // \uB3C5\uB9BD \uD568\uC218\n * import { withRetry } from \"@gencow/core\";\n * const result = await withRetry(() => fetch(\"https://api.example.com\"), {\n *     maxAttempts: 5,\n *     initialBackoffMs: 500,\n * });\n *\n * // ctx\uC5D0 \uB0B4\uC7A5\n * export const charge = mutation({\n *     handler: async (ctx, args) => {\n *         const result = await ctx.retry(\n *             () => stripe.charges.create({ amount: args.amount }),\n *             { maxAttempts: 3, initialBackoffMs: 500 },\n *         );\n *         return result;\n *     },\n * });\n */\n// \u2500\u2500\u2500 \uAE30\uBCF8\uAC12 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_INITIAL_BACKOFF_MS = 1000;\nconst DEFAULT_BASE = 2;\nconst DEFAULT_MAX_BACKOFF_MS = 30_000;\nconst JITTER_MIN = 0.75;\nconst JITTER_MAX = 1.25;\n// \u2500\u2500\u2500 \uD575\uC2EC \uD568\uC218 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * \uC7AC\uC2DC\uB3C4 \uAC00\uB2A5\uD55C \uBE44\uB3D9\uAE30 \uD568\uC218 \uC2E4\uD589\n *\n * Exponential backoff + jitter\uB85C \uC7AC\uC2DC\uB3C4.\n * delay = min(initialBackoffMs \u00D7 base^attempt \u00D7 jitter, maxBackoffMs)\n */\nexport async function withRetry(fn, options = {}) {\n    const { maxAttempts = DEFAULT_MAX_ATTEMPTS, initialBackoffMs = DEFAULT_INITIAL_BACKOFF_MS, base = DEFAULT_BASE, maxBackoffMs = DEFAULT_MAX_BACKOFF_MS, shouldRetry, onRetry, } = options;\n    if (maxAttempts < 1) {\n        throw new Error(`withRetry: maxAttempts must be >= 1, got ${maxAttempts}`);\n    }\n    for (let attempt = 0; attempt < maxAttempts; attempt++) {\n        try {\n            return await fn();\n        }\n        catch (error) {\n            const isLastAttempt = attempt === maxAttempts - 1;\n            // \uB9C8\uC9C0\uB9C9 \uC2DC\uB3C4\uBA74 \uC5D0\uB7EC throw\n            if (isLastAttempt)\n                throw error;\n            // shouldRetry\uAC00 \uC788\uC73C\uBA74 \uD310\uB2E8\n            if (shouldRetry && !shouldRetry(error, attempt))\n                throw error;\n            // \uB51C\uB808\uC774 \uACC4\uC0B0: exponential backoff + jitter\n            const jitter = JITTER_MIN + Math.random() * (JITTER_MAX - JITTER_MIN);\n            const rawDelay = initialBackoffMs * Math.pow(base, attempt) * jitter;\n            const delay = Math.min(rawDelay, maxBackoffMs);\n            // \uCF5C\uBC31 \uD638\uCD9C\n            if (onRetry)\n                onRetry(error, attempt + 1, delay);\n            await sleep(delay);\n        }\n    }\n    // TypeScript\uB97C \uC704\uD55C unreachable \u2014 \uC2E4\uC81C\uB85C \uC5EC\uAE30\uC5D0 \uB3C4\uB2EC\uD558\uC9C0 \uC54A\uC74C\n    throw new Error(\"withRetry: unreachable\");\n}\n// \u2500\u2500\u2500 \uB0B4\uBD80 \uC720\uD2F8\uB9AC\uD2F0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction sleep(ms) {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n}\n", "const RESERVED_TENANT_RUNTIME_ENV_KEYS = new Set([\n    \"PORT\",\n    \"DATABASE_URL\",\n    \"GENCOW_DB_URL\",\n    \"BETTER_AUTH_SECRET\",\n    \"BETTER_AUTH_URL\",\n    \"IS_PLATFORM\",\n    \"GENCOW_PLATFORM_CONFIG_FILE\",\n    \"GENCOW_PLATFORM_URL\",\n    \"GENCOW_PLATFORM_INTERNAL_URL\",\n    \"GENCOW_PLATFORM_INTERNAL_URL_ALT\",\n    \"GENCOW_PLATFORM_DB\",\n    \"GENCOW_MANAGED_PUBLIC_ORIGINS\",\n    \"PLATFORM_OPENAI_KEY\",\n    \"PLATFORM_GOOGLE_KEY\",\n    \"PLATFORM_GOOGLE_CLIENT_ID\",\n    \"PLATFORM_GOOGLE_CLIENT_SECRET\",\n    \"PLATFORM_INTERNAL_SECRET\",\n    \"INVITE_ONLY\",\n    \"RUNNER_TYPE\",\n    \"COWBOX_PROFILE\",\n    \"COWBOX_WARM_POOL_PROFILE\",\n    \"PGBOUNCER_PORT\",\n    \"DIRECT_PG_PORT\",\n    \"GENCOW_WAKE_SIGNAL_ENABLED\",\n    \"GENCOW_WAKE_SIGNAL_DATABASE_URL\",\n    \"GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS\",\n    \"GENCOW_WORKFLOW_RECONCILER_INTERVAL_MS\",\n    \"GENCOW_WORKFLOW_CHECKPOINT_LIMIT_MODE\",\n    \"GENCOW_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES\",\n    \"GENCOW_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES\",\n    \"GENCOW_FUNCTIONS\",\n    \"GENCOW_STORAGE\",\n    \"GENCOW_STORAGE_REQUIRE_READ_GRANT\",\n    \"GENCOW_STORAGE_BACKEND\",\n    \"GENCOW_STORAGE_LEGACY_LOCAL_FALLBACK\",\n    \"GENCOW_STORAGE_QUOTA_BYTES\",\n    \"GENCOW_STORAGE_MAX_FILE_SIZE_BYTES\",\n    \"GENCOW_STORAGE_API_UPLOAD_MAX_FILE_SIZE_BYTES\",\n    \"GENCOW_BACKUP_RETENTION_V2_MODE\",\n    \"GENCOW_BACKUP_RETENTION_V2_EFFECTIVE_AT\",\n    \"GENCOW_MIGRATIONS\",\n    \"GENCOW_APP_NAME\",\n    \"GENCOW_APP_DATA_DIR\",\n    \"GENCOW_RUNTIME_COMPATIBILITY\",\n    \"GENCOW_RUNTIME_RELEASE_ID\",\n    \"GENCOW_RUNTIME_RELEASE_DIR\",\n    \"GENCOW_RUNTIME_NODE_MODULES\",\n    \"GENCOW_INTERNAL_TOKEN\",\n    \"GENCOW_CRON_TOKEN\",\n    \"GENCOW_DEPLOY_ID\",\n    \"GENCOW_AI_PROXY_URL\",\n    \"GENCOW_AI_PROXY_URL_ALT\",\n    \"GENCOW_AI_PROXY_TOKEN\",\n    \"GENCOW_METERING_URL\",\n    \"GENCOW_METERING_URL_ALT\",\n    \"GENCOW_RUNTIME_METERING_DISABLED\",\n    \"GENCOW_START_REASON\",\n    \"GENCOW_RESTART_ID\",\n    \"GENCOW_SHUTDOWN_MARKER_PATH\",\n    \"GENCOW_SKIP_MIGRATION\",\n    \"GENCOW_DB_MAX_CONNECTIONS\",\n    \"GENCOW_DB_IDLE_TIMEOUT_SECONDS\",\n    \"GENCOW_DB_CONNECTION_TIMEOUT_SECONDS\",\n    \"GENCOW_MEMORY_MB\",\n    \"BUN_JSC_forceRAMSize\",\n    \"MIMALLOC_PURGE_DELAY\",\n    \"NODE_PATH\",\n]);\nconst RESERVED_TENANT_RUNTIME_ENV_PREFIXES = [\n    \"__GENCOW_\",\n    \"GENCOW_PLATFORM_STORAGE_\",\n    \"GENCOW_DOCUMENT_\",\n    \"GENCOW_TEMPLATE_\",\n    \"GENCOW_WARM_\",\n    \"GENCOW_DIRECT_RUNNER_\",\n    \"GENCOW_COWBOX_\",\n];\nexport function isReservedTenantRuntimeEnvKey(key) {\n    const normalized = key.trim();\n    return (RESERVED_TENANT_RUNTIME_ENV_KEYS.has(normalized) ||\n        RESERVED_TENANT_RUNTIME_ENV_PREFIXES.some((prefix) => normalized.startsWith(prefix)));\n}\nexport function filterTenantRuntimeEnvVars(vars) {\n    const allowed = {};\n    const rejectedKeys = [];\n    for (const [key, value] of Object.entries(vars)) {\n        if (isReservedTenantRuntimeEnvKey(key)) {\n            rejectedKeys.push(key);\n            continue;\n        }\n        allowed[key] = value;\n    }\n    return { allowed, rejectedKeys };\n}\n", "/**\n * packages/core/src/crons.ts\n *\n * \uC120\uC5B8\uC801 Cron Jobs\n *\n * New apps should declare one cron definition per export and attach them through\n * defineApi({ crons }). Legacy cronJobs() remains available during migration.\n *\n * @example\n * // gencow/cron-jobs.ts\n * import { cron } from \"@gencow/core\";\n * import { heartbeat } from \"./jobs\";\n *\n * export const heartbeatCron = cron\n *   .name(\"heartbeat\")\n *   .interval({ minutes: 15 })\n *   .handler(heartbeat);\n */\n// \u2500\u2500\u2500 \uBE4C\uB354 \uAD6C\uD604 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction createScheduledCronDef(name, pattern) {\n    return {\n        handler(action) {\n            if (typeof action === \"string\") {\n                throw new Error(\"cron.handler() requires procedure.internal ref or inline handler, not string action\");\n            }\n            return { name, pattern, action };\n        },\n    };\n}\nfunction createNamedCronBuilder(name) {\n    return {\n        interval(options) {\n            return createScheduledCronDef(name, intervalToPattern(options));\n        },\n        daily(options) {\n            const minute = options.minute ?? 0;\n            return createScheduledCronDef(name, `${minute} ${options.hour} * * *`);\n        },\n        weekly(options) {\n            const minute = options.minute ?? 0;\n            return createScheduledCronDef(name, `${minute} ${options.hour} * * ${options.dayOfWeek}`);\n        },\n        cron(pattern) {\n            return createScheduledCronDef(name, pattern);\n        },\n    };\n}\nexport const cron = {\n    name(name) {\n        return createNamedCronBuilder(name);\n    },\n};\n/**\n * \uC120\uC5B8\uC801 \uD06C\uB860 \uC7A1 \uBE4C\uB354.\n *\n * @deprecated New apps should use independent `cron.name(...).handler(...)` defs in\n * `defineApi({ crons })`. This builder remains for legacy `gencow/crons.ts`\n * migration only.\n *\n * @example\n * const crons = cronJobs();\n * crons.interval(\"sync\", { minutes: 15 }, \"metrics.collect\");\n * crons.daily(\"report\", { hour: 9 }, \"reports.generate\");\n * crons.cron(\"custom\", \"0 30 * * *\", \"custom.handler\");\n * export default crons;\n */\nexport function cronJobs() {\n    const jobs = [];\n    const builder = {\n        interval(name, options, action) {\n            const pattern = intervalToPattern(options);\n            jobs.push({ name, pattern, action });\n            return builder;\n        },\n        daily(name, options, action) {\n            const minute = options.minute ?? 0;\n            const pattern = `${minute} ${options.hour} * * *`;\n            jobs.push({ name, pattern, action });\n            return builder;\n        },\n        weekly(name, options, action) {\n            const minute = options.minute ?? 0;\n            const pattern = `${minute} ${options.hour} * * ${options.dayOfWeek}`;\n            jobs.push({ name, pattern, action });\n            return builder;\n        },\n        cron(name, pattern, action) {\n            jobs.push({ name, pattern, action });\n            return builder;\n        },\n        getJobs() {\n            return [...jobs];\n        },\n    };\n    return builder;\n}\nexport function isCronJobsBuilder(value) {\n    return !!value && typeof value === \"object\" && typeof value.getJobs === \"function\";\n}\n// \u2500\u2500\u2500 \uC720\uD2F8\uB9AC\uD2F0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction intervalToPattern(options) {\n    if (options.seconds) {\n        // Runtime cron adapters support second-level patterns: \"*/N * * * * *\"\n        return `*/${options.seconds} * * * * *`;\n    }\n    if (options.minutes) {\n        return `*/${options.minutes} * * * *`;\n    }\n    if (options.hours) {\n        return `0 */${options.hours} * * *`;\n    }\n    throw new Error(\"interval: minutes, hours, \uB610\uB294 seconds \uC911 \uD558\uB098\uB97C \uC9C0\uC815\uD558\uC138\uC694\");\n}\n", "import { createHash } from \"crypto\";\nexport function computeCronActionToken(input) {\n    const message = input.kind === \"declarative\"\n        ? `${input.deployId}:cron:${input.name}:${input.pattern}:${input.procedureName}`\n        : `${input.deployId}:runafter:${input.procedureName}`;\n    return `cj_${createHash(\"sha256\").update(message).digest(\"base64url\").slice(0, 22)}`;\n}\n", "/** Session key names passed to `createRlsDb` / `mapSessionToContext`. */\nexport const RLS_SESSION_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]*$/;\n/**\n * Maps a flat session key to a PostgreSQL GUC name: `app.` + snake_case(key).\n *\n * @example sessionKeyToGucName(\"userIdentity\") \u2192 \"app.user_identity\"\n * @example sessionKeyToGucName(\"currentUserId\") \u2192 \"app.current_user_id\"\n */\nexport function sessionKeyToGucName(sessionKey) {\n    if (!RLS_SESSION_KEY_RE.test(sessionKey)) {\n        throw new Error(`createRlsDb: session key \"${sessionKey}\" is invalid \u2014 use camelCase identifiers (e.g. userIdentity, tenantId)`);\n    }\n    return `app.${toSnakeCase(sessionKey)}`;\n}\nfunction toSnakeCase(key) {\n    return key\n        .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1_$2\")\n        .replace(/([a-z\\d])([A-Z])/g, \"$1_$2\")\n        .toLowerCase()\n        .replace(/[^a-z0-9_]+/g, \"_\")\n        .replace(/^_+|_+$/g, \"\");\n}\n/**\n * Stringifies a user field for transaction-local RLS GUCs.\n *\n * - boolean \u2192 `\"true\"` / `\"false\"` (lowercase)\n * - number \u2192 decimal string\n * - null/undefined \u2192 `\"\"`\n */\nexport function stringifySessionValue(value) {\n    if (value === true)\n        return \"true\";\n    if (value === false)\n        return \"false\";\n    if (typeof value === \"number\")\n        return String(value);\n    if (value == null)\n        return \"\";\n    return String(value);\n}\n", "import { RLS_SESSION_KEY_RE, sessionKeyToGucName } from \"./rls-session.js\";\n/** Canonical identity key in every `mapSessionToContext` result (GUC `app.user_id`). */\nexport const RLS_IDENTITY_CONTEXT_KEY = \"userId\";\n/** Legacy default identity key kept for deployed apps whose policies still use `app.current_user_id`. */\nexport const RLS_LEGACY_IDENTITY_CONTEXT_KEY = \"currentUserId\";\nexport function defaultRlsSessionContext(userId) {\n    return {\n        [RLS_IDENTITY_CONTEXT_KEY]: userId,\n        [RLS_LEGACY_IDENTITY_CONTEXT_KEY]: userId,\n    };\n}\nexport function validateRlsSessionContext(context) {\n    if (!(RLS_IDENTITY_CONTEXT_KEY in context)) {\n        throw new Error(`[rls] mapSessionToContext must set \"${RLS_IDENTITY_CONTEXT_KEY}\" (see RLS_IDENTITY_CONTEXT_KEY)`);\n    }\n    for (const key of Object.keys(context)) {\n        if (!RLS_SESSION_KEY_RE.test(key)) {\n            throw new Error(`[rls] invalid context key \"${key}\" \u2014 use camelCase identifiers (e.g. tenantId, role)`);\n        }\n        sessionKeyToGucName(key);\n    }\n}\n", "/**\n * packages/core/src/auth-config.ts\n *\n * Gencow Auth \uC124\uC815 \uD0C0\uC785 \uBC0F defineAuth() \uD568\uC218.\n * \uC0AC\uC6A9\uC790 \uC571\uC758 gencow/auth.ts \uC5D0\uC11C \uC0AC\uC6A9.\n *\n * shadcn \uD328\uD134: auth.ts\uB294 \uC0AC\uC6A9\uC790\uAC00 \uC18C\uC720\uD558\uACE0 \uC9C1\uC811 \uC218\uC815\uD560 \uC218 \uC788\uB294 \uD30C\uC77C.\n * defineAuth()\uB294 \uD0C0\uC785 \uC548\uC804\uD55C \uC124\uC815 \uD5EC\uD37C\uC77C \uBFD0, \uB7F0\uD0C0\uC784 \uB85C\uC9C1\uC740 server\uC5D0\uC11C \uCC98\uB9AC.\n */\nimport { RLS_IDENTITY_CONTEXT_KEY } from \"./rls-context-contract.js\";\n/**\n * Default identity context key when `defineAuth` omits `rls` (`userId` \u2192 GUC `app.user_id`).\n * @see {@link RLS_IDENTITY_CONTEXT_KEY}\n */\nexport const DEFAULT_RLS_OWNER_SESSION_KEY = RLS_IDENTITY_CONTEXT_KEY;\nexport function defineAuth(config) {\n    const provider = config.provider ?? \"better-auth\";\n    return { ...config, provider, rls: config.rls };\n}\nexport function hasMapSessionToContext(rls) {\n    return !!rls && typeof rls === \"object\" && typeof rls.mapSessionToContext === \"function\";\n}\n", "/**\n * User-facing project configuration for `gencow.config.js`.\n *\n * The config file is intentionally small today, but we expose a stable typed\n * contract so editors can offer autocomplete and inline explanations.\n *\n */\n/**\n * Helper for authoring typed `gencow.config.ts` files with editor autocomplete.\n *\n * @deprecated Prefer the JSDoc form, which is fully erased at compile time and\n * mirrors the `next.config` / `vite.config` convention:\n *\n * ```ts\n * /** @type {import('@gencow/core').GencowConfig} *\\/\n * export default {\n *   rootDir: \"./gencow\",\n *   // ...\n * };\n * ```\n *\n * Existing configs that still use `defineConfig({ ... })` continue to work \u2014\n * this helper is now a runtime no-op kept for backward compatibility.\n */\nexport function defineConfig(config) {\n    return config;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { sessionKeyToGucName } from \"./rls-session.js\";\n/** @internal */\nexport function sessionSettingSqlForKey(sessionKey) {\n    const guc = sessionKeyToGucName(sessionKey);\n    const escaped = guc.replace(/'/g, \"''\");\n    return sql.raw(`current_setting('${escaped}', true)`);\n}\n/**\n * Policy-time SQL for one RLS context key \u2192 `current_setting('app.<snake(key)>', true)`.\n * Use in schema policies and {@link tableRls} helpers.\n */\nexport function rlsContextKey(key) {\n    return sessionSettingSqlForKey(key);\n}\n/**\n * Typed factory for context keys (autocomplete only; keys must match `mapSessionToContext`).\n */\nexport function rlsContextKeys() {\n    return (key) => rlsContextKey(key);\n}\n/** `column =` session GUC for a context key. */\nexport function eqRlsContextColumn(column, key) {\n    return sql `${column} = ${rlsContextKey(key)}`;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { getTableName } from \"drizzle-orm\";\nimport { pgPolicy } from \"drizzle-orm/pg-core\";\nimport { stringifySessionValue } from \"./rls-session.js\";\nconst ALL_COMMANDS = [\"select\", \"insert\", \"update\", \"delete\"];\nfunction normalizeCommands(commands) {\n    if (!commands || commands === \"all\")\n        return [...ALL_COMMANDS];\n    return commands;\n}\n/** Inline SQL string literals so drizzle-kit migrations do not emit `$1` bind placeholders. */\nfunction escapeSqlStringLiteral(value) {\n    return value.replace(/'/g, \"''\");\n}\nfunction sqlStringLiteral(value) {\n    return sql.raw(`'${escapeSqlStringLiteral(value)}'`);\n}\nfunction andExprs(exprs) {\n    if (exprs.length === 0)\n        return sql `true`;\n    if (exprs.length === 1)\n        return exprs[0];\n    return sql.join(exprs.map((e) => sql `(${e})`), sql ` AND `);\n}\nfunction orExprs(exprs) {\n    if (exprs.length === 0)\n        return sql `false`;\n    if (exprs.length === 1)\n        return exprs[0];\n    return sql.join(exprs.map((e) => sql `(${e})`), sql ` OR `);\n}\nfunction combinedExprForCommand(constraints, command) {\n    const exprs = constraints.filter((c) => c.commands.includes(command)).map((c) => c.expr);\n    if (exprs.length === 0)\n        return undefined;\n    return andExprs(exprs);\n}\nfunction inferTableNameFromColumns(t) {\n    for (const col of Object.values(t)) {\n        if (col && typeof col === \"object\" && \"table\" in col) {\n            const table = col.table;\n            if (table)\n                return getTableName(table);\n        }\n    }\n    throw new Error(\"[tableRls] Could not infer table name from columns. Pass a valid pgTable callback argument (e.g. (t) => tableRls(t)...).\");\n}\n/** @internal Used by ownerRls when only an owner column is available. */\nexport function inferTableNameFromColumn(column) {\n    const table = column.table;\n    if (!table) {\n        throw new Error(\"[tableRls] Column has no .table reference. Use ownerRls inside pgTable extraConfig: (t) => ownerRls(t.userId).\");\n    }\n    return getTableName(table);\n}\nexport class TableRlsBuilder {\n    tableName;\n    constraints = [];\n    readPublicSelect = false;\n    constructor(tableName) {\n        this.tableName = tableName;\n    }\n    matchColumn(column, keySql, options) {\n        const expr = sql `${column} = ${keySql}`;\n        this.constraints.push({ commands: normalizeCommands(options?.commands), expr });\n        return this;\n    }\n    sessionEq(keySql, value, options) {\n        const expr = sql `${keySql} = ${sqlStringLiteral(stringifySessionValue(value))}`;\n        this.constraints.push({ commands: normalizeCommands(options?.commands), expr });\n        return this;\n    }\n    sessionIn(keySql, values, options) {\n        const literals = values.map((v) => stringifySessionValue(v));\n        const expr = literals.length === 0\n            ? sql `false`\n            : sql `${keySql} IN (${sql.join(literals.map((v) => sqlStringLiteral(v)), sql `, `)})`;\n        this.constraints.push({ commands: normalizeCommands(options?.commands), expr });\n        return this;\n    }\n    sessionAllow(keySql, rules, options) {\n        const defaultCommands = normalizeCommands(options?.commands);\n        const byCommand = rules.all\n            ? {\n                select: rules.all,\n                insert: rules.all,\n                update: rules.all,\n                delete: rules.all,\n            }\n            : {\n                select: rules.select,\n                insert: rules.insert,\n                update: rules.update,\n                delete: rules.delete,\n            };\n        for (const command of ALL_COMMANDS) {\n            const values = byCommand[command];\n            if (!values || values.length === 0)\n                continue;\n            const commands = rules.all || !(rules.select || rules.insert || rules.update || rules.delete)\n                ? defaultCommands\n                : [command];\n            this.sessionIn(keySql, values, { commands });\n        }\n        return this;\n    }\n    sessionGte(keySql, n, options) {\n        return this.sessionCompare(keySql, \">=\", n, options);\n    }\n    sessionGt(keySql, n, options) {\n        return this.sessionCompare(keySql, \">\", n, options);\n    }\n    sessionLte(keySql, n, options) {\n        return this.sessionCompare(keySql, \"<=\", n, options);\n    }\n    sessionLt(keySql, n, options) {\n        return this.sessionCompare(keySql, \"<\", n, options);\n    }\n    sessionCompare(keySql, op, n, options) {\n        const bound = sql.raw(String(n));\n        const expr = (() => {\n            switch (op) {\n                case \">=\":\n                    return sql `(${keySql})::numeric >= ${bound}`;\n                case \">\":\n                    return sql `(${keySql})::numeric > ${bound}`;\n                case \"<=\":\n                    return sql `(${keySql})::numeric <= ${bound}`;\n                case \"<\":\n                    return sql `(${keySql})::numeric < ${bound}`;\n            }\n        })();\n        this.constraints.push({ commands: normalizeCommands(options?.commands), expr });\n        return this;\n    }\n    readPublic() {\n        this.readPublicSelect = true;\n        return this;\n    }\n    where(fragment, options) {\n        this.constraints.push({ commands: normalizeCommands(options?.commands), expr: fragment });\n        return this;\n    }\n    orGroup(fn, options) {\n        const inner = new TableRlsBuilder(this.tableName);\n        fn(inner);\n        const commands = normalizeCommands(options?.commands);\n        for (const command of commands) {\n            const innerExprs = inner.constraints.filter((c) => c.commands.includes(command)).map((c) => c.expr);\n            if (innerExprs.length === 0)\n                continue;\n            this.constraints.push({ commands: [command], expr: orExprs(innerExprs) });\n        }\n        return this;\n    }\n    build() {\n        const policies = [];\n        const counters = {\n            select: 0,\n            insert: 0,\n            update: 0,\n            delete: 0,\n        };\n        for (const command of ALL_COMMANDS) {\n            const combined = combinedExprForCommand(this.constraints, command);\n            if (command === \"select\" && this.readPublicSelect) {\n                policies.push(pgPolicy(this.policyName(command, counters[command]++), {\n                    for: \"select\",\n                    using: sql `true`,\n                }));\n                continue;\n            }\n            if (!combined)\n                continue;\n            const name = this.policyName(command, counters[command]++);\n            if (command === \"select\") {\n                policies.push(pgPolicy(name, { for: \"select\", using: combined }));\n            }\n            else if (command === \"insert\") {\n                policies.push(pgPolicy(name, { for: \"insert\", withCheck: combined }));\n            }\n            else if (command === \"update\") {\n                policies.push(pgPolicy(name, { for: \"update\", using: combined, withCheck: combined }));\n            }\n            else {\n                policies.push(pgPolicy(name, { for: \"delete\", using: combined }));\n            }\n        }\n        return policies;\n    }\n    policyName(command, index) {\n        return `rls_${this.tableName}_${command}_${index}`;\n    }\n}\n/**\n * Fluent PostgreSQL RLS policy builder for `pgTable` extra config.\n *\n * @example\n * ```ts\n * import { tableRls, rlsContextKeys } from \"@gencow/core\";\n *\n * const ctx = rlsContextKeys<{ userId: string; role: string }>();\n *\n * tableRls(t)\n *   .matchColumn(t.tenantId, ctx(\"tenantId\"))\n *   .matchColumn(t.userId, ctx(\"userId\"))\n *   .sessionAllow(ctx(\"role\"), { select: [\"user\", \"admin\"], delete: [\"admin\"] })\n *   .build();\n * ```\n */\nexport function tableRls(t) {\n    return new TableRlsBuilder(inferTableNameFromColumns(t));\n}\n", "import { RLS_IDENTITY_CONTEXT_KEY } from \"./rls-context-contract.js\";\nimport { rlsContextKey } from \"./rls-context-key.js\";\nimport { inferTableNameFromColumn, tableRls } from \"./rls-define-table.js\";\nconst _ownerRlsRegistry = new WeakMap();\n/**\n * Returns ownerRls metadata registered for a table, or undefined if ownerRls() was not used.\n */\nexport function getOwnerRlsMeta(table) {\n    return _ownerRlsRegistry.get(table);\n}\n/** Internal: register metadata when ownerRls() runs on a table definition. */\nexport function registerOwnerRls(table, meta) {\n    _ownerRlsRegistry.set(table, meta);\n}\n/**\n * Declares owner-scoped RLS policies. Implemented only via {@link tableRls}.\n *\n * Uses {@link RLS_IDENTITY_CONTEXT_KEY} (`userId` \u2192 `app.user_id`) when `identityKey` is omitted.\n *\n * @example\n * ```ts\n * export const tasks = pgTable(\"tasks\", {\n *     id: serial(\"id\").primaryKey(),\n *     userId: text(\"user_id\").notNull(),\n * }, (t) => ownerRls(t.userId));\n * ```\n */\nexport function ownerRls(userIdColumn, options) {\n    const colName = userIdColumn.name;\n    if (!colName) {\n        throw new Error(\"[ownerRls] userIdColumn must have a .name property. \" +\n            \"Ensure you pass a valid Drizzle column reference (e.g. t.userId).\");\n    }\n    const identityKey = options?.identityKey ?? RLS_IDENTITY_CONTEXT_KEY;\n    const identitySql = rlsContextKey(identityKey);\n    inferTableNameFromColumn(userIdColumn);\n    let builder = tableRls({ [colName]: userIdColumn }).matchColumn(userIdColumn, identitySql);\n    if (options?.read === \"public\") {\n        builder = builder.readPublic();\n    }\n    const table = userIdColumn.table;\n    if (table) {\n        registerOwnerRls(table, { columnName: colName, readPublic: options?.read === \"public\" });\n    }\n    return builder.build();\n}\n", "import { pgTable } from \"drizzle-orm/pg-core\";\n/**\n * Legacy wrapper around Drizzle `pgTable` for older auth table composition code.\n *\n * New projects should use generated `schema-auth.gen.ts` through `schema-auth.ts`\n * and fork that file directly when auth table customization is required.\n */\nexport const pgBaseTable = pgTable;\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { sql } from \"drizzle-orm\";\nimport { sessionKeyToGucName } from \"./rls-session.js\";\n/** Ordered `(name, value)` pairs for `set_config(name, value, true)`. */\nfunction rlsSetConfigPairs(rls) {\n    const pairs = [];\n    for (const [sessionKey, value] of Object.entries(rls)) {\n        pairs.push([sessionKeyToGucName(sessionKey), value]);\n    }\n    return pairs;\n}\nasync function forEachSetConfig(rls, setOne) {\n    for (const [name, value] of rlsSetConfigPairs(rls)) {\n        await setOne(name, value);\n    }\n}\n/**\n * While a prepared query runs, nested queries reuse this client (same outer `begin` / tx).\n */\nconst rlsExecClient = new AsyncLocalStorage();\nfunction isBunSqlSession(session) {\n    const name = session?.constructor?.name;\n    return typeof name === \"string\" && name.includes(\"BunSQLSession\");\n}\nfunction isDrizzleTransactionDb(db) {\n    const d = db;\n    if (typeof d?.rollback === \"function\") {\n        return true;\n    }\n    const name = d?.constructor?.name;\n    return typeof name === \"string\" && name.includes(\"Transaction\");\n}\nasync function execSetConfig(client, name, value) {\n    if (typeof client?.unsafe === \"function\") {\n        await client.unsafe(`select set_config($1::text, $2::text, true)`, [name, value]);\n        return;\n    }\n    if (typeof client?.query === \"function\") {\n        await client.query(`select set_config($1::text, $2::text, true)`, [name, value]);\n        return;\n    }\n    throw new Error(\"createRlsDb: unsupported SQL driver (expected Bun SQL, node-pg client/pool, or PGlite)\");\n}\nasync function applyRlsSessionVars(client, rls) {\n    await forEachSetConfig(rls, (name, value) => execSetConfig(client, name, value));\n}\nasync function injectRlsVarsOnTx(tx, rls) {\n    await forEachSetConfig(rls, (name, value) => tx.execute(sql `SELECT set_config(${name}, ${value}, true)`));\n}\n/**\n * pg `Pool.connect()`-style client: BEGIN \u2192 apply RLS GUCs \u2192 `fn` \u2192 COMMIT on success,\n * or ROLLBACK if anything fails (including failed COMMIT). Always `release()` in `finally`.\n *\n * @internal Exported only for unit tests \u2014 not re-exported from `@gencow/core` public API.\n */\nexport async function withRlsLeasedConnection(leased, rls, fn) {\n    try {\n        await leased.query(\"begin\");\n        await applyRlsSessionVars(leased, rls);\n        const result = await rlsExecClient.run(leased, () => fn(leased));\n        await leased.query(\"commit\");\n        return result;\n    }\n    catch (e) {\n        try {\n            await leased.query(\"rollback\");\n        }\n        catch {\n            /* ignore */\n        }\n        throw e;\n    }\n    finally {\n        leased.release();\n    }\n}\n/**\n * Runs `fn` with a connection that has transaction-local RLS session variables set.\n * Pool / autocommit: opens a short transaction (Bun `begin`, PGlite `transaction`).\n * When `db` is already a Drizzle transaction object, reuses that connection (no nested top-level tx).\n */\nasync function withRlsConnection(session, rls, reuseOuterConnection, fn) {\n    if (reuseOuterConnection) {\n        const c = session.client;\n        return rlsExecClient.run(c, async () => {\n            await applyRlsSessionVars(c, rls);\n            return fn(c);\n        });\n    }\n    const c = session.client;\n    const runInner = async (client) => {\n        await applyRlsSessionVars(client, rls);\n        return rlsExecClient.run(client, () => fn(client));\n    };\n    if (typeof c.begin === \"function\") {\n        return c.begin(runInner);\n    }\n    if (typeof c.transaction === \"function\") {\n        return c.transaction(runInner);\n    }\n    if (typeof c.connect === \"function\" && typeof c.query === \"function\") {\n        const leased = await c.connect();\n        return withRlsLeasedConnection(leased, rls, fn);\n    }\n    return runInner(c);\n}\nfunction createClientBoundSession(session, client) {\n    return new Proxy(session, {\n        get(target, prop, receiver) {\n            if (prop === \"client\") {\n                return client;\n            }\n            const value = Reflect.get(target, prop, receiver);\n            return typeof value === \"function\" ? value.bind(receiver) : value;\n        },\n    });\n}\nasync function withPreparedQueryClient(pq, client, fn) {\n    if (!(\"client\" in pq)) {\n        return await fn();\n    }\n    const prevPq = pq.client;\n    pq.client = client;\n    try {\n        return await fn();\n    }\n    finally {\n        pq.client = prevPq;\n    }\n}\nfunction createGenericPreparedQueryClientExecutors(pq) {\n    const origExecute = pq.execute.bind(pq);\n    const origAll = typeof pq.all === \"function\" ? pq.all.bind(pq) : null;\n    return {\n        execute(client, placeholderValues) {\n            return withPreparedQueryClient(pq, client, () => origExecute(placeholderValues));\n        },\n        all: origAll\n            ? (client, placeholderValues) => withPreparedQueryClient(pq, client, () => origAll(placeholderValues))\n            : undefined,\n    };\n}\nfunction createBunSqlPreparedQueryClientExecutors(baseSession, prepareQuery, prepareArgs) {\n    const reprepareOnClient = (client) => {\n        const clientBoundSession = createClientBoundSession(baseSession, client);\n        return Reflect.apply(prepareQuery, clientBoundSession, prepareArgs);\n    };\n    return {\n        execute(client, placeholderValues) {\n            return reprepareOnClient(client).execute(placeholderValues);\n        },\n        all(client, placeholderValues) {\n            const txPreparedQuery = reprepareOnClient(client);\n            if (typeof txPreparedQuery.all === \"function\") {\n                return txPreparedQuery.all(placeholderValues);\n            }\n            return txPreparedQuery.execute(placeholderValues);\n        },\n    };\n}\nfunction createPreparedQueryClientExecutors(params) {\n    if (isBunSqlSession(params.baseSession)) {\n        return createBunSqlPreparedQueryClientExecutors(params.baseSession, params.prepareQuery, params.prepareArgs);\n    }\n    return createGenericPreparedQueryClientExecutors(params.pq);\n}\nasync function runPreparedQueryWithRls(session, rls, reuseOuterConnection, runOnClient, placeholderValues) {\n    const active = rlsExecClient.getStore();\n    if (active) {\n        return runOnClient(active, placeholderValues);\n    }\n    return withRlsConnection(session, rls, reuseOuterConnection, (client) => runOnClient(client, placeholderValues));\n}\nfunction wrapPreparedQuery(pq, session, baseSession, prepareQuery, prepareArgs, rls, reuseOuterConnection) {\n    const clientExecutors = createPreparedQueryClientExecutors({\n        pq,\n        baseSession,\n        prepareQuery,\n        prepareArgs,\n    });\n    pq.execute = (placeholderValues) => runPreparedQueryWithRls(session, rls, reuseOuterConnection, clientExecutors.execute, placeholderValues);\n    if (clientExecutors.all) {\n        pq.all = (placeholderValues) => runPreparedQueryWithRls(session, rls, reuseOuterConnection, clientExecutors.all, placeholderValues);\n    }\n}\nfunction wrapSession(session, rls, reuseOuterConnection) {\n    return new Proxy(session, {\n        get(sTarget, sProp, sRecv) {\n            if (sProp === \"client\") {\n                return rlsExecClient.getStore() ?? Reflect.get(sTarget, sProp, sRecv);\n            }\n            if (sProp === \"prepareQuery\") {\n                return (...args) => {\n                    const prepareQuery = Reflect.get(sTarget, sProp, sRecv);\n                    const pq = Reflect.apply(prepareQuery, sRecv, args);\n                    wrapPreparedQuery(pq, sRecv, sTarget, prepareQuery, args, rls, reuseOuterConnection);\n                    return pq;\n                };\n            }\n            const v = Reflect.get(sTarget, sProp, sRecv);\n            return typeof v === \"function\" ? v.bind(sTarget) : v;\n        },\n    });\n}\n/**\n * RLS-scoped Drizzle handle: every query path (`select`, `insert`, `execute`, \u2026) runs\n * `set_config` for the given context in the same DB transaction as the query\n * (PgBouncer\u2013safe transaction-local GUCs).\n *\n * `db.transaction()` still injects the same variables at the start of the callback transaction.\n */\nexport function createRlsDb(db, rls) {\n    const reuseOuterConnection = isDrizzleTransactionDb(db);\n    const baseSession = db.session;\n    const wrappedSession = wrapSession(baseSession, rls, reuseOuterConnection);\n    return new Proxy(db, {\n        get(target, prop, receiver) {\n            if (prop === \"session\") {\n                return wrappedSession;\n            }\n            if (prop === \"_\") {\n                const inner = target._;\n                return new Proxy(inner, {\n                    get(i, p, r) {\n                        if (p === \"session\")\n                            return wrappedSession;\n                        return Reflect.get(i, p, r);\n                    },\n                });\n            }\n            if (prop === \"transaction\") {\n                return async (callback, ...rest) => {\n                    return await target.transaction(async (tx) => {\n                        await injectRlsVarsOnTx(tx, rls);\n                        return await callback(tx);\n                    }, ...rest);\n                };\n            }\n            const value = Reflect.get(target, prop, receiver);\n            return typeof value === \"function\" ? value.bind(receiver) : value;\n        },\n    });\n}\n", "/**\n * packages/core/src/crud.ts \u2014 Zero-Boilerplate CRUD API Auto-Generator (v3)\n *\n * \uC0AC\uC6A9\uC790 \uCF54\uB4DC 5\uC904\uB85C \uC644\uC804\uD55C CRUD API\uB97C \uC790\uB3D9 \uC0DD\uC131:\n *\n * @example\n * ```ts\n * import { crud } from \"@gencow/core\";\n * import { tasks } from \"./schema\";\n *\n * // query(tasks.list), query(tasks.get), mutation(tasks.create/update/remove) \uC790\uB3D9 \uB4F1\uB85D\n * export const { list, get, create, update, remove } = crud(tasks);\n * ```\n *\n * ownerRls \uC5F0\uB3D9 (2-Layer \uBC29\uC5B4):\n * ```ts\n * export const tasks = pgTable(\"tasks\", {\n *     id: serial(\"id\").primaryKey(),\n *     userId: text(\"user_id\").notNull(),\n * }, (t) => ownerRls(t.userId));\n *\n * // crud()\uAC00 ownerRls\uB97C \uC790\uB3D9 \uAC10\uC9C0 \u2192 \uBAA8\uB4E0 \uCFFC\uB9AC\uC5D0 WHERE userId = auth.userId \uC8FC\uC785\n * export const { list, get, create, update, remove } = crud(tasks);\n * ```\n *\n * list \uBC18\uD658\uAC12: `{ data: T[], total: number }`\n *   \u2192 \uD504\uB860\uD2B8: `const result = useQuery(api.tasks.list); result?.data.map(...)`\n *   \u2192 total\uC740 \uB3D9\uC77C \uD544\uD130 \uC870\uAC74\uC758 \uC804\uCCB4 \uB808\uCF54\uB4DC \uC218 (\uD398\uC774\uC9C0\uB124\uC774\uC158 UI \uC9C0\uC6D0)\n *\n * \uB0B4\uBD80\uC801\uC73C\uB85C query()/mutation()\uC744 \uD638\uCD9C\uD558\uC5EC \uAE00\uB85C\uBC8C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uB4F1\uB85D\uD558\uBBC0\uB85C,\n * \uD504\uB860\uD2B8\uC5D4\uB4DC\uC5D0\uC11C useQuery(api.tasks.list) / useMutation(api.tasks.create) \uB85C \uBC14\uB85C \uC0AC\uC6A9 \uAC00\uB2A5.\n *\n * \uD83D\uDCC4 Spec: docs/specs/spec-crud-advanced-filters.md (v3),\n * docs/specs/spec-crud-v2-enhancements.md (v2)\n * \uD83D\uDCC4 ownerRls: docs/specs/spec-ownerrls-complete.md\n * \uD83D\uDCE6 \uCC38\uC870: saas-js/drizzle-crud \uD329\uD1A0\uB9AC \uD328\uD134\n */\nimport { eq, ne, gt, gte, lt, lte, desc, asc, like, ilike, inArray, notInArray, or, and, count as drizzleCount, getTableName, getTableColumns, } from \"drizzle-orm\";\nimport { getTableConfig } from \"drizzle-orm/pg-core\";\nimport { buildQuerySubscriptionKey } from \"./reactive-realtime.js\";\nimport { query } from \"./reactive-query.js\";\nimport { mutation } from \"./reactive-mutation.js\";\nimport { v } from \"./v.js\";\nimport { getOwnerRlsMeta, registerOwnerRls } from \"./rls.js\";\n// \u2500\u2500\u2500 ownerRls \uAC10\uC9C0 \uCD94\uC801 (\uBD80\uD2B8 \uB85C\uADF8\uC6A9) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/** crud()\uAC00 ownerRls\uB97C \uC790\uB3D9 \uAC10\uC9C0\uD55C \uD14C\uC774\uBE14 \uBAA9\uB85D \u2014 \uC11C\uBC84 \uBD80\uD2B8 \uB85C\uADF8\uC5D0\uC11C \uCD9C\uB825 */\nconst _ownerRlsTables = [];\n/**\n * @deprecated Legacy CRUD API. Use `createCrud` from your app's `gencow/runtime.ts` instead.\n */\nexport function getOwnerRlsTables() {\n    return _ownerRlsTables;\n}\nif (!globalThis.__gencow_crudCodegenRegistry) {\n    globalThis.__gencow_crudCodegenRegistry = new Map();\n}\nconst crudCodegenRegistry = globalThis.__gencow_crudCodegenRegistry;\n/**\n * @deprecated Legacy CRUD registry API.\n * Use `createCrud` from your app's `gencow/runtime.ts` instead.\n */\nexport function getRegisteredCrudCodegenMeta() {\n    return Array.from(crudCodegenRegistry.values());\n}\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * id \uCEEC\uB7FC\uC758 Drizzle dataType\uC744 \uAC80\uC0AC\uD558\uC5EC \uC801\uC808\uD55C validator\uB97C \uBC18\uD658.\n * serial/integer/bigint \u2192 v.number()\n * text/uuid/varchar \u2192 v.string()\n */\nfunction detectIdType(column) {\n    const colType = column.dataType;\n    if (colType === \"string\")\n        return v.string();\n    return v.number();\n}\n/**\n * DB \uCEEC\uB7FC\uBA85\uC5D0\uC11C JS \uD504\uB85C\uD37C\uD2F0\uBA85\uC744 \uC5ED\uB9E4\uD551\uD55C\uB2E4.\n * getTableColumns()\uC758 \uD0A4(JS\uBA85) \u2192 \uAC12(Column.name = DB\uBA85) \uB9E4\uD551\uC744 \uD0D0\uC0C9.\n * \uB9E4\uCE6D \uC2E4\uD328 \uC2DC columnName\uC744 \uADF8\uB300\uB85C \uBC18\uD658 (best-effort).\n */\nfunction resolvePropertyName(table, columnName) {\n    try {\n        const columns = getTableColumns(table);\n        for (const [propName, col] of Object.entries(columns)) {\n            if (col.name === columnName)\n                return propName;\n        }\n    }\n    catch {\n        // \uD14C\uC2A4\uD2B8 \uD658\uACBD\uC5D0\uC11C getTableColumns \uC2E4\uD328 \uAC00\uB2A5 \u2014 fallback\n    }\n    return columnName;\n}\n/**\n * \uD14C\uC774\uBE14\uC5D0\uC11C ownerRls \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uAC10\uC9C0\uD55C\uB2E4.\n *\n * \uAC10\uC9C0 \uC21C\uC11C:\n *   1. WeakMap \uB808\uC9C0\uC2A4\uD2B8\uB9AC (registerOwnerRls\uB85C \uBA85\uC2DC \uB4F1\uB85D\uB41C \uACBD\uC6B0)\n *   2. getTableConfig().policies\uC5D0\uC11C pgPolicy \uC874\uC7AC \uC5EC\uBD80 + \uCEEC\uB7FC convention\n *\n * Fallback convention: \uD14C\uC774\uBE14\uC5D0 userId/user_id \uCEEC\uB7FC\uC774 \uC788\uACE0 pgPolicy\uAC00 \uC874\uC7AC\uD558\uBA74\n * ownerRls\uAC00 \uC801\uC6A9\uB41C \uAC83\uC73C\uB85C \uAC04\uC8FC.\n */\nfunction detectOwnerMeta(table) {\n    const anyTable = table;\n    // 1. WeakMap \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0\uC11C \uC870\uD68C (\uAC00\uC7A5 \uC815\uD655)\n    const meta = getOwnerRlsMeta(table);\n    if (meta) {\n        // propertyName \uC5ED\uB9E4\uD551: DB\uBA85 \"user_id\" \u2192 JS\uBA85 \"userId\"\n        const propName = resolvePropertyName(table, meta.columnName);\n        const col = anyTable[propName];\n        if (col) {\n            return {\n                column: col,\n                columnName: meta.columnName,\n                propertyName: propName,\n                readPublic: meta.readPublic,\n            };\n        }\n    }\n    // 2. getTableConfig().policies\uB85C pgPolicy \uC874\uC7AC \uAC10\uC9C0 + convention \uD0D0\uC0C9\n    try {\n        const config = getTableConfig(table);\n        if (config.policies && config.policies.length > 0) {\n            // convention: userId \uB610\uB294 user_id \uCEEC\uB7FC \uD0D0\uC0C9 (JS \uD504\uB85C\uD37C\uD2F0\uBA85)\n            const propName = anyTable[\"userId\"] ? \"userId\" : anyTable[\"user_id\"] ? \"user_id\" : null;\n            if (propName) {\n                const userIdCol = anyTable[propName];\n                const colName = userIdCol.name || \"user_id\";\n                // \uD14C\uC774\uBE14\uC5D0 \uBA54\uD0C0 \uB4F1\uB85D (\uC774\uD6C4 \uD638\uCD9C\uC5D0\uC11C WeakMap\uC73C\uB85C \uBE60\uB974\uAC8C \uC870\uD68C)\n                registerOwnerRls(table, { columnName: colName, readPublic: false });\n                return { column: userIdCol, columnName: colName, propertyName: propName, readPublic: false };\n            }\n            // S2 \uBC29\uC5B4: pgPolicy\uAC00 \uC874\uC7AC\uD558\uC9C0\uB9CC convention \uCEEC\uB7FC(userId/user_id)\uC774 \uC5C6\uB294 \uACBD\uC6B0\n            // ownerRls()\uB97C \uD638\uCD9C\uD588\uC73C\uB098 \uBE44\uD45C\uC900 \uCEEC\uB7FC\uBA85(e.g. ownerId, authorId)\uC744 \uC0AC\uC6A9\uD55C \uAC83\uC73C\uB85C \uC758\uC2EC\n            // \u2192 silent \uBB34\uC2DC \uBC29\uC9C0: \uBCF4\uC548 \uACBD\uACE0 \uCD9C\uB825\n            const tblName = getTableName(table);\n            console.warn(`[crud] \u26A0\uFE0F Table \"${tblName}\" has ${config.policies.length} pgPolicy but no userId/user_id column found. ` +\n                `ownerRls auto-isolation will NOT be applied. ` +\n                `If you used ownerRls(), ensure the column is named 'userId' (JS) / 'user_id' (DB).`);\n        }\n    }\n    catch {\n        // getTableConfig \uC2E4\uD328 \uC2DC \uBB34\uC2DC (\uD14C\uC2A4\uD2B8 \uD658\uACBD \uB4F1)\n    }\n    return null;\n}\n// \u2500\u2500\u2500 v3 Filter Engine \u2014 \uC7AC\uADC0\uC801 \uB3D9\uC801 \uD544\uD130\uB9C1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/** \uC7AC\uADC0 \uD544\uD130 \uCD5C\uB300 \uAE4A\uC774 \u2014 DoS \uBC29\uC5B4 (\uAE4A\uC774 \uCD08\uACFC \uC2DC \uC870\uAC74 \uBB35\uC0B4) */\nconst MAX_FILTER_DEPTH = 5;\n/** \uC9C0\uC6D0 \uC5F0\uC0B0\uC790 \uBAA9\uB85D */\nconst FILTER_OPS = [\"eq\", \"ne\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"nin\", \"like\", \"ilike\"];\nfunction isValidFilterOp(op) {\n    return FILTER_OPS.includes(op);\n}\n/**\n * \uB2E8\uC77C \uD544\uD130 \uC5F0\uC0B0\uC790\uB97C Drizzle SQL \uC870\uAC74\uC73C\uB85C \uBCC0\uD658.\n * \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 op\uC774\uAC70\uB098 \uAC12 \uD0C0\uC785\uC774 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 undefined \uBC18\uD658 (\uBB35\uC0B4).\n *\n * @deprecated Legacy CRUD filter helper.\n * Use `createCrud` from your app's `gencow/runtime.ts` instead.\n */\nexport function applyFilterOp(col, op, value) {\n    switch (op) {\n        case \"eq\":\n            return eq(col, value);\n        case \"ne\":\n            return ne(col, value);\n        case \"gt\":\n            return gt(col, value);\n        case \"gte\":\n            return gte(col, value);\n        case \"lt\":\n            return lt(col, value);\n        case \"lte\":\n            return lte(col, value);\n        case \"in\":\n            if (!Array.isArray(value) || value.length === 0)\n                return undefined;\n            return inArray(col, value);\n        case \"nin\":\n            if (!Array.isArray(value) || value.length === 0)\n                return undefined;\n            return notInArray(col, value);\n        case \"like\":\n            if (typeof value !== \"string\")\n                return undefined;\n            return like(col, value);\n        case \"ilike\":\n            if (typeof value !== \"string\")\n                return undefined;\n            return ilike(col, value);\n        default:\n            return undefined;\n    }\n}\n/**\n * \uC7AC\uADC0\uC801 \uD544\uD130 \uB178\uB4DC \uD30C\uC2F1 \u2014 OR/AND \uB17C\uB9AC \uC911\uCCA9 + \uC5F0\uC0B0\uC790 \uB9E4\uD551.\n *\n * @deprecated Legacy CRUD filter helper.\n * Use `createCrud` from your app's `gencow/runtime.ts` instead.\n *\n * @param node         - \uD544\uD130 JSON \uAC1D\uCCB4\n * @param table        - Drizzle PgTable (\uCEEC\uB7FC \uB9E4\uD551)\n * @param allowedFields - \uD5C8\uC6A9 \uD544\uB4DC \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 (\uBBF8\uC9C0\uC815 \uC2DC \uBAA8\uB4E0 \uD14C\uC774\uBE14 \uCEEC\uB7FC \uD5C8\uC6A9)\n *\n * @example\n * ```ts\n * // \uC554\uBB35\uC801 eq (v2 \uD558\uC704\uD638\uD658)\n * parseFilterNode({ status: 'active' }, table)\n *   \u2192 and(eq(table.status, 'active'))\n *\n * // \uBA85\uC2DC\uC801 \uC5F0\uC0B0\uC790\n * parseFilterNode({ qty: { op: 'gte', value: 10 } }, table)\n *   \u2192 and(gte(table.qty, 10))\n *\n * // OR / AND \uC911\uCCA9\n * parseFilterNode({ OR: [{ a: 1 }, { b: { op: 'gt', value: 5 } }] }, table)\n *   \u2192 or(eq(table.a, 1), gt(table.b, 5))\n * ```\n */\nexport function parseFilterNode(node, table, allowedFields, depth = 0) {\n    // DoS \uBC29\uC5B4: \uC7AC\uADC0 \uAE4A\uC774 \uC81C\uD55C \uCD08\uACFC \uC2DC \uC870\uAC74 \uBB35\uC0B4\n    if (depth > MAX_FILTER_DEPTH)\n        return undefined;\n    const conditions = [];\n    for (const [key, val] of Object.entries(node)) {\n        // \u2500\u2500 OR \uB17C\uB9AC \uADF8\uB8F9 \u2500\u2500\n        if (key === \"OR\") {\n            if (!Array.isArray(val))\n                continue; // \uC798\uBABB\uB41C \uD0C0\uC785 \u2192 \uBB35\uC0B4\n            const orConds = val\n                .filter((child) => child != null && typeof child === \"object\" && !Array.isArray(child))\n                .map((child) => parseFilterNode(child, table, allowedFields, depth + 1))\n                .filter((c) => c !== undefined);\n            if (orConds.length > 0)\n                conditions.push(or(...orConds));\n            continue;\n        }\n        // \u2500\u2500 AND \uB17C\uB9AC \uADF8\uB8F9 \u2500\u2500\n        if (key === \"AND\") {\n            if (!Array.isArray(val))\n                continue;\n            const andConds = val\n                .filter((child) => child != null && typeof child === \"object\" && !Array.isArray(child))\n                .map((child) => parseFilterNode(child, table, allowedFields, depth + 1))\n                .filter((c) => c !== undefined);\n            if (andConds.length > 0)\n                conditions.push(and(...andConds));\n            continue;\n        }\n        // \u2500\u2500 \uCEEC\uB7FC \uD544\uD130 \u2500\u2500\n        // allowedFields \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 \uAC80\uC99D (\uC7AC\uADC0\uC801\uC73C\uB85C OR/AND \uB0B4\uBD80\uC5D0\uB3C4 \uC801\uC6A9\uB428)\n        if (allowedFields && !allowedFields.includes(key))\n            continue;\n        const col = table[key];\n        if (!col)\n            continue;\n        // \uBA85\uC2DC\uC801 \uC5F0\uC0B0\uC790: { op: 'gte', value: 10 }\n        if (val != null && typeof val === \"object\" && !Array.isArray(val) && \"op\" in val) {\n            const { op, value } = val;\n            if (!isValidFilterOp(op))\n                continue; // \uBBF8\uC9C0\uC6D0 op \u2192 \uBB35\uC0B4\n            const cond = applyFilterOp(col, op, value);\n            if (cond)\n                conditions.push(cond);\n            continue;\n        }\n        // \uC554\uBB35\uC801 eq (v2 \uD558\uC704\uD638\uD658): { status: 'active' } \u2192 eq(status, 'active')\n        conditions.push(eq(col, val));\n    }\n    return conditions.length > 0 ? and(...conditions) : undefined;\n}\n// \u2500\u2500\u2500 crud \u2014 Zero-Boilerplate API Factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * \uD14C\uC774\uBE14\uC744 \uBC1B\uC544 query/mutation\uC744 \uC790\uB3D9 \uB4F1\uB85D\uD558\uACE0,\n * { list, get, create, update, remove } \uB97C \uBC18\uD658\uD55C\uB2E4.\n *\n * @deprecated Use `createCrud` from your app's `gencow/runtime.ts` instead.\n *\n * list \uBC18\uD658\uAC12: `{ data: T[], total: number }`\n *\n * @example\n * ```ts\n * export const { list, get, create, update, remove } = crud(tasks);\n * export const { list, get, create, update, remove } = crud(tasks, { public: true });\n * ```\n */\nexport function crud(table, options) {\n    const anyTable = table;\n    const drizzleTable = table;\n    const tableName = getTableName(drizzleTable); // Drizzle \uACF5\uC2DD API\n    const prefix = options?.prefix || tableName;\n    const isPublic = options?.public ?? false;\n    const useRealtime = options?.realtime ?? true;\n    const defaultLimit = options?.defaultLimit ?? 20;\n    const maxLimit = options?.maxLimit ?? 100;\n    const pk = anyTable[\"id\"];\n    if (!pk) {\n        throw new Error(`[crud] Table \"${tableName}\" must have an 'id' column.`);\n    }\n    // id \uD0C0\uC785 \uC790\uB3D9 \uAC10\uC9C0 (serial \u2192 v.number(), text/uuid \u2192 v.string())\n    const idValidator = detectIdType(pk);\n    // createdAt \uCEEC\uB7FC (\uC815\uB82C\uC6A9, \uC5C6\uC73C\uBA74 id \uC0AC\uC6A9)\n    const createdAtCol = anyTable[\"createdAt\"];\n    const defaultOrderCol = createdAtCol || pk;\n    // userId \uCEEC\uB7FC (\uC790\uB3D9 \uC8FC\uC785\uC6A9 \u2014 ownerRls \uBBF8\uC801\uC6A9 \uC2DC \uAE30\uC874 \uB3D9\uC791)\n    const userIdCol = anyTable[\"userId\"];\n    // \u2500\u2500 ownerRls \uAC10\uC9C0: 2-Layer \uBC29\uC5B4\uC758 Layer 1 \u2500\u2500\n    // ownerRls() \uBA54\uD0C0\uB370\uC774\uD130\uAC00 \uAC10\uC9C0\uB418\uBA74 \uBAA8\uB4E0 CRUD\uC5D0 userId \uD544\uD130 \uC790\uB3D9 \uC8FC\uC785\n    const ownerMeta = detectOwnerMeta(drizzleTable);\n    // \uBD80\uD2B8 \uB85C\uADF8\uC6A9 \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uB4F1\uB85D (S1: \uC911\uBCF5 \uBC29\uC9C0 \u2014 hot-reload/methods \uBD84\uD560 \uB300\uC751)\n    if (ownerMeta && !_ownerRlsTables.some((t) => t.tableName === tableName)) {\n        _ownerRlsTables.push({\n            tableName,\n            columnName: ownerMeta.columnName,\n            readPublic: ownerMeta.readPublic,\n        });\n    }\n    // B1: public + ownerRls \uC870\uD569 \uBC29\uC5B4\n    // ownerRls\uAC00 \uAC10\uC9C0\uB41C \uD14C\uC774\uBE14\uC5D0\uC11C public: true + readPublic: false \uC870\uD569\uC740\n    // \uBCF4\uC548 \uC758\uB3C4\uC640 \uBAA8\uC21C \u2192 \uACBD\uACE0 \uCD9C\uB825 + CUD\uB294 ownerRls \uBCF4\uD638 \uC720\uC9C0\n    if (ownerMeta && isPublic && !ownerMeta.readPublic) {\n        console.warn(`[crud] \u26A0\uFE0F Table \"${tableName}\": ownerRls detected but public=true. ` +\n            `CUD operations will still enforce ownerRls (auth required). ` +\n            `Consider removing { public: true } or using ownerRls(col, { read: \"public\" }).`);\n    }\n    // \u2500\u2500 \uB0B4\uBD80 \uD5EC\uD37C: WHERE \uC870\uAC74 \uBE4C\uB4DC (list + count + realtime \uACF5\uC720) \u2500\u2500\n    function buildWhereConditions(args) {\n        const conditions = [];\n        // Soft delete\n        if (options?.softDelete) {\n            const sdField = anyTable[options.softDelete.field];\n            conditions.push(eq(sdField, null));\n        }\n        // Search\n        if (args?.search && options?.searchFields?.length) {\n            const searchConds = options.searchFields.map((f) => ilike(anyTable[f], `%${args.search}%`));\n            conditions.push(or(...searchConds));\n        }\n        // Dynamic filters \u2014 v3 \uC7AC\uADC0\uC801 \uD30C\uC2F1 \uC5D4\uC9C4 (OR/AND \uC911\uCCA9, \uC5F0\uC0B0\uC790 \uB9E4\uD551)\n        // allowedFilters \uC124\uC815 \uC2DC: \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 \uD544\uB4DC\uB9CC \uD5C8\uC6A9 (\uC7AC\uADC0 \uAC80\uC99D)\n        // allowedFilters \uBBF8\uC124\uC815 \uC2DC: \uD544\uD130 \uC804\uCCB4 \uBB34\uC2DC (Secure by Default \u2014 v2 \uD638\uD658)\n        if (args?.filters && typeof args.filters === \"object\" && options?.allowedFilters?.length) {\n            const allowedFields = options.allowedFilters;\n            const filterCondition = parseFilterNode(args.filters, anyTable, allowedFields);\n            if (filterCondition)\n                conditions.push(filterCondition);\n        }\n        return conditions.length > 0 ? and(...conditions) : undefined;\n    }\n    /**\n     * Uses `db.transaction` when present (e.g. createRlsDb); else runs `fn(db)` for test mocks\n     * without `.transaction`.\n     */\n    async function inRlsOrPlainTx(db, fn) {\n        if (typeof db?.transaction === \"function\") {\n            return await db.transaction(fn);\n        }\n        return await fn(db);\n    }\n    function invalidateListRealtime(ctx) {\n        ctx.realtime.invalidate(`${prefix}.list`);\n    }\n    function invalidateGetRealtime(ctx, id) {\n        ctx.realtime.invalidate(buildQuerySubscriptionKey(`${prefix}.get`, { id }));\n    }\n    // \u2500\u2500 methods \uD544\uD130\uB9C1: \uC9C0\uC815\uB41C \uBA54\uC11C\uB4DC\uB9CC \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uB4F1\uB85D \u2500\u2500\n    // methods \uC635\uC158 \uBBF8\uC9C0\uC815 \uC2DC \uC804\uCCB4 5\uAC1C \uB4F1\uB85D (\uD558\uC704\uD638\uD658)\n    const enabledMethods = new Set(options?.methods ?? [\"list\", \"get\", \"create\", \"update\", \"remove\"]);\n    const enabledMethodsList = Array.from(enabledMethods);\n    crudCodegenRegistry.set(prefix, {\n        tableName,\n        prefix,\n        methods: enabledMethodsList,\n        allowedFilters: (options?.allowedFilters ?? []).map((field) => String(field)),\n        searchFields: (options?.searchFields ?? []).map((field) => String(field)),\n        isPublic,\n    });\n    // \u2500\u2500 list \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const listDef = !enabledMethods.has(\"list\")\n        ? undefined\n        : query(`${prefix}.list`, {\n            public: isPublic,\n            args: {\n                page: v.optional(v.number()),\n                limit: v.optional(v.number()),\n                search: v.optional(v.string()),\n                orderBy: v.optional(v.string()),\n                orderDir: v.optional(v.string()),\n                filters: v.optional(v.any()),\n            },\n            handler: async (ctx, args) => {\n                // S2: requireAuth \uD1B5\uD569 \u2014 ownerRls(readPublic=false)\uC774\uBA74 \uC778\uC99D \uD544\uC218\n                const needsAuth = !isPublic || (ownerMeta && !ownerMeta.readPublic);\n                const user = needsAuth ? ctx.auth.requireAuth() : null;\n                const page = Math.max(1, args?.page || 1);\n                const limit = Math.min(Math.max(1, args?.limit || defaultLimit), maxLimit);\n                const offset = (page - 1) * limit;\n                let whereClause = buildWhereConditions(args);\n                // \u2500\u2500 ownerRls Layer 1: list\uC5D0 userId \uD544\uD130 \uC8FC\uC785 \u2500\u2500\n                if (ownerMeta && !ownerMeta.readPublic && user) {\n                    const ownerFilter = eq(ownerMeta.column, user.id);\n                    whereClause = whereClause ? and(whereClause, ownerFilter) : ownerFilter;\n                }\n                // Order\n                let orderByClause;\n                if (args?.orderBy && anyTable[args.orderBy]) {\n                    const col = anyTable[args.orderBy];\n                    orderByClause = args.orderDir === \"asc\" ? asc(col) : desc(col);\n                }\n                else {\n                    orderByClause = desc(defaultOrderCol);\n                }\n                // One transaction: SET LOCAL user id (createRlsDb) + list + count for RLS.\n                return await inRlsOrPlainTx(ctx.db, async (tx) => {\n                    const results = await tx\n                        .select()\n                        .from(anyTable)\n                        .where(whereClause)\n                        .orderBy(orderByClause)\n                        .limit(limit)\n                        .offset(offset);\n                    const countResult = await tx.select({ count: drizzleCount() }).from(anyTable).where(whereClause);\n                    return {\n                        data: results,\n                        total: Number(countResult[0]?.count ?? 0),\n                    };\n                });\n            },\n        });\n    // \u2500\u2500 get \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const getDef = !enabledMethods.has(\"get\")\n        ? undefined\n        : query(`${prefix}.get`, {\n            public: isPublic,\n            args: { id: idValidator },\n            handler: async (ctx, args) => {\n                // S2: requireAuth \uD1B5\uD569\n                const needsAuth = !isPublic || (ownerMeta && !ownerMeta.readPublic);\n                const user = needsAuth ? ctx.auth.requireAuth() : null;\n                let whereCond = eq(pk, args.id);\n                // \u2500\u2500 ownerRls Layer 1: get\uC5D0 userId \uD544\uD130 \uC8FC\uC785 \u2500\u2500\n                if (ownerMeta && !ownerMeta.readPublic && user) {\n                    whereCond = and(whereCond, eq(ownerMeta.column, user.id));\n                }\n                if (options?.softDelete) {\n                    const sdField = anyTable[options.softDelete.field];\n                    whereCond = and(whereCond, eq(sdField, null));\n                }\n                return await inRlsOrPlainTx(ctx.db, async (tx) => {\n                    const [result] = await tx.select().from(anyTable).where(whereCond).limit(1);\n                    return result ?? null;\n                });\n            },\n        });\n    // \u2500\u2500 create \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const createDef = !enabledMethods.has(\"create\")\n        ? undefined\n        : mutation(`${prefix}.create`, {\n            public: isPublic,\n            handler: async (ctx, args) => {\n                // ownerRls \uD14C\uC774\uBE14\uC740 \uD56D\uC0C1 \uC778\uC99D \uD544\uC218 (\uBCF4\uC548 \uC6B0\uC120)\n                const user = ownerMeta || !isPublic ? ctx.auth.requireAuth() : null;\n                let insertData = { ...args };\n                // \u2500\u2500 ownerRls Layer 1: create \uC2DC userId \uAC15\uC81C \uC8FC\uC785 \u2500\u2500\n                // \uBA85\uC2DC\uC801\uC73C\uB85C \uD0C0\uC778 userId\uB97C \uBCF4\uB0B8 \uACBD\uC6B0\uB294 \uC989\uC2DC \uCC28\uB2E8 (fail-closed).\n                if (ownerMeta && user) {\n                    const requestedOwner = insertData[ownerMeta.propertyName] ?? insertData[ownerMeta.columnName] ?? insertData.userId;\n                    if (requestedOwner != null && requestedOwner !== user.id) {\n                        throw new Error(\"Forbidden: cannot create resource for another user\");\n                    }\n                }\n                // S1 \uC218\uC815: propertyName(JS\uBA85)\uC744 \uD0A4\uB85C \uC0AC\uC6A9 \u2014 Drizzle insert \uD638\uD658\n                // \uC0AC\uC6A9\uC790 \uC785\uB825\uC744 \uB36E\uC5B4\uC500 (\uBCF4\uC548: \uD0C0\uC778 ID\uB85C \uB370\uC774\uD130 \uC0DD\uC131 \uBC29\uC9C0)\n                if (ownerMeta && user) {\n                    insertData[ownerMeta.propertyName] = user.id;\n                }\n                else if (userIdCol && user && !insertData.userId) {\n                    // ownerRls \uBBF8\uC801\uC6A9 \uD14C\uC774\uBE14\uC758 \uAE30\uC874 \uC790\uB3D9 \uC8FC\uC785 \uB3D9\uC791 \uC720\uC9C0\n                    insertData.userId = user.id;\n                }\n                // beforeCreate \uD6C5\n                if (options?.hooks?.beforeCreate) {\n                    insertData = await options.hooks.beforeCreate(insertData);\n                }\n                const [result] = await inRlsOrPlainTx(ctx.db, async (tx) => tx.insert(anyTable).values(insertData).returning());\n                // Realtime push: list\uB294 payload \uC5C6\uC774 invalidation\uC73C\uB85C \uAC31\uC2E0\n                if (useRealtime && enabledMethods.has(\"list\")) {\n                    invalidateListRealtime(ctx);\n                }\n                return result;\n            },\n        });\n    // \u2500\u2500 update \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const updateDef = !enabledMethods.has(\"update\")\n        ? undefined\n        : mutation(`${prefix}.update`, {\n            public: isPublic,\n            handler: async (ctx, args) => {\n                // ownerRls \uD14C\uC774\uBE14\uC740 \uD56D\uC0C1 \uC778\uC99D \uD544\uC218\n                const user = ownerMeta || !isPublic ? ctx.auth.requireAuth() : null;\n                const { id, ...updates } = args;\n                let updateData = { ...updates };\n                // \u2500\u2500 ownerRls Layer 1: update \uC2DC userId \uBCC0\uACBD \uCC28\uB2E8 + \uC18C\uC720\uC790 \uAC80\uC99D \u2500\u2500\n                let updateWhere = eq(pk, id);\n                if (ownerMeta && user) {\n                    // WHERE id = ? AND user_id = ? (\uD0C0\uC778 \uB370\uC774\uD130 \uC218\uC815 \uBD88\uAC00)\n                    updateWhere = and(eq(pk, id), eq(ownerMeta.column, user.id));\n                    // S1 \uC218\uC815: propertyName(JS\uBA85)\uC73C\uB85C userId \uBCC0\uACBD \uC2DC\uB3C4 \uCC28\uB2E8\n                    delete updateData[ownerMeta.propertyName];\n                    // DB\uBA85\uB3C4 \uBC29\uC5B4\uC801\uC73C\uB85C \uC0AD\uC81C (\uB9CC\uC57D \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 DB\uBA85\uC73C\uB85C \uBCF4\uB0B8 \uACBD\uC6B0)\n                    if (ownerMeta.propertyName !== ownerMeta.columnName) {\n                        delete updateData[ownerMeta.columnName];\n                    }\n                }\n                // updatedAt \uC790\uB3D9 \uAC31\uC2E0\n                if (anyTable[\"updatedAt\"]) {\n                    updateData.updatedAt = new Date();\n                }\n                // beforeUpdate \uD6C5\n                if (options?.hooks?.beforeUpdate) {\n                    updateData = await options.hooks.beforeUpdate(updateData);\n                }\n                const [result] = await inRlsOrPlainTx(ctx.db, async (tx) => tx.update(anyTable).set(updateData).where(updateWhere).returning());\n                // Realtime push: list\uB294 invalidation, public exact-id get\uB9CC full payload \uC720\uC9C0\n                if (useRealtime) {\n                    if (enabledMethods.has(\"list\")) {\n                        invalidateListRealtime(ctx);\n                    }\n                    if (enabledMethods.has(\"get\")) {\n                        const getKey = buildQuerySubscriptionKey(`${prefix}.get`, { id });\n                        if (isPublic && !ownerMeta)\n                            ctx.realtime.emit(getKey, result);\n                        else\n                            invalidateGetRealtime(ctx, id);\n                    }\n                }\n                return result;\n            },\n        });\n    // \u2500\u2500 remove \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const removeDef = !enabledMethods.has(\"remove\")\n        ? undefined\n        : mutation(`${prefix}.remove`, {\n            public: isPublic,\n            handler: async (ctx, args) => {\n                // ownerRls \uD14C\uC774\uBE14\uC740 \uD56D\uC0C1 \uC778\uC99D \uD544\uC218\n                const user = ownerMeta || !isPublic ? ctx.auth.requireAuth() : null;\n                // \u2500\u2500 ownerRls Layer 1: remove \uC2DC \uC18C\uC720\uC790 \uAC80\uC99D \u2500\u2500\n                let deleteWhere = eq(pk, args.id);\n                if (ownerMeta && user) {\n                    // WHERE id = ? AND user_id = ? (\uD0C0\uC778 \uB370\uC774\uD130 \uC0AD\uC81C \uBD88\uAC00)\n                    deleteWhere = and(eq(pk, args.id), eq(ownerMeta.column, user.id));\n                }\n                await inRlsOrPlainTx(ctx.db, async (tx) => {\n                    if (options?.softDelete) {\n                        const sdField = options.softDelete.field;\n                        await tx\n                            .update(anyTable)\n                            .set({ [sdField]: new Date() })\n                            .where(deleteWhere);\n                    }\n                    else {\n                        await tx.delete(anyTable).where(deleteWhere);\n                    }\n                });\n                // Realtime push: list\uB294 payload \uC5C6\uC774 invalidation\uC73C\uB85C \uAC31\uC2E0\n                if (useRealtime && enabledMethods.has(\"list\")) {\n                    invalidateListRealtime(ctx);\n                }\n                return { success: true };\n            },\n        });\n    // \uBC18\uD658 \uAC1D\uCCB4\uB294 \uD56D\uC0C1 5\uAC1C \uD0A4\uB97C \uAC00\uC9C0\uC9C0\uB9CC, \uBE44\uD65C\uC131 \uBA54\uC11C\uB4DC\uB294 undefined.\n    // \uC0AC\uC6A9\uC790\uAC00 destructure \uC2DC undefined\uB97C \uBC1B\uC73C\uBA74 export\uD558\uC9C0 \uC54A\uC73C\uBBC0\uB85C\n    // codegen\uC758 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uB4F1\uB85D\uB418\uC9C0 \uC54A\uC544 api.ts \uBD88\uC77C\uCE58\uAC00 \uD574\uC18C\uB428.\n    return {\n        list: listDef,\n        get: getDef,\n        create: createDef,\n        update: updateDef,\n        remove: removeDef,\n    };\n}\n", "import { and, eq, gt, gte, ilike, inArray, like, lt, lte, ne, notInArray, or } from \"drizzle-orm\";\n/** \uC7AC\uADC0 \uD544\uD130 \uCD5C\uB300 \uAE4A\uC774 \u2014 DoS \uBC29\uC5B4 (\uAE4A\uC774 \uCD08\uACFC \uC2DC \uC870\uAC74 \uBB35\uC0B4) */\nconst MAX_FILTER_DEPTH = 5;\n/** \uC9C0\uC6D0 \uC5F0\uC0B0\uC790 \uBAA9\uB85D */\nconst FILTER_OPS = [\"eq\", \"ne\", \"gt\", \"gte\", \"lt\", \"lte\", \"in\", \"nin\", \"like\", \"ilike\"];\nfunction isValidFilterOp(op) {\n    return FILTER_OPS.includes(op);\n}\n/**\n * \uD544\uD130 \uB178\uB4DC \uD2B8\uB9AC\uC5D0 \uB4F1\uC7A5\uD558\uB294 \uCEEC\uB7FC \uD0A4(OR\u00B7AND \uC678 \uBAA8\uB4E0 \uD0A4)\uB97C \uC21C\uC11C\uB300\uB85C \uC218\uC9D1\uD569\uB2C8\uB2E4.\n */\nexport function extractStructuredFilterColumnKeys(node, depth = 0) {\n    if (depth > MAX_FILTER_DEPTH)\n        return [];\n    const keys = [];\n    for (const [k, val] of Object.entries(node)) {\n        if (k === \"OR\" || k === \"AND\") {\n            if (!Array.isArray(val))\n                continue;\n            for (const child of val) {\n                if (child != null && typeof child === \"object\" && !Array.isArray(child)) {\n                    keys.push(...extractStructuredFilterColumnKeys(child, depth + 1));\n                }\n            }\n            continue;\n        }\n        keys.push(k);\n    }\n    return keys;\n}\n/**\n * \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC740 \uCEEC\uB7FC\uC774 \uC788\uC73C\uBA74 Error \u2014 allowedFilters \uBBF8\uC9C0\uC815\uC774\uBA74 \uBB34\uAC80\uC99D(\uD14C\uC774\uBE14\uC5D0 \uC788\uB294 \uCEEC\uB7FC\uB9CC \uD6C4\uC18D \uB2E8\uACC4\uC5D0\uC11C \uD574\uC11D).\n */\nexport function assertStructuredFiltersAllowlist(filters, allowedFilters) {\n    if (allowedFilters === undefined)\n        return;\n    const allow = new Set(allowedFilters);\n    const seen = extractStructuredFilterColumnKeys(filters);\n    if (seen.length > 0 && allow.size === 0) {\n        throw new Error(\"Structured filters require allowedFilters entries; whitelist is empty\");\n    }\n    for (const k of seen) {\n        if (!allow.has(k)) {\n            throw new Error(`Filter references disallowed column \"${k}\"`);\n        }\n    }\n}\nfunction columnAllowsOp(column, op, disableILike) {\n    if (disableILike && op === \"ilike\")\n        return false;\n    const dataType = column.dataType;\n    const noPattern = () => op !== \"like\" && op !== \"ilike\";\n    switch (dataType) {\n        case \"string\":\n            return true;\n        case \"number\":\n        case \"bigint\":\n            return noPattern();\n        case \"boolean\":\n            return op === \"eq\" || op === \"ne\" || op === \"in\" || op === \"nin\";\n        case \"date\":\n            return noPattern();\n        case \"json\":\n        case \"array\":\n            return op === \"eq\" || op === \"ne\" || op === \"in\" || op === \"nin\";\n        default:\n            if (op === \"like\" || op === \"ilike\")\n                return true;\n            return true;\n    }\n}\n/**\n * \uB2E8\uC77C \uD544\uD130 \uC5F0\uC0B0\uC790\uB97C Drizzle SQL \uC870\uAC74\uC73C\uB85C \uBCC0\uD658.\n * \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 op\uC774\uAC70\uB098 \uAC12 \uD0C0\uC785\uC774 \uB9DE\uC9C0 \uC54A\uC73C\uBA74 undefined \uBC18\uD658 (\uBB35\uC0B4).\n */\nexport function applyFilterOp(col, op, value) {\n    switch (op) {\n        case \"eq\":\n            return eq(col, value);\n        case \"ne\":\n            return ne(col, value);\n        case \"gt\":\n            return gt(col, value);\n        case \"gte\":\n            return gte(col, value);\n        case \"lt\":\n            return lt(col, value);\n        case \"lte\":\n            return lte(col, value);\n        case \"in\":\n            if (!Array.isArray(value) || value.length === 0)\n                return undefined;\n            return inArray(col, value);\n        case \"nin\":\n            if (!Array.isArray(value) || value.length === 0)\n                return undefined;\n            return notInArray(col, value);\n        case \"like\":\n            if (typeof value !== \"string\")\n                return undefined;\n            return like(col, value);\n        case \"ilike\":\n            if (typeof value !== \"string\")\n                return undefined;\n            return ilike(col, value);\n        default:\n            return undefined;\n    }\n}\n/**\n * \uC7AC\uADC0\uC801 \uD544\uD130 \uB178\uB4DC \uD30C\uC2F1 \u2014 OR/AND \uB17C\uB9AC \uC911\uCCA9 + \uC5F0\uC0B0\uC790 \uB9E4\uD551.\n *\n * @param node         - \uD544\uD130 JSON \uAC1D\uCCB4\n * @param table        - Drizzle PgTable (\uCEEC\uB7FC \uB9E4\uD551)\n * @param allowedFields - \uD5C8\uC6A9 \uD544\uB4DC \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 (\uBBF8\uC9C0\uC815 \uC2DC \uBAA8\uB4E0 \uD14C\uC774\uBE14 \uCEEC\uB7FC \uD5C8\uC6A9)\n *\n * @example\n * ```ts\n * // \uC554\uBB35\uC801 eq (v2 \uD558\uC704\uD638\uD658)\n * parseFilterNode({ status: 'active' }, table)\n *   \u2192 and(eq(table.status, 'active'))\n *\n * // \uBA85\uC2DC\uC801 \uC5F0\uC0B0\uC790\n * parseFilterNode({ qty: { op: 'gte', value: 10 } }, table)\n *   \u2192 and(gte(table.qty, 10))\n *\n * // OR / AND \uC911\uCCA9\n * parseFilterNode({ OR: [{ a: 1 }, { b: { op: 'gt', value: 5 } }] }, table)\n *   \u2192 or(eq(table.a, 1), gt(table.b, 5))\n * ```\n */\nexport function parseFilterNode(node, table, allowedFields, depth = 0, opts) {\n    const strict = opts?.strictColumnOps === true;\n    const disableILike = opts?.disableILike === true;\n    // DoS \uBC29\uC5B4: \uC7AC\uADC0 \uAE4A\uC774 \uC81C\uD55C \uCD08\uACFC \uC2DC \uC870\uAC74 \uBB35\uC0B4\n    if (depth > MAX_FILTER_DEPTH)\n        return undefined;\n    const conditions = [];\n    for (const [key, val] of Object.entries(node)) {\n        // \u2500\u2500 OR \uB17C\uB9AC \uADF8\uB8F9 \u2500\u2500\n        if (key === \"OR\") {\n            if (!Array.isArray(val))\n                continue; // \uC798\uBABB\uB41C \uD0C0\uC785 \u2192 \uBB35\uC0B4\n            const orConds = val\n                .filter((child) => child != null && typeof child === \"object\" && !Array.isArray(child))\n                .map((child) => parseFilterNode(child, table, allowedFields, depth + 1, opts))\n                .filter((c) => c !== undefined);\n            if (orConds.length > 0)\n                conditions.push(or(...orConds));\n            continue;\n        }\n        // \u2500\u2500 AND \uB17C\uB9AC \uADF8\uB8F9 \u2500\u2500\n        if (key === \"AND\") {\n            if (!Array.isArray(val))\n                continue;\n            const andConds = val\n                .filter((child) => child != null && typeof child === \"object\" && !Array.isArray(child))\n                .map((child) => parseFilterNode(child, table, allowedFields, depth + 1, opts))\n                .filter((c) => c !== undefined);\n            if (andConds.length > 0)\n                conditions.push(and(...andConds));\n            continue;\n        }\n        // \u2500\u2500 \uCEEC\uB7FC \uD544\uD130 \u2500\u2500\n        // allowedFields \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 \uAC80\uC99D (\uC7AC\uADC0\uC801\uC73C\uB85C OR/AND \uB0B4\uBD80\uC5D0\uB3C4 \uC801\uC6A9\uB428)\n        if (allowedFields && !allowedFields.includes(key)) {\n            if (!strict)\n                continue;\n            throw new Error(`Filter references unknown column \"${key}\"`);\n        }\n        const col = table[key];\n        if (!col) {\n            if (!strict)\n                continue;\n            throw new Error(`Unknown filter column \"${key}\" on table`);\n        }\n        // \uBA85\uC2DC\uC801 \uC5F0\uC0B0\uC790: { op: 'gte', value: 10 }\n        if (val != null && typeof val === \"object\" && !Array.isArray(val) && \"op\" in val) {\n            const { op, value } = val;\n            if (!isValidFilterOp(op)) {\n                if (strict)\n                    throw new Error(`Unsupported filter operator \"${op}\"`);\n                continue;\n            }\n            if (!columnAllowsOp(col, op, disableILike)) {\n                if (strict) {\n                    throw new Error(`Filter operator \"${op}\" is not allowed for column \"${key}\"`);\n                }\n                continue;\n            }\n            const cond = applyFilterOp(col, op, value);\n            if (cond)\n                conditions.push(cond);\n            else if (strict)\n                throw new Error(`Invalid filter values for \"${key}\"`);\n            continue;\n        }\n        // \uC554\uBB35\uC801 eq (v2 \uD558\uC704\uD638\uD658): { status: 'active' } \u2192 eq(status, 'active')\n        if (!columnAllowsOp(col, \"eq\", disableILike)) {\n            if (strict)\n                throw new Error(`Implicit eq is not allowed for column \"${key}\"`);\n            continue;\n        }\n        conditions.push(eq(col, val));\n    }\n    return conditions.length > 0 ? and(...conditions) : undefined;\n}\n", "import { getTableName, getTableColumns } from \"drizzle-orm\";\nimport { getTableConfig } from \"drizzle-orm/pg-core\";\nimport { getOwnerRlsMeta, registerOwnerRls } from \"./rls.js\";\nfunction resolvePropertyName(table, columnName) {\n    try {\n        const columns = getTableColumns(table);\n        for (const [propName, col] of Object.entries(columns)) {\n            if (col.name === columnName)\n                return propName;\n        }\n    }\n    catch {\n        /* tests */\n    }\n    return columnName;\n}\nexport function detectOwnerMeta(table) {\n    const anyTable = table;\n    const meta = getOwnerRlsMeta(table);\n    if (meta) {\n        const propName = resolvePropertyName(table, meta.columnName);\n        const col = anyTable[propName];\n        if (col) {\n            return {\n                column: col,\n                columnName: meta.columnName,\n                propertyName: propName,\n                readPublic: meta.readPublic,\n            };\n        }\n    }\n    try {\n        const config = getTableConfig(table);\n        if (config.policies && config.policies.length > 0) {\n            const propName = anyTable[\"userId\"] ? \"userId\" : anyTable[\"user_id\"] ? \"user_id\" : null;\n            if (propName) {\n                const userIdCol = anyTable[propName];\n                const colName = userIdCol.name || \"user_id\";\n                registerOwnerRls(table, { columnName: colName, readPublic: false });\n                return { column: userIdCol, columnName: colName, propertyName: propName, readPublic: false };\n            }\n            const tblName = getTableName(table);\n            console.warn(`[createCrud] Table \"${tblName}\" has ${config.policies.length} pgPolicy but no userId/user_id column found.`);\n        }\n    }\n    catch { }\n    return null;\n}\n", "import { getTableConfig } from \"drizzle-orm/pg-core\";\nimport { buildQuerySubscriptionKey } from \"./reactive-realtime.js\";\nimport { buildRealtimeQueryScopeHash, } from \"./realtime-query-subscription.js\";\nconst CRUD_LIST_BUCKET_QUERY = \"__gencow.crud.list\";\nconst FORBIDDEN_SCOPE_KEYS = new Set([\"query\", \"subscriptionKey\", \"scopeHash\", \"__gencow\"]);\nexport function createCrudRealtimeEventId() {\n    const randomUUID = globalThis.crypto?.randomUUID;\n    if (typeof randomUUID === \"function\")\n        return `evt_${randomUUID.call(globalThis.crypto)}`;\n    return `evt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;\n}\nfunction resolveDefaultResourceIdentity(table, tableName) {\n    try {\n        const config = getTableConfig(table);\n        const schema = typeof config.schema === \"string\" && config.schema.trim().length > 0\n            ? config.schema.trim()\n            : \"public\";\n        return `${schema}.${config.name}`;\n    }\n    catch {\n        return tableName.includes(\".\") ? tableName : `public.${tableName}`;\n    }\n}\nfunction isPlainObject(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value))\n        return false;\n    const proto = Object.getPrototypeOf(value);\n    return proto === Object.prototype || proto === null;\n}\nfunction assertJsonScopeValue(value, path) {\n    if (value === undefined)\n        return;\n    if (value === null)\n        return;\n    if (typeof value === \"string\" || typeof value === \"boolean\")\n        return;\n    if (typeof value === \"number\") {\n        if (!Number.isFinite(value))\n            throw new Error(`[createCrud] realtime scope \"${path}\" must be finite`);\n        return;\n    }\n    if (Array.isArray(value)) {\n        value.forEach((entry, index) => {\n            if (entry === undefined)\n                throw new Error(`[createCrud] realtime scope \"${path}[${index}]\" cannot be undefined`);\n            assertJsonScopeValue(entry, `${path}[${index}]`);\n        });\n        return;\n    }\n    if (isPlainObject(value)) {\n        for (const [key, child] of Object.entries(value)) {\n            assertJsonScopeValue(child, path ? `${path}.${key}` : key);\n        }\n        return;\n    }\n    throw new Error(`[createCrud] realtime scope \"${path}\" must be JSON-serializable`);\n}\nfunction normalizeCrudScope(value, label) {\n    if (!isPlainObject(value)) {\n        throw new Error(`[createCrud] ${label} must return a non-null plain object scope`);\n    }\n    for (const key of Object.keys(value)) {\n        if (FORBIDDEN_SCOPE_KEYS.has(key)) {\n            throw new Error(`[createCrud] ${label} scope key \"${key}\" is reserved`);\n        }\n    }\n    assertJsonScopeValue(value, \"\");\n    return value;\n}\nexport function buildCrudListSubscriptionKey(input) {\n    return buildQuerySubscriptionKey(CRUD_LIST_BUCKET_QUERY, {\n        policy: input.policy,\n        resourceIdentity: input.resourceIdentity,\n        scope: input.scope,\n    });\n}\nexport function buildCrudListScopeHash(input) {\n    const subscriptionKey = buildCrudListSubscriptionKey(input);\n    return buildRealtimeQueryScopeHash({\n        query: CRUD_LIST_BUCKET_QUERY,\n        subscriptionKey,\n        scope: {\n            policy: input.policy,\n            resourceIdentity: input.resourceIdentity,\n            scope: input.scope,\n        },\n    });\n}\nexport function resolveCrudRealtimeConfig(input) {\n    const resourceIdentity = resolveDefaultResourceIdentity(input.table, input.tableName);\n    const config = input.realtime;\n    if (config === false) {\n        return {\n            enabled: false,\n            listEnabled: false,\n            listPolicy: false,\n            resourceIdentity,\n            explicitScopedList: false,\n        };\n    }\n    if (config === undefined) {\n        return {\n            enabled: true,\n            listEnabled: true,\n            listPolicy: input.defaultListPolicy,\n            resourceIdentity,\n            explicitScopedList: false,\n            scope: () => ({}),\n            scopeFromRow: async () => ({}),\n        };\n    }\n    if (!isPlainObject(config)) {\n        throw new Error(`[createCrud] realtime must be false or an object`);\n    }\n    if (config.listRealtime === false) {\n        return {\n            enabled: true,\n            listEnabled: false,\n            listPolicy: false,\n            resourceIdentity,\n            explicitScopedList: false,\n        };\n    }\n    const policy = config.policy;\n    if (policy !== \"public\" && policy !== \"authorized\") {\n        throw new Error(`[createCrud] realtime.policy must be \"public\" or \"authorized\" when list realtime is enabled`);\n    }\n    const scope = config.scope;\n    const scopeFromRow = config.scopeFromRow;\n    if (typeof scope !== \"function\" || typeof scopeFromRow !== \"function\") {\n        throw new Error(`[createCrud] realtime scope and scopeFromRow are required when list realtime is enabled`);\n    }\n    const authorize = config.authorize;\n    if (policy === \"authorized\" && typeof authorize !== \"function\") {\n        throw new Error(`[createCrud] realtime.authorize is required for authorized list realtime`);\n    }\n    const explicitResourceIdentity = typeof config.resourceIdentity === \"string\" &&\n        config.resourceIdentity.trim().length > 0\n        ? config.resourceIdentity.trim()\n        : resourceIdentity;\n    return {\n        enabled: true,\n        listEnabled: true,\n        listPolicy: policy,\n        resourceIdentity: explicitResourceIdentity,\n        explicitScopedList: true,\n        authorize: authorize,\n        scope: (args) => normalizeCrudScope(scope(args), \"realtime.scope\"),\n        scopeFromRow: async ({ row, ctx }) => normalizeCrudScope(await scopeFromRow({ row, ctx }), \"realtime.scopeFromRow\"),\n    };\n}\n", "import { v } from \"./v.js\";\nexport function detectIdType(column) {\n    const colType = column.dataType;\n    if (colType === \"string\")\n        return v.string();\n    return v.number();\n}\nexport function buildSelectProjection(allCols, pick, omit) {\n    let keys = Object.keys(allCols);\n    if (pick && pick.length > 0)\n        keys = [...pick];\n    else if (!omit?.length)\n        return undefined;\n    if (omit && omit.length > 0)\n        keys = keys.filter((k) => !omit.includes(k));\n    const out = {};\n    for (const k of keys) {\n        if (allCols[k])\n            out[k] = allCols[k];\n    }\n    return Object.keys(out).length > 0 ? out : undefined;\n}\nfunction detectColumnPrimitiveValidator(column) {\n    const colType = column.dataType;\n    if (colType === \"string\")\n        return v.string();\n    if (colType === \"number\")\n        return v.number();\n    if (colType === \"boolean\")\n        return v.boolean();\n    let sqlType = \"\";\n    try {\n        sqlType = typeof column.getSQLType === \"function\" ? String(column.getSQLType()) : \"\";\n    }\n    catch {\n        sqlType = \"\";\n    }\n    if (/integer|bigint|serial|numeric|double|decimal|smallint|real/i.test(sqlType))\n        return v.number();\n    if (/timestamp|timestamptz|(^date\\b)/i.test(sqlType))\n        return v.dateTime();\n    return v.any();\n}\nfunction detectColumnOutputValidator(column) {\n    const baseValidator = detectColumnPrimitiveValidator(column);\n    const isNotNull = column.notNull === true;\n    return isNotNull ? baseValidator : v.nullable(baseValidator);\n}\nexport function buildCrudCreateInputValidator(cols, options = {}) {\n    const fields = {};\n    const serverInjectedFields = new Set(options.serverInjectedFields ?? []);\n    for (const [propName, col] of Object.entries(cols)) {\n        const inner = detectColumnPrimitiveValidator(col);\n        const hasDefault = col.hasDefault === true;\n        const isNotNull = col.notNull === true;\n        const isServerInjected = serverInjectedFields.has(propName);\n        if (!isNotNull) {\n            fields[propName] = v.optional(v.nullable(inner));\n        }\n        else if (hasDefault || isServerInjected) {\n            fields[propName] = v.optional(inner);\n        }\n        else {\n            fields[propName] = inner;\n        }\n    }\n    return v.object(fields);\n}\nexport function buildCrudUpdateInputValidator(cols, pkPropName, pkValidator) {\n    const fields = { id: pkValidator };\n    for (const [propName, col] of Object.entries(cols)) {\n        if (propName === pkPropName)\n            continue;\n        const inner = detectColumnPrimitiveValidator(col);\n        const isNotNull = col.notNull === true;\n        fields[propName] = isNotNull ? v.optional(inner) : v.optional(v.nullable(inner));\n    }\n    return v.object(fields);\n}\nexport function buildRowOutputValidator(columns) {\n    const fields = {};\n    for (const [key, column] of Object.entries(columns)) {\n        fields[key] = detectColumnOutputValidator(column);\n    }\n    return v.object(fields);\n}\n", "import { sql } from \"drizzle-orm\";\nexport function normalizeOrderDir(raw) {\n    const d = typeof raw === \"string\" ? raw.toLowerCase() : \"\";\n    return d === \"asc\" ? \"asc\" : \"desc\";\n}\nexport function encodeCursor(values, direction) {\n    const payload = { v: values, d: direction };\n    const json = JSON.stringify(payload);\n    return Buffer.from(json, \"utf8\").toString(\"base64url\");\n}\nexport function decodeCursor(token) {\n    let json;\n    try {\n        json = Buffer.from(token, \"base64url\").toString(\"utf8\");\n    }\n    catch {\n        throw new Error(\"Invalid cursor\");\n    }\n    let parsed;\n    try {\n        parsed = JSON.parse(json);\n    }\n    catch {\n        throw new Error(\"Invalid cursor\");\n    }\n    if (!parsed || typeof parsed !== \"object\")\n        throw new Error(\"Invalid cursor\");\n    const { v, d } = parsed;\n    if (!Array.isArray(v))\n        throw new Error(\"Invalid cursor\");\n    const direction = d === \"asc\" ? \"asc\" : \"desc\";\n    return { values: v, direction };\n}\nexport function buildTupleComparePredicate(columns, values, direction) {\n    if (columns.length !== values.length || columns.length === 0) {\n        throw new Error(\"cursor column count mismatch\");\n    }\n    const opToken = direction === \"asc\" ? sql `>` : sql `<`;\n    const colTuple = sql.join(columns.map((c) => sql `${c}`), sql `, `);\n    const valTuple = sql.join(values.map((val) => sql `${val}`), sql `, `);\n    return sql `(${colTuple}) ${opToken} (${valTuple})`;\n}\n", "import { eq, desc, asc, ilike, or, and, count as drizzleCount, getTableName, getTableColumns, } from \"drizzle-orm\";\nimport { buildQuerySubscriptionKey } from \"./reactive-realtime.js\";\nimport { v } from \"./v.js\";\nimport { assertStructuredFiltersAllowlist, parseFilterNode } from \"./createCrud.filters.js\";\nimport { detectOwnerMeta } from \"./createCrud.owner.js\";\nimport { defineRealtimeSubscriptions } from \"./realtime-query-registry.js\";\nimport { buildCrudListScopeHash, buildCrudListSubscriptionKey, createCrudRealtimeEventId, resolveCrudRealtimeConfig, } from \"./createCrud.realtime.js\";\nimport { buildCrudCreateInputValidator, buildCrudUpdateInputValidator, buildRowOutputValidator, buildSelectProjection, detectIdType, } from \"./createCrud.validators.js\";\nimport { buildTupleComparePredicate, decodeCursor, encodeCursor, normalizeOrderDir, } from \"./createCrud.cursor.js\";\nasync function denyUnless(policy, ctx) {\n    if (!policy)\n        return;\n    const ok = await policy(ctx);\n    if (!ok)\n        throw new Error(\"Forbidden\");\n}\nfunction buildCrud(table, options, procedure) {\n    const { query, mutation } = procedure;\n    const anyTable = table;\n    const drizzleTable = table;\n    const tableName = getTableName(drizzleTable);\n    const prefix = options?.prefix || tableName;\n    const allowAnonymous = options?.allowAnonymous ?? false;\n    const defaultLimit = options?.defaultLimit ?? 20;\n    const maxLimit = options?.maxLimit ?? 100;\n    const pk = anyTable[\"id\"];\n    if (!pk) {\n        throw new Error(`[createCrud] Table \"${tableName}\" must have an 'id' column.`);\n    }\n    const pkPropName = Object.keys(getTableColumns(drizzleTable)).find((k) => anyTable[k] === pk) ?? \"id\";\n    const idValidator = detectIdType(pk);\n    const createdAtCol = anyTable[\"createdAt\"];\n    const defaultOrderCol = createdAtCol || pk;\n    const userIdCol = anyTable[\"userId\"];\n    const ownerMeta = detectOwnerMeta(drizzleTable);\n    const listNeedsAuth = !allowAnonymous || (ownerMeta && !ownerMeta.readPublic);\n    const defaultListRealtimePolicy = listNeedsAuth ? \"authorized\" : \"public\";\n    const crudRealtime = resolveCrudRealtimeConfig({\n        realtime: options?.realtime,\n        defaultListPolicy: defaultListRealtimePolicy,\n        table: drizzleTable,\n        tableName,\n    });\n    const disableILike = options?.disableILike === true;\n    const cursorPropNames = options?.cursor ? [...options.cursor].map((c) => String(c)) : undefined;\n    let sortablePropNames = options?.sortable && options.sortable.length > 0\n        ? new Set(options.sortable.map((c) => String(c)))\n        : undefined;\n    if (cursorPropNames?.length) {\n        sortablePropNames ??= new Set();\n        for (const c of cursorPropNames) {\n            sortablePropNames.add(c);\n            if (!(c in anyTable)) {\n                throw new Error(`[createCrud] cursor column \"${c}\" is not present on table \"${tableName}\"`);\n            }\n        }\n        const last = cursorPropNames[cursorPropNames.length - 1];\n        if (last !== pkPropName) {\n            console.warn(`[createCrud] \"${tableName}\": composite cursor ends with \"${last}\" \u2014 include primary key (${pkPropName}) as final segment for stable pagination.`);\n        }\n    }\n    const drizzleCols = getTableColumns(drizzleTable);\n    async function assertReadAccess(ctx) {\n        await denyUnless(options?.access?.read, ctx);\n    }\n    function buildWhereConditions(args) {\n        const conditions = [];\n        if (options?.softDelete) {\n            const sdField = anyTable[options.softDelete.field];\n            conditions.push(eq(sdField, null));\n        }\n        if (args.search && options?.searchFields?.length) {\n            if (disableILike) {\n                throw new Error(`Search is disabled (disableILike) for CRUD \"${prefix}\"`);\n            }\n            const searchConds = options.searchFields.map((f) => ilike(anyTable[f], `%${args.search}%`));\n            conditions.push(or(...searchConds));\n        }\n        if (args.filters && typeof args.filters === \"object\" && args.filters !== null) {\n            const filterObj = args.filters;\n            const hasShape = Object.keys(filterObj).length > 0;\n            if (hasShape) {\n                assertStructuredFiltersAllowlist(filterObj, options?.allowedFilters);\n                const allowedFields = options?.allowedFilters !== undefined ? options.allowedFilters : undefined;\n                const filterCondition = parseFilterNode(filterObj, anyTable, allowedFields, 0, {\n                    disableILike,\n                    strictColumnOps: true,\n                });\n                if (filterCondition)\n                    conditions.push(filterCondition);\n            }\n        }\n        return conditions.length > 0 ? and(...conditions) : undefined;\n    }\n    async function inRlsOrPlainTx(db, fn) {\n        if (typeof db?.transaction === \"function\") {\n            return await db.transaction(fn);\n        }\n        return await fn(db);\n    }\n    function resolveListRealtimeBucket(scope) {\n        if (!crudRealtime.listEnabled)\n            return null;\n        return {\n            policy: crudRealtime.listPolicy,\n            resourceIdentity: crudRealtime.resourceIdentity,\n            scope,\n            subscriptionKey: buildCrudListSubscriptionKey({\n                policy: crudRealtime.listPolicy,\n                resourceIdentity: crudRealtime.resourceIdentity,\n                scope,\n            }),\n            scopeHash: buildCrudListScopeHash({\n                policy: crudRealtime.listPolicy,\n                resourceIdentity: crudRealtime.resourceIdentity,\n                scope,\n            }),\n        };\n    }\n    async function invalidateListRealtimeForScopes(ctx, input) {\n        if (!crudRealtime.listEnabled || !enabledMethods.has(\"list\"))\n            return;\n        const seen = new Set();\n        let firstError;\n        for (const row of input.rows) {\n            if (row == null)\n                continue;\n            let scope;\n            try {\n                scope = await crudRealtime.scopeFromRow({ row, ctx });\n            }\n            catch (error) {\n                firstError ??= error;\n                continue;\n            }\n            const bucket = resolveListRealtimeBucket(scope);\n            if (!bucket || seen.has(bucket.scopeHash))\n                continue;\n            seen.add(bucket.scopeHash);\n            invalidateCrudRealtime(ctx, {\n                legacyQueryKey: `${prefix}.list`,\n                query: `${prefix}.list`,\n                subscriptionKey: bucket.subscriptionKey,\n                scopeHash: bucket.scopeHash,\n                eventId: input.eventId,\n            });\n        }\n        if (firstError)\n            throw firstError;\n    }\n    function reportCrudRealtimeInvalidationError(input) {\n        console.error(\"[createCrud] realtime invalidation failed after mutation commit\", {\n            prefix,\n            tableName,\n            operation: input.operation,\n            ...(input.id !== undefined ? { id: input.id } : {}),\n            error: input.error,\n        });\n    }\n    function invalidateGetRealtime(ctx, id, eventId) {\n        invalidateCrudRealtime(ctx, {\n            legacyQueryKey: buildQuerySubscriptionKey(`${prefix}.get`, { id }),\n            query: `${prefix}.get`,\n            args: { id },\n            eventId,\n        });\n    }\n    function invalidateCrudRealtime(ctx, input) {\n        const realtime = ctx.realtime;\n        if (typeof realtime.invalidateCrudQuery === \"function\") {\n            realtime.invalidateCrudQuery(input);\n            return;\n        }\n        if (input.subscriptionKey && input.scopeHash && typeof realtime.invalidateScoped === \"function\") {\n            realtime.invalidateScoped({\n                query: input.query,\n                args: input.args,\n                subscriptionKey: input.subscriptionKey,\n                scopeHash: input.scopeHash,\n                eventId: input.eventId,\n            });\n            return;\n        }\n        realtime.invalidate(input.legacyQueryKey);\n    }\n    async function selectFullRowForRealtime(tx, whereCond) {\n        const [row] = await tx.select().from(anyTable).where(whereCond).limit(1);\n        return row ?? null;\n    }\n    const pickCols = options?.columns?.pick;\n    const omitCols = options?.columns?.omit;\n    const listProjection = buildSelectProjection(drizzleCols, pickCols, omitCols);\n    const getProjection = listProjection;\n    const projectedColumns = listProjection !== undefined ? listProjection : drizzleCols;\n    function projectResultRow(row) {\n        if (listProjection === undefined || !row || typeof row !== \"object\")\n            return row;\n        const projected = {};\n        for (const key of Object.keys(listProjection)) {\n            projected[key] = row[key];\n        }\n        return projected;\n    }\n    const listRowOutput = buildRowOutputValidator(projectedColumns);\n    /**\n     * Same row shape as list/get/create success responses.\n     * Update legitimately returns `null` when zero rows matched (missing id, RLS, or owner-scoped where).\n     */\n    const updateOutputSchema = v.nullable(listRowOutput);\n    const getOutput = v.nullable(listRowOutput);\n    const createInputValidator = buildCrudCreateInputValidator(drizzleCols, {\n        serverInjectedFields: ownerMeta ? [ownerMeta.propertyName] : undefined,\n    });\n    const updateInputValidator = buildCrudUpdateInputValidator(drizzleCols, pkPropName, idValidator);\n    const listOutput = v.object({\n        data: v.array(listRowOutput),\n        total: v.number(),\n        nextCursor: v.optional(v.string()),\n    });\n    const enabledMethods = new Set(options?.methods ?? [\"list\", \"get\", \"create\", \"update\", \"remove\"]);\n    const enabledMethodsList = Array.from(enabledMethods);\n    const internalMeta = {\n        tableName,\n        prefix,\n        methods: enabledMethodsList,\n        allowedFilters: (options?.allowedFilters ?? []).map((field) => String(field)),\n        searchFields: (options?.searchFields ?? []).map((field) => String(field)),\n        sortable: sortablePropNames ? [...sortablePropNames] : undefined,\n        cursor: cursorPropNames,\n        ...(disableILike ? { disableILike: true } : {}),\n        allowAnonymous,\n        realtime: crudRealtime.enabled,\n        listRealtime: crudRealtime.listEnabled,\n        realtimePolicy: crudRealtime.listPolicy,\n        resourceIdentity: crudRealtime.resourceIdentity,\n    };\n    /** sortable \uBBF8\uC9C0\uC815\uC774\uBA74 \uC874\uC7AC\uD558\uB294 \uD14C\uC774\uBE14 \uCEEC\uB7FC\uC73C\uB85C \uC815\uB82C \uD5C8\uC6A9. \uC9C0\uC815\uD558\uBA74 orderBy \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8 \uAC80\uC0AC. */\n    function assertOrderBy(orderByProp) {\n        if (!orderByProp)\n            return;\n        if (!(orderByProp in anyTable))\n            throw new Error(`Unknown orderBy field \"${orderByProp}\"`);\n        if (sortablePropNames && !sortablePropNames.has(orderByProp)) {\n            throw new Error(`orderBy field \"${orderByProp}\" is not sortable`);\n        }\n    }\n    const listDef = !enabledMethods.has(\"list\")\n        ? undefined\n        : (allowAnonymous ? query.allowAnonymous() : query)\n            .name(`${prefix}.list`)\n            .input(v.object({\n            page: v.optional(v.number()),\n            limit: v.optional(v.number()),\n            cursor: v.optional(v.string()),\n            search: v.optional(v.string()),\n            orderBy: v.optional(v.string()),\n            orderDir: v.optional(v.string()),\n            filters: v.optional(v.any()),\n        }))\n            .output(listOutput)\n            .handler(async ({ context, input }) => {\n            await assertReadAccess(context);\n            const user = listNeedsAuth ? context.auth.requireAuth() : null;\n            let whereClause = buildWhereConditions(input);\n            if (ownerMeta && !ownerMeta.readPublic && user) {\n                const ownerFilter = eq(ownerMeta.column, user.id);\n                whereClause = whereClause ? and(whereClause, ownerFilter) : ownerFilter;\n            }\n            const limit = Math.min(Math.max(1, input.limit ?? defaultLimit), maxLimit);\n            let orderExpressions = [];\n            const orderDirEff = normalizeOrderDir(input.orderDir);\n            const cursorCols = cursorPropNames?.map((name) => anyTable[name]).filter(Boolean) ?? [];\n            if (cursorPropNames?.length) {\n                if (input.page != null && input.page !== undefined) {\n                    throw new Error('Offset \"page\" is not supported when cursor columns are configured; use cursor');\n                }\n                if (input.orderBy != null && input.orderBy !== undefined) {\n                    throw new Error(\"orderBy is fixed when composite cursor columns are configured; omit orderBy\");\n                }\n                for (const c of cursorCols) {\n                    orderExpressions.push(orderDirEff === \"asc\" ? asc(c) : desc(c));\n                }\n            }\n            else {\n                const ob = input.orderBy;\n                assertOrderBy(ob);\n                if (ob && anyTable[ob]) {\n                    const col = anyTable[ob];\n                    orderExpressions = [orderDirEff === \"asc\" ? asc(col) : desc(col)];\n                }\n                else {\n                    orderExpressions = [desc(defaultOrderCol)];\n                }\n            }\n            let cursorSeek;\n            if (cursorCols.length && input.cursor) {\n                const decoded = decodeCursor(input.cursor);\n                if (decoded.direction !== orderDirEff) {\n                    throw new Error(\"cursor was issued for a different sort direction\");\n                }\n                if (decoded.values.length !== cursorCols.length) {\n                    throw new Error(\"cursor value count does not match configured cursor columns\");\n                }\n                cursorSeek = buildTupleComparePredicate(cursorCols, decoded.values, orderDirEff);\n                whereClause = whereClause ? and(whereClause, cursorSeek) : cursorSeek;\n            }\n            return await inRlsOrPlainTx(context.db, async (tx) => {\n                const offset = cursorPropNames?.length\n                    ? 0\n                    : Math.max(0, (Math.max(1, input.page ?? 1) - 1) * limit);\n                const base = listProjection !== undefined\n                    ? tx.select(listProjection).from(anyTable)\n                    : tx.select().from(anyTable);\n                const results = await base\n                    .where(whereClause)\n                    .orderBy(...orderExpressions)\n                    .limit(limit)\n                    .offset(offset);\n                const countResult = await tx.select({ count: drizzleCount() }).from(anyTable).where(whereClause);\n                const total = Number(countResult[0]?.count ?? 0);\n                let nextCursor;\n                if (cursorPropNames?.length && results.length === limit) {\n                    const last = results[results.length - 1];\n                    const vals = cursorPropNames.map((prop) => last[prop]);\n                    nextCursor = encodeCursor(vals, orderDirEff);\n                }\n                return { data: results, total, nextCursor };\n            });\n        });\n    if (listDef) {\n        listDef.realtimePolicy = crudRealtime.listEnabled ? crudRealtime.listPolicy : false;\n    }\n    if (listDef && crudRealtime.listEnabled) {\n        defineRealtimeSubscriptions({\n            [listDef.name]: {\n                policy: crudRealtime.listPolicy,\n                args: listDef.inputSchema,\n                subscriptionKey: (args) => {\n                    const scope = crudRealtime.scope(args);\n                    return buildCrudListSubscriptionKey({\n                        policy: crudRealtime.listPolicy,\n                        resourceIdentity: crudRealtime.resourceIdentity,\n                        scope,\n                    });\n                },\n                scope: (args) => {\n                    const scope = crudRealtime.scope(args);\n                    return {\n                        policy: crudRealtime.listPolicy,\n                        resourceIdentity: crudRealtime.resourceIdentity,\n                        scope,\n                    };\n                },\n                authorize: async (ctx, args) => {\n                    if (crudRealtime.explicitScopedList) {\n                        await crudRealtime.authorize?.({ args, ctx: ctx });\n                    }\n                    else {\n                        await assertReadAccess(ctx);\n                    }\n                },\n            },\n        });\n    }\n    const getNeedsAuth = !allowAnonymous || (ownerMeta && !ownerMeta.readPublic);\n    const getRealtimePolicy = getNeedsAuth ? \"authorized\" : \"public\";\n    function buildGetWhereCondition(id, user) {\n        let whereCond = eq(pk, id);\n        if (ownerMeta && !ownerMeta.readPublic && user) {\n            whereCond = and(whereCond, eq(ownerMeta.column, user.id));\n        }\n        if (options?.softDelete) {\n            const sdField = anyTable[options.softDelete.field];\n            whereCond = and(whereCond, eq(sdField, null));\n        }\n        return whereCond;\n    }\n    async function canAuthorizeGeneratedGetRealtime(ctx, id) {\n        await assertReadAccess(ctx);\n        const user = getNeedsAuth ? ctx.auth.requireAuth() : null;\n        const whereCond = buildGetWhereCondition(id, user);\n        const row = await inRlsOrPlainTx(ctx.db, async (tx) => {\n            const [result] = await tx.select({ id: pk }).from(anyTable).where(whereCond).limit(1);\n            return result ?? null;\n        });\n        return row !== null;\n    }\n    const getDef = !enabledMethods.has(\"get\")\n        ? undefined\n        : (allowAnonymous ? query.allowAnonymous() : query)\n            .name(`${prefix}.get`)\n            .input(v.object({ id: idValidator }))\n            .output(getOutput)\n            .handler(async ({ context, input }) => {\n            await assertReadAccess(context);\n            const user = getNeedsAuth ? context.auth.requireAuth() : null;\n            const whereCond = buildGetWhereCondition(input.id, user);\n            return await inRlsOrPlainTx(context.db, async (tx) => {\n                const qb = getProjection !== undefined\n                    ? tx.select(getProjection).from(anyTable)\n                    : tx.select().from(anyTable);\n                const [result] = await qb.where(whereCond).limit(1);\n                return result ?? null;\n            });\n        });\n    if (getDef) {\n        getDef.realtimePolicy = crudRealtime.enabled ? getRealtimePolicy : false;\n    }\n    if (getDef && crudRealtime.enabled) {\n        defineRealtimeSubscriptions({\n            [getDef.name]: {\n                policy: getRealtimePolicy,\n                args: getDef.inputSchema,\n                authorize: async (ctx, args) => {\n                    const allowed = await canAuthorizeGeneratedGetRealtime(ctx, args.id);\n                    return allowed ? undefined : false;\n                },\n            },\n        });\n    }\n    const createDef = !enabledMethods.has(\"create\")\n        ? undefined\n        : (allowAnonymous ? mutation.allowAnonymous() : mutation)\n            .name(`${prefix}.create`)\n            .input(createInputValidator)\n            .output(listRowOutput)\n            .handler(async ({ context, input }) => {\n            await denyUnless(options?.access?.create, context);\n            const user = ownerMeta || !allowAnonymous ? context.auth.requireAuth() : null;\n            let insertData = typeof input === \"object\" && input !== null ? { ...input } : {};\n            if (ownerMeta && user) {\n                const requestedOwner = insertData[ownerMeta.propertyName] ?? insertData[ownerMeta.columnName] ?? insertData.userId;\n                if (requestedOwner != null && requestedOwner !== user.id) {\n                    throw new Error(\"Forbidden: cannot create resource for another user\");\n                }\n            }\n            if (ownerMeta && user) {\n                insertData[ownerMeta.propertyName] = user.id;\n            }\n            else if (userIdCol && user && !insertData.userId) {\n                insertData.userId = user.id;\n            }\n            if (options?.hooks?.beforeCreate) {\n                insertData = await options.hooks.beforeCreate(insertData);\n            }\n            const { result, realtimeRow } = await inRlsOrPlainTx(context.db, async (tx) => {\n                if (crudRealtime.explicitScopedList) {\n                    const [insertedFullRow] = await tx.insert(anyTable).values(insertData).returning();\n                    return {\n                        result: projectResultRow(insertedFullRow),\n                        realtimeRow: insertedFullRow ?? null,\n                    };\n                }\n                const [inserted] = listProjection !== undefined\n                    ? await tx.insert(anyTable).values(insertData).returning(listProjection)\n                    : await tx.insert(anyTable).values(insertData).returning();\n                return { result: inserted, realtimeRow: inserted ?? null };\n            });\n            if (crudRealtime.enabled && realtimeRow) {\n                const mutationEventId = createCrudRealtimeEventId();\n                try {\n                    await invalidateListRealtimeForScopes(context, {\n                        rows: [realtimeRow],\n                        eventId: mutationEventId,\n                    });\n                }\n                catch (error) {\n                    reportCrudRealtimeInvalidationError({\n                        operation: \"create\",\n                        id: realtimeRow?.[pkPropName],\n                        error,\n                    });\n                }\n            }\n            return result;\n        });\n    const updateDef = !enabledMethods.has(\"update\")\n        ? undefined\n        : (allowAnonymous ? mutation.allowAnonymous() : mutation)\n            .name(`${prefix}.update`)\n            .input(updateInputValidator)\n            .output(updateOutputSchema)\n            .handler(async ({ context, input }) => {\n            await denyUnless(options?.access?.update, context);\n            const user = ownerMeta || !allowAnonymous ? context.auth.requireAuth() : null;\n            const args = typeof input === \"object\" && input !== null ? input : {};\n            const idVal = args.id;\n            let updateData = { ...args };\n            delete updateData.id;\n            let updateWhere = eq(pk, idVal);\n            if (ownerMeta && user) {\n                updateWhere = and(eq(pk, idVal), eq(ownerMeta.column, user.id));\n                delete updateData[ownerMeta.propertyName];\n                if (ownerMeta.propertyName !== ownerMeta.columnName) {\n                    delete updateData[ownerMeta.columnName];\n                }\n            }\n            if (anyTable[\"updatedAt\"]) {\n                updateData.updatedAt = new Date();\n            }\n            if (options?.hooks?.beforeUpdate) {\n                updateData = await options.hooks.beforeUpdate(updateData);\n            }\n            const { result, preRealtimeRow, postRealtimeRow } = await inRlsOrPlainTx(context.db, async (tx) => {\n                const preRow = crudRealtime.explicitScopedList\n                    ? await selectFullRowForRealtime(tx, updateWhere)\n                    : null;\n                const [updated] = listProjection !== undefined\n                    ? await tx.update(anyTable).set(updateData).where(updateWhere).returning(listProjection)\n                    : await tx.update(anyTable).set(updateData).where(updateWhere).returning();\n                let postRow = updated ?? null;\n                if (crudRealtime.explicitScopedList && updated) {\n                    postRow = await selectFullRowForRealtime(tx, eq(pk, idVal));\n                }\n                return { result: updated, preRealtimeRow: preRow, postRealtimeRow: postRow };\n            });\n            if (crudRealtime.enabled) {\n                const mutationEventId = createCrudRealtimeEventId();\n                let listInvalidationError;\n                try {\n                    await invalidateListRealtimeForScopes(context, {\n                        rows: [preRealtimeRow, postRealtimeRow].filter(Boolean),\n                        eventId: mutationEventId,\n                    });\n                }\n                catch (error) {\n                    listInvalidationError = error;\n                }\n                if (enabledMethods.has(\"get\")) {\n                    invalidateGetRealtime(context, idVal, mutationEventId);\n                }\n                if (listInvalidationError) {\n                    reportCrudRealtimeInvalidationError({\n                        operation: \"update\",\n                        id: idVal,\n                        error: listInvalidationError,\n                    });\n                }\n            }\n            return result ?? null;\n        });\n    const removeDef = !enabledMethods.has(\"remove\")\n        ? undefined\n        : (allowAnonymous ? mutation.allowAnonymous() : mutation)\n            .name(`${prefix}.remove`)\n            .input(v.object({ id: idValidator }))\n            .output(v.object({ success: v.boolean() }))\n            .handler(async ({ context, input }) => {\n            await denyUnless(options?.access?.remove, context);\n            const user = ownerMeta || !allowAnonymous ? context.auth.requireAuth() : null;\n            let deleteWhere = eq(pk, input.id);\n            if (ownerMeta && user) {\n                deleteWhere = and(eq(pk, input.id), eq(ownerMeta.column, user.id));\n            }\n            const preRealtimeRow = await inRlsOrPlainTx(context.db, async (tx) => {\n                const preRow = crudRealtime.explicitScopedList\n                    ? await selectFullRowForRealtime(tx, deleteWhere)\n                    : null;\n                if (options?.softDelete) {\n                    const sdField = options.softDelete.field;\n                    await tx\n                        .update(anyTable)\n                        .set({ [sdField]: new Date() })\n                        .where(deleteWhere);\n                }\n                else {\n                    await tx.delete(anyTable).where(deleteWhere);\n                }\n                return preRow;\n            });\n            if (crudRealtime.enabled) {\n                const mutationEventId = createCrudRealtimeEventId();\n                let listInvalidationError;\n                try {\n                    await invalidateListRealtimeForScopes(context, {\n                        rows: crudRealtime.explicitScopedList ? [preRealtimeRow] : [{ [pkPropName]: input.id }],\n                        eventId: mutationEventId,\n                    });\n                }\n                catch (error) {\n                    listInvalidationError = error;\n                }\n                if (enabledMethods.has(\"get\")) {\n                    invalidateGetRealtime(context, input.id, mutationEventId);\n                }\n                if (listInvalidationError) {\n                    reportCrudRealtimeInvalidationError({\n                        operation: \"remove\",\n                        id: input.id,\n                        error: listInvalidationError,\n                    });\n                }\n            }\n            return { success: true };\n        });\n    return {\n        list: listDef,\n        get: getDef,\n        create: createDef,\n        update: updateDef,\n        remove: removeDef,\n        meta: internalMeta,\n        prefix,\n    };\n}\n/**\n * Returns a `createCrud` function bound to `procedure.query` / `procedure.mutation` from\n * {@link createGencowProcedureBuilders} \u2014 re-export the result from `gencow/runtime.ts`.\n */\nexport function createCrudFactory(procedure) {\n    return function createCrud(table, options) {\n        return buildCrud(table, options, procedure);\n    };\n}\n", "/**\n * Platform Core \u2014 Convex-like Backend Framework\n *\n * Provides: query, mutation, storage, scheduler, auth\n * All with Convex-compatible DX patterns.\n */\nexport { defineApi } from \"./context.js\";\nexport { createGencowHttpRouteBuilders } from \"./http-route.js\";\nexport { buildDocumentCacheKey } from \"./document-types.js\";\nexport { DEFAULT_WAKE_RETRY_AFTER_SEC, buildWakeAppBootFailedResult, buildWakeAppSuccessResult, isWakeAppDeferredResult, } from \"./wake-app-result.js\";\nexport { PLATFORM_CAPACITY_ENV_KEYS, PLATFORM_CAPACITY_PRESETS, PLATFORM_CAPACITY_PROFILE_ENV, detectPlatformCapacityProfile, resolvePlatformCapacityPreset, } from \"./platform-capacity-profile.js\";\nexport { DEFAULT_GROUNDING_BUDGET } from \"./grounded-answer-types.js\";\nexport { buildQuerySubscriptionKey, subscriptionKeyMatchesQueryKey } from \"./reactive-realtime.js\";\nexport { query, getQueryHandler, getQueryDef, getRegisteredQueries } from \"./reactive-query.js\";\nexport { mutation, getRegisteredMutations } from \"./reactive-mutation.js\";\nexport { createGencowProcedureBuilders } from \"./procedure.js\";\nexport { httpAction, getRegisteredHttpActions } from \"./http-action.js\";\nexport { buildRealtimeCtx } from \"./reactive-realtime.js\";\nexport { buildRealtimeChannelKey, createRealtimeChannelToken, normalizeRealtimeChannelEpoch, verifyRealtimeChannelToken, } from \"./realtime-channel.js\";\nexport { defineRealtimeChannels, getRealtimeChannelDef, getRegisteredRealtimeChannels, resetRealtimeChannelRegistryForTests, resolveRealtimeChannelKey, } from \"./realtime-channel-registry.js\";\nexport { buildRealtimeQueryScopeHash, buildRealtimeQuerySubscriptionKey, createRealtimeQuerySubscriptionToken, normalizeRealtimeQuerySubscriptionEpoch, verifyRealtimeQuerySubscriptionToken, } from \"./realtime-query-subscription.js\";\nexport { defineRealtimeSubscriptions, getRealtimeSubscriptionDef, getRegisteredRealtimeSubscriptions, resetRealtimeSubscriptionRegistryForTests, resolveRealtimeQueryScopeHash, resolveRealtimeQuerySubscriptionKey, } from \"./realtime-query-registry.js\";\nexport { createRealtimeTicket, verifyRealtimeTicket } from \"./realtime-ticket.js\";\nexport { DEFAULT_STORAGE_QUOTA, MAX_FILE_SIZE, STORAGE_LIST_DEFAULT_LIMIT, STORAGE_LIST_MAX_LIMIT, StorageListUnsupportedError, formatBytes, } from \"./storage.js\";\nexport { advanceUnreadCursor, compareUnreadCursors, countUnreadAfterCursor, isUnreadAfterCursor, normalizeUnreadCursor, } from \"./unread-cursor.js\";\nexport { JobAdmissionError, buildJobAdmissionErrorBody, getJobAdmissionStatus, getMinuteBucketStart, getMsUntilNextMinute, isJobAdmissionError, isJobAdmissionKillSwitchActive, jsonByteLength, readBooleanEnv, readNonNegativeIntegerEnv, readPositiveIntegerEnv, } from \"./job-admission.js\";\nexport { workflow, getWorkflowDef, getRegisteredWorkflows, getWorkflowResumeActionName, getWorkflowRealtimeKey, createWorkflowRealtimeToken, serializeWorkflowValue, deserializeWorkflowValue, parseWorkflowDurationMs, DEFAULT_WORKFLOW_MAX_DURATION_MS, DEFAULT_WORKFLOW_MAX_RETRIES, WORKFLOW_RESUME_ACTION_PREFIX, WORKFLOW_REALTIME_KEY_PREFIX, } from \"./workflow.js\";\nexport { deriveWorkflowStatus } from \"./workflow-types.js\";\nexport { loadWorkflowSnapshot } from \"./workflows-api.js\";\nexport { WorkflowPayloadPolicyError, assertWorkflowPayloadWithinLimit, resolveWorkflowPayloadPolicyConfig, } from \"./workflow-payload-policy.js\";\nexport { v, parseArgs, GencowValidationError } from \"./v.js\";\nexport { withRetry } from \"./retry.js\";\nexport { filterTenantRuntimeEnvVars, isReservedTenantRuntimeEnvKey } from \"./runtime-env-policy.js\";\nexport { cron, cronJobs, isCronJobsBuilder } from \"./crons.js\";\nexport { computeCronActionToken } from \"./cron-action-token.js\";\nexport { defineAuth, DEFAULT_RLS_OWNER_SESSION_KEY } from \"./auth-config.js\";\nexport { hasMapSessionToContext } from \"./auth-config.js\";\nexport { defineConfig } from \"./config.js\";\n// \u2500\u2500\u2500 RLS + CRUD Factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport { ownerRls, getOwnerRlsMeta, registerOwnerRls } from \"./rls.js\";\nexport { tableRls, TableRlsBuilder, inferTableNameFromColumn } from \"./rls-define-table.js\";\nexport { pgBaseTable } from \"./pg-base-table.js\";\nexport { rlsContextKey, rlsContextKeys, eqRlsContextColumn } from \"./rls-context-key.js\";\nexport { defaultRlsSessionContext, validateRlsSessionContext } from \"./rls-context-contract.js\";\nexport { createRlsDb } from \"./rls-db.js\";\nexport { sessionKeyToGucName, stringifySessionValue, RLS_SESSION_KEY_RE } from \"./rls-session.js\";\nexport { crud, parseFilterNode, applyFilterOp, getOwnerRlsTables, getRegisteredCrudCodegenMeta, } from \"./crud.js\";\nexport { createCrudFactory } from \"./createCrud.js\";\n// Deprecated alias retained for legacy tenant apps until the next major release.\nexport { crud as gencowCrud } from \"./crud.js\";\n", "/** Published filename under `codegen.serverOutDir` / `{functionsDir}/generated`. */\nexport const AUTH_SCHEMA_ARTIFACT_FILENAME = \"auth-schema.ts\";\nexport const AUTH_SCHEMA_GEN_ARTIFACT_FILENAME = \"schema-auth.gen.ts\";\nexport const USER_AUTH_SCHEMA_FILENAME = \"schema-auth.ts\";\nexport const AUTH_USER_FIELD_TYPE_IMPORTS = {\n    text: \"text\",\n    string: \"text\",\n    boolean: \"boolean\",\n    integer: \"integer\",\n    number: \"integer\",\n    timestamp: \"timestamp\",\n};\nexport const AUTH_USER_FIELD_BETTER_AUTH_TYPES = {\n    text: \"string\",\n    string: \"string\",\n    boolean: \"boolean\",\n    integer: \"number\",\n    number: \"number\",\n    timestamp: \"date\",\n};\n", "import { existsSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { USER_AUTH_SCHEMA_FILENAME } from \"../codegen/domain/auth-schema.js\";\n/**\n * Resolves absolute paths for Drizzle schema modules from `gencow.config` `schema`\n * (used by codegen table extraction \u2014 not drizzle-kit migrations).\n */\nexport function resolveConfiguredSchemaPaths(projectRoot, functionsDirAbs, schema) {\n    if (Array.isArray(schema)) {\n        return schema.map((entry) => resolve(projectRoot, entry));\n    }\n    if (typeof schema === \"string\" && schema.trim()) {\n        return [resolve(projectRoot, schema)];\n    }\n    return [resolve(functionsDirAbs, \"schema.ts\")];\n}\n/**\n * Absolute directory where server codegen writes `db-schema.gen.ts` and `auth-schema.ts`\n * (matches `runCodegen` default when `serverPublishDir` is omitted).\n */\nexport function resolveServerCodegenDirAbs(projectRoot, functionsDirAbs, serverPublishDir) {\n    if (typeof serverPublishDir === \"string\" && serverPublishDir.trim().length > 0) {\n        return resolve(projectRoot, serverPublishDir.trim());\n    }\n    return join(functionsDirAbs, \"generated\");\n}\nexport function isMigratedAuthSchemaLayout(functionsDirAbs, configuredPathsAbs, existsSyncImpl = existsSync) {\n    const userAuthSchemaTs = join(functionsDirAbs, USER_AUTH_SCHEMA_FILENAME);\n    if (existsSyncImpl(userAuthSchemaTs))\n        return true;\n    const userAuthSchemaJs = join(functionsDirAbs, \"schema-auth.js\");\n    if (existsSyncImpl(userAuthSchemaJs))\n        return true;\n    return configuredPathsAbs.some((schemaPath) => {\n        const normalized = schemaPath.replace(/\\\\/g, \"/\");\n        return normalized.endsWith(\"/schema-auth.ts\") || normalized.endsWith(\"/schema-auth.js\");\n    });\n}\n/**\n * Merges configured schema paths with implicit legacy Better Auth schema files:\n * `{functionsDir}/auth-schema.ts` and `{serverCodegenDir}/auth-schema.ts` (default:\n * `{functionsDir}/generated/auth-schema.ts`). Skipped once `schema-auth.ts` exists or is\n * listed in config (migrated two-file model).\n */\nexport function mergeSchemaPathsWithImplicitAuth(projectRoot, functionsDirAbs, schema, serverCodegenAuthSchemaAbs, existsSyncImpl = existsSync) {\n    const base = resolveConfiguredSchemaPaths(projectRoot, functionsDirAbs, schema);\n    if (isMigratedAuthSchemaLayout(functionsDirAbs, base, existsSyncImpl)) {\n        return dedupeResolvedPaths(base);\n    }\n    const authInFunctions = join(functionsDirAbs, \"auth-schema.ts\");\n    const legacyCandidates = [authInFunctions, serverCodegenAuthSchemaAbs];\n    const hasLegacyAuth = legacyCandidates.some((candidate) => existsSyncImpl(candidate));\n    if (!hasLegacyAuth) {\n        return dedupeResolvedPaths(base);\n    }\n    return dedupeResolvedPaths([...base, ...legacyCandidates]);\n}\n/**\n * Resolves configured schema paths plus legacy implicit `auth-schema.ts` candidates when\n * the app has not migrated to `schema-auth.ts`.\n */\nexport function resolveAuthSchemaPaths(projectRoot, functionsDirAbs, schema, serverCodegenDirAbs, existsSyncImpl = existsSync, options = {}) {\n    if (options.includeImplicitAuthSchema === false) {\n        return dedupeResolvedPaths(resolveConfiguredSchemaPaths(projectRoot, functionsDirAbs, schema));\n    }\n    return mergeSchemaPathsWithImplicitAuth(projectRoot, functionsDirAbs, schema, join(serverCodegenDirAbs, \"auth-schema.ts\"), existsSyncImpl);\n}\nfunction dedupeResolvedPaths(paths) {\n    const seen = new Set();\n    const out = [];\n    for (const p of paths) {\n        const key = resolve(p);\n        if (seen.has(key))\n            continue;\n        seen.add(key);\n        out.push(key);\n    }\n    return out;\n}\n", "const FORBIDDEN_MODULES = new Set([\n    \"child_process\",\n    \"node:child_process\",\n    \"dgram\",\n    \"node:dgram\",\n    \"os\",\n    \"node:os\",\n    \"cluster\",\n    \"node:cluster\",\n    \"worker_threads\",\n    \"node:worker_threads\",\n    \"v8\",\n    \"node:v8\",\n    \"vm\",\n    \"node:vm\",\n]);\nconst ALLOWED_NODE_MODULES = new Set([\n    \"node:crypto\",\n    \"node:path\",\n    \"node:url\",\n    \"node:buffer\",\n    \"node:stream\",\n    \"node:events\",\n    \"node:util\",\n    \"node:http\",\n    \"node:https\",\n    \"crypto\",\n    \"path\",\n    \"url\",\n    \"buffer\",\n    \"stream\",\n    \"events\",\n    \"util\",\n    \"http\",\n    \"https\",\n]);\nexport function createModuleAuditPlugin() {\n    return {\n        name: \"module-auditor\",\n        version: 1,\n        description: \"Audits user bundle imports against runtime production constraints.\",\n        executionKind: \"verification\",\n        phases: [\"graph-analysis\"],\n        requiredEvidence: [\"source-files\", \"resolved-graph\"],\n        requiredUtilities: [\"bundle-inspector\"],\n        providesContracts: [\"auditor/module-report\"],\n        run({ utilities, emitContract }) {\n            const inspector = utilities.require(\"bundle-inspector\");\n            const violations = [];\n            for (const entry of inspector.listModuleImports()) {\n                for (const moduleName of entry.imports) {\n                    if (moduleName.startsWith(\"node:\") && !ALLOWED_NODE_MODULES.has(moduleName)) {\n                        violations.push({ module: moduleName, importedFrom: entry.file });\n                        continue;\n                    }\n                    if (FORBIDDEN_MODULES.has(moduleName)) {\n                        violations.push({ module: moduleName, importedFrom: entry.file });\n                    }\n                }\n            }\n            const diagnostics = violations.map((violation) => ({\n                code: \"AUD_FORBIDDEN_MODULE\",\n                severity: \"error\",\n                summary: `Forbidden module \"${violation.module}\" imported from ${violation.importedFrom}.`,\n                source: { file: violation.importedFrom },\n            }));\n            emitContract({\n                name: \"auditor/module-report\",\n                version: 1,\n                producer: \"module-auditor\",\n                freshness: {\n                    phase: \"graph-analysis\",\n                    evidence: [\"source-files\", \"resolved-graph\"],\n                },\n                value: { violations },\n            });\n            return { diagnostics };\n        },\n    };\n}\n", "import { existsSync, readdirSync, readFileSync } from \"fs\";\nimport { dirname, join, relative, resolve } from \"path\";\nexport function findSourceFiles(dir) {\n    if (!existsSync(dir))\n        return [];\n    const files = [];\n    for (const entry of readdirSync(dir, { withFileTypes: true })) {\n        if (entry.name === \"node_modules\" || entry.name.startsWith(\".\"))\n            continue;\n        const fullPath = join(dir, entry.name);\n        if (entry.isDirectory()) {\n            files.push(...findSourceFiles(fullPath));\n            continue;\n        }\n        if (entry.isFile() && /\\.(?:[cm]?[jt]sx?)$/.test(entry.name)) {\n            files.push(fullPath);\n        }\n    }\n    return files;\n}\nexport function parseModuleSpecifiers(source) {\n    const imports = new Set();\n    const pattern = /(?:import|export)\\s+(?:[^\"'`]*?\\s+from\\s+)?[\"']([^\"'`]+)[\"']|import\\s*\\(\\s*[\"']([^\"'`]+)[\"']\\s*\\)/g;\n    let match = pattern.exec(source);\n    while (match) {\n        const specifier = match[1] ?? match[2];\n        if (specifier)\n            imports.add(specifier);\n        match = pattern.exec(source);\n    }\n    return [...imports];\n}\nexport function findStaticRelativeImports(filePath) {\n    const source = readFileSync(filePath, \"utf8\");\n    const imports = new Set();\n    for (const specifier of parseModuleSpecifiers(source)) {\n        if (!specifier.startsWith(\".\"))\n            continue;\n        const resolved = resolveRelativeModule(filePath, specifier);\n        if (resolved)\n            imports.add(resolved);\n    }\n    return [...imports];\n}\nexport function resolveRelativeModule(fromPath, specifier) {\n    const base = resolve(dirname(fromPath), specifier);\n    const candidates = [\n        base,\n        `${base}.ts`,\n        `${base}.tsx`,\n        `${base}.js`,\n        `${base}.mjs`,\n        `${base}.mts`,\n        join(base, \"index.ts\"),\n        join(base, \"index.tsx\"),\n        join(base, \"index.js\"),\n        join(base, \"index.mjs\"),\n    ];\n    for (const candidate of candidates) {\n        if (existsSync(candidate))\n            return candidate;\n    }\n    return null;\n}\nexport function toProjectPath(projectRootAbs, absPath) {\n    const relPath = relative(projectRootAbs, absPath).replace(/\\\\/g, \"/\");\n    return relPath.startsWith(\".\") ? relPath : `./${relPath}`;\n}\n", "import { basename, dirname, join, resolve } from \"path\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { findSourceFiles, findStaticRelativeImports, parseModuleSpecifiers, toProjectPath } from \"../internal/source-files.js\";\nexport function collectReachableSchemaModules(project) {\n    const visited = new Set();\n    const queue = [...project.configuredSchemaPathsAbs];\n    while (queue.length > 0) {\n        const current = queue.shift();\n        if (!current || visited.has(current) || !existsSync(current))\n            continue;\n        visited.add(current);\n        for (const next of findStaticRelativeImports(current)) {\n            if (!visited.has(next))\n                queue.push(next);\n        }\n    }\n    return [...visited].map((path) => toProjectPath(project.projectRootAbs, path));\n}\nexport function collectSchemaOwners(project, modulePaths) {\n    const owners = [];\n    for (const modulePath of modulePaths) {\n        const absPath = resolve(project.projectRootAbs, modulePath);\n        if (!existsSync(absPath))\n            continue;\n        const source = readFileSync(absPath, \"utf8\");\n        const publicOwnerPath = toProjectPath(project.projectRootAbs, absPath);\n        for (const table of parsePgTableExports(source)) {\n            owners.push({\n                tableName: table.tableName,\n                publicOwnerPath,\n                implementationPath: publicOwnerPath,\n                sourceKind: classifySchemaSourceKind(absPath),\n            });\n        }\n        if (basename(absPath) !== \"schema-auth.ts\" || !schemaAuthReexportsGeneratedSource(source))\n            continue;\n        const generatedTarget = resolveSchemaAuthGeneratedTarget(absPath, source);\n        if (!generatedTarget || !existsSync(generatedTarget))\n            continue;\n        for (const table of parsePgTableExports(readFileSync(generatedTarget, \"utf8\"))) {\n            owners.push({\n                tableName: table.tableName,\n                publicOwnerPath,\n                implementationPath: toProjectPath(project.projectRootAbs, generatedTarget),\n                sourceKind: \"generated\",\n            });\n        }\n    }\n    return dedupeOwners(owners);\n}\nexport function collectHiddenSchemaOwners(project, reachableModules) {\n    const hidden = new Set();\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const relPath = toProjectPath(project.projectRootAbs, file);\n        if (reachableModules.has(relPath))\n            continue;\n        if (parsePgTableExports(readFileSync(file, \"utf8\")).length === 0)\n            continue;\n        hidden.add(relPath);\n    }\n    return [...hidden].sort();\n}\nexport function collectDynamicSchemaEdges(project, modulePaths) {\n    const dynamic = new Set();\n    for (const modulePath of modulePaths) {\n        const absPath = resolve(project.projectRootAbs, modulePath);\n        if (!existsSync(absPath))\n            continue;\n        const source = readFileSync(absPath, \"utf8\");\n        if (/\\bimport\\s*\\(/.test(source) || /\\brequire\\s*\\(/.test(source)) {\n            dynamic.add(modulePath);\n        }\n    }\n    return [...dynamic].sort();\n}\nexport function detectAuthBoundary(project) {\n    const userAuthPath = join(project.functionsDirAbs, \"schema-auth.ts\");\n    if (existsSync(userAuthPath)) {\n        const source = readFileSync(userAuthPath, \"utf8\");\n        const generatedTarget = resolveSchemaAuthGeneratedTarget(userAuthPath, source);\n        if (schemaAuthReexportsGeneratedSource(source) && generatedTarget) {\n            return {\n                mode: \"re-export-shim\",\n                publicPath: toProjectPath(project.projectRootAbs, userAuthPath),\n                generatedPath: toProjectPath(project.projectRootAbs, generatedTarget),\n            };\n        }\n        return {\n            mode: \"forked\",\n            publicPath: toProjectPath(project.projectRootAbs, userAuthPath),\n        };\n    }\n    const legacyAuthPath = project.configuredSchemaPathsAbs.find((path) => path.replace(/\\\\/g, \"/\").endsWith(\"/auth-schema.ts\"));\n    if (legacyAuthPath) {\n        return {\n            mode: \"legacy-auth-schema\",\n            path: toProjectPath(project.projectRootAbs, legacyAuthPath),\n        };\n    }\n    return { mode: \"none\" };\n}\nexport function collectModuleImports(project) {\n    return findSourceFiles(project.functionsDirAbs)\n        .map((filePath) => ({\n        file: toProjectPath(project.projectRootAbs, filePath),\n        imports: parseModuleSpecifiers(readFileSync(filePath, \"utf8\")),\n    }))\n        .filter((entry) => entry.imports.length > 0)\n        .sort((a, b) => a.file.localeCompare(b.file));\n}\nexport function schemaAuthReexportsGeneratedSource(source) {\n    return /(?:^|[^\\S\\n])(?:export|import)\\b[^\\n;]*\\bfrom\\s+['\"][^'\"]*schema-auth\\.gen(?:\\.tsx?)?['\"]/m.test(source);\n}\nfunction resolveSchemaAuthGeneratedTarget(schemaAuthPathAbs, source) {\n    const match = source.match(/(?:export|import)\\s+[^;\\n]*\\bfrom\\s+[\"']([^\"']*schema-auth\\.gen(?:\\.[cm]?[jt]sx?)?)[\"']/m);\n    if (!match) {\n        return resolve(dirname(schemaAuthPathAbs), \"./generated/schema-auth.gen.ts\");\n    }\n    return resolve(dirname(schemaAuthPathAbs), match[1]);\n}\nfunction classifySchemaSourceKind(pathValue) {\n    const normalized = pathValue.replace(/\\\\/g, \"/\");\n    if (normalized.endsWith(\"/auth-schema.ts\"))\n        return \"legacy-generated\";\n    if (normalized.endsWith(\"/schema-auth.gen.ts\") || normalized.endsWith(\"/generated/auth-schema.ts\")) {\n        return \"generated\";\n    }\n    return \"user\";\n}\nfunction parsePgTableExports(source) {\n    const tables = [];\n    const pattern = /export\\s+const\\s+(\\w+)\\s*=\\s*pgTable\\s*\\(\\s*[\"']([^\"']+)[\"']/g;\n    let match = pattern.exec(source);\n    while (match) {\n        tables.push({\n            exportName: match[1],\n            tableName: match[2],\n        });\n        match = pattern.exec(source);\n    }\n    return tables;\n}\nfunction dedupeOwners(owners) {\n    const seen = new Set();\n    const result = [];\n    for (const owner of owners) {\n        const key = [owner.tableName, owner.publicOwnerPath, owner.implementationPath, owner.sourceKind].join(\"::\");\n        if (seen.has(key))\n            continue;\n        seen.add(key);\n        result.push(owner);\n    }\n    return result;\n}\n", "import { isAbsolute, resolve } from \"path\";\nimport { resolveAuthSchemaPaths, resolveServerCodegenDirAbs, } from \"../../introspection/schema-paths.js\";\nexport function resolveAppProject(input) {\n    const projectRootAbs = resolve(input.projectRoot);\n    const rootDir = input.rootDir ?? input.functionsDir ?? \"gencow\";\n    const functionsDirAbs = isAbsolute(rootDir) ? rootDir : resolve(projectRootAbs, rootDir);\n    const serverCodegenDirAbs = resolveServerCodegenDirAbs(projectRootAbs, functionsDirAbs, input.serverPublishDir);\n    const configuredSchemaPathsAbs = resolveAuthSchemaPaths(projectRootAbs, functionsDirAbs, input.schema, serverCodegenDirAbs);\n    const rootSchemaPathAbs = configuredSchemaPathsAbs.find((path) => path.replace(/\\\\/g, \"/\").endsWith(\"/schema.ts\")) ??\n        configuredSchemaPathsAbs[0] ??\n        resolve(functionsDirAbs, \"schema.ts\");\n    return {\n        projectRootAbs,\n        functionsDirAbs,\n        serverCodegenDirAbs,\n        configuredSchemaPathsAbs,\n        rootSchemaPathAbs,\n    };\n}\n", "export class AnalyzerRuntimeError extends Error {\n    execution;\n    pluginName;\n    cause;\n    constructor(message, input) {\n        super(message);\n        this.name = \"AnalyzerRuntimeError\";\n        this.execution = input?.execution ?? [];\n        this.pluginName = input?.pluginName;\n        this.cause = input?.cause;\n    }\n}\n", "function getActionableFixPlans(plans, policy) {\n    const fixPolicy = policy?.fixPolicy;\n    const allowKinds = new Set(fixPolicy?.allowKinds ?? []);\n    const filterByKind = allowKinds.size > 0;\n    const blockedByDefault = fixPolicy?.blockedByDefault ?? false;\n    const allowedPlans = [];\n    const blockedResults = [];\n    for (const plan of plans) {\n        const allowedByKind = filterByKind ? allowKinds.has(plan.proposal.kind) : !blockedByDefault;\n        if (allowedByKind) {\n            allowedPlans.push(plan);\n            continue;\n        }\n        blockedResults.push({\n            proposalId: plan.proposal.id,\n            status: \"blocked\",\n            touchedFiles: plan.proposal.targetFiles,\n            message: `Fix kind \"${plan.proposal.kind}\" is not allowed by current fix policy.`,\n        });\n    }\n    return { allowedPlans, blockedResults };\n}\nfunction createFixExecutionRecord(mode, durationMs, results, artifacts) {\n    return {\n        kind: \"fix\",\n        mode,\n        durationMs,\n        proposalIds: results.map((result) => result.proposalId),\n        resultStatuses: results.map((result) => ({\n            proposalId: result.proposalId,\n            status: result.status,\n        })),\n        artifactPaths: artifacts.map((artifact) => artifact.path),\n    };\n}\nexport async function runFixFlow(input) {\n    if (input.mode === \"none\") {\n        return { results: [], artifacts: [], execution: [] };\n    }\n    const startedAt = Date.now();\n    const { allowedPlans, blockedResults } = getActionableFixPlans(input.plans, input.policy);\n    if (input.mode === \"plan\") {\n        const results = [\n            ...allowedPlans.map((plan) => ({\n                proposalId: plan.proposal.id,\n                status: \"planned\",\n                touchedFiles: plan.proposal.targetFiles,\n            })),\n            ...blockedResults,\n        ];\n        return {\n            results,\n            artifacts: [],\n            execution: [createFixExecutionRecord(\"plan\", Date.now() - startedAt, results, [])],\n        };\n    }\n    if (input.blocked) {\n        const results = [\n            ...allowedPlans.map((plan) => ({\n                proposalId: plan.proposal.id,\n                status: \"blocked\",\n                touchedFiles: plan.proposal.targetFiles,\n                message: \"Run is blocked; fix execution was not attempted.\",\n            })),\n            ...blockedResults,\n        ];\n        return {\n            results,\n            artifacts: [],\n            execution: [createFixExecutionRecord(input.mode, Date.now() - startedAt, results, [])],\n        };\n    }\n    if (input.mode === \"diff\") {\n        if (!input.fixApplier?.diff) {\n            const results = [\n                ...allowedPlans.map((plan) => ({\n                    proposalId: plan.proposal.id,\n                    status: \"skipped\",\n                    touchedFiles: plan.proposal.targetFiles,\n                    message: \"Fix diff output is not available because no diff applier was configured.\",\n                })),\n                ...blockedResults,\n            ];\n            return {\n                results,\n                artifacts: [],\n                execution: [createFixExecutionRecord(\"diff\", Date.now() - startedAt, results, [])],\n            };\n        }\n        const artifacts = (await input.fixApplier.diff({\n            plans: allowedPlans,\n            projectRoot: input.projectRoot,\n        })).map((artifact) => ({\n            ...artifact,\n            provenance: artifact.provenance ?? {\n                kind: \"fix\",\n                producer: \"fix-applier\",\n            },\n        }));\n        const artifactPaths = artifacts.map((artifact) => artifact.path);\n        const results = [\n            ...allowedPlans.map((plan) => ({\n                proposalId: plan.proposal.id,\n                status: \"diffed\",\n                touchedFiles: plan.proposal.targetFiles,\n                artifactPaths,\n            })),\n            ...blockedResults,\n        ];\n        return {\n            results,\n            artifacts,\n            execution: [createFixExecutionRecord(\"diff\", Date.now() - startedAt, results, artifacts)],\n        };\n    }\n    if (!input.policy?.fixPolicy?.allowApply) {\n        const results = [\n            ...allowedPlans.map((plan) => ({\n                proposalId: plan.proposal.id,\n                status: \"blocked\",\n                touchedFiles: plan.proposal.targetFiles,\n                message: \"Fix application is not allowed by current fix policy.\",\n            })),\n            ...blockedResults,\n        ];\n        return {\n            results,\n            artifacts: [],\n            execution: [createFixExecutionRecord(\"apply\", Date.now() - startedAt, results, [])],\n        };\n    }\n    if (!input.fixApplier?.apply) {\n        const results = [\n            ...allowedPlans.map((plan) => ({\n                proposalId: plan.proposal.id,\n                status: \"skipped\",\n                touchedFiles: plan.proposal.targetFiles,\n                message: \"Fix application is not available because no apply applier was configured.\",\n            })),\n            ...blockedResults,\n        ];\n        return {\n            results,\n            artifacts: [],\n            execution: [createFixExecutionRecord(\"apply\", Date.now() - startedAt, results, [])],\n        };\n    }\n    const artifacts = input.fixApplier.diff\n        ? (await input.fixApplier.diff({\n            plans: allowedPlans,\n            projectRoot: input.projectRoot,\n        })).map((artifact) => ({\n            ...artifact,\n            provenance: artifact.provenance ?? {\n                kind: \"fix\",\n                producer: \"fix-applier\",\n            },\n        }))\n        : [];\n    const artifactPaths = artifacts.map((artifact) => artifact.path);\n    const appliedResults = await input.fixApplier.apply({\n        plans: allowedPlans,\n        projectRoot: input.projectRoot,\n    });\n    const results = [\n        ...appliedResults.map((result) => ({\n            ...result,\n            artifactPaths: result.artifactPaths ?? artifactPaths,\n        })),\n        ...blockedResults,\n    ];\n    return {\n        results,\n        artifacts,\n        execution: [\n            createFixExecutionRecord(\"apply\", Date.now() - startedAt, results, artifacts),\n        ],\n    };\n}\n", "export function collectMaterializerContractWarnings(materializers, contracts) {\n    const contractNames = new Set(contracts.map((contract) => contract.name));\n    return materializers\n        .filter((materializer) => !contractNames.has(materializer.consumesContract))\n        .map((materializer) => ({\n        code: \"DOCTOR_MATERIALIZER_INPUT_MISSING\",\n        severity: \"warning\",\n        summary: `Materializer \"${materializer.name}\" was skipped because required contract \"${materializer.consumesContract}\" was not available.`,\n        tags: [\"analyzer:materializer-skipped\"],\n    }));\n}\nexport async function materializeAnalyzerContracts(materializers, contracts, projectRoot) {\n    const artifacts = [];\n    const execution = [];\n    for (const materializer of materializers) {\n        const contract = contracts.find((candidate) => candidate.name === materializer.consumesContract);\n        if (!contract) {\n            execution.push({\n                kind: \"materializer\",\n                name: materializer.name,\n                consumesContract: materializer.consumesContract,\n                status: \"skipped\",\n                durationMs: 0,\n                artifactPaths: [],\n                message: `Required contract \"${materializer.consumesContract}\" was not available.`,\n            });\n            continue;\n        }\n        const startedAt = Date.now();\n        const produced = await materializer.materialize({\n            contract: contract,\n            projectRoot,\n        });\n        const enrichedArtifacts = produced.map((artifact) => ({\n            ...artifact,\n            provenance: artifact.provenance ?? {\n                kind: \"materializer\",\n                producer: materializer.name,\n                sourceContract: {\n                    name: contract.name,\n                    version: contract.version,\n                    producer: contract.producer,\n                },\n            },\n        }));\n        artifacts.push(...enrichedArtifacts);\n        execution.push({\n            kind: \"materializer\",\n            name: materializer.name,\n            consumesContract: materializer.consumesContract,\n            status: \"produced\",\n            durationMs: Date.now() - startedAt,\n            artifactPaths: enrichedArtifacts.map((artifact) => artifact.path),\n        });\n    }\n    return { artifacts, execution };\n}\n", "const DIAGNOSTIC_SEVERITY_ORDER = {\n    info: 0,\n    warning: 1,\n    error: 2,\n};\nconst DEFAULT_PHASE_EVIDENCE_POLICY = {\n    \"source-analysis\": [\"source-files\"],\n    \"graph-analysis\": [\"source-files\", \"resolved-graph\"],\n    \"artifact-analysis\": [\"artifacts\"],\n    \"loaded-analysis\": [\"loaded-runtime\"],\n    \"live-analysis\": [\"live-state\"],\n};\nfunction policyInputsMatch(expected, actual) {\n    if (!expected) {\n        return true;\n    }\n    for (const [key, value] of Object.entries(expected)) {\n        if (actual?.[key] !== value) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction overrideMatches(diagnostic, override, options) {\n    if (override.code && override.code !== diagnostic.code) {\n        return false;\n    }\n    if (override.pluginName && override.pluginName !== diagnostic.pluginName) {\n        return false;\n    }\n    const when = override.when;\n    if (!when) {\n        return true;\n    }\n    if (when.profile && when.profile !== options.context.profile) {\n        return false;\n    }\n    if (when.phase && when.phase !== options.context.phase) {\n        return false;\n    }\n    if (when.command && when.command !== options.context.command) {\n        return false;\n    }\n    if (when.trustMode && when.trustMode !== options.context.trustMode) {\n        return false;\n    }\n    return policyInputsMatch(when.policyInputs, options.context.policyInputs);\n}\nexport function shouldBlockAnalyzerRun(diagnostics, policy, phase) {\n    const threshold = policy?.minimumSeverityToBlockByPhase?.[phase];\n    const minimumRank = DIAGNOSTIC_SEVERITY_ORDER[threshold ?? \"error\"];\n    return diagnostics.some((diagnostic) => DIAGNOSTIC_SEVERITY_ORDER[diagnostic.severity] >= minimumRank);\n}\nexport function evaluateDiagnostics(diagnostics, options) {\n    const overrides = options.policy?.diagnosticOverrides ?? [];\n    const threshold = options.policy?.minimumSeverityToBlockByPhase?.[options.context.phase] ?? \"error\";\n    const thresholdRank = DIAGNOSTIC_SEVERITY_ORDER[threshold];\n    return diagnostics.map((diagnostic) => {\n        const originalSeverity = diagnostic.severity;\n        let nextDiagnostic = { ...diagnostic };\n        let forcedBlocked;\n        for (const override of overrides) {\n            if (!overrideMatches(nextDiagnostic, override, options)) {\n                continue;\n            }\n            if (override.severity) {\n                nextDiagnostic = {\n                    ...nextDiagnostic,\n                    severity: override.severity,\n                };\n            }\n            if (override.blocked !== undefined) {\n                forcedBlocked = override.blocked;\n            }\n        }\n        return {\n            diagnostic: nextDiagnostic,\n            originalSeverity,\n            blocked: forcedBlocked ?? DIAGNOSTIC_SEVERITY_ORDER[nextDiagnostic.severity] >= thresholdRank,\n        };\n    });\n}\nexport function ensurePhaseEvidenceCompatible(phase, availableEvidence, phaseEvidencePolicy) {\n    const expectedEvidence = phaseEvidencePolicy?.[phase] ?? DEFAULT_PHASE_EVIDENCE_POLICY[phase] ?? [];\n    const missingEvidence = expectedEvidence.filter((evidence) => !availableEvidence.includes(evidence));\n    if (missingEvidence.length > 0) {\n        throw new Error(`Analyzer phase \"${phase}\" requires evidence kinds [${expectedEvidence.join(\", \")}] but run context is missing [${missingEvidence.join(\", \")}] from provided [${availableEvidence.join(\", \")}].`);\n    }\n}\n", "function dedupeArray(values) {\n    return [...new Set(values)];\n}\nfunction formatContractVersionConstraint(constraint) {\n    if (constraint === undefined) {\n        return \"any\";\n    }\n    if (typeof constraint === \"number\") {\n        return `=${constraint}`;\n    }\n    const parts = [\n        constraint.min !== undefined ? `>=${constraint.min}` : undefined,\n        constraint.max !== undefined ? `<=${constraint.max}` : undefined,\n    ].filter((part) => Boolean(part));\n    return parts.join(\" and \");\n}\nfunction contractVersionMatches(version, constraint) {\n    if (constraint === undefined) {\n        return true;\n    }\n    if (typeof constraint === \"number\") {\n        return version === constraint;\n    }\n    if (constraint.min !== undefined && version < constraint.min) {\n        return false;\n    }\n    if (constraint.max !== undefined && version > constraint.max) {\n        return false;\n    }\n    return true;\n}\nexport function resolvePhaseRequirements(plugin, phase) {\n    const phaseRequirements = plugin.phaseRequirements?.[phase];\n    return {\n        requiredEvidence: dedupeArray([\n            ...(plugin.requiredEvidence ?? []),\n            ...(phaseRequirements?.requiredEvidence ?? []),\n        ]),\n        requiredUtilities: dedupeArray([\n            ...(plugin.requiredUtilities ?? []),\n            ...(phaseRequirements?.requiredUtilities ?? []),\n        ]),\n        providesContracts: dedupeArray([\n            ...(plugin.providesContracts ?? []),\n            ...(phaseRequirements?.providesContracts ?? []),\n        ]),\n        consumesContracts: dedupeArray([\n            ...(plugin.consumesContracts ?? []),\n            ...(phaseRequirements?.consumesContracts ?? []),\n        ]),\n        contractRequirements: [\n            ...(plugin.contractRequirements ?? []),\n            ...(phaseRequirements?.contractRequirements ?? []),\n        ],\n    };\n}\nexport function validatePluginOptions(invocation, analyzer) {\n    if (!invocation.plugin.validateOptions) {\n        return invocation;\n    }\n    return {\n        ...invocation,\n        options: invocation.plugin.validateOptions(invocation.options, analyzer),\n    };\n}\nexport function createAnalyzerUtilityRegistry(utilities) {\n    return {\n        has(name) {\n            return Object.prototype.hasOwnProperty.call(utilities, name);\n        },\n        get(name) {\n            return utilities[name];\n        },\n        require(name) {\n            const utility = utilities[name];\n            if (utility === undefined) {\n                throw new Error(`Analyzer utility \"${name}\" is not registered.`);\n            }\n            return utility;\n        },\n        list() {\n            return Object.keys(utilities);\n        },\n    };\n}\nexport function activateAnalyzerPlugin(plugin, input) {\n    return {\n        plugin: plugin,\n        provider: input?.provider ?? plugin.name,\n        sourceKind: input?.sourceKind ?? \"core\",\n        sourcePath: input?.sourcePath,\n        mode: input?.mode ?? \"configured\",\n        options: {\n            ...(plugin.defaultOptions ?? {}),\n            ...(input?.options ?? {}),\n        },\n    };\n}\nexport function createAnalyzerContractStore(initialContracts = []) {\n    const contracts = new Map();\n    for (const contract of initialContracts) {\n        if (contracts.has(contract.name)) {\n            throw new Error(`Analyzer contract \"${contract.name}\" was provided more than once in initial contracts.`);\n        }\n        contracts.set(contract.name, contract);\n    }\n    return {\n        has(name) {\n            return contracts.has(name);\n        },\n        get(name) {\n            const contract = contracts.get(name);\n            return contract;\n        },\n        require(name) {\n            const contract = contracts.get(name);\n            if (!contract) {\n                throw new Error(`Analyzer contract \"${name}\" is required but was not produced.`);\n            }\n            return contract;\n        },\n        list() {\n            return Array.from(contracts.values());\n        },\n        set(contract) {\n            if (contracts.has(contract.name)) {\n                throw new Error(`Analyzer contract \"${contract.name}\" was produced more than once.`);\n            }\n            contracts.set(contract.name, contract);\n        },\n    };\n}\nexport function mergeAnalyzerPlugins(defaultPlugins, configuredPlugins, overrides) {\n    const configuredNames = new Set(configuredPlugins.map(({ plugin }) => plugin.name));\n    const merged = [\n        ...defaultPlugins.filter(({ plugin }) => !configuredNames.has(plugin.name)),\n        ...configuredPlugins,\n    ];\n    return merged.map((invocation) => ({\n        ...invocation,\n        options: {\n            ...(invocation.plugin.defaultOptions ?? {}),\n            ...(invocation.options ?? {}),\n            ...(overrides[invocation.plugin.name] ?? {}),\n        },\n    }));\n}\nexport function topologicallyOrderAnalyzerPlugins(input) {\n    const providedAtStart = new Set(input.initialContracts ?? []);\n    const unscheduled = [...input.plugins];\n    const ordered = [];\n    const provided = new Set(providedAtStart);\n    while (unscheduled.length > 0) {\n        const readyIndex = unscheduled.findIndex(({ plugin }) => {\n            const consumed = input.phase !== undefined\n                ? resolvePhaseRequirements(plugin, input.phase).consumesContracts\n                : (plugin.consumesContracts ?? []);\n            return consumed.every((contractName) => provided.has(contractName));\n        });\n        if (readyIndex === -1) {\n            const unresolved = unscheduled.map(({ plugin }) => plugin.name).join(\", \");\n            throw new Error(`Analyzer plugins cannot be ordered because dependencies are unresolved: ${unresolved}`);\n        }\n        const [invocation] = unscheduled.splice(readyIndex, 1);\n        ordered.push(invocation);\n        const providedContracts = input.phase !== undefined\n            ? resolvePhaseRequirements(invocation.plugin, input.phase).providesContracts\n            : (invocation.plugin.providesContracts ?? []);\n        for (const providedContract of providedContracts) {\n            provided.add(providedContract);\n        }\n    }\n    return ordered;\n}\nexport function normalizePluginDiagnostics(diagnostics, invocation) {\n    return diagnostics.map((diagnostic) => ({\n        ...diagnostic,\n        pluginName: diagnostic.pluginName ?? invocation.plugin.name,\n        provider: diagnostic.provider ?? invocation.provider,\n    }));\n}\nexport function normalizePluginFixPlans(plans, invocation) {\n    return plans.map((plan) => ({\n        ...plan,\n        proposal: {\n            ...plan.proposal,\n            pluginName: plan.proposal.pluginName ?? invocation.plugin.name,\n            provider: plan.proposal.provider ?? invocation.provider,\n        },\n    }));\n}\nexport function ensurePluginEvidenceAvailable(invocation, phase, availableEvidence) {\n    for (const evidence of resolvePhaseRequirements(invocation.plugin, phase).requiredEvidence) {\n        if (!availableEvidence.includes(evidence)) {\n            throw new Error(`Analyzer plugin \"${invocation.plugin.name}\" requires evidence \"${evidence}\" but it is not available in this run context.`);\n        }\n    }\n}\nexport function validatePluginContractDeclarations(invocation, phase, emittedContracts) {\n    const declaredContracts = new Set(resolvePhaseRequirements(invocation.plugin, phase).providesContracts);\n    const emittedContractsSet = new Set(emittedContracts);\n    for (const contractName of emittedContractsSet) {\n        if (!declaredContracts.has(contractName)) {\n            throw new Error(`Analyzer plugin \"${invocation.plugin.name}\" emitted undeclared contract \"${contractName}\".`);\n        }\n    }\n    const missingContracts = [...declaredContracts].filter((contractName) => !emittedContractsSet.has(contractName));\n    if (missingContracts.length > 0) {\n        throw new Error(`Analyzer plugin \"${invocation.plugin.name}\" declared contracts that were not emitted: ${missingContracts.join(\", \")}.`);\n    }\n}\nexport function ensurePluginContractRequirements(invocation, phase, contracts) {\n    const requirements = resolvePhaseRequirements(invocation.plugin, phase).contractRequirements;\n    for (const requirement of requirements) {\n        const contract = contracts.require(requirement.name);\n        if (!contractVersionMatches(contract.version, requirement.version)) {\n            throw new Error(`Analyzer plugin \"${invocation.plugin.name}\" requires contract \"${requirement.name}\" version ${formatContractVersionConstraint(requirement.version)} but received version ${contract.version}.`);\n        }\n    }\n}\n", "import { AnalyzerRuntimeError } from \"./analyzer-types.js\";\nimport { runFixFlow } from \"./analyzer-fix-flow.js\";\nimport { collectMaterializerContractWarnings, materializeAnalyzerContracts } from \"./analyzer-materialization.js\";\nimport { evaluateDiagnostics, ensurePhaseEvidenceCompatible, shouldBlockAnalyzerRun, } from \"./analyzer-policy.js\";\nimport { activateAnalyzerPlugin, createAnalyzerContractStore, createAnalyzerUtilityRegistry, ensurePluginContractRequirements, ensurePluginEvidenceAvailable, mergeAnalyzerPlugins, normalizePluginDiagnostics, normalizePluginFixPlans, resolvePhaseRequirements, topologicallyOrderAnalyzerPlugins, validatePluginContractDeclarations, validatePluginOptions, } from \"./analyzer-plugin-utils.js\";\nexport { activateAnalyzerPlugin, createAnalyzerContractStore, createAnalyzerUtilityRegistry, mergeAnalyzerPlugins, shouldBlockAnalyzerRun, topologicallyOrderAnalyzerPlugins, };\nfunction resolveUtilitiesRegistry(utilities) {\n    return typeof utilities.require === \"function\"\n        ? utilities\n        : createAnalyzerUtilityRegistry(utilities);\n}\nfunction ensureRequiredPluginsPresent(options, pluginsForPhase) {\n    const requiredByCommand = new Set(options.policy?.requiredPluginsByCommand?.[options.context.command] ?? []);\n    const requiredByPhase = new Set(options.policy?.requiredPluginsByPhase?.[options.context.phase] ?? []);\n    for (const pluginName of requiredByCommand) {\n        if (!pluginsForPhase.some(({ plugin }) => plugin.name === pluginName)) {\n            throw new Error(`Analyzer command \"${options.context.command}\" requires plugin \"${pluginName}\" for phase \"${options.context.phase}\".`);\n        }\n    }\n    for (const pluginName of requiredByPhase) {\n        if (!pluginsForPhase.some(({ plugin }) => plugin.name === pluginName)) {\n            throw new Error(`Analyzer phase \"${options.context.phase}\" requires plugin \"${pluginName}\".`);\n        }\n    }\n}\nasync function executeOrderedPlugins(input) {\n    const rawDiagnostics = [];\n    const fixPlans = [];\n    const execution = [];\n    for (const invocation of input.orderedPlugins) {\n        const { plugin } = invocation;\n        const phaseRequirements = resolvePhaseRequirements(plugin, input.options.context.phase);\n        ensurePluginEvidenceAvailable(invocation, input.options.context.phase, input.options.context.availableEvidence);\n        for (const utilityName of phaseRequirements.requiredUtilities) {\n            input.utilities.require(utilityName);\n        }\n        for (const contractName of phaseRequirements.consumesContracts) {\n            input.contracts.require(contractName);\n        }\n        ensurePluginContractRequirements(invocation, input.options.context.phase, input.contracts);\n        const startedAt = Date.now();\n        const emittedContracts = [];\n        try {\n            const result = await plugin.run({\n                analyzer: input.options.context,\n                plugin: invocation,\n                options: invocation.options,\n                utilities: input.utilities,\n                contracts: input.contracts,\n                emitContract(contract) {\n                    input.contracts.set(contract);\n                    emittedContracts.push(contract.name);\n                },\n            });\n            validatePluginContractDeclarations(invocation, input.options.context.phase, emittedContracts);\n            rawDiagnostics.push(...normalizePluginDiagnostics(result.diagnostics, invocation));\n            const normalizedFixPlans = normalizePluginFixPlans(result.fixPlans ?? [], invocation);\n            fixPlans.push(...normalizedFixPlans);\n            execution.push({\n                kind: \"plugin\",\n                name: plugin.name,\n                provider: invocation.provider,\n                sourceKind: invocation.sourceKind,\n                mode: invocation.mode,\n                executionKind: plugin.executionKind ?? \"analysis\",\n                status: \"completed\",\n                durationMs: Date.now() - startedAt,\n                emittedContracts,\n                diagnosticCodes: result.diagnostics.map((diagnostic) => diagnostic.code),\n                plannedFixes: normalizedFixPlans.map((plan) => plan.proposal.id),\n            });\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            execution.push({\n                kind: \"plugin\",\n                name: plugin.name,\n                provider: invocation.provider,\n                sourceKind: invocation.sourceKind,\n                mode: invocation.mode,\n                executionKind: plugin.executionKind ?? \"analysis\",\n                status: \"failed\",\n                durationMs: Date.now() - startedAt,\n                emittedContracts,\n                diagnosticCodes: [],\n                plannedFixes: [],\n                message,\n            });\n            throw new AnalyzerRuntimeError(`Analyzer plugin \"${plugin.name}\" failed: ${message}`, {\n                execution,\n                pluginName: plugin.name,\n                cause: error,\n            });\n        }\n    }\n    return { rawDiagnostics, fixPlans, execution };\n}\nasync function executePostAnalysisFlows(input) {\n    const fixMode = input.options.context.fixMode ?? \"none\";\n    const fixFlow = await runFixFlow({\n        blocked: input.blocked,\n        mode: fixMode,\n        plans: input.fixPlans,\n        policy: input.options.policy,\n        projectRoot: input.options.context.projectRoot,\n        fixApplier: input.options.fixApplier,\n    });\n    const materializationResult = input.blocked\n        ? { artifacts: [], execution: [] }\n        : await materializeAnalyzerContracts(input.options.materializers ?? [], input.contracts.list(), input.options.context.projectRoot);\n    const artifacts = fixMode === \"diff\" || fixMode === \"apply\"\n        ? [...fixFlow.artifacts, ...materializationResult.artifacts]\n        : [...materializationResult.artifacts, ...fixFlow.artifacts];\n    return {\n        fixResults: fixFlow.results,\n        artifacts,\n        execution: [...materializationResult.execution, ...fixFlow.execution],\n    };\n}\nfunction sanitizeRunResult(input) {\n    const sanitizer = input.options.outputSanitizer;\n    const diagnostics = input.evaluatedDiagnostics.map((entry) => sanitizer?.sanitizeDiagnostic ? sanitizer.sanitizeDiagnostic(entry.diagnostic) : entry.diagnostic);\n    return {\n        diagnostics,\n        evaluatedDiagnostics: input.evaluatedDiagnostics.map((entry, index) => ({\n            ...entry,\n            diagnostic: diagnostics[index],\n        })),\n        contracts: input.contracts.map((contract) => sanitizer?.sanitizeContract ? sanitizer.sanitizeContract(contract) : contract),\n        materializedArtifacts: input.artifacts.map((artifact) => sanitizer?.sanitizeArtifact ? sanitizer.sanitizeArtifact(artifact) : artifact),\n        execution: input.execution.map((record) => sanitizer?.sanitizeExecutionRecord ? sanitizer.sanitizeExecutionRecord(record) : record),\n    };\n}\nexport async function runAnalyzerPlugins(options) {\n    const utilities = resolveUtilitiesRegistry(options.utilities);\n    ensurePhaseEvidenceCompatible(options.context.phase, options.context.availableEvidence, options.phaseEvidencePolicy);\n    const contracts = createAnalyzerContractStore(options.initialContracts ?? []);\n    const mergedPlugins = mergeAnalyzerPlugins(options.defaultPlugins ?? [], options.plugins, options.pluginOptionOverrides ?? {}).map((invocation) => validatePluginOptions(invocation, options.context));\n    const pluginsForPhase = mergedPlugins.filter(({ plugin }) => plugin.phases.includes(options.context.phase));\n    ensureRequiredPluginsPresent(options, pluginsForPhase);\n    const orderedPlugins = topologicallyOrderAnalyzerPlugins({\n        plugins: pluginsForPhase,\n        initialContracts: contracts.list().map((contract) => contract.name),\n        phase: options.context.phase,\n    });\n    const pluginRun = await executeOrderedPlugins({\n        options,\n        utilities,\n        contracts,\n        orderedPlugins,\n    });\n    pluginRun.rawDiagnostics.push(...collectMaterializerContractWarnings(options.materializers ?? [], contracts.list()));\n    const evaluatedDiagnostics = evaluateDiagnostics(pluginRun.rawDiagnostics, options);\n    const blocked = evaluatedDiagnostics.some((diagnostic) => diagnostic.blocked) ||\n        shouldBlockAnalyzerRun(evaluatedDiagnostics.map((diagnostic) => diagnostic.diagnostic), options.policy, options.context.phase);\n    const postAnalysis = await executePostAnalysisFlows({\n        options: options,\n        contracts,\n        fixPlans: pluginRun.fixPlans,\n        blocked,\n    });\n    const sanitized = sanitizeRunResult({\n        options: options,\n        evaluatedDiagnostics,\n        contracts: contracts.list(),\n        artifacts: postAnalysis.artifacts,\n        execution: [...pluginRun.execution, ...postAnalysis.execution],\n    });\n    return {\n        ...sanitized,\n        blocked,\n        fixPlans: pluginRun.fixPlans,\n        fixResults: postAnalysis.fixResults,\n        pluginOrder: orderedPlugins.map(({ plugin }) => plugin.name),\n    };\n}\n", "import { basename, relative, resolve } from \"path\";\nimport { readFileSync } from \"fs\";\nimport { findSourceFiles, toProjectPath } from \"../internal/source-files.js\";\nconst ALLOW_COMMENT = \"gencow-allow-unsafe-db\";\nconst SYSTEM_TABLE_PATTERN = /\\b_(?:system|gencow)_[a-zA-Z0-9_]*\\b/;\nconst UNSAFE_PATTERNS = [\n    { type: \"unsafe-db\", pattern: /\\b(?:ctx\\.)?unsafeDb\\b/ },\n    { type: \"raw-sql\", pattern: /\\brawSql\\b|\\bSQL\\.unsafe\\b|\\bclient\\.unsafe\\b|(?:^|[^\\w])\\.unsafe\\s*\\(/ },\n    { type: \"system-table\", pattern: SYSTEM_TABLE_PATTERN },\n];\nexport function collectDbOperations(project) {\n    const operations = collectUnsafeDbIssues(project).map((issue) => ({\n        file: issue.file,\n        line: issue.line,\n        operation: issue.operation ?? \"mutation\",\n        visibility: issue.operation ? \"public\" : \"protected\",\n        allowCommentComplete: issue.allowlisted,\n        hazards: [\n            {\n                kind: issue.type,\n                referencedTables: extractReferencedTables(issue.snippet),\n            },\n        ],\n    }));\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const relPath = relative(project.functionsDirAbs, file);\n        if (!isSeedFile(relPath))\n            continue;\n        const content = readFileSync(file, \"utf-8\");\n        if (!UNSAFE_PATTERNS.some((unsafePattern) => unsafePattern.pattern.test(maskComments(content))))\n            continue;\n        operations.push({\n            file: toProjectPath(project.projectRootAbs, resolve(project.functionsDirAbs, relPath)),\n            line: 1,\n            operation: \"mutation\",\n            visibility: \"seed\",\n            allowCommentComplete: false,\n            hazards: [{ kind: \"unsafe-db\", referencedTables: [] }],\n        });\n    }\n    return operations;\n}\nfunction collectUnsafeDbIssues(project) {\n    const issues = [];\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const content = readFileSync(file, \"utf-8\");\n        const relPath = relative(project.functionsDirAbs, file);\n        if (isSeedFile(relPath))\n            continue;\n        const operations = findPublicOperationRanges(content);\n        const executableLines = maskComments(content).split(\"\\n\");\n        const originalLines = content.split(\"\\n\");\n        for (let index = 0; index < executableLines.length; index += 1) {\n            const executableLine = executableLines[index];\n            if (!executableLine?.trim())\n                continue;\n            for (const unsafePattern of UNSAFE_PATTERNS) {\n                if (!unsafePattern.pattern.test(executableLine))\n                    continue;\n                const line = index + 1;\n                const operation = operations.find((range) => range.startLine <= line && line <= range.endLine);\n                issues.push({\n                    file: toProjectPath(project.projectRootAbs, file),\n                    line,\n                    snippet: originalLines[index].trim().slice(0, 160),\n                    type: unsafePattern.type,\n                    operation: operation?.kind,\n                    allowlisted: hasCompleteAllowComment(originalLines, index),\n                });\n            }\n        }\n    }\n    return issues;\n}\nfunction findPublicOperationRanges(content) {\n    const masked = maskCommentsAndStrings(content);\n    const ranges = [];\n    const operationPattern = /\\b(query|mutation|httpAction)\\s*\\(/g;\n    let match;\n    while ((match = operationPattern.exec(masked)) !== null) {\n        const openParen = masked.indexOf(\"(\", match.index);\n        const closeParen = findMatchingParen(masked, openParen);\n        if (closeParen === -1)\n            continue;\n        const block = masked.slice(match.index, closeParen + 1);\n        if (!/\\bpublic\\s*:\\s*true\\b/.test(block))\n            continue;\n        ranges.push({\n            kind: match[1],\n            startLine: lineNumberAt(content, match.index),\n            endLine: lineNumberAt(content, closeParen),\n        });\n    }\n    const httpRoutePattern = /\\bhttpRoute\\s*\\.\\s*(get|post|put|delete|patch)\\b/g;\n    let cursor = 0;\n    while ((match = httpRoutePattern.exec(masked)) !== null) {\n        if (match.index < cursor)\n            continue;\n        const handlerIdx = masked.indexOf(\".handler\", match.index);\n        if (handlerIdx === -1)\n            continue;\n        const openParen = masked.indexOf(\"(\", handlerIdx);\n        if (openParen === -1)\n            continue;\n        const closeParen = findMatchingParen(masked, openParen);\n        if (closeParen === -1)\n            continue;\n        const block = masked.slice(match.index, closeParen + 1);\n        cursor = closeParen + 1;\n        if (!/\\.allowAnonymous\\s*\\(\\s*\\)/.test(block))\n            continue;\n        ranges.push({\n            kind: \"httpRoute\",\n            startLine: lineNumberAt(content, match.index),\n            endLine: lineNumberAt(content, closeParen),\n        });\n    }\n    return ranges;\n}\nfunction findMatchingParen(content, openParen) {\n    let depth = 0;\n    for (let index = openParen; index < content.length; index += 1) {\n        const ch = content[index];\n        if (ch === \"(\")\n            depth += 1;\n        if (ch === \")\") {\n            depth -= 1;\n            if (depth === 0)\n                return index;\n        }\n    }\n    return -1;\n}\nfunction lineNumberAt(content, index) {\n    let line = 1;\n    for (let cursor = 0; cursor < index; cursor += 1) {\n        if (content[cursor] === \"\\n\")\n            line += 1;\n    }\n    return line;\n}\nfunction hasCompleteAllowComment(lines, lineIndex) {\n    const start = Math.max(0, lineIndex - 4);\n    const nearby = lines.slice(start, lineIndex + 1).join(\"\\n\");\n    return (nearby.includes(ALLOW_COMMENT) &&\n        /\\breason\\s*:/i.test(nearby) &&\n        /\\bscope\\s*:/i.test(nearby) &&\n        /\\bowner\\s*:/i.test(nearby) &&\n        /\\btest\\s*:/i.test(nearby));\n}\nfunction isSeedFile(file) {\n    return basename(file) === \"seed.ts\" || basename(file) === \"seed.js\";\n}\nfunction maskComments(content) {\n    let output = \"\";\n    let inBlock = false;\n    for (let i = 0; i < content.length; i += 1) {\n        const ch = content[i];\n        const next = content[i + 1];\n        if (inBlock) {\n            if (ch === \"*\" && next === \"/\") {\n                output += \"  \";\n                i += 1;\n                inBlock = false;\n            }\n            else {\n                output += ch === \"\\n\" ? \"\\n\" : \" \";\n            }\n            continue;\n        }\n        if (ch === \"/\" && next === \"*\") {\n            output += \"  \";\n            i += 1;\n            inBlock = true;\n            continue;\n        }\n        if (ch === \"/\" && next === \"/\") {\n            while (i < content.length && content[i] !== \"\\n\") {\n                output += \" \";\n                i += 1;\n            }\n            if (i < content.length)\n                output += \"\\n\";\n            continue;\n        }\n        output += ch;\n    }\n    return output;\n}\nfunction maskCommentsAndStrings(content) {\n    const withoutComments = maskComments(content);\n    let output = \"\";\n    let quote = null;\n    let escaped = false;\n    for (const ch of withoutComments) {\n        if (quote) {\n            output += ch === \"\\n\" ? \"\\n\" : \" \";\n            if (!escaped && ch === quote)\n                quote = null;\n            escaped = !escaped && ch === \"\\\\\";\n            if (ch !== \"\\\\\")\n                escaped = false;\n            continue;\n        }\n        if (ch === \"'\" || ch === '\"' || ch === \"`\") {\n            quote = ch;\n            output += \" \";\n            continue;\n        }\n        output += ch;\n    }\n    return output;\n}\nfunction extractReferencedTables(snippet) {\n    const tables = new Set();\n    for (const match of snippet.matchAll(/\\b_(?:system|gencow)_[a-zA-Z0-9_]*\\b/g)) {\n        tables.add(match[0]);\n    }\n    for (const match of snippet.matchAll(/\\.from\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\)/g)) {\n        tables.add(match[1]);\n    }\n    for (const match of snippet.matchAll(/\\bfrom\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b/gi)) {\n        tables.add(match[1]);\n    }\n    return [...tables];\n}\n", "export function createDbAccessPlugin() {\n    return {\n        name: \"db-access-doctor\",\n        version: 1,\n        description: \"Scans handler operations for unsafe database escape hatches.\",\n        statusText: \"Auditing database access\",\n        defaultOptions: {\n            allowReviewedPublicRawSql: true,\n        },\n        executionKind: \"analysis\",\n        phases: [\"source-analysis\", \"graph-analysis\"],\n        requiredEvidence: [\"source-files\"],\n        requiredUtilities: [\"db-operation-inspector\"],\n        consumesContracts: [\"schema/canonical\"],\n        providesContracts: [\"db-access/findings\"],\n        run({ utilities, contracts, emitContract, options }) {\n            const inspector = utilities.require(\"db-operation-inspector\");\n            const schemaContract = contracts.require(\"schema/canonical\").value;\n            const applicationTables = new Set(schemaContract.canonicalOwners.map((owner) => owner.tableName));\n            const findings = [];\n            const diagnostics = [];\n            for (const operation of inspector.listOperations()) {\n                for (const hazard of operation.hazards) {\n                    const frameworkTables = hazard.referencedTables.filter((tableName) => tableName.startsWith(\"_system_\") || tableName.startsWith(\"_gencow_\"));\n                    const applicationTablesUsed = hazard.referencedTables.filter((tableName) => applicationTables.has(tableName));\n                    const isSystemTable = hazard.kind === \"system-table\" || frameworkTables.length > 0;\n                    const isPublic = operation.visibility === \"public\";\n                    const isProtected = operation.visibility === \"protected\";\n                    const blocked = isSystemTable\n                        ? isPublic\n                        : isPublic\n                            ? hazard.kind === \"raw-sql\"\n                                ? !(operation.allowCommentComplete && options.allowReviewedPublicRawSql)\n                                : !operation.allowCommentComplete\n                            : false;\n                    const severity = blocked ? \"error\" : isProtected || operation.visibility === \"seed\" ? \"warning\" : \"info\";\n                    const code = isSystemTable\n                        ? \"DBD_PUBLIC_SYSTEM_TABLE\"\n                        : hazard.kind === \"unsafe-db\"\n                            ? isPublic\n                                ? \"DBD_PUBLIC_UNSAFE_DB\"\n                                : operation.visibility === \"seed\"\n                                    ? \"DBD_SEED_ESCAPE_HATCH\"\n                                    : \"DBD_PROTECTED_UNSAFE_DB\"\n                            : isPublic\n                                ? \"DBD_PUBLIC_RAW_SQL\"\n                                : operation.visibility === \"seed\"\n                                    ? \"DBD_SEED_ESCAPE_HATCH\"\n                                    : \"DBD_PROTECTED_RAW_SQL\";\n                    findings.push({\n                        file: operation.file,\n                        line: operation.line,\n                        kind: isSystemTable ? \"system-table\" : hazard.kind,\n                        visibility: operation.visibility,\n                        allowlisted: operation.allowCommentComplete,\n                        blocked,\n                        applicationTables: applicationTablesUsed,\n                        frameworkTables,\n                    });\n                    if (isPublic && !operation.allowCommentComplete && !isSystemTable) {\n                        diagnostics.push({\n                            code: \"DBD_INCOMPLETE_ALLOW_COMMENT\",\n                            severity: \"warning\",\n                            summary: `Public ${operation.operation} uses ${hazard.kind} without complete review metadata.`,\n                            source: { file: operation.file, line: operation.line },\n                        });\n                    }\n                    diagnostics.push({\n                        code,\n                        severity,\n                        summary: `${operation.visibility} ${operation.operation} uses ${isSystemTable ? \"framework tables\" : hazard.kind}.`,\n                        source: { file: operation.file, line: operation.line },\n                    });\n                }\n            }\n            emitContract({\n                name: \"db-access/findings\",\n                version: 1,\n                producer: \"db-access-doctor\",\n                value: { findings },\n            });\n            return { diagnostics };\n        },\n    };\n}\n", "export function createSchemaPlugin() {\n    return {\n        name: \"schema-doctor\",\n        version: 1,\n        description: \"Computes the canonical schema contract for downstream Doctor consumers.\",\n        statusText: \"Analyzing schema graph\",\n        defaultOptions: {\n            includeGeneratedOwners: true,\n            allowLegacyAuthBoundary: false,\n        },\n        executionKind: \"analysis\",\n        phases: [\"source-analysis\", \"graph-analysis\"],\n        requiredEvidence: [\"source-files\"],\n        requiredUtilities: [\"config-loader\", \"schema-graph\", \"manifest-diff\"],\n        providesContracts: [\"schema/canonical\"],\n        run({ utilities, emitContract, options }) {\n            const config = utilities.require(\"config-loader\");\n            const graph = utilities.require(\"schema-graph\");\n            const manifestDiff = utilities.require(\"manifest-diff\");\n            const rootSchemaPath = config.loadSchemaConfig().rootSchemaPath;\n            const reachableModules = graph.getReachableModules(rootSchemaPath);\n            const authBoundary = graph.getAuthBoundary();\n            const diagnostics = [];\n            for (const modulePath of graph.getHiddenOwners(reachableModules)) {\n                diagnostics.push({\n                    code: \"SD_HIDDEN_OWNER\",\n                    severity: \"error\",\n                    summary: `Schema owner is hidden outside the reachable graph: ${modulePath}`,\n                    source: { file: modulePath },\n                });\n            }\n            for (const modulePath of graph.getDynamicEdges(reachableModules)) {\n                diagnostics.push({\n                    code: \"SD_NON_PROVABLE_WIRING\",\n                    severity: \"error\",\n                    summary: `Schema wiring is dynamic and cannot be proven statically: ${modulePath}`,\n                    source: { file: modulePath },\n                });\n            }\n            if (authBoundary.mode === \"legacy-auth-schema\" && !options.allowLegacyAuthBoundary) {\n                diagnostics.push({\n                    code: \"SD_LEGACY_AUTH_CONFLICT\",\n                    severity: \"warning\",\n                    summary: `Legacy auth schema boundary requires explicit compatibility opt-in: ${authBoundary.path}`,\n                    source: { file: authBoundary.path },\n                });\n            }\n            const owners = graph.getTableOwners(reachableModules);\n            const canonicalOwners = options.includeGeneratedOwners\n                ? owners\n                : owners.filter((owner) => owner.sourceKind === \"user\");\n            const tableCounts = new Map();\n            for (const owner of canonicalOwners) {\n                tableCounts.set(owner.tableName, (tableCounts.get(owner.tableName) ?? 0) + 1);\n            }\n            for (const owner of canonicalOwners) {\n                if ((tableCounts.get(owner.tableName) ?? 0) > 1) {\n                    diagnostics.push({\n                        code: \"SD_DUPLICATE_OWNER\",\n                        severity: \"error\",\n                        summary: `Table \"${owner.tableName}\" has multiple canonical owners.`,\n                        source: { file: owner.publicOwnerPath },\n                    });\n                }\n            }\n            for (const tableName of manifestDiff.getMissingTables(canonicalOwners.map((owner) => owner.tableName))) {\n                diagnostics.push({\n                    code: \"SD_TABLE_DISAPPEARANCE\",\n                    severity: \"error\",\n                    summary: `Table \"${tableName}\" disappeared compared with the prior manifest.`,\n                });\n            }\n            emitContract({\n                name: \"schema/canonical\",\n                version: 1,\n                producer: \"schema-doctor\",\n                freshness: {\n                    phase: \"source-analysis\",\n                    evidence: [\"source-files\"],\n                },\n                value: {\n                    rootSchemaPath,\n                    reachableModules,\n                    canonicalOwners,\n                    exportRows: canonicalOwners.map((owner) => ({\n                        exportName: owner.tableName,\n                        from: owner.publicOwnerPath.replace(/\\.ts$/, \"\"),\n                    })),\n                    authBoundary,\n                },\n            });\n            return { diagnostics };\n        },\n    };\n}\n", "function stripLeadingMarker(message) {\n    return message.replace(/^[^\\p{L}\\p{N}\"']+/u, \"\").trim();\n}\nexport function createSourcePatternsPlugin() {\n    return {\n        name: \"source-patterns-doctor\",\n        version: 1,\n        description: \"Runs source-level auditor checks that complement graph/module analysis.\",\n        statusText: \"Scanning backend source patterns\",\n        defaultOptions: {\n            includeFrontend: false,\n        },\n        executionKind: \"analysis\",\n        phases: [\"graph-analysis\"],\n        requiredEvidence: [\"source-files\"],\n        requiredUtilities: [\"source-auditor\"],\n        providesContracts: [\"auditor/source-report\"],\n        run({ utilities, options, emitContract }) {\n            const report = utilities.require(\"source-auditor\").runSourceAudit();\n            const diagnostics = [];\n            for (const warning of report.schemaPatterns.warnings) {\n                diagnostics.push({\n                    code: \"AUD_SCHEMA_PATTERN\",\n                    severity: \"warning\",\n                    summary: stripLeadingMarker(warning),\n                    source: report.schemaPatterns.fileName ? { file: report.schemaPatterns.fileName } : undefined,\n                });\n            }\n            for (const usage of report.selfFetch.usages) {\n                diagnostics.push({\n                    code: \"AUD_SELF_FETCH\",\n                    severity: \"warning\",\n                    summary: \"Self-fetch through /api/query or /api/mutation is deprecated; import the handler directly.\",\n                    detail: usage.snippet,\n                    source: { file: usage.file, line: usage.line },\n                });\n            }\n            for (const issue of report.workflowShadowing.issues) {\n                diagnostics.push({\n                    code: \"AUD_WORKFLOW_SHADOWING\",\n                    severity: \"error\",\n                    summary: issue.reason,\n                    detail: issue.snippet,\n                    source: { file: issue.file, line: issue.line },\n                    tags: [issue.type],\n                });\n            }\n            for (const issue of report.aiBypass.issues) {\n                diagnostics.push({\n                    code: \"AUD_AI_BYPASS\",\n                    severity: \"warning\",\n                    summary: \"Deprecated AI bypass pattern detected; use the local ai wrapper instead of direct provider access.\",\n                    detail: issue.snippet,\n                    source: { file: issue.file, line: issue.line },\n                    tags: [issue.type],\n                });\n            }\n            if (options.includeFrontend) {\n                for (const issue of report.frontendAntiPatterns.issues) {\n                    diagnostics.push({\n                        code: \"AUD_FRONTEND_API_CLIENT\",\n                        severity: \"warning\",\n                        summary: issue.reason,\n                        source: { file: issue.file },\n                    });\n                }\n            }\n            emitContract({\n                name: \"auditor/source-report\",\n                version: 1,\n                producer: \"source-patterns-doctor\",\n                freshness: {\n                    phase: \"graph-analysis\",\n                    evidence: [\"source-files\"],\n                },\n                value: report,\n            });\n            return { diagnostics };\n        },\n    };\n}\n", "import { existsSync, readFileSync } from \"fs\";\nimport { basename, relative, resolve } from \"path\";\nimport { resolveAppProject } from \"../../adapters/app-project.js\";\nimport { collectModuleImports } from \"../../adapters/app-schema-graph.js\";\nimport { findSourceFiles } from \"../../internal/source-files.js\";\nimport { collectDbOperations } from \"../../shared/db-operation-inspector.js\";\nconst FORBIDDEN_MODULES = new Set([\n    \"child_process\",\n    \"node:child_process\",\n    \"dgram\",\n    \"node:dgram\",\n    \"os\",\n    \"node:os\",\n    \"cluster\",\n    \"node:cluster\",\n    \"worker_threads\",\n    \"node:worker_threads\",\n    \"v8\",\n    \"node:v8\",\n    \"vm\",\n    \"node:vm\",\n]);\nconst ALLOWED_NODE_MODULES = new Set([\n    \"node:crypto\",\n    \"node:path\",\n    \"node:url\",\n    \"node:buffer\",\n    \"node:stream\",\n    \"node:events\",\n    \"node:util\",\n    \"node:assert\",\n    \"node:querystring\",\n    \"node:string_decoder\",\n    \"node:timers\",\n    \"node:timers/promises\",\n    \"node:zlib\",\n    \"node:http\",\n    \"node:https\",\n    \"node:http2\",\n    \"node:net\",\n    \"node:tls\",\n    \"node:readline\",\n    \"crypto\",\n    \"path\",\n    \"url\",\n    \"buffer\",\n    \"stream\",\n    \"events\",\n    \"util\",\n    \"assert\",\n    \"querystring\",\n    \"string_decoder\",\n    \"timers\",\n    \"zlib\",\n    \"http\",\n    \"https\",\n    \"http2\",\n    \"net\",\n    \"tls\",\n    \"readline\",\n]);\nconst WORKFLOW_SHADOW_FILENAMES = new Set([\"workflow.ts\", \"workflow.tsx\", \"workflow.js\", \"workflow.jsx\"]);\nconst WORKFLOW_SHADOW_RUNTIME_MARKERS = [\n    \"__gencow_workflowRegistry\",\n    \"WORKFLOW_RESUME_ACTION_PREFIX\",\n    \"registerWorkflowsApi(\",\n    'query(\"workflows.get\"',\n    'query(\"workflows.list\"',\n    'mutation(\"workflows.signal\"',\n    \"getWorkflowResumeActionName(\",\n];\nconst WORKFLOW_RELATIVE_IMPORT_PATTERN = /from\\s+[\"'](?:\\.\\.\\/|\\.\\/)workflow(?:\\.(?:[cm]?[jt]sx?))?[\"']/;\nconst SELF_FETCH_PATTERN = /\\/api\\/(query|mutation)/;\nconst UNSAFE_DB_ALLOW_COMMENT = \"gencow-allow-unsafe-db\";\nexport function runAnalyzerSourceAuditor(input) {\n    const project = resolveAppProject(input);\n    return {\n        module: auditAnalyzerModuleImports(project),\n        schemaPatterns: auditAnalyzerSchemaPatterns(project),\n        selfFetch: auditAnalyzerSelfFetch(project),\n        unsafeDb: auditAnalyzerUnsafeDbUsage(project),\n        workflowShadowing: auditAnalyzerWorkflowShadowing(project),\n        aiBypass: auditAnalyzerAIBypass(project),\n        frontendAntiPatterns: auditAnalyzerFrontendAntiPatterns(project),\n    };\n}\nexport function auditAnalyzerModuleImports(project) {\n    const violations = [];\n    for (const entry of collectModuleImports(project)) {\n        for (const moduleName of entry.imports) {\n            if (moduleName.startsWith(\"node:\") && !ALLOWED_NODE_MODULES.has(moduleName)) {\n                violations.push({ module: moduleName, importedFrom: entry.file });\n                continue;\n            }\n            if (FORBIDDEN_MODULES.has(moduleName)) {\n                violations.push({ module: moduleName, importedFrom: entry.file });\n            }\n        }\n    }\n    return { passed: violations.length === 0, violations };\n}\nexport function printAnalyzerModuleAuditReport(result, entryPoint) {\n    if (result.passed) {\n        console.log(\"[auditor] \u2705 Module audit passed \u2014 no forbidden APIs detected\");\n        return;\n    }\n    console.error(`\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551  \u26D4 GENCOW AUDIT FAILED \u2014 Production Constraint Violation    \u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D`);\n    console.error(`\\n  Functions: ${entryPoint}`);\n    console.error(\"\\n  The following modules are BLOCKED in production (Firecracker microVM)\");\n    console.error(\"  but are used in your gencow/ functions:\\n\");\n    for (const violation of result.violations) {\n        console.error(`    \u2717  import \"${violation.module}\"`);\n        console.error(`       in ${violation.importedFrom}`);\n    }\n    console.error(\"\\n  Fix: Replace direct module access with ctx API:\");\n    console.error(\"    ctx.db         \u2014 database queries (Drizzle)\");\n    console.error(\"    ctx.storage    \u2014 file storage\");\n    console.error(\"    ctx.scheduler  \u2014 background jobs\");\n    console.error(\"    ctx.auth       \u2014 authentication\\n\");\n}\nexport function auditAnalyzerSchemaPatterns(project) {\n    const schemaPath = project.rootSchemaPathAbs;\n    if (!existsSync(schemaPath)) {\n        return { fileName: null, warnings: [] };\n    }\n    const content = readFileSync(schemaPath, \"utf8\");\n    const fileName = basename(schemaPath);\n    if (fileName === \"auth-schema.ts\") {\n        return { fileName, warnings: [] };\n    }\n    const warnings = [];\n    const tableRegex = /export\\s+const\\s+(\\w+)\\s*=\\s*pgTable\\s*\\(\\s*\"([^\"]+)\"\\s*,\\s*\\{([^}]+(?:\\{[^}]*\\}[^}]*)*)\\}/g;\n    const systemTables = new Set([\n        \"user\",\n        \"session\",\n        \"account\",\n        \"verification\",\n        \"_system_files\",\n        \"_system_settings\",\n        \"usage_snapshots\",\n        \"credits\",\n    ]);\n    let match;\n    while ((match = tableRegex.exec(content)) !== null) {\n        const [, , tableName, body] = match;\n        if (systemTables.has(tableName))\n            continue;\n        const hasUserId = /user_id|userId/.test(body);\n        if (!hasUserId) {\n            warnings.push(`  \u26A0\uFE0F  \"${tableName}\" \u2014 userId \uCEEC\uB7FC \uC5C6\uC74C \u2192 \uC0AC\uC6A9\uC790\uBCC4 \uB370\uC774\uD130 \uACA9\uB9AC \uBD88\uAC00`);\n            continue;\n        }\n        if (!/\\.references\\s*\\(/.test(body)) {\n            warnings.push(`  \u26A0\uFE0F  \"${tableName}\" \u2014 userId\uC5D0 .references() \uC5C6\uC74C \u2192 FK \uBB34\uACB0\uC131 \uBBF8\uBCF4\uC7A5`);\n        }\n        const userIdLine = body.split(\"\\n\").find((line) => /user_id|userId/.test(line)) || \"\";\n        if (!userIdLine.includes(\"notNull\")) {\n            warnings.push(`  \uD83D\uDCA1 \"${tableName}\" \u2014 userId\uAC00 nullable \u2192 \uC18C\uC720\uC790 \uC5C6\uB294 \uB370\uC774\uD130 \uBC1C\uC0DD \uAC00\uB2A5`);\n        }\n    }\n    return { fileName, warnings };\n}\nexport function printAnalyzerSchemaPatternReport(report) {\n    if (!report.fileName || report.warnings.length === 0)\n        return;\n    console.log(`\\n[auditor] \uD83D\uDD0D \uC2A4\uD0A4\uB9C8 \uBCF4\uC548 \uD328\uD134 \uC810\uAC80 (${report.fileName}):`);\n    for (const warning of report.warnings) {\n        console.log(`[auditor] ${warning}`);\n    }\n    console.log(\"[auditor]   \u2192 \uD83D\uDCC4 gencow/SECURITY.md \uCC38\uACE0\");\n    console.log(\"\");\n}\nexport function auditAnalyzerSelfFetch(project) {\n    const usages = [];\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const content = readFileSync(file, \"utf8\");\n        const lines = content.split(\"\\n\");\n        for (let index = 0; index < lines.length; index += 1) {\n            const line = lines[index] ?? \"\";\n            const trimmed = line.trim();\n            if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"*\"))\n                continue;\n            if (line.includes(\"fetch\") && SELF_FETCH_PATTERN.test(line)) {\n                usages.push({\n                    file: normalizePath(relative(project.functionsDirAbs, file)),\n                    line: index + 1,\n                    snippet: trimmed,\n                });\n            }\n        }\n    }\n    return { usages };\n}\nexport function printAnalyzerSelfFetchReport(result) {\n    if (result.usages.length === 0)\n        return;\n    console.log(`\\n[auditor] \u26A0\uFE0F  Self-fetch detected in ${result.usages.length} location(s):`);\n    for (const usage of result.usages) {\n        console.log(`[auditor]   ${usage.file}:${usage.line} \u2192 ${usage.snippet}`);\n    }\n    console.log(\"[auditor]   \u2192 \uAC19\uC740 \uC11C\uBC84\uC758 \uD568\uC218\uB294 \uC9C1\uC811 import\uD558\uC138\uC694:\");\n    console.log('[auditor]     import { fetchNews } from \"./crawler\";');\n    console.log(\"[auditor]     const result = await fetchNews.handler(ctx, { keyword });\");\n    console.log('[auditor]   \u2192 fetch(\"/api/mutation\") \uD328\uD134\uC740 \uBD88\uD544\uC694\uD55C \uB124\uD2B8\uC6CC\uD06C \uC6B0\uD68C\uC785\uB2C8\uB2E4.\\n');\n}\nexport function auditAnalyzerFrontendAntiPatterns(project) {\n    const srcDir = resolve(project.projectRootAbs, \"src\");\n    const issues = [];\n    if (!existsSync(srcDir)) {\n        return { issues };\n    }\n    const suspectNames = new Set([\n        \"api.ts\",\n        \"api.tsx\",\n        \"api-client.ts\",\n        \"api-client.tsx\",\n        \"rpc.ts\",\n        \"rpc.tsx\",\n        \"client.ts\",\n        \"client.tsx\",\n    ]);\n    for (const file of findSourceFiles(srcDir)) {\n        const relPath = normalizePath(relative(project.projectRootAbs, file));\n        if (relPath.startsWith(\"gencow/\"))\n            continue;\n        if (!suspectNames.has(basename(file)))\n            continue;\n        const content = readFileSync(file, \"utf8\");\n        if (SELF_FETCH_PATTERN.test(content)) {\n            issues.push({\n                file: relPath,\n                reason: 'fetch(\"/api/query\" \uB610\uB294 \"/api/mutation\") \uC9C1\uC811 \uD638\uCD9C \uAC10\uC9C0 \u2014 \uC774 \uD30C\uC77C\uC744 \uC0AD\uC81C\uD558\uC138\uC694',\n            });\n        }\n    }\n    return { issues };\n}\nexport function printAnalyzerFrontendAntiPatternReport(result) {\n    if (result.issues.length === 0)\n        return;\n    console.log(\"\\n[auditor] \u26A0\uFE0F  Custom API client detected:\");\n    for (const issue of result.issues) {\n        console.log(`[auditor]   ${issue.file} \u2014 ${issue.reason}`);\n    }\n    console.log(\"[auditor]   \u2192 gencow/api.ts (\uC790\uB3D9 \uC0DD\uC131)\uC640 useQuery/useMutation\uC744 \uC0AC\uC6A9\uD558\uC138\uC694\");\n    console.log('[auditor]   \u2192 \uD83D\uDCC4 README.md \"\u274C \uC808\uB300 \uD558\uC9C0 \uB9C8\uC138\uC694\" \uC139\uC158 \uCC38\uC870\\n');\n}\nexport function auditAnalyzerWorkflowShadowing(project) {\n    const issues = [];\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const content = readFileSync(file, \"utf8\");\n        const relPath = normalizePath(relative(project.functionsDirAbs, file));\n        const fileName = basename(file);\n        if (WORKFLOW_SHADOW_FILENAMES.has(fileName)) {\n            const markers = WORKFLOW_SHADOW_RUNTIME_MARKERS.filter((marker) => content.includes(marker));\n            if (markers.length > 0) {\n                issues.push({\n                    file: relPath,\n                    line: 1,\n                    snippet: `framework runtime markers: ${markers.slice(0, 3).join(\", \")}`,\n                    type: \"shadow-file\",\n                    reason: \"\uC571 \uB85C\uCEEC workflow runtime \uD3EC\uD06C\uB294 framework/server \uACC4\uC57D\uACFC drift \uB0A9\uB2C8\uB2E4.\",\n                });\n            }\n        }\n        const lines = content.split(\"\\n\");\n        for (let index = 0; index < lines.length; index += 1) {\n            const trimmed = lines[index]?.trim() ?? \"\";\n            if (trimmed.startsWith(\"//\") ||\n                trimmed.startsWith(\"*\") ||\n                trimmed.startsWith(\"/*\") ||\n                trimmed.startsWith(\"*/\")) {\n                continue;\n            }\n            if (WORKFLOW_RELATIVE_IMPORT_PATTERN.test(trimmed)) {\n                issues.push({\n                    file: relPath,\n                    line: index + 1,\n                    snippet: trimmed.slice(0, 140),\n                    type: \"relative-import\",\n                    reason: 'workflow\uB294 \uBC18\uB4DC\uC2DC \"@gencow/core\"\uC5D0\uC11C import \uD574\uC57C \uD569\uB2C8\uB2E4.',\n                });\n            }\n        }\n    }\n    return { passed: issues.length === 0, issues };\n}\nexport function printAnalyzerWorkflowShadowingReport(result) {\n    if (result.issues.length === 0)\n        return;\n    const typeLabels = {\n        \"shadow-file\": \"\uD83E\uDDEC \uB85C\uCEEC workflow runtime \uD3EC\uD06C\",\n        \"relative-import\": \"\uD83D\uDD01 \uC0C1\uB300 workflow import\",\n    };\n    console.log(`\\n[auditor] \u26A0\uFE0F  Workflow shadowing detected (${result.issues.length}\uAC74):`);\n    for (const issue of result.issues) {\n        const label = typeLabels[issue.type] || \"\u26A0\uFE0F  \uAE30\uD0C0\";\n        const location = issue.line > 0 ? `${issue.file}:${issue.line}` : issue.file;\n        console.log(`[auditor]   ${label} \u2014 ${location}`);\n        console.log(`[auditor]     ${issue.snippet}`);\n    }\n    console.log('[auditor]   \u2192 workflow\uB294 \uBC18\uB4DC\uC2DC import { workflow } from \"@gencow/core\" \uB97C \uC0AC\uC6A9\uD558\uC138\uC694.');\n    console.log(\"[auditor]   \u2192 gencow/workflow.ts \uAC19\uC740 shadow file\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\");\n    console.log(\"[auditor]   \u2192 helper\uAC00 \uD544\uC694\uD558\uBA74 \uB2E4\uB978 \uD30C\uC77C\uBA85\uC73C\uB85C \uB9CC\uB4E4\uACE0 core workflow\uB97C \uAC10\uC2F8\uC138\uC694.\\n\");\n}\nexport function formatAnalyzerWorkflowShadowingError(result) {\n    if (result.passed)\n        return \"\";\n    const lines = [\n        \"\",\n        \"\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\",\n        \"\u2551  \u26D4 DEPLOY BLOCKED \u2014 Local workflow runtime shadowing       \u2551\",\n        \"\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\",\n        \"\",\n        \"  gencow/ \uC548\uC5D0\uC11C framework workflow \uB7F0\uD0C0\uC784\uC744 \uD3EC\uD06C\uD55C \uD754\uC801\uC774 \uAC10\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n        \"  \uC774 \uD328\uD134\uC740 scheduler/workflow resume \uACC4\uC57D drift\uB97C \uC77C\uC73C\uD0AC \uC218 \uC788\uC5B4 \uBC30\uD3EC\uB97C \uCC28\uB2E8\uD569\uB2C8\uB2E4.\",\n        \"\",\n    ];\n    for (const issue of result.issues) {\n        const location = issue.line > 0 ? `${issue.file}:${issue.line}` : issue.file;\n        lines.push(`  \u2717 ${location}`);\n        lines.push(`    ${issue.snippet}`);\n        lines.push(`    \u2192 ${issue.reason}`);\n    }\n    lines.push(\"\");\n    lines.push('  Fix: `import { workflow } from \"@gencow/core\"` \uB97C \uC0AC\uC6A9\uD558\uC138\uC694.');\n    lines.push(\"  Fix: `gencow/workflow.ts` \uAC19\uC740 shadow file\uC740 \uC0AD\uC81C\uD558\uAC70\uB098 \uB2E4\uB978 \uC774\uB984\uC758 helper\uB85C \uBC14\uAFB8\uC138\uC694.\");\n    lines.push(\"  Fix: `./workflow`, `../workflow` \uC0C1\uB300 import\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.\");\n    lines.push(\"\");\n    return lines.join(\"\\n\");\n}\nexport function auditAnalyzerAIBypass(project) {\n    const issues = [];\n    const suspectFileNames = new Set([\n        \"openai-direct.ts\",\n        \"openai-direct.tsx\",\n        \"ai-wrapper.ts\",\n        \"ai-wrapper.tsx\",\n        \"ai-helper.ts\",\n        \"ai-helper.tsx\",\n        \"ai-client.ts\",\n        \"ai-client.tsx\",\n        \"gpt.ts\",\n        \"gpt.tsx\",\n        \"openai.ts\",\n        \"openai.tsx\",\n        \"llm.ts\",\n        \"llm.tsx\",\n    ]);\n    const directOpenAiFetch = /fetch\\s*\\(\\s*[`\"']https?:\\/\\/api\\.openai\\.com/;\n    const directOpenAiConstructor = /new\\s+OpenAI\\s*\\(/;\n    const inlineAiFunc = /(?:async\\s+)?function\\s+(?:callGPT|callOpenAI|callAI|fetchGPT|aiCall|directAI)\\s*\\(/;\n    const openAiImport = /(?:import|require)\\s*\\(?.*['\"]openai['\"]/;\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        const relPath = normalizePath(relative(project.functionsDirAbs, file));\n        const fileName = basename(file);\n        if (fileName === \"ai.ts\")\n            continue;\n        if (suspectFileNames.has(fileName)) {\n            issues.push({\n                file: relPath,\n                line: 0,\n                snippet: `\uD30C\uC77C\uBA85 \"${fileName}\" \u2014 AI \uC6B0\uD68C \uB798\uD37C \uC758\uC2EC`,\n                type: \"suspect-file\",\n            });\n        }\n        const lines = readFileSync(file, \"utf8\").split(\"\\n\");\n        for (let index = 0; index < lines.length; index += 1) {\n            const line = lines[index] ?? \"\";\n            const trimmed = line.trim();\n            if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"*\") || trimmed.startsWith(\"/*\"))\n                continue;\n            if (directOpenAiFetch.test(line)) {\n                issues.push({ file: relPath, line: index + 1, snippet: trimmed.slice(0, 100), type: \"direct-fetch\" });\n            }\n            if (directOpenAiConstructor.test(line)) {\n                issues.push({\n                    file: relPath,\n                    line: index + 1,\n                    snippet: trimmed.slice(0, 100),\n                    type: \"openai-constructor\",\n                });\n            }\n            if (inlineAiFunc.test(line)) {\n                issues.push({ file: relPath, line: index + 1, snippet: trimmed.slice(0, 100), type: \"inline-ai-func\" });\n            }\n            if (openAiImport.test(line)) {\n                issues.push({ file: relPath, line: index + 1, snippet: trimmed.slice(0, 100), type: \"openai-import\" });\n            }\n        }\n    }\n    return { issues };\n}\nexport function printAnalyzerAIBypassReport(result) {\n    if (result.issues.length === 0)\n        return;\n    const typeLabels = {\n        \"suspect-file\": \"\uD83D\uDDC2\uFE0F  AI \uC6B0\uD68C \uB798\uD37C \uD30C\uC77C\",\n        \"direct-fetch\": \"\uD83D\uDD34 OpenAI API \uC9C1\uC811 \uD638\uCD9C\",\n        \"openai-constructor\": \"\uD83D\uDD34 OpenAI \uC0DD\uC131\uC790 \uC9C1\uC811 \uC0AC\uC6A9\",\n        \"inline-ai-func\": \"\u26A0\uFE0F  \uC778\uB77C\uC778 AI \uD568\uC218 \uC815\uC758\",\n        \"openai-import\": \"\u26A0\uFE0F  openai \uD328\uD0A4\uC9C0 \uC9C1\uC811 import\",\n    };\n    console.log(`\\n[auditor] \uD83E\uDD16 AI \uC6B0\uD68C \uD328\uD134 \uAC10\uC9C0 (${result.issues.length}\uAC74):`);\n    for (const issue of result.issues) {\n        const label = typeLabels[issue.type] || \"\u26A0\uFE0F  \uAE30\uD0C0\";\n        const location = issue.line > 0 ? `${issue.file}:${issue.line}` : issue.file;\n        console.log(`[auditor]   ${label} \u2014 ${location}`);\n        console.log(`[auditor]     ${issue.snippet}`);\n    }\n    console.log('[auditor]   \u2192 AI \uD638\uCD9C\uC740 \uBC18\uB4DC\uC2DC import { ai } from \"./ai\" \uB97C \uC0AC\uC6A9\uD558\uC138\uC694.');\n    console.log(\"[auditor]   \u2192 ai.ts\uB294 \uB85C\uCEEC/\uD074\uB77C\uC6B0\uB4DC \uC790\uB3D9 \uC804\uD658\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.\");\n    console.log(\"[auditor]   \u2192 fetch()\uB85C OpenAI\uB97C \uC9C1\uC811 \uD638\uCD9C\uD558\uBA74 \uD074\uB77C\uC6B0\uB4DC\uC5D0\uC11C \uACFC\uAE08\uC774 \uC548 \uB429\uB2C8\uB2E4.\\n\");\n}\nexport function auditAnalyzerUnsafeDbUsage(project) {\n    const issues = [];\n    const seedWarnings = [];\n    const sourceLines = new Map();\n    for (const file of findSourceFiles(project.functionsDirAbs)) {\n        sourceLines.set(normalizePath(relative(project.projectRootAbs, file)), readFileSync(file, \"utf8\").split(\"\\n\"));\n    }\n    for (const operation of collectDbOperations(project)) {\n        const file = normalizePath(operation.file.replace(/^\\.\\//, \"\"));\n        if (operation.visibility === \"seed\") {\n            seedWarnings.push({\n                file,\n                reason: \"seed.ts may use unsafe database access for seeding, but it must not be shipped or used in production\",\n            });\n            continue;\n        }\n        for (const hazard of operation.hazards) {\n            const isSystemTable = hazard.kind === \"system-table\" ||\n                hazard.referencedTables.some((table) => table.startsWith(\"_system_\") || table.startsWith(\"_gencow_\"));\n            const blocked = operation.visibility === \"public\" && (isSystemTable || !operation.allowCommentComplete);\n            issues.push({\n                file,\n                line: operation.line,\n                snippet: sourceLines.get(file)?.[operation.line - 1]?.trim().slice(0, 160) ?? \"\",\n                type: isSystemTable ? \"system-table\" : hazard.kind,\n                operation: operation.operation,\n                allowlisted: operation.allowCommentComplete,\n                blocked,\n                reason: blocked\n                    ? isSystemTable\n                        ? `public ${operation.operation} must not expose framework-owned system tables`\n                        : `public ${operation.operation} uses an unreviewed database escape hatch`\n                    : isSystemTable\n                        ? \"_system_* and _gencow_* tables are framework-owned\"\n                        : hazard.kind === \"unsafe-db\"\n                            ? \"ctx.unsafeDb uses the audited system-plane database handle\"\n                            : \"raw SQL escape hatches need explicit review\",\n            });\n        }\n    }\n    return {\n        usages: issues.map((issue) => ({ file: issue.file, line: issue.line, snippet: issue.snippet })),\n        issues,\n        seedWarnings,\n        blocked: issues.some((issue) => issue.blocked),\n    };\n}\nexport function printAnalyzerUnsafeDbReport(result) {\n    if (result.issues.length === 0 && result.seedWarnings.length === 0)\n        return;\n    const blocked = result.issues.filter((issue) => issue.blocked);\n    const warnings = result.issues.filter((issue) => !issue.blocked);\n    const log = blocked.length > 0 ? console.error : console.warn;\n    if (result.issues.length > 0) {\n        log(`\\n[auditor] \u26A0\uFE0F  unsafe/raw database access detected in ${result.issues.length} location(s):`);\n    }\n    for (const issue of result.issues) {\n        const marker = issue.blocked ? \"\u2717\" : issue.allowlisted ? \"\u2713 allowlisted\" : \"\u26A0 review\";\n        const operation = issue.operation ? ` public ${issue.operation}` : \" protected/internal code\";\n        log(`[auditor]   ${marker} ${issue.file}:${issue.line} \u2014 ${issue.type}${operation}`);\n        log(`[auditor]     ${issue.snippet}`);\n        log(`[auditor]     \u2192 ${issue.reason}`);\n    }\n    for (const seedWarning of result.seedWarnings) {\n        log(`\\n[auditor] \u26A0\uFE0F  ${seedWarning.file} is a seeding-only file`);\n        log(`[auditor]     \u2192 ${seedWarning.reason}`);\n    }\n    if (blocked.length > 0) {\n        log(\"[auditor]   \u2192 public handlers must use ctx.db, scoped helpers, or a complete allow comment.\");\n        log(`[auditor]   \u2192 allow comment format: // ${UNSAFE_DB_ALLOW_COMMENT} reason: ... scope: ... owner: ... test: ...`);\n    }\n    else if (warnings.length > 0 || result.seedWarnings.length > 0) {\n        log(\"[auditor]   \u2192 keep these reviewed and prefer ctx.db unless this is explicit infra/admin code.\");\n    }\n    log(\"\");\n}\nexport function formatAnalyzerUnsafeDatabaseAccessError(result) {\n    if (!result.blocked)\n        return \"\";\n    const lines = [\n        \"\",\n        \"\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\",\n        \"\u2551  \u26D4 DEPLOY BLOCKED \u2014 Unsafe public database access          \u2551\",\n        \"\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\",\n        \"\",\n        \"  public query/mutation/httpAction/httpRoute \uD578\uB4E4\uB7EC\uC5D0\uC11C DB escape hatch\uAC00 \uAC10\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n        \"  public handler\uB294 \uAE30\uBCF8\uC801\uC73C\uB85C ctx.db\uC640 owner/RLS-scoped helper\uB9CC \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.\",\n        \"\",\n    ];\n    for (const issue of result.issues.filter((item) => item.blocked)) {\n        lines.push(`  \u2717 ${issue.file}:${issue.line} \u2014 ${issue.type}`);\n        lines.push(`    ${issue.snippet}`);\n        lines.push(`    \u2192 ${issue.reason}`);\n    }\n    lines.push(\"\");\n    lines.push(\"  Fix: public handler\uC5D0\uC11C\uB294 ctx.db\uB97C \uC0AC\uC6A9\uD558\uACE0 owner filter/RLS\uB97C \uC720\uC9C0\uD558\uC138\uC694.\");\n    lines.push(\"  Fix: _system_* / _gencow_* \uD14C\uC774\uBE14\uC740 public handler\uC5D0\uC11C \uC9C1\uC811 \uB178\uCD9C\uD558\uC9C0 \uB9C8\uC138\uC694.\");\n    lines.push(`  Exception: \uD544\uC694\uD55C \uACBD\uC6B0 \uC9C1\uC804 \uC8FC\uC11D\uC5D0 \"${UNSAFE_DB_ALLOW_COMMENT} reason: ... scope: ... owner: ... test: ...\" \uB97C \uB0A8\uAE30\uC138\uC694.`);\n    lines.push(\"\");\n    return lines.join(\"\\n\");\n}\nfunction normalizePath(pathValue) {\n    return pathValue.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n", "import { readFileSync } from \"fs\";\nimport { collectDynamicSchemaEdges, collectHiddenSchemaOwners, collectModuleImports, collectReachableSchemaModules, collectSchemaOwners, detectAuthBoundary, } from \"../../adapters/app-schema-graph.js\";\nimport { resolveAppProject } from \"../../adapters/app-project.js\";\nimport { activateAnalyzerPlugin, runAnalyzerPlugins } from \"../../core/analyzer-runtime.js\";\nimport { findSourceFiles, toProjectPath } from \"../../internal/source-files.js\";\nimport { collectDbOperations } from \"../../shared/db-operation-inspector.js\";\nimport { createDbAccessPlugin } from \"../../shared/db-access-plugin.js\";\nimport { createSchemaPlugin } from \"../../shared/schema-plugin.js\";\nimport { createSourcePatternsPlugin } from \"../../shared/source-patterns-plugin.js\";\nimport { createModuleAuditPlugin } from \"./module-auditor-plugin.js\";\nimport { auditAnalyzerAIBypass, auditAnalyzerFrontendAntiPatterns, auditAnalyzerSchemaPatterns, auditAnalyzerSelfFetch, auditAnalyzerUnsafeDbUsage, auditAnalyzerWorkflowShadowing, } from \"./source-auditor.js\";\nfunction createAppAnalyzerUtilities(input) {\n    const project = resolveAppProject(input);\n    const reachableModules = collectReachableSchemaModules(project);\n    const moduleImports = collectModuleImports(project);\n    const sourceAuditReport = {\n        schemaPatterns: auditAnalyzerSchemaPatterns(project),\n        selfFetch: auditAnalyzerSelfFetch(project),\n        unsafeDb: auditAnalyzerUnsafeDbUsage(project),\n        workflowShadowing: auditAnalyzerWorkflowShadowing(project),\n        aiBypass: auditAnalyzerAIBypass(project),\n        frontendAntiPatterns: auditAnalyzerFrontendAntiPatterns(project),\n    };\n    const sourceFiles = findSourceFiles(project.functionsDirAbs).map((filePath) => ({\n        file: toProjectPath(project.projectRootAbs, filePath),\n        content: readFileSync(filePath, \"utf8\"),\n    }));\n    return {\n        project,\n        utilities: {\n            \"config-loader\": {\n                loadSchemaConfig: () => ({\n                    rootSchemaPath: toProjectPath(project.projectRootAbs, project.rootSchemaPathAbs),\n                }),\n            },\n            \"schema-graph\": {\n                getReachableModules: () => [...reachableModules],\n                getTableOwners: (modulePaths) => collectSchemaOwners(project, modulePaths),\n                getHiddenOwners: (modulePaths) => collectHiddenSchemaOwners(project, new Set(modulePaths)),\n                getDynamicEdges: (modulePaths) => collectDynamicSchemaEdges(project, modulePaths),\n                getAuthBoundary: () => detectAuthBoundary(project),\n            },\n            \"manifest-diff\": {\n                getMissingTables: () => [],\n            },\n            \"db-operation-inspector\": {\n                listOperations: () => collectDbOperations(project),\n            },\n            \"bundle-inspector\": {\n                listModuleImports: () => moduleImports,\n            },\n            \"procedure-registry\": {\n                listQueries: () => [],\n                listMutations: () => [],\n            },\n            \"source-auditor\": {\n                runSourceAudit: () => sourceAuditReport,\n            },\n            \"source-file-catalog\": {\n                listFiles: () => sourceFiles,\n            },\n            \"builtin-operation-registry\": {\n                listBuiltinOperations: () => [],\n            },\n            \"user-operation-index\": {\n                listUserOperations: () => ({\n                    queries: [],\n                    mutations: [],\n                    namespaceImportPaths: {},\n                    singleFileImportPath: \"./index.ts\",\n                    coreGeneratedNamespaces: [],\n                }),\n            },\n        },\n    };\n}\nexport async function runAppSourceAndGraphAnalysis(input) {\n    const { project, utilities } = createAppAnalyzerUtilities(input);\n    const profile = input.profile ?? \"auditor\";\n    const command = input.command ?? profile;\n    const trustMode = input.trustMode ?? \"local\";\n    const sourceResult = await runAnalyzerPlugins({\n        context: {\n            profile,\n            phase: \"source-analysis\",\n            command,\n            trustMode,\n            projectRoot: project.projectRootAbs,\n            functionsDir: project.functionsDirAbs,\n            cwd: project.projectRootAbs,\n            featureFlags: {},\n            envKeys: [],\n            availableEvidence: [\"source-files\"],\n            fixMode: \"none\",\n        },\n        utilities,\n        plugins: input.sourcePlugins ?? [],\n        policy: {\n            minimumSeverityToBlockByPhase: {\n                \"source-analysis\": \"error\",\n            },\n        },\n    });\n    const graphResult = await runAnalyzerPlugins({\n        context: {\n            profile,\n            phase: \"graph-analysis\",\n            command,\n            trustMode,\n            projectRoot: project.projectRootAbs,\n            functionsDir: project.functionsDirAbs,\n            cwd: project.projectRootAbs,\n            featureFlags: {},\n            envKeys: [],\n            availableEvidence: [\"source-files\", \"resolved-graph\"],\n            fixMode: \"none\",\n        },\n        utilities,\n        plugins: [\n            activateAnalyzerPlugin(createSchemaPlugin()),\n            activateAnalyzerPlugin(createDbAccessPlugin()),\n            activateAnalyzerPlugin(createModuleAuditPlugin()),\n            activateAnalyzerPlugin(createSourcePatternsPlugin(), {\n                options: { includeFrontend: input.includeFrontend === true },\n            }),\n        ],\n        policy: {\n            minimumSeverityToBlockByPhase: {\n                \"graph-analysis\": \"error\",\n            },\n        },\n    });\n    return {\n        projectRoot: project.projectRootAbs,\n        diagnostics: [...sourceResult.diagnostics, ...graphResult.diagnostics],\n        blocked: sourceResult.blocked || graphResult.blocked,\n        fixPlans: [...sourceResult.fixPlans, ...graphResult.fixPlans],\n        sourceResult,\n        graphResult,\n    };\n}\nfunction findContract(contracts, name) {\n    return contracts.find((contract) => contract.name === name);\n}\nexport function getAnalyzerModuleAuditReport(result) {\n    const contract = findContract(result.contracts, \"auditor/module-report\");\n    const violations = contract?.value.violations ?? [];\n    return {\n        passed: violations.length === 0,\n        violations,\n    };\n}\nexport function getAnalyzerSourceAuditReport(result) {\n    const contract = findContract(result.contracts, \"auditor/source-report\");\n    return contract?.value ?? null;\n}\n", "export function createSecurityAuditPlugin() {\n    return {\n        name: \"security-auditor\",\n        version: 1,\n        description: \"Audits loaded procedures for public exposure.\",\n        executionKind: \"verification\",\n        phases: [\"loaded-analysis\"],\n        requiredEvidence: [\"loaded-runtime\"],\n        requiredUtilities: [\"procedure-registry\"],\n        providesContracts: [\"auditor/security-report\"],\n        run({ utilities, emitContract }) {\n            const registry = utilities.require(\"procedure-registry\");\n            const queries = registry.listQueries();\n            const mutations = registry.listMutations();\n            const report = {\n                publicQueries: queries.filter((query) => query.isPublic).map((query) => query.key),\n                publicMutations: mutations.filter((mutation) => mutation.isPublic).map((mutation) => mutation.name),\n                protectedQueries: queries.filter((query) => !query.isPublic).map((query) => query.key),\n                protectedMutations: mutations.filter((mutation) => !mutation.isPublic).map((mutation) => mutation.name),\n            };\n            emitContract({\n                name: \"auditor/security-report\",\n                version: 1,\n                producer: \"security-auditor\",\n                freshness: {\n                    phase: \"loaded-analysis\",\n                    evidence: [\"loaded-runtime\"],\n                },\n                value: report,\n            });\n            const diagnostics = [];\n            if (report.publicQueries.length > 0) {\n                diagnostics.push({\n                    code: \"AUD_PUBLIC_QUERY\",\n                    severity: \"warning\",\n                    summary: `Public queries detected: ${report.publicQueries.join(\", \")}`,\n                });\n            }\n            if (report.publicMutations.length > 0) {\n                diagnostics.push({\n                    code: \"AUD_PUBLIC_MUTATION\",\n                    severity: \"warning\",\n                    summary: `Public mutations detected: ${report.publicMutations.join(\", \")}`,\n                });\n            }\n            return { diagnostics };\n        },\n    };\n}\n", "export * from \"./module-auditor-plugin.js\";\nexport * from \"./run-app-analysis.js\";\nexport * from \"./security-auditor-plugin.js\";\nexport * from \"./source-auditor.js\";\n", "export const FUNCTION_TIMEOUTS = {\n    query: 30_000,\n    mutation: 30_000,\n    httpAction: 300_000,\n    cron: 600_000,\n};\nconst DEFAULT_TIMEOUT_RESTART_THRESHOLD = 3;\nconst DEFAULT_TIMEOUT_RESTART_WINDOW_MS = 60_000;\nconst DEFAULT_TIMEOUT_RESTART_DELAY_MS = 250;\nconst DEFAULT_TIMEOUT_RESTART_KINDS = [\"query\", \"mutation\"];\nconst DEFAULT_FUNCTION_SLOW_LOG_MS = 10_000;\nlet timeoutWindowStartMs = 0;\nlet timeoutCountInWindow = 0;\nlet timeoutRestartScheduled = false;\nlet timeoutFunctionNames = [];\nlet functionInvocationSequence = 0;\nfunction parsePositiveInteger(value, fallback) {\n    const parsed = Number(value);\n    return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;\n}\nfunction parseNonNegativeInteger(value, fallback) {\n    const parsed = Number(value);\n    return Number.isInteger(parsed) && parsed >= 0 ? parsed : fallback;\n}\nfunction parseRestartKinds(value) {\n    if (!value?.trim())\n        return [...DEFAULT_TIMEOUT_RESTART_KINDS];\n    const allowed = new Set([\"query\", \"mutation\", \"httpAction\", \"cron\"]);\n    const kinds = value\n        .split(\",\")\n        .map((part) => part.trim())\n        .filter((part) => allowed.has(part));\n    return kinds.length > 0 ? kinds : [...DEFAULT_TIMEOUT_RESTART_KINDS];\n}\nexport function resolveFunctionTimeoutRestartPolicy(env = process.env) {\n    const explicit = env.GENCOW_FUNCTION_TIMEOUT_RESTART_ENABLED;\n    const enabled = explicit === \"true\" ? true : explicit === \"false\" ? false : Boolean(env.GENCOW_METERING_URL);\n    return {\n        enabled,\n        threshold: parsePositiveInteger(env.GENCOW_FUNCTION_TIMEOUT_RESTART_THRESHOLD, DEFAULT_TIMEOUT_RESTART_THRESHOLD),\n        windowMs: parsePositiveInteger(env.GENCOW_FUNCTION_TIMEOUT_RESTART_WINDOW_MS, DEFAULT_TIMEOUT_RESTART_WINDOW_MS),\n        delayMs: parsePositiveInteger(env.GENCOW_FUNCTION_TIMEOUT_RESTART_DELAY_MS, DEFAULT_TIMEOUT_RESTART_DELAY_MS),\n        kinds: parseRestartKinds(env.GENCOW_FUNCTION_TIMEOUT_RESTART_KINDS),\n    };\n}\nexport function resolveFunctionSlowLogMs(env = process.env) {\n    return parseNonNegativeInteger(env.GENCOW_FUNCTION_SLOW_LOG_MS, DEFAULT_FUNCTION_SLOW_LOG_MS);\n}\nexport function buildFunctionTimeoutRestartDiagnostic(params) {\n    return {\n        reason: \"repeated_function_timeouts\",\n        count: params.count,\n        threshold: params.policy.threshold,\n        windowMs: params.policy.windowMs,\n        windowAgeMs: Math.max(0, params.nowMs - params.windowStartMs),\n        delayMs: params.policy.delayMs,\n        functions: params.functions,\n        latest: params.event,\n        pid: params.pid ?? process.pid,\n        ...(params.diagnostics ? { diagnostics: params.diagnostics } : {}),\n    };\n}\nfunction collectRestartDiagnostics(runtime) {\n    try {\n        return runtime.diagnostics?.();\n    }\n    catch {\n        return { diagnostics: \"unavailable\" };\n    }\n}\nfunction nextFunctionInvocationId() {\n    functionInvocationSequence =\n        functionInvocationSequence >= Number.MAX_SAFE_INTEGER ? 1 : functionInvocationSequence + 1;\n    return `${Date.now().toString(36)}-${functionInvocationSequence}`;\n}\nfunction formatErrorForRuntimeLog(error) {\n    const record = error;\n    const name = typeof record?.name === \"string\" ? record.name : \"Error\";\n    const code = typeof record?.code === \"string\" ? ` code=${record.code}` : \"\";\n    const message = typeof record?.message === \"string\"\n        ? record.message.replace(/\\s+/g, \" \").slice(0, 300)\n        : String(error).replace(/\\s+/g, \" \").slice(0, 300);\n    return `name=${name}${code} message=\"${message}\"`;\n}\nexport function recordFunctionTimeout(event, runtime = {}) {\n    const env = runtime.env ?? process.env;\n    const policy = resolveFunctionTimeoutRestartPolicy(env);\n    if (!policy.enabled || !policy.kinds.includes(event.type))\n        return;\n    const logger = runtime.logger ?? console;\n    const nowMs = runtime.nowMs ?? Date.now();\n    if (!timeoutWindowStartMs || nowMs - timeoutWindowStartMs > policy.windowMs) {\n        timeoutWindowStartMs = nowMs;\n        timeoutCountInWindow = 0;\n        timeoutFunctionNames = [];\n    }\n    timeoutCountInWindow += 1;\n    timeoutFunctionNames.push(`${event.type}:${event.functionName}`);\n    logger.warn(`[runtime] function timeout ${timeoutCountInWindow}/${policy.threshold} in ${policy.windowMs}ms window: ${event.type} \"${event.functionName}\"`);\n    if (timeoutCountInWindow < policy.threshold || timeoutRestartScheduled)\n        return;\n    timeoutRestartScheduled = true;\n    const timeoutFunctions = timeoutFunctionNames.slice(-policy.threshold);\n    const names = timeoutFunctions.join(\", \");\n    const diagnostic = buildFunctionTimeoutRestartDiagnostic({\n        event,\n        policy,\n        count: timeoutCountInWindow,\n        windowStartMs: timeoutWindowStartMs,\n        nowMs,\n        functions: timeoutFunctions,\n        diagnostics: collectRestartDiagnostics(runtime),\n    });\n    logger.error(`[runtime] function timeout restart diagnostics ${JSON.stringify(diagnostic)}`);\n    logger.error(`[runtime] scheduling app process restart after repeated function timeouts (${names})`);\n    const setTimeoutImpl = runtime.setTimeoutImpl ?? setTimeout;\n    const exitImpl = runtime.exitImpl ?? ((code) => process.exit(code));\n    const handle = setTimeoutImpl(() => {\n        exitImpl(1);\n    }, policy.delayMs);\n    if (typeof handle.unref === \"function\") {\n        handle.unref();\n    }\n}\nexport function __resetFunctionTimeoutRestartStateForTests() {\n    timeoutWindowStartMs = 0;\n    timeoutCountInWindow = 0;\n    timeoutRestartScheduled = false;\n    timeoutFunctionNames = [];\n    functionInvocationSequence = 0;\n}\nexport async function executeWithTimeout(fn, type, functionName, timeouts = FUNCTION_TIMEOUTS, restartRuntime) {\n    const timeoutMs = timeouts[type];\n    const invocationId = nextFunctionInvocationId();\n    const startedAt = Date.now();\n    const logger = restartRuntime?.logger ?? console;\n    const slowLogMs = resolveFunctionSlowLogMs(restartRuntime?.env);\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    let timedOut = false;\n    const work = Promise.resolve().then(fn);\n    work.then(() => {\n        if (!timedOut)\n            return;\n        const elapsedMs = Date.now() - startedAt;\n        logger.warn(`[runtime] function completed after timeout id=${invocationId} type=${type} name=\"${functionName}\" elapsedMs=${elapsedMs} timeoutMs=${timeoutMs}`);\n    }, (error) => {\n        if (!timedOut)\n            return;\n        const elapsedMs = Date.now() - startedAt;\n        logger.error(`[runtime] function failed after timeout id=${invocationId} type=${type} name=\"${functionName}\" elapsedMs=${elapsedMs} timeoutMs=${timeoutMs} ${formatErrorForRuntimeLog(error)}`);\n    });\n    try {\n        const result = await Promise.race([\n            work,\n            new Promise((_, reject) => {\n                controller.signal.addEventListener(\"abort\", () => {\n                    timedOut = true;\n                    const elapsedMs = Date.now() - startedAt;\n                    logger.error(`[runtime] function timeout id=${invocationId} type=${type} name=\"${functionName}\" elapsedMs=${elapsedMs} timeoutMs=${timeoutMs}`);\n                    recordFunctionTimeout({ type, functionName, timeoutMs }, restartRuntime);\n                    const error = new Error(`Function \"${functionName}\" exceeded ${timeoutMs / 1000}s time limit. ` +\n                        `Split into smaller mutations and call them sequentially from the frontend. ` +\n                        `Limits: query 30s, mutation 30s, httpAction 5min, cron 10min.`);\n                    error.code = \"FUNCTION_TIMEOUT\";\n                    reject(error);\n                });\n            }),\n        ]);\n        const elapsedMs = Date.now() - startedAt;\n        if (slowLogMs > 0 && elapsedMs >= slowLogMs) {\n            logger.warn(`[runtime] function slow id=${invocationId} type=${type} name=\"${functionName}\" elapsedMs=${elapsedMs} thresholdMs=${slowLogMs}`);\n        }\n        return result;\n    }\n    catch (error) {\n        const elapsedMs = Date.now() - startedAt;\n        const code = error?.code;\n        if (code !== \"FUNCTION_TIMEOUT\" && slowLogMs > 0 && elapsedMs >= slowLogMs) {\n            logger.warn(`[runtime] function slow failed id=${invocationId} type=${type} name=\"${functionName}\" elapsedMs=${elapsedMs} thresholdMs=${slowLogMs} ${formatErrorForRuntimeLog(error)}`);\n        }\n        throw error;\n    }\n    finally {\n        clearTimeout(timer);\n    }\n}\n", "import { sql } from \"drizzle-orm\";\nimport { serializeWorkflowValue } from \"@gencow/core\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function getWorkflowRow(db, workflowId) {\n    const result = await db.execute(sql `\n        SELECT\n            id,\n            name,\n            args,\n            status,\n            current_step,\n            result,\n            error,\n            error_code,\n            retry_count,\n            max_retries,\n            max_duration_ms,\n            first_claimed_at,\n            handler_started_at,\n            last_resume_attempt_at,\n            runnable_at,\n            started_at,\n            updated_at,\n            completed_at,\n            user_id\n        FROM _gencow_workflows\n        WHERE id = ${workflowId}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function claimWorkflowRun(db, workflowId) {\n    const result = await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'running',\n            error = NULL,\n            error_code = NULL,\n            runnable_at = NULL,\n            first_claimed_at = COALESCE(first_claimed_at, NOW()),\n            last_resume_attempt_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n          AND (\n              (\n                  status = 'pending'\n                  AND (runnable_at IS NULL OR runnable_at <= NOW())\n              )\n              OR (\n                  status = 'running'\n                  AND updated_at < NOW() - INTERVAL '15 minutes'\n              )\n          )\n        RETURNING\n            id,\n            name,\n            args,\n            status,\n            current_step,\n            result,\n            error,\n            error_code,\n            retry_count,\n            max_retries,\n            max_duration_ms,\n            first_claimed_at,\n            handler_started_at,\n            last_resume_attempt_at,\n            runnable_at,\n            started_at,\n            updated_at,\n            completed_at,\n            user_id\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function getWorkflowStep(db, workflowId, stepName) {\n    const result = await db.execute(sql `\n        SELECT\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        FROM _gencow_workflow_steps\n        WHERE workflow_id = ${workflowId}\n          AND step_name = ${stepName}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function claimWorkflowEvent(db, workflowId, eventName) {\n    const selectResult = await db.execute(sql `\n        SELECT id, payload\n        FROM _gencow_workflow_events\n        WHERE workflow_id = ${workflowId}\n          AND event_name = ${eventName}\n          AND consumed_at IS NULL\n        ORDER BY received_at ASC, id ASC\n        LIMIT 1\n    `);\n    const row = rowsFromResult(selectResult)[0] ?? null;\n    if (!row)\n        return null;\n    await db.execute(sql `\n        UPDATE _gencow_workflow_events\n        SET consumed_at = NOW()\n        WHERE id = ${row.id}\n    `);\n    return row;\n}\nexport async function markWorkflowFailed(db, workflowId, error, retryCount, errorCode = null) {\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'failed',\n            error = ${error},\n            error_code = ${errorCode},\n            runnable_at = NULL,\n            retry_count = ${retryCount},\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function markWorkflowCompleted(db, workflowId, result, persistedResult) {\n    const persisted = persistedResult ?? serializeWorkflowValue(result);\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'completed',\n            result = ${JSON.stringify(persisted)}::jsonb,\n            error = NULL,\n            error_code = NULL,\n            runnable_at = NULL,\n            current_step = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function markWorkflowPendingAtStep(db, workflowId, stepName) {\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'pending',\n            current_step = ${stepName},\n            error = NULL,\n            error_code = NULL,\n            runnable_at = NULL,\n            updated_at = NOW(),\n            completed_at = NULL\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function requeueWorkflow(db, workflowId, retryCount, error, errorCode = null, retryAfterMs = null) {\n    const runnableAt = retryAfterMs == null ? sql `NULL` : sql `NOW() + (${retryAfterMs} * INTERVAL '1 millisecond')`;\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'pending',\n            retry_count = ${retryCount},\n            error = ${error},\n            error_code = ${errorCode},\n            runnable_at = ${runnableAt},\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function markWorkflowHandlerStarted(db, workflowId, startedAt) {\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            handler_started_at = COALESCE(handler_started_at, ${startedAt}::timestamptz),\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function requeueWorkflowBeforeFirstStep(db, workflowId, retryCount, error, errorCode, retryAfterMs = null) {\n    const runnableAt = retryAfterMs == null ? sql `NULL` : sql `NOW() + (${retryAfterMs} * INTERVAL '1 millisecond')`;\n    await db.execute(sql `\n        UPDATE _gencow_workflows\n        SET\n            status = 'pending',\n            retry_count = ${retryCount},\n            current_step = NULL,\n            handler_started_at = NULL,\n            error = ${error},\n            error_code = ${errorCode},\n            runnable_at = ${runnableAt},\n            updated_at = NOW()\n        WHERE id = ${workflowId}\n    `);\n}\nexport async function markWorkflowSleepStepPending(db, workflowId, stepName, sleepState) {\n    const persisted = serializeWorkflowValue(sleepState);\n    await db.execute(sql `\n        INSERT INTO _gencow_workflow_steps (\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        )\n        VALUES (\n            ${workflowId},\n            ${stepName},\n            'pending',\n            ${JSON.stringify(persisted)}::jsonb,\n            NULL,\n            NOW(),\n            NOW(),\n            NULL\n        )\n        ON CONFLICT (workflow_id, step_name)\n        DO UPDATE SET\n            status = 'pending',\n            output = ${JSON.stringify(persisted)}::jsonb,\n            error = NULL,\n            started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n            updated_at = NOW(),\n            completed_at = NULL\n    `);\n}\nexport async function markWorkflowSleepStepCompleted(db, workflowId, stepName, sleepState) {\n    const persisted = serializeWorkflowValue(sleepState);\n    await db.execute(sql `\n        INSERT INTO _gencow_workflow_steps (\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        )\n        VALUES (\n            ${workflowId},\n            ${stepName},\n            'completed',\n            ${JSON.stringify(persisted)}::jsonb,\n            NULL,\n            NOW(),\n            NOW(),\n            NOW()\n        )\n        ON CONFLICT (workflow_id, step_name)\n        DO UPDATE SET\n            status = 'completed',\n            output = ${JSON.stringify(persisted)}::jsonb,\n            error = NULL,\n            started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n            updated_at = NOW(),\n            completed_at = NOW()\n    `);\n}\nexport async function markWorkflowWaitStepPending(db, workflowId, stepName, waitState) {\n    const persisted = serializeWorkflowValue(waitState);\n    await db.execute(sql `\n        INSERT INTO _gencow_workflow_steps (\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        )\n        VALUES (\n            ${workflowId},\n            ${stepName},\n            'pending',\n            ${JSON.stringify(persisted)}::jsonb,\n            NULL,\n            NOW(),\n            NOW(),\n            NULL\n        )\n        ON CONFLICT (workflow_id, step_name)\n        DO UPDATE SET\n            status = 'pending',\n            output = ${JSON.stringify(persisted)}::jsonb,\n            error = NULL,\n            started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n            updated_at = NOW(),\n            completed_at = NULL\n    `);\n}\nexport async function markWorkflowWaitStepCompleted(db, workflowId, stepName, payload) {\n    const persisted = serializeWorkflowValue(payload);\n    await db.execute(sql `\n        INSERT INTO _gencow_workflow_steps (\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        )\n        VALUES (\n            ${workflowId},\n            ${stepName},\n            'completed',\n            ${JSON.stringify(persisted)}::jsonb,\n            NULL,\n            NOW(),\n            NOW(),\n            NOW()\n        )\n        ON CONFLICT (workflow_id, step_name)\n        DO UPDATE SET\n            status = 'completed',\n            output = ${JSON.stringify(persisted)}::jsonb,\n            error = NULL,\n            started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n            updated_at = NOW(),\n            completed_at = NOW()\n    `);\n}\nexport async function markWorkflowWaitStepFailed(db, workflowId, stepName, error) {\n    await db.execute(sql `\n        INSERT INTO _gencow_workflow_steps (\n            workflow_id,\n            step_name,\n            status,\n            output,\n            error,\n            started_at,\n            updated_at,\n            completed_at\n        )\n        VALUES (\n            ${workflowId},\n            ${stepName},\n            'failed',\n            NULL,\n            ${error},\n            NOW(),\n            NOW(),\n            NULL\n        )\n        ON CONFLICT (workflow_id, step_name)\n        DO UPDATE SET\n            status = 'failed',\n            output = _gencow_workflow_steps.output,\n            error = ${error},\n            started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n            updated_at = NOW(),\n            completed_at = NULL\n    `);\n}\nexport async function listRecoverableWorkflows(db) {\n    const result = await db.execute(sql `\n        SELECT\n            id,\n            name,\n            CASE\n                WHEN status = 'pending'\n                 AND runnable_at IS NOT NULL\n                 AND runnable_at > NOW()\n                THEN CEIL(EXTRACT(EPOCH FROM (runnable_at - NOW())) * 1000)::int\n                ELSE 0\n            END AS retry_delay_ms\n        FROM _gencow_workflows\n        WHERE status = 'pending'\n           OR (\n               status = 'running'\n               AND updated_at < NOW() - INTERVAL '15 minutes'\n           )\n        ORDER BY started_at ASC\n        LIMIT 100\n    `);\n    return rowsFromResult(result).map((row) => ({\n        id: row.id,\n        name: row.name,\n        retryDelayMs: Math.max(0, Number(row.retry_delay_ms) || 0),\n    }));\n}\n", "'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar findWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('find', TypeError);\n\n// `Iterator.prototype.find` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.find\n$({ target: 'Iterator', proto: true, real: true, forced: findWithoutClosingOnEarlyError }, {\n  find: function find(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (findWithoutClosingOnEarlyError) return call(findWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop(value);\n    }, { IS_RECORD: true, INTERRUPTED: true }).result;\n  }\n});\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n", "'use strict';\nmodule.exports = {};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anUint8Array = require('../internals/an-uint8-array');\nvar notDetached = require('../internals/array-buffer-not-detached');\n\nvar numberToString = uncurryThis(1.1.toString);\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.toHex || !(function () {\n  try {\n    var target = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255]);\n    return target.toHex() === 'ffffffffffffffff';\n  } catch (error) {\n    return false;\n  }\n})();\n\n// `Uint8Array.prototype.toHex` method\n// https://github.com/tc39/proposal-arraybuffer-base64\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  toHex: function toHex() {\n    anUint8Array(this);\n    notDetached(this.buffer);\n    var result = '';\n    for (var i = 0, length = this.length; i < length; i++) {\n      var hex = numberToString(this[i], 16);\n      result += hex.length === 1 ? '0' + hex : hex;\n    }\n    return result;\n  }\n});\n", "'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar getIteratorFlattenable = require('../internals/get-iterator-flattenable');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorClose = require('../internals/iterator-close');\nvar IS_PURE = require('../internals/is-pure');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE\n  && !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });\nvar flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);\n\nvar FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var mapper = this.mapper;\n  var result, inner;\n\n  while (true) {\n    if (inner = this.inner) try {\n      result = anObject(call(inner.next, inner.iterator));\n      if (!result.done) return result.value;\n      this.inner = null;\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n\n    result = anObject(call(this.next, iterator));\n\n    if (this.done = !!result.done) return;\n\n    try {\n      this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false);\n    } catch (error) { iteratorClose(iterator, 'throw', error); }\n  }\n});\n\n// `Iterator.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.flatmap\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  flatMap: function flatMap(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (flatMapWithoutClosingOnEarlyError) return call(flatMapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper,\n      inner: null\n    });\n  }\n});\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n", "'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n", "'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw new $TypeError('Incorrect invocation');\n};\n", "'use strict';\n// Should throw an error on invalid iterator\n// https://issues.chromium.org/issues/336839115\nmodule.exports = function (methodName, argument) {\n  // eslint-disable-next-line es/no-iterator -- required for testing\n  var method = typeof Iterator == 'function' && Iterator.prototype[methodName];\n  if (method) try {\n    method.call({ next: null }, argument).next();\n  } catch (error) {\n    return true;\n  }\n};\n", "'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n", "'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n", "'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (options) {\n  var alphabet = options && options.alphabet;\n  if (alphabet === undefined || alphabet === 'base64' || alphabet === 'base64url') return alphabet || 'base64';\n  throw new $TypeError('Incorrect `alphabet` option');\n};\n", "'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n", "'use strict';\nmodule.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n", "'use strict';\nvar classof = require('../internals/classof');\n\nmodule.exports = function (it) {\n  var klass = classof(it);\n  return klass === 'BigInt64Array' || klass === 'BigUint64Array';\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar everyWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('every', TypeError);\n\n// `Iterator.prototype.every` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.every\n$({ target: 'Iterator', proto: true, real: true, forced: everyWithoutClosingOnEarlyError }, {\n  every: function every(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (everyWithoutClosingOnEarlyError) return call(everyWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return !iterate(record, function (value, stop) {\n      if (!predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n", "'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n", "'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n", "'use strict';\nvar iteratorClose = require('../internals/iterator-close');\n\nmodule.exports = function (iters, kind, value) {\n  for (var i = iters.length - 1; i >= 0; i--) {\n    if (iters[i] === undefined) continue;\n    try {\n      value = iteratorClose(iters[i].iterator, kind, value);\n    } catch (error) {\n      kind = 'throw';\n      value = error;\n    }\n  }\n  if (kind === 'throw') throw value;\n  return value;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar V8 = require('../internals/environment-v8-version');\nvar ENVIRONMENT = require('../internals/environment');\n\nvar structuredClone = globalThis.structuredClone;\n\nmodule.exports = !!structuredClone && !fails(function () {\n  // prevent V8 ArrayBufferDetaching protector cell invalidation and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if ((ENVIRONMENT === 'DENO' && V8 > 92) || (ENVIRONMENT === 'NODE' && V8 > 94) || (ENVIRONMENT === 'BROWSER' && V8 > 97)) return false;\n  var buffer = new ArrayBuffer(8);\n  var clone = structuredClone(buffer, { transfer: [buffer] });\n  return buffer.byteLength !== 0 || clone.byteLength !== 8;\n});\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.uint8-array.set-from-base64');\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar slice = require('../internals/array-slice');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar aCallable = require('../internals/a-callable');\nvar perform = require('../internals/perform');\n\nvar Promise = globalThis.Promise;\n\nvar ACCEPT_ARGUMENTS = false;\n// Avoiding the use of polyfills of the previous iteration of this proposal\n// that does not accept arguments of the callback\nvar FORCED = !Promise || !Promise['try'] || perform(function () {\n  Promise['try'](function (argument) {\n    ACCEPT_ARGUMENTS = argument === 8;\n  }, 8);\n}).error || !ACCEPT_ARGUMENTS;\n\n// `Promise.try` method\n// https://tc39.es/ecma262/#sec-promise.try\n$({ target: 'Promise', stat: true, forced: FORCED }, {\n  'try': function (callbackfn /* , ...args */) {\n    var args = arguments.length > 1 ? slice(arguments, 1) : [];\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    var result = perform(function () {\n      return apply(aCallable(callbackfn), undefined, args);\n    });\n    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n    return promiseCapability.promise;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  union: union\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('map', function () { /* empty */ });\nvar mapWithoutClosingOnEarlyError = !IS_PURE && !MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('map', TypeError);\n\nvar FORCED = IS_PURE || MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || mapWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);\n});\n\n// `Iterator.prototype.map` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.map\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  map: function map(mapper) {\n    anObject(this);\n    try {\n      aCallable(mapper);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (mapWithoutClosingOnEarlyError) return call(mapWithoutClosingOnEarlyError, this, mapper);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      mapper: mapper\n    });\n  }\n});\n", "'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/ecma262/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n", "'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n  return defineProperty.f(target, name, descriptor);\n};\n", "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = globalThis.Uint8Array;\nvar SyntaxError = globalThis.SyntaxError;\nvar parseInt = globalThis.parseInt;\nvar min = Math.min;\nvar NOT_HEX = /[^\\da-f]/i;\nvar exec = uncurryThis(NOT_HEX.exec);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (string, into) {\n  var stringLength = string.length;\n  if (stringLength % 2 !== 0) throw new SyntaxError('String should be an even number of characters');\n  var maxLength = into ? min(into.length, stringLength / 2) : stringLength / 2;\n  var bytes = into || new Uint8Array(maxLength);\n  var read = 0;\n  var written = 0;\n  while (written < maxLength) {\n    var hexits = stringSlice(string, read, read += 2);\n    if (exec(NOT_HEX, hexits)) throw new SyntaxError('String should only contain hex characters');\n    bytes[written++] = parseInt(hexits, 16);\n  }\n  return { bytes: bytes, read: read };\n};\n", "'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSupersetOf: isSupersetOf\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar IS_PURE = require('../internals/is-pure');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('filter', function () { /* empty */ });\nvar filterWithoutClosingOnEarlyError = !IS_PURE && !FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('filter', TypeError);\n\nvar FORCED = IS_PURE || FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR || filterWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var predicate = this.predicate;\n  var next = this.next;\n  var result, done, value;\n  while (true) {\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n    value = result.value;\n    if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;\n  }\n});\n\n// `Iterator.prototype.filter` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.filter\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  filter: function filter(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (filterWithoutClosingOnEarlyError) return call(filterWithoutClosingOnEarlyError, this, predicate);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      predicate: predicate\n    });\n  }\n});\n", "'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n  return { value: value, done: done };\n};\n", "'use strict';\nvar toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n", "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal');\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n", "'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value === POLYFILL ? true\n    : value === NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n", "'use strict';\nvar commonAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nvar base64Alphabet = commonAlphabet + '+/';\nvar base64UrlAlphabet = commonAlphabet + '-_';\n\nvar inverse = function (characters) {\n  // TODO: use `Object.create(null)` in `core-js@4`\n  var result = {};\n  var index = 0;\n  for (; index < 64; index++) result[characters.charAt(index)] = index;\n  return result;\n};\n\nmodule.exports = {\n  i2c: base64Alphabet,\n  c2i: inverse(base64Alphabet),\n  i2cUrl: base64UrlAlphabet,\n  c2iUrl: inverse(base64UrlAlphabet)\n};\n", "'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw new $TypeError('Not enough arguments');\n  return passed;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n", "'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n", "'use strict';\n// based on Shewchuk's algorithm for exactly floating point addition\n// adapted from https://github.com/tc39/proposal-math-sum/blob/3513d58323a1ae25560e8700aa5294500c6c9287/polyfill/polyfill.mjs\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterate = require('../internals/iterate');\n\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar $Infinity = Infinity;\nvar $NaN = NaN;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar push = uncurryThis([].push);\n\nvar POW_2_1023 = pow(2, 1023);\nvar MAX_SAFE_INTEGER = pow(2, 53) - 1; // 2 ** 53 - 1 === 9007199254740992\nvar MAX_DOUBLE = Number.MAX_VALUE; // 2 ** 1024 - 2 ** (1023 - 52) === 1.79769313486231570815e+308\nvar MAX_ULP = pow(2, 971); // 2 ** (1023 - 52) === 1.99584030953471981166e+292\n\nvar NOT_A_NUMBER = {};\nvar MINUS_INFINITY = {};\nvar PLUS_INFINITY = {};\nvar MINUS_ZERO = {};\nvar FINITE = {};\n\n// prerequisite: abs(x) >= abs(y)\nvar twosum = function (x, y) {\n  var hi = x + y;\n  var lo = y - (hi - x);\n  return { hi: hi, lo: lo };\n};\n\n// `Math.sumPrecise` method\n// https://github.com/tc39/proposal-math-sum\n$({ target: 'Math', stat: true }, {\n  // eslint-disable-next-line max-statements -- ok\n  sumPrecise: function sumPrecise(items) {\n    var numbers = [];\n    var count = 0;\n    var state = MINUS_ZERO;\n\n    iterate(items, function (n) {\n      if (++count >= MAX_SAFE_INTEGER) throw new $RangeError('Maximum allowed index exceeded');\n      if (typeof n != 'number') throw new $TypeError('Value is not a number');\n      if (state !== NOT_A_NUMBER) {\n        // eslint-disable-next-line no-self-compare -- NaN check\n        if (n !== n) state = NOT_A_NUMBER;\n        else if (n === $Infinity) state = state === MINUS_INFINITY ? NOT_A_NUMBER : PLUS_INFINITY;\n        else if (n === -$Infinity) state = state === PLUS_INFINITY ? NOT_A_NUMBER : MINUS_INFINITY;\n        else if ((n !== 0 || (1 / n) === $Infinity) && (state === MINUS_ZERO || state === FINITE)) {\n          state = FINITE;\n          push(numbers, n);\n        }\n      }\n    });\n\n    switch (state) {\n      case NOT_A_NUMBER: return $NaN;\n      case MINUS_INFINITY: return -$Infinity;\n      case PLUS_INFINITY: return $Infinity;\n      case MINUS_ZERO: return -0;\n    }\n\n    var partials = [];\n    var overflow = 0; // conceptually 2 ** 1024 times this value; the final partial is biased by this amount\n    var x, y, sum, hi, lo, tmp;\n\n    for (var i = 0; i < numbers.length; i++) {\n      x = numbers[i];\n      var actuallyUsedPartials = 0;\n      for (var j = 0; j < partials.length; j++) {\n        y = partials[j];\n        if (abs(x) < abs(y)) {\n          tmp = x;\n          x = y;\n          y = tmp;\n        }\n        sum = twosum(x, y);\n        hi = sum.hi;\n        lo = sum.lo;\n        if (abs(hi) === $Infinity) {\n          var sign = hi === $Infinity ? 1 : -1;\n          overflow += sign;\n\n          x = (x - (sign * POW_2_1023)) - (sign * POW_2_1023);\n          if (abs(x) < abs(y)) {\n            tmp = x;\n            x = y;\n            y = tmp;\n          }\n          sum = twosum(x, y);\n          hi = sum.hi;\n          lo = sum.lo;\n        }\n        if (lo !== 0) partials[actuallyUsedPartials++] = lo;\n        x = hi;\n      }\n      partials.length = actuallyUsedPartials;\n      if (x !== 0) push(partials, x);\n    }\n\n    // compute the exact sum of partials, stopping once we lose precision\n    var n = partials.length - 1;\n    hi = 0;\n    lo = 0;\n\n    if (overflow !== 0) {\n      var next = n >= 0 ? partials[n] : 0;\n      n--;\n      if (abs(overflow) > 1 || (overflow > 0 && next > 0) || (overflow < 0 && next < 0)) {\n        return overflow > 0 ? $Infinity : -$Infinity;\n      }\n      // here we actually have to do the arithmetic\n      // drop a factor of 2 so we can do it without overflow\n      // assert(abs(overflow) === 1)\n      sum = twosum(overflow * POW_2_1023, next / 2);\n      hi = sum.hi;\n      lo = sum.lo;\n      lo *= 2;\n      if (abs(2 * hi) === $Infinity) {\n        // rounding to the maximum value\n        if (hi > 0) {\n          return (hi === POW_2_1023 && lo === -(MAX_ULP / 2) && n >= 0 && partials[n] < 0) ? MAX_DOUBLE : $Infinity;\n        } return (hi === -POW_2_1023 && lo === (MAX_ULP / 2) && n >= 0 && partials[n] > 0) ? -MAX_DOUBLE : -$Infinity;\n      }\n\n      if (lo !== 0) {\n        partials[++n] = lo;\n        lo = 0;\n      }\n\n      hi *= 2;\n    }\n\n    while (n >= 0) {\n      sum = twosum(hi, partials[n--]);\n      hi = sum.hi;\n      lo = sum.lo;\n      if (lo !== 0) break;\n    }\n\n    if (n >= 0 && ((lo < 0 && partials[n] < 0) || (lo > 0 && partials[n] > 0))) {\n      y = lo * 2;\n      x = hi + y;\n      if (y === x - hi) hi = x;\n    }\n\n    return hi;\n  }\n});\n", "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar arrayBufferByteLength = require('../internals/array-buffer-byte-length');\n\nvar DataView = globalThis.DataView;\n\nmodule.exports = function (O) {\n  if (!NATIVE_ARRAY_BUFFER || arrayBufferByteLength(O) !== 0) return false;\n  try {\n    // eslint-disable-next-line no-new -- thrower\n    new DataView(O);\n    return false;\n  } catch (error) {\n    return true;\n  }\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.1.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(result, e)) remove(result, e);\n  });\n  return result;\n};\n", "'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'string') return argument;\n  throw new $TypeError('Argument is not a string');\n};\n", "'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar someWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('some', TypeError);\n\n// `Iterator.prototype.some` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.some\n$({ target: 'Iterator', proto: true, real: true, forced: someWithoutClosingOnEarlyError }, {\n  some: function some(predicate) {\n    anObject(this);\n    try {\n      aCallable(predicate);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (someWithoutClosingOnEarlyError) return call(someWithoutClosingOnEarlyError, this, predicate);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    return iterate(record, function (value, stop) {\n      if (predicate(value, counter++)) return stop();\n    }, { IS_RECORD: true, INTERRUPTED: true }).stopped;\n  }\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n", "'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n", "'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n", "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isDisjointFrom: isDisjointFrom\n});\n", "'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n", "'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (argument === undefined || isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object or undefined');\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n  return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).push();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  push: function push(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    doesNotExceedSafeInteger(len + argCount);\n    for (var i = 0; i < argCount; i++) {\n      O[len] = arguments[i];\n      len++;\n    }\n    setArrayLength(O, len);\n    return len;\n  }\n});\n", "'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n", "'use strict';\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (it === it) return it;\n  throw new $RangeError('NaN is not allowed');\n};\n", "'use strict';\nvar classof = require('../internals/classof');\n\nvar $TypeError = TypeError;\n\n// Perform ? RequireInternalSlot(argument, [[TypedArrayName]])\n// If argument.[[TypedArrayName]] is not \"Uint8Array\", throw a TypeError exception\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Uint8Array') return argument;\n  throw new $TypeError('Argument is not an Uint8Array');\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n", "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n", "'use strict';\n/* global Bun, Deno -- detection */\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\nvar classof = require('../internals/classof-raw');\n\nvar userAgentStartsWith = function (string) {\n  return userAgent.slice(0, string.length) === string;\n};\n\nmodule.exports = (function () {\n  if (userAgentStartsWith('Bun/')) return 'BUN';\n  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n  if (userAgentStartsWith('Deno/')) return 'DENO';\n  if (userAgentStartsWith('Node.js/')) return 'NODE';\n  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n  if (classof(globalThis.process) === 'process') return 'NODE';\n  if (globalThis.window && globalThis.document) return 'BROWSER';\n  return 'REST';\n})();\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar aString = require('../internals/a-string');\nvar anUint8Array = require('../internals/an-uint8-array');\nvar notDetached = require('../internals/array-buffer-not-detached');\nvar $fromHex = require('../internals/uint8-from-hex');\n\n// `Uint8Array.prototype.setFromHex` method\n// https://github.com/tc39/proposal-arraybuffer-base64\nif (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true }, {\n  setFromHex: function setFromHex(string) {\n    anUint8Array(this);\n    aString(string);\n    notDetached(this.buffer);\n    var read = $fromHex(string, this).read;\n    return { read: read, written: read / 2 };\n  }\n});\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.math.sum-precise');\n", "'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n", "'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) === 'Array';\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-set -- safe\n  Set: Set,\n  add: uncurryThis(SetPrototype.add),\n  has: uncurryThis(SetPrototype.has),\n  remove: uncurryThis(SetPrototype['delete']),\n  proto: SetPrototype\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar getBuiltInNodeModule = require('../internals/get-built-in-node-module');\nvar PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-proper-transfer');\n\nvar structuredClone = globalThis.structuredClone;\nvar $ArrayBuffer = globalThis.ArrayBuffer;\nvar $MessageChannel = globalThis.MessageChannel;\nvar detach = false;\nvar WorkerThreads, channel, buffer, $detach;\n\nif (PROPER_STRUCTURED_CLONE_TRANSFER) {\n  detach = function (transferable) {\n    structuredClone(transferable, { transfer: [transferable] });\n  };\n} else if ($ArrayBuffer) try {\n  if (!$MessageChannel) {\n    WorkerThreads = getBuiltInNodeModule('worker_threads');\n    if (WorkerThreads) $MessageChannel = WorkerThreads.MessageChannel;\n  }\n\n  if ($MessageChannel) {\n    channel = new $MessageChannel();\n    buffer = new $ArrayBuffer(2);\n\n    $detach = function (transferable) {\n      channel.port1.postMessage(null, [transferable]);\n    };\n\n    if (buffer.byteLength === 2) {\n      $detach(buffer);\n      if (buffer.byteLength === 0) detach = $detach;\n    }\n  }\n} catch (error) { /* empty */ }\n\nmodule.exports = detach;\n", "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n  // makes no sense without proper strict mode support\n  if (this !== undefined) return true;\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).length = 1;\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n    throw new $TypeError('Cannot set read only .length');\n  } return O.length = length;\n} : function (O, length) {\n  return O.length = length;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\n\n// https://github.com/tc39/ecma262/pull/3467\nmodule.exports = function (METHOD_NAME, ExpectedError) {\n  var Iterator = globalThis.Iterator;\n  var IteratorPrototype = Iterator && Iterator.prototype;\n  var method = IteratorPrototype && IteratorPrototype[METHOD_NAME];\n\n  var CLOSED = false;\n\n  if (method) try {\n    method.call({\n      next: function () { return { done: true }; },\n      'return': function () { CLOSED = true; }\n    }, -1);\n  } catch (error) {\n    // https://bugs.webkit.org/show_bug.cgi?id=291195\n    if (!(error instanceof ExpectedError)) CLOSED = false;\n  }\n\n  if (!CLOSED) return method;\n};\n", "'use strict';\nvar check = function (it) {\n  return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n", "'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar $URLSearchParams = URLSearchParams;\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\nvar append = uncurryThis(URLSearchParamsPrototype.append);\nvar $delete = uncurryThis(URLSearchParamsPrototype['delete']);\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\nvar push = uncurryThis([].push);\nvar params = new $URLSearchParams('a=1&a=2&b=3');\n\nparams['delete']('a', 1);\n// `undefined` case is a Chromium 117 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\nparams['delete']('b', undefined);\n\nif (params + '' !== 'a=2') {\n  defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {\n    var length = arguments.length;\n    var $value = length < 2 ? undefined : arguments[1];\n    if (length && $value === undefined) return $delete(this, name);\n    var entries = [];\n    forEach(this, function (v, k) { // also validates `this`\n      push(entries, { key: k, value: v });\n    });\n    validateArgumentsLength(length, 1);\n    var key = toString(name);\n    var value = toString($value);\n    var index = 0;\n    var dindex = 0;\n    var found = false;\n    var entriesLength = entries.length;\n    var entry;\n    while (index < entriesLength) {\n      entry = entries[index++];\n      if (found || entry.key === key) {\n        found = true;\n        $delete(this, entry.key);\n      } else dindex++;\n    }\n    while (dindex < entriesLength) {\n      entry = entries[dindex++];\n      if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);\n    }\n  }, { enumerable: true, unsafe: true });\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\n// `Promise.withResolvers` method\n// https://tc39.es/ecma262/#sec-promise.withResolvers\n$({ target: 'Promise', stat: true }, {\n  withResolvers: function withResolvers() {\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    return {\n      promise: promiseCapability.promise,\n      resolve: promiseCapability.resolve,\n      reject: promiseCapability.reject\n    };\n  }\n});\n", "'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = globalThis.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = globalThis.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = globalThis.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(globalThis.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n  var proto = getPrototypeOf(it);\n  if (!isObject(proto)) return;\n  var state = getInternalState(proto);\n  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw new TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw new TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {\n      // old WebKit bug - some methods are non-configurable\n      try {\n        TypedArrayConstructor.prototype[KEY] = property;\n      } catch (error2) { /* empty */ }\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = globalThis[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) { /* empty */ }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = globalThis[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      defineBuiltIn(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n  else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = globalThis[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw new TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQUIRED = true;\n  defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n    configurable: true,\n    get: function () {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\n  });\n  for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {\n    createNonEnumerableProperty(globalThis[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  getTypedArrayConstructor: getTypedArrayConstructor,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n", "'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return false;\n    },\n    keys: function () {\n      return {\n        next: function () {\n          return { done: true };\n        }\n      };\n    }\n  };\n};\n\nvar createSetLikeWithInfinitySize = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return true;\n    },\n    keys: function () {\n      throw new Error('e');\n    }\n  };\n};\n\nmodule.exports = function (name, callback) {\n  var Set = getBuiltIn('Set');\n  try {\n    new Set()[name](createSetLike(0));\n    try {\n      // late spec change, early WebKit ~ Safari 17 implementation does not pass it\n      // https://github.com/tc39/proposal-set-methods/pull/88\n      // also covered engines with\n      // https://bugs.webkit.org/show_bug.cgi?id=272679\n      new Set()[name](createSetLike(-1));\n      return false;\n    } catch (error2) {\n      if (!callback) return true;\n      // early V8 implementation bug\n      // https://issues.chromium.org/issues/351332634\n      try {\n        new Set()[name](createSetLikeWithInfinitySize(-Infinity));\n        return false;\n      } catch (error) {\n        var set = new Set();\n        set.add(1);\n        set.add(2);\n        return callback(set[name](createSetLikeWithInfinitySize(Infinity)));\n      }\n    }\n  } catch (error) {\n    return false;\n  }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar notANaN = require('../internals/not-a-nan');\nvar toPositiveInteger = require('../internals/to-positive-integer');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar takeWithoutClosingOnEarlyError = !IS_PURE && iteratorHelperWithoutClosingOnEarlyError('take', RangeError);\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  if (!this.remaining--) {\n    this.done = true;\n    return iteratorClose(iterator, 'normal', undefined);\n  }\n  var result = anObject(call(this.next, iterator));\n  var done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.take` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.take\n$({ target: 'Iterator', proto: true, real: true, forced: IS_PURE || takeWithoutClosingOnEarlyError }, {\n  take: function take(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (takeWithoutClosingOnEarlyError) return call(takeWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar getBuiltIn = require('../internals/get-built-in');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar anInstance = require('../internals/an-instance');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar DOMExceptionConstants = require('../internals/dom-exception-constants');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar DOM_EXCEPTION = 'DOMException';\nvar Error = getBuiltIn('Error');\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION);\n\nvar $DOMException = function DOMException() {\n  anInstance(this, DOMExceptionPrototype);\n  var argumentsLength = arguments.length;\n  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\n  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\n  var that = new NativeDOMException(message, name);\n  var error = new Error(message);\n  error.name = DOM_EXCEPTION;\n  defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\n  inheritIfRequired(that, this, $DOMException);\n  return that;\n};\n\nvar DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;\n\nvar ERROR_HAS_STACK = 'stack' in new Error(DOM_EXCEPTION);\nvar DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(globalThis, DOM_EXCEPTION);\n\n// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it\n// https://github.com/Jarred-Sumner/bun/issues/399\nvar BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);\n\nvar FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;\n\n// `DOMException` constructor patch for `.stack` where it's required\n// https://webidl.spec.whatwg.org/#es-DOMException-specialness\n$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic\n  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\n});\n\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\n\nif (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {\n  if (!IS_PURE) {\n    defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));\n  }\n\n  for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\n    var constant = DOMExceptionConstants[key];\n    var constantName = constant.s;\n    if (!hasOwn(PolyfilledDOMException, constantName)) {\n      defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));\n    }\n  }\n}\n", "'use strict';\nmodule.exports = {\n  IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },\n  DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },\n  HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },\n  WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },\n  InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },\n  NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },\n  NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },\n  NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },\n  NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },\n  InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },\n  InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },\n  SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },\n  InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },\n  NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },\n  InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },\n  ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },\n  TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },\n  SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },\n  NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },\n  AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },\n  URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },\n  QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },\n  TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },\n  InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },\n  DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  symmetricDifference: symmetricDifference\n});\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n", "'use strict';\nvar isDetached = require('../internals/array-buffer-is-detached');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n  if (isDetached(it)) throw new $TypeError('ArrayBuffer is detached');\n  return it;\n};\n", "'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n  return set.size;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar $fromBase64 = require('../internals/uint8-from-base64');\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.fromBase64 || !function () {\n  // Webkit not throw an error on odd length string\n  try {\n    Uint8Array.fromBase64('a');\n    return;\n  } catch (error) { /* empty */ }\n  try {\n    Uint8Array.fromBase64('', null);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `Uint8Array.fromBase64` method\n// https://github.com/tc39/proposal-arraybuffer-base64\nif (Uint8Array) $({ target: 'Uint8Array', stat: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  fromBase64: function fromBase64(string /* , options */) {\n    var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, null, 0x1FFFFFFFFFFFFF);\n    return arrayFromConstructorAndList(Uint8Array, result.bytes);\n  }\n});\n", "'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list, $length) {\n  var index = 0;\n  var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n", "'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.uint8-array.to-hex');\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar toIndex = require('../internals/to-index');\nvar notDetached = require('../internals/array-buffer-not-detached');\nvar arrayBufferByteLength = require('../internals/array-buffer-byte-length');\nvar detachTransferable = require('../internals/detach-transferable');\nvar PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-proper-transfer');\n\nvar structuredClone = globalThis.structuredClone;\nvar ArrayBuffer = globalThis.ArrayBuffer;\nvar DataView = globalThis.DataView;\nvar min = Math.min;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataViewPrototype = DataView.prototype;\nvar slice = uncurryThis(ArrayBufferPrototype.slice);\nvar isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get');\nvar maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get');\nvar getInt8 = uncurryThis(DataViewPrototype.getInt8);\nvar setInt8 = uncurryThis(DataViewPrototype.setInt8);\n\nmodule.exports = (PROPER_STRUCTURED_CLONE_TRANSFER || detachTransferable) && function (arrayBuffer, newLength, preserveResizability) {\n  var byteLength = arrayBufferByteLength(arrayBuffer);\n  var newByteLength = newLength === undefined ? byteLength : toIndex(newLength);\n  var fixedLength = !isResizable || !isResizable(arrayBuffer);\n  var newBuffer;\n  notDetached(arrayBuffer);\n  if (PROPER_STRUCTURED_CLONE_TRANSFER) {\n    arrayBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] });\n    if (byteLength === newByteLength && (preserveResizability || fixedLength)) return arrayBuffer;\n  }\n  if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) {\n    newBuffer = slice(arrayBuffer, 0, newByteLength);\n  } else {\n    var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(arrayBuffer) } : undefined;\n    newBuffer = new ArrayBuffer(newByteLength, options);\n    var a = new DataView(arrayBuffer);\n    var b = new DataView(newBuffer);\n    var copyLength = min(newByteLength, byteLength);\n    for (var i = 0; i < copyLength; i++) setInt8(b, i, getInt8(a, i));\n  }\n  if (!PROPER_STRUCTURED_CLONE_TRANSFER) detachTransferable(arrayBuffer);\n  return newBuffer;\n};\n", "'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar toString = require('../internals/to-string');\nvar USE_NATIVE_URL = require('../internals/url-constructor-detection');\n\nvar URL = getBuiltIn('URL');\n\n// `URL.parse` method\n// https://url.spec.whatwg.org/#dom-url-canparse\n$({ target: 'URL', stat: true, forced: !USE_NATIVE_URL }, {\n  parse: function parse(url) {\n    var length = validateArgumentsLength(arguments.length, 1);\n    var urlString = toString(url);\n    var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);\n    try {\n      return new URL(urlString, base);\n    } catch (error) {\n      return null;\n    }\n  }\n});\n", "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n  var prim = toPrimitive(argument, 'number');\n  if (typeof prim == 'number') throw new $TypeError(\"Can't convert number to bigint\");\n  // eslint-disable-next-line es/no-bigint -- safe\n  return BigInt(prim);\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {\n  return result;\n});\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSubsetOf: isSubsetOf\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n", "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n", "'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n", "'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n", "'use strict';\nvar ENVIRONMENT = require('../internals/environment');\n\nmodule.exports = ENVIRONMENT === 'NODE';\n", "'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n", "'use strict';\nmodule.exports = {};\n", "'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) defineBuiltIn(target, key, src[key], options);\n  return target;\n};\n", "'use strict';\nvar anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n", "'use strict';\nmodule.exports = false;\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = globalThis;\n  } else if (STATIC) {\n    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = globalThis[TARGET] && globalThis[TARGET].prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isDetached = require('../internals/array-buffer-is-detached');\n\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\n\n// `ArrayBuffer.prototype.detached` getter\n// https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.detached\nif (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) {\n  defineBuiltInAccessor(ArrayBufferPrototype, 'detached', {\n    configurable: true,\n    get: function detached() {\n      return isDetached(this);\n    }\n  });\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar $fromBase64 = require('../internals/uint8-from-base64');\nvar anUint8Array = require('../internals/an-uint8-array');\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.setFromBase64 || !function () {\n  var target = new Uint8Array([255, 255, 255, 255, 255]);\n  try {\n    target.setFromBase64('', null);\n    return;\n  } catch (error) { /* empty */ }\n  // Webkit not throw an error on odd length string\n  try {\n    target.setFromBase64('a');\n    return;\n  } catch (error) { /* empty */ }\n  try {\n    target.setFromBase64('MjYyZg===');\n  } catch (error) {\n    return target[0] === 50 && target[1] === 54 && target[2] === 50 && target[3] === 255 && target[4] === 255;\n  }\n}();\n\n// `Uint8Array.prototype.setFromBase64` method\n// https://github.com/tc39/proposal-arraybuffer-base64\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  setFromBase64: function setFromBase64(string /* , options */) {\n    anUint8Array(this);\n\n    var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, this, this.length);\n\n    return { read: result.read, written: result.written };\n  }\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n", "'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n", "'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n", "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n", "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n", "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n", "'use strict';\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n", "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n  !Symbol.sham &&\n  typeof Symbol.iterator == 'symbol';\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n", "'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar classof = require('../internals/classof-raw');\n\nvar ArrayBuffer = globalThis.ArrayBuffer;\nvar TypeError = globalThis.TypeError;\n\n// Includes\n// - Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).\n// - If IsSharedArrayBuffer(O) is true, throw a TypeError exception.\nmodule.exports = ArrayBuffer && uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {\n  if (classof(O) !== 'ArrayBuffer') throw new TypeError('ArrayBuffer expected');\n  return O.byteLength;\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line unicorn/relative-url-style -- required for testing\n  var url = new URL('b?a=1&b=2&c=3', 'https://a');\n  var params = url.searchParams;\n  var params2 = new URLSearchParams('a=1&a=2&b=3');\n  var result = '';\n  url.pathname = 'c%20d';\n  params.forEach(function (value, key) {\n    params['delete']('b');\n    result += key + value;\n  });\n  params2['delete']('a', 2);\n  // `undefined` case is a Chromium 117 bug\n  // https://bugs.chromium.org/p/v8/issues/detail?id=14222\n  params2['delete']('b', undefined);\n  return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))\n    || (!params.size && (IS_PURE || !DESCRIPTORS))\n    || !params.sort\n    || url.href !== 'https://a/c%20d?a=1&c=3'\n    || params.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !params[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('https://тест').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('https://a#б').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('https://x', undefined).host !== 'x';\n});\n", "'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n", "'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar $URLSearchParams = URLSearchParams;\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\nvar getAll = uncurryThis(URLSearchParamsPrototype.getAll);\nvar $has = uncurryThis(URLSearchParamsPrototype.has);\nvar params = new $URLSearchParams('a=1');\n\n// `undefined` case is a Chromium 117 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\nif (params.has('a', 2) || !params.has('a', undefined)) {\n  defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name /* , value */) {\n    var length = arguments.length;\n    var $value = length < 2 ? undefined : arguments[1];\n    if (length && $value === undefined) return $has(this, name);\n    var values = getAll(this, name); // also validates `this`\n    validateArgumentsLength(length, 1);\n    var value = toString($value);\n    var index = 0;\n    while (index < values.length) {\n      if (values[index++] === value) return true;\n    } return false;\n  }, { enumerable: true, unsafe: true });\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\n\nvar forEachWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('forEach', TypeError);\n\n// `Iterator.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.foreach\n$({ target: 'Iterator', proto: true, real: true, forced: forEachWithoutClosingOnEarlyError }, {\n  forEach: function forEach(fn) {\n    anObject(this);\n    try {\n      aCallable(fn);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (forEachWithoutClosingOnEarlyError) return call(forEachWithoutClosingOnEarlyError, this, fn);\n\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    iterate(record, function (value) {\n      fn(value, counter++);\n    }, { IS_RECORD: true });\n  }\n});\n", "'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.45.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.45.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar fails = require('../internals/fails');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {\n  return result.size === 0;\n});\n\nvar FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {\n  // https://bugs.webkit.org/show_bug.cgi?id=288595\n  var setLike = {\n    size: 1,\n    has: function () { return true; },\n    keys: function () {\n      var index = 0;\n      return {\n        next: function () {\n          var done = index++ > 1;\n          if (baseSet.has(1)) baseSet.clear();\n          return { done: done, value: 2 };\n        }\n      };\n    }\n  };\n  // eslint-disable-next-line es/no-set -- testing\n  var baseSet = new Set([1, 2, 3, 4]);\n  // eslint-disable-next-line es/no-set-prototype-difference -- testing\n  return baseSet.difference(setLike).size !== 3;\n});\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  difference: difference\n});\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar $RangeError = RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toIntegerOrInfinity(it);\n  var length = toLength(number);\n  if (number !== length) throw new $RangeError('Wrong length or index');\n  return length;\n};\n", "'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n", "'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n", "'use strict';\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n", "'use strict';\nvar $ = require('../internals/export');\nvar $transfer = require('../internals/array-buffer-transfer');\n\n// `ArrayBuffer.prototype.transferToFixedLength` method\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.transfertofixedlength\nif ($transfer) $({ target: 'ArrayBuffer', proto: true }, {\n  transferToFixedLength: function transferToFixedLength() {\n    return $transfer(this, arguments.length ? arguments[0] : undefined, false);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {\n  return result.size === 2 && result.has(1) && result.has(2);\n}) || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar $transfer = require('../internals/array-buffer-transfer');\n\n// `ArrayBuffer.prototype.transfer` method\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.transfer\nif ($transfer) $({ target: 'ArrayBuffer', proto: true }, {\n  transfer: function transfer() {\n    return $transfer(this, arguments.length ? arguments[0] : undefined, true);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar createProperty = require('../internals/create-property');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar CONSTRUCTOR = 'constructor';\nvar ITERATOR = 'Iterator';\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nvar $TypeError = TypeError;\nvar NativeIterator = globalThis[ITERATOR];\n\n// FF56- have non-standard global helper `Iterator`\nvar FORCED = IS_PURE\n  || !isCallable(NativeIterator)\n  || NativeIterator.prototype !== IteratorPrototype\n  // FF44- non-standard `Iterator` passes previous tests\n  || !fails(function () { NativeIterator({}); });\n\nvar IteratorConstructor = function Iterator() {\n  anInstance(this, IteratorPrototype);\n  if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError('Abstract class Iterator not directly constructable');\n};\n\nvar defineIteratorPrototypeAccessor = function (key, value) {\n  if (DESCRIPTORS) {\n    defineBuiltInAccessor(IteratorPrototype, key, {\n      configurable: true,\n      get: function () {\n        return value;\n      },\n      set: function (replacement) {\n        anObject(this);\n        if (this === IteratorPrototype) throw new $TypeError(\"You can't redefine this property\");\n        if (hasOwn(this, key)) this[key] = replacement;\n        else createProperty(this, key, replacement);\n      }\n    });\n  } else IteratorPrototype[key] = value;\n};\n\nif (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);\n\nif (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {\n  defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);\n}\n\nIteratorConstructor.prototype = IteratorPrototype;\n\n// `Iterator` constructor\n// https://tc39.es/ecma262/#sec-iterator\n$({ global: true, constructor: true, forced: FORCED }, {\n  Iterator: IteratorConstructor\n});\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\n\nvar $SyntaxError = SyntaxError;\nvar $parseInt = parseInt;\nvar fromCharCode = String.fromCharCode;\nvar at = uncurryThis(''.charAt);\nvar slice = uncurryThis(''.slice);\nvar exec = uncurryThis(/./.exec);\n\nvar codePoints = {\n  '\\\\\"': '\"',\n  '\\\\\\\\': '\\\\',\n  '\\\\/': '/',\n  '\\\\b': '\\b',\n  '\\\\f': '\\f',\n  '\\\\n': '\\n',\n  '\\\\r': '\\r',\n  '\\\\t': '\\t'\n};\n\nvar IS_4_HEX_DIGITS = /^[\\da-f]{4}$/i;\n// eslint-disable-next-line regexp/no-control-character -- safe\nvar IS_C0_CONTROL_CODE = /^[\\u0000-\\u001F]$/;\n\nmodule.exports = function (source, i) {\n  var unterminated = true;\n  var value = '';\n  while (i < source.length) {\n    var chr = at(source, i);\n    if (chr === '\\\\') {\n      var twoChars = slice(source, i, i + 2);\n      if (hasOwn(codePoints, twoChars)) {\n        value += codePoints[twoChars];\n        i += 2;\n      } else if (twoChars === '\\\\u') {\n        i += 2;\n        var fourHexDigits = slice(source, i, i + 4);\n        if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) throw new $SyntaxError('Bad Unicode escape at: ' + i);\n        value += fromCharCode($parseInt(fourHexDigits, 16));\n        i += 4;\n      } else throw new $SyntaxError('Unknown escape sequence: \"' + twoChars + '\"');\n    } else if (chr === '\"') {\n      unterminated = false;\n      i++;\n      break;\n    } else {\n      if (exec(IS_C0_CONTROL_CODE, chr)) throw new $SyntaxError('Bad control character in string literal at: ' + i);\n      value += chr;\n      i++;\n    }\n  }\n  if (unterminated) throw new $SyntaxError('Unterminated string at: ' + i);\n  return { value: value, end: i };\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar apply = require('../internals/function-apply');\nvar fails = require('../internals/fails');\n\nvar $TypeError = TypeError;\n\n// https://bugs.webkit.org/show_bug.cgi?id=291651\nvar FAILS_ON_INITIAL_UNDEFINED = fails(function () {\n  // eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys, array-callback-return -- required for testing\n  [].keys().reduce(function () { /* empty */ }, undefined);\n});\n\nvar reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError('reduce', $TypeError);\n\n// `Iterator.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.reduce\n$({ target: 'Iterator', proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {\n  reduce: function reduce(reducer /* , initialValue */) {\n    anObject(this);\n    try {\n      aCallable(reducer);\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    var noInitial = arguments.length < 2;\n    var accumulator = noInitial ? undefined : arguments[1];\n    if (reduceWithoutClosingOnEarlyError) {\n      return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);\n    }\n    var record = getIteratorDirect(this);\n    var counter = 0;\n    iterate(record, function (value) {\n      if (noInitial) {\n        noInitial = false;\n        accumulator = value;\n      } else {\n        accumulator = reducer(accumulator, value, counter);\n      }\n      counter++;\n    }, { IS_RECORD: true });\n    if (noInitial) throw new $TypeError('Reduce of empty iterator with no initial value');\n    return accumulator;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar fails = require('../internals/fails');\nvar parseJSONString = require('../internals/parse-json-string');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar JSON = globalThis.JSON;\nvar Number = globalThis.Number;\nvar SyntaxError = globalThis.SyntaxError;\nvar nativeParse = JSON && JSON.parse;\nvar enumerableOwnProperties = getBuiltIn('Object', 'keys');\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar at = uncurryThis(''.charAt);\nvar slice = uncurryThis(''.slice);\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis([].push);\n\nvar IS_DIGIT = /^\\d$/;\nvar IS_NON_ZERO_DIGIT = /^[1-9]$/;\nvar IS_NUMBER_START = /^[\\d-]$/;\nvar IS_WHITESPACE = /^[\\t\\n\\r ]$/;\n\nvar PRIMITIVE = 0;\nvar OBJECT = 1;\n\nvar $parse = function (source, reviver) {\n  source = toString(source);\n  var context = new Context(source, 0, '');\n  var root = context.parse();\n  var value = root.value;\n  var endIndex = context.skip(IS_WHITESPACE, root.end);\n  if (endIndex < source.length) {\n    throw new SyntaxError('Unexpected extra character: \"' + at(source, endIndex) + '\" after the parsed data at: ' + endIndex);\n  }\n  return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value;\n};\n\nvar internalize = function (holder, name, reviver, node) {\n  var val = holder[name];\n  var unmodified = node && val === node.value;\n  var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {};\n  var elementRecordsLen, keys, len, i, P;\n  if (isObject(val)) {\n    var nodeIsArray = isArray(val);\n    var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {};\n    if (nodeIsArray) {\n      elementRecordsLen = nodes.length;\n      len = lengthOfArrayLike(val);\n      for (i = 0; i < len; i++) {\n        internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined));\n      }\n    } else {\n      keys = enumerableOwnProperties(val);\n      len = lengthOfArrayLike(keys);\n      for (i = 0; i < len; i++) {\n        P = keys[i];\n        internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined));\n      }\n    }\n  }\n  return call(reviver, holder, name, val, context);\n};\n\nvar internalizeProperty = function (object, key, value) {\n  if (DESCRIPTORS) {\n    var descriptor = getOwnPropertyDescriptor(object, key);\n    if (descriptor && !descriptor.configurable) return;\n  }\n  if (value === undefined) delete object[key];\n  else createProperty(object, key, value);\n};\n\nvar Node = function (value, end, source, nodes) {\n  this.value = value;\n  this.end = end;\n  this.source = source;\n  this.nodes = nodes;\n};\n\nvar Context = function (source, index) {\n  this.source = source;\n  this.index = index;\n};\n\n// https://www.json.org/json-en.html\nContext.prototype = {\n  fork: function (nextIndex) {\n    return new Context(this.source, nextIndex);\n  },\n  parse: function () {\n    var source = this.source;\n    var i = this.skip(IS_WHITESPACE, this.index);\n    var fork = this.fork(i);\n    var chr = at(source, i);\n    if (exec(IS_NUMBER_START, chr)) return fork.number();\n    switch (chr) {\n      case '{':\n        return fork.object();\n      case '[':\n        return fork.array();\n      case '\"':\n        return fork.string();\n      case 't':\n        return fork.keyword(true);\n      case 'f':\n        return fork.keyword(false);\n      case 'n':\n        return fork.keyword(null);\n    } throw new SyntaxError('Unexpected character: \"' + chr + '\" at: ' + i);\n  },\n  node: function (type, value, start, end, nodes) {\n    return new Node(value, end, type ? null : slice(this.source, start, end), nodes);\n  },\n  object: function () {\n    var source = this.source;\n    var i = this.index + 1;\n    var expectKeypair = false;\n    var object = {};\n    var nodes = {};\n    while (i < source.length) {\n      i = this.until(['\"', '}'], i);\n      if (at(source, i) === '}' && !expectKeypair) {\n        i++;\n        break;\n      }\n      // Parsing the key\n      var result = this.fork(i).string();\n      var key = result.value;\n      i = result.end;\n      i = this.until([':'], i) + 1;\n      // Parsing value\n      i = this.skip(IS_WHITESPACE, i);\n      result = this.fork(i).parse();\n      createProperty(nodes, key, result);\n      createProperty(object, key, result.value);\n      i = this.until([',', '}'], result.end);\n      var chr = at(source, i);\n      if (chr === ',') {\n        expectKeypair = true;\n        i++;\n      } else if (chr === '}') {\n        i++;\n        break;\n      }\n    }\n    return this.node(OBJECT, object, this.index, i, nodes);\n  },\n  array: function () {\n    var source = this.source;\n    var i = this.index + 1;\n    var expectElement = false;\n    var array = [];\n    var nodes = [];\n    while (i < source.length) {\n      i = this.skip(IS_WHITESPACE, i);\n      if (at(source, i) === ']' && !expectElement) {\n        i++;\n        break;\n      }\n      var result = this.fork(i).parse();\n      push(nodes, result);\n      push(array, result.value);\n      i = this.until([',', ']'], result.end);\n      if (at(source, i) === ',') {\n        expectElement = true;\n        i++;\n      } else if (at(source, i) === ']') {\n        i++;\n        break;\n      }\n    }\n    return this.node(OBJECT, array, this.index, i, nodes);\n  },\n  string: function () {\n    var index = this.index;\n    var parsed = parseJSONString(this.source, this.index + 1);\n    return this.node(PRIMITIVE, parsed.value, index, parsed.end);\n  },\n  number: function () {\n    var source = this.source;\n    var startIndex = this.index;\n    var i = startIndex;\n    if (at(source, i) === '-') i++;\n    if (at(source, i) === '0') i++;\n    else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, i + 1);\n    else throw new SyntaxError('Failed to parse number at: ' + i);\n    if (at(source, i) === '.') i = this.skip(IS_DIGIT, i + 1);\n    if (at(source, i) === 'e' || at(source, i) === 'E') {\n      i++;\n      if (at(source, i) === '+' || at(source, i) === '-') i++;\n      var exponentStartIndex = i;\n      i = this.skip(IS_DIGIT, i);\n      if (exponentStartIndex === i) throw new SyntaxError(\"Failed to parse number's exponent value at: \" + i);\n    }\n    return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);\n  },\n  keyword: function (value) {\n    var keyword = '' + value;\n    var index = this.index;\n    var endIndex = index + keyword.length;\n    if (slice(this.source, index, endIndex) !== keyword) throw new SyntaxError('Failed to parse value at: ' + index);\n    return this.node(PRIMITIVE, value, index, endIndex);\n  },\n  skip: function (regex, i) {\n    var source = this.source;\n    for (; i < source.length; i++) if (!exec(regex, at(source, i))) break;\n    return i;\n  },\n  until: function (array, i) {\n    i = this.skip(IS_WHITESPACE, i);\n    var chr = at(this.source, i);\n    for (var j = 0; j < array.length; j++) if (array[j] === chr) return i;\n    throw new SyntaxError('Unexpected character: \"' + chr + '\" at: ' + i);\n  }\n};\n\nvar NO_SOURCE_SUPPORT = fails(function () {\n  var unsafeInt = '9007199254740993';\n  var source;\n  nativeParse(unsafeInt, function (key, value, context) {\n    source = context.source;\n  });\n  return source !== unsafeInt;\n});\n\nvar PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () {\n  // Safari 9 bug\n  return 1 / nativeParse('-0 \\t') !== -Infinity;\n});\n\n// `JSON.parse` method\n// https://tc39.es/ecma262/#sec-json.parse\n// https://github.com/tc39/proposal-json-parse-with-source\n$({ target: 'JSON', stat: true, forced: NO_SOURCE_SUPPORT }, {\n  parse: function parse(text, reviver) {\n    return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver);\n  }\n});\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n", "'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n", "'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable, sonarjs/slow-regex -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } return stack;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n", "'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (obj, stringHandling) {\n  if (!stringHandling || typeof obj !== 'string') anObject(obj);\n  var method = getIteratorMethod(obj);\n  return getIteratorDirect(anObject(method !== undefined ? call(method, obj) : obj));\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\n\nvar URLSearchParamsPrototype = URLSearchParams.prototype;\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\n\n// `URLSearchParams.prototype.size` getter\n// https://github.com/whatwg/url/pull/734\nif (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {\n  defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {\n    get: function size() {\n      var count = 0;\n      forEach(this, function () { count++; });\n      return count;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n", "'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n", "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n", "'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n", "'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n", "'use strict';\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObjectOrUndefined = require('../internals/an-object-or-undefined');\nvar aString = require('../internals/a-string');\nvar hasOwn = require('../internals/has-own-property');\nvar base64Map = require('../internals/base64-map');\nvar getAlphabetOption = require('../internals/get-alphabet-option');\nvar notDetached = require('../internals/array-buffer-not-detached');\n\nvar base64Alphabet = base64Map.c2i;\nvar base64UrlAlphabet = base64Map.c2iUrl;\n\nvar SyntaxError = globalThis.SyntaxError;\nvar TypeError = globalThis.TypeError;\nvar at = uncurryThis(''.charAt);\n\nvar skipAsciiWhitespace = function (string, index) {\n  var length = string.length;\n  for (;index < length; index++) {\n    var chr = at(string, index);\n    if (chr !== ' ' && chr !== '\\t' && chr !== '\\n' && chr !== '\\f' && chr !== '\\r') break;\n  } return index;\n};\n\nvar decodeBase64Chunk = function (chunk, alphabet, throwOnExtraBits) {\n  var chunkLength = chunk.length;\n\n  if (chunkLength < 4) {\n    chunk += chunkLength === 2 ? 'AA' : 'A';\n  }\n\n  var triplet = (alphabet[at(chunk, 0)] << 18)\n    + (alphabet[at(chunk, 1)] << 12)\n    + (alphabet[at(chunk, 2)] << 6)\n    + alphabet[at(chunk, 3)];\n\n  var chunkBytes = [\n    (triplet >> 16) & 255,\n    (triplet >> 8) & 255,\n    triplet & 255\n  ];\n\n  if (chunkLength === 2) {\n    if (throwOnExtraBits && chunkBytes[1] !== 0) {\n      throw new SyntaxError('Extra bits');\n    }\n    return [chunkBytes[0]];\n  }\n\n  if (chunkLength === 3) {\n    if (throwOnExtraBits && chunkBytes[2] !== 0) {\n      throw new SyntaxError('Extra bits');\n    }\n    return [chunkBytes[0], chunkBytes[1]];\n  }\n\n  return chunkBytes;\n};\n\nvar writeBytes = function (bytes, elements, written) {\n  var elementsLength = elements.length;\n  for (var index = 0; index < elementsLength; index++) {\n    bytes[written + index] = elements[index];\n  }\n  return written + elementsLength;\n};\n\n/* eslint-disable max-statements, max-depth -- TODO */\nmodule.exports = function (string, options, into, maxLength) {\n  aString(string);\n  anObjectOrUndefined(options);\n  var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;\n  var lastChunkHandling = options ? options.lastChunkHandling : undefined;\n\n  if (lastChunkHandling === undefined) lastChunkHandling = 'loose';\n\n  if (lastChunkHandling !== 'loose' && lastChunkHandling !== 'strict' && lastChunkHandling !== 'stop-before-partial') {\n    throw new TypeError('Incorrect `lastChunkHandling` option');\n  }\n\n  if (into) notDetached(into.buffer);\n\n  var stringLength = string.length;\n  var bytes = into || [];\n  var written = 0;\n  var read = 0;\n  var chunk = '';\n  var index = 0;\n\n  if (maxLength) while (true) {\n    index = skipAsciiWhitespace(string, index);\n    if (index === stringLength) {\n      if (chunk.length > 0) {\n        if (lastChunkHandling === 'stop-before-partial') {\n          break;\n        }\n        if (lastChunkHandling === 'loose') {\n          if (chunk.length === 1) {\n            throw new SyntaxError('Malformed padding: exactly one additional character');\n          }\n          written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);\n        } else {\n          throw new SyntaxError('Missing padding');\n        }\n      }\n      read = stringLength;\n      break;\n    }\n    var chr = at(string, index);\n    ++index;\n    if (chr === '=') {\n      if (chunk.length < 2) {\n        throw new SyntaxError('Padding is too early');\n      }\n      index = skipAsciiWhitespace(string, index);\n      if (chunk.length === 2) {\n        if (index === stringLength) {\n          if (lastChunkHandling === 'stop-before-partial') {\n            break;\n          }\n          throw new SyntaxError('Malformed padding: only one =');\n        }\n        if (at(string, index) === '=') {\n          ++index;\n          index = skipAsciiWhitespace(string, index);\n        }\n      }\n      if (index < stringLength) {\n        throw new SyntaxError('Unexpected character after padding');\n      }\n      written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, lastChunkHandling === 'strict'), written);\n      read = stringLength;\n      break;\n    }\n    if (!hasOwn(alphabet, chr)) {\n      throw new SyntaxError('Unexpected character');\n    }\n    var remainingBytes = maxLength - written;\n    if (remainingBytes === 1 && chunk.length === 2 || remainingBytes === 2 && chunk.length === 3) {\n      // special case: we can fit exactly the number of bytes currently represented by chunk, so we were just checking for `=`\n      break;\n    }\n\n    chunk += chr;\n    if (chunk.length === 4) {\n      written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);\n      chunk = '';\n      read = index;\n      if (written === maxLength) {\n        break;\n      }\n    }\n  }\n\n  return { bytes: bytes, read: read, written: written };\n};\n", "'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n", "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar notANaN = require('../internals/not-a-nan');\nvar toPositiveInteger = require('../internals/to-positive-integer');\nvar iteratorClose = require('../internals/iterator-close');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar iteratorHelperThrowsOnInvalidIterator = require('../internals/iterator-helper-throws-on-invalid-iterator');\nvar iteratorHelperWithoutClosingOnEarlyError = require('../internals/iterator-helper-without-closing-on-early-error');\nvar IS_PURE = require('../internals/is-pure');\n\nvar DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('drop', 0);\nvar dropWithoutClosingOnEarlyError = !IS_PURE && !DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR\n  && iteratorHelperWithoutClosingOnEarlyError('drop', RangeError);\n\nvar FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError;\n\nvar IteratorProxy = createIteratorProxy(function () {\n  var iterator = this.iterator;\n  var next = this.next;\n  var result, done;\n  while (this.remaining) {\n    this.remaining--;\n    result = anObject(call(next, iterator));\n    done = this.done = !!result.done;\n    if (done) return;\n  }\n  result = anObject(call(next, iterator));\n  done = this.done = !!result.done;\n  if (!done) return result.value;\n});\n\n// `Iterator.prototype.drop` method\n// https://tc39.es/ecma262/#sec-iterator.prototype.drop\n$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {\n  drop: function drop(limit) {\n    anObject(this);\n    var remaining;\n    try {\n      remaining = toPositiveInteger(notANaN(+limit));\n    } catch (error) {\n      iteratorClose(this, 'throw', error);\n    }\n\n    if (dropWithoutClosingOnEarlyError) return call(dropWithoutClosingOnEarlyError, this, remaining);\n\n    return new IteratorProxy(getIteratorDirect(this), {\n      remaining: remaining\n    });\n  }\n});\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar IS_NODE = require('../internals/environment-is-node');\n\nmodule.exports = function (name) {\n  if (IS_NODE) {\n    try {\n      return globalThis.process.getBuiltinModule(name);\n    } catch (error) { /* empty */ }\n    try {\n      // eslint-disable-next-line no-new-func -- safe\n      return Function('return require(\"' + name + '\")')();\n    } catch (error) { /* empty */ }\n  }\n};\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.uint8-array.from-base64');\n", "'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar InternalStateModule = require('../internals/internal-state');\nvar getMethod = require('../internals/get-method');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar iteratorClose = require('../internals/iterator-close');\nvar iteratorCloseAll = require('../internals/iterator-close-all');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ITERATOR_HELPER = 'IteratorHelper';\nvar WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';\nvar NORMAL = 'normal';\nvar THROW = 'throw';\nvar setInternalState = InternalStateModule.set;\n\nvar createIteratorProxyPrototype = function (IS_ITERATOR) {\n  var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);\n\n  return defineBuiltIns(create(IteratorPrototype), {\n    next: function next() {\n      var state = getInternalState(this);\n      // for simplification:\n      //   for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`\n      //   for `%IteratorHelperPrototype%.next` - just a value\n      if (IS_ITERATOR) return state.nextHandler();\n      if (state.done) return createIterResultObject(undefined, true);\n      try {\n        var result = state.nextHandler();\n        return state.returnHandlerResult ? result : createIterResultObject(result, state.done);\n      } catch (error) {\n        state.done = true;\n        throw error;\n      }\n    },\n    'return': function () {\n      var state = getInternalState(this);\n      var iterator = state.iterator;\n      state.done = true;\n      if (IS_ITERATOR) {\n        var returnMethod = getMethod(iterator, 'return');\n        return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);\n      }\n      if (state.inner) try {\n        iteratorClose(state.inner.iterator, NORMAL);\n      } catch (error) {\n        return iteratorClose(iterator, THROW, error);\n      }\n      if (state.openIters) try {\n        iteratorCloseAll(state.openIters, NORMAL);\n      } catch (error) {\n        return iteratorClose(iterator, THROW, error);\n      }\n      if (iterator) iteratorClose(iterator, NORMAL);\n      return createIterResultObject(undefined, true);\n    }\n  });\n};\n\nvar WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);\nvar IteratorHelperPrototype = createIteratorProxyPrototype(false);\n\ncreateNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');\n\nmodule.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {\n  var IteratorProxy = function Iterator(record, state) {\n    if (state) {\n      state.iterator = record.iterator;\n      state.next = record.next;\n    } else state = record;\n    state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;\n    state.returnHandlerResult = !!RETURN_HANDLER_RESULT;\n    state.nextHandler = nextHandler;\n    state.counter = 0;\n    state.done = false;\n    setInternalState(this, state);\n  };\n\n  IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;\n\n  return IteratorProxy;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObjectOrUndefined = require('../internals/an-object-or-undefined');\nvar anUint8Array = require('../internals/an-uint8-array');\nvar notDetached = require('../internals/array-buffer-not-detached');\nvar base64Map = require('../internals/base64-map');\nvar getAlphabetOption = require('../internals/get-alphabet-option');\n\nvar base64Alphabet = base64Map.i2c;\nvar base64UrlAlphabet = base64Map.i2cUrl;\n\nvar charAt = uncurryThis(''.charAt);\n\nvar Uint8Array = globalThis.Uint8Array;\n\nvar INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.toBase64 || !function () {\n  try {\n    var target = new Uint8Array();\n    target.toBase64(null);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `Uint8Array.prototype.toBase64` method\n// https://github.com/tc39/proposal-arraybuffer-base64\nif (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {\n  toBase64: function toBase64(/* options */) {\n    var array = anUint8Array(this);\n    var options = arguments.length ? anObjectOrUndefined(arguments[0]) : undefined;\n    var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;\n    var omitPadding = !!options && !!options.omitPadding;\n    notDetached(this.buffer);\n\n    var result = '';\n    var i = 0;\n    var length = array.length;\n    var triplet;\n\n    var at = function (shift) {\n      return charAt(alphabet, (triplet >> (6 * shift)) & 63);\n    };\n\n    for (; i + 2 < length; i += 3) {\n      triplet = (array[i] << 16) + (array[i + 1] << 8) + array[i + 2];\n      result += at(3) + at(2) + at(1) + at(0);\n    }\n    if (i + 2 === length) {\n      triplet = (array[i] << 16) + (array[i + 1] << 8);\n      result += at(3) + at(2) + at(1) + (omitPadding ? '' : '=');\n    } else if (i + 1 === length) {\n      triplet = array[i] << 16;\n      result += at(3) + at(2) + (omitPadding ? '' : '==');\n    }\n\n    return result;\n  }\n});\n", "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n", "'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n", "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n", "'use strict';\nvar arrayWith = require('../internals/array-with');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toBigInt = require('../internals/to-big-int');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar PROPER_ORDER = function () {\n  try {\n    // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\n  } catch (error) {\n    // some early implementations, like WebKit, does not follow the final semantic\n    // https://github.com/tc39/proposal-change-array-by-copy/pull/86\n    return error === 8;\n  }\n}();\n\n// Bug in WebKit. It should truncate a negative fractional index to zero, but instead throws an error\nvar THROW_ON_NEGATIVE_FRACTIONAL_INDEX = PROPER_ORDER && function () {\n  try {\n    // eslint-disable-next-line es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n    new Int8Array(1)['with'](-0.5, 1);\n  } catch (error) {\n    return true;\n  }\n}();\n\n// `%TypedArray%.prototype.with` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nexportTypedArrayMethod('with', { 'with': function (index, value) {\n  var O = aTypedArray(this);\n  var relativeIndex = toIntegerOrInfinity(index);\n  var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;\n  return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);\n} }['with'], !PROPER_ORDER || THROW_ON_NEGATIVE_FRACTIONAL_INDEX);\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw new $RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n", "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el !== el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value !== value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.uint8-array.to-base64');\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.uint8-array.set-from-hex');\n", "'use strict';\n// Should get iterator record of a set-like object before cloning this\n// https://bugs.webkit.org/show_bug.cgi?id=289430\nmodule.exports = function (METHOD_NAME) {\n  try {\n    // eslint-disable-next-line es/no-set -- needed for test\n    var baseSet = new Set();\n    var setLike = {\n      size: 0,\n      has: function () { return true; },\n      keys: function () {\n        // eslint-disable-next-line es/no-object-defineproperty -- needed for test\n        return Object.defineProperty({}, 'next', {\n          get: function () {\n            baseSet.clear();\n            baseSet.add(4);\n            return function () {\n              return { done: true };\n            };\n          }\n        });\n      }\n    };\n    var result = baseSet[METHOD_NAME](setLike);\n\n    return result.size === 1 && result.values().next().value === 4;\n  } catch (error) {\n    return false;\n  }\n};\n", "'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\n// https://tc39.es/ecma262/#sec-array.prototype.with\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nmodule.exports = function (O, C, index, value) {\n  var len = lengthOfArrayLike(O);\n  var relativeIndex = toIntegerOrInfinity(index);\n  var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n  if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n  var A = new C(len);\n  var k = 0;\n  for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];\n  return A;\n};\n", "// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n  typeof process === \"object\" &&\n  process + \"\" === \"[object process]\" &&\n  !process.versions.nw &&\n  !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n *  - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n *    `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n *  - SAVE is used, on the worker-thread, when saving modified annotations.\n *  - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n *    annotations are rendered onto the canvas (i.e. by being included in the\n *    operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n *    and their `annotationMode`-option.\n *  - IS_EDITING is used when editing is active in the viewer.\n *  - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n *    `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  IS_EDITING: 0x80,\n  OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3,\n};\n\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15,\n  POPUP: 16,\n  SIGNATURE: 101,\n  COMMENT: 102,\n};\n\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_THICKNESS: 32,\n  HIGHLIGHT_FREE: 33,\n  HIGHLIGHT_SHOW_ALL: 34,\n  DRAW_STEP: 41,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26,\n};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n  // Intentionally start from 1 so it is easy to spot bad operators that will be\n  // 0's.\n  // PLEASE NOTE: We purposely keep any removed operators commented out, since\n  //              re-numbering the list would risk breaking third-party users.\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  // beginAnnotations: 78,\n  // endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  // paintJpegXObject: 82,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91,\n  setStrokeTransparent: 92,\n  setFillTransparent: 93,\n  rawFillPath: 94,\n};\n\n// In order to have a switch statement that is fast (i.e. which use a jump\n// table), we need to have the OPS in a contiguous range.\nconst DrawOPS = {\n  moveTo: 0,\n  lineTo: 1,\n  curveTo: 2,\n  closePath: 3,\n};\n\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\n\nfunction getVerbosityLevel() {\n  return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    // eslint-disable-next-line no-console\n    console.info(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    // eslint-disable-next-line no-console\n    console.warn(`Warning: ${msg}`);\n  }\n}\n\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  if (options && typeof url === \"string\") {\n    // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n    if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n      const dots = url.match(/\\./g);\n      // Avoid accidentally matching a *relative* URL pointing to a file named\n      // e.g. \"www.pdf\" or similar.\n      if (dots?.length >= 2) {\n        url = `http://${url}`;\n      }\n    }\n\n    // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n    // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n    if (options.tryConvertEncoding) {\n      try {\n        url = stringToUTF8String(url);\n      } catch {}\n    }\n  }\n\n  const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\n\n/**\n * Remove, or replace, the hash property of the URL.\n *\n * @param {URL|string} url - The absolute, or relative, URL.\n * @param {string} hash - The hash property (use an empty string to remove it).\n * @param {boolean} [allowRel] - Allow relative URLs.\n * @returns {string} The resulting URL string.\n */\nfunction updateUrlHash(url, hash, allowRel = false) {\n  const res = URL.parse(url);\n  if (res) {\n    res.hash = hash;\n    return res.href;\n  }\n  // Support well-formed relative URLs, necessary for `web/app.js` in GENERIC\n  // builds, by optionally falling back to string parsing.\n  if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n    return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n  }\n  return \"\";\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      prop in obj,\n      `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n    );\n  }\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false,\n  });\n  return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n  // eslint-disable-next-line no-shadow\n  function BaseException(message, name) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseException\n    ) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n\n  return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\n\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\n\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\n\nclass ResponseException extends BaseException {\n  constructor(msg, status, missing) {\n    super(msg, \"ResponseException\");\n    this.status = status;\n    this.missing = missing;\n  }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\n\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\n\nfunction string32(value) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n      `string32: Unexpected input \"${value}\".`\n    );\n  }\n  return String.fromCharCode(\n    (value >> 24) & 0xff,\n    (value >> 16) & 0xff,\n    (value >> 8) & 0xff,\n    value & 0xff\n  );\n}\n\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n  const buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n  try {\n    new Function(\"\"); // eslint-disable-line no-new, no-new-func\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nclass FeatureTest {\n  static get isLittleEndian() {\n    return shadow(this, \"isLittleEndian\", isLittleEndian());\n  }\n\n  static get isEvalSupported() {\n    return shadow(this, \"isEvalSupported\", isEvalSupported());\n  }\n\n  static get isOffscreenCanvasSupported() {\n    return shadow(\n      this,\n      \"isOffscreenCanvasSupported\",\n      typeof OffscreenCanvas !== \"undefined\"\n    );\n  }\n\n  static get isImageDecoderSupported() {\n    return shadow(\n      this,\n      \"isImageDecoderSupported\",\n      typeof ImageDecoder !== \"undefined\"\n    );\n  }\n\n  static get platform() {\n    const { platform, userAgent } = navigator;\n\n    return shadow(this, \"platform\", {\n      isAndroid: userAgent.includes(\"Android\"),\n      isLinux: platform.includes(\"Linux\"),\n      isMac: platform.includes(\"Mac\"),\n      isWindows: platform.includes(\"Win\"),\n      isFirefox:\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        userAgent.includes(\"Firefox\"),\n    });\n  }\n\n  static get isCSSRoundSupported() {\n    return shadow(\n      this,\n      \"isCSSRoundSupported\",\n      globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\")\n    );\n  }\n}\n\nconst hexNumbers = Array.from(Array(256).keys(), n =>\n  n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n  static makeHexColor(r, g, b) {\n    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n  }\n\n  static domMatrixToTransform(dm) {\n    return [dm.a, dm.b, dm.c, dm.d, dm.e, dm.f];\n  }\n\n  // Apply a scaling matrix to some min/max values.\n  // If a scaling factor is negative then min and max must be\n  // swapped.\n  static scaleMinMax(transform, minMax) {\n    let temp;\n    if (transform[0]) {\n      if (transform[0] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[0];\n      minMax[2] *= transform[0];\n\n      if (transform[3] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[3];\n      minMax[3] *= transform[3];\n    } else {\n      temp = minMax[0];\n      minMax[0] = minMax[1];\n      minMax[1] = temp;\n      temp = minMax[2];\n      minMax[2] = minMax[3];\n      minMax[3] = temp;\n\n      if (transform[1] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[1];\n      minMax[3] *= transform[1];\n\n      if (transform[2] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[2];\n      minMax[2] *= transform[2];\n    }\n    minMax[0] += transform[4];\n    minMax[1] += transform[5];\n    minMax[2] += transform[4];\n    minMax[3] += transform[5];\n  }\n\n  // Concatenates two transformation matrices together and returns the result.\n  static transform(m1, m2) {\n    return [\n      m1[0] * m2[0] + m1[2] * m2[1],\n      m1[1] * m2[0] + m1[3] * m2[1],\n      m1[0] * m2[2] + m1[2] * m2[3],\n      m1[1] * m2[2] + m1[3] * m2[3],\n      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n      m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n    ];\n  }\n\n  // Multiplies m (an array-based transform) by md (a DOMMatrix transform).\n  static multiplyByDOMMatrix(m, md) {\n    return [\n      m[0] * md.a + m[2] * md.b,\n      m[1] * md.a + m[3] * md.b,\n      m[0] * md.c + m[2] * md.d,\n      m[1] * md.c + m[3] * md.d,\n      m[0] * md.e + m[2] * md.f + m[4],\n      m[1] * md.e + m[3] * md.f + m[5],\n    ];\n  }\n\n  // For 2d affine transforms\n  static applyTransform(p, m, pos = 0) {\n    const p0 = p[pos];\n    const p1 = p[pos + 1];\n    p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n    p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n  }\n\n  static applyTransformToBezier(p, transform, pos = 0) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    for (let i = 0; i < 6; i += 2) {\n      const pI = p[pos + i];\n      const pI1 = p[pos + i + 1];\n      p[pos + i] = pI * m0 + pI1 * m2 + m4;\n      p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n    }\n  }\n\n  static applyInverseTransform(p, m) {\n    const p0 = p[0];\n    const p1 = p[1];\n    const d = m[0] * m[3] - m[1] * m[2];\n    p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n  }\n\n  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\n  static axialAlignedBoundingBox(rect, transform, output) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    const r0 = rect[0];\n    const r1 = rect[1];\n    const r2 = rect[2];\n    const r3 = rect[3];\n\n    let a0 = m0 * r0 + m4;\n    let a2 = a0;\n    let a1 = m0 * r2 + m4;\n    let a3 = a1;\n    let b0 = m3 * r1 + m5;\n    let b2 = b0;\n    let b1 = m3 * r3 + m5;\n    let b3 = b1;\n\n    if (m1 !== 0 || m2 !== 0) {\n      // Non-scaling matrix: shouldn't be frequent.\n      const m1r0 = m1 * r0;\n      const m1r2 = m1 * r2;\n      const m2r1 = m2 * r1;\n      const m2r3 = m2 * r3;\n      a0 += m2r1;\n      a3 += m2r1;\n      a1 += m2r3;\n      a2 += m2r3;\n      b0 += m1r0;\n      b3 += m1r0;\n      b1 += m1r2;\n      b2 += m1r2;\n    }\n\n    output[0] = Math.min(output[0], a0, a1, a2, a3);\n    output[1] = Math.min(output[1], b0, b1, b2, b3);\n    output[2] = Math.max(output[2], a0, a1, a2, a3);\n    output[3] = Math.max(output[3], b0, b1, b2, b3);\n  }\n\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [\n      m[3] / d,\n      -m[1] / d,\n      -m[2] / d,\n      m[0] / d,\n      (m[2] * m[5] - m[4] * m[3]) / d,\n      (m[4] * m[1] - m[5] * m[0]) / d,\n    ];\n  }\n\n  // This calculation uses Singular Value Decomposition.\n  // The SVD can be represented with formula A = USV. We are interested in the\n  // matrix S here because it represents the scale values.\n  static singularValueDecompose2dScale(matrix, output) {\n    const m0 = matrix[0];\n    const m1 = matrix[1];\n    const m2 = matrix[2];\n    const m3 = matrix[3];\n    // Multiply matrix m with its transpose.\n    const a = m0 ** 2 + m1 ** 2;\n    const b = m0 * m2 + m1 * m3;\n    const c = m2 ** 2 + m3 ** 2;\n\n    // Solve the second degree polynomial to get roots.\n    const first = (a + c) / 2;\n    const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n    output[0] = Math.sqrt(first + second || 1);\n    output[1] = Math.sqrt(first - second || 1);\n  }\n\n  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n  // For coordinate systems whose origin lies in the bottom-left, this\n  // means normalization to (BL,TR) ordering. For systems with origin in the\n  // top-left, this means (TL,BR) ordering.\n  static normalizeRect(rect) {\n    const r = rect.slice(0); // clone rect\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n\n  // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n  // intersection of rect1 and rect2. If no intersection, returns 'null'\n  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(\n      Math.min(rect1[0], rect1[2]),\n      Math.min(rect2[0], rect2[2])\n    );\n    const xHigh = Math.min(\n      Math.max(rect1[0], rect1[2]),\n      Math.max(rect2[0], rect2[2])\n    );\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(\n      Math.min(rect1[1], rect1[3]),\n      Math.min(rect2[1], rect2[3])\n    );\n    const yHigh = Math.min(\n      Math.max(rect1[1], rect1[3]),\n      Math.max(rect2[1], rect2[3])\n    );\n    if (yLow > yHigh) {\n      return null;\n    }\n\n    return [xLow, yLow, xHigh, yHigh];\n  }\n\n  static pointBoundingBox(x, y, minMax) {\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static rectBoundingBox(x0, y0, x1, y1, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x1);\n    minMax[1] = Math.min(minMax[1], y0, y1);\n    minMax[2] = Math.max(minMax[2], x0, x1);\n    minMax[3] = Math.max(minMax[3], y0, y1);\n  }\n\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(\n          x0,\n          x1,\n          x2,\n          x3,\n          y0,\n          y1,\n          y2,\n          y3,\n          -c / b,\n          minMax\n        );\n      }\n      return;\n    }\n\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b + sqrtDelta) / a2,\n      minMax\n    );\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b - sqrtDelta) / a2,\n      minMax\n    );\n  }\n\n  // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x3);\n    minMax[1] = Math.min(minMax[1], y0, y3);\n    minMax[2] = Math.max(minMax[2], x0, x3);\n    minMax[3] = Math.max(minMax[3], y0, y3);\n\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-x0 + 3 * (x1 - x2) + x3),\n      6 * (x0 - 2 * x1 + x2),\n      3 * (x1 - x0),\n      minMax\n    );\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-y0 + 3 * (y1 - y2) + y3),\n      6 * (y0 - 2 * y1 + y2),\n      3 * (y1 - y0),\n      minMax\n    );\n  }\n}\n\nconst PDFStringTranslateTable = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n  0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n  0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n  0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n  0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str, keepEscapeSequence = false) {\n  // See section 7.9.2.2 Text String Type.\n  // The string can contain some language codes bracketed with 0x1b,\n  // so we must remove them.\n  if (str[0] >= \"\\xEF\") {\n    let encoding;\n    if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n      encoding = \"utf-16be\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n      encoding = \"utf-16le\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n      encoding = \"utf-8\";\n    }\n\n    if (encoding) {\n      try {\n        const decoder = new TextDecoder(encoding, { fatal: true });\n        const buffer = stringToBytes(str);\n        const decoded = decoder.decode(buffer);\n        if (keepEscapeSequence || !decoded.includes(\"\\x1b\")) {\n          return decoded;\n        }\n        return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n      } catch (ex) {\n        warn(`stringToPDFString: \"${ex}\".`);\n      }\n    }\n  }\n  // ISO Latin 1\n  const strBuf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const charCode = str.charCodeAt(i);\n    if (!keepEscapeSequence && charCode === 0x1b) {\n      // eslint-disable-next-line no-empty\n      while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n      continue;\n    }\n    const code = PDFStringTranslateTable[charCode];\n    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n  }\n  return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n  if (!(date instanceof Date)) {\n    date = new Date(date);\n  }\n  const buffer = [\n    date.getUTCFullYear().toString(),\n    (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n    date.getUTCDate().toString().padStart(2, \"0\"),\n    date.getUTCHours().toString().padStart(2, \"0\"),\n    date.getUTCMinutes().toString().padStart(2, \"0\"),\n    date.getUTCSeconds().toString().padStart(2, \"0\"),\n  ];\n\n  return buffer.join(\"\");\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    // In order to generate the following regex:\n    //  - create a PDF containing all the chars in the range 0000-FFFF with\n    //    a NFKC which is different of the char.\n    //  - copy and paste all those chars and get the ones where NFKC is\n    //    required.\n    // It appears that most the chars here contain some ligatures.\n    NormalizeRegex =\n      /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n    p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n  );\n}\n\nfunction getUuid() {\n  if (\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n    typeof crypto.randomUUID === \"function\"\n  ) {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  crypto.getRandomValues(buf);\n  return bytesToString(buf);\n}\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\n\nfunction _isValidExplicitDest(validRef, validName, dest) {\n  if (!Array.isArray(dest) || dest.length < 2) {\n    return false;\n  }\n  const [page, zoom, ...args] = dest;\n  if (!validRef(page) && !Number.isInteger(page)) {\n    return false;\n  }\n  if (!validName(zoom)) {\n    return false;\n  }\n  const argsLen = args.length;\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (argsLen < 2 || argsLen > 3) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return argsLen === 0;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (argsLen > 1) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (argsLen !== 4) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (const arg of args) {\n    if (typeof arg === \"number\" || (allowNull && arg === null)) {\n      continue;\n    }\n    return false;\n  }\n  return true;\n}\n\n// TODO: Replace all occurrences of this function with `Math.clamp` once\n//       https://github.com/tc39/proposal-math-clamp/ is generally available.\nfunction MathClamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toHex` is generally available.\nfunction toHexUtil(arr) {\n  if (Uint8Array.prototype.toHex) {\n    return arr.toHex();\n  }\n  return Array.from(arr, num => hexNumbers[num]).join(\"\");\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toBase64` is generally\n//       available.\nfunction toBase64Util(arr) {\n  if (Uint8Array.prototype.toBase64) {\n    return arr.toBase64();\n  }\n  return btoa(bytesToString(arr));\n}\n\n// TODO: Remove this once `Uint8Array.fromBase64` is generally available.\nfunction fromBase64Util(str) {\n  if (Uint8Array.fromBase64) {\n    return Uint8Array.fromBase64(str);\n  }\n  return stringToBytes(atob(str));\n}\n\n// TODO: Remove this once https://bugzilla.mozilla.org/show_bug.cgi?id=1928493\n//       is fixed.\nif (\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) &&\n  typeof Promise.try !== \"function\"\n) {\n  Promise.try = function (fn, ...args) {\n    return new Promise(resolve => {\n      resolve(fn(...args));\n    });\n  };\n}\n\n// TODO: Remove this once the `javascript.options.experimental.math_sumprecise`\n//       preference is removed from Firefox.\nif (typeof Math.sumPrecise !== \"function\") {\n  // Note that this isn't a \"proper\" polyfill, but since we're only using it to\n  // replace `Array.prototype.reduce()` invocations it should be fine.\n  Math.sumPrecise = function (numbers) {\n    return numbers.reduce((a, b) => a + b, 0);\n  };\n}\n\nif (\n  typeof PDFJSDev !== \"undefined\" &&\n  !PDFJSDev.test(\"SKIP_BABEL\") &&\n  typeof AbortSignal.any !== \"function\"\n) {\n  AbortSignal.any = function (iterable) {\n    const ac = new AbortController();\n    const { signal } = ac;\n\n    // Return immediately if any of the signals are already aborted.\n    for (const s of iterable) {\n      if (s.aborted) {\n        ac.abort(s.reason);\n        return signal;\n      }\n    }\n    // Register \"abort\" listeners for all signals.\n    for (const s of iterable) {\n      s.addEventListener(\n        \"abort\",\n        () => {\n          ac.abort(s.reason);\n        },\n        { signal } // Automatically remove the listener.\n      );\n    }\n\n    return signal;\n  };\n}\n\nexport {\n  _isValidExplicitDest,\n  AbortException,\n  AnnotationActionEventType,\n  AnnotationBorderStyleType,\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMode,\n  AnnotationPrefix,\n  AnnotationReplyType,\n  AnnotationType,\n  assert,\n  BaseException,\n  BASELINE_FACTOR,\n  bytesToString,\n  createValidAbsoluteUrl,\n  DocumentActionEventType,\n  DrawOPS,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  fromBase64Util,\n  getModificationDate,\n  getUuid,\n  getVerbosityLevel,\n  hexNumbers,\n  ImageKind,\n  info,\n  InvalidPDFException,\n  isArrayEqual,\n  isNodeJS,\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  MathClamp,\n  normalizeUnicode,\n  objectSize,\n  OPS,\n  PageActionEventType,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  RenderingIntentFlag,\n  ResponseException,\n  setVerbosityLevel,\n  shadow,\n  string32,\n  stringToBytes,\n  stringToPDFString,\n  stringToUTF8String,\n  TextRenderingMode,\n  toBase64Util,\n  toHexUtil,\n  UnknownErrorException,\n  unreachable,\n  updateUrlHash,\n  utf8StringToString,\n  Util,\n  VerbosityLevel,\n  warn,\n};\n", "/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nclass XfaText {\n  /**\n   * Walk an XFA tree and create an array of text nodes that is compatible\n   * with a regular PDFs TextContent. Currently, only TextItem.str is supported,\n   * all other fields and styles haven't been implemented.\n   *\n   * @param {Object} xfa - An XFA fake DOM object.\n   *\n   * @returns {TextContent}\n   */\n  static textContent(xfa) {\n    const items = [];\n    const output = {\n      items,\n      styles: Object.create(null),\n    };\n    function walk(node) {\n      if (!node) {\n        return;\n      }\n      let str = null;\n      const name = node.name;\n      if (name === \"#text\") {\n        str = node.value;\n      } else if (!XfaText.shouldBuildText(name)) {\n        return;\n      } else if (node?.attributes?.textContent) {\n        str = node.attributes.textContent;\n      } else if (node.value) {\n        str = node.value;\n      }\n      if (str !== null) {\n        items.push({\n          str,\n        });\n      }\n      if (!node.children) {\n        return;\n      }\n      for (const child of node.children) {\n        walk(child);\n      }\n    }\n    walk(xfa);\n    return output;\n  }\n\n  /**\n   * @param {string} name - DOM node name. (lower case)\n   *\n   * @returns {boolean} true if the DOM node should have a corresponding text\n   * node.\n   */\n  static shouldBuildText(name) {\n    return !(\n      name === \"textarea\" ||\n      name === \"input\" ||\n      name === \"option\" ||\n      name === \"select\"\n    );\n  }\n}\n\nexport { XfaText };\n", "/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_storage\").AnnotationStorage} AnnotationStorage */\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"../../web/interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { XfaText } from \"./xfa_text.js\";\n\n/**\n * @typedef {Object} XfaLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Object} xfaHtml\n * @property {AnnotationStorage} [annotationStorage]\n * @property {IPDFLinkService} linkService\n * @property {string} [intent] - (default value is 'display').\n */\n\nclass XfaLayer {\n  static setupStorage(html, id, element, storage, intent) {\n    const storedData = storage.getValue(id, { value: null });\n    switch (element.name) {\n      case \"textarea\":\n        if (storedData.value !== null) {\n          html.textContent = storedData.value;\n        }\n        if (intent === \"print\") {\n          break;\n        }\n        html.addEventListener(\"input\", event => {\n          storage.setValue(id, { value: event.target.value });\n        });\n        break;\n      case \"input\":\n        if (\n          element.attributes.type === \"radio\" ||\n          element.attributes.type === \"checkbox\"\n        ) {\n          if (storedData.value === element.attributes.xfaOn) {\n            html.setAttribute(\"checked\", true);\n          } else if (storedData.value === element.attributes.xfaOff) {\n            // The checked attribute may have been set when opening the file,\n            // unset through the UI and we're here because of printing.\n            html.removeAttribute(\"checked\");\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"change\", event => {\n            storage.setValue(id, {\n              value: event.target.checked\n                ? event.target.getAttribute(\"xfaOn\")\n                : event.target.getAttribute(\"xfaOff\"),\n            });\n          });\n        } else {\n          if (storedData.value !== null) {\n            html.setAttribute(\"value\", storedData.value);\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"input\", event => {\n            storage.setValue(id, { value: event.target.value });\n          });\n        }\n        break;\n      case \"select\":\n        if (storedData.value !== null) {\n          html.setAttribute(\"value\", storedData.value);\n          for (const option of element.children) {\n            if (option.attributes.value === storedData.value) {\n              option.attributes.selected = true;\n            } else if (option.attributes.hasOwnProperty(\"selected\")) {\n              delete option.attributes.selected;\n            }\n          }\n        }\n        html.addEventListener(\"input\", event => {\n          const options = event.target.options;\n          const value =\n            options.selectedIndex === -1\n              ? \"\"\n              : options[options.selectedIndex].value;\n          storage.setValue(id, { value });\n        });\n        break;\n    }\n  }\n\n  static setAttributes({ html, element, storage = null, intent, linkService }) {\n    const { attributes } = element;\n    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n\n    if (attributes.type === \"radio\") {\n      // Avoid to have a radio group when printing with the same as one\n      // already displayed.\n      attributes.name = `${attributes.name}-${intent}`;\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n      if (value === null || value === undefined) {\n        continue;\n      }\n\n      switch (key) {\n        case \"class\":\n          if (value.length) {\n            html.setAttribute(key, value.join(\" \"));\n          }\n          break;\n        case \"dataId\":\n          // We don't need to add dataId in the html object but it can\n          // be useful to know its value when writing printing tests:\n          // in this case, don't skip dataId to have its value.\n          break;\n        case \"id\":\n          html.setAttribute(\"data-element-id\", value);\n          break;\n        case \"style\":\n          Object.assign(html.style, value);\n          break;\n        case \"textContent\":\n          html.textContent = value;\n          break;\n        default:\n          if (!isHTMLAnchorElement || (key !== \"href\" && key !== \"newWindow\")) {\n            html.setAttribute(key, value);\n          }\n      }\n    }\n\n    if (isHTMLAnchorElement) {\n      linkService.addLinkAttributes(\n        html,\n        attributes.href,\n        attributes.newWindow\n      );\n    }\n\n    // Set the value after the others to be sure to overwrite any other values.\n    if (storage && attributes.dataId) {\n      this.setupStorage(html, attributes.dataId, element, storage);\n    }\n  }\n\n  /**\n   * Render the XFA layer.\n   *\n   * @param {XfaLayerParameters} parameters\n   */\n  static render(parameters) {\n    const storage = parameters.annotationStorage;\n    const linkService = parameters.linkService;\n    const root = parameters.xfaHtml;\n    const intent = parameters.intent || \"display\";\n    const rootHtml = document.createElement(root.name);\n    if (root.attributes) {\n      this.setAttributes({\n        html: rootHtml,\n        element: root,\n        intent,\n        linkService,\n      });\n    }\n\n    const isNotForRichText = intent !== \"richText\";\n    const rootDiv = parameters.div;\n    rootDiv.append(rootHtml);\n\n    if (parameters.viewport) {\n      const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n      rootDiv.style.transform = transform;\n    }\n\n    // Set defaults.\n    if (isNotForRichText) {\n      rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n    }\n\n    // Text nodes used for the text highlighter.\n    const textDivs = [];\n\n    // In the rich text context, it's possible to just have a text node without\n    // a root element, so we handle this case here (see issue 17215).\n    if (root.children.length === 0) {\n      if (root.value) {\n        const node = document.createTextNode(root.value);\n        rootHtml.append(node);\n        if (isNotForRichText && XfaText.shouldBuildText(root.name)) {\n          textDivs.push(node);\n        }\n      }\n      return { textDivs };\n    }\n\n    const stack = [[root, -1, rootHtml]];\n\n    while (stack.length > 0) {\n      const [parent, i, html] = stack.at(-1);\n      if (i + 1 === parent.children.length) {\n        stack.pop();\n        continue;\n      }\n\n      const child = parent.children[++stack.at(-1)[1]];\n      if (child === null) {\n        continue;\n      }\n\n      const { name } = child;\n      if (name === \"#text\") {\n        const node = document.createTextNode(child.value);\n        textDivs.push(node);\n        html.append(node);\n        continue;\n      }\n\n      const childHtml = child?.attributes?.xmlns\n        ? document.createElementNS(child.attributes.xmlns, name)\n        : document.createElement(name);\n\n      html.append(childHtml);\n      if (child.attributes) {\n        this.setAttributes({\n          html: childHtml,\n          element: child,\n          storage,\n          intent,\n          linkService,\n        });\n      }\n\n      if (child.children?.length > 0) {\n        stack.push([child, -1, childHtml]);\n      } else if (child.value) {\n        const node = document.createTextNode(child.value);\n        if (isNotForRichText && XfaText.shouldBuildText(name)) {\n          textDivs.push(node);\n        }\n        childHtml.append(node);\n      }\n    }\n\n    /**\n     * TODO: re-enable that stuff once we've JS implementation.\n     * See https://bugzilla.mozilla.org/show_bug.cgi?id=1719465.\n     *\n     * for (const el of rootDiv.querySelectorAll(\n     * \".xfaDisabled input, .xfaDisabled textarea\"\n     * )) {\n     * el.setAttribute(\"disabled\", true);\n     * }\n     * for (const el of rootDiv.querySelectorAll(\n     * \".xfaReadOnly input, .xfaReadOnly textarea\"\n     * )) {\n     * el.setAttribute(\"readOnly\", true);\n     * }\n     */\n\n    for (const el of rootDiv.querySelectorAll(\n      \".xfaNonInteractive input, .xfaNonInteractive textarea\"\n    )) {\n      el.setAttribute(\"readOnly\", true);\n    }\n\n    return {\n      textDivs,\n    };\n  }\n\n  /**\n   * Update the XFA layer.\n   *\n   * @param {XfaLayerParameters} parameters\n   */\n  static update(parameters) {\n    const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n    parameters.div.style.transform = transform;\n    parameters.div.hidden = false;\n  }\n}\n\nexport { XfaLayer };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  BaseException,\n  FeatureTest,\n  shadow,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { XfaLayer } from \"./xfa_layer.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass PixelsPerInch {\n  static CSS = 96.0;\n\n  static PDF = 72.0;\n\n  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\n\nasync function fetchData(url, type = \"text\") {\n  if (\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n    isValidFetchUrl(url, document.baseURI)\n  ) {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    switch (type) {\n      case \"arraybuffer\":\n        return response.arrayBuffer();\n      case \"blob\":\n        return response.blob();\n      case \"json\":\n        return response.json();\n    }\n    return response.text();\n  }\n\n  // The Fetch API is not supported.\n  return new Promise((resolve, reject) => {\n    const request = new XMLHttpRequest();\n    request.open(\"GET\", url, /* async = */ true);\n    request.responseType = type;\n\n    request.onreadystatechange = () => {\n      if (request.readyState !== XMLHttpRequest.DONE) {\n        return;\n      }\n      if (request.status === 200 || request.status === 0) {\n        switch (type) {\n          case \"arraybuffer\":\n          case \"blob\":\n          case \"json\":\n            resolve(request.response);\n            return;\n        }\n        resolve(request.responseText);\n        return;\n      }\n      reject(new Error(request.statusText));\n    };\n\n    request.send(null);\n  });\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array<number>} viewBox - The xMin, yMin, xMax and\n *   yMax coordinates.\n * @property {number} userUnit - The size of units.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n *   default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n *   default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n *   viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n *   in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n *   The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n *   The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n  /**\n   * @param {PageViewportParameters}\n   */\n  constructor({\n    viewBox,\n    userUnit,\n    scale,\n    rotation,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false,\n  }) {\n    this.viewBox = viewBox;\n    this.userUnit = userUnit;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n\n    scale *= userUnit; // Take the userUnit into account.\n\n    // creating transform to convert pdf coordinate system to the normal\n    // canvas like coordinates taking in account scale and rotation\n    const centerX = (viewBox[2] + viewBox[0]) / 2;\n    const centerY = (viewBox[3] + viewBox[1]) / 2;\n    let rotateA, rotateB, rotateC, rotateD;\n    // Normalize the rotation, by clamping it to the [0, 360) range.\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\n          \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n        );\n    }\n\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = (viewBox[3] - viewBox[1]) * scale;\n      height = (viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = (viewBox[2] - viewBox[0]) * scale;\n      height = (viewBox[3] - viewBox[1]) * scale;\n    }\n    // creating transform for the following operations:\n    // translate(-centerX, -centerY), rotate and flip vertically,\n    // scale, and translate(offsetCanvasX, offsetCanvasY)\n    this.transform = [\n      rotateA * scale,\n      rotateB * scale,\n      rotateC * scale,\n      rotateD * scale,\n      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n    ];\n\n    this.width = width;\n    this.height = height;\n  }\n\n  /**\n   * The original, un-scaled, viewport dimensions.\n   * @type {Object}\n   */\n  get rawDims() {\n    const dims = this.viewBox;\n\n    return shadow(this, \"rawDims\", {\n      pageWidth: dims[2] - dims[0],\n      pageHeight: dims[3] - dims[1],\n      pageX: dims[0],\n      pageY: dims[1],\n    });\n  }\n\n  /**\n   * Clones viewport, with optional additional properties.\n   * @param {PageViewportCloneParameters} [params]\n   * @returns {PageViewport} Cloned viewport.\n   */\n  clone({\n    scale = this.scale,\n    rotation = this.rotation,\n    offsetX = this.offsetX,\n    offsetY = this.offsetY,\n    dontFlip = false,\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.viewBox.slice(),\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip,\n    });\n  }\n\n  /**\n   * Converts PDF point to the viewport coordinates. For examples, useful for\n   * converting PDF location into canvas pixel coordinates.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Array} Array containing `x`- and `y`-coordinates of the\n   *   point in the viewport coordinate space.\n   * @see {@link convertToPdfPoint}\n   * @see {@link convertToViewportRectangle}\n   */\n  convertToViewportPoint(x, y) {\n    const p = [x, y];\n    Util.applyTransform(p, this.transform);\n    return p;\n  }\n\n  /**\n   * Converts PDF rectangle to the viewport coordinates.\n   * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n   * @returns {Array} Array containing corresponding coordinates of the\n   *   rectangle in the viewport coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToViewportRectangle(rect) {\n    const topLeft = [rect[0], rect[1]];\n    Util.applyTransform(topLeft, this.transform);\n    const bottomRight = [rect[2], rect[3]];\n    Util.applyTransform(bottomRight, this.transform);\n    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n  }\n\n  /**\n   * Converts viewport coordinates to the PDF location. For examples, useful\n   * for converting canvas pixel location into PDF one.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Array} Array containing `x`- and `y`-coordinates of the\n   *   point in the PDF coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToPdfPoint(x, y) {\n    const p = [x, y];\n    Util.applyInverseTransform(p, this.transform);\n    return p;\n  }\n}\n\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\n\nfunction isDataScheme(url) {\n  const ii = url.length;\n  let i = 0;\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n  [url] = url.split(/[#?]/, 1);\n  return url.substring(url.lastIndexOf(\"/\") + 1);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n *   unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n  if (isDataScheme(url)) {\n    warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n\n  const getURL = urlString => {\n    try {\n      return new URL(urlString);\n    } catch {\n      try {\n        return new URL(decodeURIComponent(urlString));\n      } catch {\n        try {\n          // Attempt to parse the URL using the document's base URI.\n          return new URL(urlString, \"https://foo.bar\");\n        } catch {\n          try {\n            return new URL(decodeURIComponent(urlString), \"https://foo.bar\");\n          } catch {\n            return null;\n          }\n        }\n      }\n    }\n  };\n\n  const newURL = getURL(url);\n  if (!newURL) {\n    // If the URL is invalid, return the default filename.\n    return defaultFilename;\n  }\n\n  const decode = name => {\n    try {\n      let decoded = decodeURIComponent(name);\n      if (decoded.includes(\"/\")) {\n        decoded = decoded.split(\"/\").at(-1);\n        if (decoded.test(/^\\.pdf$/i)) {\n          return decoded;\n        }\n        return name;\n      }\n      return decoded;\n    } catch {\n      return name;\n    }\n  };\n\n  const pdfRegex = /\\.pdf$/i;\n  const filename = newURL.pathname.split(\"/\").at(-1);\n  if (pdfRegex.test(filename)) {\n    return decode(filename);\n  }\n\n  if (newURL.searchParams.size > 0) {\n    const values = Array.from(newURL.searchParams.values()).reverse();\n    for (const value of values) {\n      if (pdfRegex.test(value)) {\n        // If any of the search parameters ends with \".pdf\", return it.\n        return decode(value);\n      }\n    }\n    const keys = Array.from(newURL.searchParams.keys()).reverse();\n    for (const key of keys) {\n      if (pdfRegex.test(key)) {\n        // If any of the search parameter keys ends with \".pdf\", return it.\n        return decode(key);\n      }\n    }\n  }\n\n  if (newURL.hash) {\n    const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n    const hashFilename = reFilename.exec(newURL.hash);\n    if (hashFilename) {\n      return decode(hashFilename[0]);\n    }\n  }\n\n  return defaultFilename;\n}\n\nclass StatTimer {\n  started = Object.create(null);\n\n  times = [];\n\n  time(name) {\n    if (name in this.started) {\n      warn(`Timer is already running for ${name}`);\n    }\n    this.started[name] = Date.now();\n  }\n\n  timeEnd(name) {\n    if (!(name in this.started)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.started[name],\n      end: Date.now(),\n    });\n    // Remove timer from started so it can be called again.\n    delete this.started[name];\n  }\n\n  toString() {\n    // Find the longest name for padding purposes.\n    const outBuf = [];\n    let longest = 0;\n    for (const { name } of this.times) {\n      longest = Math.max(name.length, longest);\n    }\n    for (const { name, start, end } of this.times) {\n      outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n    }\n    return outBuf.join(\"\");\n  }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n  if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n    throw new Error(\"Not implemented: isValidFetchUrl\");\n  }\n  const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  // The Fetch API only supports the http/https protocols, and not file/ftp.\n  return res?.protocol === \"http:\" || res?.protocol === \"https:\";\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenu(e) {\n  e.preventDefault();\n}\n\nfunction stopEvent(e) {\n  e.preventDefault();\n  e.stopPropagation();\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n  // eslint-disable-next-line no-console\n  console.log(\"Deprecated API usage: \" + details);\n}\n\nclass PDFDateString {\n  static #regex;\n\n  /**\n   * Convert a PDF date string to a JavaScript `Date` object.\n   *\n   * The PDF date string format is described in section 7.9.4 of the official\n   * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n   * edition) Adobe describes the same format including a trailing apostrophe.\n   * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n   * them. We ignore all apostrophes as they are not necessary for date parsing.\n   *\n   * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n   * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n   * parts of the date string).\n   *\n   * @param {string} input\n   * @returns {Date|null}\n   */\n  static toDateObject(input) {\n    if (input instanceof Date) {\n      return input;\n    }\n    if (!input || typeof input !== \"string\") {\n      return null;\n    }\n\n    // Lazily initialize the regular expression.\n    this.#regex ||= new RegExp(\n      \"^D:\" + // Prefix (required)\n        \"(\\\\d{4})\" + // Year (required)\n        \"(\\\\d{2})?\" + // Month (optional)\n        \"(\\\\d{2})?\" + // Day (optional)\n        \"(\\\\d{2})?\" + // Hour (optional)\n        \"(\\\\d{2})?\" + // Minute (optional)\n        \"(\\\\d{2})?\" + // Second (optional)\n        \"([Z|+|-])?\" + // Universal time relation (optional)\n        \"(\\\\d{2})?\" + // Offset hour (optional)\n        \"'?\" + // Splitting apostrophe (optional)\n        \"(\\\\d{2})?\" + // Offset minute (optional)\n        \"'?\" // Trailing apostrophe (optional)\n    );\n\n    // Optional fields that don't satisfy the requirements from the regular\n    // expression (such as incorrect digit counts or numbers that are out of\n    // range) will fall back the defaults from the specification.\n    const matches = this.#regex.exec(input);\n    if (!matches) {\n      return null;\n    }\n\n    // JavaScript's `Date` object expects the month to be between 0 and 11\n    // instead of 1 and 12, so we have to correct for that.\n    const year = parseInt(matches[1], 10);\n    let month = parseInt(matches[2], 10);\n    month = month >= 1 && month <= 12 ? month - 1 : 0;\n    let day = parseInt(matches[3], 10);\n    day = day >= 1 && day <= 31 ? day : 1;\n    let hour = parseInt(matches[4], 10);\n    hour = hour >= 0 && hour <= 23 ? hour : 0;\n    let minute = parseInt(matches[5], 10);\n    minute = minute >= 0 && minute <= 59 ? minute : 0;\n    let second = parseInt(matches[6], 10);\n    second = second >= 0 && second <= 59 ? second : 0;\n    const universalTimeRelation = matches[7] || \"Z\";\n    let offsetHour = parseInt(matches[8], 10);\n    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n    let offsetMinute = parseInt(matches[9], 10) || 0;\n    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n    // Universal time relation 'Z' means that the local time is equal to the\n    // universal time, whereas the relations '+'/'-' indicate that the local\n    // time is later respectively earlier than the universal time. Every date\n    // is normalized to universal time.\n    if (universalTimeRelation === \"-\") {\n      hour += offsetHour;\n      minute += offsetMinute;\n    } else if (universalTimeRelation === \"+\") {\n      hour -= offsetHour;\n      minute -= offsetMinute;\n    }\n\n    return new Date(Date.UTC(year, month, day, hour, minute, second));\n  }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n  const { width, height } = xfaPage.attributes.style;\n  const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n  return new PageViewport({\n    viewBox,\n    userUnit: 1,\n    scale,\n    rotation,\n  });\n}\n\nfunction getRGB(color) {\n  if (color.startsWith(\"#\")) {\n    const colorRGB = parseInt(color.slice(1), 16);\n    return [\n      (colorRGB & 0xff0000) >> 16,\n      (colorRGB & 0x00ff00) >> 8,\n      colorRGB & 0x0000ff,\n    ];\n  }\n\n  if (color.startsWith(\"rgb(\")) {\n    // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n    return color\n      .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n      .split(\",\")\n      .map(x => parseInt(x));\n  }\n\n  if (color.startsWith(\"rgba(\")) {\n    return color\n      .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n      .split(\",\")\n      .map(x => parseInt(x))\n      .slice(0, 3);\n  }\n\n  warn(`Not a valid color format: \"${color}\"`);\n  return [0, 0, 0];\n}\n\nfunction getColorValues(colors) {\n  const span = document.createElement(\"span\");\n  span.style.visibility = \"hidden\";\n  // NOTE: The following does *not* affect `forced-colors: active` mode.\n  span.style.colorScheme = \"only light\";\n  document.body.append(span);\n  for (const name of colors.keys()) {\n    span.style.color = name;\n    const computedColor = window.getComputedStyle(span).color;\n    colors.set(name, getRGB(computedColor));\n  }\n  span.remove();\n}\n\nfunction getCurrentTransform(ctx) {\n  const { a, b, c, d, e, f } = ctx.getTransform();\n  return [a, b, c, d, e, f];\n}\n\nfunction getCurrentTransformInverse(ctx) {\n  const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();\n  return [a, b, c, d, e, f];\n}\n\n/**\n * @param {HTMLDivElement} div\n * @param {PageViewport} viewport\n * @param {boolean} mustFlip\n * @param {boolean} mustRotate\n */\nfunction setLayerDimensions(\n  div,\n  viewport,\n  mustFlip = false,\n  mustRotate = true\n) {\n  if (viewport instanceof PageViewport) {\n    const { pageWidth, pageHeight } = viewport.rawDims;\n    const { style } = div;\n    const useRound = FeatureTest.isCSSRoundSupported;\n\n    const w = `var(--total-scale-factor) * ${pageWidth}px`,\n      h = `var(--total-scale-factor) * ${pageHeight}px`;\n    const widthStr = useRound\n        ? `round(down, ${w}, var(--scale-round-x))`\n        : `calc(${w})`,\n      heightStr = useRound\n        ? `round(down, ${h}, var(--scale-round-y))`\n        : `calc(${h})`;\n\n    if (!mustFlip || viewport.rotation % 180 === 0) {\n      style.width = widthStr;\n      style.height = heightStr;\n    } else {\n      style.width = heightStr;\n      style.height = widthStr;\n    }\n  }\n\n  if (mustRotate) {\n    div.setAttribute(\"data-main-rotation\", viewport.rotation);\n  }\n}\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n  constructor() {\n    const { pixelRatio } = OutputScale;\n\n    /**\n     * @type {number} Horizontal scale.\n     */\n    this.sx = pixelRatio;\n\n    /**\n     * @type {number} Vertical scale.\n     */\n    this.sy = pixelRatio;\n  }\n\n  /**\n   * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n   */\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n\n  /**\n   * @type {boolean} Returns `true` when scaling is symmetric,\n   *   `false` otherwise.\n   */\n  get symmetric() {\n    return this.sx === this.sy;\n  }\n\n  /**\n   * @returns {boolean} Returns `true` if scaling was limited,\n   *   `false` otherwise.\n   */\n  limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {\n    let maxAreaScale = Infinity,\n      maxWidthScale = Infinity,\n      maxHeightScale = Infinity;\n\n    maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);\n    if (maxPixels > 0) {\n      maxAreaScale = Math.sqrt(maxPixels / (width * height));\n    }\n    if (maxDim !== -1) {\n      maxWidthScale = maxDim / width;\n      maxHeightScale = maxDim / height;\n    }\n    const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n\n    if (this.sx > maxScale || this.sy > maxScale) {\n      this.sx = maxScale;\n      this.sy = maxScale;\n      return true;\n    }\n    return false;\n  }\n\n  static get pixelRatio() {\n    return globalThis.devicePixelRatio || 1;\n  }\n\n  static capPixels(maxPixels, capAreaFactor) {\n    if (capAreaFactor >= 0) {\n      const winPixels = Math.ceil(\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")\n          ? window.innerWidth * window.innerHeight\n          : window.screen.availWidth * window.screen.availHeight) *\n          this.pixelRatio ** 2 *\n          (1 + capAreaFactor / 100)\n      );\n      return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;\n    }\n    return maxPixels;\n  }\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types\n// to know which types are supported by the browser.\nconst SupportedImageMimeTypes = [\n  \"image/apng\",\n  \"image/avif\",\n  \"image/bmp\",\n  \"image/gif\",\n  \"image/jpeg\",\n  \"image/png\",\n  \"image/svg+xml\",\n  \"image/webp\",\n  \"image/x-icon\",\n];\n\nclass ColorScheme {\n  static get isDarkMode() {\n    return shadow(\n      this,\n      \"isDarkMode\",\n      !!window?.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n    );\n  }\n}\n\nclass CSSConstants {\n  static get commentForegroundColor() {\n    const element = document.createElement(\"span\");\n    element.classList.add(\"comment\", \"sidebar\");\n    const { style } = element;\n    style.width = style.height = \"0\";\n    style.display = \"none\";\n    style.color = \"var(--comment-fg-color)\";\n    document.body.append(element);\n    const { color } = window.getComputedStyle(element);\n    element.remove();\n    return shadow(this, \"commentForegroundColor\", getRGB(color));\n  }\n}\n\nfunction applyOpacity(r, g, b, opacity) {\n  opacity = Math.min(Math.max(opacity ?? 1, 0), 1);\n  const white = 255 * (1 - opacity);\n  r = Math.round(r * opacity + white);\n  g = Math.round(g * opacity + white);\n  b = Math.round(b * opacity + white);\n  return [r, g, b];\n}\n\nfunction RGBToHSL(rgb, output) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n\n  if (max === min) {\n    // achromatic\n    output[0] = output[1] = 0; // hue and saturation are 0\n  } else {\n    const d = max - min;\n    output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min);\n    // hue\n    switch (max) {\n      case r:\n        output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60;\n        break;\n      case g:\n        output[0] = ((b - r) / d + 2) * 60;\n        break;\n      case b:\n        output[0] = ((r - g) / d + 4) * 60;\n        break;\n    }\n  }\n  output[2] = l;\n}\n\nfunction HSLToRGB(hsl, output) {\n  const h = hsl[0];\n  const s = hsl[1];\n  const l = hsl[2];\n  const c = (1 - Math.abs(2 * l - 1)) * s; // chroma\n  const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n  const m = l - c / 2;\n\n  switch (Math.floor(h / 60)) {\n    case 0:\n      output[0] = c + m;\n      output[1] = x + m;\n      output[2] = m;\n      break;\n    case 1:\n      output[0] = x + m;\n      output[1] = c + m;\n      output[2] = m;\n      break;\n    case 2:\n      output[0] = m;\n      output[1] = c + m;\n      output[2] = x + m;\n      break;\n    case 3:\n      output[0] = m;\n      output[1] = x + m;\n      output[2] = c + m;\n      break;\n    case 4:\n      output[0] = x + m;\n      output[1] = m;\n      output[2] = c + m;\n      break;\n    case 5:\n    case 6:\n      output[0] = c + m;\n      output[1] = m;\n      output[2] = x + m;\n      break;\n  }\n}\n\nfunction computeLuminance(x) {\n  return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n}\n\nfunction contrastRatio(hsl1, hsl2, output) {\n  HSLToRGB(hsl1, output);\n  output.map(computeLuminance);\n  const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  HSLToRGB(hsl2, output);\n  output.map(computeLuminance);\n  const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  return lum1 > lum2\n    ? (lum1 + 0.05) / (lum2 + 0.05)\n    : (lum2 + 0.05) / (lum1 + 0.05);\n}\n\n// Cache for the findContrastColor function, to improve performance.\nconst contrastCache = new Map();\n\n/**\n * Find a color that has sufficient contrast against a fixed color.\n * The luminance (in HSL color space) of the base color is adjusted\n * until the contrast ratio between the base color and the fixed color\n * is at least the minimum contrast ratio required by WCAG 2.1.\n * @param {Array<number>} baseColor\n * @param {Array<number>} fixedColor\n * @returns {string}\n */\nfunction findContrastColor(baseColor, fixedColor) {\n  const key =\n    baseColor[0] +\n    baseColor[1] * 0x100 +\n    baseColor[2] * 0x10000 +\n    fixedColor[0] * 0x1000000 +\n    fixedColor[1] * 0x100000000 +\n    fixedColor[2] * 0x10000000000;\n  let cachedValue = contrastCache.get(key);\n  if (cachedValue) {\n    return cachedValue;\n  }\n  const array = new Float32Array(9);\n  const output = array.subarray(0, 3);\n  const baseHSL = array.subarray(3, 6);\n  RGBToHSL(baseColor, baseHSL);\n  const fixedHSL = array.subarray(6, 9);\n  RGBToHSL(fixedColor, fixedHSL);\n  const isFixedColorDark = fixedHSL[2] < 0.5;\n\n  // Use the contrast ratio requirements from WCAG 2.1.\n  // https://www.w3.org/TR/WCAG21/#contrast-minimum\n  // https://www.w3.org/TR/WCAG21/#contrast-enhanced\n  const minContrast = isFixedColorDark ? 12 : 4.5;\n\n  baseHSL[2] = isFixedColorDark\n    ? Math.sqrt(baseHSL[2])\n    : 1 - Math.sqrt(1 - baseHSL[2]);\n\n  if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n    let start, end;\n    if (isFixedColorDark) {\n      start = baseHSL[2];\n      end = 1;\n    } else {\n      start = 0;\n      end = baseHSL[2];\n    }\n    const PRECISION = 0.005;\n    while (end - start > PRECISION) {\n      const mid = (baseHSL[2] = (start + end) / 2);\n      if (\n        isFixedColorDark ===\n        contrastRatio(baseHSL, fixedHSL, output) < minContrast\n      ) {\n        start = mid;\n      } else {\n        end = mid;\n      }\n    }\n    baseHSL[2] = isFixedColorDark ? end : start;\n  }\n\n  HSLToRGB(baseHSL, output);\n  cachedValue = Util.makeHexColor(\n    Math.round(output[0] * 255),\n    Math.round(output[1] * 255),\n    Math.round(output[2] * 255)\n  );\n  contrastCache.set(key, cachedValue);\n  return cachedValue;\n}\n\nfunction renderRichText({ html, dir, className }, container) {\n  const fragment = document.createDocumentFragment();\n  if (typeof html === \"string\") {\n    const p = document.createElement(\"p\");\n    p.dir = dir || \"auto\";\n    const lines = html.split(/(?:\\r\\n?|\\n)/);\n    for (let i = 0, ii = lines.length; i < ii; ++i) {\n      const line = lines[i];\n      p.append(document.createTextNode(line));\n      if (i < ii - 1) {\n        p.append(document.createElement(\"br\"));\n      }\n    }\n    fragment.append(p);\n  } else {\n    XfaLayer.render({\n      xfaHtml: html,\n      div: fragment,\n      intent: \"richText\",\n    });\n  }\n  fragment.firstChild.classList.add(\"richText\", className);\n  container.append(fragment);\n}\n\nexport {\n  applyOpacity,\n  ColorScheme,\n  CSSConstants,\n  deprecated,\n  fetchData,\n  findContrastColor,\n  getColorValues,\n  getCurrentTransform,\n  getCurrentTransformInverse,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getXfaPageViewport,\n  isDataScheme,\n  isPdfFile,\n  isValidFetchUrl,\n  noContextMenu,\n  OutputScale,\n  PageViewport,\n  PDFDateString,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  setLayerDimensions,\n  StatTimer,\n  stopEvent,\n  SupportedImageMimeTypes,\n  SVG_NS,\n};\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\n\nclass EditorToolbar {\n  #toolbar = null;\n\n  #colorPicker = null;\n\n  #editor;\n\n  #buttons = null;\n\n  #altText = null;\n\n  #comment = null;\n\n  #commentButtonDivider = null;\n\n  #signatureDescriptionButton = null;\n\n  static #l10nRemove = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n\n    EditorToolbar.#l10nRemove ||= Object.freeze({\n      freetext: \"pdfjs-editor-remove-freetext-button\",\n      highlight: \"pdfjs-editor-remove-highlight-button\",\n      ink: \"pdfjs-editor-remove-ink-button\",\n      stamp: \"pdfjs-editor-remove-stamp-button\",\n      signature: \"pdfjs-editor-remove-signature-button\",\n    });\n  }\n\n  render() {\n    const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n    editToolbar.classList.add(\"editToolbar\", \"hidden\");\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n\n    const signal = this.#editor._uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, { signal });\n      editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown, {\n        signal,\n      });\n    }\n\n    const buttons = (this.#buttons = document.createElement(\"div\"));\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n\n    const position = this.#editor.toolbarPosition;\n    if (position) {\n      const { style } = editToolbar;\n      const x =\n        this.#editor._uiManager.direction === \"ltr\"\n          ? 1 - position[0]\n          : position[0];\n      style.insetInlineEnd = `${100 * x}%`;\n      style.top = `calc(${\n        100 * position[1]\n      }% + var(--editor-toolbar-vert-offset))`;\n    }\n\n    return editToolbar;\n  }\n\n  get div() {\n    return this.#toolbar;\n  }\n\n  static #pointerDown(e) {\n    e.stopPropagation();\n  }\n\n  #focusIn(e) {\n    this.#editor._focusEventsAllowed = false;\n    stopEvent(e);\n  }\n\n  #focusOut(e) {\n    this.#editor._focusEventsAllowed = true;\n    stopEvent(e);\n  }\n\n  #addListenersToElement(element) {\n    // If we're clicking on a button with the keyboard or with\n    // the mouse, we don't want to trigger any focus events on\n    // the editor.\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return false;\n    }\n    element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n      capture: true,\n      signal,\n    });\n    element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n      capture: true,\n      signal,\n    });\n    element.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    return true;\n  }\n\n  hide() {\n    this.#toolbar.classList.add(\"hidden\");\n    this.#colorPicker?.hideDropdown();\n  }\n\n  show() {\n    this.#toolbar.classList.remove(\"hidden\");\n    this.#altText?.shown();\n    this.#comment?.shown();\n  }\n\n  addDeleteButton() {\n    const { editorType, _uiManager } = this.#editor;\n\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", \"deleteButton\");\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", EditorToolbar.#l10nRemove[editorType]);\n    if (this.#addListenersToElement(button)) {\n      button.addEventListener(\n        \"click\",\n        e => {\n          _uiManager.delete();\n        },\n        { signal: _uiManager._signal }\n      );\n    }\n    this.#buttons.append(button);\n  }\n\n  get #divider() {\n    const divider = document.createElement(\"div\");\n    divider.className = \"divider\";\n    return divider;\n  }\n\n  async addAltText(altText) {\n    const button = await altText.render();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n    this.#altText = altText;\n  }\n\n  addComment(comment, beforeElement = null) {\n    if (this.#comment) {\n      return;\n    }\n    const button = comment.renderForToolbar();\n    if (!button) {\n      return;\n    }\n    this.#addListenersToElement(button);\n    const divider = (this.#commentButtonDivider = this.#divider);\n    if (!beforeElement) {\n      this.#buttons.append(button, divider);\n    } else {\n      this.#buttons.insertBefore(button, beforeElement);\n      this.#buttons.insertBefore(divider, beforeElement);\n    }\n    this.#comment = comment;\n    comment.toolbar = this;\n  }\n\n  addColorPicker(colorPicker) {\n    if (this.#colorPicker) {\n      return;\n    }\n    this.#colorPicker = colorPicker;\n    const button = colorPicker.renderButton();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n\n  async addEditSignatureButton(signatureManager) {\n    const button = (this.#signatureDescriptionButton =\n      await signatureManager.renderEditButton(this.#editor));\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n\n  removeButton(name) {\n    switch (name) {\n      case \"comment\":\n        this.#comment?.removeToolbarCommentButton();\n        this.#comment = null;\n        this.#commentButtonDivider?.remove();\n        this.#commentButtonDivider = null;\n        break;\n    }\n  }\n\n  async addButton(name, tool) {\n    switch (name) {\n      case \"colorPicker\":\n        this.addColorPicker(tool);\n        break;\n      case \"altText\":\n        await this.addAltText(tool);\n        break;\n      case \"editSignature\":\n        await this.addEditSignatureButton(tool);\n        break;\n      case \"delete\":\n        this.addDeleteButton();\n        break;\n      case \"comment\":\n        this.addComment(tool);\n        break;\n    }\n  }\n\n  async addButtonBefore(name, tool, beforeSelector) {\n    const beforeElement = this.#buttons.querySelector(beforeSelector);\n    if (!beforeElement) {\n      return;\n    }\n    if (name === \"comment\") {\n      this.addComment(tool, beforeElement);\n    }\n  }\n\n  updateEditSignatureButton(description) {\n    if (this.#signatureDescriptionButton) {\n      this.#signatureDescriptionButton.title = description;\n    }\n  }\n\n  remove() {\n    this.#toolbar.remove();\n    this.#colorPicker?.destroy();\n    this.#colorPicker = null;\n  }\n}\n\nclass FloatingToolbar {\n  #buttons = null;\n\n  #toolbar = null;\n\n  #uiManager;\n\n  constructor(uiManager) {\n    this.#uiManager = uiManager;\n  }\n\n  #render() {\n    const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n        signal,\n      });\n    }\n\n    const buttons = (this.#buttons = document.createElement(\"div\"));\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n\n    if (this.#uiManager.hasCommentManager()) {\n      this.#makeButton(\n        \"commentButton\",\n        `pdfjs-comment-floating-button`,\n        \"pdfjs-comment-floating-button-label\",\n        () => {\n          this.#uiManager.commentSelection(\"floating_button\");\n        }\n      );\n    }\n\n    this.#makeButton(\n      \"highlightButton\",\n      `pdfjs-highlight-floating-button1`,\n      \"pdfjs-highlight-floating-button-label\",\n      () => {\n        this.#uiManager.highlightSelection(\"floating_button\");\n      }\n    );\n\n    return editToolbar;\n  }\n\n  #getLastPoint(boxes, isLTR) {\n    let lastY = 0;\n    let lastX = 0;\n    for (const box of boxes) {\n      const y = box.y + box.height;\n      if (y < lastY) {\n        continue;\n      }\n      const x = box.x + (isLTR ? box.width : 0);\n      if (y > lastY) {\n        lastX = x;\n        lastY = y;\n        continue;\n      }\n      if (isLTR) {\n        if (x > lastX) {\n          lastX = x;\n        }\n      } else if (x < lastX) {\n        lastX = x;\n      }\n    }\n    return [isLTR ? 1 - lastX : lastX, lastY];\n  }\n\n  show(parent, boxes, isLTR) {\n    const [x, y] = this.#getLastPoint(boxes, isLTR);\n    const { style } = (this.#toolbar ||= this.#render());\n    parent.append(this.#toolbar);\n    style.insetInlineEnd = `${100 * x}%`;\n    style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n  }\n\n  hide() {\n    this.#toolbar.remove();\n  }\n\n  #makeButton(buttonClass, l10nId, labelL10nId, clickHandler) {\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", buttonClass);\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", l10nId);\n    const span = document.createElement(\"span\");\n    button.append(span);\n    span.className = \"visuallyHidden\";\n    span.setAttribute(\"data-l10n-id\", labelL10nId);\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      button.addEventListener(\"contextmenu\", noContextMenu, { signal });\n      button.addEventListener(\"click\", clickHandler, { signal });\n    }\n    this.#buttons.append(button);\n  }\n}\n\nexport { EditorToolbar, FloatingToolbar };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./editor.js\").AnnotationEditor} AnnotationEditor */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  FeatureTest,\n  getUuid,\n  shadow,\n  Util,\n  warn,\n} from \"../../shared/util.js\";\nimport {\n  fetchData,\n  getColorValues,\n  getRGB,\n  PixelsPerInch,\n  stopEvent,\n} from \"../display_utils.js\";\nimport { FloatingToolbar } from \"./toolbar.js\";\n\nfunction bindEvents(obj, element, names) {\n  for (const name of names) {\n    element.addEventListener(name, obj[name].bind(obj));\n  }\n}\n\n/**\n * Class to create some unique ids for the different editors.\n */\nclass IdManager {\n  #id = 0;\n\n  constructor() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      Object.defineProperty(this, \"reset\", {\n        value: () => (this.#id = 0),\n      });\n    }\n  }\n\n  /**\n   * Get a unique id.\n   * @returns {string}\n   */\n  get id() {\n    return `${AnnotationEditorPrefix}${this.#id++}`;\n  }\n}\n\n/**\n * Class to manage the images used by the editors.\n * The main idea is to try to minimize the memory used by the images.\n * The images are cached and reused when possible\n * We use a refCounter to know when an image is not used anymore but we need to\n * be able to restore an image after a remove+undo, so we keep a file reference\n * or an url one.\n */\nclass ImageManager {\n  #baseId = getUuid();\n\n  #id = 0;\n\n  #cache = null;\n\n  static get _isSVGFittingCanvas() {\n    // By default, Firefox doesn't rescale without preserving the aspect ratio\n    // when drawing an SVG image on a canvas, see https://bugzilla.mozilla.org/1547776.\n    // The \"workaround\" is to append \"svgView(preserveAspectRatio(none))\" to the\n    // url, but according to comment #15, it seems that it leads to unexpected\n    // behavior in Safari.\n    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox=\"0 0 1 1\" width=\"1\" height=\"1\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"1\" height=\"1\" style=\"fill:red;\"/></svg>`;\n    const canvas = new OffscreenCanvas(1, 3);\n    const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n    const image = new Image();\n    image.src = svg;\n    const promise = image.decode().then(() => {\n      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n    });\n\n    return shadow(this, \"_isSVGFittingCanvas\", promise);\n  }\n\n  async #get(key, rawData) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(key);\n    if (data === null) {\n      // We already tried to load the image but it failed.\n      return null;\n    }\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    try {\n      data ||= {\n        bitmap: null,\n        id: `image_${this.#baseId}_${this.#id++}`,\n        refCounter: 0,\n        isSvg: false,\n      };\n      let image;\n      if (typeof rawData === \"string\") {\n        data.url = rawData;\n        image = await fetchData(rawData, \"blob\");\n      } else if (rawData instanceof File) {\n        image = data.file = rawData;\n      } else if (rawData instanceof Blob) {\n        image = rawData;\n      }\n\n      if (image.type === \"image/svg+xml\") {\n        // Unfortunately, createImageBitmap doesn't work with SVG images.\n        // (see https://bugzilla.mozilla.org/1841972).\n        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n        const fileReader = new FileReader();\n        const imageElement = new Image();\n        const imagePromise = new Promise((resolve, reject) => {\n          imageElement.onload = () => {\n            data.bitmap = imageElement;\n            data.isSvg = true;\n            resolve();\n          };\n          fileReader.onload = async () => {\n            const url = (data.svgUrl = fileReader.result);\n            // We need to set the preserveAspectRatio to none in order to let\n            // the image fits the canvas when resizing.\n            imageElement.src = (await mustRemoveAspectRatioPromise)\n              ? `${url}#svgView(preserveAspectRatio(none))`\n              : url;\n          };\n          imageElement.onerror = fileReader.onerror = reject;\n        });\n        fileReader.readAsDataURL(image);\n        await imagePromise;\n      } else {\n        data.bitmap = await createImageBitmap(image);\n      }\n      data.refCounter = 1;\n    } catch (e) {\n      warn(e);\n      data = null;\n    }\n    this.#cache.set(key, data);\n    if (data) {\n      this.#cache.set(data.id, data);\n    }\n    return data;\n  }\n\n  async getFromFile(file) {\n    const { lastModified, name, size, type } = file;\n    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n  }\n\n  async getFromUrl(url) {\n    return this.#get(url, url);\n  }\n\n  async getFromBlob(id, blobPromise) {\n    const blob = await blobPromise;\n    return this.#get(id, blob);\n  }\n\n  async getFromId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return null;\n    }\n    if (data.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n\n    if (data.file) {\n      return this.getFromFile(data.file);\n    }\n    if (data.blobPromise) {\n      const { blobPromise } = data;\n      delete data.blobPromise;\n      return this.getFromBlob(data.id, blobPromise);\n    }\n    return this.getFromUrl(data.url);\n  }\n\n  getFromCanvas(id, canvas) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(id);\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n    const ctx = offscreen.getContext(\"2d\");\n    ctx.drawImage(canvas, 0, 0);\n    data = {\n      bitmap: offscreen.transferToImageBitmap(),\n      id: `image_${this.#baseId}_${this.#id++}`,\n      refCounter: 1,\n      isSvg: false,\n    };\n    this.#cache.set(id, data);\n    this.#cache.set(data.id, data);\n    return data;\n  }\n\n  getSvgUrl(id) {\n    const data = this.#cache.get(id);\n    if (!data?.isSvg) {\n      return null;\n    }\n    return data.svgUrl;\n  }\n\n  deleteId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return;\n    }\n    data.refCounter -= 1;\n    if (data.refCounter !== 0) {\n      return;\n    }\n    const { bitmap } = data;\n    if (!data.url && !data.file) {\n      // The image has no way to be restored (ctrl+z) so we must fix that.\n      const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n      const ctx = canvas.getContext(\"bitmaprenderer\");\n      ctx.transferFromImageBitmap(bitmap);\n      data.blobPromise = canvas.convertToBlob();\n    }\n\n    bitmap.close?.();\n    data.bitmap = null;\n  }\n\n  // We can use the id only if it belongs this manager.\n  // We must take care of having the right manager because we can copy/paste\n  // some images from other documents, hence it'd be a pity to use an id from an\n  // other manager.\n  isValidId(id) {\n    return id.startsWith(`image_${this.#baseId}_`);\n  }\n}\n\n/**\n * Class to handle undo/redo.\n * Commands are just saved in a buffer.\n * If we hit some memory issues we could likely use a circular buffer.\n * It has to be used as a singleton.\n */\nclass CommandManager {\n  #commands = [];\n\n  #locked = false;\n\n  #maxSize;\n\n  #position = -1;\n\n  constructor(maxSize = 128) {\n    this.#maxSize = maxSize;\n  }\n\n  /**\n   * @typedef {Object} addOptions\n   * @property {function} cmd\n   * @property {function} undo\n   * @property {function} [post]\n   * @property {boolean} mustExec\n   * @property {number} type\n   * @property {boolean} overwriteIfSameType\n   * @property {boolean} keepUndo\n   */\n\n  /**\n   * Add a new couple of commands to be used in case of redo/undo.\n   * @param {addOptions} options\n   */\n  add({\n    cmd,\n    undo,\n    post,\n    mustExec,\n    type = NaN,\n    overwriteIfSameType = false,\n    keepUndo = false,\n  }) {\n    if (mustExec) {\n      cmd();\n    }\n\n    if (this.#locked) {\n      return;\n    }\n\n    const save = { cmd, undo, post, type };\n    if (this.#position === -1) {\n      if (this.#commands.length > 0) {\n        // All the commands have been undone and then a new one is added\n        // hence we clear the queue.\n        this.#commands.length = 0;\n      }\n      this.#position = 0;\n      this.#commands.push(save);\n      return;\n    }\n\n    if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n      // For example when we change a color we don't want to\n      // be able to undo all the steps, hence we only want to\n      // keep the last undoable action in this sequence of actions.\n      if (keepUndo) {\n        save.undo = this.#commands[this.#position].undo;\n      }\n      this.#commands[this.#position] = save;\n      return;\n    }\n\n    const next = this.#position + 1;\n    if (next === this.#maxSize) {\n      this.#commands.splice(0, 1);\n    } else {\n      this.#position = next;\n      if (next < this.#commands.length) {\n        this.#commands.splice(next);\n      }\n    }\n\n    this.#commands.push(save);\n  }\n\n  /**\n   * Undo the last command.\n   */\n  undo() {\n    if (this.#position === -1) {\n      // Nothing to undo.\n      return;\n    }\n\n    // Avoid to insert something during the undo execution.\n    this.#locked = true;\n    const { undo, post } = this.#commands[this.#position];\n    undo();\n    post?.();\n    this.#locked = false;\n\n    this.#position -= 1;\n  }\n\n  /**\n   * Redo the last command.\n   */\n  redo() {\n    if (this.#position < this.#commands.length - 1) {\n      this.#position += 1;\n\n      // Avoid to insert something during the redo execution.\n      this.#locked = true;\n      const { cmd, post } = this.#commands[this.#position];\n      cmd();\n      post?.();\n      this.#locked = false;\n    }\n  }\n\n  /**\n   * Check if there is something to undo.\n   * @returns {boolean}\n   */\n  hasSomethingToUndo() {\n    return this.#position !== -1;\n  }\n\n  /**\n   * Check if there is something to redo.\n   * @returns {boolean}\n   */\n  hasSomethingToRedo() {\n    return this.#position < this.#commands.length - 1;\n  }\n\n  cleanType(type) {\n    if (this.#position === -1) {\n      return;\n    }\n    for (let i = this.#position; i >= 0; i--) {\n      if (this.#commands[i].type !== type) {\n        this.#commands.splice(i + 1, this.#position - i);\n        this.#position = i;\n        return;\n      }\n    }\n    this.#commands.length = 0;\n    this.#position = -1;\n  }\n\n  destroy() {\n    this.#commands = null;\n  }\n}\n\n/**\n * Class to handle the different keyboards shortcuts we can have on mac or\n * non-mac OSes.\n */\nclass KeyboardManager {\n  /**\n   * Create a new keyboard manager class.\n   * @param {Array<Array>} callbacks - an array containing an array of shortcuts\n   * and a callback to call.\n   * A shortcut is a string like `ctrl+c` or `mac+ctrl+c` for mac OS.\n   */\n  constructor(callbacks) {\n    this.buffer = [];\n    this.callbacks = new Map();\n    this.allKeys = new Set();\n\n    const { isMac } = FeatureTest.platform;\n    for (const [keys, callback, options = {}] of callbacks) {\n      for (const key of keys) {\n        const isMacKey = key.startsWith(\"mac+\");\n        if (isMac && isMacKey) {\n          this.callbacks.set(key.slice(4), { callback, options });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        } else if (!isMac && !isMacKey) {\n          this.callbacks.set(key, { callback, options });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        }\n      }\n    }\n  }\n\n  /**\n   * Serialize an event into a string in order to match a\n   * potential key for a callback.\n   * @param {KeyboardEvent} event\n   * @returns {string}\n   */\n  #serialize(event) {\n    if (event.altKey) {\n      this.buffer.push(\"alt\");\n    }\n    if (event.ctrlKey) {\n      this.buffer.push(\"ctrl\");\n    }\n    if (event.metaKey) {\n      this.buffer.push(\"meta\");\n    }\n    if (event.shiftKey) {\n      this.buffer.push(\"shift\");\n    }\n    this.buffer.push(event.key);\n    const str = this.buffer.join(\"+\");\n    this.buffer.length = 0;\n\n    return str;\n  }\n\n  /**\n   * Execute a callback, if any, for a given keyboard event.\n   * The self is used as `this` in the callback.\n   * @param {Object} self\n   * @param {KeyboardEvent} event\n   * @returns\n   */\n  exec(self, event) {\n    if (!this.allKeys.has(event.key)) {\n      return;\n    }\n    const info = this.callbacks.get(this.#serialize(event));\n    if (!info) {\n      return;\n    }\n    const {\n      callback,\n      options: { bubbles = false, args = [], checker = null },\n    } = info;\n\n    if (checker && !checker(self, event)) {\n      return;\n    }\n    callback.bind(self, ...args, event)();\n\n    // For example, ctrl+s in a FreeText must be handled by the viewer, hence\n    // the event must bubble.\n    if (!bubbles) {\n      stopEvent(event);\n    }\n  }\n}\n\nclass ColorManager {\n  static _colorsMapping = new Map([\n    [\"CanvasText\", [0, 0, 0]],\n    [\"Canvas\", [255, 255, 255]],\n  ]);\n\n  get _colors() {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"LIB\") &&\n      typeof document === \"undefined\"\n    ) {\n      return shadow(this, \"_colors\", ColorManager._colorsMapping);\n    }\n\n    const colors = new Map([\n      [\"CanvasText\", null],\n      [\"Canvas\", null],\n    ]);\n    getColorValues(colors);\n    return shadow(this, \"_colors\", colors);\n  }\n\n  /**\n   * In High Contrast Mode, the color on the screen is not always the\n   * real color used in the pdf.\n   * For example in some cases white can appear to be black but when saving\n   * we want to have white.\n   * @param {string} color\n   * @returns {Array<number>}\n   */\n  convert(color) {\n    const rgb = getRGB(color);\n    if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n      return rgb;\n    }\n\n    for (const [name, RGB] of this._colors) {\n      if (RGB.every((x, i) => x === rgb[i])) {\n        return ColorManager._colorsMapping.get(name);\n      }\n    }\n    return rgb;\n  }\n\n  /**\n   * An input element must have its color value as a hex string\n   * and not as color name.\n   * So this function converts a name into an hex string.\n   * @param {string} name\n   * @returns {string}\n   */\n  getHexCode(name) {\n    const rgb = this._colors.get(name);\n    if (!rgb) {\n      return name;\n    }\n    return Util.makeHexColor(...rgb);\n  }\n}\n\n/**\n * A pdf has several pages and each of them when it will rendered\n * will have an AnnotationEditorLayer which will contain the some\n * new Annotations associated to an editor in order to modify them.\n *\n * This class is used to manage all the different layers, editors and\n * some action like copy/paste, undo/redo, ...\n */\nclass AnnotationEditorUIManager {\n  #abortController = new AbortController();\n\n  #activeEditor = null;\n\n  #allEditableAnnotations = null;\n\n  #allEditors = new Map();\n\n  #allLayers = new Map();\n\n  #altTextManager = null;\n\n  #annotationStorage = null;\n\n  #changedExistingAnnotations = null;\n\n  #commandManager = new CommandManager();\n\n  #commentManager = null;\n\n  #copyPasteAC = null;\n\n  #currentDrawingSession = null;\n\n  #currentPageIndex = 0;\n\n  #deletedAnnotationsElementIds = new Set();\n\n  #draggingEditors = null;\n\n  #editorTypes = null;\n\n  #editorsToRescale = new Set();\n\n  _editorUndoBar = null;\n\n  #enableHighlightFloatingButton = false;\n\n  #enableUpdatedAddImage = false;\n\n  #enableNewAltTextWhenAddingImage = false;\n\n  #filterFactory = null;\n\n  #focusMainContainerTimeoutId = null;\n\n  #focusManagerAC = null;\n\n  #highlightColors = null;\n\n  #highlightWhenShiftUp = false;\n\n  #floatingToolbar = null;\n\n  #idManager = new IdManager();\n\n  #isEnabled = false;\n\n  #isPointerDown = false;\n\n  #isWaiting = false;\n\n  #keyboardManagerAC = null;\n\n  #lastActiveElement = null;\n\n  #mainHighlightColorPicker = null;\n\n  #missingCanvases = null;\n\n  #mlManager = null;\n\n  #mode = AnnotationEditorType.NONE;\n\n  #selectedEditors = new Set();\n\n  #selectedTextNode = null;\n\n  #signatureManager = null;\n\n  #pageColors = null;\n\n  #showAllStates = null;\n\n  #pdfDocument = null;\n\n  #previousStates = {\n    isEditing: false,\n    isEmpty: true,\n    hasSomethingToUndo: false,\n    hasSomethingToRedo: false,\n    hasSelectedEditor: false,\n    hasSelectedText: false,\n  };\n\n  #translation = [0, 0];\n\n  #translationTimeoutId = null;\n\n  #container = null;\n\n  #viewer = null;\n\n  #viewerAlert = null;\n\n  #updateModeCapability = null;\n\n  static TRANSLATE_SMALL = 1; // page units.\n\n  static TRANSLATE_BIG = 10; // page units.\n\n  static get _keyboardManager() {\n    const proto = AnnotationEditorUIManager.prototype;\n\n    /**\n     * If the focused element is an input, we don't want to handle the arrow.\n     * For example, sliders can be controlled with the arrow keys.\n     */\n    const arrowChecker = self =>\n      self.#container.contains(document.activeElement) &&\n      document.activeElement.tagName !== \"BUTTON\" &&\n      self.hasSomethingToControl();\n\n    const textInputChecker = (_self, { target: el }) => {\n      if (el instanceof HTMLInputElement) {\n        const { type } = el;\n        return type !== \"text\" && type !== \"number\";\n      }\n      return true;\n    };\n\n    const small = this.TRANSLATE_SMALL;\n    const big = this.TRANSLATE_BIG;\n\n    return shadow(\n      this,\n      \"_keyboardManager\",\n      new KeyboardManager([\n        [\n          [\"ctrl+a\", \"mac+meta+a\"],\n          proto.selectAll,\n          { checker: textInputChecker },\n        ],\n        [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, { checker: textInputChecker }],\n        [\n          // On mac, depending of the OS version, the event.key is either \"z\" or\n          // \"Z\" when the user presses \"meta+shift+z\".\n          [\n            \"ctrl+y\",\n            \"ctrl+shift+z\",\n            \"mac+meta+shift+z\",\n            \"ctrl+shift+Z\",\n            \"mac+meta+shift+Z\",\n          ],\n          proto.redo,\n          { checker: textInputChecker },\n        ],\n        [\n          [\n            \"Backspace\",\n            \"alt+Backspace\",\n            \"ctrl+Backspace\",\n            \"shift+Backspace\",\n            \"mac+Backspace\",\n            \"mac+alt+Backspace\",\n            \"mac+ctrl+Backspace\",\n            \"Delete\",\n            \"ctrl+Delete\",\n            \"shift+Delete\",\n            \"mac+Delete\",\n          ],\n          proto.delete,\n          { checker: textInputChecker },\n        ],\n        [\n          [\"Enter\", \"mac+Enter\"],\n          proto.addNewEditorFromKeyboard,\n          {\n            // Those shortcuts can be used in the toolbar for some other actions\n            // like zooming, hence we need to check if the container has the\n            // focus.\n            checker: (self, { target: el }) =>\n              !(el instanceof HTMLButtonElement) &&\n              self.#container.contains(el) &&\n              !self.isEnterHandled,\n          },\n        ],\n        [\n          [\" \", \"mac+ \"],\n          proto.addNewEditorFromKeyboard,\n          {\n            // Those shortcuts can be used in the toolbar for some other actions\n            // like zooming, hence we need to check if the container has the\n            // focus.\n            checker: (self, { target: el }) =>\n              !(el instanceof HTMLButtonElement) &&\n              self.#container.contains(document.activeElement),\n          },\n        ],\n        [[\"Escape\", \"mac+Escape\"], proto.unselectAll],\n        [\n          [\"ArrowLeft\", \"mac+ArrowLeft\"],\n          proto.translateSelectedEditors,\n          { args: [-small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n          proto.translateSelectedEditors,\n          { args: [-big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowRight\", \"mac+ArrowRight\"],\n          proto.translateSelectedEditors,\n          { args: [small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n          proto.translateSelectedEditors,\n          { args: [big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowUp\", \"mac+ArrowUp\"],\n          proto.translateSelectedEditors,\n          { args: [0, -small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n          proto.translateSelectedEditors,\n          { args: [0, -big], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowDown\", \"mac+ArrowDown\"],\n          proto.translateSelectedEditors,\n          { args: [0, small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n          proto.translateSelectedEditors,\n          { args: [0, big], checker: arrowChecker },\n        ],\n      ])\n    );\n  }\n\n  constructor(\n    container,\n    viewer,\n    viewerAlert,\n    altTextManager,\n    commentManager,\n    signatureManager,\n    eventBus,\n    pdfDocument,\n    pageColors,\n    highlightColors,\n    enableHighlightFloatingButton,\n    enableUpdatedAddImage,\n    enableNewAltTextWhenAddingImage,\n    mlManager,\n    editorUndoBar,\n    supportsPinchToZoom\n  ) {\n    const signal = (this._signal = this.#abortController.signal);\n    this.#container = container;\n    this.#viewer = viewer;\n    this.#viewerAlert = viewerAlert;\n    this.#altTextManager = altTextManager;\n    this.#commentManager = commentManager;\n    this.#signatureManager = signatureManager;\n    this.#pdfDocument = pdfDocument;\n    this._eventBus = eventBus;\n    eventBus._on(\"editingaction\", this.onEditingAction.bind(this), { signal });\n    eventBus._on(\"pagechanging\", this.onPageChanging.bind(this), { signal });\n    eventBus._on(\"scalechanging\", this.onScaleChanging.bind(this), { signal });\n    eventBus._on(\"rotationchanging\", this.onRotationChanging.bind(this), {\n      signal,\n    });\n    eventBus._on(\"setpreference\", this.onSetPreference.bind(this), { signal });\n    eventBus._on(\n      \"switchannotationeditorparams\",\n      evt => this.updateParams(evt.type, evt.value),\n      { signal }\n    );\n    window.addEventListener(\n      \"pointerdown\",\n      () => {\n        this.#isPointerDown = true;\n      },\n      { capture: true, signal }\n    );\n    window.addEventListener(\n      \"pointerup\",\n      () => {\n        this.#isPointerDown = false;\n      },\n      { capture: true, signal }\n    );\n    this.#addSelectionListener();\n    this.#addDragAndDropListeners();\n    this.#addKeyboardManager();\n    this.#annotationStorage = pdfDocument.annotationStorage;\n    this.#filterFactory = pdfDocument.filterFactory;\n    this.#pageColors = pageColors;\n    this.#highlightColors = highlightColors || null;\n    this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n    this.#enableUpdatedAddImage = enableUpdatedAddImage;\n    this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage;\n    this.#mlManager = mlManager || null;\n    this.viewParameters = {\n      realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: 0,\n    };\n    this.isShiftKeyDown = false;\n    this._editorUndoBar = editorUndoBar || null;\n    this._supportsPinchToZoom = supportsPinchToZoom !== false;\n    commentManager?.setSidebarUiManager(this);\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      Object.defineProperty(this, \"reset\", {\n        value: () => {\n          this.selectAll();\n          this.delete();\n          this.#idManager.reset();\n        },\n      });\n    }\n  }\n\n  destroy() {\n    this.#updateModeCapability?.resolve();\n    this.#updateModeCapability = null;\n\n    this.#abortController?.abort();\n    this.#abortController = null;\n    this._signal = null;\n\n    for (const layer of this.#allLayers.values()) {\n      layer.destroy();\n    }\n    this.#allLayers.clear();\n    this.#allEditors.clear();\n    this.#editorsToRescale.clear();\n    this.#missingCanvases?.clear();\n    this.#activeEditor = null;\n    this.#selectedEditors.clear();\n    this.#commandManager.destroy();\n    this.#altTextManager?.destroy();\n    this.#commentManager?.destroy();\n    this.#signatureManager?.destroy();\n    this.#floatingToolbar?.hide();\n    this.#floatingToolbar = null;\n    this.#mainHighlightColorPicker?.destroy();\n    this.#mainHighlightColorPicker = null;\n    this.#allEditableAnnotations = null;\n    if (this.#focusMainContainerTimeoutId) {\n      clearTimeout(this.#focusMainContainerTimeoutId);\n      this.#focusMainContainerTimeoutId = null;\n    }\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n      this.#translationTimeoutId = null;\n    }\n    this._editorUndoBar?.destroy();\n    this.#pdfDocument = null;\n  }\n\n  combinedSignal(ac) {\n    return AbortSignal.any([this._signal, ac.signal]);\n  }\n\n  get mlManager() {\n    return this.#mlManager;\n  }\n\n  get useNewAltTextFlow() {\n    return this.#enableUpdatedAddImage;\n  }\n\n  get useNewAltTextWhenAddingImage() {\n    return this.#enableNewAltTextWhenAddingImage;\n  }\n\n  get hcmFilter() {\n    return shadow(\n      this,\n      \"hcmFilter\",\n      this.#pageColors\n        ? this.#filterFactory.addHCMFilter(\n            this.#pageColors.foreground,\n            this.#pageColors.background\n          )\n        : \"none\"\n    );\n  }\n\n  get direction() {\n    return shadow(\n      this,\n      \"direction\",\n      getComputedStyle(this.#container).direction\n    );\n  }\n\n  get _highlightColors() {\n    return shadow(\n      this,\n      \"_highlightColors\",\n      this.#highlightColors\n        ? new Map(\n            this.#highlightColors.split(\",\").map(pair => {\n              pair = pair.split(\"=\").map(x => x.trim());\n              pair[1] = pair[1].toUpperCase();\n              return pair;\n            })\n          )\n        : null\n    );\n  }\n\n  get highlightColors() {\n    const { _highlightColors } = this;\n    if (!_highlightColors) {\n      return shadow(this, \"highlightColors\", null);\n    }\n    const map = new Map();\n    const hasHCM = !!this.#pageColors;\n    for (const [name, color] of _highlightColors) {\n      const isNameForHCM = name.endsWith(\"_HCM\");\n      if (hasHCM && isNameForHCM) {\n        map.set(name.replace(\"_HCM\", \"\"), color);\n        continue;\n      }\n      if (!hasHCM && !isNameForHCM) {\n        map.set(name, color);\n      }\n    }\n    return shadow(this, \"highlightColors\", map);\n  }\n\n  get highlightColorNames() {\n    return shadow(\n      this,\n      \"highlightColorNames\",\n      this.highlightColors\n        ? new Map(Array.from(this.highlightColors, e => e.reverse()))\n        : null\n    );\n  }\n\n  getNonHCMColor(color) {\n    if (!this._highlightColors) {\n      return color;\n    }\n    const colorName = this.highlightColorNames.get(color);\n    return this._highlightColors.get(colorName) || color;\n  }\n\n  getNonHCMColorName(color) {\n    return this.highlightColorNames.get(color) || color;\n  }\n\n  /**\n   * Set the current drawing session.\n   * @param {AnnotationEditorLayer} layer\n   */\n  setCurrentDrawingSession(layer) {\n    if (layer) {\n      this.unselectAll();\n      this.disableUserSelect(true);\n    } else {\n      this.disableUserSelect(false);\n    }\n    this.#currentDrawingSession = layer;\n  }\n\n  setMainHighlightColorPicker(colorPicker) {\n    this.#mainHighlightColorPicker = colorPicker;\n  }\n\n  editAltText(editor, firstTime = false) {\n    this.#altTextManager?.editAltText(this, editor, firstTime);\n  }\n\n  hasCommentManager() {\n    return !!this.#commentManager;\n  }\n\n  editComment(editor, posX, posY, options) {\n    this.#commentManager?.showDialog(this, editor, posX, posY, options);\n  }\n\n  selectComment(pageIndex, uid) {\n    const layer = this.#allLayers.get(pageIndex);\n    const editor = layer?.getEditorByUID(uid);\n    editor?.toggleComment(/* isSelected */ true, /* visibility */ true);\n  }\n\n  updateComment(editor) {\n    this.#commentManager?.updateComment(editor.getData());\n  }\n\n  updatePopupColor(editor) {\n    this.#commentManager?.updatePopupColor(editor);\n  }\n\n  removeComment(editor) {\n    this.#commentManager?.removeComments([editor.uid]);\n  }\n\n  toggleComment(editor, isSelected, visibility = undefined) {\n    this.#commentManager?.toggleCommentPopup(editor, isSelected, visibility);\n  }\n\n  makeCommentColor(color, opacity) {\n    return (\n      (color && this.#commentManager?.makeCommentColor(color, opacity)) || null\n    );\n  }\n\n  getCommentDialogElement() {\n    return this.#commentManager?.dialogElement || null;\n  }\n\n  async waitForEditorsRendered(pageNumber) {\n    if (this.#allLayers.has(pageNumber - 1)) {\n      return;\n    }\n    const { resolve, promise } = Promise.withResolvers();\n    const onEditorsRendered = evt => {\n      if (evt.pageNumber === pageNumber) {\n        this._eventBus._off(\"editorsrendered\", onEditorsRendered);\n        resolve();\n      }\n    };\n    this._eventBus.on(\"editorsrendered\", onEditorsRendered);\n    await promise;\n  }\n\n  getSignature(editor) {\n    this.#signatureManager?.getSignature({ uiManager: this, editor });\n  }\n\n  get signatureManager() {\n    return this.#signatureManager;\n  }\n\n  switchToMode(mode, callback) {\n    // Switching to a mode can be asynchronous.\n    this._eventBus.on(\"annotationeditormodechanged\", callback, {\n      once: true,\n      signal: this._signal,\n    });\n    this._eventBus.dispatch(\"showannotationeditorui\", {\n      source: this,\n      mode,\n    });\n  }\n\n  setPreference(name, value) {\n    this._eventBus.dispatch(\"setpreference\", {\n      source: this,\n      name,\n      value,\n    });\n  }\n\n  onSetPreference({ name, value }) {\n    switch (name) {\n      case \"enableNewAltTextWhenAddingImage\":\n        this.#enableNewAltTextWhenAddingImage = value;\n        break;\n    }\n  }\n\n  onPageChanging({ pageNumber }) {\n    this.#currentPageIndex = pageNumber - 1;\n  }\n\n  focusMainContainer() {\n    this.#container.focus();\n  }\n\n  findParent(x, y) {\n    for (const layer of this.#allLayers.values()) {\n      const {\n        x: layerX,\n        y: layerY,\n        width,\n        height,\n      } = layer.div.getBoundingClientRect();\n      if (\n        x >= layerX &&\n        x <= layerX + width &&\n        y >= layerY &&\n        y <= layerY + height\n      ) {\n        return layer;\n      }\n    }\n    return null;\n  }\n\n  disableUserSelect(value = false) {\n    this.#viewer.classList.toggle(\"noUserSelect\", value);\n  }\n\n  addShouldRescale(editor) {\n    this.#editorsToRescale.add(editor);\n  }\n\n  removeShouldRescale(editor) {\n    this.#editorsToRescale.delete(editor);\n  }\n\n  onScaleChanging({ scale }) {\n    this.commitOrRemove();\n    this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    for (const editor of this.#editorsToRescale) {\n      editor.onScaleChanging();\n    }\n    this.#currentDrawingSession?.onScaleChanging();\n  }\n\n  onRotationChanging({ pagesRotation }) {\n    this.commitOrRemove();\n    this.viewParameters.rotation = pagesRotation;\n  }\n\n  #getAnchorElementForSelection({ anchorNode }) {\n    return anchorNode.nodeType === Node.TEXT_NODE\n      ? anchorNode.parentElement\n      : anchorNode;\n  }\n\n  #getLayerForTextLayer(textLayer) {\n    const { currentLayer } = this;\n    if (currentLayer.hasTextLayer(textLayer)) {\n      return currentLayer;\n    }\n    for (const layer of this.#allLayers.values()) {\n      if (layer.hasTextLayer(textLayer)) {\n        return layer;\n      }\n    }\n    return null;\n  }\n\n  highlightSelection(methodOfCreation = \"\", comment = false) {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;\n    const text = selection.toString();\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    selection.empty();\n\n    const layer = this.#getLayerForTextLayer(textLayer);\n    const isNoneMode = this.#mode === AnnotationEditorType.NONE;\n    const callback = () => {\n      const editor = layer?.createAndAddNewEditor({ x: 0, y: 0 }, false, {\n        methodOfCreation,\n        boxes,\n        anchorNode,\n        anchorOffset,\n        focusNode,\n        focusOffset,\n        text,\n      });\n      if (isNoneMode) {\n        this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n      }\n      if (comment) {\n        editor?.editComment();\n      }\n    };\n    if (isNoneMode) {\n      this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);\n      return;\n    }\n    callback();\n  }\n\n  commentSelection(methodOfCreation = \"\") {\n    this.highlightSelection(methodOfCreation, /* comment */ true);\n  }\n\n  #displayFloatingToolbar() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    this.#floatingToolbar ||= new FloatingToolbar(this);\n    this.#floatingToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n  }\n\n  /**\n   * Some annotations may have been modified in the annotation layer\n   * (e.g. comments added or modified).\n   * So this function retrieves the data from the storage and removes\n   * them from the storage in order to be able to save them later.\n   * @param {string} annotationId\n   * @returns {Object|null} The data associated to the annotation or null.\n   */\n  getAndRemoveDataFromAnnotationStorage(annotationId) {\n    if (!this.#annotationStorage) {\n      return null;\n    }\n    const key = `${AnnotationEditorPrefix}${annotationId}`;\n    const storedValue = this.#annotationStorage.getRawValue(key);\n    if (storedValue) {\n      this.#annotationStorage.remove(key);\n    }\n    return storedValue;\n  }\n\n  /**\n   * Add an editor in the annotation storage.\n   * @param {AnnotationEditor} editor\n   */\n  addToAnnotationStorage(editor) {\n    if (\n      !editor.isEmpty() &&\n      this.#annotationStorage &&\n      !this.#annotationStorage.has(editor.id)\n    ) {\n      this.#annotationStorage.setValue(editor.id, editor);\n    }\n  }\n\n  a11yAlert(messageId, args = null) {\n    const viewerAlert = this.#viewerAlert;\n    if (!viewerAlert) {\n      return;\n    }\n    viewerAlert.setAttribute(\"data-l10n-id\", messageId);\n    if (args) {\n      viewerAlert.setAttribute(\"data-l10n-args\", JSON.stringify(args));\n    } else {\n      viewerAlert.removeAttribute(\"data-l10n-args\");\n    }\n  }\n\n  #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false,\n        });\n      }\n      return;\n    }\n    const { anchorNode } = selection;\n    if (anchorNode === this.#selectedTextNode) {\n      return;\n    }\n\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    if (!textLayer) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false,\n        });\n      }\n      return;\n    }\n\n    this.#floatingToolbar?.hide();\n    this.#selectedTextNode = anchorNode;\n    this.#dispatchUpdateStates({\n      hasSelectedText: true,\n    });\n\n    if (\n      this.#mode !== AnnotationEditorType.HIGHLIGHT &&\n      this.#mode !== AnnotationEditorType.NONE\n    ) {\n      return;\n    }\n\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n    }\n\n    this.#highlightWhenShiftUp = this.isShiftKeyDown;\n    if (!this.isShiftKeyDown) {\n      const activeLayer =\n        this.#mode === AnnotationEditorType.HIGHLIGHT\n          ? this.#getLayerForTextLayer(textLayer)\n          : null;\n      activeLayer?.toggleDrawing();\n\n      if (this.#isPointerDown) {\n        const ac = new AbortController();\n        const signal = this.combinedSignal(ac);\n\n        const pointerup = e => {\n          if (e.type === \"pointerup\" && e.button !== 0) {\n            // Do nothing on right click.\n            return;\n          }\n          ac.abort();\n          activeLayer?.toggleDrawing(true);\n          if (e.type === \"pointerup\") {\n            this.#onSelectEnd(\"main_toolbar\");\n          }\n        };\n        window.addEventListener(\"pointerup\", pointerup, { signal });\n        window.addEventListener(\"blur\", pointerup, { signal });\n      } else {\n        // Here neither the shift key nor the pointer is down and we've\n        // something in the selection: we can be in the case where the user is\n        // using a screen reader (see bug 1976597).\n        activeLayer?.toggleDrawing(true);\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n\n  #onSelectEnd(methodOfCreation = \"\") {\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.highlightSelection(methodOfCreation);\n    } else if (this.#enableHighlightFloatingButton) {\n      this.#displayFloatingToolbar();\n    }\n  }\n\n  #addSelectionListener() {\n    document.addEventListener(\n      \"selectionchange\",\n      this.#selectionChange.bind(this),\n      { signal: this._signal }\n    );\n  }\n\n  #addFocusManager() {\n    if (this.#focusManagerAC) {\n      return;\n    }\n    this.#focusManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#focusManagerAC);\n\n    window.addEventListener(\"focus\", this.focus.bind(this), { signal });\n    window.addEventListener(\"blur\", this.blur.bind(this), { signal });\n  }\n\n  #removeFocusManager() {\n    this.#focusManagerAC?.abort();\n    this.#focusManagerAC = null;\n  }\n\n  blur() {\n    this.isShiftKeyDown = false;\n    if (this.#highlightWhenShiftUp) {\n      this.#highlightWhenShiftUp = false;\n      this.#onSelectEnd(\"main_toolbar\");\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    // When several editors are selected and the window loses focus, we want to\n    // keep the last active element in order to be able to focus it again when\n    // the window gets the focus back but we don't want to trigger any focus\n    // callbacks else only one editor will be selected.\n    const { activeElement } = document;\n    for (const editor of this.#selectedEditors) {\n      if (editor.div.contains(activeElement)) {\n        this.#lastActiveElement = [editor, activeElement];\n        editor._focusEventsAllowed = false;\n        break;\n      }\n    }\n  }\n\n  focus() {\n    if (!this.#lastActiveElement) {\n      return;\n    }\n    const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n    this.#lastActiveElement = null;\n    lastActiveElement.addEventListener(\n      \"focusin\",\n      () => {\n        lastEditor._focusEventsAllowed = true;\n      },\n      { once: true, signal: this._signal }\n    );\n    lastActiveElement.focus();\n  }\n\n  #addKeyboardManager() {\n    if (this.#keyboardManagerAC) {\n      return;\n    }\n    this.#keyboardManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#keyboardManagerAC);\n\n    // The keyboard events are caught at the container level in order to be able\n    // to execute some callbacks even if the current page doesn't have focus.\n    window.addEventListener(\"keydown\", this.keydown.bind(this), { signal });\n    window.addEventListener(\"keyup\", this.keyup.bind(this), { signal });\n  }\n\n  #removeKeyboardManager() {\n    this.#keyboardManagerAC?.abort();\n    this.#keyboardManagerAC = null;\n  }\n\n  #addCopyPasteListeners() {\n    if (this.#copyPasteAC) {\n      return;\n    }\n    this.#copyPasteAC = new AbortController();\n    const signal = this.combinedSignal(this.#copyPasteAC);\n\n    document.addEventListener(\"copy\", this.copy.bind(this), { signal });\n    document.addEventListener(\"cut\", this.cut.bind(this), { signal });\n    document.addEventListener(\"paste\", this.paste.bind(this), { signal });\n  }\n\n  #removeCopyPasteListeners() {\n    this.#copyPasteAC?.abort();\n    this.#copyPasteAC = null;\n  }\n\n  #addDragAndDropListeners() {\n    const signal = this._signal;\n    document.addEventListener(\"dragover\", this.dragOver.bind(this), { signal });\n    document.addEventListener(\"drop\", this.drop.bind(this), { signal });\n  }\n\n  addEditListeners() {\n    this.#addKeyboardManager();\n    this.#addCopyPasteListeners();\n  }\n\n  removeEditListeners() {\n    this.#removeKeyboardManager();\n    this.#removeCopyPasteListeners();\n  }\n\n  dragOver(event) {\n    for (const { type } of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(type)) {\n          event.dataTransfer.dropEffect = \"copy\";\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n\n  /**\n   * Drop callback.\n   * @param {DragEvent} event\n   */\n  drop(event) {\n    for (const item of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n\n  /**\n   * Copy callback.\n   * @param {ClipboardEvent} event\n   */\n  copy(event) {\n    event.preventDefault();\n\n    // An editor is being edited so just commit it.\n    this.#activeEditor?.commitOrRemove();\n\n    if (!this.hasSelection) {\n      return;\n    }\n\n    const editors = [];\n    for (const editor of this.#selectedEditors) {\n      const serialized = editor.serialize(/* isForCopying = */ true);\n      if (serialized) {\n        editors.push(serialized);\n      }\n    }\n    if (editors.length === 0) {\n      return;\n    }\n\n    event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n  }\n\n  /**\n   * Cut callback.\n   * @param {ClipboardEvent} event\n   */\n  cut(event) {\n    this.copy(event);\n    this.delete();\n  }\n\n  /**\n   * Paste callback.\n   * @param {ClipboardEvent} event\n   */\n  async paste(event) {\n    event.preventDefault();\n    const { clipboardData } = event;\n    for (const item of clipboardData.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          return;\n        }\n      }\n    }\n\n    let data = clipboardData.getData(\"application/pdfjs\");\n    if (!data) {\n      return;\n    }\n\n    try {\n      data = JSON.parse(data);\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n      return;\n    }\n\n    if (!Array.isArray(data)) {\n      return;\n    }\n\n    this.unselectAll();\n    const layer = this.currentLayer;\n\n    try {\n      const newEditors = [];\n      for (const editor of data) {\n        const deserializedEditor = await layer.deserialize(editor);\n        if (!deserializedEditor) {\n          return;\n        }\n        newEditors.push(deserializedEditor);\n      }\n\n      const cmd = () => {\n        for (const editor of newEditors) {\n          this.#addEditorToLayer(editor);\n        }\n        this.#selectEditors(newEditors);\n      };\n      const undo = () => {\n        for (const editor of newEditors) {\n          editor.remove();\n        }\n      };\n      this.addCommands({ cmd, undo, mustExec: true });\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n    }\n  }\n\n  /**\n   * Keydown callback.\n   * @param {KeyboardEvent} event\n   */\n  keydown(event) {\n    if (!this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = true;\n    }\n    if (\n      this.#mode !== AnnotationEditorType.NONE &&\n      !this.isEditorHandlingKeyboard\n    ) {\n      AnnotationEditorUIManager._keyboardManager.exec(this, event);\n    }\n  }\n\n  /**\n   * Keyup callback.\n   * @param {KeyboardEvent} event\n   */\n  keyup(event) {\n    if (this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = false;\n      if (this.#highlightWhenShiftUp) {\n        this.#highlightWhenShiftUp = false;\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n\n  /**\n   * Execute an action for a given name.\n   * For example, the user can click on the \"Undo\" entry in the context menu\n   * and it'll trigger the undo action.\n   */\n  onEditingAction({ name }) {\n    switch (name) {\n      case \"undo\":\n      case \"redo\":\n      case \"delete\":\n      case \"selectAll\":\n        this[name]();\n        break;\n      case \"highlightSelection\":\n        this.highlightSelection(\"context_menu\");\n        break;\n      case \"commentSelection\":\n        this.commentSelection(\"context_menu\");\n        break;\n    }\n  }\n\n  /**\n   * Update the different possible states of this manager, e.g. is there\n   * something to undo, redo, ...\n   * @param {Object} details\n   */\n  #dispatchUpdateStates(details) {\n    const hasChanged = Object.entries(details).some(\n      ([key, value]) => this.#previousStates[key] !== value\n    );\n\n    if (hasChanged) {\n      this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n        source: this,\n        details: Object.assign(this.#previousStates, details),\n      });\n      // We could listen on our own event but it sounds like a bit weird and\n      // it's a way to simpler to handle that stuff here instead of having to\n      // add something in every place where an editor can be unselected.\n      if (\n        this.#mode === AnnotationEditorType.HIGHLIGHT &&\n        details.hasSelectedEditor === false\n      ) {\n        this.#dispatchUpdateUI([\n          [AnnotationEditorParamsType.HIGHLIGHT_FREE, true],\n        ]);\n      }\n    }\n  }\n\n  #dispatchUpdateUI(details) {\n    this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n      source: this,\n      details,\n    });\n  }\n\n  /**\n   * Set the editing state.\n   * It can be useful to temporarily disable it when the user is editing a\n   * FreeText annotation.\n   * @param {boolean} isEditing\n   */\n  setEditingState(isEditing) {\n    if (isEditing) {\n      this.#addFocusManager();\n      this.#addCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: this.#mode !== AnnotationEditorType.NONE,\n        isEmpty: this.#isEmpty(),\n        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n        hasSelectedEditor: false,\n      });\n    } else {\n      this.#removeFocusManager();\n      this.#removeCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: false,\n      });\n      this.disableUserSelect(false);\n    }\n  }\n\n  registerEditorTypes(types) {\n    if (this.#editorTypes) {\n      return;\n    }\n    this.#editorTypes = types;\n    for (const editorType of this.#editorTypes) {\n      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n    }\n  }\n\n  /**\n   * Get an id.\n   * @returns {string}\n   */\n  getId() {\n    return this.#idManager.id;\n  }\n\n  get currentLayer() {\n    return this.#allLayers.get(this.#currentPageIndex);\n  }\n\n  getLayer(pageIndex) {\n    return this.#allLayers.get(pageIndex);\n  }\n\n  get currentPageIndex() {\n    return this.#currentPageIndex;\n  }\n\n  /**\n   * Add a new layer for a page which will contains the editors.\n   * @param {AnnotationEditorLayer} layer\n   */\n  addLayer(layer) {\n    this.#allLayers.set(layer.pageIndex, layer);\n    if (this.#isEnabled) {\n      layer.enable();\n    } else {\n      layer.disable();\n    }\n  }\n\n  /**\n   * Remove a layer.\n   * @param {AnnotationEditorLayer} layer\n   */\n  removeLayer(layer) {\n    this.#allLayers.delete(layer.pageIndex);\n  }\n\n  /**\n   * Change the editor mode (None, FreeText, Ink, ...)\n   * @param {number} mode\n   * @param {string|null} editId\n   * @param {boolean} [isFromKeyboard] - true if the mode change is due to a\n   *   keyboard action.\n   * @param {boolean} [mustEnterInEditMode] - true if the editor must enter in\n   *   edit mode.\n   * @param {boolean} [editComment] - true if the mode change is due to a\n   *   comment edit.\n   */\n  async updateMode(\n    mode,\n    editId = null,\n    isFromKeyboard = false,\n    mustEnterInEditMode = false,\n    editComment = false\n  ) {\n    if (this.#mode === mode) {\n      return;\n    }\n\n    if (this.#updateModeCapability) {\n      await this.#updateModeCapability.promise;\n      if (!this.#updateModeCapability) {\n        // This ui manager has been destroyed.\n        return;\n      }\n    }\n\n    this.#updateModeCapability = Promise.withResolvers();\n    this.#currentDrawingSession?.commitOrRemove();\n\n    if (this.#mode === AnnotationEditorType.POPUP) {\n      this.#commentManager?.hideSidebar();\n    }\n    this.#commentManager?.destroyPopup();\n\n    this.#mode = mode;\n    if (mode === AnnotationEditorType.NONE) {\n      this.setEditingState(false);\n      this.#disableAll();\n      for (const editor of this.#allEditors.values()) {\n        editor.hideStandaloneCommentButton();\n      }\n\n      this._editorUndoBar?.hide();\n      this.toggleComment(/* editor = */ null);\n\n      this.#updateModeCapability.resolve();\n      return;\n    }\n\n    for (const editor of this.#allEditors.values()) {\n      editor.addStandaloneCommentButton();\n    }\n\n    if (mode === AnnotationEditorType.SIGNATURE) {\n      await this.#signatureManager?.loadSignatures();\n    }\n\n    this.setEditingState(true);\n    await this.#enableAll();\n    this.unselectAll();\n    for (const layer of this.#allLayers.values()) {\n      layer.updateMode(mode);\n    }\n\n    if (mode === AnnotationEditorType.POPUP) {\n      this.#allEditableAnnotations ||=\n        await this.#pdfDocument.getAnnotationsByType(\n          new Set(this.#editorTypes.map(editorClass => editorClass._editorType))\n        );\n      const elementIds = new Set();\n      const allComments = [];\n      for (const editor of this.#allEditors.values()) {\n        const { annotationElementId, hasComment, deleted } = editor;\n        if (annotationElementId) {\n          elementIds.add(annotationElementId);\n        }\n        if (hasComment && !deleted) {\n          allComments.push(editor.getData());\n        }\n      }\n      for (const annotation of this.#allEditableAnnotations) {\n        const { id, popupRef, contentsObj } = annotation;\n        if (\n          popupRef &&\n          contentsObj?.str &&\n          !elementIds.has(id) &&\n          !this.#deletedAnnotationsElementIds.has(id)\n        ) {\n          // The annotation exists in the PDF and has a comment but there\n          // is no editor for it (anymore).\n          allComments.push(annotation);\n        }\n      }\n      this.#commentManager?.showSidebar(allComments);\n    }\n\n    if (!editId) {\n      if (isFromKeyboard) {\n        this.addNewEditorFromKeyboard();\n      }\n\n      this.#updateModeCapability.resolve();\n      return;\n    }\n\n    for (const editor of this.#allEditors.values()) {\n      if (editor.uid === editId) {\n        this.setSelected(editor);\n        if (editComment) {\n          editor.editComment();\n        } else if (mustEnterInEditMode) {\n          editor.enterInEditMode();\n        } else {\n          editor.focus();\n        }\n      } else {\n        editor.unselect();\n      }\n    }\n\n    this.#updateModeCapability.resolve();\n  }\n\n  addNewEditorFromKeyboard() {\n    if (this.currentLayer.canCreateNewEmptyEditor()) {\n      this.currentLayer.addNewEditor();\n    }\n  }\n\n  /**\n   * Update the toolbar if it's required to reflect the tool currently used.\n   * @param {Object} options\n   * @param {number} mode\n   * @returns {undefined}\n   */\n  updateToolbar(options) {\n    if (options.mode === this.#mode) {\n      return;\n    }\n    this._eventBus.dispatch(\"switchannotationeditormode\", {\n      source: this,\n      ...options,\n    });\n  }\n\n  /**\n   * Update a parameter in the current editor or globally.\n   * @param {number} type\n   * @param {*} value\n   */\n  updateParams(type, value) {\n    if (!this.#editorTypes) {\n      return;\n    }\n\n    switch (type) {\n      case AnnotationEditorParamsType.CREATE:\n        this.currentLayer.addNewEditor(value);\n        return;\n      case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n        this._eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"editing\",\n            data: {\n              type: \"highlight\",\n              action: \"toggle_visibility\",\n            },\n          },\n        });\n        (this.#showAllStates ||= new Map()).set(type, value);\n        this.showAllEditors(\"highlight\", value);\n        break;\n    }\n\n    if (this.hasSelection) {\n      for (const editor of this.#selectedEditors) {\n        editor.updateParams(type, value);\n      }\n    } else {\n      for (const editorType of this.#editorTypes) {\n        editorType.updateDefaultParams(type, value);\n      }\n    }\n  }\n\n  showAllEditors(type, visible, updateButton = false) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.editorType === type) {\n        editor.show(visible);\n      }\n    }\n    const state =\n      this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ??\n      true;\n    if (state !== visible) {\n      this.#dispatchUpdateUI([\n        [AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible],\n      ]);\n    }\n  }\n\n  enableWaiting(mustWait = false) {\n    if (this.#isWaiting === mustWait) {\n      return;\n    }\n    this.#isWaiting = mustWait;\n    for (const layer of this.#allLayers.values()) {\n      if (mustWait) {\n        layer.disableClick();\n      } else {\n        layer.enableClick();\n      }\n      layer.div.classList.toggle(\"waiting\", mustWait);\n    }\n  }\n\n  /**\n   * Enable all the layers.\n   */\n  async #enableAll() {\n    if (!this.#isEnabled) {\n      this.#isEnabled = true;\n      const promises = [];\n      for (const layer of this.#allLayers.values()) {\n        promises.push(layer.enable());\n      }\n      await Promise.all(promises);\n      for (const editor of this.#allEditors.values()) {\n        editor.enable();\n      }\n    }\n  }\n\n  /**\n   * Disable all the layers.\n   */\n  #disableAll() {\n    this.unselectAll();\n    if (this.#isEnabled) {\n      this.#isEnabled = false;\n      for (const layer of this.#allLayers.values()) {\n        layer.disable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.disable();\n      }\n    }\n  }\n\n  /**\n   * Get all the editors belonging to a given page.\n   * @param {number} pageIndex\n   * @yields {AnnotationEditor}\n   */\n  *getEditors(pageIndex) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.pageIndex === pageIndex) {\n        yield editor;\n      }\n    }\n  }\n\n  /**\n   * Get an editor with the given id.\n   * @param {string} id\n   * @returns {AnnotationEditor}\n   */\n  getEditor(id) {\n    return this.#allEditors.get(id);\n  }\n\n  /**\n   * Add a new editor.\n   * @param {AnnotationEditor} editor\n   */\n  addEditor(editor) {\n    this.#allEditors.set(editor.id, editor);\n  }\n\n  /**\n   * Remove an editor.\n   * @param {AnnotationEditor} editor\n   */\n  removeEditor(editor) {\n    if (editor.div.contains(document.activeElement)) {\n      if (this.#focusMainContainerTimeoutId) {\n        clearTimeout(this.#focusMainContainerTimeoutId);\n      }\n      this.#focusMainContainerTimeoutId = setTimeout(() => {\n        // When the div is removed from DOM the focus can move on the\n        // document.body, so we need to move it back to the main container.\n        this.focusMainContainer();\n        this.#focusMainContainerTimeoutId = null;\n      }, 0);\n    }\n    this.#allEditors.delete(editor.id);\n    if (editor.annotationElementId) {\n      this.#missingCanvases?.delete(editor.annotationElementId);\n    }\n    this.unselect(editor);\n    if (\n      !editor.annotationElementId ||\n      !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)\n    ) {\n      this.#annotationStorage?.remove(editor.id);\n    }\n  }\n\n  /**\n   * The annotation element with the given id has been deleted.\n   * @param {AnnotationEditor} editor\n   */\n  addDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n    this.addChangedExistingAnnotation(editor);\n    editor.deleted = true;\n  }\n\n  /**\n   * Check if the annotation element with the given id has been deleted.\n   * @param {string} annotationElementId\n   * @returns {boolean}\n   */\n  isDeletedAnnotationElement(annotationElementId) {\n    return this.#deletedAnnotationsElementIds.has(annotationElementId);\n  }\n\n  /**\n   * The annotation element with the given id have been restored.\n   * @param {AnnotationEditor} editor\n   */\n  removeDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n    this.removeChangedExistingAnnotation(editor);\n    editor.deleted = false;\n  }\n\n  /**\n   * Add an editor to the layer it belongs to or add it to the global map.\n   * @param {AnnotationEditor} editor\n   */\n  #addEditorToLayer(editor) {\n    const layer = this.#allLayers.get(editor.pageIndex);\n    if (layer) {\n      layer.addOrRebuild(editor);\n    } else {\n      this.addEditor(editor);\n      this.addToAnnotationStorage(editor);\n    }\n  }\n\n  /**\n   * Set the given editor as the active one.\n   * @param {AnnotationEditor} editor\n   */\n  setActiveEditor(editor) {\n    if (this.#activeEditor === editor) {\n      return;\n    }\n\n    this.#activeEditor = editor;\n    if (editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n\n  get #lastSelectedEditor() {\n    let ed = null;\n    for (ed of this.#selectedEditors) {\n      // Iterate to get the last element.\n    }\n    return ed;\n  }\n\n  /**\n   * Update the UI of the active editor.\n   * @param {AnnotationEditor} editor\n   */\n  updateUI(editor) {\n    if (this.#lastSelectedEditor === editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n\n  updateUIForDefaultProperties(editorType) {\n    this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n  }\n\n  /**\n   * Add or remove an editor the current selection.\n   * @param {AnnotationEditor} editor\n   */\n  toggleSelected(editor) {\n    if (this.#selectedEditors.has(editor)) {\n      this.#selectedEditors.delete(editor);\n      editor.unselect();\n      this.#dispatchUpdateStates({\n        hasSelectedEditor: this.hasSelection,\n      });\n      return;\n    }\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true,\n    });\n  }\n\n  /**\n   * Set the last selected editor.\n   * @param {AnnotationEditor} editor\n   */\n  setSelected(editor) {\n    this.updateToolbar({\n      mode: editor.mode,\n      editId: editor.id,\n    });\n\n    this.#currentDrawingSession?.commitOrRemove();\n    for (const ed of this.#selectedEditors) {\n      if (ed !== editor) {\n        ed.unselect();\n      }\n    }\n    this.#selectedEditors.clear();\n\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true,\n    });\n  }\n\n  /**\n   * Check if the editor is selected.\n   * @param {AnnotationEditor} editor\n   */\n  isSelected(editor) {\n    return this.#selectedEditors.has(editor);\n  }\n\n  get firstSelectedEditor() {\n    return this.#selectedEditors.values().next().value;\n  }\n\n  /**\n   * Unselect an editor.\n   * @param {AnnotationEditor} editor\n   */\n  unselect(editor) {\n    editor.unselect();\n    this.#selectedEditors.delete(editor);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection,\n    });\n  }\n\n  get hasSelection() {\n    return this.#selectedEditors.size !== 0;\n  }\n\n  get isEnterHandled() {\n    return (\n      this.#selectedEditors.size === 1 &&\n      this.firstSelectedEditor.isEnterHandled\n    );\n  }\n\n  /**\n   * Undo the last command.\n   */\n  undo() {\n    this.#commandManager.undo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n      hasSomethingToRedo: true,\n      isEmpty: this.#isEmpty(),\n    });\n    this._editorUndoBar?.hide();\n  }\n\n  /**\n   * Redo the last undoed command.\n   */\n  redo() {\n    this.#commandManager.redo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n      isEmpty: this.#isEmpty(),\n    });\n  }\n\n  /**\n   * Add a command to execute (cmd) and another one to undo it.\n   * @param {Object} params\n   */\n  addCommands(params) {\n    this.#commandManager.add(params);\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: false,\n      isEmpty: this.#isEmpty(),\n    });\n  }\n\n  cleanUndoStack(type) {\n    this.#commandManager.cleanType(type);\n  }\n\n  #isEmpty() {\n    if (this.#allEditors.size === 0) {\n      return true;\n    }\n\n    if (this.#allEditors.size === 1) {\n      for (const editor of this.#allEditors.values()) {\n        return editor.isEmpty();\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Delete the current editor or all.\n   */\n  delete() {\n    this.commitOrRemove();\n    const drawingEditor = this.currentLayer?.endDrawingSession(\n      /* isAborted = */ true\n    );\n    if (!this.hasSelection && !drawingEditor) {\n      return;\n    }\n\n    const editors = drawingEditor\n      ? [drawingEditor]\n      : [...this.#selectedEditors];\n    const cmd = () => {\n      this._editorUndoBar?.show(\n        undo,\n        editors.length === 1 ? editors[0].editorType : editors.length\n      );\n      for (const editor of editors) {\n        editor.remove();\n      }\n    };\n    const undo = () => {\n      for (const editor of editors) {\n        this.#addEditorToLayer(editor);\n      }\n    };\n\n    this.addCommands({ cmd, undo, mustExec: true });\n  }\n\n  commitOrRemove() {\n    // An editor is being edited so just commit it.\n    this.#activeEditor?.commitOrRemove();\n  }\n\n  hasSomethingToControl() {\n    return this.#activeEditor || this.hasSelection;\n  }\n\n  /**\n   * Select the editors.\n   * @param {Array<AnnotationEditor>} editors\n   */\n  #selectEditors(editors) {\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    for (const editor of editors) {\n      if (editor.isEmpty()) {\n        continue;\n      }\n      this.#selectedEditors.add(editor);\n      editor.select();\n    }\n    this.#dispatchUpdateStates({ hasSelectedEditor: this.hasSelection });\n  }\n\n  /**\n   * Select all the editors.\n   */\n  selectAll() {\n    for (const editor of this.#selectedEditors) {\n      editor.commit();\n    }\n    this.#selectEditors(this.#allEditors.values());\n  }\n\n  /**\n   * Unselect all the selected editors.\n   */\n  unselectAll() {\n    if (this.#activeEditor) {\n      // An editor is being edited so just commit it.\n      this.#activeEditor.commitOrRemove();\n      if (this.#mode !== AnnotationEditorType.NONE) {\n        // If the mode is NONE, we want to really unselect the editor, hence we\n        // mustn't return here.\n        return;\n      }\n    }\n\n    if (this.#currentDrawingSession?.commitOrRemove()) {\n      return;\n    }\n\n    if (!this.hasSelection) {\n      return;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: false,\n    });\n  }\n\n  translateSelectedEditors(x, y, noCommit = false) {\n    if (!noCommit) {\n      this.commitOrRemove();\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n\n    this.#translation[0] += x;\n    this.#translation[1] += y;\n    const [totalX, totalY] = this.#translation;\n    const editors = [...this.#selectedEditors];\n\n    // We don't want to have an undo/redo for each translation so we wait a bit\n    // before adding the command to the command manager.\n    const TIME_TO_WAIT = 1000;\n\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n    }\n\n    this.#translationTimeoutId = setTimeout(() => {\n      this.#translationTimeoutId = null;\n      this.#translation[0] = this.#translation[1] = 0;\n\n      this.addCommands({\n        cmd: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(totalX, totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        undo: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(-totalX, -totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        mustExec: false,\n      });\n    }, TIME_TO_WAIT);\n\n    for (const editor of editors) {\n      editor.translateInPage(x, y);\n      editor.translationDone();\n    }\n  }\n\n  /**\n   * Set up the drag session for moving the selected editors.\n   */\n  setUpDragSession() {\n    // Note: don't use any references to the editor's parent which can be null\n    // if the editor belongs to a destroyed page.\n    if (!this.hasSelection) {\n      return;\n    }\n    // Avoid to have spurious text selection in the text layer when dragging.\n    this.disableUserSelect(true);\n    this.#draggingEditors = new Map();\n    for (const editor of this.#selectedEditors) {\n      this.#draggingEditors.set(editor, {\n        savedX: editor.x,\n        savedY: editor.y,\n        savedPageIndex: editor.pageIndex,\n        newX: 0,\n        newY: 0,\n        newPageIndex: -1,\n      });\n    }\n  }\n\n  /**\n   * Ends the drag session.\n   * @returns {boolean} true if at least one editor has been moved.\n   */\n  endDragSession() {\n    if (!this.#draggingEditors) {\n      return false;\n    }\n    this.disableUserSelect(false);\n    const map = this.#draggingEditors;\n    this.#draggingEditors = null;\n    let mustBeAddedInUndoStack = false;\n\n    for (const [{ x, y, pageIndex }, value] of map) {\n      value.newX = x;\n      value.newY = y;\n      value.newPageIndex = pageIndex;\n      mustBeAddedInUndoStack ||=\n        x !== value.savedX ||\n        y !== value.savedY ||\n        pageIndex !== value.savedPageIndex;\n    }\n\n    if (!mustBeAddedInUndoStack) {\n      return false;\n    }\n\n    const move = (editor, x, y, pageIndex) => {\n      if (this.#allEditors.has(editor.id)) {\n        // The editor can be undone/redone on a page which is not visible (and\n        // which potentially has no annotation editor layer), hence we need to\n        // use the pageIndex instead of the parent.\n        const parent = this.#allLayers.get(pageIndex);\n        if (parent) {\n          editor._setParentAndPosition(parent, x, y);\n        } else {\n          editor.pageIndex = pageIndex;\n          editor.x = x;\n          editor.y = y;\n        }\n      }\n    };\n\n    this.addCommands({\n      cmd: () => {\n        for (const [editor, { newX, newY, newPageIndex }] of map) {\n          move(editor, newX, newY, newPageIndex);\n        }\n      },\n      undo: () => {\n        for (const [editor, { savedX, savedY, savedPageIndex }] of map) {\n          move(editor, savedX, savedY, savedPageIndex);\n        }\n      },\n      mustExec: true,\n    });\n\n    return true;\n  }\n\n  /**\n   * Drag the set of selected editors.\n   * @param {number} tx\n   * @param {number} ty\n   */\n  dragSelectedEditors(tx, ty) {\n    if (!this.#draggingEditors) {\n      return;\n    }\n    for (const editor of this.#draggingEditors.keys()) {\n      editor.drag(tx, ty);\n    }\n  }\n\n  /**\n   * Rebuild the editor (usually on undo/redo actions) on a potentially\n   * non-rendered page.\n   * @param {AnnotationEditor} editor\n   */\n  rebuild(editor) {\n    if (editor.parent === null) {\n      const parent = this.getLayer(editor.pageIndex);\n      if (parent) {\n        parent.changeParent(editor);\n        parent.addOrRebuild(editor);\n      } else {\n        this.addEditor(editor);\n        this.addToAnnotationStorage(editor);\n        editor.rebuild();\n      }\n    } else {\n      editor.parent.addOrRebuild(editor);\n    }\n  }\n\n  get isEditorHandlingKeyboard() {\n    return (\n      this.getActive()?.shouldGetKeyboardEvents() ||\n      (this.#selectedEditors.size === 1 &&\n        this.firstSelectedEditor.shouldGetKeyboardEvents())\n    );\n  }\n\n  /**\n   * Is the current editor the one passed as argument?\n   * @param {AnnotationEditor} editor\n   * @returns\n   */\n  isActive(editor) {\n    return this.#activeEditor === editor;\n  }\n\n  /**\n   * Get the current active editor.\n   * @returns {AnnotationEditor|null}\n   */\n  getActive() {\n    return this.#activeEditor;\n  }\n\n  /**\n   * Get the current editor mode.\n   * @returns {number}\n   */\n  getMode() {\n    return this.#mode;\n  }\n\n  isEditingMode() {\n    return this.#mode !== AnnotationEditorType.NONE;\n  }\n\n  get imageManager() {\n    return shadow(this, \"imageManager\", new ImageManager());\n  }\n\n  getSelectionBoxes(textLayer) {\n    if (!textLayer) {\n      return null;\n    }\n    const selection = document.getSelection();\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      if (\n        !textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)\n      ) {\n        return null;\n      }\n    }\n\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight,\n    } = textLayer.getBoundingClientRect();\n\n    // We must rotate the boxes because we want to have them in the non-rotated\n    // page coordinates.\n    let rotator;\n    switch (textLayer.getAttribute(\"data-main-rotation\")) {\n      case \"90\":\n        rotator = (x, y, w, h) => ({\n          x: (y - layerY) / parentHeight,\n          y: 1 - (x + w - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth,\n        });\n        break;\n      case \"180\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (x + w - layerX) / parentWidth,\n          y: 1 - (y + h - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight,\n        });\n        break;\n      case \"270\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (y + h - layerY) / parentHeight,\n          y: (x - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth,\n        });\n        break;\n      default:\n        rotator = (x, y, w, h) => ({\n          x: (x - layerX) / parentWidth,\n          y: (y - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight,\n        });\n        break;\n    }\n\n    const boxes = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      for (const { x, y, width, height } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        boxes.push(rotator(x, y, width, height));\n      }\n    }\n    return boxes.length === 0 ? null : boxes;\n  }\n\n  addChangedExistingAnnotation({ annotationElementId, id }) {\n    (this.#changedExistingAnnotations ||= new Map()).set(\n      annotationElementId,\n      id\n    );\n  }\n\n  removeChangedExistingAnnotation({ annotationElementId }) {\n    this.#changedExistingAnnotations?.delete(annotationElementId);\n  }\n\n  renderAnnotationElement(annotation) {\n    const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n    if (!editorId) {\n      return;\n    }\n    const editor = this.#annotationStorage.getRawValue(editorId);\n    if (!editor) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n      return;\n    }\n    editor.renderAnnotationElement(annotation);\n  }\n\n  setMissingCanvas(annotationId, annotationElementId, canvas) {\n    const editor = this.#missingCanvases?.get(annotationId);\n    if (!editor) {\n      return;\n    }\n    editor.setCanvas(annotationElementId, canvas);\n    this.#missingCanvases.delete(annotationId);\n  }\n\n  addMissingCanvas(annotationId, editor) {\n    (this.#missingCanvases ||= new Map()).set(annotationId, editor);\n  }\n}\n\nexport {\n  AnnotationEditorUIManager,\n  bindEvents,\n  ColorManager,\n  CommandManager,\n  KeyboardManager,\n};\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"../display_utils.js\";\n\nclass AltText {\n  #altText = null;\n\n  #altTextDecorative = false;\n\n  #altTextButton = null;\n\n  #altTextButtonLabel = null;\n\n  #altTextTooltip = null;\n\n  #altTextTooltipTimeout = null;\n\n  #altTextWasFromKeyBoard = false;\n\n  #badge = null;\n\n  #editor = null;\n\n  #guessedText = null;\n\n  #textWithDisclaimer = null;\n\n  #useNewAltTextFlow = false;\n\n  static #l10nNewButton = null;\n\n  static _l10n = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n    this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow;\n\n    AltText.#l10nNewButton ||= Object.freeze({\n      added: \"pdfjs-editor-new-alt-text-added-button\",\n      \"added-label\": \"pdfjs-editor-new-alt-text-added-button-label\",\n      missing: \"pdfjs-editor-new-alt-text-missing-button\",\n      \"missing-label\": \"pdfjs-editor-new-alt-text-missing-button-label\",\n      review: \"pdfjs-editor-new-alt-text-to-review-button\",\n      \"review-label\": \"pdfjs-editor-new-alt-text-to-review-button-label\",\n    });\n  }\n\n  static initialize(l10n) {\n    AltText._l10n ??= l10n;\n  }\n\n  async render() {\n    const altText = (this.#altTextButton = document.createElement(\"button\"));\n    altText.className = \"altText\";\n    altText.tabIndex = \"0\";\n\n    const label = (this.#altTextButtonLabel = document.createElement(\"span\"));\n    altText.append(label);\n\n    if (this.#useNewAltTextFlow) {\n      altText.classList.add(\"new\");\n      altText.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton.missing);\n      label.setAttribute(\n        \"data-l10n-id\",\n        AltText.#l10nNewButton[\"missing-label\"]\n      );\n    } else {\n      altText.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button\");\n      label.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button-label\");\n    }\n\n    const signal = this.#editor._uiManager._signal;\n    altText.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    altText.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal,\n    });\n\n    const onClick = event => {\n      event.preventDefault();\n      this.#editor._uiManager.editAltText(this.#editor);\n      if (this.#useNewAltTextFlow) {\n        this.#editor._reportTelemetry({\n          action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n          data: { label: this.#label },\n        });\n      }\n    };\n    altText.addEventListener(\"click\", onClick, { capture: true, signal });\n    altText.addEventListener(\n      \"keydown\",\n      event => {\n        if (event.target === altText && event.key === \"Enter\") {\n          this.#altTextWasFromKeyBoard = true;\n          onClick(event);\n        }\n      },\n      { signal }\n    );\n    await this.#setState();\n\n    return altText;\n  }\n\n  get #label() {\n    return (\n      (this.#altText && \"added\") ||\n      (this.#altText === null && this.guessedText && \"review\") ||\n      \"missing\"\n    );\n  }\n\n  finish() {\n    if (!this.#altTextButton) {\n      return;\n    }\n    this.#altTextButton.focus({ focusVisible: this.#altTextWasFromKeyBoard });\n    this.#altTextWasFromKeyBoard = false;\n  }\n\n  isEmpty() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText === null;\n    }\n    return !this.#altText && !this.#altTextDecorative;\n  }\n\n  hasData() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText !== null || !!this.#guessedText;\n    }\n    return this.isEmpty();\n  }\n\n  get guessedText() {\n    return this.#guessedText;\n  }\n\n  async setGuessedText(guessedText) {\n    if (this.#altText !== null) {\n      // The user provided their own alt text, so we don't want to overwrite it.\n      return;\n    }\n    this.#guessedText = guessedText;\n    this.#textWithDisclaimer = await AltText._l10n.get(\n      \"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\",\n      { generatedAltText: guessedText }\n    );\n    this.#setState();\n  }\n\n  toggleAltTextBadge(visibility = false) {\n    if (!this.#useNewAltTextFlow || this.#altText) {\n      this.#badge?.remove();\n      this.#badge = null;\n      return;\n    }\n    if (!this.#badge) {\n      const badge = (this.#badge = document.createElement(\"div\"));\n      badge.className = \"noAltTextBadge\";\n      this.#editor.div.append(badge);\n    }\n    this.#badge.classList.toggle(\"hidden\", !visibility);\n  }\n\n  serialize(isForCopying) {\n    let altText = this.#altText;\n    if (!isForCopying && this.#guessedText === altText) {\n      altText = this.#textWithDisclaimer;\n    }\n    return {\n      altText,\n      decorative: this.#altTextDecorative,\n      guessedText: this.#guessedText,\n      textWithDisclaimer: this.#textWithDisclaimer,\n    };\n  }\n\n  get data() {\n    return {\n      altText: this.#altText,\n      decorative: this.#altTextDecorative,\n    };\n  }\n\n  /**\n   * Set the alt text data.\n   */\n  set data({\n    altText,\n    decorative,\n    guessedText,\n    textWithDisclaimer,\n    cancel = false,\n  }) {\n    if (guessedText) {\n      this.#guessedText = guessedText;\n      this.#textWithDisclaimer = textWithDisclaimer;\n    }\n    if (this.#altText === altText && this.#altTextDecorative === decorative) {\n      return;\n    }\n    if (!cancel) {\n      this.#altText = altText;\n      this.#altTextDecorative = decorative;\n    }\n    this.#setState();\n  }\n\n  toggle(enabled = false) {\n    if (!this.#altTextButton) {\n      return;\n    }\n    if (!enabled && this.#altTextTooltipTimeout) {\n      clearTimeout(this.#altTextTooltipTimeout);\n      this.#altTextTooltipTimeout = null;\n    }\n    this.#altTextButton.disabled = !enabled;\n  }\n\n  shown() {\n    this.#editor._reportTelemetry({\n      action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n      data: { label: this.#label },\n    });\n  }\n\n  destroy() {\n    this.#altTextButton?.remove();\n    this.#altTextButton = null;\n    this.#altTextButtonLabel = null;\n    this.#altTextTooltip = null;\n    this.#badge?.remove();\n    this.#badge = null;\n  }\n\n  async #setState() {\n    const button = this.#altTextButton;\n    if (!button) {\n      return;\n    }\n\n    if (this.#useNewAltTextFlow) {\n      button.classList.toggle(\"done\", !!this.#altText);\n      button.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[this.#label]);\n\n      this.#altTextButtonLabel?.setAttribute(\n        \"data-l10n-id\",\n        AltText.#l10nNewButton[`${this.#label}-label`]\n      );\n      if (!this.#altText) {\n        this.#altTextTooltip?.remove();\n        return;\n      }\n    } else {\n      if (!this.#altText && !this.#altTextDecorative) {\n        button.classList.remove(\"done\");\n        this.#altTextTooltip?.remove();\n        return;\n      }\n      button.classList.add(\"done\");\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-edit-button\");\n    }\n\n    let tooltip = this.#altTextTooltip;\n    if (!tooltip) {\n      this.#altTextTooltip = tooltip = document.createElement(\"span\");\n      tooltip.className = \"tooltip\";\n      tooltip.setAttribute(\"role\", \"tooltip\");\n      tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n\n      const DELAY_TO_SHOW_TOOLTIP = 100;\n      const signal = this.#editor._uiManager._signal;\n      signal.addEventListener(\n        \"abort\",\n        () => {\n          clearTimeout(this.#altTextTooltipTimeout);\n          this.#altTextTooltipTimeout = null;\n        },\n        { once: true }\n      );\n      button.addEventListener(\n        \"mouseenter\",\n        () => {\n          this.#altTextTooltipTimeout = setTimeout(() => {\n            this.#altTextTooltipTimeout = null;\n            this.#altTextTooltip.classList.add(\"show\");\n            this.#editor._reportTelemetry({\n              action: \"alt_text_tooltip\",\n            });\n          }, DELAY_TO_SHOW_TOOLTIP);\n        },\n        { signal }\n      );\n      button.addEventListener(\n        \"mouseleave\",\n        () => {\n          if (this.#altTextTooltipTimeout) {\n            clearTimeout(this.#altTextTooltipTimeout);\n            this.#altTextTooltipTimeout = null;\n          }\n          this.#altTextTooltip?.classList.remove(\"show\");\n        },\n        { signal }\n      );\n    }\n    if (this.#altTextDecorative) {\n      tooltip.setAttribute(\n        \"data-l10n-id\",\n        \"pdfjs-editor-alt-text-decorative-tooltip\"\n      );\n    } else {\n      tooltip.removeAttribute(\"data-l10n-id\");\n      tooltip.textContent = this.#altText;\n    }\n\n    if (!tooltip.parentNode) {\n      button.append(tooltip);\n    }\n\n    const element = this.#editor.getElementForAltText();\n    element?.setAttribute(\"aria-describedby\", tooltip.id);\n  }\n}\n\nexport { AltText };\n", "/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\n\nclass Comment {\n  #commentStandaloneButton = null;\n\n  #commentToolbarButton = null;\n\n  #commentWasFromKeyBoard = false;\n\n  #editor = null;\n\n  #initialText = null;\n\n  #richText = null;\n\n  #text = null;\n\n  #date = null;\n\n  #deleted = false;\n\n  #popupPosition = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n  }\n\n  renderForToolbar() {\n    const button = (this.#commentToolbarButton =\n      document.createElement(\"button\"));\n    button.className = \"comment\";\n    return this.#render(button, false);\n  }\n\n  renderForStandalone() {\n    const button = (this.#commentStandaloneButton =\n      document.createElement(\"button\"));\n    button.className = \"annotationCommentButton\";\n\n    const position = this.#editor.commentButtonPosition;\n    if (position) {\n      const { style } = button;\n      style.insetInlineEnd = `calc(${\n        100 *\n        (this.#editor._uiManager.direction === \"ltr\"\n          ? 1 - position[0]\n          : position[0])\n      }% - var(--comment-button-dim))`;\n      style.top = `calc(${100 * position[1]}% - var(--comment-button-dim))`;\n      const color = this.#editor.commentButtonColor;\n      if (color) {\n        style.backgroundColor = color;\n      }\n    }\n\n    return this.#render(button, true);\n  }\n\n  focusButton() {\n    setTimeout(() => {\n      (this.#commentStandaloneButton ?? this.#commentToolbarButton)?.focus();\n    }, 0);\n  }\n\n  onUpdatedColor() {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    const color = this.#editor.commentButtonColor;\n    if (color) {\n      this.#commentStandaloneButton.style.backgroundColor = color;\n    }\n    this.#editor._uiManager.updatePopupColor(this.#editor);\n  }\n\n  get commentButtonWidth() {\n    return (\n      (this.#commentStandaloneButton?.getBoundingClientRect().width ?? 0) /\n      this.#editor.parent.boundingClientRect.width\n    );\n  }\n\n  get commentPopupPositionInLayer() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    if (!this.#commentStandaloneButton) {\n      return null;\n    }\n    const { x, y, height } =\n      this.#commentStandaloneButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight,\n    } = this.#editor.parent.boundingClientRect;\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n\n  set commentPopupPositionInLayer(pos) {\n    this.#popupPosition = pos;\n  }\n\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n\n  removeStandaloneCommentButton() {\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n  }\n\n  removeToolbarCommentButton() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n  }\n\n  setCommentButtonStates({ selected, hasPopup }) {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    this.#commentStandaloneButton.classList.toggle(\"selected\", selected);\n    this.#commentStandaloneButton.ariaExpanded = hasPopup;\n  }\n\n  #render(comment, isStandalone) {\n    if (!this.#editor._uiManager.hasCommentManager()) {\n      return null;\n    }\n\n    comment.tabIndex = \"0\";\n    comment.ariaHasPopup = \"dialog\";\n\n    if (isStandalone) {\n      comment.ariaControls = \"commentPopup\";\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n    } else {\n      comment.ariaControlsElements = [\n        this.#editor._uiManager.getCommentDialogElement(),\n      ];\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-editor-edit-comment-button\");\n    }\n\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return comment;\n    }\n\n    comment.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    if (isStandalone) {\n      comment.addEventListener(\n        \"focusin\",\n        e => {\n          this.#editor._focusEventsAllowed = false;\n          stopEvent(e);\n        },\n        {\n          capture: true,\n          signal,\n        }\n      );\n      comment.addEventListener(\n        \"focusout\",\n        e => {\n          this.#editor._focusEventsAllowed = true;\n          stopEvent(e);\n        },\n        {\n          capture: true,\n          signal,\n        }\n      );\n    }\n    comment.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal,\n    });\n\n    const onClick = event => {\n      event.preventDefault();\n      if (comment === this.#commentToolbarButton) {\n        this.edit();\n      } else {\n        this.#editor.toggleComment(/* isSelected = */ true);\n      }\n    };\n    comment.addEventListener(\"click\", onClick, { capture: true, signal });\n    comment.addEventListener(\n      \"keydown\",\n      event => {\n        if (event.target === comment && event.key === \"Enter\") {\n          this.#commentWasFromKeyBoard = true;\n          onClick(event);\n        }\n      },\n      { signal }\n    );\n\n    comment.addEventListener(\n      \"pointerenter\",\n      () => {\n        this.#editor.toggleComment(\n          /* isSelected = */ false,\n          /* visibility = */ true\n        );\n      },\n      { signal }\n    );\n    comment.addEventListener(\n      \"pointerleave\",\n      () => {\n        this.#editor.toggleComment(\n          /* isSelected = */ false,\n          /* visibility = */ false\n        );\n      },\n      { signal }\n    );\n\n    return comment;\n  }\n\n  edit(options) {\n    const position = this.commentPopupPositionInLayer;\n    let posX, posY;\n    if (position) {\n      [posX, posY] = position;\n    } else {\n      // The position is in the editor coordinates.\n      [posX, posY] = this.#editor.commentButtonPosition;\n      const { width, height, x, y } = this.#editor;\n      posX = x + posX * width;\n      posY = y + posY * height;\n    }\n    const parentDimensions = this.#editor.parent.boundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight,\n    } = parentDimensions;\n    this.#editor._uiManager.editComment(\n      this.#editor,\n      parentX + posX * parentWidth,\n      parentY + posY * parentHeight,\n      { ...options, parentDimensions }\n    );\n  }\n\n  finish() {\n    if (!this.#commentToolbarButton) {\n      return;\n    }\n    this.#commentToolbarButton.focus({\n      focusVisible: this.#commentWasFromKeyBoard,\n    });\n    this.#commentWasFromKeyBoard = false;\n  }\n\n  isDeleted() {\n    return this.#deleted || this.#text === \"\";\n  }\n\n  isEmpty() {\n    return this.#text === null;\n  }\n\n  hasBeenEdited() {\n    return this.isDeleted() || this.#text !== this.#initialText;\n  }\n\n  serialize() {\n    return this.data;\n  }\n\n  get data() {\n    return {\n      text: this.#text,\n      richText: this.#richText,\n      date: this.#date,\n      deleted: this.isDeleted(),\n    };\n  }\n\n  /**\n   * Set the comment data.\n   */\n  set data(text) {\n    if (text !== this.#text) {\n      this.#richText = null;\n    }\n    if (text === null) {\n      this.#text = \"\";\n      this.#deleted = true;\n      return;\n    }\n    this.#text = text;\n    this.#date = new Date();\n    this.#deleted = false;\n  }\n\n  setInitialText(text, richText = null) {\n    this.#initialText = text;\n    this.data = text;\n    this.#date = null;\n    this.#richText = richText;\n  }\n\n  shown() {}\n\n  destroy() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n    this.#text = \"\";\n    this.#richText = null;\n    this.#date = null;\n    this.#editor = null;\n    this.#commentWasFromKeyBoard = false;\n    this.#deleted = false;\n  }\n}\n\nexport { Comment };\n", "/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OutputScale, stopEvent } from \"./display_utils.js\";\n\nclass TouchManager {\n  #container;\n\n  #isPinching = false;\n\n  #isPinchingStopped = null;\n\n  #isPinchingDisabled;\n\n  #onPinchStart;\n\n  #onPinching;\n\n  #onPinchEnd;\n\n  #pointerDownAC = null;\n\n  #signal;\n\n  #touchInfo = null;\n\n  #touchManagerAC;\n\n  #touchMoveAC = null;\n\n  constructor({\n    container,\n    isPinchingDisabled = null,\n    isPinchingStopped = null,\n    onPinchStart = null,\n    onPinching = null,\n    onPinchEnd = null,\n    signal,\n  }) {\n    this.#container = container;\n    this.#isPinchingStopped = isPinchingStopped;\n    this.#isPinchingDisabled = isPinchingDisabled;\n    this.#onPinchStart = onPinchStart;\n    this.#onPinching = onPinching;\n    this.#onPinchEnd = onPinchEnd;\n    this.#touchManagerAC = new AbortController();\n    this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]);\n\n    container.addEventListener(\"touchstart\", this.#onTouchStart.bind(this), {\n      passive: false,\n      signal: this.#signal,\n    });\n  }\n\n  /**\n   * NOTE: Don't shadow this value since `devicePixelRatio` may change if the\n   * window resolution changes, e.g. if the viewer is moved to another monitor.\n   */\n  get MIN_TOUCH_DISTANCE_TO_PINCH() {\n    // The 35 is coming from:\n    //  https://searchfox.org/mozilla-central/source/gfx/layers/apz/src/GestureEventListener.cpp#36\n    //\n    // The properties TouchEvent::screenX/Y are in screen CSS pixels:\n    //  https://developer.mozilla.org/en-US/docs/Web/API/Touch/screenX#examples\n    // MIN_TOUCH_DISTANCE_TO_PINCH is in CSS pixels.\n    return 35 / OutputScale.pixelRatio;\n  }\n\n  #onTouchStart(evt) {\n    if (this.#isPinchingDisabled?.()) {\n      return;\n    }\n\n    if (evt.touches.length === 1) {\n      if (this.#pointerDownAC) {\n        return;\n      }\n      const pointerDownAC = (this.#pointerDownAC = new AbortController());\n      const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]);\n      const container = this.#container;\n\n      // We want to have the events at the capture phase to make sure we can\n      // cancel them.\n      const opts = { capture: true, signal, passive: false };\n      const cancelPointerDown = e => {\n        if (e.pointerType === \"touch\") {\n          this.#pointerDownAC?.abort();\n          this.#pointerDownAC = null;\n        }\n      };\n      container.addEventListener(\n        \"pointerdown\",\n        e => {\n          if (e.pointerType === \"touch\") {\n            // This is the second finger so we don't want it select something\n            // or whatever.\n            stopEvent(e);\n            cancelPointerDown(e);\n          }\n        },\n        opts\n      );\n      container.addEventListener(\"pointerup\", cancelPointerDown, opts);\n      container.addEventListener(\"pointercancel\", cancelPointerDown, opts);\n      return;\n    }\n\n    if (!this.#touchMoveAC) {\n      this.#touchMoveAC = new AbortController();\n      const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]);\n      const container = this.#container;\n\n      const opt = { signal, capture: false, passive: false };\n      container.addEventListener(\n        \"touchmove\",\n        this.#onTouchMove.bind(this),\n        opt\n      );\n      const onTouchEnd = this.#onTouchEnd.bind(this);\n      container.addEventListener(\"touchend\", onTouchEnd, opt);\n      container.addEventListener(\"touchcancel\", onTouchEnd, opt);\n\n      opt.capture = true;\n      container.addEventListener(\"pointerdown\", stopEvent, opt);\n      container.addEventListener(\"pointermove\", stopEvent, opt);\n      container.addEventListener(\"pointercancel\", stopEvent, opt);\n      container.addEventListener(\"pointerup\", stopEvent, opt);\n      this.#onPinchStart?.();\n    }\n\n    stopEvent(evt);\n\n    if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) {\n      this.#touchInfo = null;\n      return;\n    }\n\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    this.#touchInfo = {\n      touch0X: touch0.screenX,\n      touch0Y: touch0.screenY,\n      touch1X: touch1.screenX,\n      touch1Y: touch1.screenY,\n    };\n  }\n\n  #onTouchMove(evt) {\n    if (!this.#touchInfo || evt.touches.length !== 2) {\n      return;\n    }\n\n    stopEvent(evt);\n\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    const { screenX: screen0X, screenY: screen0Y } = touch0;\n    const { screenX: screen1X, screenY: screen1Y } = touch1;\n    const touchInfo = this.#touchInfo;\n    const {\n      touch0X: pTouch0X,\n      touch0Y: pTouch0Y,\n      touch1X: pTouch1X,\n      touch1Y: pTouch1Y,\n    } = touchInfo;\n\n    const prevGapX = pTouch1X - pTouch0X;\n    const prevGapY = pTouch1Y - pTouch0Y;\n    const currGapX = screen1X - screen0X;\n    const currGapY = screen1Y - screen0Y;\n\n    const distance = Math.hypot(currGapX, currGapY) || 1;\n    const pDistance = Math.hypot(prevGapX, prevGapY) || 1;\n    if (\n      !this.#isPinching &&\n      Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH\n    ) {\n      return;\n    }\n\n    touchInfo.touch0X = screen0X;\n    touchInfo.touch0Y = screen0Y;\n    touchInfo.touch1X = screen1X;\n    touchInfo.touch1Y = screen1Y;\n\n    if (!this.#isPinching) {\n      // Start pinching.\n      this.#isPinching = true;\n\n      // We return here else the first pinch is a bit too much\n      return;\n    }\n\n    const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];\n    this.#onPinching?.(origin, pDistance, distance);\n  }\n\n  #onTouchEnd(evt) {\n    if (evt.touches.length >= 2) {\n      return;\n    }\n    // #touchMoveAC shouldn't be null but it seems that irl it can (see #19793).\n    if (this.#touchMoveAC) {\n      this.#touchMoveAC.abort();\n      this.#touchMoveAC = null;\n      this.#onPinchEnd?.();\n    }\n\n    if (!this.#touchInfo) {\n      return;\n    }\n    stopEvent(evt);\n    this.#touchInfo = null;\n    this.#isPinching = false;\n  }\n\n  destroy() {\n    this.#touchManagerAC?.abort();\n    this.#touchManagerAC = null;\n    this.#pointerDownAC?.abort();\n    this.#pointerDownAC = null;\n  }\n}\n\nexport { TouchManager };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n  AnnotationEditorUIManager,\n  bindEvents,\n  ColorManager,\n  KeyboardManager,\n} from \"./tools.js\";\nimport {\n  FeatureTest,\n  MathClamp,\n  shadow,\n  unreachable,\n} from \"../../shared/util.js\";\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\nimport { AltText } from \"./alt_text.js\";\nimport { Comment } from \"./comment.js\";\nimport { EditorToolbar } from \"./toolbar.js\";\nimport { TouchManager } from \"../touch_manager.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParameters\n * @property {AnnotationEditorUIManager} uiManager - the global manager\n * @property {AnnotationEditorLayer} parent - the layer containing this editor\n * @property {string} id - editor id\n * @property {number} x - x-coordinate\n * @property {number} y - y-coordinate\n */\n\n/**\n * Base class for editors.\n */\nclass AnnotationEditor {\n  #accessibilityData = null;\n\n  #allResizerDivs = null;\n\n  #altText = null;\n\n  #comment = null;\n\n  #commentStandaloneButton = null;\n\n  #disabled = false;\n\n  #dragPointerId = null;\n\n  #dragPointerType = \"\";\n\n  #resizersDiv = null;\n\n  #lastPointerCoords = null;\n\n  #savedDimensions = null;\n\n  #fakeAnnotation = null;\n\n  #focusAC = null;\n\n  #focusedResizerName = \"\";\n\n  #hasBeenClicked = false;\n\n  #initialRect = null;\n\n  #isEditing = false;\n\n  #isInEditMode = false;\n\n  #isResizerEnabledForKeyboard = false;\n\n  #moveInDOMTimeout = null;\n\n  #prevDragX = 0;\n\n  #prevDragY = 0;\n\n  #telemetryTimeouts = null;\n\n  #touchManager = null;\n\n  isSelected = false;\n\n  _isCopy = false;\n\n  _editToolbar = null;\n\n  _initialOptions = Object.create(null);\n\n  _initialData = null;\n\n  _isVisible = true;\n\n  _uiManager = null;\n\n  _focusEventsAllowed = true;\n\n  static _l10n = null;\n\n  static _l10nResizer = null;\n\n  #isDraggable = false;\n\n  #zIndex = AnnotationEditor._zIndex++;\n\n  static _borderLineWidth = -1;\n\n  static _colorManager = new ColorManager();\n\n  static _zIndex = 1;\n\n  // Time to wait (in ms) before sending the telemetry data.\n  // We wait a bit to avoid sending too many requests when changing something\n  // like the thickness of a line.\n  static _telemetryTimeout = 1000;\n\n  static get _resizerKeyboardManager() {\n    const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n    return shadow(\n      this,\n      \"_resizerKeyboardManager\",\n      new KeyboardManager([\n        [[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, { args: [-small, 0] }],\n        [\n          [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n          resize,\n          { args: [-big, 0] },\n        ],\n        [[\"ArrowRight\", \"mac+ArrowRight\"], resize, { args: [small, 0] }],\n        [\n          [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n          resize,\n          { args: [big, 0] },\n        ],\n        [[\"ArrowUp\", \"mac+ArrowUp\"], resize, { args: [0, -small] }],\n        [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, { args: [0, -big] }],\n        [[\"ArrowDown\", \"mac+ArrowDown\"], resize, { args: [0, small] }],\n        [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, { args: [0, big] }],\n        [\n          [\"Escape\", \"mac+Escape\"],\n          AnnotationEditor.prototype._stopResizingWithKeyboard,\n        ],\n      ])\n    );\n  }\n\n  /**\n   * @param {AnnotationEditorParameters} parameters\n   */\n  constructor(parameters) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === AnnotationEditor\n    ) {\n      unreachable(\"Cannot initialize AnnotationEditor.\");\n    }\n\n    this.parent = parameters.parent;\n    this.id = parameters.id;\n    this.width = this.height = null;\n    this.pageIndex = parameters.parent.pageIndex;\n    this.name = parameters.name;\n    this.div = null;\n    this._uiManager = parameters.uiManager;\n    this.annotationElementId = null;\n    this._willKeepAspectRatio = false;\n    this._initialOptions.isCentered = parameters.isCentered;\n    this._structTreeParentId = null;\n    this.annotationElementId = parameters.annotationElementId || null;\n    this.creationDate = parameters.creationDate || new Date();\n    this.modificationDate = parameters.modificationDate || null;\n\n    const {\n      rotation,\n      rawDims: { pageWidth, pageHeight, pageX, pageY },\n    } = this.parent.viewport;\n\n    this.rotation = rotation;\n    this.pageRotation =\n      (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n    this.pageDimensions = [pageWidth, pageHeight];\n    this.pageTranslation = [pageX, pageY];\n\n    const [width, height] = this.parentDimensions;\n    this.x = parameters.x / width;\n    this.y = parameters.y / height;\n\n    this.isAttachedToDOM = false;\n    this.deleted = false;\n  }\n\n  get editorType() {\n    return Object.getPrototypeOf(this).constructor._type;\n  }\n\n  get mode() {\n    return Object.getPrototypeOf(this).constructor._editorType;\n  }\n\n  static get isDrawer() {\n    return false;\n  }\n\n  static get _defaultLineColor() {\n    return shadow(\n      this,\n      \"_defaultLineColor\",\n      this._colorManager.getHexCode(\"CanvasText\")\n    );\n  }\n\n  static deleteAnnotationElement(editor) {\n    const fakeEditor = new FakeEditor({\n      id: editor.parent.getNextId(),\n      parent: editor.parent,\n      uiManager: editor._uiManager,\n    });\n    fakeEditor.annotationElementId = editor.annotationElementId;\n    fakeEditor.deleted = true;\n    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n  }\n\n  /**\n   * Initialize the l10n stuff for this type of editor.\n   * @param {Object} l10n\n   */\n  static initialize(l10n, _uiManager) {\n    AnnotationEditor._l10n ??= l10n;\n\n    AnnotationEditor._l10nResizer ||= Object.freeze({\n      topLeft: \"pdfjs-editor-resizer-top-left\",\n      topMiddle: \"pdfjs-editor-resizer-top-middle\",\n      topRight: \"pdfjs-editor-resizer-top-right\",\n      middleRight: \"pdfjs-editor-resizer-middle-right\",\n      bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n      bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n      bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n      middleLeft: \"pdfjs-editor-resizer-middle-left\",\n    });\n\n    if (AnnotationEditor._borderLineWidth !== -1) {\n      return;\n    }\n    const style = getComputedStyle(document.documentElement);\n    AnnotationEditor._borderLineWidth =\n      parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n  }\n\n  /**\n   * Update the default parameters for this type of editor.\n   * @param {number} _type\n   * @param {*} _value\n   */\n  static updateDefaultParams(_type, _value) {}\n\n  /**\n   * Get the default properties to set in the UI for this type of editor.\n   * @returns {Array}\n   */\n  static get defaultPropertiesToUpdate() {\n    return [];\n  }\n\n  /**\n   * Check if this kind of editor is able to handle the given mime type for\n   * pasting.\n   * @param {string} mime\n   * @returns {boolean}\n   */\n  static isHandlingMimeForPasting(mime) {\n    return false;\n  }\n\n  /**\n   * Extract the data from the clipboard item and delegate the creation of the\n   * editor to the parent.\n   * @param {DataTransferItem} item\n   * @param {AnnotationEditorLayer} parent\n   */\n  static paste(item, parent) {\n    unreachable(\"Not implemented\");\n  }\n\n  /**\n   * Get the properties to update in the UI for this editor.\n   * @returns {Array}\n   */\n  get propertiesToUpdate() {\n    return [];\n  }\n\n  get _isDraggable() {\n    return this.#isDraggable;\n  }\n\n  set _isDraggable(value) {\n    this.#isDraggable = value;\n    this.div?.classList.toggle(\"draggable\", value);\n  }\n\n  get uid() {\n    return this.annotationElementId || this.id;\n  }\n\n  /**\n   * @returns {boolean} true if the editor handles the Enter key itself.\n   */\n  get isEnterHandled() {\n    return true;\n  }\n\n  center() {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    switch (this.parentRotation) {\n      case 90:\n        this.x -= (this.height * pageHeight) / (pageWidth * 2);\n        this.y += (this.width * pageWidth) / (pageHeight * 2);\n        break;\n      case 180:\n        this.x += this.width / 2;\n        this.y += this.height / 2;\n        break;\n      case 270:\n        this.x += (this.height * pageHeight) / (pageWidth * 2);\n        this.y -= (this.width * pageWidth) / (pageHeight * 2);\n        break;\n      default:\n        this.x -= this.width / 2;\n        this.y -= this.height / 2;\n        break;\n    }\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Add some commands into the CommandManager (undo/redo stuff).\n   * @param {Object} params\n   */\n  addCommands(params) {\n    this._uiManager.addCommands(params);\n  }\n\n  get currentLayer() {\n    return this._uiManager.currentLayer;\n  }\n\n  /**\n   * This editor will be behind the others.\n   */\n  setInBackground() {\n    this.div.style.zIndex = 0;\n  }\n\n  /**\n   * This editor will be in the foreground.\n   */\n  setInForeground() {\n    this.div.style.zIndex = this.#zIndex;\n  }\n\n  setParent(parent) {\n    if (parent !== null) {\n      this.pageIndex = parent.pageIndex;\n      this.pageDimensions = parent.pageDimensions;\n    } else {\n      // The editor is being removed from the DOM, so we need to stop resizing.\n      this.#stopResizing();\n\n      // Remove the fake annotation in the annotation layer.\n      this.#fakeAnnotation?.remove();\n      this.#fakeAnnotation = null;\n    }\n    this.parent = parent;\n  }\n\n  /**\n   * onfocus callback.\n   */\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.#hasBeenClicked) {\n      this.parent.setSelected(this);\n    } else {\n      this.#hasBeenClicked = false;\n    }\n  }\n\n  /**\n   * onblur callback.\n   * @param {FocusEvent} event\n   */\n  focusout(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n\n    if (!this.isAttachedToDOM) {\n      return;\n    }\n\n    // In case of focusout, the relatedTarget is the element which\n    // is grabbing the focus.\n    // So if the related target is an element under the div for this\n    // editor, then the editor isn't unactive.\n    const target = event.relatedTarget;\n    if (target?.closest(`#${this.id}`)) {\n      return;\n    }\n\n    event.preventDefault();\n\n    if (!this.parent?.isMultipleSelection) {\n      this.commitOrRemove();\n    }\n  }\n\n  commitOrRemove() {\n    if (this.isEmpty()) {\n      this.remove();\n    } else {\n      this.commit();\n    }\n  }\n\n  /**\n   * Commit the data contained in this editor.\n   */\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    this.addToAnnotationStorage();\n  }\n\n  addToAnnotationStorage() {\n    this._uiManager.addToAnnotationStorage(this);\n  }\n\n  /**\n   * Set the editor position within its parent.\n   * @param {number} x\n   * @param {number} y\n   * @param {number} tx - x-translation in screen coordinates.\n   * @param {number} ty - y-translation in screen coordinates.\n   */\n  setAt(x, y, tx, ty) {\n    const [width, height] = this.parentDimensions;\n    [tx, ty] = this.screenToPageTranslation(tx, ty);\n\n    this.x = (x + tx) / width;\n    this.y = (y + ty) / height;\n\n    this.fixAndSetPosition();\n  }\n\n  _moveAfterPaste(baseX, baseY) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setAt(\n      baseX * parentWidth,\n      baseY * parentHeight,\n      this.width * parentWidth,\n      this.height * parentHeight\n    );\n    this._onTranslated();\n  }\n\n  #translate([width, height], x, y) {\n    [x, y] = this.screenToPageTranslation(x, y);\n\n    this.x += x / width;\n    this.y += y / height;\n\n    this._onTranslating(this.x, this.y);\n\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Translate the editor position within its parent.\n   * @param {number} x - x-translation in screen coordinates.\n   * @param {number} y - y-translation in screen coordinates.\n   */\n  translate(x, y) {\n    // We don't change the initial position because the move here hasn't been\n    // done by the user.\n    this.#translate(this.parentDimensions, x, y);\n  }\n\n  /**\n   * Translate the editor position within its page and adjust the scroll\n   * in order to have the editor in the view.\n   * @param {number} x - x-translation in page coordinates.\n   * @param {number} y - y-translation in page coordinates.\n   */\n  translateInPage(x, y) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.#translate(this.pageDimensions, x, y);\n    this.div.scrollIntoView({ block: \"nearest\" });\n  }\n\n  translationDone() {\n    this._onTranslated(this.x, this.y);\n  }\n\n  drag(tx, ty) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    const {\n      div,\n      parentDimensions: [parentWidth, parentHeight],\n    } = this;\n    this.x += tx / parentWidth;\n    this.y += ty / parentHeight;\n    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n      // It's possible to not have a parent: for example, when the user is\n      // dragging all the selected editors but this one on a page which has been\n      // destroyed.\n      // It's why we need to check for it. In such a situation, it isn't really\n      // a problem to not find a new parent: it's something which is related to\n      // what the user is seeing, hence it depends on how pages are layed out.\n\n      // The element will be outside of its parent so change the parent.\n      const { x, y } = this.div.getBoundingClientRect();\n      if (this.parent.findNewParent(this, x, y)) {\n        this.x -= Math.floor(this.x);\n        this.y -= Math.floor(this.y);\n      }\n    }\n\n    // The editor can be moved wherever the user wants, so we don't need to fix\n    // the position: it'll be done when the user will release the mouse button.\n\n    let { x, y } = this;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n\n    const { style } = div;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n\n    this._onTranslating(x, y);\n\n    div.scrollIntoView({ block: \"nearest\" });\n  }\n\n  /**\n   * Called when the editor is being translated.\n   * @param {number} x - in page coordinates.\n   * @param {number} y - in page coordinates.\n   */\n  _onTranslating(x, y) {}\n\n  /**\n   * Called when the editor has been translated.\n   * @param {number} x - in page coordinates.\n   * @param {number} y - in page coordinates.\n   */\n  _onTranslated(x, y) {}\n\n  get _hasBeenMoved() {\n    return (\n      !!this.#initialRect &&\n      (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y)\n    );\n  }\n\n  get _hasBeenResized() {\n    return (\n      !!this.#initialRect &&\n      (this.#initialRect[2] !== this.width ||\n        this.#initialRect[3] !== this.height)\n    );\n  }\n\n  /**\n   * Get the translation to take into account the editor border.\n   * The CSS engine positions the element by taking the border into account so\n   * we must apply the opposite translation to have the editor in the right\n   * position.\n   * @returns {Array<number>}\n   */\n  getBaseTranslation() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const { _borderLineWidth } = AnnotationEditor;\n    const x = _borderLineWidth / parentWidth;\n    const y = _borderLineWidth / parentHeight;\n    switch (this.rotation) {\n      case 90:\n        return [-x, y];\n      case 180:\n        return [x, y];\n      case 270:\n        return [x, -y];\n      default:\n        return [-x, -y];\n    }\n  }\n\n  /**\n   * @returns {boolean} true if position must be fixed (i.e. make the x and y\n   * living in the page).\n   */\n  get _mustFixPosition() {\n    return true;\n  }\n\n  /**\n   * Fix the position of the editor in order to keep it inside its parent page.\n   * @param {number} [rotation] - the rotation of the page.\n   */\n  fixAndSetPosition(rotation = this.rotation) {\n    const {\n      div: { style },\n      pageDimensions: [pageWidth, pageHeight],\n    } = this;\n    let { x, y, width, height } = this;\n    width *= pageWidth;\n    height *= pageHeight;\n    x *= pageWidth;\n    y *= pageHeight;\n\n    if (this._mustFixPosition) {\n      switch (rotation) {\n        case 0:\n          x = MathClamp(x, 0, pageWidth - width);\n          y = MathClamp(y, 0, pageHeight - height);\n          break;\n        case 90:\n          x = MathClamp(x, 0, pageWidth - height);\n          y = MathClamp(y, width, pageHeight);\n          break;\n        case 180:\n          x = MathClamp(x, width, pageWidth);\n          y = MathClamp(y, height, pageHeight);\n          break;\n        case 270:\n          x = MathClamp(x, height, pageWidth);\n          y = MathClamp(y, 0, pageHeight - width);\n          break;\n      }\n    }\n\n    this.x = x /= pageWidth;\n    this.y = y /= pageHeight;\n\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n\n    this.moveInDOM();\n  }\n\n  static #rotatePoint(x, y, angle) {\n    switch (angle) {\n      case 90:\n        return [y, -x];\n      case 180:\n        return [-x, -y];\n      case 270:\n        return [-y, x];\n      default:\n        return [x, y];\n    }\n  }\n\n  /**\n   * Convert a screen translation into a page one.\n   * @param {number} x\n   * @param {number} y\n   */\n  screenToPageTranslation(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n  }\n\n  /**\n   * Convert a page translation into a screen one.\n   * @param {number} x\n   * @param {number} y\n   */\n  pageTranslationToScreen(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n  }\n\n  #getRotationMatrix(rotation) {\n    switch (rotation) {\n      case 90: {\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n      }\n      case 180:\n        return [-1, 0, 0, -1];\n      case 270: {\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n      }\n      default:\n        return [1, 0, 0, 1];\n    }\n  }\n\n  get parentScale() {\n    return this._uiManager.viewParameters.realScale;\n  }\n\n  get parentRotation() {\n    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n  }\n\n  get parentDimensions() {\n    const {\n      parentScale,\n      pageDimensions: [pageWidth, pageHeight],\n    } = this;\n    return [pageWidth * parentScale, pageHeight * parentScale];\n  }\n\n  /**\n   * Set the dimensions of this editor.\n   */\n  setDims() {\n    const {\n      div: { style },\n      width,\n      height,\n    } = this;\n    style.width = `${(100 * width).toFixed(2)}%`;\n    style.height = `${(100 * height).toFixed(2)}%`;\n  }\n\n  /**\n   * Get the translation used to position this editor when it's created.\n   * @returns {Array<number>}\n   */\n  getInitialTranslation() {\n    return [0, 0];\n  }\n\n  #createResizers() {\n    if (this.#resizersDiv) {\n      return;\n    }\n    this.#resizersDiv = document.createElement(\"div\");\n    this.#resizersDiv.classList.add(\"resizers\");\n    // When the resizers are used with the keyboard, they're focusable, hence\n    // we want to have them in this order (top left, top middle, top right, ...)\n    // in the DOM to have the focus order correct.\n    const classes = this._willKeepAspectRatio\n      ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"]\n      : [\n          \"topLeft\",\n          \"topMiddle\",\n          \"topRight\",\n          \"middleRight\",\n          \"bottomRight\",\n          \"bottomMiddle\",\n          \"bottomLeft\",\n          \"middleLeft\",\n        ];\n    const signal = this._uiManager._signal;\n    for (const name of classes) {\n      const div = document.createElement(\"div\");\n      this.#resizersDiv.append(div);\n      div.classList.add(\"resizer\", name);\n      div.setAttribute(\"data-resizer-name\", name);\n      div.addEventListener(\n        \"pointerdown\",\n        this.#resizerPointerdown.bind(this, name),\n        { signal }\n      );\n      div.addEventListener(\"contextmenu\", noContextMenu, { signal });\n      div.tabIndex = -1;\n    }\n    this.div.prepend(this.#resizersDiv);\n  }\n\n  #resizerPointerdown(name, event) {\n    event.preventDefault();\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      return;\n    }\n\n    this.#altText?.toggle(false);\n\n    const savedDraggable = this._isDraggable;\n    this._isDraggable = false;\n    this.#lastPointerCoords = [event.screenX, event.screenY];\n\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n\n    this.parent.togglePointerEvents(false);\n    window.addEventListener(\n      \"pointermove\",\n      this.#resizerPointermove.bind(this, name),\n      { passive: true, capture: true, signal }\n    );\n    window.addEventListener(\n      \"touchmove\",\n      stopEvent /* Prevent the page from scrolling */,\n      { passive: false, signal }\n    );\n    window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height,\n    };\n    const savedParentCursor = this.parent.div.style.cursor;\n    const savedCursor = this.div.style.cursor;\n    this.div.style.cursor = this.parent.div.style.cursor =\n      window.getComputedStyle(event.target).cursor;\n\n    const pointerUpCallback = () => {\n      ac.abort();\n      this.parent.togglePointerEvents(true);\n      this.#altText?.toggle(true);\n      this._isDraggable = savedDraggable;\n      this.parent.div.style.cursor = savedParentCursor;\n      this.div.style.cursor = savedCursor;\n\n      this.#addResizeToUndoStack();\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n    // If the user switches to another window (with alt+tab), then we end the\n    // resize session.\n    window.addEventListener(\"blur\", pointerUpCallback, { signal });\n  }\n\n  #resize(x, y, width, height) {\n    this.width = width;\n    this.height = height;\n    this.x = x;\n    this.y = y;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResized();\n  }\n\n  /**\n   * Called when the editor has been resized.\n   */\n  _onResized() {}\n\n  #addResizeToUndoStack() {\n    if (!this.#savedDimensions) {\n      return;\n    }\n    const { savedX, savedY, savedWidth, savedHeight } = this.#savedDimensions;\n    this.#savedDimensions = null;\n\n    const newX = this.x;\n    const newY = this.y;\n    const newWidth = this.width;\n    const newHeight = this.height;\n    if (\n      newX === savedX &&\n      newY === savedY &&\n      newWidth === savedWidth &&\n      newHeight === savedHeight\n    ) {\n      return;\n    }\n\n    this.addCommands({\n      cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight),\n      undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight),\n      mustExec: true,\n    });\n  }\n\n  static _round(x) {\n    // 10000 because we multiply by 100 and use toFixed(2) in fixAndSetPosition.\n    // Without rounding, the positions of the corners other than the top left\n    // one can be slightly wrong.\n    return Math.round(x * 10000) / 10000;\n  }\n\n  #resizerPointermove(name, event) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [\n      rotationMatrix[0] * x + rotationMatrix[2] * y,\n      rotationMatrix[1] * x + rotationMatrix[3] * y,\n    ];\n    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n    const invTransf = (x, y) => [\n      invRotationMatrix[0] * x + invRotationMatrix[2] * y,\n      invRotationMatrix[1] * x + invRotationMatrix[3] * y,\n    ];\n    let getPoint;\n    let getOpposite;\n    let isDiagonal = false;\n    let isHorizontal = false;\n\n    switch (name) {\n      case \"topLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, 0];\n        getOpposite = (w, h) => [w, h];\n        break;\n      case \"topMiddle\":\n        getPoint = (w, h) => [w / 2, 0];\n        getOpposite = (w, h) => [w / 2, h];\n        break;\n      case \"topRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, 0];\n        getOpposite = (w, h) => [0, h];\n        break;\n      case \"middleRight\":\n        isHorizontal = true;\n        getPoint = (w, h) => [w, h / 2];\n        getOpposite = (w, h) => [0, h / 2];\n        break;\n      case \"bottomRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, h];\n        getOpposite = (w, h) => [0, 0];\n        break;\n      case \"bottomMiddle\":\n        getPoint = (w, h) => [w / 2, h];\n        getOpposite = (w, h) => [w / 2, 0];\n        break;\n      case \"bottomLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, h];\n        getOpposite = (w, h) => [w, 0];\n        break;\n      case \"middleLeft\":\n        isHorizontal = true;\n        getPoint = (w, h) => [0, h / 2];\n        getOpposite = (w, h) => [w, h / 2];\n        break;\n    }\n\n    const point = getPoint(savedWidth, savedHeight);\n    const oppositePoint = getOpposite(savedWidth, savedHeight);\n    let transfOppositePoint = transf(...oppositePoint);\n    const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]);\n    const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]);\n    let ratioX = 1;\n    let ratioY = 1;\n\n    let deltaX, deltaY;\n\n    if (!event.fromKeyboard) {\n      // We can't use event.movementX/Y because they're not reliable:\n      //  https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\n      // (it was buggy on a laptop with a touch screen).\n      const { screenX, screenY } = event;\n      const [lastScreenX, lastScreenY] = this.#lastPointerCoords;\n      [deltaX, deltaY] = this.screenToPageTranslation(\n        screenX - lastScreenX,\n        screenY - lastScreenY\n      );\n      this.#lastPointerCoords[0] = screenX;\n      this.#lastPointerCoords[1] = screenY;\n    } else {\n      ({ deltaX, deltaY } = event);\n    }\n    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n\n    if (isDiagonal) {\n      const oldDiag = Math.hypot(savedWidth, savedHeight);\n      ratioX = ratioY = Math.max(\n        Math.min(\n          Math.hypot(\n            oppositePoint[0] - point[0] - deltaX,\n            oppositePoint[1] - point[1] - deltaY\n          ) / oldDiag,\n          // Avoid the editor to be larger than the page.\n          1 / savedWidth,\n          1 / savedHeight\n        ),\n        // Avoid the editor to be smaller than the minimum size.\n        minWidth / savedWidth,\n        minHeight / savedHeight\n      );\n    } else if (isHorizontal) {\n      ratioX =\n        MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) /\n        savedWidth;\n    } else {\n      ratioY =\n        MathClamp(\n          Math.abs(oppositePoint[1] - point[1] - deltaY),\n          minHeight,\n          1\n        ) / savedHeight;\n    }\n\n    const newWidth = AnnotationEditor._round(savedWidth * ratioX);\n    const newHeight = AnnotationEditor._round(savedHeight * ratioY);\n    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n    const newX = oppositeX - transfOppositePoint[0];\n    const newY = oppositeY - transfOppositePoint[1];\n\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.x = newX;\n    this.y = newY;\n\n    this.setDims();\n    this.fixAndSetPosition();\n\n    this._onResizing();\n  }\n\n  /**\n   * Called when the editor is being resized.\n   */\n  _onResizing() {}\n\n  /**\n   * Called when the alt text dialog is closed.\n   */\n  altTextFinish() {\n    this.#altText?.finish();\n  }\n\n  /**\n   * Get the toolbar buttons for this editor.\n   * @returns {Array<Array<string|object|null>>|null}\n   */\n  get toolbarButtons() {\n    return null;\n  }\n\n  /**\n   * Add a toolbar for this editor.\n   * @returns {Promise<EditorToolbar|null>}\n   */\n  async addEditToolbar() {\n    if (this._editToolbar || this.#isInEditMode) {\n      return this._editToolbar;\n    }\n    this._editToolbar = new EditorToolbar(this);\n    this.div.append(this._editToolbar.render());\n    const { toolbarButtons } = this;\n    if (toolbarButtons) {\n      for (const [name, tool] of toolbarButtons) {\n        await this._editToolbar.addButton(name, tool);\n      }\n    }\n    if (!this.hasComment) {\n      this._editToolbar.addButton(\"comment\", this.addCommentButton());\n    }\n    this._editToolbar.addButton(\"delete\");\n\n    return this._editToolbar;\n  }\n\n  addCommentButtonInToolbar() {\n    this._editToolbar?.addButtonBefore(\n      \"comment\",\n      this.addCommentButton(),\n      \".deleteButton\"\n    );\n  }\n\n  removeCommentButtonFromToolbar() {\n    this._editToolbar?.removeButton(\"comment\");\n  }\n\n  removeEditToolbar() {\n    this._editToolbar?.remove();\n    this._editToolbar = null;\n\n    // We destroy the alt text but we don't null it because we want to be able\n    // to restore it in case the user undoes the deletion.\n    this.#altText?.destroy();\n  }\n\n  addContainer(container) {\n    const editToolbarDiv = this._editToolbar?.div;\n    if (editToolbarDiv) {\n      editToolbarDiv.before(container);\n    } else {\n      this.div.append(container);\n    }\n  }\n\n  getClientDimensions() {\n    return this.div.getBoundingClientRect();\n  }\n\n  /**\n   * Create the alt text for this editor.\n   * @returns {object}\n   */\n  createAltText() {\n    if (!this.#altText) {\n      AltText.initialize(AnnotationEditor._l10n);\n      this.#altText = new AltText(this);\n      if (this.#accessibilityData) {\n        this.#altText.data = this.#accessibilityData;\n        this.#accessibilityData = null;\n      }\n    }\n    return this.#altText;\n  }\n\n  get altTextData() {\n    return this.#altText?.data;\n  }\n\n  /**\n   * Set the alt text data.\n   */\n  set altTextData(data) {\n    if (!this.#altText) {\n      return;\n    }\n    this.#altText.data = data;\n  }\n\n  get guessedAltText() {\n    return this.#altText?.guessedText;\n  }\n\n  async setGuessedAltText(text) {\n    await this.#altText?.setGuessedText(text);\n  }\n\n  serializeAltText(isForCopying) {\n    return this.#altText?.serialize(isForCopying);\n  }\n\n  hasAltText() {\n    return !!this.#altText && !this.#altText.isEmpty();\n  }\n\n  hasAltTextData() {\n    return this.#altText?.hasData() ?? false;\n  }\n\n  focusCommentButton() {\n    this.#comment?.focusButton();\n  }\n\n  addCommentButton() {\n    return (this.#comment ||= new Comment(this));\n  }\n\n  addStandaloneCommentButton() {\n    if (this.#commentStandaloneButton) {\n      if (this._uiManager.isEditingMode()) {\n        this.#commentStandaloneButton.classList.remove(\"hidden\");\n      }\n      return;\n    }\n    if (!this.hasComment) {\n      return;\n    }\n    this.#commentStandaloneButton = this.#comment.renderForStandalone();\n    this.div.append(this.#commentStandaloneButton);\n  }\n\n  removeStandaloneCommentButton() {\n    this.#comment.removeStandaloneCommentButton();\n    this.#commentStandaloneButton = null;\n  }\n\n  hideStandaloneCommentButton() {\n    this.#commentStandaloneButton?.classList.add(\"hidden\");\n  }\n\n  get comment() {\n    const {\n      data: { richText, text, date, deleted },\n    } = this.#comment;\n    return {\n      text,\n      richText,\n      date,\n      deleted,\n      color: this.getNonHCMColor(),\n      opacity: this.opacity ?? 1,\n    };\n  }\n\n  set comment(text) {\n    this.#comment ||= new Comment(this);\n    this.#comment.data = text;\n    if (this.hasComment) {\n      this.removeCommentButtonFromToolbar();\n      this.addStandaloneCommentButton();\n      this._uiManager.updateComment(this);\n    } else {\n      this.addCommentButtonInToolbar();\n      this.removeStandaloneCommentButton();\n      this._uiManager.removeComment(this);\n    }\n  }\n\n  setCommentData({ comment, popupRef, richText }) {\n    if (!popupRef) {\n      return;\n    }\n    this.#comment ||= new Comment(this);\n    this.#comment.setInitialText(comment, richText);\n\n    if (!this.annotationElementId) {\n      return;\n    }\n    const storedData = this._uiManager.getAndRemoveDataFromAnnotationStorage(\n      this.annotationElementId\n    );\n    if (storedData) {\n      this.updateFromAnnotationLayer(storedData);\n    }\n  }\n\n  get hasEditedComment() {\n    return this.#comment?.hasBeenEdited();\n  }\n\n  get hasDeletedComment() {\n    return this.#comment?.isDeleted();\n  }\n\n  get hasComment() {\n    return (\n      !!this.#comment && !this.#comment.isEmpty() && !this.#comment.isDeleted()\n    );\n  }\n\n  async editComment(options) {\n    this.#comment ||= new Comment(this);\n    this.#comment.edit(options);\n  }\n\n  toggleComment(isSelected, visibility = undefined) {\n    if (this.hasComment) {\n      this._uiManager.toggleComment(this, isSelected, visibility);\n    }\n  }\n\n  setSelectedCommentButton(selected) {\n    this.#comment.setSelectedButton(selected);\n  }\n\n  addComment(serialized) {\n    if (this.hasEditedComment) {\n      const DEFAULT_POPUP_WIDTH = 180;\n      const DEFAULT_POPUP_HEIGHT = 100;\n      const [, , , trY] = serialized.rect;\n      const [pageWidth] = this.pageDimensions;\n      const [pageX] = this.pageTranslation;\n      const blX = pageX + pageWidth + 1;\n      const blY = trY - DEFAULT_POPUP_HEIGHT;\n      const trX = blX + DEFAULT_POPUP_WIDTH;\n      serialized.popup = {\n        contents: this.comment.text,\n        deleted: this.comment.deleted,\n        rect: [blX, blY, trX, trY],\n      };\n    }\n  }\n\n  updateFromAnnotationLayer({ popup: { contents, deleted } }) {\n    this.#comment.data = deleted ? null : contents;\n  }\n\n  get parentBoundingClientRect() {\n    return this.parent.boundingClientRect;\n  }\n\n  /**\n   * Render this editor in a div.\n   * @returns {HTMLDivElement | null}\n   */\n  render() {\n    const div = (this.div = document.createElement(\"div\"));\n    div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n    div.className = this.name;\n    div.setAttribute(\"id\", this.id);\n    div.tabIndex = this.#disabled ? -1 : 0;\n    div.setAttribute(\"role\", \"application\");\n    if (this.defaultL10nId) {\n      div.setAttribute(\"data-l10n-id\", this.defaultL10nId);\n    }\n    if (!this._isVisible) {\n      div.classList.add(\"hidden\");\n    }\n\n    this.setInForeground();\n    this.#addFocusListeners();\n\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (this.parentRotation % 180 !== 0) {\n      div.style.maxWidth = `${((100 * parentHeight) / parentWidth).toFixed(\n        2\n      )}%`;\n      div.style.maxHeight = `${((100 * parentWidth) / parentHeight).toFixed(\n        2\n      )}%`;\n    }\n\n    const [tx, ty] = this.getInitialTranslation();\n    this.translate(tx, ty);\n\n    bindEvents(this, div, [\"keydown\", \"pointerdown\", \"dblclick\"]);\n\n    if (this.isResizable && this._uiManager._supportsPinchToZoom) {\n      this.#touchManager ||= new TouchManager({\n        container: div,\n        isPinchingDisabled: () => !this.isSelected,\n        onPinchStart: this.#touchPinchStartCallback.bind(this),\n        onPinching: this.#touchPinchCallback.bind(this),\n        onPinchEnd: this.#touchPinchEndCallback.bind(this),\n        signal: this._uiManager._signal,\n      });\n    }\n\n    this.addStandaloneCommentButton();\n    this._uiManager._editorUndoBar?.hide();\n\n    return div;\n  }\n\n  #touchPinchStartCallback() {\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height,\n    };\n    this.#altText?.toggle(false);\n    this.parent.togglePointerEvents(false);\n  }\n\n  #touchPinchCallback(_origin, prevDistance, distance) {\n    // Slightly slow down the zooming because the editor could be small and the\n    // user could have difficulties to rescale it as they want.\n    const slowDownFactor = 0.7;\n    let factor =\n      slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;\n    if (factor === 1) {\n      return;\n    }\n\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [\n      rotationMatrix[0] * x + rotationMatrix[2] * y,\n      rotationMatrix[1] * x + rotationMatrix[3] * y,\n    ];\n\n    // The center of the editor is the fixed point.\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    factor = Math.max(\n      Math.min(factor, 1 / savedWidth, 1 / savedHeight),\n      minWidth / savedWidth,\n      minHeight / savedHeight\n    );\n    const newWidth = AnnotationEditor._round(savedWidth * factor);\n    const newHeight = AnnotationEditor._round(savedHeight * factor);\n    if (newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n\n    this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight];\n    const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);\n    const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]);\n    const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]);\n    const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);\n\n    this.x = centerX - newTransfCenterPoint[0];\n    this.y = centerY - newTransfCenterPoint[1];\n    this.width = newWidth;\n    this.height = newHeight;\n\n    this.setDims();\n    this.fixAndSetPosition();\n\n    this._onResizing();\n  }\n\n  #touchPinchEndCallback() {\n    this.#altText?.toggle(true);\n    this.parent.togglePointerEvents(true);\n    this.#addResizeToUndoStack();\n  }\n\n  /**\n   * Onpointerdown callback.\n   * @param {PointerEvent} event\n   */\n  pointerdown(event) {\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      // Avoid to focus this editor because of a non-left click.\n      event.preventDefault();\n      return;\n    }\n    this.#hasBeenClicked = true;\n\n    if (this._isDraggable) {\n      this.#setUpDragSession(event);\n      return;\n    }\n\n    this.#selectOnPointerEvent(event);\n  }\n\n  #selectOnPointerEvent(event) {\n    const { isMac } = FeatureTest.platform;\n    if (\n      (event.ctrlKey && !isMac) ||\n      event.shiftKey ||\n      (event.metaKey && isMac)\n    ) {\n      this.parent.toggleSelected(this);\n    } else {\n      this.parent.setSelected(this);\n    }\n  }\n\n  #setUpDragSession(event) {\n    const { isSelected } = this;\n    this._uiManager.setUpDragSession();\n    let hasDraggingStarted = false;\n\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n    const opts = { capture: true, passive: false, signal };\n    const cancelDrag = e => {\n      ac.abort();\n\n      this.#dragPointerId = null;\n      this.#hasBeenClicked = false;\n      if (!this._uiManager.endDragSession()) {\n        this.#selectOnPointerEvent(e);\n      }\n      if (hasDraggingStarted) {\n        this._onStopDragging();\n      }\n    };\n\n    if (isSelected) {\n      this.#prevDragX = event.clientX;\n      this.#prevDragY = event.clientY;\n      this.#dragPointerId = event.pointerId;\n      this.#dragPointerType = event.pointerType;\n      window.addEventListener(\n        \"pointermove\",\n        e => {\n          if (!hasDraggingStarted) {\n            hasDraggingStarted = true;\n            this._uiManager.toggleComment(\n              this,\n              /* isSelected = */ true,\n              /* visibility = */ false\n            );\n            this._onStartDragging();\n          }\n          const { clientX: x, clientY: y, pointerId } = e;\n          if (pointerId !== this.#dragPointerId) {\n            stopEvent(e);\n            return;\n          }\n          const [tx, ty] = this.screenToPageTranslation(\n            x - this.#prevDragX,\n            y - this.#prevDragY\n          );\n          this.#prevDragX = x;\n          this.#prevDragY = y;\n          this._uiManager.dragSelectedEditors(tx, ty);\n        },\n        opts\n      );\n      window.addEventListener(\n        \"touchmove\",\n        stopEvent /* Prevent the page from scrolling */,\n        opts\n      );\n      window.addEventListener(\n        \"pointerdown\",\n        // If the user drags with one finger and then clicks with another.\n        e => {\n          if (e.pointerType === this.#dragPointerType) {\n            // We've a pinch to zoom session.\n            // We cannot have two primaries at the same time.\n            // It's possible to be in this state with Firefox and Gnome when\n            // trying to drag with three fingers (see bug 1933716).\n            if (this.#touchManager || e.isPrimary) {\n              cancelDrag(e);\n            }\n          }\n          stopEvent(e);\n        },\n        opts\n      );\n    }\n\n    const pointerUpCallback = e => {\n      if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) {\n        cancelDrag(e);\n        return;\n      }\n      stopEvent(e);\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n    // If the user is using alt+tab during the dragging session, the pointerup\n    // event could be not fired, but a blur event is fired so we can use it in\n    // order to interrupt the dragging session.\n    window.addEventListener(\"blur\", pointerUpCallback, { signal });\n  }\n\n  _onStartDragging() {}\n\n  _onStopDragging() {}\n\n  moveInDOM() {\n    // Moving the editor in the DOM can be expensive, so we wait a bit before.\n    // It's important to not block the UI (for example when changing the font\n    // size in a FreeText).\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n    }\n    this.#moveInDOMTimeout = setTimeout(() => {\n      this.#moveInDOMTimeout = null;\n      this.parent?.moveEditorInDOM(this);\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n        this._uiManager._eventBus.dispatch(\"editormovedindom\", {\n          source: this,\n        });\n      }\n    }, 0);\n  }\n\n  _setParentAndPosition(parent, x, y) {\n    parent.changeParent(this);\n    this.x = x;\n    this.y = y;\n    this.fixAndSetPosition();\n    this._onTranslated();\n  }\n\n  /**\n   * Convert the current rect into a page one.\n   * @param {number} tx - x-translation in screen coordinates.\n   * @param {number} ty - y-translation in screen coordinates.\n   * @param {number} [rotation] - the rotation of the page.\n   */\n  getRect(tx, ty, rotation = this.rotation) {\n    const scale = this.parentScale;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const shiftX = tx / scale;\n    const shiftY = ty / scale;\n    const x = this.x * pageWidth;\n    const y = this.y * pageHeight;\n    const width = this.width * pageWidth;\n    const height = this.height * pageHeight;\n\n    switch (rotation) {\n      case 0:\n        return [\n          x + shiftX + pageX,\n          pageHeight - y - shiftY - height + pageY,\n          x + shiftX + width + pageX,\n          pageHeight - y - shiftY + pageY,\n        ];\n      case 90:\n        return [\n          x + shiftY + pageX,\n          pageHeight - y + shiftX + pageY,\n          x + shiftY + height + pageX,\n          pageHeight - y + shiftX + width + pageY,\n        ];\n      case 180:\n        return [\n          x - shiftX - width + pageX,\n          pageHeight - y + shiftY + pageY,\n          x - shiftX + pageX,\n          pageHeight - y + shiftY + height + pageY,\n        ];\n      case 270:\n        return [\n          x - shiftY - height + pageX,\n          pageHeight - y - shiftX - width + pageY,\n          x - shiftY + pageX,\n          pageHeight - y - shiftX + pageY,\n        ];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n\n  getRectInCurrentCoords(rect, pageHeight) {\n    const [x1, y1, x2, y2] = rect;\n\n    const width = x2 - x1;\n    const height = y2 - y1;\n\n    switch (this.rotation) {\n      case 0:\n        return [x1, pageHeight - y2, width, height];\n      case 90:\n        return [x1, pageHeight - y1, height, width];\n      case 180:\n        return [x2, pageHeight - y1, width, height];\n      case 270:\n        return [x2, pageHeight - y2, height, width];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n\n  /**\n   * Get the rect in page coordinates without any translation.\n   * It's used when serializing the editor.\n   * @returns {Array<number>}\n   */\n  getPDFRect() {\n    return this.getRect(0, 0);\n  }\n\n  getNonHCMColor() {\n    return (\n      this.color &&\n      AnnotationEditor._colorManager.convert(\n        this._uiManager.getNonHCMColor(this.color)\n      )\n    );\n  }\n\n  /**\n   * The color has been changed.\n   */\n  onUpdatedColor() {\n    this.#comment?.onUpdatedColor();\n  }\n\n  getData() {\n    const {\n      comment: { text: str, color, date, opacity, deleted, richText },\n      uid: id,\n      pageIndex,\n      creationDate,\n      modificationDate,\n    } = this;\n    return {\n      id,\n      pageIndex,\n      rect: this.getPDFRect(),\n      richText,\n      contentsObj: { str },\n      creationDate,\n      modificationDate: date || modificationDate,\n      popupRef: !deleted,\n      color,\n      opacity,\n    };\n  }\n\n  /**\n   * Executed once this editor has been rendered.\n   * @param {boolean} focus - true if the editor should be focused.\n   */\n  onceAdded(focus) {}\n\n  /**\n   * Check if the editor contains something.\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return false;\n  }\n\n  /**\n   * Enable edit mode.\n   * @returns {boolean} - true if the edit mode has been enabled.\n   */\n  enableEditMode() {\n    if (this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(false);\n    this.#isInEditMode = true;\n\n    return true;\n  }\n\n  /**\n   * Disable edit mode.\n   * @returns {boolean} - true if the edit mode has been disabled.\n   */\n  disableEditMode() {\n    if (!this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(true);\n    this.#isInEditMode = false;\n\n    return true;\n  }\n\n  /**\n   * Check if the editor is edited.\n   * @returns {boolean}\n   */\n  isInEditMode() {\n    return this.#isInEditMode;\n  }\n\n  /**\n   * If it returns true, then this editor handles the keyboard\n   * events itself.\n   * @returns {boolean}\n   */\n  shouldGetKeyboardEvents() {\n    return this.#isResizerEnabledForKeyboard;\n  }\n\n  /**\n   * Check if this editor needs to be rebuilt or not.\n   * @returns {boolean}\n   */\n  needsToBeRebuilt() {\n    return this.div && !this.isAttachedToDOM;\n  }\n\n  get isOnScreen() {\n    const { top, left, bottom, right } = this.getClientDimensions();\n    const { innerHeight, innerWidth } = window;\n    return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;\n  }\n\n  #addFocusListeners() {\n    if (this.#focusAC || !this.div) {\n      return;\n    }\n    this.#focusAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#focusAC);\n\n    this.div.addEventListener(\"focusin\", this.focusin.bind(this), { signal });\n    this.div.addEventListener(\"focusout\", this.focusout.bind(this), { signal });\n  }\n\n  /**\n   * Rebuild the editor in case it has been removed on undo.\n   *\n   * To implement in subclasses.\n   */\n  rebuild() {\n    this.#addFocusListeners();\n  }\n\n  /**\n   * Rotate the editor when the page is rotated.\n   * @param {number} angle\n   */\n  rotate(_angle) {}\n\n  /**\n   * Resize the editor when the page is resized.\n   */\n  resize() {}\n\n  /**\n   * Serialize the editor when it has been deleted.\n   * @returns {Object}\n   */\n  serializeDeleted() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex,\n      popupRef: this._initialData?.popupRef || \"\",\n    };\n  }\n\n  /**\n   * Serialize the editor.\n   * The result of the serialization will be used to construct a\n   * new annotation to add to the pdf document.\n   *\n   * To implement in subclasses.\n   * @param {boolean} [isForCopying]\n   * @param {Object | null} [context]\n   * @returns {Object | null}\n   */\n  serialize(isForCopying = false, context = null) {\n    return {\n      annotationType: this.mode,\n      pageIndex: this.pageIndex,\n      rect: this.getPDFRect(),\n      rotation: this.rotation,\n      structTreeParentId: this._structTreeParentId,\n      popupRef: this._initialData?.popupRef || \"\",\n    };\n  }\n\n  /**\n   * Deserialize the editor.\n   * The result of the deserialization is a new editor.\n   *\n   * @param {Object} data\n   * @param {AnnotationEditorLayer} parent\n   * @param {AnnotationEditorUIManager} uiManager\n   * @returns {Promise<AnnotationEditor | null>}\n   */\n  static async deserialize(data, parent, uiManager) {\n    const editor = new this.prototype.constructor({\n      parent,\n      id: parent.getNextId(),\n      uiManager,\n      annotationElementId: data.annotationElementId,\n      creationDate: data.creationDate,\n      modificationDate: data.modificationDate,\n    });\n    editor.rotation = data.rotation;\n    editor.#accessibilityData = data.accessibilityData;\n    editor._isCopy = data.isCopy || false;\n\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [x, y, width, height] = editor.getRectInCurrentCoords(\n      data.rect,\n      pageHeight\n    );\n\n    editor.x = x / pageWidth;\n    editor.y = y / pageHeight;\n    editor.width = width / pageWidth;\n    editor.height = height / pageHeight;\n\n    return editor;\n  }\n\n  /**\n   * Check if an existing annotation associated with this editor has been\n   * modified.\n   * @returns {boolean}\n   */\n  get hasBeenModified() {\n    return (\n      !!this.annotationElementId && (this.deleted || this.serialize() !== null)\n    );\n  }\n\n  /**\n   * Remove this editor.\n   * It's used on ctrl+backspace action.\n   */\n  remove() {\n    this.#focusAC?.abort();\n    this.#focusAC = null;\n\n    if (!this.isEmpty()) {\n      // The editor is removed but it can be back at some point thanks to\n      // undo/redo so we must commit it before.\n      this.commit();\n    }\n    if (this.parent) {\n      this.parent.remove(this);\n    } else {\n      this._uiManager.removeEditor(this);\n    }\n\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n      this.#moveInDOMTimeout = null;\n    }\n    this.#stopResizing();\n    this.removeEditToolbar();\n    if (this.#telemetryTimeouts) {\n      for (const timeout of this.#telemetryTimeouts.values()) {\n        clearTimeout(timeout);\n      }\n      this.#telemetryTimeouts = null;\n    }\n    this.parent = null;\n    this.#touchManager?.destroy();\n    this.#touchManager = null;\n  }\n\n  /**\n   * @returns {boolean} true if this editor can be resized.\n   */\n  get isResizable() {\n    return false;\n  }\n\n  /**\n   * Add the resizers to this editor.\n   */\n  makeResizable() {\n    if (this.isResizable) {\n      this.#createResizers();\n      this.#resizersDiv.classList.remove(\"hidden\");\n    }\n  }\n\n  get toolbarPosition() {\n    return null;\n  }\n\n  /**\n   * Get the position of the comment button.\n   * @returns {Array<number>|null}\n   */\n  get commentButtonPosition() {\n    return this._uiManager.direction === \"ltr\" ? [1, 0] : [0, 0];\n  }\n\n  get commentButtonPositionInPage() {\n    const {\n      commentButtonPosition: [posX, posY],\n    } = this;\n    const [blX, blY, trX, trY] = this.getPDFRect();\n    return [\n      AnnotationEditor._round(blX + (trX - blX) * posX),\n      AnnotationEditor._round(blY + (trY - blY) * (1 - posY)),\n    ];\n  }\n\n  get commentButtonColor() {\n    return this._uiManager.makeCommentColor(\n      this.getNonHCMColor(),\n      this.opacity\n    );\n  }\n\n  get commentPopupPosition() {\n    return this.#comment.commentPopupPositionInLayer;\n  }\n\n  set commentPopupPosition(pos) {\n    this.#comment.commentPopupPositionInLayer = pos;\n  }\n\n  hasDefaultPopupPosition() {\n    return this.#comment.hasDefaultPopupPosition();\n  }\n\n  get commentButtonWidth() {\n    return this.#comment.commentButtonWidth;\n  }\n\n  get elementBeforePopup() {\n    return this.div;\n  }\n\n  setCommentButtonStates(options) {\n    this.#comment.setCommentButtonStates(options);\n  }\n\n  /**\n   * onkeydown callback.\n   * @param {KeyboardEvent} event\n   */\n  keydown(event) {\n    if (\n      !this.isResizable ||\n      event.target !== this.div ||\n      event.key !== \"Enter\"\n    ) {\n      return;\n    }\n    this._uiManager.setSelected(this);\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height,\n    };\n    const children = this.#resizersDiv.children;\n    if (!this.#allResizerDivs) {\n      this.#allResizerDivs = Array.from(children);\n      const boundResizerKeydown = this.#resizerKeydown.bind(this);\n      const boundResizerBlur = this.#resizerBlur.bind(this);\n      const signal = this._uiManager._signal;\n      for (const div of this.#allResizerDivs) {\n        const name = div.getAttribute(\"data-resizer-name\");\n        div.setAttribute(\"role\", \"spinbutton\");\n        div.addEventListener(\"keydown\", boundResizerKeydown, { signal });\n        div.addEventListener(\"blur\", boundResizerBlur, { signal });\n        div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name), {\n          signal,\n        });\n        div.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n\n    // We want to have the resizers in the visual order, so we move the first\n    // (top-left) to the right place.\n    const first = this.#allResizerDivs[0];\n    let firstPosition = 0;\n    for (const div of children) {\n      if (div === first) {\n        break;\n      }\n      firstPosition++;\n    }\n    const nextFirstPosition =\n      (((360 - this.rotation + this.parentRotation) % 360) / 90) *\n      (this.#allResizerDivs.length / 4);\n\n    if (nextFirstPosition !== firstPosition) {\n      // We need to reorder the resizers in the DOM in order to have the focus\n      // on the top-left one.\n      if (nextFirstPosition < firstPosition) {\n        for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n          this.#resizersDiv.append(this.#resizersDiv.firstChild);\n        }\n      } else if (nextFirstPosition > firstPosition) {\n        for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n          this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n        }\n      }\n\n      let i = 0;\n      for (const child of children) {\n        const div = this.#allResizerDivs[i++];\n        const name = div.getAttribute(\"data-resizer-name\");\n        child.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n\n    this.#setResizerTabIndex(0);\n    this.#isResizerEnabledForKeyboard = true;\n    this.#resizersDiv.firstChild.focus({ focusVisible: true });\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n\n  #resizerKeydown(event) {\n    AnnotationEditor._resizerKeyboardManager.exec(this, event);\n  }\n\n  #resizerBlur(event) {\n    if (\n      this.#isResizerEnabledForKeyboard &&\n      event.relatedTarget?.parentNode !== this.#resizersDiv\n    ) {\n      this.#stopResizing();\n    }\n  }\n\n  #resizerFocus(name) {\n    this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n  }\n\n  #setResizerTabIndex(value) {\n    if (!this.#allResizerDivs) {\n      return;\n    }\n    for (const div of this.#allResizerDivs) {\n      div.tabIndex = value;\n    }\n  }\n\n  _resizeWithKeyboard(x, y) {\n    if (!this.#isResizerEnabledForKeyboard) {\n      return;\n    }\n    this.#resizerPointermove(this.#focusedResizerName, {\n      deltaX: x,\n      deltaY: y,\n      fromKeyboard: true,\n    });\n  }\n\n  #stopResizing() {\n    this.#isResizerEnabledForKeyboard = false;\n    this.#setResizerTabIndex(-1);\n    this.#addResizeToUndoStack();\n  }\n\n  _stopResizingWithKeyboard() {\n    this.#stopResizing();\n    this.div.focus();\n  }\n\n  /**\n   * Select this editor.\n   */\n  select() {\n    if (this.isSelected && this._editToolbar) {\n      this._editToolbar.show();\n      return;\n    }\n    this.isSelected = true;\n    this.makeResizable();\n    this.div?.classList.add(\"selectedEditor\");\n    if (!this._editToolbar) {\n      this.addEditToolbar().then(() => {\n        if (this.div?.classList.contains(\"selectedEditor\")) {\n          // The editor can have been unselected while we were waiting for the\n          // edit toolbar to be created, hence we want to be sure that this\n          // editor is still selected.\n          this._editToolbar?.show();\n        }\n      });\n      return;\n    }\n    this._editToolbar?.show();\n    this.#altText?.toggleAltTextBadge(false);\n  }\n\n  focus() {\n    if (this.div && !this.div.contains(document.activeElement)) {\n      setTimeout(() => this.div?.focus({ preventScroll: true }), 0);\n    }\n  }\n\n  /**\n   * Unselect this editor.\n   */\n  unselect() {\n    if (!this.isSelected) {\n      return;\n    }\n    this.isSelected = false;\n    this.#resizersDiv?.classList.add(\"hidden\");\n    this.div?.classList.remove(\"selectedEditor\");\n    if (this.div?.contains(document.activeElement)) {\n      // Don't use this.div.blur() because we don't know where the focus will\n      // go.\n      this._uiManager.currentLayer.div.focus({\n        preventScroll: true,\n      });\n    }\n    this._editToolbar?.hide();\n    this.#altText?.toggleAltTextBadge(true);\n    if (this.hasComment) {\n      this._uiManager.toggleComment(\n        this,\n        /* isSelected = */ false,\n        /* visibility = */ false\n      );\n    }\n  }\n\n  /**\n   * Update some parameters which have been changed through the UI.\n   * @param {number} type\n   * @param {*} value\n   */\n  updateParams(type, value) {}\n\n  /**\n   * When the user disables the editing mode some editors can change some of\n   * their properties.\n   */\n  disableEditing() {}\n\n  /**\n   * When the user enables the editing mode some editors can change some of\n   * their properties.\n   */\n  enableEditing() {}\n\n  /**\n   * Check if the content of this editor can be changed.\n   * For example, a FreeText editor can be changed (the user can change the\n   * text), but a Stamp editor cannot.\n   * @returns {boolean}\n   */\n  get canChangeContent() {\n    return false;\n  }\n\n  /**\n   * The editor is about to be edited.\n   */\n  enterInEditMode() {\n    if (!this.canChangeContent) {\n      return;\n    }\n    this.enableEditMode();\n    this.div.focus();\n  }\n\n  /**\n   * ondblclick callback.\n   * @param {MouseEvent} event\n   */\n  dblclick(event) {\n    if (event.target.nodeName === \"BUTTON\") {\n      // Avoid entering in edit mode when clicking on the comment button.\n      return;\n    }\n    this.enterInEditMode();\n    this.parent.updateToolbar({\n      mode: this.constructor._editorType,\n      editId: this.id,\n    });\n  }\n\n  /**\n   * @returns {HTMLElement | null} the element requiring an alt text.\n   */\n  getElementForAltText() {\n    return this.div;\n  }\n\n  /**\n   * Get the div which really contains the displayed content.\n   * @returns {HTMLDivElement | undefined}\n   */\n  get contentDiv() {\n    return this.div;\n  }\n\n  /**\n   * If true then the editor is currently edited.\n   * @type {boolean}\n   */\n  get isEditing() {\n    return this.#isEditing;\n  }\n\n  /**\n   * When set to true, it means that this editor is currently edited.\n   * @param {boolean} value\n   */\n  set isEditing(value) {\n    this.#isEditing = value;\n    if (!this.parent) {\n      return;\n    }\n    if (value) {\n      this.parent.setSelected(this);\n      this.parent.setActiveEditor(this);\n    } else {\n      this.parent.setActiveEditor(null);\n    }\n  }\n\n  static get MIN_SIZE() {\n    return 16;\n  }\n\n  static canCreateNewEmptyEditor() {\n    return true;\n  }\n\n  /**\n   * Get the data to report to the telemetry when the editor is added.\n   * @returns {Object}\n   */\n  get telemetryInitialData() {\n    return { action: \"added\" };\n  }\n\n  /**\n   * The telemetry data to use when saving/printing.\n   * @returns {Object|null}\n   */\n  get telemetryFinalData() {\n    return null;\n  }\n\n  _reportTelemetry(data, mustWait = false) {\n    if (mustWait) {\n      this.#telemetryTimeouts ||= new Map();\n      const { action } = data;\n      let timeout = this.#telemetryTimeouts.get(action);\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      timeout = setTimeout(() => {\n        this._reportTelemetry(data);\n        this.#telemetryTimeouts.delete(action);\n        if (this.#telemetryTimeouts.size === 0) {\n          this.#telemetryTimeouts = null;\n        }\n      }, AnnotationEditor._telemetryTimeout);\n      this.#telemetryTimeouts.set(action, timeout);\n      return;\n    }\n    data.type ||= this.editorType;\n    this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n      source: this,\n      details: {\n        type: \"editing\",\n        data,\n      },\n    });\n  }\n\n  /**\n   * Show or hide this editor.\n   * @param {boolean|undefined} visible\n   */\n  show(visible = this._isVisible) {\n    this.div.classList.toggle(\"hidden\", !visible);\n    this._isVisible = visible;\n  }\n\n  enable() {\n    if (this.div) {\n      this.div.tabIndex = 0;\n    }\n    this.#disabled = false;\n  }\n\n  disable() {\n    if (this.div) {\n      this.div.tabIndex = -1;\n    }\n    this.#disabled = true;\n  }\n\n  updateFakeAnnotationElement(annotationLayer) {\n    if (!this.#fakeAnnotation && !this.deleted) {\n      this.#fakeAnnotation = annotationLayer.addFakeAnnotation(this);\n      return;\n    }\n    if (this.deleted) {\n      this.#fakeAnnotation.remove();\n      this.#fakeAnnotation = null;\n      return;\n    }\n    if (this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) {\n      this.#fakeAnnotation.updateEdited({\n        rect: this.getPDFRect(),\n        popup: this.comment,\n      });\n    }\n  }\n\n  /**\n   * Render an annotation in the annotation layer.\n   * @param {Object} annotation\n   * @returns {HTMLElement|null}\n   */\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    let content = annotation.container.querySelector(\".annotationContent\");\n    if (!content) {\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      annotation.container.prepend(content);\n    } else if (content.nodeName === \"CANVAS\") {\n      const canvas = content;\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      canvas.before(content);\n    }\n\n    return content;\n  }\n\n  resetAnnotationElement(annotation) {\n    const { firstChild } = annotation.container;\n    if (\n      firstChild?.nodeName === \"DIV\" &&\n      firstChild.classList.contains(\"annotationContent\")\n    ) {\n      firstChild.remove();\n    }\n  }\n}\n\n// This class is used to fake an editor which has been deleted.\nclass FakeEditor extends AnnotationEditor {\n  constructor(params) {\n    super(params);\n    this.annotationElementId = params.annotationElementId;\n    this.deleted = true;\n  }\n\n  serialize() {\n    return this.serializeDeleted();\n  }\n}\n\nexport { AnnotationEditor };\n", "/* Copyright 2014 Opera Software ASA\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    // We don't care about endianness here.\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        h1 ^= k1;\n        h1 = (h1 << 13) | (h1 >>> 19);\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n        k2 = (k2 << 15) | (k2 >>> 17);\n        k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n        h2 ^= k2;\n        h2 = (h2 << 13) | (h2 >>> 19);\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n\n    k1 = 0;\n\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      /* falls through */\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      /* falls through */\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        /* falls through */\n\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n    h2 =\n      ((h2 * 0xff51afd7) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n    h2 =\n      ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n\n    return (\n      (h1 >>> 0).toString(16).padStart(8, \"0\") +\n      (h2 >>> 0).toString(16).padStart(8, \"0\")\n    );\n  }\n}\n\nexport { MurmurHash3_64 };\n", "/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n  map: null,\n  hash: \"\",\n  transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n  #modified = false;\n\n  #modifiedIds = null;\n\n  #editorsMap = null;\n\n  #storage = new Map();\n\n  constructor() {\n    // Callbacks to signal when the modification state is set or reset.\n    // This is used by the viewer to only bind on `beforeunload` if forms\n    // are actually edited to prevent doing so unconditionally since that\n    // can have undesirable effects.\n    this.onSetModified = null;\n    this.onResetModified = null;\n    this.onAnnotationEditor = null;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"_setValues\", {\n        value: obj => {\n          for (const [key, val] of Object.entries(obj)) {\n            this.setValue(key, val);\n          }\n        },\n      });\n    }\n  }\n\n  /**\n   * Get the value for a given key if it exists, or return the default value.\n   * @param {string} key\n   * @param {Object} defaultValue\n   * @returns {Object}\n   */\n  getValue(key, defaultValue) {\n    const value = this.#storage.get(key);\n    if (value === undefined) {\n      return defaultValue;\n    }\n\n    return Object.assign(defaultValue, value);\n  }\n\n  /**\n   * Get the value for a given key.\n   * @param {string} key\n   * @returns {Object}\n   */\n  getRawValue(key) {\n    return this.#storage.get(key);\n  }\n\n  /**\n   * Remove a value from the storage.\n   * @param {string} key\n   */\n  remove(key) {\n    const storedValue = this.#storage.get(key);\n    if (storedValue === undefined) {\n      return;\n    }\n    if (storedValue instanceof AnnotationEditor) {\n      this.#editorsMap.delete(storedValue.annotationElementId);\n    }\n    this.#storage.delete(key);\n\n    if (this.#storage.size === 0) {\n      this.resetModified();\n    }\n\n    if (typeof this.onAnnotationEditor === \"function\") {\n      for (const value of this.#storage.values()) {\n        if (value instanceof AnnotationEditor) {\n          return;\n        }\n      }\n      this.onAnnotationEditor(null);\n    }\n  }\n\n  /**\n   * Set the value for a given key\n   * @param {string} key\n   * @param {Object} value\n   */\n  setValue(key, value) {\n    const obj = this.#storage.get(key);\n    let modified = false;\n    if (obj !== undefined) {\n      for (const [entry, val] of Object.entries(value)) {\n        if (obj[entry] !== val) {\n          modified = true;\n          obj[entry] = val;\n        }\n      }\n    } else {\n      modified = true;\n      this.#storage.set(key, value);\n    }\n    if (modified) {\n      this.#setModified();\n    }\n\n    if (value instanceof AnnotationEditor) {\n      (this.#editorsMap ||= new Map()).set(value.annotationElementId, value);\n      if (typeof this.onAnnotationEditor === \"function\") {\n        this.onAnnotationEditor(value.constructor._type);\n      }\n    }\n  }\n\n  /**\n   * Check if the storage contains the given key.\n   * @param {string} key\n   * @returns {boolean}\n   */\n  has(key) {\n    return this.#storage.has(key);\n  }\n\n  get size() {\n    return this.#storage.size;\n  }\n\n  #setModified() {\n    if (!this.#modified) {\n      this.#modified = true;\n      if (typeof this.onSetModified === \"function\") {\n        this.onSetModified();\n      }\n    }\n  }\n\n  resetModified() {\n    if (this.#modified) {\n      this.#modified = false;\n      if (typeof this.onResetModified === \"function\") {\n        this.onResetModified();\n      }\n    }\n  }\n\n  /**\n   * @returns {PrintAnnotationStorage}\n   */\n  get print() {\n    return new PrintAnnotationStorage(this);\n  }\n\n  /**\n   * PLEASE NOTE: Only intended for usage within the API itself.\n   * @ignore\n   */\n  get serializable() {\n    if (this.#storage.size === 0) {\n      return SerializableEmpty;\n    }\n    const map = new Map(),\n      hash = new MurmurHash3_64(),\n      transfer = [];\n    const context = Object.create(null);\n    let hasBitmap = false;\n\n    for (const [key, val] of this.#storage) {\n      const serialized =\n        val instanceof AnnotationEditor\n          ? val.serialize(/* isForCopying = */ false, context)\n          : val;\n      if (serialized) {\n        map.set(key, serialized);\n\n        hash.update(`${key}:${JSON.stringify(serialized)}`);\n        hasBitmap ||= !!serialized.bitmap;\n      }\n    }\n\n    if (hasBitmap) {\n      // We must transfer the bitmap data separately, since it can be changed\n      // during serialization with SVG images.\n      for (const value of map.values()) {\n        if (value.bitmap) {\n          transfer.push(value.bitmap);\n        }\n      }\n    }\n\n    return map.size > 0\n      ? { map, hash: hash.hexdigest(), transfer }\n      : SerializableEmpty;\n  }\n\n  get editorStats() {\n    let stats = null;\n    const typeToEditor = new Map();\n    let numberOfEditedComments = 0;\n    let numberOfDeletedComments = 0;\n    for (const value of this.#storage.values()) {\n      if (!(value instanceof AnnotationEditor)) {\n        if (value.popup) {\n          if (value.popup.deleted) {\n            numberOfDeletedComments += 1;\n          } else {\n            numberOfEditedComments += 1;\n          }\n        }\n        continue;\n      }\n      if (value.isCommentDeleted) {\n        numberOfDeletedComments += 1;\n      } else if (value.hasEditedComment) {\n        numberOfEditedComments += 1;\n      }\n      const editorStats = value.telemetryFinalData;\n      if (!editorStats) {\n        continue;\n      }\n      const { type } = editorStats;\n      if (!typeToEditor.has(type)) {\n        typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n      }\n      stats ||= Object.create(null);\n      const map = (stats[type] ||= new Map());\n      for (const [key, val] of Object.entries(editorStats)) {\n        if (key === \"type\") {\n          continue;\n        }\n        let counters = map.get(key);\n        if (!counters) {\n          counters = new Map();\n          map.set(key, counters);\n        }\n        const count = counters.get(val) ?? 0;\n        counters.set(val, count + 1);\n      }\n    }\n    if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) {\n      stats ||= Object.create(null);\n      stats.comments = {\n        deleted: numberOfDeletedComments,\n        edited: numberOfEditedComments,\n      };\n    }\n    if (!stats) {\n      return null;\n    }\n    for (const [type, editor] of typeToEditor) {\n      stats[type] = editor.computeTelemetryFinalData(stats[type]);\n    }\n    return stats;\n  }\n\n  resetModifiedIds() {\n    this.#modifiedIds = null;\n  }\n\n  updateEditor(annotationId, data) {\n    const value = this.#editorsMap?.get(annotationId);\n    if (value) {\n      value.updateFromAnnotationLayer(data);\n      return true;\n    }\n    return false;\n  }\n\n  getEditor(annotationId) {\n    return this.#editorsMap?.get(annotationId) || null;\n  }\n\n  /**\n   * @returns {{ids: Set<string>, hash: string}}\n   */\n  get modifiedIds() {\n    if (this.#modifiedIds) {\n      return this.#modifiedIds;\n    }\n    const ids = [];\n    if (this.#editorsMap) {\n      for (const value of this.#editorsMap.values()) {\n        if (!value.serialize()) {\n          continue;\n        }\n        ids.push(value.annotationElementId);\n      }\n    }\n    return (this.#modifiedIds = {\n      ids: new Set(ids),\n      hash: ids.join(\",\"),\n    });\n  }\n\n  [Symbol.iterator]() {\n    return this.#storage.entries();\n  }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n  #serializable;\n\n  constructor(parent) {\n    super();\n    const { map, hash, transfer } = parent.serializable;\n    // Create a *copy* of the data, since Objects are passed by reference in JS.\n    const clone = structuredClone(map, transfer ? { transfer } : null);\n\n    this.#serializable = { map: clone, hash, transfer };\n  }\n\n  /**\n   * @returns {PrintAnnotationStorage}\n   */\n  // eslint-disable-next-line getter-return\n  get print() {\n    unreachable(\"Should not call PrintAnnotationStorage.print\");\n  }\n\n  /**\n   * PLEASE NOTE: Only intended for usage within the API itself.\n   * @ignore\n   */\n  get serializable() {\n    return this.#serializable;\n  }\n\n  get modifiedIds() {\n    return shadow(this, \"modifiedIds\", {\n      ids: new Set(),\n      hash: \"\",\n    });\n  }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  FeatureTest,\n  isNodeJS,\n  shadow,\n  string32,\n  toBase64Util,\n  unreachable,\n  warn,\n} from \"../shared/util.js\";\n\nclass FontLoader {\n  #systemFonts = new Set();\n\n  constructor({\n    ownerDocument = globalThis.document,\n    styleElement = null, // For testing only.\n  }) {\n    this._document = ownerDocument;\n\n    this.nativeFontFaces = new Set();\n    this.styleElement =\n      typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n        ? styleElement\n        : null;\n\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      this.loadingRequests = [];\n      this.loadTestFontId = 0;\n    }\n  }\n\n  addNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.add(nativeFontFace);\n    this._document.fonts.add(nativeFontFace);\n  }\n\n  removeNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.delete(nativeFontFace);\n    this._document.fonts.delete(nativeFontFace);\n  }\n\n  insertRule(rule) {\n    if (!this.styleElement) {\n      this.styleElement = this._document.createElement(\"style\");\n      this._document.documentElement\n        .getElementsByTagName(\"head\")[0]\n        .append(this.styleElement);\n    }\n    const styleSheet = this.styleElement.sheet;\n    styleSheet.insertRule(rule, styleSheet.cssRules.length);\n  }\n\n  clear() {\n    for (const nativeFontFace of this.nativeFontFaces) {\n      this._document.fonts.delete(nativeFontFace);\n    }\n    this.nativeFontFaces.clear();\n    this.#systemFonts.clear();\n\n    if (this.styleElement) {\n      // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n\n  async loadSystemFont({\n    systemFontInfo: info,\n    disableFontFace,\n    _inspectFont,\n  }) {\n    if (!info || this.#systemFonts.has(info.loadedName)) {\n      return;\n    }\n    assert(\n      !disableFontFace,\n      \"loadSystemFont shouldn't be called when `disableFontFace` is set.\"\n    );\n\n    if (this.isFontLoadingAPISupported) {\n      const { loadedName, src, style } = info;\n      const fontFace = new FontFace(loadedName, src, style);\n      this.addNativeFontFace(fontFace);\n      try {\n        await fontFace.load();\n        this.#systemFonts.add(loadedName);\n        _inspectFont?.(info);\n      } catch {\n        warn(\n          `Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`\n        );\n\n        this.removeNativeFontFace(fontFace);\n      }\n      return;\n    }\n\n    unreachable(\n      \"Not implemented: loadSystemFont without the Font Loading API.\"\n    );\n  }\n\n  async bind(font) {\n    // Add the font to the DOM only once; skip if the font is already loaded.\n    if (font.attached || (font.missingFile && !font.systemFontInfo)) {\n      return;\n    }\n    font.attached = true;\n\n    if (font.systemFontInfo) {\n      await this.loadSystemFont(font);\n      return;\n    }\n\n    if (this.isFontLoadingAPISupported) {\n      const nativeFontFace = font.createNativeFontFace();\n      if (nativeFontFace) {\n        this.addNativeFontFace(nativeFontFace);\n        try {\n          await nativeFontFace.loaded;\n        } catch (ex) {\n          warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n\n          // When font loading failed, fall back to the built-in font renderer.\n          font.disableFontFace = true;\n          throw ex;\n        }\n      }\n      return; // The font was, asynchronously, loaded.\n    }\n\n    // !this.isFontLoadingAPISupported\n    const rule = font.createFontFaceRule();\n    if (rule) {\n      this.insertRule(rule);\n\n      if (this.isSyncFontLoadingSupported) {\n        return; // The font was, synchronously, loaded.\n      }\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n        throw new Error(\"Not implemented: async font loading\");\n      }\n      await new Promise(resolve => {\n        const request = this._queueLoadingCallback(resolve);\n        this._prepareFontLoadEvent(font, request);\n      });\n      // The font was, asynchronously, loaded.\n    }\n  }\n\n  get isFontLoadingAPISupported() {\n    const hasFonts = !!this._document?.fonts;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      return shadow(\n        this,\n        \"isFontLoadingAPISupported\",\n        hasFonts && !this.styleElement\n      );\n    }\n    return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n  }\n\n  get isSyncFontLoadingSupported() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      return shadow(this, \"isSyncFontLoadingSupported\", true);\n    }\n\n    // Node.js - we can pretend that sync font loading is supported.\n    // Firefox, from version 14, supports synchronous font loading.\n    return shadow(\n      this,\n      \"isSyncFontLoadingSupported\",\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\")) &&\n        (isNodeJS || FeatureTest.platform.isFirefox)\n    );\n  }\n\n  _queueLoadingCallback(callback) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: _queueLoadingCallback\");\n    }\n\n    function completeRequest() {\n      assert(!request.done, \"completeRequest() cannot be called twice.\");\n      request.done = true;\n\n      // Sending all completed requests in order of how they were queued.\n      while (loadingRequests.length > 0 && loadingRequests[0].done) {\n        const otherRequest = loadingRequests.shift();\n        setTimeout(otherRequest.callback, 0);\n      }\n    }\n\n    const { loadingRequests } = this;\n    const request = {\n      done: false,\n      complete: completeRequest,\n      callback,\n    };\n    loadingRequests.push(request);\n    return request;\n  }\n\n  get _loadTestFont() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: _loadTestFont\");\n    }\n\n    // This is a CFF font with 1 glyph for '.' that fills its entire width\n    // and height.\n    const testFont = atob(\n      \"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" +\n        \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" +\n        \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" +\n        \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" +\n        \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" +\n        \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" +\n        \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" +\n        \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" +\n        \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" +\n        \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" +\n        \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" +\n        \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" +\n        \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n        \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n        \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n        \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n        \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n        \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" +\n        \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" +\n        \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" +\n        \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" +\n        \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\"\n    );\n    return shadow(this, \"_loadTestFont\", testFont);\n  }\n\n  _prepareFontLoadEvent(font, request) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: _prepareFontLoadEvent\");\n    }\n\n    /** Hack begin */\n    // There's currently no event when a font has finished downloading so the\n    // following code is a dirty hack to 'guess' when a font is ready.\n    // It's assumed fonts are loaded in order, so add a known test font after\n    // the desired fonts and then test for the loading of that test font.\n\n    function int32(data, offset) {\n      return (\n        (data.charCodeAt(offset) << 24) |\n        (data.charCodeAt(offset + 1) << 16) |\n        (data.charCodeAt(offset + 2) << 8) |\n        (data.charCodeAt(offset + 3) & 0xff)\n      );\n    }\n    function spliceString(s, offset, remove, insert) {\n      const chunk1 = s.substring(0, offset);\n      const chunk2 = s.substring(offset + remove);\n      return chunk1 + insert + chunk2;\n    }\n    let i, ii;\n\n    // The temporary canvas is used to determine if fonts are loaded.\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext(\"2d\");\n\n    let called = 0;\n    function isFontReady(name, callback) {\n      // With setTimeout clamping this gives the font ~100ms to load.\n      if (++called > 30) {\n        warn(\"Load test font never loaded.\");\n        callback();\n        return;\n      }\n      ctx.font = \"30px \" + name;\n      ctx.fillText(\".\", 0, 20);\n      const imageData = ctx.getImageData(0, 0, 1, 1);\n      if (imageData.data[3] > 0) {\n        callback();\n        return;\n      }\n      setTimeout(isFontReady.bind(null, name, callback));\n    }\n\n    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n    // Chromium seems to cache fonts based on a hash of the actual font data,\n    // so the font must be modified for each load test else it will appear to\n    // be loaded already.\n    // TODO: This could maybe be made faster by avoiding the btoa of the full\n    // font by splitting it in chunks before hand and padding the font id.\n    let data = this._loadTestFont;\n    const COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n    data = spliceString(\n      data,\n      COMMENT_OFFSET,\n      loadTestFontId.length,\n      loadTestFontId\n    );\n    // CFF checksum is important for IE, adjusting it\n    const CFF_CHECKSUM_OFFSET = 16;\n    const XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n    let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n      checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n    }\n    if (i < loadTestFontId.length) {\n      // align to 4 bytes boundary\n      checksum = (checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i)) | 0;\n    }\n    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\n    const url = `url(data:font/opentype;base64,${btoa(data)});`;\n    const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n    this.insertRule(rule);\n\n    const div = this._document.createElement(\"div\");\n    div.style.visibility = \"hidden\";\n    div.style.width = div.style.height = \"10px\";\n    div.style.position = \"absolute\";\n    div.style.top = div.style.left = \"0px\";\n\n    for (const name of [font.loadedName, loadTestFontId]) {\n      const span = this._document.createElement(\"span\");\n      span.textContent = \"Hi\";\n      span.style.fontFamily = name;\n      div.append(span);\n    }\n    this._document.body.append(div);\n\n    isFontReady(loadTestFontId, () => {\n      div.remove();\n      request.complete();\n    });\n    /** Hack end */\n  }\n}\n\nclass FontFaceObject {\n  #fontData;\n\n  constructor(translatedData, inspectFont = null, extra, charProcOperatorList) {\n    this.compiledGlyphs = Object.create(null);\n    this.#fontData = translatedData;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      if (typeof this.disableFontFace !== \"boolean\") {\n        unreachable(\"disableFontFace must be available.\");\n      }\n      if (typeof this.fontExtraProperties !== \"boolean\") {\n        unreachable(\"fontExtraProperties must be available.\");\n      }\n    }\n    this._inspectFont = inspectFont;\n    if (extra) {\n      Object.assign(this, extra);\n    }\n    if (charProcOperatorList) {\n      this.charProcOperatorList = charProcOperatorList;\n    }\n  }\n\n  createNativeFontFace() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    let nativeFontFace;\n    if (!this.cssFontInfo) {\n      nativeFontFace = new FontFace(this.loadedName, this.data, {});\n    } else {\n      const css = {\n        weight: this.cssFontInfo.fontWeight,\n      };\n      if (this.cssFontInfo.italicAngle) {\n        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n      }\n      nativeFontFace = new FontFace(\n        this.cssFontInfo.fontFamily,\n        this.data,\n        css\n      );\n    }\n\n    this._inspectFont?.(this);\n    return nativeFontFace;\n  }\n\n  createFontFaceRule() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    // Add the @font-face rule to the document.\n    const url = `url(data:${this.mimetype};base64,${toBase64Util(this.data)});`;\n    let rule;\n    if (!this.cssFontInfo) {\n      rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n    } else {\n      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n      if (this.cssFontInfo.italicAngle) {\n        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n      }\n      rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n    }\n\n    this._inspectFont?.(this, url);\n    return rule;\n  }\n\n  getPathGenerator(objs, character) {\n    if (this.compiledGlyphs[character] !== undefined) {\n      return this.compiledGlyphs[character];\n    }\n\n    const objId = this.loadedName + \"_path_\" + character;\n    let cmds;\n    try {\n      cmds = objs.get(objId);\n    } catch (ex) {\n      warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n    }\n    const path = new Path2D(cmds || \"\");\n\n    if (!this.fontExtraProperties) {\n      // Remove the raw path-string, since we don't need it anymore.\n      objs.delete(objId);\n    }\n    return (this.compiledGlyphs[character] = path);\n  }\n\n  get black() {\n    return this.#fontData.black;\n  }\n\n  get bold() {\n    return this.#fontData.bold;\n  }\n\n  get disableFontFace() {\n    return this.#fontData.disableFontFace ?? false;\n  }\n\n  get fontExtraProperties() {\n    return this.#fontData.fontExtraProperties ?? false;\n  }\n\n  get isInvalidPDFjsFont() {\n    return this.#fontData.isInvalidPDFjsFont;\n  }\n\n  get isType3Font() {\n    return this.#fontData.isType3Font;\n  }\n\n  get italic() {\n    return this.#fontData.italic;\n  }\n\n  get missingFile() {\n    return this.#fontData.missingFile;\n  }\n\n  get remeasure() {\n    return this.#fontData.remeasure;\n  }\n\n  get vertical() {\n    return this.#fontData.vertical;\n  }\n\n  get ascent() {\n    return this.#fontData.ascent;\n  }\n\n  get defaultWidth() {\n    return this.#fontData.defaultWidth;\n  }\n\n  get descent() {\n    return this.#fontData.descent;\n  }\n\n  get bbox() {\n    return this.#fontData.bbox;\n  }\n\n  get fontMatrix() {\n    return this.#fontData.fontMatrix;\n  }\n\n  get fallbackName() {\n    return this.#fontData.fallbackName;\n  }\n\n  get loadedName() {\n    return this.#fontData.loadedName;\n  }\n\n  get mimetype() {\n    return this.#fontData.mimetype;\n  }\n\n  get name() {\n    return this.#fontData.name;\n  }\n\n  get data() {\n    return this.#fontData.data;\n  }\n\n  clearData() {\n    this.#fontData.clearData();\n  }\n\n  get cssFontInfo() {\n    return this.#fontData.cssFontInfo;\n  }\n\n  get systemFontInfo() {\n    return this.#fontData.systemFontInfo;\n  }\n\n  get defaultVMetrics() {\n    return this.#fontData.defaultVMetrics;\n  }\n}\n\nexport { FontFaceObject, FontLoader };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  _isValidExplicitDest,\n  isNodeJS,\n  stringToBytes,\n  warn,\n} from \"../shared/util.js\";\n\nfunction getUrlProp(val) {\n  if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n    return null; // The 'url' is unused with `PDFDataRangeTransport`.\n  }\n  if (val instanceof URL) {\n    return val.href;\n  }\n  if (typeof val === \"string\") {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"GENERIC\") &&\n      isNodeJS\n    ) {\n      return val; // Use the url as-is in Node.js environments.\n    }\n\n    // The full path is required in the 'url' field.\n    const url = URL.parse(val, window.location);\n    if (url) {\n      return url.href;\n    }\n  }\n  throw new Error(\n    \"Invalid PDF url data: \" +\n      \"either string or URL-object is expected in the url property.\"\n  );\n}\n\nfunction getDataProp(val) {\n  // Converting string or array-like data to Uint8Array.\n  if (\n    typeof PDFJSDev !== \"undefined\" &&\n    PDFJSDev.test(\"GENERIC\") &&\n    isNodeJS &&\n    typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n    val instanceof Buffer // eslint-disable-line no-undef\n  ) {\n    throw new Error(\n      \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n    );\n  }\n  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n    // Use the data as-is when it's already a Uint8Array that completely\n    // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n    // issues when transferring it to the worker-thread.\n    return val;\n  }\n  if (typeof val === \"string\") {\n    return stringToBytes(val);\n  }\n  if (\n    val instanceof ArrayBuffer ||\n    ArrayBuffer.isView(val) ||\n    (typeof val === \"object\" && !isNaN(val?.length))\n  ) {\n    return new Uint8Array(val);\n  }\n  throw new Error(\n    \"Invalid PDF binary data: either TypedArray, \" +\n      \"string, or array-like object is expected in the data property.\"\n  );\n}\n\nfunction getFactoryUrlProp(val) {\n  if (typeof val !== \"string\") {\n    return null;\n  }\n  if (val.endsWith(\"/\")) {\n    return val;\n  }\n  throw new Error(`Invalid factory url: \"${val}\" must include trailing slash.`);\n}\n\nconst isRefProxy = v =>\n  typeof v === \"object\" &&\n  Number.isInteger(v?.num) &&\n  v.num >= 0 &&\n  Number.isInteger(v?.gen) &&\n  v.gen >= 0;\n\nconst isNameProxy = v => typeof v === \"object\" && typeof v?.name === \"string\";\n\nconst isValidExplicitDest = _isValidExplicitDest.bind(\n  null,\n  /* validRef = */ isRefProxy,\n  /* validName = */ isNameProxy\n);\n\nclass LoopbackPort {\n  #listeners = new Map();\n\n  #deferred = Promise.resolve();\n\n  postMessage(obj, transfer) {\n    const event = {\n      data: structuredClone(obj, transfer ? { transfer } : null),\n    };\n\n    this.#deferred.then(() => {\n      for (const [listener] of this.#listeners) {\n        listener.call(this, event);\n      }\n    });\n  }\n\n  addEventListener(name, listener, options = null) {\n    let rmAbort = null;\n    if (options?.signal instanceof AbortSignal) {\n      const { signal } = options;\n      if (signal.aborted) {\n        warn(\"LoopbackPort - cannot use an `aborted` signal.\");\n        return;\n      }\n      const onAbort = () => this.removeEventListener(name, listener);\n      rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n      signal.addEventListener(\"abort\", onAbort);\n    }\n    this.#listeners.set(listener, rmAbort);\n  }\n\n  removeEventListener(name, listener) {\n    const rmAbort = this.#listeners.get(listener);\n    rmAbort?.();\n\n    this.#listeners.delete(listener);\n  }\n\n  terminate() {\n    for (const [, rmAbort] of this.#listeners) {\n      rmAbort?.();\n    }\n    this.#listeners.clear();\n  }\n}\n\nexport {\n  getDataProp,\n  getFactoryUrlProp,\n  getUrlProp,\n  isNameProxy,\n  isRefProxy,\n  isValidExplicitDest,\n  LoopbackPort,\n};\n", "/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AbortException,\n  assert,\n  InvalidPDFException,\n  PasswordException,\n  ResponseException,\n  UnknownErrorException,\n  unreachable,\n} from \"./util.js\";\n\nconst CallbackKind = {\n  DATA: 1,\n  ERROR: 2,\n};\n\nconst StreamKind = {\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8,\n};\n\nfunction onFn() {}\n\nfunction wrapReason(ex) {\n  if (\n    ex instanceof AbortException ||\n    ex instanceof InvalidPDFException ||\n    ex instanceof PasswordException ||\n    ex instanceof ResponseException ||\n    ex instanceof UnknownErrorException\n  ) {\n    // Avoid re-creating the exception when its type is already correct.\n    return ex;\n  }\n\n  if (!(ex instanceof Error || (typeof ex === \"object\" && ex !== null))) {\n    unreachable(\n      'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n    );\n  }\n  switch (ex.name) {\n    case \"AbortException\":\n      return new AbortException(ex.message);\n    case \"InvalidPDFException\":\n      return new InvalidPDFException(ex.message);\n    case \"PasswordException\":\n      return new PasswordException(ex.message, ex.code);\n    case \"ResponseException\":\n      return new ResponseException(ex.message, ex.status, ex.missing);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(ex.message, ex.details);\n  }\n  return new UnknownErrorException(ex.message, ex.toString());\n}\n\nclass MessageHandler {\n  #messageAC = new AbortController();\n\n  constructor(sourceName, targetName, comObj) {\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n\n    comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n      signal: this.#messageAC.signal,\n    });\n  }\n\n  #onMessage({ data }) {\n    if (data.targetName !== this.sourceName) {\n      return;\n    }\n    if (data.stream) {\n      this.#processStreamMessage(data);\n      return;\n    }\n    if (data.callback) {\n      const callbackId = data.callbackId;\n      const capability = this.callbackCapabilities[callbackId];\n      if (!capability) {\n        throw new Error(`Cannot resolve callback ${callbackId}`);\n      }\n      delete this.callbackCapabilities[callbackId];\n\n      if (data.callback === CallbackKind.DATA) {\n        capability.resolve(data.data);\n      } else if (data.callback === CallbackKind.ERROR) {\n        capability.reject(wrapReason(data.reason));\n      } else {\n        throw new Error(\"Unexpected callback case\");\n      }\n      return;\n    }\n    const action = this.actionHandler[data.action];\n    if (!action) {\n      throw new Error(`Unknown action from worker: ${data.action}`);\n    }\n    if (data.callbackId) {\n      const sourceName = this.sourceName,\n        targetName = data.sourceName,\n        comObj = this.comObj;\n\n      Promise.try(action, data.data).then(\n        function (result) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            callback: CallbackKind.DATA,\n            callbackId: data.callbackId,\n            data: result,\n          });\n        },\n        function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            callback: CallbackKind.ERROR,\n            callbackId: data.callbackId,\n            reason: wrapReason(reason),\n          });\n        }\n      );\n      return;\n    }\n    if (data.streamId) {\n      this.#createStreamSink(data);\n      return;\n    }\n    action(data.data);\n  }\n\n  on(actionName, handler) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        typeof handler === \"function\",\n        'MessageHandler.on: Expected \"handler\" to be a function.'\n      );\n    }\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   */\n  send(actionName, data, transfers) {\n    this.comObj.postMessage(\n      {\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        data,\n      },\n      transfers\n    );\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expects that the other side will callback with the response.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {Promise} Promise to be resolved with response data.\n   */\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = Promise.withResolvers();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this.comObj.postMessage(\n        {\n          sourceName: this.sourceName,\n          targetName: this.targetName,\n          action: actionName,\n          callbackId,\n          data,\n        },\n        transfers\n      );\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expect that the other side will callback to signal 'start_complete'.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n   *                 internal queue.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {ReadableStream} ReadableStream to read data in chunks.\n   */\n  sendWithStream(actionName, data, queueingStrategy, transfers) {\n    const streamId = this.streamId++,\n      sourceName = this.sourceName,\n      targetName = this.targetName,\n      comObj = this.comObj;\n\n    return new ReadableStream(\n      {\n        start: controller => {\n          const startCapability = Promise.withResolvers();\n          this.streamControllers[streamId] = {\n            controller,\n            startCall: startCapability,\n            pullCall: null,\n            cancelCall: null,\n            isClosed: false,\n          };\n          comObj.postMessage(\n            {\n              sourceName,\n              targetName,\n              action: actionName,\n              streamId,\n              data,\n              desiredSize: controller.desiredSize,\n            },\n            transfers\n          );\n          // Return Promise for Async process, to signal success/failure.\n          return startCapability.promise;\n        },\n\n        pull: controller => {\n          const pullCapability = Promise.withResolvers();\n          this.streamControllers[streamId].pullCall = pullCapability;\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL,\n            streamId,\n            desiredSize: controller.desiredSize,\n          });\n          // Returning Promise will not call \"pull\"\n          // again until current pull is resolved.\n          return pullCapability.promise;\n        },\n\n        cancel: reason => {\n          assert(reason instanceof Error, \"cancel must have a valid reason\");\n          const cancelCapability = Promise.withResolvers();\n          this.streamControllers[streamId].cancelCall = cancelCapability;\n          this.streamControllers[streamId].isClosed = true;\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL,\n            streamId,\n            reason: wrapReason(reason),\n          });\n          // Return Promise to signal success or failure.\n          return cancelCapability.promise;\n        },\n      },\n      queueingStrategy\n    );\n  }\n\n  #createStreamSink(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const self = this,\n      action = this.actionHandler[data.action];\n\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        // Enqueue decreases the desiredSize property of sink,\n        // so when it changes from positive to negative,\n        // set ready as unresolved promise.\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage(\n          {\n            sourceName,\n            targetName,\n            stream: StreamKind.ENQUEUE,\n            streamId,\n            chunk,\n          },\n          transfers\n        );\n      },\n\n      close() {\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CLOSE,\n          streamId,\n        });\n        delete self.streamSinks[streamId];\n      },\n\n      error(reason) {\n        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ERROR,\n          streamId,\n          reason: wrapReason(reason),\n        });\n      },\n\n      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null,\n    };\n\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n\n    Promise.try(action, data.data, streamSink).then(\n      function () {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId,\n          success: true,\n        });\n      },\n      function (reason) {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId,\n          reason: wrapReason(reason),\n        });\n      }\n    );\n  }\n\n  #processStreamMessage(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const streamController = this.streamControllers[streamId],\n      streamSink = this.streamSinks[streamId];\n\n    switch (data.stream) {\n      case StreamKind.START_COMPLETE:\n        if (data.success) {\n          streamController.startCall.resolve();\n        } else {\n          streamController.startCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          streamController.pullCall.resolve();\n        } else {\n          streamController.pullCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL:\n        // Ignore any pull after close is called.\n        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true,\n          });\n          break;\n        }\n        // Pull increases the desiredSize property of sink, so when it changes\n        // from negative to positive, set ready property as resolved promise.\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        // Reset desiredSize property of sink on every pull.\n        streamSink.desiredSize = data.desiredSize;\n\n        Promise.try(streamSink.onPull || onFn).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId,\n              success: true,\n            });\n          },\n          function (reason) {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId,\n              reason: wrapReason(reason),\n            });\n          }\n        );\n        break;\n      case StreamKind.ENQUEUE:\n        assert(streamController, \"enqueue should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(streamController, \"close should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.isClosed = true;\n        streamController.controller.close();\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(streamController, \"error should have stream controller\");\n        streamController.controller.error(wrapReason(data.reason));\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          streamController.cancelCall.resolve();\n        } else {\n          streamController.cancelCall.reject(wrapReason(data.reason));\n        }\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!streamSink) {\n          break;\n        }\n        const dataReason = wrapReason(data.reason);\n\n        Promise.try(streamSink.onCancel || onFn, dataReason).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId,\n              success: true,\n            });\n          },\n          function (reason) {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId,\n              reason: wrapReason(reason),\n            });\n          }\n        );\n        streamSink.sinkCapability.reject(dataReason);\n        streamSink.isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n\n  async #deleteStreamController(streamController, streamId) {\n    // Delete the `streamController` only when the start, pull, and cancel\n    // capabilities have settled, to prevent `TypeError`s.\n    await Promise.allSettled([\n      streamController.startCall?.promise,\n      streamController.pullCall?.promise,\n      streamController.cancelCall?.promise,\n    ]);\n    delete this.streamControllers[streamId];\n  }\n\n  destroy() {\n    this.#messageAC?.abort();\n    this.#messageAC = null;\n  }\n}\n\nexport { MessageHandler, wrapReason };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseCanvasFactory {\n  #enableHWA = false;\n\n  constructor({ enableHWA = false }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseCanvasFactory\n    ) {\n      unreachable(\"Cannot initialize BaseCanvasFactory.\");\n    }\n    this.#enableHWA = enableHWA;\n  }\n\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._createCanvas(width, height);\n    return {\n      canvas,\n      context: canvas.getContext(\"2d\", {\n        willReadFrequently: !this.#enableHWA,\n      }),\n    };\n  }\n\n  reset(canvasAndContext, width, height) {\n    if (!canvasAndContext.canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    canvasAndContext.canvas.width = width;\n    canvasAndContext.canvas.height = height;\n  }\n\n  destroy(canvasAndContext) {\n    if (!canvasAndContext.canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    // Zeroing the width and height cause Firefox to release graphics\n    // resources immediately, which can greatly reduce memory consumption.\n    canvasAndContext.canvas.width = 0;\n    canvasAndContext.canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({ ownerDocument = globalThis.document, enableHWA = false }) {\n    super({ enableHWA });\n    this._document = ownerDocument;\n  }\n\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n}\n\nexport { BaseCanvasFactory, DOMCanvasFactory };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes, unreachable } from \"../shared/util.js\";\nimport { fetchData } from \"./display_utils.js\";\n\nclass BaseCMapReaderFactory {\n  constructor({ baseUrl = null, isCompressed = true }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseCMapReaderFactory\n    ) {\n      unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n    }\n    this.baseUrl = baseUrl;\n    this.isCompressed = isCompressed;\n  }\n\n  async fetch({ name }) {\n    if (!this.baseUrl) {\n      throw new Error(\n        \"Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.\"\n      );\n    }\n    if (!name) {\n      throw new Error(\"CMap name must be specified.\");\n    }\n    const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n\n    return this._fetch(url)\n      .then(cMapData => ({ cMapData, isCompressed: this.isCompressed }))\n      .catch(reason => {\n        throw new Error(\n          `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n        );\n      });\n  }\n\n  /**\n   * @ignore\n   * @returns {Promise<Uint8Array>}\n   */\n  async _fetch(url) {\n    unreachable(\"Abstract method `_fetch` called.\");\n  }\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    const data = await fetchData(\n      url,\n      /* type = */ this.isCompressed ? \"arraybuffer\" : \"text\"\n    );\n    return data instanceof ArrayBuffer\n      ? new Uint8Array(data)\n      : stringToBytes(data);\n  }\n}\n\nexport { BaseCMapReaderFactory, DOMCMapReaderFactory };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getRGB, isDataScheme, SVG_NS } from \"./display_utils.js\";\nimport { unreachable, updateUrlHash, Util, warn } from \"../shared/util.js\";\n\nclass BaseFilterFactory {\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseFilterFactory\n    ) {\n      unreachable(\"Cannot initialize BaseFilterFactory.\");\n    }\n  }\n\n  addFilter(maps) {\n    return \"none\";\n  }\n\n  addHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n\n  addAlphaFilter(map) {\n    return \"none\";\n  }\n\n  addLuminosityFilter(map) {\n    return \"none\";\n  }\n\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    return \"none\";\n  }\n\n  destroy(keepHCM = false) {}\n}\n\n/**\n * FilterFactory aims to create some SVG filters we can use when drawing an\n * image (or whatever) on a canvas.\n * Filters aren't applied with ctx.putImageData because it just overwrites the\n * underlying pixels.\n * With these filters, it's possible for example to apply some transfer maps on\n * an image without the need to apply them on the pixel arrays: the renderer\n * does the magic for us.\n */\nclass DOMFilterFactory extends BaseFilterFactory {\n  #baseUrl;\n\n  #_cache;\n\n  #_defs;\n\n  #docId;\n\n  #document;\n\n  #_hcmCache;\n\n  #id = 0;\n\n  constructor({ docId, ownerDocument = globalThis.document }) {\n    super();\n    this.#docId = docId;\n    this.#document = ownerDocument;\n  }\n\n  get #cache() {\n    return (this.#_cache ||= new Map());\n  }\n\n  get #hcmCache() {\n    return (this.#_hcmCache ||= new Map());\n  }\n\n  get #defs() {\n    if (!this.#_defs) {\n      const div = this.#document.createElement(\"div\");\n      const { style } = div;\n      style.visibility = \"hidden\";\n      style.contain = \"strict\";\n      style.width = style.height = 0;\n      style.position = \"absolute\";\n      style.top = style.left = 0;\n      style.zIndex = -1;\n\n      const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n      svg.setAttribute(\"width\", 0);\n      svg.setAttribute(\"height\", 0);\n      this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n      div.append(svg);\n      svg.append(this.#_defs);\n      this.#document.body.append(div);\n    }\n    return this.#_defs;\n  }\n\n  #createTables(maps) {\n    if (maps.length === 1) {\n      const mapR = maps[0];\n      const buffer = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        buffer[i] = mapR[i] / 255;\n      }\n\n      const table = buffer.join(\",\");\n      return [table, table, table];\n    }\n\n    const [mapR, mapG, mapB] = maps;\n    const bufferR = new Array(256);\n    const bufferG = new Array(256);\n    const bufferB = new Array(256);\n    for (let i = 0; i < 256; i++) {\n      bufferR[i] = mapR[i] / 255;\n      bufferG[i] = mapG[i] / 255;\n      bufferB[i] = mapB[i] / 255;\n    }\n    return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n  }\n\n  #createUrl(id) {\n    if (this.#baseUrl === undefined) {\n      // Unless a `<base>`-element is present a relative URL should work.\n      this.#baseUrl = \"\";\n\n      const url = this.#document.URL;\n      if (url !== this.#document.baseURI) {\n        if (isDataScheme(url)) {\n          warn('#createUrl: ignore \"data:\"-URL for performance reasons.');\n        } else {\n          this.#baseUrl = updateUrlHash(url, \"\");\n        }\n      }\n    }\n    return `url(${this.#baseUrl}#${id})`;\n  }\n\n  addFilter(maps) {\n    if (!maps) {\n      return \"none\";\n    }\n\n    // When a page is zoomed the page is re-drawn but the maps are likely\n    // the same.\n    let value = this.#cache.get(maps);\n    if (value) {\n      return value;\n    }\n\n    const [tableR, tableG, tableB] = this.#createTables(maps);\n    const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(maps, value);\n      return value;\n    }\n\n    // We create a SVG filter: feComponentTransferElement\n    //  https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n\n    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(maps, url);\n    this.#cache.set(key, url);\n\n    const filter = this.#createFilter(id);\n    this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n\n    return url;\n  }\n\n  addHCMFilter(fgColor, bgColor) {\n    const key = `${fgColor}-${bgColor}`;\n    const filterName = \"base\";\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null,\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n\n    const fgRGB = this.#getRGB(fgColor);\n    fgColor = Util.makeHexColor(...fgRGB);\n    const bgRGB = this.#getRGB(bgColor);\n    bgColor = Util.makeHexColor(...bgRGB);\n    this.#defs.style.color = \"\";\n\n    if (\n      (fgColor === \"#000000\" && bgColor === \"#ffffff\") ||\n      fgColor === bgColor\n    ) {\n      return info.url;\n    }\n\n    // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance\n    //\n    // Relative luminance:\n    // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n    //\n    // We compute the rounded luminance of the default background color.\n    // Then for every color in the pdf, if its rounded luminance is the\n    // same as the background one then it's replaced by the new\n    // background color else by the foreground one.\n    const map = new Array(256);\n    for (let i = 0; i <= 255; i++) {\n      const x = i / 255;\n      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n    }\n    const table = map.join(\",\");\n\n    const id = `g_${this.#docId}_hcm_filter`;\n    const filter = (info.filter = this.#createFilter(id));\n    this.#addTransferMapConversion(table, table, table, filter);\n    this.#addGrayConversion(filter);\n\n    const getSteps = (c, n) => {\n      const start = fgRGB[c] / 255;\n      const end = bgRGB[c] / 255;\n      const arr = new Array(n + 1);\n      for (let i = 0; i <= n; i++) {\n        arr[i] = start + (i / n) * (end - start);\n      }\n      return arr.join(\",\");\n    };\n    this.#addTransferMapConversion(\n      getSteps(0, 5),\n      getSteps(1, 5),\n      getSteps(2, 5),\n      filter\n    );\n\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n\n  addAlphaFilter(map) {\n    // When a page is zoomed the page is re-drawn but the maps are likely\n    // the same.\n    let value = this.#cache.get(map);\n    if (value) {\n      return value;\n    }\n\n    const [tableA] = this.#createTables([map]);\n    const key = `alpha_${tableA}`;\n\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n\n    const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n\n    const filter = this.#createFilter(id);\n    this.#addTransferMapAlphaConversion(tableA, filter);\n\n    return url;\n  }\n\n  addLuminosityFilter(map) {\n    // When a page is zoomed the page is re-drawn but the maps are likely\n    // the same.\n    let value = this.#cache.get(map || \"luminosity\");\n    if (value) {\n      return value;\n    }\n\n    let tableA, key;\n    if (map) {\n      [tableA] = this.#createTables([map]);\n      key = `luminosity_${tableA}`;\n    } else {\n      key = \"luminosity\";\n    }\n\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n\n    const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n\n    const filter = this.#createFilter(id);\n    this.#addLuminosityConversion(filter);\n    if (map) {\n      this.#addTransferMapAlphaConversion(tableA, filter);\n    }\n\n    return url;\n  }\n\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null,\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n\n    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n    let fgGray = Math.round(\n      0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]\n    );\n    let bgGray = Math.round(\n      0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]\n    );\n    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(\n      this.#getRGB.bind(this)\n    );\n    if (bgGray < fgGray) {\n      [fgGray, bgGray, newFgRGB, newBgRGB] = [\n        bgGray,\n        fgGray,\n        newBgRGB,\n        newFgRGB,\n      ];\n    }\n    this.#defs.style.color = \"\";\n\n    // Now we can create the filters to highlight some canvas parts.\n    // The colors in the pdf will almost be Canvas and CanvasText, hence we\n    // want to filter them to finally get Highlight and HighlightText.\n    // Since we're in HCM the background color and the foreground color should\n    // be really different when converted to grayscale (if they're not then it\n    // means that we've a poor contrast). Once the canvas colors are converted\n    // to grayscale we can easily map them on their new colors.\n    // The grayscale step is important because if we've something like:\n    //   fgColor = #FF....\n    //   bgColor = #FF....\n    //   then we are enable to map the red component on the new red components\n    //   which can be different.\n\n    const getSteps = (fg, bg, n) => {\n      const arr = new Array(256);\n      const step = (bgGray - fgGray) / n;\n      const newStart = fg / 255;\n      const newStep = (bg - fg) / (255 * n);\n      let prev = 0;\n      for (let i = 0; i <= n; i++) {\n        const k = Math.round(fgGray + i * step);\n        const value = newStart + i * newStep;\n        for (let j = prev; j <= k; j++) {\n          arr[j] = value;\n        }\n        prev = k + 1;\n      }\n      for (let i = prev; i < 256; i++) {\n        arr[i] = arr[prev - 1];\n      }\n      return arr.join(\",\");\n    };\n\n    const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n    const filter = (info.filter = this.#createFilter(id));\n\n    this.#addGrayConversion(filter);\n    this.#addTransferMapConversion(\n      getSteps(newFgRGB[0], newBgRGB[0], 5),\n      getSteps(newFgRGB[1], newBgRGB[1], 5),\n      getSteps(newFgRGB[2], newBgRGB[2], 5),\n      filter\n    );\n\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n\n  destroy(keepHCM = false) {\n    if (keepHCM && this.#_hcmCache?.size) {\n      return;\n    }\n    this.#_defs?.parentNode.parentNode.remove();\n    this.#_defs = null;\n\n    this.#_cache?.clear();\n    this.#_cache = null;\n\n    this.#_hcmCache?.clear();\n    this.#_hcmCache = null;\n\n    this.#id = 0;\n  }\n\n  #addLuminosityConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(\n      SVG_NS,\n      \"feColorMatrix\"\n    );\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\n      \"values\",\n      \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\"\n    );\n    filter.append(feColorMatrix);\n  }\n\n  #addGrayConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(\n      SVG_NS,\n      \"feColorMatrix\"\n    );\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\n      \"values\",\n      \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"\n    );\n    filter.append(feColorMatrix);\n  }\n\n  #createFilter(id) {\n    const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n    filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n    filter.setAttribute(\"id\", id);\n    this.#defs.append(filter);\n\n    return filter;\n  }\n\n  #appendFeFunc(feComponentTransfer, func, table) {\n    const feFunc = this.#document.createElementNS(SVG_NS, func);\n    feFunc.setAttribute(\"type\", \"discrete\");\n    feFunc.setAttribute(\"tableValues\", table);\n    feComponentTransfer.append(feFunc);\n  }\n\n  #addTransferMapConversion(rTable, gTable, bTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(\n      SVG_NS,\n      \"feComponentTransfer\"\n    );\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n  }\n\n  #addTransferMapAlphaConversion(aTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(\n      SVG_NS,\n      \"feComponentTransfer\"\n    );\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n  }\n\n  #getRGB(color) {\n    this.#defs.style.color = color;\n    return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n  }\n}\n\nexport { BaseFilterFactory, DOMFilterFactory };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseStandardFontDataFactory {\n  constructor({ baseUrl = null }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseStandardFontDataFactory\n    ) {\n      unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n    }\n    this.baseUrl = baseUrl;\n  }\n\n  async fetch({ filename }) {\n    if (!this.baseUrl) {\n      throw new Error(\n        \"Ensure that the `standardFontDataUrl` API parameter is provided.\"\n      );\n    }\n    if (!filename) {\n      throw new Error(\"Font filename must be specified.\");\n    }\n    const url = `${this.baseUrl}${filename}`;\n\n    return this._fetch(url).catch(reason => {\n      throw new Error(`Unable to load font data at: ${url}`);\n    });\n  }\n\n  /**\n   * @ignore\n   * @returns {Promise<Uint8Array>}\n   */\n  async _fetch(url) {\n    unreachable(\"Abstract method `_fetch` called.\");\n  }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    const data = await fetchData(url, /* type = */ \"arraybuffer\");\n    return new Uint8Array(data);\n  }\n}\n\nexport { BaseStandardFontDataFactory, DOMStandardFontDataFactory };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseWasmFactory {\n  constructor({ baseUrl = null }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseWasmFactory\n    ) {\n      unreachable(\"Cannot initialize BaseWasmFactory.\");\n    }\n    this.baseUrl = baseUrl;\n  }\n\n  async fetch({ filename }) {\n    if (!this.baseUrl) {\n      throw new Error(\"Ensure that the `wasmUrl` API parameter is provided.\");\n    }\n    if (!filename) {\n      throw new Error(\"Wasm filename must be specified.\");\n    }\n    const url = `${this.baseUrl}${filename}`;\n\n    return this._fetch(url).catch(reason => {\n      throw new Error(`Unable to load wasm data at: ${url}`);\n    });\n  }\n\n  /**\n   * @ignore\n   * @returns {Promise<Uint8Array>}\n   */\n  async _fetch(url) {\n    unreachable(\"Abstract method `_fetch` called.\");\n  }\n}\n\nclass DOMWasmFactory extends BaseWasmFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    const data = await fetchData(url, /* type = */ \"arraybuffer\");\n    return new Uint8Array(data);\n  }\n}\n\nexport { BaseWasmFactory, DOMWasmFactory };\n", "/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { isNodeJS, warn } from \"../shared/util.js\";\nimport { BaseCanvasFactory } from \"./canvas_factory.js\";\nimport { BaseCMapReaderFactory } from \"./cmap_reader_factory.js\";\nimport { BaseFilterFactory } from \"./filter_factory.js\";\nimport { BaseStandardFontDataFactory } from \"./standard_fontdata_factory.js\";\nimport { BaseWasmFactory } from \"./wasm_factory.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./node_utils.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nif (isNodeJS) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) {\n    warn(\"Please use the `legacy` build in Node.js environments.\");\n  } else {\n    let canvas;\n    try {\n      const require = process\n        .getBuiltinModule(\"module\")\n        .createRequire(import.meta.url);\n\n      try {\n        canvas = require(\"@napi-rs/canvas\");\n      } catch (ex) {\n        warn(`Cannot load \"@napi-rs/canvas\" package: \"${ex}\".`);\n      }\n    } catch (ex) {\n      warn(`Cannot access the \\`require\\` function: \"${ex}\".`);\n    }\n\n    if (!globalThis.DOMMatrix) {\n      if (canvas?.DOMMatrix) {\n        globalThis.DOMMatrix = canvas.DOMMatrix;\n      } else {\n        warn(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n      }\n    }\n    if (!globalThis.ImageData) {\n      if (canvas?.ImageData) {\n        globalThis.ImageData = canvas.ImageData;\n      } else {\n        warn(\"Cannot polyfill `ImageData`, rendering may be broken.\");\n      }\n    }\n    if (!globalThis.Path2D) {\n      if (canvas?.Path2D) {\n        globalThis.Path2D = canvas.Path2D;\n      } else {\n        warn(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n      }\n    }\n    if (!globalThis.navigator?.language) {\n      globalThis.navigator = {\n        language: \"en-US\",\n        platform: \"\",\n        userAgent: \"\",\n      };\n    }\n  }\n}\n\nasync function fetchData(url) {\n  const fs = process.getBuiltinModule(\"fs\");\n  const data = await fs.promises.readFile(url);\n  return new Uint8Array(data);\n}\n\nclass NodeFilterFactory extends BaseFilterFactory {}\n\nclass NodeCanvasFactory extends BaseCanvasFactory {\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    const require = process\n      .getBuiltinModule(\"module\")\n      .createRequire(import.meta.url);\n    const canvas = require(\"@napi-rs/canvas\");\n    return canvas.createCanvas(width, height);\n  }\n}\n\nclass NodeCMapReaderFactory extends BaseCMapReaderFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    return fetchData(url);\n  }\n}\n\nclass NodeStandardFontDataFactory extends BaseStandardFontDataFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    return fetchData(url);\n  }\n}\n\nclass NodeWasmFactory extends BaseWasmFactory {\n  /**\n   * @ignore\n   */\n  async _fetch(url) {\n    return fetchData(url);\n  }\n}\n\nexport {\n  fetchData,\n  NodeCanvasFactory,\n  NodeCMapReaderFactory,\n  NodeFilterFactory,\n  NodeStandardFontDataFactory,\n  NodeWasmFactory,\n};\n", "import { Util } from \"../shared/util.js\";\n\nconst FORCED_DEPENDENCY_LABEL = \"__forcedDependency\";\n\nconst { floor, ceil } = Math;\n\nfunction expandBBox(array, index, minX, minY, maxX, maxY) {\n  array[index * 4 + 0] = Math.min(array[index * 4 + 0], minX);\n  array[index * 4 + 1] = Math.min(array[index * 4 + 1], minY);\n  array[index * 4 + 2] = Math.max(array[index * 4 + 2], maxX);\n  array[index * 4 + 3] = Math.max(array[index * 4 + 3], maxY);\n}\n\n// This is computed rathter than hard-coded to keep into\n// account the platform's endianess.\nconst EMPTY_BBOX = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0];\n\nclass BBoxReader {\n  #bboxes;\n\n  #coords;\n\n  constructor(bboxes, coords) {\n    this.#bboxes = bboxes;\n    this.#coords = coords;\n  }\n\n  get length() {\n    return this.#bboxes.length;\n  }\n\n  isEmpty(i) {\n    return this.#bboxes[i] === EMPTY_BBOX;\n  }\n\n  minX(i) {\n    return this.#coords[i * 4 + 0] / 256;\n  }\n\n  minY(i) {\n    return this.#coords[i * 4 + 1] / 256;\n  }\n\n  maxX(i) {\n    return (this.#coords[i * 4 + 2] + 1) / 256;\n  }\n\n  maxY(i) {\n    return (this.#coords[i * 4 + 3] + 1) / 256;\n  }\n}\n\nconst ensureDebugMetadata = (map, key) => {\n  if (!map) {\n    return undefined;\n  }\n  let value = map.get(key);\n  if (!value) {\n    value = { dependencies: new Set(), isRenderingOperation: false };\n    map.set(key, value);\n  }\n  return value;\n};\n\n/**\n * @typedef {\"lineWidth\" | \"lineCap\" | \"lineJoin\" | \"miterLimit\" | \"dash\" |\n * \"strokeAlpha\" | \"fillColor\" | \"fillAlpha\" | \"globalCompositeOperation\" |\n * \"path\" | \"filter\" | \"font\" | \"fontObj\"} SimpleDependency\n */\n\n/**\n * @typedef {\"transform\" | \"moveText\" | \"sameLineText\"} IncrementalDependency\n */\n\n/**\n * @typedef {IncrementalDependency |\n * typeof FORCED_DEPENDENCY_LABEL} InternalIncrementalDependency\n */\nclass CanvasDependencyTracker {\n  /** @type {Record<SimpleDependency, number>} */\n  #simple = { __proto__: null };\n\n  /** @type {Record<InternalIncrementalDependency , number[]>} */\n  #incremental = {\n    __proto__: null,\n    transform: [],\n    moveText: [],\n    sameLineText: [],\n    [FORCED_DEPENDENCY_LABEL]: [],\n  };\n\n  #namedDependencies = new Map();\n\n  #savesStack = [];\n\n  #markedContentStack = [];\n\n  #baseTransformStack = [[1, 0, 0, 1, 0, 0]];\n\n  #clipBox = [-Infinity, -Infinity, Infinity, Infinity];\n\n  // Float32Array<minX, minY, maxX, maxY>\n  #pendingBBox = new Float64Array([Infinity, Infinity, -Infinity, -Infinity]);\n\n  #pendingBBoxIdx = -1;\n\n  #pendingDependencies = new Set();\n\n  #operations = new Map();\n\n  #fontBBoxTrustworthy = new Map();\n\n  #canvasWidth;\n\n  #canvasHeight;\n\n  // Uint8ClampedArray<minX, minY, maxX, maxY>\n  #bboxesCoords;\n\n  #bboxes;\n\n  #debugMetadata;\n\n  constructor(canvas, operationsCount, recordDebugMetadata = false) {\n    this.#canvasWidth = canvas.width;\n    this.#canvasHeight = canvas.height;\n    this.#initializeBBoxes(operationsCount);\n    if (recordDebugMetadata) {\n      this.#debugMetadata = new Map();\n    }\n  }\n\n  growOperationsCount(operationsCount) {\n    if (operationsCount >= this.#bboxes.length) {\n      this.#initializeBBoxes(operationsCount, this.#bboxes);\n    }\n  }\n\n  #initializeBBoxes(operationsCount, oldBBoxes) {\n    const buffer = new ArrayBuffer(operationsCount * 4);\n    this.#bboxesCoords = new Uint8ClampedArray(buffer);\n    this.#bboxes = new Uint32Array(buffer);\n    if (oldBBoxes && oldBBoxes.length > 0) {\n      this.#bboxes.set(oldBBoxes);\n      this.#bboxes.fill(EMPTY_BBOX, oldBBoxes.length);\n    } else {\n      this.#bboxes.fill(EMPTY_BBOX);\n    }\n  }\n\n  save(opIdx) {\n    this.#simple = { __proto__: this.#simple };\n    this.#incremental = {\n      __proto__: this.#incremental,\n      transform: { __proto__: this.#incremental.transform },\n      moveText: { __proto__: this.#incremental.moveText },\n      sameLineText: { __proto__: this.#incremental.sameLineText },\n      [FORCED_DEPENDENCY_LABEL]: {\n        __proto__: this.#incremental[FORCED_DEPENDENCY_LABEL],\n      },\n    };\n    this.#clipBox = { __proto__: this.#clipBox };\n    this.#savesStack.push(opIdx);\n\n    return this;\n  }\n\n  restore(opIdx) {\n    const previous = Object.getPrototypeOf(this.#simple);\n    if (previous === null) {\n      // Sometimes we call more .restore() than .save(), for\n      // example when using CanvasGraphics' #restoreInitialState()\n      return this;\n    }\n    this.#simple = previous;\n    this.#incremental = Object.getPrototypeOf(this.#incremental);\n    this.#clipBox = Object.getPrototypeOf(this.#clipBox);\n\n    const lastSave = this.#savesStack.pop();\n    if (lastSave !== undefined) {\n      ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n        lastSave\n      );\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n\n    return this;\n  }\n\n  /**\n   * @param {number} idx\n   */\n  recordOpenMarker(idx) {\n    this.#savesStack.push(idx);\n    return this;\n  }\n\n  getOpenMarker() {\n    if (this.#savesStack.length === 0) {\n      return null;\n    }\n    return this.#savesStack.at(-1);\n  }\n\n  recordCloseMarker(opIdx) {\n    const lastSave = this.#savesStack.pop();\n    if (lastSave !== undefined) {\n      ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n        lastSave\n      );\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n\n  // Marked content needs a separate stack from save/restore, because they\n  // form two independent trees.\n  beginMarkedContent(opIdx) {\n    this.#markedContentStack.push(opIdx);\n    return this;\n  }\n\n  endMarkedContent(opIdx) {\n    const lastSave = this.#markedContentStack.pop();\n    if (lastSave !== undefined) {\n      ensureDebugMetadata(this.#debugMetadata, opIdx)?.dependencies.add(\n        lastSave\n      );\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n\n  pushBaseTransform(ctx) {\n    this.#baseTransformStack.push(\n      Util.multiplyByDOMMatrix(\n        this.#baseTransformStack.at(-1),\n        ctx.getTransform()\n      )\n    );\n    return this;\n  }\n\n  popBaseTransform() {\n    if (this.#baseTransformStack.length > 1) {\n      this.#baseTransformStack.pop();\n    }\n    return this;\n  }\n\n  /**\n   * @param {SimpleDependency} name\n   * @param {number} idx\n   */\n  recordSimpleData(name, idx) {\n    this.#simple[name] = idx;\n    return this;\n  }\n\n  /**\n   * @param {IncrementalDependency} name\n   * @param {number} idx\n   */\n  recordIncrementalData(name, idx) {\n    this.#incremental[name].push(idx);\n    return this;\n  }\n\n  /**\n   * @param {IncrementalDependency} name\n   * @param {number} idx\n   */\n  resetIncrementalData(name, idx) {\n    this.#incremental[name].length = 0;\n    return this;\n  }\n\n  recordNamedData(name, idx) {\n    this.#namedDependencies.set(name, idx);\n    return this;\n  }\n\n  /**\n   * @param {SimpleDependency} name\n   * @param {string} depName\n   * @param {number} fallbackIdx\n   */\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#simple[name] = this.#namedDependencies.get(depName) ?? fallbackIdx;\n  }\n\n  // All next operations, until the next .restore(), will depend on this\n  recordFutureForcedDependency(name, idx) {\n    this.recordIncrementalData(FORCED_DEPENDENCY_LABEL, idx);\n    return this;\n  }\n\n  // All next operations, until the next .restore(), will depend on all\n  // the already recorded data with the given names.\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    for (const name of names) {\n      if (name in this.#simple) {\n        this.recordFutureForcedDependency(name, this.#simple[name]);\n      }\n    }\n    return this;\n  }\n\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    for (const dep of this.#pendingDependencies) {\n      this.recordFutureForcedDependency(FORCED_DEPENDENCY_LABEL, dep);\n    }\n    return this;\n  }\n\n  resetBBox(idx) {\n    if (this.#pendingBBoxIdx !== idx) {\n      this.#pendingBBoxIdx = idx;\n      this.#pendingBBox[0] = Infinity;\n      this.#pendingBBox[1] = Infinity;\n      this.#pendingBBox[2] = -Infinity;\n      this.#pendingBBox[3] = -Infinity;\n    }\n    return this;\n  }\n\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    const transform = Util.multiplyByDOMMatrix(\n      this.#baseTransformStack.at(-1),\n      ctx.getTransform()\n    );\n    const clipBox = [Infinity, Infinity, -Infinity, -Infinity];\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, clipBox);\n    const intersection = Util.intersect(this.#clipBox, clipBox);\n    if (intersection) {\n      this.#clipBox[0] = intersection[0];\n      this.#clipBox[1] = intersection[1];\n      this.#clipBox[2] = intersection[2];\n      this.#clipBox[3] = intersection[3];\n    } else {\n      this.#clipBox[0] = this.#clipBox[1] = Infinity;\n      this.#clipBox[2] = this.#clipBox[3] = -Infinity;\n    }\n    return this;\n  }\n\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    const clipBox = this.#clipBox;\n    if (clipBox[0] === Infinity) {\n      return this;\n    }\n\n    const transform = Util.multiplyByDOMMatrix(\n      this.#baseTransformStack.at(-1),\n      ctx.getTransform()\n    );\n    if (clipBox[0] === -Infinity) {\n      Util.axialAlignedBoundingBox(\n        [minX, minY, maxX, maxY],\n        transform,\n        this.#pendingBBox\n      );\n      return this;\n    }\n\n    const bbox = [Infinity, Infinity, -Infinity, -Infinity];\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, bbox);\n    this.#pendingBBox[0] = Math.min(\n      this.#pendingBBox[0],\n      Math.max(bbox[0], clipBox[0])\n    );\n    this.#pendingBBox[1] = Math.min(\n      this.#pendingBBox[1],\n      Math.max(bbox[1], clipBox[1])\n    );\n    this.#pendingBBox[2] = Math.max(\n      this.#pendingBBox[2],\n      Math.min(bbox[2], clipBox[2])\n    );\n    this.#pendingBBox[3] = Math.max(\n      this.#pendingBBox[3],\n      Math.min(bbox[3], clipBox[3])\n    );\n    return this;\n  }\n\n  recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n    const fontBBox = font.bbox;\n    let isBBoxTrustworthy;\n    let computedBBox;\n\n    if (fontBBox) {\n      isBBoxTrustworthy =\n        // Only use the bounding box defined by the font if it\n        // has a non-empty area.\n        fontBBox[2] !== fontBBox[0] &&\n        fontBBox[3] !== fontBBox[1] &&\n        this.#fontBBoxTrustworthy.get(font);\n\n      if (isBBoxTrustworthy !== false) {\n        computedBBox = [0, 0, 0, 0];\n        Util.axialAlignedBoundingBox(fontBBox, font.fontMatrix, computedBBox);\n        if (scale !== 1 || x !== 0 || y !== 0) {\n          Util.scaleMinMax([scale, 0, 0, -scale, x, y], computedBBox);\n        }\n\n        if (isBBoxTrustworthy) {\n          return this.recordBBox(\n            idx,\n            ctx,\n            computedBBox[0],\n            computedBBox[2],\n            computedBBox[1],\n            computedBBox[3]\n          );\n        }\n      }\n    }\n\n    if (!getMeasure) {\n      // We have no way of telling how big this character actually is, record\n      // a full page bounding box.\n      return this.recordFullPageBBox(idx);\n    }\n\n    const measure = getMeasure();\n\n    if (fontBBox && computedBBox && isBBoxTrustworthy === undefined) {\n      // If it's the first time we can compare the font bbox with the actual\n      // bbox measured when drawing it, check if the one recorded in the font\n      // is large enough to cover the actual bbox. If it is, we assume that the\n      // font is well-formed and we can use the declared bbox without having to\n      // measure it again for every character.\n      isBBoxTrustworthy =\n        computedBBox[0] <= x - measure.actualBoundingBoxLeft &&\n        computedBBox[2] >= x + measure.actualBoundingBoxRight &&\n        computedBBox[1] <= y - measure.actualBoundingBoxAscent &&\n        computedBBox[3] >= y + measure.actualBoundingBoxDescent;\n      this.#fontBBoxTrustworthy.set(font, isBBoxTrustworthy);\n      if (isBBoxTrustworthy) {\n        return this.recordBBox(\n          idx,\n          ctx,\n          computedBBox[0],\n          computedBBox[2],\n          computedBBox[1],\n          computedBBox[3]\n        );\n      }\n    }\n\n    // The font has no bbox or it is not trustworthy, so we need to\n    // return the bounding box based on .measureText().\n    return this.recordBBox(\n      idx,\n      ctx,\n      x - measure.actualBoundingBoxLeft,\n      x + measure.actualBoundingBoxRight,\n      y - measure.actualBoundingBoxAscent,\n      y + measure.actualBoundingBoxDescent\n    );\n  }\n\n  recordFullPageBBox(idx) {\n    this.#pendingBBox[0] = Math.max(0, this.#clipBox[0]);\n    this.#pendingBBox[1] = Math.max(0, this.#clipBox[1]);\n    this.#pendingBBox[2] = Math.min(this.#canvasWidth, this.#clipBox[2]);\n    this.#pendingBBox[3] = Math.min(this.#canvasHeight, this.#clipBox[3]);\n\n    return this;\n  }\n\n  getSimpleIndex(dependencyName) {\n    return this.#simple[dependencyName];\n  }\n\n  recordDependencies(idx, dependencyNames) {\n    const pendingDependencies = this.#pendingDependencies;\n    const simple = this.#simple;\n    const incremental = this.#incremental;\n    for (const name of dependencyNames) {\n      if (name in this.#simple) {\n        pendingDependencies.add(simple[name]);\n      } else if (name in incremental) {\n        incremental[name].forEach(pendingDependencies.add, pendingDependencies);\n      }\n    }\n\n    return this;\n  }\n\n  recordNamedDependency(idx, name) {\n    if (this.#namedDependencies.has(name)) {\n      this.#pendingDependencies.add(this.#namedDependencies.get(name));\n    }\n\n    return this;\n  }\n\n  /**\n   * @param {number} idx\n   */\n  recordOperation(idx, preserve = false) {\n    this.recordDependencies(idx, [FORCED_DEPENDENCY_LABEL]);\n\n    if (this.#debugMetadata) {\n      const metadata = ensureDebugMetadata(this.#debugMetadata, idx);\n      const { dependencies } = metadata;\n      this.#pendingDependencies.forEach(dependencies.add, dependencies);\n      this.#savesStack.forEach(dependencies.add, dependencies);\n      this.#markedContentStack.forEach(dependencies.add, dependencies);\n      dependencies.delete(idx);\n      metadata.isRenderingOperation = true;\n    }\n\n    if (this.#pendingBBoxIdx === idx) {\n      const minX = floor((this.#pendingBBox[0] * 256) / this.#canvasWidth);\n      const minY = floor((this.#pendingBBox[1] * 256) / this.#canvasHeight);\n      const maxX = ceil((this.#pendingBBox[2] * 256) / this.#canvasWidth);\n      const maxY = ceil((this.#pendingBBox[3] * 256) / this.#canvasHeight);\n\n      expandBBox(this.#bboxesCoords, idx, minX, minY, maxX, maxY);\n      for (const depIdx of this.#pendingDependencies) {\n        if (depIdx !== idx) {\n          expandBBox(this.#bboxesCoords, depIdx, minX, minY, maxX, maxY);\n        }\n      }\n      for (const saveIdx of this.#savesStack) {\n        if (saveIdx !== idx) {\n          expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY);\n        }\n      }\n      for (const saveIdx of this.#markedContentStack) {\n        if (saveIdx !== idx) {\n          expandBBox(this.#bboxesCoords, saveIdx, minX, minY, maxX, maxY);\n        }\n      }\n\n      if (!preserve) {\n        this.#pendingDependencies.clear();\n        this.#pendingBBoxIdx = -1;\n      }\n    }\n\n    return this;\n  }\n\n  recordShowTextOperation(idx, preserve = false) {\n    const deps = Array.from(this.#pendingDependencies);\n    this.recordOperation(idx, preserve);\n    this.recordIncrementalData(\"sameLineText\", idx);\n    for (const dep of deps) {\n      this.recordIncrementalData(\"sameLineText\", dep);\n    }\n    return this;\n  }\n\n  bboxToClipBoxDropOperation(idx, preserve = false) {\n    if (this.#pendingBBoxIdx === idx) {\n      this.#pendingBBoxIdx = -1;\n\n      this.#clipBox[0] = Math.max(this.#clipBox[0], this.#pendingBBox[0]);\n      this.#clipBox[1] = Math.max(this.#clipBox[1], this.#pendingBBox[1]);\n      this.#clipBox[2] = Math.min(this.#clipBox[2], this.#pendingBBox[2]);\n      this.#clipBox[3] = Math.min(this.#clipBox[3], this.#pendingBBox[3]);\n\n      if (!preserve) {\n        this.#pendingDependencies.clear();\n      }\n    }\n    return this;\n  }\n\n  _takePendingDependencies() {\n    const pendingDependencies = this.#pendingDependencies;\n    this.#pendingDependencies = new Set();\n    return pendingDependencies;\n  }\n\n  _extractOperation(idx) {\n    const operation = this.#operations.get(idx);\n    this.#operations.delete(idx);\n    return operation;\n  }\n\n  _pushPendingDependencies(dependencies) {\n    for (const dep of dependencies) {\n      this.#pendingDependencies.add(dep);\n    }\n  }\n\n  take() {\n    this.#fontBBoxTrustworthy.clear();\n    return new BBoxReader(this.#bboxes, this.#bboxesCoords);\n  }\n\n  takeDebugMetadata() {\n    return this.#debugMetadata;\n  }\n}\n\n/**\n * Used to track dependencies of nested operations list, that\n * should actually all map to the index of the operation that\n * contains the nested list.\n *\n * @implements {CanvasDependencyTracker}\n */\nclass CanvasNestedDependencyTracker {\n  /** @type {CanvasDependencyTracker} */\n  #dependencyTracker;\n\n  /** @type {number} */\n  #opIdx;\n\n  #ignoreBBoxes;\n\n  #nestingLevel = 0;\n\n  #savesLevel = 0;\n\n  constructor(dependencyTracker, opIdx, ignoreBBoxes) {\n    if (\n      dependencyTracker instanceof CanvasNestedDependencyTracker &&\n      dependencyTracker.#ignoreBBoxes === !!ignoreBBoxes\n    ) {\n      // The goal of CanvasNestedDependencyTracker is to collapse all operations\n      // into a single one. If we are already in a\n      // CanvasNestedDependencyTracker, that is already happening.\n      return dependencyTracker;\n    }\n\n    this.#dependencyTracker = dependencyTracker;\n    this.#opIdx = opIdx;\n    this.#ignoreBBoxes = !!ignoreBBoxes;\n  }\n\n  growOperationsCount() {\n    throw new Error(\"Unreachable\");\n  }\n\n  save(opIdx) {\n    this.#savesLevel++;\n    this.#dependencyTracker.save(this.#opIdx);\n    return this;\n  }\n\n  restore(opIdx) {\n    if (this.#savesLevel > 0) {\n      this.#dependencyTracker.restore(this.#opIdx);\n      this.#savesLevel--;\n    }\n    return this;\n  }\n\n  recordOpenMarker(idx) {\n    this.#nestingLevel++;\n    return this;\n  }\n\n  getOpenMarker() {\n    return this.#nestingLevel > 0\n      ? this.#opIdx\n      : this.#dependencyTracker.getOpenMarker();\n  }\n\n  recordCloseMarker(idx) {\n    this.#nestingLevel--;\n    return this;\n  }\n\n  beginMarkedContent(opIdx) {\n    return this;\n  }\n\n  endMarkedContent(opIdx) {\n    return this;\n  }\n\n  pushBaseTransform(ctx) {\n    this.#dependencyTracker.pushBaseTransform(ctx);\n    return this;\n  }\n\n  popBaseTransform() {\n    this.#dependencyTracker.popBaseTransform();\n    return this;\n  }\n\n  /**\n   * @param {SimpleDependency} name\n   * @param {number} idx\n   */\n  recordSimpleData(name, idx) {\n    this.#dependencyTracker.recordSimpleData(name, this.#opIdx);\n    return this;\n  }\n\n  /**\n   * @param {IncrementalDependency} name\n   * @param {number} idx\n   */\n  recordIncrementalData(name, idx) {\n    this.#dependencyTracker.recordIncrementalData(name, this.#opIdx);\n    return this;\n  }\n\n  /**\n   * @param {IncrementalDependency} name\n   * @param {number} idx\n   */\n  resetIncrementalData(name, idx) {\n    this.#dependencyTracker.resetIncrementalData(name, this.#opIdx);\n    return this;\n  }\n\n  recordNamedData(name, idx) {\n    // Nested dependencies are not visible to the outside.\n    return this;\n  }\n\n  /**\n   * @param {SimpleDependency} name\n   * @param {string} depName\n   * @param {number} fallbackIdx\n   */\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#dependencyTracker.recordSimpleDataFromNamed(\n      name,\n      depName,\n      this.#opIdx\n    );\n    return this;\n  }\n\n  // All next operations, until the next .restore(), will depend on this\n  recordFutureForcedDependency(name, idx) {\n    this.#dependencyTracker.recordFutureForcedDependency(name, this.#opIdx);\n    return this;\n  }\n\n  // All next operations, until the next .restore(), will depend on all\n  // the already recorded data with the given names.\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    this.#dependencyTracker.inheritSimpleDataAsFutureForcedDependencies(names);\n    return this;\n  }\n\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    this.#dependencyTracker.inheritPendingDependenciesAsFutureForcedDependencies();\n    return this;\n  }\n\n  resetBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.resetBBox(this.#opIdx);\n    }\n    return this;\n  }\n\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordClipBox(\n        this.#opIdx,\n        ctx,\n        minX,\n        maxX,\n        minY,\n        maxY\n      );\n    }\n    return this;\n  }\n\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordBBox(\n        this.#opIdx,\n        ctx,\n        minX,\n        maxX,\n        minY,\n        maxY\n      );\n    }\n    return this;\n  }\n\n  recordCharacterBBox(idx, ctx, font, scale, x, y, getMeasure) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordCharacterBBox(\n        this.#opIdx,\n        ctx,\n        font,\n        scale,\n        x,\n        y,\n        getMeasure\n      );\n    }\n    return this;\n  }\n\n  recordFullPageBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordFullPageBBox(this.#opIdx);\n    }\n    return this;\n  }\n\n  getSimpleIndex(dependencyName) {\n    return this.#dependencyTracker.getSimpleIndex(dependencyName);\n  }\n\n  recordDependencies(idx, dependencyNames) {\n    this.#dependencyTracker.recordDependencies(this.#opIdx, dependencyNames);\n    return this;\n  }\n\n  recordNamedDependency(idx, name) {\n    this.#dependencyTracker.recordNamedDependency(this.#opIdx, name);\n    return this;\n  }\n\n  /**\n   * @param {number} idx\n   * @param {SimpleDependency[]} dependencyNames\n   */\n  recordOperation(idx) {\n    this.#dependencyTracker.recordOperation(this.#opIdx, true);\n    return this;\n  }\n\n  recordShowTextOperation(idx) {\n    this.#dependencyTracker.recordShowTextOperation(this.#opIdx, true);\n    return this;\n  }\n\n  bboxToClipBoxDropOperation(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.bboxToClipBoxDropOperation(this.#opIdx, true);\n    }\n    return this;\n  }\n\n  take() {\n    throw new Error(\"Unreachable\");\n  }\n\n  takeDebugMetadata() {\n    throw new Error(\"Unreachable\");\n  }\n}\n\n/** @satisfies {Record<string, SimpleDependency | IncrementalDependency>} */\nconst Dependencies = {\n  stroke: [\n    \"path\",\n    \"transform\",\n    \"filter\",\n    \"strokeColor\",\n    \"strokeAlpha\",\n    \"lineWidth\",\n    \"lineCap\",\n    \"lineJoin\",\n    \"miterLimit\",\n    \"dash\",\n  ],\n  fill: [\n    \"path\",\n    \"transform\",\n    \"filter\",\n    \"fillColor\",\n    \"fillAlpha\",\n    \"globalCompositeOperation\",\n    \"SMask\",\n  ],\n  imageXObject: [\n    \"transform\",\n    \"SMask\",\n    \"filter\",\n    \"fillAlpha\",\n    \"strokeAlpha\",\n    \"globalCompositeOperation\",\n  ],\n  rawFillPath: [\"filter\", \"fillColor\", \"fillAlpha\"],\n  showText: [\n    \"transform\",\n    \"leading\",\n    \"charSpacing\",\n    \"wordSpacing\",\n    \"hScale\",\n    \"textRise\",\n    \"moveText\",\n    \"textMatrix\",\n    \"font\",\n    \"fontObj\",\n    \"filter\",\n    \"fillColor\",\n    \"textRenderingMode\",\n    \"SMask\",\n    \"fillAlpha\",\n    \"strokeAlpha\",\n    \"globalCompositeOperation\",\n\n    \"sameLineText\",\n  ],\n  transform: [\"transform\"],\n  transformAndFill: [\"transform\", \"fillColor\"],\n};\n\nexport { CanvasDependencyTracker, CanvasNestedDependencyTracker, Dependencies };\n", "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormatError, info, unreachable, Util } from \"../shared/util.js\";\nimport { getCurrentTransform } from \"./display_utils.js\";\n\nconst PathType = {\n  FILL: \"Fill\",\n  STROKE: \"Stroke\",\n  SHADING: \"Shading\",\n};\n\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox) {\n    return;\n  }\n  const width = bbox[2] - bbox[0];\n  const height = bbox[3] - bbox[1];\n  const region = new Path2D();\n  region.rect(bbox[0], bbox[1], width, height);\n  ctx.clip(region);\n}\n\nclass BaseShadingPattern {\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseShadingPattern\n    ) {\n      unreachable(\"Cannot initialize BaseShadingPattern.\");\n    }\n  }\n\n  isModifyingCurrentTransform() {\n    return false;\n  }\n\n  getPattern() {\n    unreachable(\"Abstract method `getPattern` called.\");\n  }\n}\n\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._type = IR[1];\n    this._bbox = IR[2];\n    this._colorStops = IR[3];\n    this._p0 = IR[4];\n    this._p1 = IR[5];\n    this._r0 = IR[6];\n    this._r1 = IR[7];\n    this.matrix = null;\n  }\n\n  _createGradient(ctx) {\n    let grad;\n    if (this._type === \"axial\") {\n      grad = ctx.createLinearGradient(\n        this._p0[0],\n        this._p0[1],\n        this._p1[0],\n        this._p1[1]\n      );\n    } else if (this._type === \"radial\") {\n      grad = ctx.createRadialGradient(\n        this._p0[0],\n        this._p0[1],\n        this._r0,\n        this._p1[0],\n        this._p1[1],\n        this._r1\n      );\n    }\n\n    for (const colorStop of this._colorStops) {\n      grad.addColorStop(colorStop[0], colorStop[1]);\n    }\n    return grad;\n  }\n\n  getPattern(ctx, owner, inverse, pathType) {\n    let pattern;\n    if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n      const ownerBBox = owner.current.getClippedPathBoundingBox(\n        pathType,\n        getCurrentTransform(ctx)\n      ) || [0, 0, 0, 0];\n      // Create a canvas that is only as big as the current path. This doesn't\n      // allow us to cache the pattern, but it generally creates much smaller\n      // canvases and saves memory use. See bug 1722807 for an example.\n      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n\n      const tmpCanvas = owner.cachedCanvases.getCanvas(\n        \"pattern\",\n        width,\n        height\n      );\n\n      const tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.beginPath();\n      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      // Non shading fill patterns are positioned relative to the base transform\n      // (usually the page's initial transform), but we may have created a\n      // smaller canvas based on the path, so we must account for the shift.\n      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n      inverse = Util.transform(inverse, [\n        1,\n        0,\n        0,\n        1,\n        ownerBBox[0],\n        ownerBBox[1],\n      ]);\n\n      tmpCtx.transform(...owner.baseTransform);\n      if (this.matrix) {\n        tmpCtx.transform(...this.matrix);\n      }\n      applyBoundingBox(tmpCtx, this._bbox);\n\n      tmpCtx.fillStyle = this._createGradient(tmpCtx);\n      tmpCtx.fill();\n\n      pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n      const domMatrix = new DOMMatrix(inverse);\n      pattern.setTransform(domMatrix);\n    } else {\n      // Shading fills are applied relative to the current matrix which is also\n      // how canvas gradients work, so there's no need to do anything special\n      // here.\n      applyBoundingBox(ctx, this._bbox);\n      pattern = this._createGradient(ctx);\n    }\n    return pattern;\n  }\n}\n\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n  // Very basic Gouraud-shaded triangle rasterization algorithm.\n  const coords = context.coords,\n    colors = context.colors;\n  const bytes = data.data,\n    rowSize = data.width * 4;\n  let tmp;\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  if (coords[p2 + 1] > coords[p3 + 1]) {\n    tmp = p2;\n    p2 = p3;\n    p3 = tmp;\n    tmp = c2;\n    c2 = c3;\n    c3 = tmp;\n  }\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  const x1 = (coords[p1] + context.offsetX) * context.scaleX;\n  const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n  const x2 = (coords[p2] + context.offsetX) * context.scaleX;\n  const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n  const x3 = (coords[p3] + context.offsetX) * context.scaleX;\n  const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n  if (y1 >= y3) {\n    return;\n  }\n  const c1r = colors[c1],\n    c1g = colors[c1 + 1],\n    c1b = colors[c1 + 2];\n  const c2r = colors[c2],\n    c2g = colors[c2 + 1],\n    c2b = colors[c2 + 2];\n  const c3r = colors[c3],\n    c3g = colors[c3 + 1],\n    c3b = colors[c3 + 2];\n\n  const minY = Math.round(y1),\n    maxY = Math.round(y3);\n  let xa, car, cag, cab;\n  let xb, cbr, cbg, cbb;\n  for (let y = minY; y <= maxY; y++) {\n    if (y < y2) {\n      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n      xa = x1 - (x1 - x2) * k;\n      car = c1r - (c1r - c2r) * k;\n      cag = c1g - (c1g - c2g) * k;\n      cab = c1b - (c1b - c2b) * k;\n    } else {\n      let k;\n      if (y > y3) {\n        k = 1;\n      } else if (y2 === y3) {\n        k = 0;\n      } else {\n        k = (y2 - y) / (y2 - y3);\n      }\n      xa = x2 - (x2 - x3) * k;\n      car = c2r - (c2r - c3r) * k;\n      cag = c2g - (c2g - c3g) * k;\n      cab = c2b - (c2b - c3b) * k;\n    }\n\n    let k;\n    if (y < y1) {\n      k = 0;\n    } else if (y > y3) {\n      k = 1;\n    } else {\n      k = (y1 - y) / (y1 - y3);\n    }\n    xb = x1 - (x1 - x3) * k;\n    cbr = c1r - (c1r - c3r) * k;\n    cbg = c1g - (c1g - c3g) * k;\n    cbb = c1b - (c1b - c3b) * k;\n    const x1_ = Math.round(Math.min(xa, xb));\n    const x2_ = Math.round(Math.max(xa, xb));\n    let j = rowSize * y + x1_ * 4;\n    for (let x = x1_; x <= x2_; x++) {\n      k = (xa - x) / (xa - xb);\n      if (k < 0) {\n        k = 0;\n      } else if (k > 1) {\n        k = 1;\n      }\n      bytes[j++] = (car - (car - cbr) * k) | 0;\n      bytes[j++] = (cag - (cag - cbg) * k) | 0;\n      bytes[j++] = (cab - (cab - cbb) * k) | 0;\n      bytes[j++] = 255;\n    }\n  }\n}\n\nfunction drawFigure(data, figure, context) {\n  const ps = figure.coords;\n  const cs = figure.colors;\n  let i, ii;\n  switch (figure.type) {\n    case \"lattice\":\n      const verticesPerRow = figure.verticesPerRow;\n      const rows = Math.floor(ps.length / verticesPerRow) - 1;\n      const cols = verticesPerRow - 1;\n      for (i = 0; i < rows; i++) {\n        let q = i * verticesPerRow;\n        for (let j = 0; j < cols; j++, q++) {\n          drawTriangle(\n            data,\n            context,\n            ps[q],\n            ps[q + 1],\n            ps[q + verticesPerRow],\n            cs[q],\n            cs[q + 1],\n            cs[q + verticesPerRow]\n          );\n          drawTriangle(\n            data,\n            context,\n            ps[q + verticesPerRow + 1],\n            ps[q + 1],\n            ps[q + verticesPerRow],\n            cs[q + verticesPerRow + 1],\n            cs[q + 1],\n            cs[q + verticesPerRow]\n          );\n        }\n      }\n      break;\n    case \"triangles\":\n      for (i = 0, ii = ps.length; i < ii; i += 3) {\n        drawTriangle(\n          data,\n          context,\n          ps[i],\n          ps[i + 1],\n          ps[i + 2],\n          cs[i],\n          cs[i + 1],\n          cs[i + 2]\n        );\n      }\n      break;\n    default:\n      throw new Error(\"illegal figure\");\n  }\n}\n\nclass MeshShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._coords = IR[2];\n    this._colors = IR[3];\n    this._figures = IR[4];\n    this._bounds = IR[5];\n    this._bbox = IR[6];\n    this._background = IR[7];\n    this.matrix = null;\n  }\n\n  _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n    // we will increase scale on some weird factor to let antialiasing take\n    // care of \"rough\" edges\n    const EXPECTED_SCALE = 1.1;\n    // MAX_PATTERN_SIZE is used to avoid OOM situation.\n    const MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n    // We need to keep transparent border around our pattern for fill():\n    // createPattern with 'no-repeat' will bleed edges across entire area.\n    const BORDER_SIZE = 2;\n\n    const offsetX = Math.floor(this._bounds[0]);\n    const offsetY = Math.floor(this._bounds[1]);\n    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n\n    const width = Math.min(\n      Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)),\n      MAX_PATTERN_SIZE\n    );\n    const height = Math.min(\n      Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)),\n      MAX_PATTERN_SIZE\n    );\n    const scaleX = boundsWidth / width;\n    const scaleY = boundsHeight / height;\n\n    const context = {\n      coords: this._coords,\n      colors: this._colors,\n      offsetX: -offsetX,\n      offsetY: -offsetY,\n      scaleX: 1 / scaleX,\n      scaleY: 1 / scaleY,\n    };\n\n    const paddedWidth = width + BORDER_SIZE * 2;\n    const paddedHeight = height + BORDER_SIZE * 2;\n\n    const tmpCanvas = cachedCanvases.getCanvas(\n      \"mesh\",\n      paddedWidth,\n      paddedHeight\n    );\n    const tmpCtx = tmpCanvas.context;\n\n    const data = tmpCtx.createImageData(width, height);\n    if (backgroundColor) {\n      const bytes = data.data;\n      for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n        bytes[i] = backgroundColor[0];\n        bytes[i + 1] = backgroundColor[1];\n        bytes[i + 2] = backgroundColor[2];\n        bytes[i + 3] = 255;\n      }\n    }\n    for (const figure of this._figures) {\n      drawFigure(data, figure, context);\n    }\n    tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n    const canvas = tmpCanvas.canvas;\n\n    return {\n      canvas,\n      offsetX: offsetX - BORDER_SIZE * scaleX,\n      offsetY: offsetY - BORDER_SIZE * scaleY,\n      scaleX,\n      scaleY,\n    };\n  }\n\n  isModifyingCurrentTransform() {\n    return true;\n  }\n\n  getPattern(ctx, owner, inverse, pathType) {\n    applyBoundingBox(ctx, this._bbox);\n    const scale = new Float32Array(2);\n    if (pathType === PathType.SHADING) {\n      Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);\n    } else if (this.matrix) {\n      // Obtain scale from matrix and current transformation matrix.\n      Util.singularValueDecompose2dScale(this.matrix, scale);\n      const [matrixScaleX, matrixScaleY] = scale;\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n      scale[0] *= matrixScaleX;\n      scale[1] *= matrixScaleY;\n    } else {\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n    }\n\n    // Rasterizing on the main thread since sending/queue large canvases\n    // might cause OOM.\n    const temporaryPatternCanvas = this._createMeshCanvas(\n      scale,\n      pathType === PathType.SHADING ? null : this._background,\n      owner.cachedCanvases\n    );\n\n    if (pathType !== PathType.SHADING) {\n      ctx.setTransform(...owner.baseTransform);\n      if (this.matrix) {\n        ctx.transform(...this.matrix);\n      }\n    }\n\n    ctx.translate(\n      temporaryPatternCanvas.offsetX,\n      temporaryPatternCanvas.offsetY\n    );\n    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n\n    return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n  }\n}\n\nclass DummyShadingPattern extends BaseShadingPattern {\n  getPattern() {\n    return \"hotpink\";\n  }\n}\n\nfunction getShadingPattern(IR) {\n  switch (IR[0]) {\n    case \"RadialAxial\":\n      return new RadialAxialShadingPattern(IR);\n    case \"Mesh\":\n      return new MeshShadingPattern(IR);\n    case \"Dummy\":\n      return new DummyShadingPattern();\n  }\n  throw new Error(`Unknown IR type: ${IR[0]}`);\n}\n\nconst PaintType = {\n  COLORED: 1,\n  UNCOLORED: 2,\n};\n\nclass TilingPattern {\n  // 10in @ 300dpi shall be enough.\n  static MAX_PATTERN_SIZE = 3000;\n\n  constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {\n    this.color = IR[1];\n    this.operatorList = IR[2];\n    this.matrix = IR[3];\n    this.bbox = IR[4];\n    this.xstep = IR[5];\n    this.ystep = IR[6];\n    this.paintType = IR[7];\n    this.tilingType = IR[8];\n    this.ctx = ctx;\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\n    this.baseTransform = baseTransform;\n  }\n\n  createPatternCanvas(owner, opIdx) {\n    const {\n      bbox,\n      operatorList,\n      paintType,\n      tilingType,\n      color,\n      canvasGraphicsFactory,\n    } = this;\n    let { xstep, ystep } = this;\n    xstep = Math.abs(xstep);\n    ystep = Math.abs(ystep);\n\n    info(\"TilingType: \" + tilingType);\n\n    // A tiling pattern as defined by PDF spec 8.7.2 is a cell whose size is\n    // described by bbox, and may repeat regularly by shifting the cell by\n    // xstep and ystep.\n    // Because the HTML5 canvas API does not support pattern repetition with\n    // gaps in between, we use the xstep/ystep instead of the bbox's size.\n    //\n    // This has the following consequences (similarly for ystep):\n    //\n    // - If xstep is the same as bbox, then there is no observable difference.\n    //\n    // - If xstep is larger than bbox, then the pattern canvas is partially\n    //   empty: the area bounded by bbox is painted, the outside area is void.\n    //\n    // - If xstep is smaller than bbox, then the pixels between xstep and the\n    //   bbox boundary will be missing. This is INCORRECT behavior.\n    //   \"Figures on adjacent tiles should not overlap\" (PDF spec 8.7.3.1),\n    //   but overlapping cells without common pixels are still valid.\n\n    const x0 = bbox[0],\n      y0 = bbox[1],\n      x1 = bbox[2],\n      y1 = bbox[3];\n    const width = x1 - x0;\n    const height = y1 - y0;\n\n    // Obtain scale from matrix and current transformation matrix.\n    const scale = new Float32Array(2);\n    Util.singularValueDecompose2dScale(this.matrix, scale);\n    const [matrixScaleX, matrixScaleY] = scale;\n    Util.singularValueDecompose2dScale(this.baseTransform, scale);\n    const combinedScaleX = matrixScaleX * scale[0];\n    const combinedScaleY = matrixScaleY * scale[1];\n\n    let canvasWidth = width,\n      canvasHeight = height,\n      redrawHorizontally = false,\n      redrawVertically = false;\n\n    const xScaledStep = Math.ceil(xstep * combinedScaleX);\n    const yScaledStep = Math.ceil(ystep * combinedScaleY);\n    const xScaledWidth = Math.ceil(width * combinedScaleX);\n    const yScaledHeight = Math.ceil(height * combinedScaleY);\n\n    if (xScaledStep >= xScaledWidth) {\n      canvasWidth = xstep;\n    } else {\n      redrawHorizontally = true;\n    }\n    if (yScaledStep >= yScaledHeight) {\n      canvasHeight = ystep;\n    } else {\n      redrawVertically = true;\n    }\n\n    // Use width and height values that are as close as possible to the end\n    // result when the pattern is used. Too low value makes the pattern look\n    // blurry. Too large value makes it look too crispy.\n    const dimx = this.getSizeAndScale(\n      canvasWidth,\n      this.ctx.canvas.width,\n      combinedScaleX\n    );\n    const dimy = this.getSizeAndScale(\n      canvasHeight,\n      this.ctx.canvas.height,\n      combinedScaleY\n    );\n\n    const tmpCanvas = owner.cachedCanvases.getCanvas(\n      \"pattern\",\n      dimx.size,\n      dimy.size\n    );\n    const tmpCtx = tmpCanvas.context;\n    const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx, opIdx);\n    graphics.groupLevel = owner.groupLevel;\n\n    this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n\n    tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);\n    graphics.transform(\n      // We pass 0 as the 'opIdx' argument, but the value is irrelevant.\n      // We know that we are in a 'CanvasNestedDependencyTracker' that captures\n      // all the sub-operations needed to create this pattern canvas and uses\n      // the top-level operation index as their index.\n      0,\n      dimx.scale,\n      0,\n      0,\n      dimy.scale,\n      0,\n      0\n    );\n\n    // To match CanvasGraphics beginDrawing we must save the context here or\n    // else we end up with unbalanced save/restores.\n    tmpCtx.save();\n    graphics.dependencyTracker?.save();\n\n    this.clipBbox(graphics, x0, y0, x1, y1);\n\n    graphics.baseTransform = getCurrentTransform(graphics.ctx);\n\n    graphics.executeOperatorList(operatorList);\n\n    graphics.endDrawing();\n\n    graphics.dependencyTracker?.restore();\n    tmpCtx.restore();\n\n    if (redrawHorizontally || redrawVertically) {\n      // The tile is overlapping itself, so we create a new tile with\n      // dimensions xstep * ystep.\n      // Then we draw the overlapping parts of the original tile on the new\n      // tile.\n      // Just as a side note, the code here works correctly even if we don't\n      // have to redraw the tile horizontally or vertically. In that case, the\n      // original tile is drawn on the new tile only once, but it's useless.\n      const image = tmpCanvas.canvas;\n      if (redrawHorizontally) {\n        canvasWidth = xstep;\n      }\n      if (redrawVertically) {\n        canvasHeight = ystep;\n      }\n\n      const dimx2 = this.getSizeAndScale(\n        canvasWidth,\n        this.ctx.canvas.width,\n        combinedScaleX\n      );\n      const dimy2 = this.getSizeAndScale(\n        canvasHeight,\n        this.ctx.canvas.height,\n        combinedScaleY\n      );\n\n      const xSize = dimx2.size;\n      const ySize = dimy2.size;\n      const tmpCanvas2 = owner.cachedCanvases.getCanvas(\n        \"pattern-workaround\",\n        xSize,\n        ySize\n      );\n      const tmpCtx2 = tmpCanvas2.context;\n      const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;\n      const jj = redrawVertically ? Math.floor(height / ystep) : 0;\n\n      // Draw the overlapping parts of the original tile on the new tile.\n      for (let i = 0; i <= ii; i++) {\n        for (let j = 0; j <= jj; j++) {\n          tmpCtx2.drawImage(\n            image,\n            xSize * i,\n            ySize * j,\n            xSize,\n            ySize,\n            0,\n            0,\n            xSize,\n            ySize\n          );\n        }\n      }\n      return {\n        canvas: tmpCanvas2.canvas,\n        scaleX: dimx2.scale,\n        scaleY: dimy2.scale,\n        offsetX: x0,\n        offsetY: y0,\n      };\n    }\n\n    return {\n      canvas: tmpCanvas.canvas,\n      scaleX: dimx.scale,\n      scaleY: dimy.scale,\n      offsetX: x0,\n      offsetY: y0,\n    };\n  }\n\n  getSizeAndScale(step, realOutputSize, scale) {\n    // MAX_PATTERN_SIZE is used to avoid OOM situation.\n    // Use the destination canvas's size if it is bigger than the hard-coded\n    // limit of MAX_PATTERN_SIZE to avoid clipping patterns that cover the\n    // whole canvas.\n    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n    let size = Math.ceil(step * scale);\n    if (size >= maxSize) {\n      size = maxSize;\n    } else {\n      scale = size / step;\n    }\n    return { scale, size };\n  }\n\n  clipBbox(graphics, x0, y0, x1, y1) {\n    const bboxWidth = x1 - x0;\n    const bboxHeight = y1 - y0;\n    graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n    Util.axialAlignedBoundingBox(\n      [x0, y0, x1, y1],\n      getCurrentTransform(graphics.ctx),\n      graphics.current.minMax\n    );\n    graphics.clip();\n    graphics.endPath();\n  }\n\n  setFillAndStrokeStyleToContext(graphics, paintType, color) {\n    const context = graphics.ctx,\n      current = graphics.current;\n    switch (paintType) {\n      case PaintType.COLORED:\n        const { fillStyle, strokeStyle } = this.ctx;\n        context.fillStyle = current.fillColor = fillStyle;\n        context.strokeStyle = current.strokeColor = strokeStyle;\n        break;\n      case PaintType.UNCOLORED:\n        context.fillStyle = context.strokeStyle = color;\n        // Set color needed by image masks (fixes issues 3226 and 8741).\n        current.fillColor = current.strokeColor = color;\n        break;\n      default:\n        throw new FormatError(`Unsupported paint type: ${paintType}`);\n    }\n  }\n\n  isModifyingCurrentTransform() {\n    return false;\n  }\n\n  getPattern(ctx, owner, inverse, pathType, opIdx) {\n    // PDF spec 8.7.2 NOTE 1: pattern's matrix is relative to initial matrix.\n    let matrix = inverse;\n    if (pathType !== PathType.SHADING) {\n      matrix = Util.transform(matrix, owner.baseTransform);\n      if (this.matrix) {\n        matrix = Util.transform(matrix, this.matrix);\n      }\n    }\n\n    const temporaryPatternCanvas = this.createPatternCanvas(owner, opIdx);\n\n    let domMatrix = new DOMMatrix(matrix);\n    // Rescale and so that the ctx.createPattern call generates a pattern with\n    // the desired size.\n    domMatrix = domMatrix.translate(\n      temporaryPatternCanvas.offsetX,\n      temporaryPatternCanvas.offsetY\n    );\n    domMatrix = domMatrix.scale(\n      1 / temporaryPatternCanvas.scaleX,\n      1 / temporaryPatternCanvas.scaleY\n    );\n\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n    pattern.setTransform(domMatrix);\n\n    return pattern;\n  }\n}\n\nexport { getShadingPattern, PathType, TilingPattern };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind } from \"./util.js\";\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n\n  return null;\n}\n\nfunction convertBlackAndWhiteToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  width,\n  height,\n  nonBlackColor = 0xffffffff,\n  inverseDecode = false,\n}) {\n  const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n  const [zeroMapping, oneMapping] = inverseDecode\n    ? [nonBlackColor, black]\n    : [black, nonBlackColor];\n  const widthInSource = width >> 3;\n  const widthRemainder = width & 7;\n  const srcLength = src.length;\n  dest = new Uint32Array(dest.buffer);\n  let destPos = 0;\n\n  for (let i = 0; i < height; i++) {\n    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n      const elem = srcPos < srcLength ? src[srcPos] : 255;\n      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n    }\n    if (widthRemainder === 0) {\n      continue;\n    }\n    const elem = srcPos < srcLength ? src[srcPos++] : 255;\n    for (let j = 0; j < widthRemainder; j++) {\n      dest[destPos++] = elem & (1 << (7 - j)) ? oneMapping : zeroMapping;\n    }\n  }\n  return { srcPos, destPos };\n}\n\nfunction convertRGBToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  destPos = 0,\n  width,\n  height,\n}) {\n  let i = 0;\n  const len = width * height * 3;\n  const len32 = len >> 2;\n  const src32 = new Uint32Array(src.buffer, srcPos, len32);\n\n  if (FeatureTest.isLittleEndian) {\n    // It's a way faster to do the shuffle manually instead of working\n    // component by component with some Uint8 arrays.\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i]; // R2B1G1R1\n      const s2 = src32[i + 1]; // G3R3B2G2\n      const s3 = src32[i + 2]; // B4G4R4B3\n\n      dest[destPos] = s1 | 0xff000000;\n      dest[destPos + 1] = (s1 >>> 24) | (s2 << 8) | 0xff000000;\n      dest[destPos + 2] = (s2 >>> 16) | (s3 << 16) | 0xff000000;\n      dest[destPos + 3] = (s3 >>> 8) | 0xff000000;\n    }\n\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] =\n        src[j] | (src[j + 1] << 8) | (src[j + 2] << 16) | 0xff000000;\n    }\n  } else {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i]; // R1G1B1R2\n      const s2 = src32[i + 1]; // G2B2R3G3\n      const s3 = src32[i + 2]; // B3R4G4B4\n\n      dest[destPos] = s1 | 0xff;\n      dest[destPos + 1] = (s1 << 24) | (s2 >>> 8) | 0xff;\n      dest[destPos + 2] = (s2 << 16) | (s3 >>> 16) | 0xff;\n      dest[destPos + 3] = (s3 << 8) | 0xff;\n    }\n\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] =\n        (src[j] << 24) | (src[j + 1] << 16) | (src[j + 2] << 8) | 0xff;\n    }\n  }\n\n  return { srcPos: srcPos + len, destPos };\n}\n\nfunction grayToRGBA(src, dest) {\n  if (FeatureTest.isLittleEndian) {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = (src[i] * 0x10101) | 0xff000000;\n    }\n  } else {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = (src[i] * 0x1010100) | 0x000000ff;\n    }\n  }\n}\n\nexport { convertBlackAndWhiteToRGBA, convertToRGBA, grayToRGBA };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  CanvasNestedDependencyTracker,\n  Dependencies,\n} from \"./canvas_dependency_tracker.js\";\nimport {\n  DrawOPS,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  ImageKind,\n  info,\n  OPS,\n  shadow,\n  TextRenderingMode,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  getCurrentTransform,\n  getCurrentTransformInverse,\n  OutputScale,\n  PixelsPerInch,\n} from \"./display_utils.js\";\nimport {\n  getShadingPattern,\n  PathType,\n  TilingPattern,\n} from \"./pattern_helper.js\";\nimport { convertBlackAndWhiteToRGBA } from \"../shared/image_utils.js\";\n\n// <canvas> contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n// Minimal font size that would be used during canvas fillText operations.\nconst MIN_FONT_SIZE = 16;\n// Maximum font size that would be used during canvas fillText operations.\nconst MAX_FONT_SIZE = 100;\n\n// Defines the time the `executeOperatorList`-method is going to be executing\n// before it stops and schedules a continue of execution.\nconst EXECUTION_TIME = 15; // ms\n// Defines the number of steps before checking the execution time.\nconst EXECUTION_STEPS = 10;\n\nconst FULL_CHUNK_HEIGHT = 16;\n\n// Only used in rescaleAndStroke. The goal is to avoid\n// creating a new DOMMatrix object each time we need it.\nconst SCALE_MATRIX = new DOMMatrix();\n\n// Used to get some coordinates.\nconst XY = new Float32Array(2);\n\n// Initial rectangle values for the minMax array.\nconst MIN_MAX_INIT = new Float32Array([\n  Infinity,\n  Infinity,\n  -Infinity,\n  -Infinity,\n]);\n\n/**\n * Overrides certain methods on a 2d ctx so that when they are called they\n * will also call the same method on the destCtx. The methods that are\n * overridden are all the transformation state modifiers, path creation, and\n * save/restore. We only forward these specific methods because they are the\n * only state modifiers that we cannot copy over when we switch contexts.\n *\n * To remove mirroring call `ctx._removeMirroring()`.\n *\n * @param {Object} ctx - The 2d canvas context that will duplicate its calls on\n *   the destCtx.\n * @param {Object} destCtx - The 2d canvas context that will receive the\n *   forwarded calls.\n */\nfunction mirrorContextOperations(ctx, destCtx) {\n  if (ctx._removeMirroring) {\n    throw new Error(\"Context is already forwarding operations.\");\n  }\n  ctx.__originalSave = ctx.save;\n  ctx.__originalRestore = ctx.restore;\n  ctx.__originalRotate = ctx.rotate;\n  ctx.__originalScale = ctx.scale;\n  ctx.__originalTranslate = ctx.translate;\n  ctx.__originalTransform = ctx.transform;\n  ctx.__originalSetTransform = ctx.setTransform;\n  ctx.__originalResetTransform = ctx.resetTransform;\n  ctx.__originalClip = ctx.clip;\n  ctx.__originalMoveTo = ctx.moveTo;\n  ctx.__originalLineTo = ctx.lineTo;\n  ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n  ctx.__originalRect = ctx.rect;\n  ctx.__originalClosePath = ctx.closePath;\n  ctx.__originalBeginPath = ctx.beginPath;\n\n  ctx._removeMirroring = () => {\n    ctx.save = ctx.__originalSave;\n    ctx.restore = ctx.__originalRestore;\n    ctx.rotate = ctx.__originalRotate;\n    ctx.scale = ctx.__originalScale;\n    ctx.translate = ctx.__originalTranslate;\n    ctx.transform = ctx.__originalTransform;\n    ctx.setTransform = ctx.__originalSetTransform;\n    ctx.resetTransform = ctx.__originalResetTransform;\n\n    ctx.clip = ctx.__originalClip;\n    ctx.moveTo = ctx.__originalMoveTo;\n    ctx.lineTo = ctx.__originalLineTo;\n    ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n    ctx.rect = ctx.__originalRect;\n    ctx.closePath = ctx.__originalClosePath;\n    ctx.beginPath = ctx.__originalBeginPath;\n    delete ctx._removeMirroring;\n  };\n\n  ctx.save = function () {\n    destCtx.save();\n    this.__originalSave();\n  };\n\n  ctx.restore = function () {\n    destCtx.restore();\n    this.__originalRestore();\n  };\n\n  ctx.translate = function (x, y) {\n    destCtx.translate(x, y);\n    this.__originalTranslate(x, y);\n  };\n\n  ctx.scale = function (x, y) {\n    destCtx.scale(x, y);\n    this.__originalScale(x, y);\n  };\n\n  ctx.transform = function (a, b, c, d, e, f) {\n    destCtx.transform(a, b, c, d, e, f);\n    this.__originalTransform(a, b, c, d, e, f);\n  };\n\n  ctx.setTransform = function (a, b, c, d, e, f) {\n    destCtx.setTransform(a, b, c, d, e, f);\n    this.__originalSetTransform(a, b, c, d, e, f);\n  };\n\n  ctx.resetTransform = function () {\n    destCtx.resetTransform();\n    this.__originalResetTransform();\n  };\n\n  ctx.rotate = function (angle) {\n    destCtx.rotate(angle);\n    this.__originalRotate(angle);\n  };\n\n  ctx.clip = function (rule) {\n    destCtx.clip(rule);\n    this.__originalClip(rule);\n  };\n\n  ctx.moveTo = function (x, y) {\n    destCtx.moveTo(x, y);\n    this.__originalMoveTo(x, y);\n  };\n\n  ctx.lineTo = function (x, y) {\n    destCtx.lineTo(x, y);\n    this.__originalLineTo(x, y);\n  };\n\n  ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n    destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n  };\n\n  ctx.rect = function (x, y, width, height) {\n    destCtx.rect(x, y, width, height);\n    this.__originalRect(x, y, width, height);\n  };\n\n  ctx.closePath = function () {\n    destCtx.closePath();\n    this.__originalClosePath();\n  };\n\n  ctx.beginPath = function () {\n    destCtx.beginPath();\n    this.__originalBeginPath();\n  };\n}\n\nclass CachedCanvases {\n  constructor(canvasFactory) {\n    this.canvasFactory = canvasFactory;\n    this.cache = Object.create(null);\n  }\n\n  getCanvas(id, width, height) {\n    let canvasEntry;\n    if (this.cache[id] !== undefined) {\n      canvasEntry = this.cache[id];\n      this.canvasFactory.reset(canvasEntry, width, height);\n    } else {\n      canvasEntry = this.canvasFactory.create(width, height);\n      this.cache[id] = canvasEntry;\n    }\n    return canvasEntry;\n  }\n\n  delete(id) {\n    delete this.cache[id];\n  }\n\n  clear() {\n    for (const id in this.cache) {\n      const canvasEntry = this.cache[id];\n      this.canvasFactory.destroy(canvasEntry);\n      delete this.cache[id];\n    }\n  }\n}\n\nfunction drawImageAtIntegerCoords(\n  ctx,\n  srcImg,\n  srcX,\n  srcY,\n  srcW,\n  srcH,\n  destX,\n  destY,\n  destW,\n  destH\n) {\n  const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n  if (b === 0 && c === 0) {\n    // top-left corner is at (X, Y) and\n    // bottom-right one is at (X + width, Y + height).\n\n    // If leftX is 4.321 then it's rounded to 4.\n    // If width is 10.432 then it's rounded to 11 because\n    // rightX = leftX + width = 14.753 which is rounded to 15\n    // so after rounding the total width is 11 (15 - 4).\n    // It's why we can't just floor/ceil uniformly, it just depends\n    // on the values we've.\n\n    const tlX = destX * a + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destY * d + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destX + destW) * a + tx;\n\n    // Some pdf contains images with 1x1 images so in case of 0-width after\n    // scaling we must fallback on 1 to be sure there is something.\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destY + destH) * d + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n    // We must apply a transformation in order to apply it on the image itself.\n    // For example if a == 1 && d == -1, it means that the image itself is\n    // mirrored w.r.t. the x-axis.\n    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n    ctx.setTransform(a, b, c, d, tx, ty);\n\n    return [rWidth, rHeight];\n  }\n\n  if (a === 0 && d === 0) {\n    // This path is taken in issue9462.pdf (page 3).\n    const tlX = destY * c + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destX * b + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destY + destH) * c + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destX + destW) * b + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n    ctx.setTransform(a, b, c, d, tx, ty);\n\n    return [rHeight, rWidth];\n  }\n\n  // Not a scale matrix so let the render handle the case without rounding.\n  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\n  const scaleX = Math.hypot(a, b);\n  const scaleY = Math.hypot(c, d);\n  return [scaleX * destW, scaleY * destH];\n}\n\nclass CanvasExtraState {\n  // Are soft masks and alpha values shapes or opacities?\n  alphaIsShape = false;\n\n  fontSize = 0;\n\n  fontSizeScale = 1;\n\n  textMatrix = null;\n\n  textMatrixScale = 1;\n\n  fontMatrix = FONT_IDENTITY_MATRIX;\n\n  leading = 0;\n\n  // Current point (in user coordinates)\n  x = 0;\n\n  y = 0;\n\n  // Start of text line (in text coordinates)\n  lineX = 0;\n\n  lineY = 0;\n\n  // Character and word spacing\n  charSpacing = 0;\n\n  wordSpacing = 0;\n\n  textHScale = 1;\n\n  textRenderingMode = TextRenderingMode.FILL;\n\n  textRise = 0;\n\n  // Default fore and background colors\n  fillColor = \"#000000\";\n\n  strokeColor = \"#000000\";\n\n  patternFill = false;\n\n  patternStroke = false;\n\n  // Note: fill alpha applies to all non-stroking operations\n  fillAlpha = 1;\n\n  strokeAlpha = 1;\n\n  lineWidth = 1;\n\n  activeSMask = null;\n\n  transferMaps = \"none\";\n\n  constructor(width, height, preInit) {\n    preInit?.(this);\n\n    this.clipBox = new Float32Array([0, 0, width, height]);\n    this.minMax = MIN_MAX_INIT.slice();\n  }\n\n  clone() {\n    const clone = Object.create(this);\n    clone.clipBox = this.clipBox.slice();\n    clone.minMax = this.minMax.slice();\n    return clone;\n  }\n\n  getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    const box = this.minMax.slice();\n    if (pathType === PathType.STROKE) {\n      if (!transform) {\n        unreachable(\"Stroke bounding box must include transform.\");\n      }\n      // Stroked paths can be outside of the path bounding box by 1/2 the line\n      // width.\n      Util.singularValueDecompose2dScale(transform, XY);\n      const xStrokePad = (XY[0] * this.lineWidth) / 2;\n      const yStrokePad = (XY[1] * this.lineWidth) / 2;\n      box[0] -= xStrokePad;\n      box[1] -= yStrokePad;\n      box[2] += xStrokePad;\n      box[3] += yStrokePad;\n    }\n    return box;\n  }\n\n  updateClipFromPath() {\n    const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n  }\n\n  isEmptyClip() {\n    return this.minMax[0] === Infinity;\n  }\n\n  startNewPathAndClipBox(box) {\n    this.clipBox.set(box, 0);\n    this.minMax.set(MIN_MAX_INIT, 0);\n  }\n\n  getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    return Util.intersect(\n      this.clipBox,\n      this.getPathBoundingBox(pathType, transform)\n    );\n  }\n}\n\nfunction putBinaryImageData(ctx, imgData) {\n  if (imgData instanceof ImageData) {\n    ctx.putImageData(imgData, 0, 0);\n    return;\n  }\n\n  // Put the image data to the canvas in chunks, rather than putting the\n  // whole image at once.  This saves JS memory, because the ImageData object\n  // is smaller. It also possibly saves C++ memory within the implementation\n  // of putImageData(). (E.g. in Firefox we make two short-lived copies of\n  // the data passed to putImageData()). |n| shouldn't be too small, however,\n  // because too many putImageData() calls will slow things down.\n  //\n  // Note: as written, if the last chunk is partial, the putImageData() call\n  // will (conceptually) put pixels past the bounds of the canvas.  But\n  // that's ok; any such pixels are ignored.\n\n  const height = imgData.height,\n    width = imgData.width;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0,\n    destPos;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  let i, j, thisChunkHeight, elemsInThisChunk;\n\n  // There are multiple forms in which the pixel data can be passed, and\n  // imgData.kind tells us which one this is.\n  if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {\n    // Grayscale, 1 bit per pixel (i.e. black-and-white).\n    const srcLength = src.byteLength;\n    const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n    const dest32DataLength = dest32.length;\n    const fullSrcDiff = (width + 7) >> 3;\n    const white = 0xffffffff;\n    const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n\n    for (i = 0; i < totalChunks; i++) {\n      thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n      destPos = 0;\n      for (j = 0; j < thisChunkHeight; j++) {\n        const srcDiff = srcLength - srcPos;\n        let k = 0;\n        const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n        const kEndUnrolled = kEnd & ~7;\n        let mask = 0;\n        let srcByte = 0;\n        for (; k < kEndUnrolled; k += 8) {\n          srcByte = src[srcPos++];\n          dest32[destPos++] = srcByte & 128 ? white : black;\n          dest32[destPos++] = srcByte & 64 ? white : black;\n          dest32[destPos++] = srcByte & 32 ? white : black;\n          dest32[destPos++] = srcByte & 16 ? white : black;\n          dest32[destPos++] = srcByte & 8 ? white : black;\n          dest32[destPos++] = srcByte & 4 ? white : black;\n          dest32[destPos++] = srcByte & 2 ? white : black;\n          dest32[destPos++] = srcByte & 1 ? white : black;\n        }\n        for (; k < kEnd; k++) {\n          if (mask === 0) {\n            srcByte = src[srcPos++];\n            mask = 128;\n          }\n\n          dest32[destPos++] = srcByte & mask ? white : black;\n          mask >>= 1;\n        }\n      }\n      // We ran out of input. Make all remaining pixels transparent.\n      while (destPos < dest32DataLength) {\n        dest32[destPos++] = 0;\n      }\n\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else if (imgData.kind === ImageKind.RGBA_32BPP) {\n    // RGBA, 32-bits per pixel.\n    j = 0;\n    elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n    for (i = 0; i < fullChunks; i++) {\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      srcPos += elemsInThisChunk;\n\n      ctx.putImageData(chunkImgData, 0, j);\n      j += FULL_CHUNK_HEIGHT;\n    }\n    if (i < totalChunks) {\n      elemsInThisChunk = width * partialChunkHeight * 4;\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n      ctx.putImageData(chunkImgData, 0, j);\n    }\n  } else if (imgData.kind === ImageKind.RGB_24BPP) {\n    // RGB, 24-bits per pixel.\n    thisChunkHeight = FULL_CHUNK_HEIGHT;\n    elemsInThisChunk = width * thisChunkHeight;\n    for (i = 0; i < totalChunks; i++) {\n      if (i >= fullChunks) {\n        thisChunkHeight = partialChunkHeight;\n        elemsInThisChunk = width * thisChunkHeight;\n      }\n\n      destPos = 0;\n      for (j = elemsInThisChunk; j--; ) {\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = 255;\n      }\n\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else {\n    throw new Error(`bad image kind: ${imgData.kind}`);\n  }\n}\n\nfunction putBinaryImageMask(ctx, imgData) {\n  if (imgData.bitmap) {\n    // The bitmap has been created in the worker.\n    ctx.drawImage(imgData.bitmap, 0, 0);\n    return;\n  }\n\n  // Slow path: OffscreenCanvas isn't available in the worker.\n  const height = imgData.height,\n    width = imgData.width;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n\n  for (let i = 0; i < totalChunks; i++) {\n    const thisChunkHeight =\n      i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n\n    // Expand the mask so it can be used by the canvas.  Any required\n    // inversion has already been handled.\n\n    ({ srcPos } = convertBlackAndWhiteToRGBA({\n      src,\n      srcPos,\n      dest,\n      width,\n      height: thisChunkHeight,\n      nonBlackColor: 0,\n    }));\n\n    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n  }\n}\n\nfunction copyCtxState(sourceCtx, destCtx) {\n  const properties = [\n    \"strokeStyle\",\n    \"fillStyle\",\n    \"fillRule\",\n    \"globalAlpha\",\n    \"lineWidth\",\n    \"lineCap\",\n    \"lineJoin\",\n    \"miterLimit\",\n    \"globalCompositeOperation\",\n    \"font\",\n    \"filter\",\n  ];\n  for (const property of properties) {\n    if (sourceCtx[property] !== undefined) {\n      destCtx[property] = sourceCtx[property];\n    }\n  }\n  if (sourceCtx.setLineDash !== undefined) {\n    destCtx.setLineDash(sourceCtx.getLineDash());\n    destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n  }\n}\n\nfunction resetCtxToDefault(ctx) {\n  ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n  ctx.fillRule = \"nonzero\";\n  ctx.globalAlpha = 1;\n  ctx.lineWidth = 1;\n  ctx.lineCap = \"butt\";\n  ctx.lineJoin = \"miter\";\n  ctx.miterLimit = 10;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.font = \"10px sans-serif\";\n  if (ctx.setLineDash !== undefined) {\n    ctx.setLineDash([]);\n    ctx.lineDashOffset = 0;\n  }\n  const { filter } = ctx;\n  if (filter !== \"none\" && filter !== \"\") {\n    ctx.filter = \"none\";\n  }\n}\n\nfunction getImageSmoothingEnabled(transform, interpolate) {\n  // In section 8.9.5.3 of the PDF spec, it's mentioned that the interpolate\n  // flag should be used when the image is upscaled.\n  // In Firefox, smoothing is always used when downscaling images (bug 1360415).\n\n  if (interpolate) {\n    return true;\n  }\n\n  Util.singularValueDecompose2dScale(transform, XY);\n  // Round to a 32bit float so that `<=` check below will pass for numbers that\n  // are very close, but not exactly the same 64bit floats.\n  const actualScale = Math.fround(\n    OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS\n  );\n  // `XY` is a Float32Array.\n  return XY[0] <= actualScale && XY[1] <= actualScale;\n}\n\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\n\nclass CanvasGraphics {\n  constructor(\n    canvasCtx,\n    commonObjs,\n    objs,\n    canvasFactory,\n    filterFactory,\n    { optionalContentConfig, markedContentStack = null },\n    annotationCanvasMap,\n    pageColors,\n    dependencyTracker\n  ) {\n    this.ctx = canvasCtx;\n    this.current = new CanvasExtraState(\n      this.ctx.canvas.width,\n      this.ctx.canvas.height\n    );\n    this.stateStack = [];\n    this.pendingClip = null;\n    this.pendingEOFill = false;\n    this.res = null;\n    this.xobjs = null;\n    this.commonObjs = commonObjs;\n    this.objs = objs;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this.groupStack = [];\n    // Patterns are painted relative to the initial page/form transform, see\n    // PDF spec 8.7.2 NOTE 1.\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.smaskCounter = 0;\n    this.tempSMask = null;\n    this.suspendedCtx = null;\n    this.contentVisible = true;\n    this.markedContentStack = markedContentStack || [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n    this.cachedPatterns = new Map();\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.viewportScale = 1;\n    this.outputScaleX = 1;\n    this.outputScaleY = 1;\n    this.pageColors = pageColors;\n\n    this._cachedScaleForStroking = [-1, 0];\n    this._cachedGetSinglePixelWidth = null;\n    this._cachedBitmapsMap = new Map();\n\n    this.dependencyTracker = dependencyTracker ?? null;\n  }\n\n  getObject(opIdx, data, fallback = null) {\n    if (typeof data === \"string\") {\n      this.dependencyTracker?.recordNamedDependency(opIdx, data);\n      return data.startsWith(\"g_\")\n        ? this.commonObjs.get(data)\n        : this.objs.get(data);\n    }\n    return fallback;\n  }\n\n  beginDrawing({\n    transform,\n    viewport,\n    transparency = false,\n    background = null,\n  }) {\n    // For pdfs that use blend modes we have to clear the canvas else certain\n    // blend modes can look wrong since we'd be blending with a white\n    // backdrop. The problem with a transparent backdrop though is we then\n    // don't get sub pixel anti aliasing on text, creating temporary\n    // transparent canvas when we have blend modes.\n    const width = this.ctx.canvas.width;\n    const height = this.ctx.canvas.height;\n\n    const savedFillStyle = this.ctx.fillStyle;\n    this.ctx.fillStyle = background || \"#ffffff\";\n    this.ctx.fillRect(0, 0, width, height);\n    this.ctx.fillStyle = savedFillStyle;\n\n    if (transparency) {\n      const transparentCanvas = this.cachedCanvases.getCanvas(\n        \"transparent\",\n        width,\n        height\n      );\n      this.compositeCtx = this.ctx;\n      this.transparentCanvas = transparentCanvas.canvas;\n      this.ctx = transparentCanvas.context;\n      this.ctx.save();\n      // The transform can be applied before rendering, transferring it to\n      // the new canvas.\n      this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n    }\n\n    this.ctx.save();\n    resetCtxToDefault(this.ctx);\n    if (transform) {\n      this.ctx.transform(...transform);\n      this.outputScaleX = transform[0];\n      this.outputScaleY = transform[0];\n    }\n    this.ctx.transform(...viewport.transform);\n    this.viewportScale = viewport.scale;\n\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n\n  executeOperatorList(\n    operatorList,\n    executionStartIdx,\n    continueCallback,\n    stepper,\n    operationsFilter\n  ) {\n    const argsArray = operatorList.argsArray;\n    const fnArray = operatorList.fnArray;\n    let i = executionStartIdx || 0;\n    const argsArrayLen = argsArray.length;\n\n    // Sometimes the OperatorList to execute is empty.\n    if (argsArrayLen === i) {\n      return i;\n    }\n\n    const chunkOperations =\n      argsArrayLen - i > EXECUTION_STEPS &&\n      typeof continueCallback === \"function\";\n    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n    let steps = 0;\n\n    const commonObjs = this.commonObjs;\n    const objs = this.objs;\n    let fnId, fnArgs;\n\n    while (true) {\n      if (stepper !== undefined && i === stepper.nextBreakPoint) {\n        stepper.breakIt(i, continueCallback);\n        return i;\n      }\n\n      if (!operationsFilter || operationsFilter(i)) {\n        fnId = fnArray[i];\n        // TODO: There is a `undefined` coming from somewhere.\n        fnArgs = argsArray[i] ?? null;\n\n        if (fnId !== OPS.dependency) {\n          if (fnArgs === null) {\n            this[fnId](i);\n          } else {\n            this[fnId](i, ...fnArgs);\n          }\n        } else {\n          for (const depObjId of fnArgs) {\n            this.dependencyTracker?.recordNamedData(depObjId, i);\n            const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n            // If the promise isn't resolved yet, add the continueCallback\n            // to the promise and bail out.\n            if (!objsPool.has(depObjId)) {\n              objsPool.get(depObjId, continueCallback);\n              return i;\n            }\n          }\n        }\n      }\n\n      i++;\n\n      // If the entire operatorList was executed, stop as were done.\n      if (i === argsArrayLen) {\n        return i;\n      }\n\n      // If the execution took longer then a certain amount of time and\n      // `continueCallback` is specified, interrupt the execution.\n      if (chunkOperations && ++steps > EXECUTION_STEPS) {\n        if (Date.now() > endTime) {\n          continueCallback();\n          return i;\n        }\n        steps = 0;\n      }\n\n      // If the operatorList isn't executed completely yet OR the execution\n      // time was short enough, do another execution round.\n    }\n  }\n\n  #restoreInitialState() {\n    // Finishing all opened operations such as SMask group painting.\n    while (this.stateStack.length || this.inSMaskMode) {\n      this.restore();\n    }\n\n    this.current.activeSMask = null;\n    this.ctx.restore();\n\n    if (this.transparentCanvas) {\n      this.ctx = this.compositeCtx;\n      this.ctx.save();\n      this.ctx.setTransform(1, 0, 0, 1, 0, 0); // Avoid apply transform twice\n      this.ctx.drawImage(this.transparentCanvas, 0, 0);\n      this.ctx.restore();\n      this.transparentCanvas = null;\n    }\n  }\n\n  endDrawing() {\n    this.#restoreInitialState();\n\n    this.cachedCanvases.clear();\n    this.cachedPatterns.clear();\n\n    for (const cache of this._cachedBitmapsMap.values()) {\n      for (const canvas of cache.values()) {\n        if (\n          typeof HTMLCanvasElement !== \"undefined\" &&\n          canvas instanceof HTMLCanvasElement\n        ) {\n          canvas.width = canvas.height = 0;\n        }\n      }\n      cache.clear();\n    }\n    this._cachedBitmapsMap.clear();\n    this.#drawFilter();\n  }\n\n  #drawFilter() {\n    if (this.pageColors) {\n      const hcmFilterId = this.filterFactory.addHCMFilter(\n        this.pageColors.foreground,\n        this.pageColors.background\n      );\n      if (hcmFilterId !== \"none\") {\n        const savedFilter = this.ctx.filter;\n        this.ctx.filter = hcmFilterId;\n        this.ctx.drawImage(this.ctx.canvas, 0, 0);\n        this.ctx.filter = savedFilter;\n      }\n    }\n  }\n\n  _scaleImage(img, inverseTransform) {\n    // Vertical or horizontal scaling shall not be more than 2 to not lose the\n    // pixels during drawImage operation, painting on the temporary canvas(es)\n    // that are twice smaller in size.\n\n    // displayWidth and displayHeight are used for VideoFrame.\n    const width = img.width ?? img.displayWidth;\n    const height = img.height ?? img.displayHeight;\n    let widthScale = Math.max(\n      Math.hypot(inverseTransform[0], inverseTransform[1]),\n      1\n    );\n    let heightScale = Math.max(\n      Math.hypot(inverseTransform[2], inverseTransform[3]),\n      1\n    );\n\n    let paintWidth = width,\n      paintHeight = height;\n    let tmpCanvasId = \"prescale1\";\n    let tmpCanvas, tmpCtx;\n    while (\n      (widthScale > 2 && paintWidth > 1) ||\n      (heightScale > 2 && paintHeight > 1)\n    ) {\n      let newWidth = paintWidth,\n        newHeight = paintHeight;\n      if (widthScale > 2 && paintWidth > 1) {\n        // See bug 1820511 (Windows specific bug).\n        // TODO: once the above bug is fixed we could revert to:\n        // newWidth = Math.ceil(paintWidth / 2);\n        newWidth =\n          paintWidth >= 16384\n            ? Math.floor(paintWidth / 2) - 1 || 1\n            : Math.ceil(paintWidth / 2);\n        widthScale /= paintWidth / newWidth;\n      }\n      if (heightScale > 2 && paintHeight > 1) {\n        // TODO: see the comment above.\n        newHeight =\n          paintHeight >= 16384\n            ? Math.floor(paintHeight / 2) - 1 || 1\n            : Math.ceil(paintHeight) / 2;\n        heightScale /= paintHeight / newHeight;\n      }\n      tmpCanvas = this.cachedCanvases.getCanvas(\n        tmpCanvasId,\n        newWidth,\n        newHeight\n      );\n      tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, newWidth, newHeight);\n      tmpCtx.drawImage(\n        img,\n        0,\n        0,\n        paintWidth,\n        paintHeight,\n        0,\n        0,\n        newWidth,\n        newHeight\n      );\n      img = tmpCanvas.canvas;\n      paintWidth = newWidth;\n      paintHeight = newHeight;\n      tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n    }\n    return {\n      img,\n      paintWidth,\n      paintHeight,\n    };\n  }\n\n  _createMaskCanvas(opIdx, img) {\n    const ctx = this.ctx;\n    const { width, height } = img;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    const currentTransform = getCurrentTransform(ctx);\n\n    let cache, cacheKey, scaled, maskCanvas;\n    if ((img.bitmap || img.data) && img.count > 1) {\n      const mainKey = img.bitmap || img.data.buffer;\n      // We're reusing the same image several times, so we can cache it.\n      // In case we've a pattern fill we just keep the scaled version of\n      // the image.\n      // Only the scaling part matters, the translation part is just used\n      // to compute offsets (but not when filling patterns see #15573).\n      // TODO: handle the case of a pattern fill if it's possible.\n      cacheKey = JSON.stringify(\n        isPatternFill\n          ? currentTransform\n          : [currentTransform.slice(0, 4), fillColor]\n      );\n\n      cache = this._cachedBitmapsMap.get(mainKey);\n      if (!cache) {\n        cache = new Map();\n        this._cachedBitmapsMap.set(mainKey, cache);\n      }\n      const cachedImage = cache.get(cacheKey);\n      if (cachedImage && !isPatternFill) {\n        const offsetX = Math.round(\n          Math.min(currentTransform[0], currentTransform[2]) +\n            currentTransform[4]\n        );\n        const offsetY = Math.round(\n          Math.min(currentTransform[1], currentTransform[3]) +\n            currentTransform[5]\n        );\n\n        this.dependencyTracker?.recordDependencies(\n          opIdx,\n          Dependencies.transformAndFill\n        );\n        return {\n          canvas: cachedImage,\n          offsetX,\n          offsetY,\n        };\n      }\n      scaled = cachedImage;\n    }\n\n    if (!scaled) {\n      maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n      putBinaryImageMask(maskCanvas.context, img);\n    }\n\n    // Create the mask canvas at the size it will be drawn at and also set\n    // its transform to match the current transform so if there are any\n    // patterns applied they will be applied relative to the correct\n    // transform.\n\n    let maskToCanvas = Util.transform(currentTransform, [\n      1 / width,\n      0,\n      0,\n      -1 / height,\n      0,\n      0,\n    ]);\n    maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n    const minMax = MIN_MAX_INIT.slice();\n    Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);\n    const [minX, minY, maxX, maxY] = minMax;\n    const drawnWidth = Math.round(maxX - minX) || 1;\n    const drawnHeight = Math.round(maxY - minY) || 1;\n    const fillCanvas = this.cachedCanvases.getCanvas(\n      \"fillCanvas\",\n      drawnWidth,\n      drawnHeight\n    );\n    const fillCtx = fillCanvas.context;\n\n    // The offset will be the top-left coordinate mask.\n    // If objToCanvas is [a,b,c,d,e,f] then:\n    //   - offsetX = min(a, c) + e\n    //   - offsetY = min(b, d) + f\n    const offsetX = minX;\n    const offsetY = minY;\n    fillCtx.translate(-offsetX, -offsetY);\n    fillCtx.transform(...maskToCanvas);\n\n    if (!scaled) {\n      // Pre-scale if needed to improve image smoothing.\n      scaled = this._scaleImage(\n        maskCanvas.canvas,\n        getCurrentTransformInverse(fillCtx)\n      );\n      scaled = scaled.img;\n      if (cache && isPatternFill) {\n        cache.set(cacheKey, scaled);\n      }\n    }\n\n    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(\n      getCurrentTransform(fillCtx),\n      img.interpolate\n    );\n\n    drawImageAtIntegerCoords(\n      fillCtx,\n      scaled,\n      0,\n      0,\n      scaled.width,\n      scaled.height,\n      0,\n      0,\n      width,\n      height\n    );\n    fillCtx.globalCompositeOperation = \"source-in\";\n\n    const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [\n      1,\n      0,\n      0,\n      1,\n      -offsetX,\n      -offsetY,\n    ]);\n    fillCtx.fillStyle = isPatternFill\n      ? fillColor.getPattern(ctx, this, inverse, PathType.FILL, opIdx)\n      : fillColor;\n\n    fillCtx.fillRect(0, 0, width, height);\n\n    if (cache && !isPatternFill) {\n      // The fill canvas is put in the cache associated to the mask image\n      // so we must remove from the cached canvas: it mustn't be used again.\n      this.cachedCanvases.delete(\"fillCanvas\");\n      cache.set(cacheKey, fillCanvas.canvas);\n    }\n\n    this.dependencyTracker?.recordDependencies(\n      opIdx,\n      Dependencies.transformAndFill\n    );\n\n    // Round the offsets to avoid drawing fractional pixels.\n    return {\n      canvas: fillCanvas.canvas,\n      offsetX: Math.round(offsetX),\n      offsetY: Math.round(offsetY),\n    };\n  }\n\n  // Graphics state\n  setLineWidth(opIdx, width) {\n    this.dependencyTracker?.recordSimpleData(\"lineWidth\", opIdx);\n    if (width !== this.current.lineWidth) {\n      this._cachedScaleForStroking[0] = -1;\n    }\n    this.current.lineWidth = width;\n    this.ctx.lineWidth = width;\n  }\n\n  setLineCap(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineCap\", opIdx);\n    this.ctx.lineCap = LINE_CAP_STYLES[style];\n  }\n\n  setLineJoin(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineJoin\", opIdx);\n    this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n  }\n\n  setMiterLimit(opIdx, limit) {\n    this.dependencyTracker?.recordSimpleData(\"miterLimit\", opIdx);\n    this.ctx.miterLimit = limit;\n  }\n\n  setDash(opIdx, dashArray, dashPhase) {\n    this.dependencyTracker?.recordSimpleData(\"dash\", opIdx);\n    const ctx = this.ctx;\n    if (ctx.setLineDash !== undefined) {\n      ctx.setLineDash(dashArray);\n      ctx.lineDashOffset = dashPhase;\n    }\n  }\n\n  setRenderingIntent(opIdx, intent) {\n    // This operation is ignored since we haven't found a use case for it yet.\n  }\n\n  setFlatness(opIdx, flatness) {\n    // This operation is ignored since we haven't found a use case for it yet.\n  }\n\n  setGState(opIdx, states) {\n    for (const [key, value] of states) {\n      switch (key) {\n        case \"LW\":\n          this.setLineWidth(opIdx, value);\n          break;\n        case \"LC\":\n          this.setLineCap(opIdx, value);\n          break;\n        case \"LJ\":\n          this.setLineJoin(opIdx, value);\n          break;\n        case \"ML\":\n          this.setMiterLimit(opIdx, value);\n          break;\n        case \"D\":\n          this.setDash(opIdx, value[0], value[1]);\n          break;\n        case \"RI\":\n          this.setRenderingIntent(opIdx, value);\n          break;\n        case \"FL\":\n          this.setFlatness(opIdx, value);\n          break;\n        case \"Font\":\n          this.setFont(opIdx, value[0], value[1]);\n          break;\n        case \"CA\":\n          this.dependencyTracker?.recordSimpleData(\"strokeAlpha\", opIdx);\n          this.current.strokeAlpha = value;\n          break;\n        case \"ca\":\n          this.dependencyTracker?.recordSimpleData(\"fillAlpha\", opIdx);\n          this.ctx.globalAlpha = this.current.fillAlpha = value;\n          break;\n        case \"BM\":\n          this.dependencyTracker?.recordSimpleData(\n            \"globalCompositeOperation\",\n            opIdx\n          );\n          this.ctx.globalCompositeOperation = value;\n          break;\n        case \"SMask\":\n          this.dependencyTracker?.recordSimpleData(\"SMask\", opIdx);\n          this.current.activeSMask = value ? this.tempSMask : null;\n          this.tempSMask = null;\n          this.checkSMaskState();\n          break;\n        case \"TR\":\n          this.dependencyTracker?.recordSimpleData(\"filter\", opIdx);\n          this.ctx.filter = this.current.transferMaps =\n            this.filterFactory.addFilter(value);\n          break;\n      }\n    }\n  }\n\n  get inSMaskMode() {\n    return !!this.suspendedCtx;\n  }\n\n  checkSMaskState() {\n    const inSMaskMode = this.inSMaskMode;\n    if (this.current.activeSMask && !inSMaskMode) {\n      this.beginSMaskMode();\n    } else if (!this.current.activeSMask && inSMaskMode) {\n      this.endSMaskMode();\n    }\n    // Else, the state is okay and nothing needs to be done.\n  }\n\n  /**\n   * Soft mask mode takes the current main drawing canvas and replaces it with\n   * a temporary canvas. Any drawing operations that happen on the temporary\n   * canvas need to be composed with the main canvas that was suspended (see\n   * `compose()`). The temporary canvas also duplicates many of its operations\n   * on the suspended canvas to keep them in sync, so that when the soft mask\n   * mode ends any clipping paths or transformations will still be active and in\n   * the right order on the canvas' graphics state stack.\n   */\n  beginSMaskMode(opIdx) {\n    if (this.inSMaskMode) {\n      throw new Error(\"beginSMaskMode called while already in smask mode\");\n    }\n    const drawnWidth = this.ctx.canvas.width;\n    const drawnHeight = this.ctx.canvas.height;\n    const cacheId = \"smaskGroupAt\" + this.groupLevel;\n    const scratchCanvas = this.cachedCanvases.getCanvas(\n      cacheId,\n      drawnWidth,\n      drawnHeight\n    );\n    this.suspendedCtx = this.ctx;\n    const ctx = (this.ctx = scratchCanvas.context);\n    ctx.setTransform(this.suspendedCtx.getTransform());\n    copyCtxState(this.suspendedCtx, ctx);\n    mirrorContextOperations(ctx, this.suspendedCtx);\n\n    this.setGState(opIdx, [[\"BM\", \"source-over\"]]);\n  }\n\n  endSMaskMode() {\n    if (!this.inSMaskMode) {\n      throw new Error(\"endSMaskMode called while not in smask mode\");\n    }\n    // The soft mask is done, now restore the suspended canvas as the main\n    // drawing canvas.\n    this.ctx._removeMirroring();\n    copyCtxState(this.ctx, this.suspendedCtx);\n    this.ctx = this.suspendedCtx;\n\n    this.suspendedCtx = null;\n  }\n\n  compose(dirtyBox) {\n    if (!this.current.activeSMask) {\n      return;\n    }\n\n    if (!dirtyBox) {\n      dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n    } else {\n      dirtyBox[0] = Math.floor(dirtyBox[0]);\n      dirtyBox[1] = Math.floor(dirtyBox[1]);\n      dirtyBox[2] = Math.ceil(dirtyBox[2]);\n      dirtyBox[3] = Math.ceil(dirtyBox[3]);\n    }\n    const smask = this.current.activeSMask;\n    const suspendedCtx = this.suspendedCtx;\n\n    this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n    // Whatever was drawn has been moved to the suspended canvas, now clear it\n    // out of the current canvas.\n    this.ctx.save();\n    this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.ctx.restore();\n  }\n\n  composeSMask(ctx, smask, layerCtx, layerBox) {\n    const layerOffsetX = layerBox[0];\n    const layerOffsetY = layerBox[1];\n    const layerWidth = layerBox[2] - layerOffsetX;\n    const layerHeight = layerBox[3] - layerOffsetY;\n    if (layerWidth === 0 || layerHeight === 0) {\n      return;\n    }\n    this.genericComposeSMask(\n      smask.context,\n      layerCtx,\n      layerWidth,\n      layerHeight,\n      smask.subtype,\n      smask.backdrop,\n      smask.transferMap,\n      layerOffsetX,\n      layerOffsetY,\n      smask.offsetX,\n      smask.offsetY\n    );\n    ctx.save();\n    ctx.globalAlpha = 1;\n    ctx.globalCompositeOperation = \"source-over\";\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(layerCtx.canvas, 0, 0);\n    ctx.restore();\n  }\n\n  genericComposeSMask(\n    maskCtx,\n    layerCtx,\n    width,\n    height,\n    subtype,\n    backdrop,\n    transferMap,\n    layerOffsetX,\n    layerOffsetY,\n    maskOffsetX,\n    maskOffsetY\n  ) {\n    let maskCanvas = maskCtx.canvas;\n    let maskX = layerOffsetX - maskOffsetX;\n    let maskY = layerOffsetY - maskOffsetY;\n\n    if (backdrop) {\n      if (\n        maskX < 0 ||\n        maskY < 0 ||\n        maskX + width > maskCanvas.width ||\n        maskY + height > maskCanvas.height\n      ) {\n        const canvas = this.cachedCanvases.getCanvas(\n          \"maskExtension\",\n          width,\n          height\n        );\n        const ctx = canvas.context;\n        ctx.drawImage(maskCanvas, -maskX, -maskY);\n        ctx.globalCompositeOperation = \"destination-atop\";\n        ctx.fillStyle = backdrop;\n        ctx.fillRect(0, 0, width, height);\n        ctx.globalCompositeOperation = \"source-over\";\n\n        maskCanvas = canvas.canvas;\n        maskX = maskY = 0;\n      } else {\n        maskCtx.save();\n        maskCtx.globalAlpha = 1;\n        maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n        const clip = new Path2D();\n        clip.rect(maskX, maskY, width, height);\n        maskCtx.clip(clip);\n        maskCtx.globalCompositeOperation = \"destination-atop\";\n        maskCtx.fillStyle = backdrop;\n        maskCtx.fillRect(maskX, maskY, width, height);\n        maskCtx.restore();\n      }\n    }\n\n    layerCtx.save();\n    layerCtx.globalAlpha = 1;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n\n    if (subtype === \"Alpha\" && transferMap) {\n      layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);\n    } else if (subtype === \"Luminosity\") {\n      layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);\n    }\n\n    const clip = new Path2D();\n    clip.rect(layerOffsetX, layerOffsetY, width, height);\n    layerCtx.clip(clip);\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.drawImage(\n      maskCanvas,\n      maskX,\n      maskY,\n      width,\n      height,\n      layerOffsetX,\n      layerOffsetY,\n      width,\n      height\n    );\n    layerCtx.restore();\n  }\n\n  save(opIdx) {\n    if (this.inSMaskMode) {\n      // SMask mode may be turned on/off causing us to lose graphics state.\n      // Copy the temporary canvas state to the main(suspended) canvas to keep\n      // it in sync.\n      copyCtxState(this.ctx, this.suspendedCtx);\n    }\n    this.ctx.save();\n    const old = this.current;\n    this.stateStack.push(old);\n    this.current = old.clone();\n    this.dependencyTracker?.save(opIdx);\n  }\n\n  restore(opIdx) {\n    this.dependencyTracker?.restore(opIdx);\n\n    if (this.stateStack.length === 0) {\n      if (this.inSMaskMode) {\n        this.endSMaskMode();\n      }\n      return;\n    }\n\n    this.current = this.stateStack.pop();\n    this.ctx.restore();\n    if (this.inSMaskMode) {\n      // Graphics state is stored on the main(suspended) canvas. Restore its\n      // state then copy it over to the temporary canvas.\n      copyCtxState(this.suspendedCtx, this.ctx);\n    }\n    this.checkSMaskState();\n\n    // Ensure that the clipping path is reset (fixes issue6413.pdf).\n    this.pendingClip = null;\n\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n\n  transform(opIdx, a, b, c, d, e, f) {\n    this.dependencyTracker?.recordIncrementalData(\"transform\", opIdx);\n    this.ctx.transform(a, b, c, d, e, f);\n\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n\n  // Path\n  constructPath(opIdx, op, data, minMax) {\n    let [path] = data;\n    if (!minMax) {\n      // The path is empty, so no need to update the current minMax.\n      path ||= data[0] = new Path2D();\n      this[op](opIdx, path);\n      return;\n    }\n\n    if (this.dependencyTracker !== null) {\n      const outerExtraSize = op === OPS.stroke ? this.current.lineWidth / 2 : 0;\n      this.dependencyTracker\n        .resetBBox(opIdx)\n        .recordBBox(\n          opIdx,\n          this.ctx,\n          minMax[0] - outerExtraSize,\n          minMax[2] + outerExtraSize,\n          minMax[1] - outerExtraSize,\n          minMax[3] + outerExtraSize\n        )\n        .recordDependencies(opIdx, [\"transform\"]);\n    }\n\n    if (!(path instanceof Path2D)) {\n      // Using a SVG string is slightly slower than using the following loop.\n      const path2d = (data[0] = new Path2D());\n      for (let i = 0, ii = path.length; i < ii; ) {\n        switch (path[i++]) {\n          case DrawOPS.moveTo:\n            path2d.moveTo(path[i++], path[i++]);\n            break;\n          case DrawOPS.lineTo:\n            path2d.lineTo(path[i++], path[i++]);\n            break;\n          case DrawOPS.curveTo:\n            path2d.bezierCurveTo(\n              path[i++],\n              path[i++],\n              path[i++],\n              path[i++],\n              path[i++],\n              path[i++]\n            );\n            break;\n          case DrawOPS.closePath:\n            path2d.closePath();\n            break;\n          default:\n            warn(`Unrecognized drawing path operator: ${path[i - 1]}`);\n            break;\n        }\n      }\n      path = path2d;\n    }\n    Util.axialAlignedBoundingBox(\n      minMax,\n      getCurrentTransform(this.ctx),\n      this.current.minMax\n    );\n    this[op](opIdx, path);\n\n    this._pathStartIdx = opIdx;\n  }\n\n  closePath(opIdx) {\n    this.ctx.closePath();\n  }\n\n  stroke(opIdx, path, consumePath = true) {\n    const ctx = this.ctx;\n    const strokeColor = this.current.strokeColor;\n    // For stroke we want to temporarily change the global alpha to the\n    // stroking alpha.\n    ctx.globalAlpha = this.current.strokeAlpha;\n    if (this.contentVisible) {\n      if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n        const baseTransform = strokeColor.isModifyingCurrentTransform()\n          ? ctx.getTransform()\n          : null;\n        ctx.save();\n        ctx.strokeStyle = strokeColor.getPattern(\n          ctx,\n          this,\n          getCurrentTransformInverse(ctx),\n          PathType.STROKE,\n          opIdx\n        );\n        if (baseTransform) {\n          const newPath = new Path2D();\n          newPath.addPath(\n            path,\n            ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n          );\n          path = newPath;\n        }\n        this.rescaleAndStroke(path, /* saveRestore */ false);\n        ctx.restore();\n      } else {\n        this.rescaleAndStroke(path, /* saveRestore */ true);\n      }\n    }\n\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.stroke);\n\n    if (consumePath) {\n      this.consumePath(\n        opIdx,\n        path,\n        this.current.getClippedPathBoundingBox(\n          PathType.STROKE,\n          getCurrentTransform(this.ctx)\n        )\n      );\n    }\n\n    // Restore the global alpha to the fill alpha\n    ctx.globalAlpha = this.current.fillAlpha;\n  }\n\n  closeStroke(opIdx, path) {\n    this.stroke(opIdx, path);\n  }\n\n  fill(opIdx, path, consumePath = true) {\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    let needRestore = false;\n\n    if (isPatternFill) {\n      const baseTransform = fillColor.isModifyingCurrentTransform()\n        ? ctx.getTransform()\n        : null;\n      this.dependencyTracker?.save(opIdx);\n      ctx.save();\n      ctx.fillStyle = fillColor.getPattern(\n        ctx,\n        this,\n        getCurrentTransformInverse(ctx),\n        PathType.FILL,\n        opIdx\n      );\n      if (baseTransform) {\n        const newPath = new Path2D();\n        newPath.addPath(\n          path,\n          ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n        );\n        path = newPath;\n      }\n      needRestore = true;\n    }\n\n    const intersect = this.current.getClippedPathBoundingBox();\n    if (this.contentVisible && intersect !== null) {\n      if (this.pendingEOFill) {\n        ctx.fill(path, \"evenodd\");\n        this.pendingEOFill = false;\n      } else {\n        ctx.fill(path);\n      }\n    }\n\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.fill);\n\n    if (needRestore) {\n      ctx.restore();\n      this.dependencyTracker?.restore(opIdx);\n    }\n    if (consumePath) {\n      this.consumePath(opIdx, path, intersect);\n    }\n  }\n\n  eoFill(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fill(opIdx, path);\n  }\n\n  fillStroke(opIdx, path) {\n    this.fill(opIdx, path, false);\n    this.stroke(opIdx, path, false);\n\n    this.consumePath(opIdx, path);\n  }\n\n  eoFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n\n  closeFillStroke(opIdx, path) {\n    this.fillStroke(opIdx, path);\n  }\n\n  closeEOFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n\n  endPath(opIdx, path) {\n    this.consumePath(opIdx, path);\n  }\n\n  rawFillPath(opIdx, path) {\n    this.ctx.fill(path);\n    this.dependencyTracker\n      ?.recordDependencies(opIdx, Dependencies.rawFillPath)\n      .recordOperation(opIdx);\n  }\n\n  // Clipping\n  clip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = NORMAL_CLIP;\n  }\n\n  eoClip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = EO_CLIP;\n  }\n\n  // Text\n  beginText(opIdx) {\n    this.current.textMatrix = null;\n    this.current.textMatrixScale = 1;\n    this.current.x = this.current.lineX = 0;\n    this.current.y = this.current.lineY = 0;\n\n    this.dependencyTracker\n      ?.recordOpenMarker(opIdx)\n      .resetIncrementalData(\"sameLineText\")\n      .resetIncrementalData(\"moveText\", opIdx);\n  }\n\n  endText(opIdx) {\n    const paths = this.pendingTextPaths;\n    const ctx = this.ctx;\n\n    if (this.dependencyTracker) {\n      const { dependencyTracker } = this;\n      if (paths !== undefined) {\n        dependencyTracker\n          .recordFutureForcedDependency(\n            \"textClip\",\n            dependencyTracker.getOpenMarker()\n          )\n          .recordFutureForcedDependency(\"textClip\", opIdx);\n      }\n      dependencyTracker.recordCloseMarker(opIdx);\n    }\n\n    if (paths !== undefined) {\n      const newPath = new Path2D();\n      const invTransf = ctx.getTransform().invertSelf();\n      for (const { transform, x, y, fontSize, path } of paths) {\n        if (!path) {\n          continue; // Skip empty paths.\n        }\n        newPath.addPath(\n          path,\n          new DOMMatrix(transform)\n            .preMultiplySelf(invTransf)\n            .translate(x, y)\n            .scale(fontSize, -fontSize)\n        );\n      }\n\n      ctx.clip(newPath);\n    }\n    delete this.pendingTextPaths;\n  }\n\n  setCharSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"charSpacing\", opIdx);\n    this.current.charSpacing = spacing;\n  }\n\n  setWordSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"wordSpacing\", opIdx);\n    this.current.wordSpacing = spacing;\n  }\n\n  setHScale(opIdx, scale) {\n    this.dependencyTracker?.recordSimpleData(\"hScale\", opIdx);\n    this.current.textHScale = scale / 100;\n  }\n\n  setLeading(opIdx, leading) {\n    this.dependencyTracker?.recordSimpleData(\"leading\", opIdx);\n    this.current.leading = -leading;\n  }\n\n  setFont(opIdx, fontRefName, size) {\n    this.dependencyTracker\n      ?.recordSimpleData(\"font\", opIdx)\n      .recordSimpleDataFromNamed(\"fontObj\", fontRefName, opIdx);\n    const fontObj = this.commonObjs.get(fontRefName);\n    const current = this.current;\n\n    if (!fontObj) {\n      throw new Error(`Can't find font for ${fontRefName}`);\n    }\n    current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n\n    // A valid matrix needs all main diagonal elements to be non-zero\n    // This also ensures we bypass FF bugzilla bug #719844.\n    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n      warn(\"Invalid font matrix for font \" + fontRefName);\n    }\n\n    // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n    // and in some docs this can be negative (inverted x-y axes).\n    if (size < 0) {\n      size = -size;\n      current.fontDirection = -1;\n    } else {\n      current.fontDirection = 1;\n    }\n\n    this.current.font = fontObj;\n    this.current.fontSize = size;\n\n    if (fontObj.isType3Font) {\n      return; // we don't need ctx.font for Type3 fonts\n    }\n\n    const name = fontObj.loadedName || \"sans-serif\";\n    const typeface =\n      fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n\n    let bold = \"normal\";\n    if (fontObj.black) {\n      bold = \"900\";\n    } else if (fontObj.bold) {\n      bold = \"bold\";\n    }\n    const italic = fontObj.italic ? \"italic\" : \"normal\";\n\n    // Some font backends cannot handle fonts below certain size.\n    // Keeping the font at minimal size and using the fontSizeScale to change\n    // the current transformation matrix before the fillText/strokeText.\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n    let browserFontSize = size;\n    if (size < MIN_FONT_SIZE) {\n      browserFontSize = MIN_FONT_SIZE;\n    } else if (size > MAX_FONT_SIZE) {\n      browserFontSize = MAX_FONT_SIZE;\n    }\n    this.current.fontSizeScale = size / browserFontSize;\n\n    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n  }\n\n  setTextRenderingMode(opIdx, mode) {\n    this.dependencyTracker?.recordSimpleData(\"textRenderingMode\", opIdx);\n    this.current.textRenderingMode = mode;\n  }\n\n  setTextRise(opIdx, rise) {\n    this.dependencyTracker?.recordSimpleData(\"textRise\", opIdx);\n    this.current.textRise = rise;\n  }\n\n  moveText(opIdx, x, y) {\n    this.dependencyTracker\n      ?.resetIncrementalData(\"sameLineText\")\n      .recordIncrementalData(\"moveText\", opIdx);\n    this.current.x = this.current.lineX += x;\n    this.current.y = this.current.lineY += y;\n  }\n\n  setLeadingMoveText(opIdx, x, y) {\n    this.setLeading(opIdx, -y);\n    this.moveText(opIdx, x, y);\n  }\n\n  setTextMatrix(opIdx, matrix) {\n    this.dependencyTracker?.recordSimpleData(\"textMatrix\", opIdx);\n    const { current } = this;\n    current.textMatrix = matrix;\n    current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);\n\n    current.x = current.lineX = 0;\n    current.y = current.lineY = 0;\n  }\n\n  nextLine(opIdx) {\n    this.moveText(opIdx, 0, this.current.leading);\n\n    this.dependencyTracker?.recordIncrementalData(\n      \"moveText\",\n      // 'leading' affects 'nextLine' operations. Rather than dealing\n      // with transitive dependencies, just mark everything that depends on\n      // the 'moveText' operation as depending on the 'leading' value.\n      this.dependencyTracker.getSimpleIndex(\"leading\") ?? opIdx\n    );\n  }\n\n  #getScaledPath(path, currentTransform, transform) {\n    const newPath = new Path2D();\n    newPath.addPath(\n      path,\n      new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform)\n    );\n    return newPath;\n  }\n\n  paintChar(\n    opIdx,\n    character,\n    x,\n    y,\n    patternFillTransform,\n    patternStrokeTransform\n  ) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const textRenderingMode = current.textRenderingMode;\n    const fontSize = current.fontSize / current.fontSizeScale;\n    const fillStrokeMode =\n      textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const isAddToPathSet = !!(\n      textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n    );\n    const patternFill = current.patternFill && !font.missingFile;\n    const patternStroke = current.patternStroke && !font.missingFile;\n\n    let path;\n    if (\n      (font.disableFontFace ||\n        isAddToPathSet ||\n        patternFill ||\n        patternStroke) &&\n      !font.missingFile\n    ) {\n      path = font.getPathGenerator(this.commonObjs, character);\n    }\n\n    if (path && (font.disableFontFace || patternFill || patternStroke)) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.scale(fontSize, -fontSize);\n\n      this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font);\n\n      let currentTransform;\n      if (\n        fillStrokeMode === TextRenderingMode.FILL ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        if (patternFillTransform) {\n          currentTransform = ctx.getTransform();\n          ctx.setTransform(...patternFillTransform);\n          const scaledPath = this.#getScaledPath(\n            path,\n            currentTransform,\n            patternFillTransform\n          );\n          ctx.fill(scaledPath);\n        } else {\n          ctx.fill(path);\n        }\n      }\n      if (\n        fillStrokeMode === TextRenderingMode.STROKE ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        if (patternStrokeTransform) {\n          currentTransform ||= ctx.getTransform();\n          ctx.setTransform(...patternStrokeTransform);\n          const { a, b, c, d } = currentTransform;\n          const invPatternTransform = Util.inverseTransform(\n            patternStrokeTransform\n          );\n          const transf = Util.transform(\n            [a, b, c, d, 0, 0],\n            invPatternTransform\n          );\n          Util.singularValueDecompose2dScale(transf, XY);\n\n          // Cancel the pattern scaling of the line width.\n          // If sx and sy are different, unfortunately we can't do anything and\n          // we'll have a rendering bug.\n          ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;\n          ctx.stroke(\n            this.#getScaledPath(path, currentTransform, patternStrokeTransform)\n          );\n        } else {\n          ctx.lineWidth /= fontSize;\n          ctx.stroke(path);\n        }\n      }\n      ctx.restore();\n    } else {\n      if (\n        fillStrokeMode === TextRenderingMode.FILL ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        ctx.fillText(character, x, y);\n        this.dependencyTracker?.recordCharacterBBox(\n          opIdx,\n          ctx,\n          font,\n          fontSize,\n          x,\n          y,\n          () => ctx.measureText(character)\n        );\n      }\n      if (\n        fillStrokeMode === TextRenderingMode.STROKE ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        if (this.dependencyTracker) {\n          this.dependencyTracker\n            ?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () =>\n              ctx.measureText(character)\n            )\n            .recordDependencies(opIdx, Dependencies.stroke);\n        }\n        ctx.strokeText(character, x, y);\n      }\n    }\n\n    if (isAddToPathSet) {\n      const paths = (this.pendingTextPaths ||= []);\n      paths.push({\n        transform: getCurrentTransform(ctx),\n        x,\n        y,\n        fontSize,\n        path,\n      });\n      this.dependencyTracker?.recordCharacterBBox(\n        opIdx,\n        ctx,\n        font,\n        fontSize,\n        x,\n        y\n      );\n    }\n  }\n\n  get isFontSubpixelAAEnabled() {\n    // Checks if anti-aliasing is enabled when scaled text is painted.\n    // On Windows GDI scaled fonts looks bad.\n    const { context: ctx } = this.cachedCanvases.getCanvas(\n      \"isFontSubpixelAAEnabled\",\n      10,\n      10\n    );\n    ctx.scale(1.5, 1);\n    ctx.fillText(\"I\", 0, 10);\n    const data = ctx.getImageData(0, 0, 10, 10).data;\n    let enabled = false;\n    for (let i = 3; i < data.length; i += 4) {\n      if (data[i] > 0 && data[i] < 255) {\n        enabled = true;\n        break;\n      }\n    }\n    return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n  }\n\n  showText(opIdx, glyphs) {\n    if (this.dependencyTracker) {\n      this.dependencyTracker\n        .recordDependencies(opIdx, Dependencies.showText)\n        .resetBBox(opIdx);\n      if (this.current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) {\n        this.dependencyTracker\n          .recordFutureForcedDependency(\"textClip\", opIdx)\n          .inheritPendingDependenciesAsFutureForcedDependencies();\n      }\n    }\n\n    const current = this.current;\n    const font = current.font;\n    if (font.isType3Font) {\n      this.showType3Text(opIdx, glyphs);\n      this.dependencyTracker?.recordShowTextOperation(opIdx);\n      return undefined;\n    }\n\n    const fontSize = current.fontSize;\n    if (fontSize === 0) {\n      this.dependencyTracker?.recordOperation(opIdx);\n      return undefined;\n    }\n\n    const ctx = this.ctx;\n    const fontSizeScale = current.fontSizeScale;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const fontDirection = current.fontDirection;\n    const textHScale = current.textHScale * fontDirection;\n    const glyphsLength = glyphs.length;\n    const vertical = font.vertical;\n    const spacingDir = vertical ? 1 : -1;\n    const defaultVMetrics = font.defaultVMetrics;\n    const widthAdvanceScale = fontSize * current.fontMatrix[0];\n\n    const simpleFillText =\n      current.textRenderingMode === TextRenderingMode.FILL &&\n      !font.disableFontFace &&\n      !current.patternFill;\n\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n\n    if (fontDirection > 0) {\n      ctx.scale(textHScale, -1);\n    } else {\n      ctx.scale(textHScale, 1);\n    }\n\n    let patternFillTransform, patternStrokeTransform;\n    if (current.patternFill) {\n      ctx.save();\n      const pattern = current.fillColor.getPattern(\n        ctx,\n        this,\n        getCurrentTransformInverse(ctx),\n        PathType.FILL,\n        opIdx\n      );\n      patternFillTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.fillStyle = pattern;\n    }\n\n    if (current.patternStroke) {\n      ctx.save();\n      const pattern = current.strokeColor.getPattern(\n        ctx,\n        this,\n        getCurrentTransformInverse(ctx),\n        PathType.STROKE,\n        opIdx\n      );\n      patternStrokeTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.strokeStyle = pattern;\n    }\n\n    let lineWidth = current.lineWidth;\n    const scale = current.textMatrixScale;\n    if (scale === 0 || lineWidth === 0) {\n      const fillStrokeMode =\n        current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n      if (\n        fillStrokeMode === TextRenderingMode.STROKE ||\n        fillStrokeMode === TextRenderingMode.FILL_STROKE\n      ) {\n        lineWidth = this.getSinglePixelWidth();\n      }\n    } else {\n      lineWidth /= scale;\n    }\n\n    if (fontSizeScale !== 1.0) {\n      ctx.scale(fontSizeScale, fontSizeScale);\n      lineWidth /= fontSizeScale;\n    }\n\n    ctx.lineWidth = lineWidth;\n\n    if (font.isInvalidPDFjsFont) {\n      const chars = [];\n      let width = 0;\n      for (const glyph of glyphs) {\n        chars.push(glyph.unicode);\n        width += glyph.width;\n      }\n      const joinedChars = chars.join(\"\");\n      ctx.fillText(joinedChars, 0, 0);\n      if (this.dependencyTracker !== null) {\n        const measure = ctx.measureText(joinedChars);\n        this.dependencyTracker\n          .recordBBox(\n            opIdx,\n            this.ctx,\n            -measure.actualBoundingBoxLeft,\n            measure.actualBoundingBoxRight,\n            -measure.actualBoundingBoxAscent,\n            measure.actualBoundingBoxDescent\n          )\n          .recordShowTextOperation(opIdx);\n      }\n      current.x += width * widthAdvanceScale * textHScale;\n      ctx.restore();\n      this.compose();\n      return undefined;\n    }\n\n    let x = 0,\n      i;\n    for (i = 0; i < glyphsLength; ++i) {\n      const glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        x += (spacingDir * glyph * fontSize) / 1000;\n        continue;\n      }\n\n      let restoreNeeded = false;\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const character = glyph.fontChar;\n      const accent = glyph.accent;\n      let scaledX, scaledY;\n      let width = glyph.width;\n      if (vertical) {\n        const vmetric = glyph.vmetric || defaultVMetrics;\n        const vx =\n          -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n        const vy = vmetric[2] * widthAdvanceScale;\n\n        width = vmetric ? -vmetric[0] : width;\n        scaledX = vx / fontSizeScale;\n        scaledY = (x + vy) / fontSizeScale;\n      } else {\n        scaledX = x / fontSizeScale;\n        scaledY = 0;\n      }\n\n      let measure;\n\n      if (font.remeasure && width > 0) {\n        measure = ctx.measureText(character);\n\n        // Some standard fonts may not have the exact width: rescale per\n        // character if measured width is greater than expected glyph width\n        // and subpixel-aa is enabled, otherwise just center the glyph.\n        const measuredWidth =\n          ((measure.width * 1000) / fontSize) * fontSizeScale;\n        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n          const characterScaleX = width / measuredWidth;\n          restoreNeeded = true;\n          ctx.save();\n          ctx.scale(characterScaleX, 1);\n          scaledX /= characterScaleX;\n        } else if (width !== measuredWidth) {\n          scaledX +=\n            (((width - measuredWidth) / 2000) * fontSize) / fontSizeScale;\n        }\n      }\n\n      // Only attempt to draw the glyph if it is actually in the embedded font\n      // file or if there isn't a font file so the fallback font is shown.\n      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n        if (simpleFillText && !accent) {\n          // common case\n          ctx.fillText(character, scaledX, scaledY);\n\n          this.dependencyTracker?.recordCharacterBBox(\n            opIdx,\n            ctx,\n            // If we already measured the character, force usage of that\n            measure ? { bbox: null } : font,\n            fontSize / fontSizeScale,\n            scaledX,\n            scaledY,\n            () => measure ?? ctx.measureText(character)\n          );\n        } else {\n          this.paintChar(\n            opIdx,\n            character,\n            scaledX,\n            scaledY,\n            patternFillTransform,\n            patternStrokeTransform\n          );\n          if (accent) {\n            const scaledAccentX =\n              scaledX + (fontSize * accent.offset.x) / fontSizeScale;\n            const scaledAccentY =\n              scaledY - (fontSize * accent.offset.y) / fontSizeScale;\n            this.paintChar(\n              opIdx,\n              accent.fontChar,\n              scaledAccentX,\n              scaledAccentY,\n              patternFillTransform,\n              patternStrokeTransform\n            );\n          }\n        }\n      }\n\n      const charWidth = vertical\n        ? width * widthAdvanceScale - spacing * fontDirection\n        : width * widthAdvanceScale + spacing * fontDirection;\n      x += charWidth;\n\n      if (restoreNeeded) {\n        ctx.restore();\n      }\n    }\n    if (vertical) {\n      current.y -= x;\n    } else {\n      current.x += x * textHScale;\n    }\n    ctx.restore();\n    this.compose();\n\n    this.dependencyTracker?.recordShowTextOperation(opIdx);\n    return undefined;\n  }\n\n  showType3Text(opIdx, glyphs) {\n    // Type3 fonts - each glyph is a \"mini-PDF\"\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const fontSize = current.fontSize;\n    const fontDirection = current.fontDirection;\n    const spacingDir = font.vertical ? 1 : -1;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const textHScale = current.textHScale * fontDirection;\n    const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n    const glyphsLength = glyphs.length;\n    const isTextInvisible =\n      current.textRenderingMode === TextRenderingMode.INVISIBLE;\n    let i, glyph, width, spacingLength;\n\n    if (isTextInvisible || fontSize === 0) {\n      return;\n    }\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n\n    ctx.scale(textHScale, fontDirection);\n\n    // Type3 fonts have their own operator list. Avoid mixing it up with the\n    // dependency tracker of the main operator list.\n    const dependencyTracker = this.dependencyTracker;\n    this.dependencyTracker = dependencyTracker\n      ? new CanvasNestedDependencyTracker(dependencyTracker, opIdx)\n      : null;\n\n    for (i = 0; i < glyphsLength; ++i) {\n      glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        spacingLength = (spacingDir * glyph * fontSize) / 1000;\n        this.ctx.translate(spacingLength, 0);\n        current.x += spacingLength * textHScale;\n        continue;\n      }\n\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const operatorList = font.charProcOperatorList[glyph.operatorListId];\n      if (!operatorList) {\n        warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n      } else if (this.contentVisible) {\n        this.save();\n        ctx.scale(fontSize, fontSize);\n        ctx.transform(...fontMatrix);\n        this.executeOperatorList(operatorList);\n        this.restore();\n      }\n\n      const p = [glyph.width, 0];\n      Util.applyTransform(p, fontMatrix);\n      width = p[0] * fontSize + spacing;\n\n      ctx.translate(width, 0);\n      current.x += width * textHScale;\n    }\n    ctx.restore();\n    if (dependencyTracker) {\n      this.dependencyTracker = dependencyTracker;\n    }\n  }\n\n  // Type3 fonts\n  setCharWidth(opIdx, xWidth, yWidth) {\n    // We can safely ignore this since the width should be the same\n    // as the width in the Widths array.\n  }\n\n  setCharWidthAndBounds(opIdx, xWidth, yWidth, llx, lly, urx, ury) {\n    const clip = new Path2D();\n    clip.rect(llx, lly, urx - llx, ury - lly);\n    this.ctx.clip(clip);\n    this.dependencyTracker\n      ?.recordBBox(opIdx, this.ctx, llx, urx, lly, ury)\n      .recordClipBox(opIdx, this.ctx, llx, urx, lly, ury);\n    this.endPath(opIdx);\n  }\n\n  // Color\n  getColorN_Pattern(opIdx, IR) {\n    let pattern;\n    if (IR[0] === \"TilingPattern\") {\n      const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n      const canvasGraphicsFactory = {\n        createCanvasGraphics: (ctx, renderingOpIdx) =>\n          new CanvasGraphics(\n            ctx,\n            this.commonObjs,\n            this.objs,\n            this.canvasFactory,\n            this.filterFactory,\n            {\n              optionalContentConfig: this.optionalContentConfig,\n              markedContentStack: this.markedContentStack,\n            },\n            undefined,\n            undefined,\n            this.dependencyTracker\n              ? new CanvasNestedDependencyTracker(\n                  this.dependencyTracker,\n                  renderingOpIdx,\n                  /* ignoreBBoxes */ true\n                )\n              : null\n          ),\n      };\n      pattern = new TilingPattern(\n        IR,\n        this.ctx,\n        canvasGraphicsFactory,\n        baseTransform\n      );\n    } else {\n      pattern = this._getPattern(opIdx, IR[1], IR[2]);\n    }\n    return pattern;\n  }\n\n  setStrokeColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.current.strokeColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternStroke = true;\n  }\n\n  setFillColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.current.fillColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternFill = true;\n  }\n\n  setStrokeRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = color;\n    this.current.patternStroke = false;\n  }\n\n  setStrokeTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n    this.current.patternStroke = false;\n  }\n\n  setFillRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = color;\n    this.current.patternFill = false;\n  }\n\n  setFillTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = \"transparent\";\n    this.current.patternFill = false;\n  }\n\n  _getPattern(opIdx, objId, matrix = null) {\n    let pattern;\n    if (this.cachedPatterns.has(objId)) {\n      pattern = this.cachedPatterns.get(objId);\n    } else {\n      pattern = getShadingPattern(this.getObject(opIdx, objId));\n      this.cachedPatterns.set(objId, pattern);\n    }\n    if (matrix) {\n      pattern.matrix = matrix;\n    }\n    return pattern;\n  }\n\n  shadingFill(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n\n    this.save(opIdx);\n    const pattern = this._getPattern(opIdx, objId);\n    ctx.fillStyle = pattern.getPattern(\n      ctx,\n      this,\n      getCurrentTransformInverse(ctx),\n      PathType.SHADING,\n      opIdx\n    );\n\n    const inv = getCurrentTransformInverse(ctx);\n    if (inv) {\n      const { width, height } = ctx.canvas;\n      const minMax = MIN_MAX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);\n      const [x0, y0, x1, y1] = minMax;\n\n      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n    } else {\n      // HACK to draw the gradient onto an infinite rectangle.\n      // PDF gradients are drawn across the entire image while\n      // Canvas only allows gradients to be drawn in a rectangle\n      // The following bug should allow us to remove this.\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n    }\n\n    this.dependencyTracker\n      ?.resetBBox(opIdx)\n      // TODO: Track proper bbox\n      .recordFullPageBBox(opIdx)\n      .recordDependencies(opIdx, Dependencies.transform)\n      .recordDependencies(opIdx, Dependencies.fill)\n      .recordOperation(opIdx);\n\n    this.compose(this.current.getClippedPathBoundingBox());\n    this.restore(opIdx);\n  }\n\n  // Images\n  beginInlineImage() {\n    unreachable(\"Should not call beginInlineImage\");\n  }\n\n  beginImageData() {\n    unreachable(\"Should not call beginImageData\");\n  }\n\n  paintFormXObjectBegin(opIdx, matrix, bbox) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save(opIdx);\n    this.baseTransformStack.push(this.baseTransform);\n\n    if (matrix) {\n      this.transform(opIdx, ...matrix);\n    }\n    this.baseTransform = getCurrentTransform(this.ctx);\n\n    if (bbox) {\n      Util.axialAlignedBoundingBox(\n        bbox,\n        this.baseTransform,\n        this.current.minMax\n      );\n      const [x0, y0, x1, y1] = bbox;\n      const clip = new Path2D();\n      clip.rect(x0, y0, x1 - x0, y1 - y0);\n      this.ctx.clip(clip);\n      this.dependencyTracker?.recordClipBox(opIdx, this.ctx, x0, x1, y0, y1);\n      this.endPath(opIdx);\n    }\n  }\n\n  paintFormXObjectEnd(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.restore(opIdx);\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n\n  beginGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n\n    this.save(opIdx);\n    // If there's an active soft mask we don't want it enabled for the group, so\n    // clear it out. The mask and suspended canvas will be restored in endGroup.\n    if (this.inSMaskMode) {\n      this.endSMaskMode();\n      this.current.activeSMask = null;\n    }\n\n    const currentCtx = this.ctx;\n    // TODO non-isolated groups - according to Rik at adobe non-isolated\n    // group results aren't usually that different and they even have tools\n    // that ignore this setting. Notes from Rik on implementing:\n    // - When you encounter an transparency group, create a new canvas with\n    // the dimensions of the bbox\n    // - copy the content from the previous canvas to the new canvas\n    // - draw as usual\n    // - remove the backdrop alpha:\n    // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n    // value of your transparency group and 'alphaBackdrop' the alpha of the\n    // backdrop\n    // - remove background color:\n    // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n    if (!group.isolated) {\n      info(\"TODO: Support non-isolated groups.\");\n    }\n\n    // TODO knockout - supposedly possible with the clever use of compositing\n    // modes.\n    if (group.knockout) {\n      warn(\"Knockout groups not supported.\");\n    }\n\n    const currentTransform = getCurrentTransform(currentCtx);\n    if (group.matrix) {\n      currentCtx.transform(...group.matrix);\n    }\n    if (!group.bbox) {\n      throw new Error(\"Bounding box is required.\");\n    }\n\n    // Based on the current transform figure out how big the bounding box\n    // will actually be.\n    let bounds = MIN_MAX_INIT.slice();\n    Util.axialAlignedBoundingBox(\n      group.bbox,\n      getCurrentTransform(currentCtx),\n      bounds\n    );\n\n    // Clip the bounding box to the current canvas.\n    const canvasBounds = [\n      0,\n      0,\n      currentCtx.canvas.width,\n      currentCtx.canvas.height,\n    ];\n    bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n    // Use ceil in case we're between sizes so we don't create canvas that is\n    // too small and make the canvas at least 1x1 pixels.\n    const offsetX = Math.floor(bounds[0]);\n    const offsetY = Math.floor(bounds[1]);\n    const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n    const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n\n    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n\n    let cacheId = \"groupAt\" + this.groupLevel;\n    if (group.smask) {\n      // Using two cache entries is case if masks are used one after another.\n      cacheId += \"_smask_\" + (this.smaskCounter++ % 2);\n    }\n    const scratchCanvas = this.cachedCanvases.getCanvas(\n      cacheId,\n      drawnWidth,\n      drawnHeight\n    );\n    const groupCtx = scratchCanvas.context;\n\n    // Since we created a new canvas that is just the size of the bounding box\n    // we have to translate the group ctx.\n    groupCtx.translate(-offsetX, -offsetY);\n    groupCtx.transform(...currentTransform);\n\n    // Apply the bbox to the group context.\n    let clip = new Path2D();\n    const [x0, y0, x1, y1] = group.bbox;\n    clip.rect(x0, y0, x1 - x0, y1 - y0);\n    if (group.matrix) {\n      const path = new Path2D();\n      path.addPath(clip, new DOMMatrix(group.matrix));\n      clip = path;\n    }\n    groupCtx.clip(clip);\n\n    if (group.smask) {\n      // Saving state and cached mask to be used in setGState.\n      this.smaskStack.push({\n        canvas: scratchCanvas.canvas,\n        context: groupCtx,\n        offsetX,\n        offsetY,\n        subtype: group.smask.subtype,\n        backdrop: group.smask.backdrop,\n        transferMap: group.smask.transferMap || null,\n        startTransformInverse: null, // used during suspend operation\n      });\n    }\n    if (\n      !group.smask ||\n      // When this is not an SMask group, we only need to update the current\n      // transform if recording operations bboxes, so they the bboxes have the\n      // correct transform applied.\n      this.dependencyTracker\n    ) {\n      // Setup the current ctx so when the group is popped we draw it at the\n      // right location.\n      currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n      currentCtx.translate(offsetX, offsetY);\n      currentCtx.save();\n    }\n    // The transparency group inherits all off the current graphics state\n    // except the blend mode, soft mask, and alpha constants.\n    copyCtxState(currentCtx, groupCtx);\n    this.ctx = groupCtx;\n    this.dependencyTracker\n      ?.inheritSimpleDataAsFutureForcedDependencies([\n        \"fillAlpha\",\n        \"strokeAlpha\",\n        \"globalCompositeOperation\",\n      ])\n      .pushBaseTransform(currentCtx);\n    this.setGState(opIdx, [\n      [\"BM\", \"source-over\"],\n      [\"ca\", 1],\n      [\"CA\", 1],\n    ]);\n    this.groupStack.push(currentCtx);\n    this.groupLevel++;\n  }\n\n  endGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.groupLevel--;\n    const groupCtx = this.ctx;\n    const ctx = this.groupStack.pop();\n    this.ctx = ctx;\n    // Turn off image smoothing to avoid sub pixel interpolation which can\n    // look kind of blurry for some pdfs.\n    this.ctx.imageSmoothingEnabled = false;\n\n    this.dependencyTracker?.popBaseTransform();\n\n    if (group.smask) {\n      this.tempSMask = this.smaskStack.pop();\n      this.restore(opIdx);\n      if (this.dependencyTracker) {\n        this.ctx.restore();\n      }\n    } else {\n      this.ctx.restore();\n      const currentMtx = getCurrentTransform(this.ctx);\n      this.restore(opIdx);\n      this.ctx.save();\n      this.ctx.setTransform(...currentMtx);\n      const dirtyBox = MIN_MAX_INIT.slice();\n      Util.axialAlignedBoundingBox(\n        [0, 0, groupCtx.canvas.width, groupCtx.canvas.height],\n        currentMtx,\n        dirtyBox\n      );\n      this.ctx.drawImage(groupCtx.canvas, 0, 0);\n      this.ctx.restore();\n      this.compose(dirtyBox);\n    }\n  }\n\n  beginAnnotation(opIdx, id, rect, transform, matrix, hasOwnCanvas) {\n    // The annotations are drawn just after the page content.\n    // The page content drawing can potentially have set a transform,\n    // a clipping path, whatever...\n    // So in order to have something clean, we restore the initial state.\n    this.#restoreInitialState();\n    resetCtxToDefault(this.ctx);\n\n    this.ctx.save();\n    this.save(opIdx);\n\n    if (this.baseTransform) {\n      this.ctx.setTransform(...this.baseTransform);\n    }\n\n    if (rect) {\n      const width = rect[2] - rect[0];\n      const height = rect[3] - rect[1];\n\n      if (hasOwnCanvas && this.annotationCanvasMap) {\n        transform = transform.slice();\n        transform[4] -= rect[0];\n        transform[5] -= rect[1];\n\n        rect = rect.slice();\n        rect[0] = rect[1] = 0;\n        rect[2] = width;\n        rect[3] = height;\n\n        Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);\n        const { viewportScale } = this;\n        const canvasWidth = Math.ceil(\n          width * this.outputScaleX * viewportScale\n        );\n        const canvasHeight = Math.ceil(\n          height * this.outputScaleY * viewportScale\n        );\n\n        this.annotationCanvas = this.canvasFactory.create(\n          canvasWidth,\n          canvasHeight\n        );\n        const { canvas, context } = this.annotationCanvas;\n        this.annotationCanvasMap.set(id, canvas);\n        this.annotationCanvas.savedCtx = this.ctx;\n        this.ctx = context;\n        this.ctx.save();\n        this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);\n\n        resetCtxToDefault(this.ctx);\n      } else {\n        resetCtxToDefault(this.ctx);\n\n        // Consume a potential path before clipping.\n        this.endPath(opIdx);\n\n        const clip = new Path2D();\n        clip.rect(rect[0], rect[1], width, height);\n        this.ctx.clip(clip);\n      }\n    }\n\n    this.current = new CanvasExtraState(\n      this.ctx.canvas.width,\n      this.ctx.canvas.height\n    );\n\n    this.transform(opIdx, ...transform);\n    this.transform(opIdx, ...matrix);\n  }\n\n  endAnnotation(opIdx) {\n    if (this.annotationCanvas) {\n      this.ctx.restore();\n      this.#drawFilter();\n\n      this.ctx = this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas;\n    }\n  }\n\n  paintImageMaskXObject(opIdx, img) {\n    if (!this.contentVisible) {\n      return;\n    }\n\n    const count = img.count;\n    img = this.getObject(opIdx, img.data, img);\n    img.count = count;\n\n    const ctx = this.ctx;\n    const mask = this._createMaskCanvas(opIdx, img);\n    const maskCanvas = mask.canvas;\n\n    ctx.save();\n    // The mask is drawn with the transform applied. Reset the current\n    // transform to draw to the identity.\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n    this.dependencyTracker\n      ?.resetBBox(opIdx)\n      .recordBBox(\n        opIdx,\n        this.ctx,\n        mask.offsetX,\n        mask.offsetX + maskCanvas.width,\n        mask.offsetY,\n        mask.offsetY + maskCanvas.height\n      )\n      .recordOperation(opIdx);\n    ctx.restore();\n    this.compose();\n  }\n\n  paintImageMaskXObjectRepeat(\n    opIdx,\n    img,\n    scaleX,\n    skewX = 0,\n    skewY = 0,\n    scaleY,\n    positions\n  ) {\n    if (!this.contentVisible) {\n      return;\n    }\n\n    img = this.getObject(opIdx, img.data, img);\n\n    const ctx = this.ctx;\n    ctx.save();\n    const currentTransform = getCurrentTransform(ctx);\n    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n    const mask = this._createMaskCanvas(opIdx, img);\n\n    ctx.setTransform(\n      1,\n      0,\n      0,\n      1,\n      mask.offsetX - currentTransform[4],\n      mask.offsetY - currentTransform[5]\n    );\n    this.dependencyTracker?.resetBBox(opIdx);\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      const trans = Util.transform(currentTransform, [\n        scaleX,\n        skewX,\n        skewY,\n        scaleY,\n        positions[i],\n        positions[i + 1],\n      ]);\n\n      // Here we want to apply the transform at the origin,\n      // hence no additional computation is necessary.\n      ctx.drawImage(mask.canvas, trans[4], trans[5]);\n      this.dependencyTracker?.recordBBox(\n        opIdx,\n        this.ctx,\n        trans[4],\n        trans[4] + mask.canvas.width,\n        trans[5],\n        trans[5] + mask.canvas.height\n      );\n    }\n    ctx.restore();\n    this.compose();\n\n    this.dependencyTracker?.recordOperation(opIdx);\n  }\n\n  paintImageMaskXObjectGroup(opIdx, images) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n\n    this.dependencyTracker\n      ?.resetBBox(opIdx)\n      .recordDependencies(opIdx, Dependencies.transformAndFill);\n\n    for (const image of images) {\n      const { data, width, height, transform } = image;\n\n      const maskCanvas = this.cachedCanvases.getCanvas(\n        \"maskCanvas\",\n        width,\n        height\n      );\n      const maskCtx = maskCanvas.context;\n      maskCtx.save();\n\n      const img = this.getObject(opIdx, data, image);\n      putBinaryImageMask(maskCtx, img);\n\n      maskCtx.globalCompositeOperation = \"source-in\";\n\n      maskCtx.fillStyle = isPatternFill\n        ? fillColor.getPattern(\n            maskCtx,\n            this,\n            getCurrentTransformInverse(ctx),\n            PathType.FILL,\n            opIdx\n          )\n        : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n\n      maskCtx.restore();\n\n      ctx.save();\n      ctx.transform(...transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(\n        ctx,\n        maskCanvas.canvas,\n        0,\n        0,\n        width,\n        height,\n        0,\n        -1,\n        1,\n        1\n      );\n\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, width, 0, height);\n      ctx.restore();\n    }\n    this.compose();\n    this.dependencyTracker?.recordOperation(opIdx);\n  }\n\n  paintImageXObject(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n\n    this.paintInlineImageXObject(opIdx, imgData);\n  }\n\n  paintImageXObjectRepeat(opIdx, objId, scaleX, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n\n    const width = imgData.width;\n    const height = imgData.height;\n    const map = [];\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      map.push({\n        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n        x: 0,\n        y: 0,\n        w: width,\n        h: height,\n      });\n    }\n    this.paintInlineImageXObjectGroup(opIdx, imgData, map);\n  }\n\n  applyTransferMapsToCanvas(ctx) {\n    if (this.current.transferMaps !== \"none\") {\n      ctx.filter = this.current.transferMaps;\n      ctx.drawImage(ctx.canvas, 0, 0);\n      ctx.filter = \"none\";\n    }\n    return ctx.canvas;\n  }\n\n  applyTransferMapsToBitmap(imgData) {\n    if (this.current.transferMaps === \"none\") {\n      return imgData.bitmap;\n    }\n    const { bitmap, width, height } = imgData;\n    const tmpCanvas = this.cachedCanvases.getCanvas(\n      \"inlineImage\",\n      width,\n      height\n    );\n    const tmpCtx = tmpCanvas.context;\n    tmpCtx.filter = this.current.transferMaps;\n    tmpCtx.drawImage(bitmap, 0, 0);\n    tmpCtx.filter = \"none\";\n\n    return tmpCanvas.canvas;\n  }\n\n  paintInlineImageXObject(opIdx, imgData) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const ctx = this.ctx;\n\n    this.save(opIdx);\n\n    // The filter, if any, will be applied in applyTransferMapsToBitmap.\n    // It must be applied to the image before rescaling else some artifacts\n    // could appear.\n    // The final restore will reset it to its value.\n    const { filter } = ctx;\n    if (filter !== \"none\" && filter !== \"\") {\n      ctx.filter = \"none\";\n    }\n\n    // scale the image to the unit square\n    ctx.scale(1 / width, -1 / height);\n\n    let imgToPaint;\n    if (imgData.bitmap) {\n      imgToPaint = this.applyTransferMapsToBitmap(imgData);\n    } else if (\n      (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement) ||\n      !imgData.data\n    ) {\n      // typeof check is needed due to node.js support, see issue #8489\n      imgToPaint = imgData;\n    } else {\n      const tmpCanvas = this.cachedCanvases.getCanvas(\n        \"inlineImage\",\n        width,\n        height\n      );\n      const tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n    }\n\n    const scaled = this._scaleImage(\n      imgToPaint,\n      getCurrentTransformInverse(ctx)\n    );\n    ctx.imageSmoothingEnabled = getImageSmoothingEnabled(\n      getCurrentTransform(ctx),\n      imgData.interpolate\n    );\n\n    this.dependencyTracker\n      ?.resetBBox(opIdx)\n      .recordBBox(opIdx, ctx, 0, width, -height, 0)\n      .recordDependencies(opIdx, Dependencies.imageXObject)\n      .recordOperation(opIdx);\n\n    drawImageAtIntegerCoords(\n      ctx,\n      scaled.img,\n      0,\n      0,\n      scaled.paintWidth,\n      scaled.paintHeight,\n      0,\n      -height,\n      width,\n      height\n    );\n    this.compose();\n    this.restore(opIdx);\n  }\n\n  paintInlineImageXObjectGroup(opIdx, imgData, map) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n    let imgToPaint;\n    if (imgData.bitmap) {\n      imgToPaint = imgData.bitmap;\n    } else {\n      const w = imgData.width;\n      const h = imgData.height;\n\n      const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n      const tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n    }\n\n    this.dependencyTracker?.resetBBox(opIdx);\n\n    for (const entry of map) {\n      ctx.save();\n      ctx.transform(...entry.transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(\n        ctx,\n        imgToPaint,\n        entry.x,\n        entry.y,\n        entry.w,\n        entry.h,\n        0,\n        -1,\n        1,\n        1\n      );\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, 1, -1, 0);\n      ctx.restore();\n    }\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.compose();\n  }\n\n  paintSolidColorImageMask(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.dependencyTracker\n      ?.resetBBox(opIdx)\n      .recordBBox(opIdx, this.ctx, 0, 1, 0, 1)\n      .recordDependencies(opIdx, Dependencies.fill)\n      .recordOperation(opIdx);\n    this.ctx.fillRect(0, 0, 1, 1);\n    this.compose();\n  }\n\n  // Marked content\n\n  markPoint(opIdx, tag) {\n    // TODO Marked content.\n  }\n\n  markPointProps(opIdx, tag, properties) {\n    // TODO Marked content.\n  }\n\n  beginMarkedContent(opIdx, tag) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    this.markedContentStack.push({\n      visible: true,\n    });\n  }\n\n  beginMarkedContentProps(opIdx, tag, properties) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    if (tag === \"OC\") {\n      this.markedContentStack.push({\n        visible: this.optionalContentConfig.isVisible(properties),\n      });\n    } else {\n      this.markedContentStack.push({\n        visible: true,\n      });\n    }\n    this.contentVisible = this.isContentVisible();\n  }\n\n  endMarkedContent(opIdx) {\n    this.dependencyTracker?.endMarkedContent(opIdx);\n    this.markedContentStack.pop();\n    this.contentVisible = this.isContentVisible();\n  }\n\n  // Compatibility\n\n  beginCompat(opIdx) {\n    // TODO ignore undefined operators (should we do that anyway?)\n  }\n\n  endCompat(opIdx) {\n    // TODO stop ignoring undefined operators\n  }\n\n  // Helper functions\n\n  consumePath(opIdx, path, clipBox) {\n    const isEmpty = this.current.isEmptyClip();\n    if (this.pendingClip) {\n      this.current.updateClipFromPath();\n    }\n    if (!this.pendingClip) {\n      this.compose(clipBox);\n    }\n    const ctx = this.ctx;\n    if (this.pendingClip) {\n      if (!isEmpty) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(path, \"evenodd\");\n        } else {\n          ctx.clip(path);\n        }\n      }\n      this.pendingClip = null;\n      this.dependencyTracker\n        ?.bboxToClipBoxDropOperation(opIdx)\n        .recordFutureForcedDependency(\"clipPath\", opIdx);\n    } else {\n      this.dependencyTracker?.recordOperation(opIdx);\n    }\n\n    this.current.startNewPathAndClipBox(this.current.clipBox);\n  }\n\n  getSinglePixelWidth() {\n    if (!this._cachedGetSinglePixelWidth) {\n      const m = getCurrentTransform(this.ctx);\n      if (m[1] === 0 && m[2] === 0) {\n        // Fast path\n        this._cachedGetSinglePixelWidth =\n          1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n      } else {\n        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n        const normX = Math.hypot(m[0], m[2]);\n        const normY = Math.hypot(m[1], m[3]);\n        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n      }\n    }\n    return this._cachedGetSinglePixelWidth;\n  }\n\n  getScaleForStroking() {\n    // A pixel has thicknessX = thicknessY = 1;\n    // A transformed pixel is a parallelogram and the thicknesses\n    // corresponds to the heights.\n    // The goal of this function is to rescale before setting the\n    // lineWidth in order to have both thicknesses greater or equal\n    // to 1 after transform.\n    if (this._cachedScaleForStroking[0] === -1) {\n      const { lineWidth } = this.current;\n      const { a, b, c, d } = this.ctx.getTransform();\n      let scaleX, scaleY;\n\n      if (b === 0 && c === 0) {\n        // Fast path\n        const normX = Math.abs(a);\n        const normY = Math.abs(d);\n        if (normX === normY) {\n          if (lineWidth === 0) {\n            scaleX = scaleY = 1 / normX;\n          } else {\n            const scaledLineWidth = normX * lineWidth;\n            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n          }\n        } else if (lineWidth === 0) {\n          scaleX = 1 / normX;\n          scaleY = 1 / normY;\n        } else {\n          const scaledXLineWidth = normX * lineWidth;\n          const scaledYLineWidth = normY * lineWidth;\n          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n        }\n      } else {\n        // A pixel (base (x, y)) is transformed by M into a parallelogram:\n        //  - its area is |det(M)|;\n        //  - heightY (orthogonal to Mx) has a length: |det(M)| / norm(Mx);\n        //  - heightX (orthogonal to My) has a length: |det(M)| / norm(My).\n        // heightX and heightY are the thicknesses of the transformed pixel\n        // and they must be both greater or equal to 1.\n        const absDet = Math.abs(a * d - b * c);\n        const normX = Math.hypot(a, b);\n        const normY = Math.hypot(c, d);\n        if (lineWidth === 0) {\n          scaleX = normY / absDet;\n          scaleY = normX / absDet;\n        } else {\n          const baseArea = lineWidth * absDet;\n          scaleX = normY > baseArea ? normY / baseArea : 1;\n          scaleY = normX > baseArea ? normX / baseArea : 1;\n        }\n      }\n      this._cachedScaleForStroking[0] = scaleX;\n      this._cachedScaleForStroking[1] = scaleY;\n    }\n    return this._cachedScaleForStroking;\n  }\n\n  // Rescale before stroking in order to have a final lineWidth\n  // with both thicknesses greater or equal to 1.\n  rescaleAndStroke(path, saveRestore) {\n    const {\n      ctx,\n      current: { lineWidth },\n    } = this;\n    const [scaleX, scaleY] = this.getScaleForStroking();\n\n    if (scaleX === scaleY) {\n      ctx.lineWidth = (lineWidth || 1) * scaleX;\n      ctx.stroke(path);\n      return;\n    }\n\n    const dashes = ctx.getLineDash();\n    if (saveRestore) {\n      ctx.save();\n    }\n\n    ctx.scale(scaleX, scaleY);\n    SCALE_MATRIX.a = 1 / scaleX;\n    SCALE_MATRIX.d = 1 / scaleY;\n    const newPath = new Path2D();\n    newPath.addPath(path, SCALE_MATRIX);\n\n    // How the dashed line is rendered depends on the current transform...\n    // so we added a rescale to handle too thin lines and consequently\n    // the way the line is dashed will be modified.\n    // If scaleX === scaleY, the dashed lines will be rendered correctly\n    // else we'll have some bugs (but only with too thin lines).\n    // Here we take the max... why not taking the min... or something else.\n    // Anyway, as said it's buggy when scaleX !== scaleY.\n    if (dashes.length > 0) {\n      const scale = Math.max(scaleX, scaleY);\n      ctx.setLineDash(dashes.map(x => x / scale));\n      ctx.lineDashOffset /= scale;\n    }\n\n    ctx.lineWidth = lineWidth || 1;\n    ctx.stroke(newPath);\n\n    if (saveRestore) {\n      ctx.restore();\n    }\n  }\n\n  isContentVisible() {\n    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n      if (!this.markedContentStack[i].visible) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nfor (const op in OPS) {\n  if (CanvasGraphics.prototype[op] !== undefined) {\n    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n  }\n}\n\nexport { CanvasGraphics };\n", "/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from \"./util.js\";\n\nclass CssFontInfo {\n  #buffer;\n\n  #view;\n\n  #decoder;\n\n  static strings = [\"fontFamily\", \"fontWeight\", \"italicAngle\"];\n\n  static write(info) {\n    const encoder = new TextEncoder();\n    const encodedStrings = {};\n    let stringsLength = 0;\n    for (const prop of CssFontInfo.strings) {\n      const encoded = encoder.encode(info[prop]);\n      encodedStrings[prop] = encoded;\n      stringsLength += 4 + encoded.length;\n    }\n\n    const buffer = new ArrayBuffer(stringsLength);\n    const data = new Uint8Array(buffer);\n    const view = new DataView(buffer);\n    let offset = 0;\n\n    for (const prop of CssFontInfo.strings) {\n      const encoded = encodedStrings[prop];\n      const length = encoded.length;\n      view.setUint32(offset, length);\n      data.set(encoded, offset + 4);\n      offset += 4 + length;\n    }\n    assert(offset === buffer.byteLength, \"CssFontInfo.write: Buffer overflow\");\n    return buffer;\n  }\n\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(this.#buffer);\n    this.#decoder = new TextDecoder();\n  }\n\n  #readString(index) {\n    assert(index < CssFontInfo.strings.length, \"Invalid string index\");\n    let offset = 0;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(\n      new Uint8Array(this.#buffer, offset + 4, length)\n    );\n  }\n\n  get fontFamily() {\n    return this.#readString(0);\n  }\n\n  get fontWeight() {\n    return this.#readString(1);\n  }\n\n  get italicAngle() {\n    return this.#readString(2);\n  }\n}\n\nclass SystemFontInfo {\n  #buffer;\n\n  #view;\n\n  #decoder;\n\n  static strings = [\"css\", \"loadedName\", \"baseFontName\", \"src\"];\n\n  static write(info) {\n    const encoder = new TextEncoder();\n    const encodedStrings = {};\n    let stringsLength = 0;\n    for (const prop of SystemFontInfo.strings) {\n      const encoded = encoder.encode(info[prop]);\n      encodedStrings[prop] = encoded;\n      stringsLength += 4 + encoded.length;\n    }\n    stringsLength += 4;\n    let encodedStyleStyle,\n      encodedStyleWeight,\n      lengthEstimate = 1 + stringsLength;\n    if (info.style) {\n      encodedStyleStyle = encoder.encode(info.style.style);\n      encodedStyleWeight = encoder.encode(info.style.weight);\n      lengthEstimate +=\n        4 + encodedStyleStyle.length + 4 + encodedStyleWeight.length;\n    }\n\n    const buffer = new ArrayBuffer(lengthEstimate);\n    const data = new Uint8Array(buffer);\n    const view = new DataView(buffer);\n    let offset = 0;\n\n    view.setUint8(offset++, info.guessFallback ? 1 : 0);\n    view.setUint32(offset, 0);\n    offset += 4;\n    stringsLength = 0;\n    for (const prop of SystemFontInfo.strings) {\n      const encoded = encodedStrings[prop];\n      const length = encoded.length;\n      stringsLength += 4 + length;\n      view.setUint32(offset, length);\n      data.set(encoded, offset + 4);\n      offset += 4 + length;\n    }\n    view.setUint32(offset - stringsLength - 4, stringsLength);\n\n    if (info.style) {\n      view.setUint32(offset, encodedStyleStyle.length);\n      data.set(encodedStyleStyle, offset + 4);\n      offset += 4 + encodedStyleStyle.length;\n      view.setUint32(offset, encodedStyleWeight.length);\n      data.set(encodedStyleWeight, offset + 4);\n      offset += 4 + encodedStyleWeight.length;\n    }\n    assert(\n      offset <= buffer.byteLength,\n      \"SubstitionInfo.write: Buffer overflow\"\n    );\n    return buffer.transferToFixedLength(offset);\n  }\n\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(this.#buffer);\n    this.#decoder = new TextDecoder();\n  }\n\n  get guessFallback() {\n    return this.#view.getUint8(0) !== 0;\n  }\n\n  #readString(index) {\n    assert(index < SystemFontInfo.strings.length, \"Invalid string index\");\n    let offset = 5;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(\n      new Uint8Array(this.#buffer, offset + 4, length)\n    );\n  }\n\n  get css() {\n    return this.#readString(0);\n  }\n\n  get loadedName() {\n    return this.#readString(1);\n  }\n\n  get baseFontName() {\n    return this.#readString(2);\n  }\n\n  get src() {\n    return this.#readString(3);\n  }\n\n  get style() {\n    let offset = 1;\n    offset += 4 + this.#view.getUint32(offset);\n    const styleLength = this.#view.getUint32(offset);\n    const style = this.#decoder.decode(\n      new Uint8Array(this.#buffer, offset + 4, styleLength)\n    );\n    offset += 4 + styleLength;\n    const weightLength = this.#view.getUint32(offset);\n    const weight = this.#decoder.decode(\n      new Uint8Array(this.#buffer, offset + 4, weightLength)\n    );\n    return { style, weight };\n  }\n}\n\nclass FontInfo {\n  static bools = [\n    \"black\",\n    \"bold\",\n    \"disableFontFace\",\n    \"fontExtraProperties\",\n    \"isInvalidPDFjsFont\",\n    \"isType3Font\",\n    \"italic\",\n    \"missingFile\",\n    \"remeasure\",\n    \"vertical\",\n  ];\n\n  static numbers = [\"ascent\", \"defaultWidth\", \"descent\"];\n\n  static strings = [\"fallbackName\", \"loadedName\", \"mimetype\", \"name\"];\n\n  static #OFFSET_NUMBERS = Math.ceil((this.bools.length * 2) / 8);\n\n  static #OFFSET_BBOX = this.#OFFSET_NUMBERS + this.numbers.length * 8;\n\n  static #OFFSET_FONT_MATRIX = this.#OFFSET_BBOX + 1 + 2 * 4;\n\n  static #OFFSET_DEFAULT_VMETRICS = this.#OFFSET_FONT_MATRIX + 1 + 8 * 6;\n\n  static #OFFSET_STRINGS = this.#OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3;\n\n  #buffer;\n\n  #decoder;\n\n  #view;\n\n  constructor({ data, extra }) {\n    this.#buffer = data;\n    this.#decoder = new TextDecoder();\n    this.#view = new DataView(this.#buffer);\n    if (extra) {\n      Object.assign(this, extra);\n    }\n  }\n\n  #readBoolean(index) {\n    assert(index < FontInfo.bools.length, \"Invalid boolean index\");\n    const byteOffset = Math.floor(index / 4);\n    const bitOffset = (index * 2) % 8;\n    const value = (this.#view.getUint8(byteOffset) >> bitOffset) & 0x03;\n    return value === 0x00 ? undefined : value === 0x02;\n  }\n\n  get black() {\n    return this.#readBoolean(0);\n  }\n\n  get bold() {\n    return this.#readBoolean(1);\n  }\n\n  get disableFontFace() {\n    return this.#readBoolean(2);\n  }\n\n  get fontExtraProperties() {\n    return this.#readBoolean(3);\n  }\n\n  get isInvalidPDFjsFont() {\n    return this.#readBoolean(4);\n  }\n\n  get isType3Font() {\n    return this.#readBoolean(5);\n  }\n\n  get italic() {\n    return this.#readBoolean(6);\n  }\n\n  get missingFile() {\n    return this.#readBoolean(7);\n  }\n\n  get remeasure() {\n    return this.#readBoolean(8);\n  }\n\n  get vertical() {\n    return this.#readBoolean(9);\n  }\n\n  #readNumber(index) {\n    assert(index < FontInfo.numbers.length, \"Invalid number index\");\n    return this.#view.getFloat64(FontInfo.#OFFSET_NUMBERS + index * 8);\n  }\n\n  get ascent() {\n    return this.#readNumber(0);\n  }\n\n  get defaultWidth() {\n    return this.#readNumber(1);\n  }\n\n  get descent() {\n    return this.#readNumber(2);\n  }\n\n  get bbox() {\n    let offset = FontInfo.#OFFSET_BBOX;\n    const numCoords = this.#view.getUint8(offset);\n    if (numCoords === 0) {\n      return undefined;\n    }\n    offset += 1;\n    const bbox = [];\n    for (let i = 0; i < 4; i++) {\n      bbox.push(this.#view.getInt16(offset, true));\n      offset += 2;\n    }\n    return bbox;\n  }\n\n  get fontMatrix() {\n    let offset = FontInfo.#OFFSET_FONT_MATRIX;\n    const numPoints = this.#view.getUint8(offset);\n    if (numPoints === 0) {\n      return undefined;\n    }\n    offset += 1;\n    const fontMatrix = [];\n    for (let i = 0; i < 6; i++) {\n      fontMatrix.push(this.#view.getFloat64(offset, true));\n      offset += 8;\n    }\n    return fontMatrix;\n  }\n\n  get defaultVMetrics() {\n    let offset = FontInfo.#OFFSET_DEFAULT_VMETRICS;\n    const numMetrics = this.#view.getUint8(offset);\n    if (numMetrics === 0) {\n      return undefined;\n    }\n    offset += 1;\n    const defaultVMetrics = [];\n    for (let i = 0; i < 3; i++) {\n      defaultVMetrics.push(this.#view.getInt16(offset, true));\n      offset += 2;\n    }\n    return defaultVMetrics;\n  }\n\n  #readString(index) {\n    assert(index < FontInfo.strings.length, \"Invalid string index\");\n    let offset = FontInfo.#OFFSET_STRINGS + 4;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    const stringData = new Uint8Array(length);\n    stringData.set(new Uint8Array(this.#buffer, offset + 4, length));\n    return this.#decoder.decode(stringData);\n  }\n\n  get fallbackName() {\n    return this.#readString(0);\n  }\n\n  get loadedName() {\n    return this.#readString(1);\n  }\n\n  get mimetype() {\n    return this.#readString(2);\n  }\n\n  get name() {\n    return this.#readString(3);\n  }\n\n  get data() {\n    let offset = FontInfo.#OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + cssFontInfoLength;\n    const length = this.#view.getUint32(offset);\n    if (length === 0) {\n      return undefined;\n    }\n    return new Uint8Array(this.#buffer, offset + 4, length);\n  }\n\n  clearData() {\n    let offset = FontInfo.#OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + cssFontInfoLength;\n    const length = this.#view.getUint32(offset);\n    const data = new Uint8Array(this.#buffer, offset + 4, length);\n    data.fill(0);\n    this.#view.setUint32(offset, 0);\n    // this.#buffer.resize(offset);\n  }\n\n  get cssFontInfo() {\n    let offset = FontInfo.#OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    if (cssFontInfoLength === 0) {\n      return null;\n    }\n    const cssFontInfoData = new Uint8Array(cssFontInfoLength);\n    cssFontInfoData.set(\n      new Uint8Array(this.#buffer, offset + 4, cssFontInfoLength)\n    );\n    return new CssFontInfo(cssFontInfoData.buffer);\n  }\n\n  get systemFontInfo() {\n    let offset = FontInfo.#OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    if (systemFontInfoLength === 0) {\n      return null;\n    }\n    const systemFontInfoData = new Uint8Array(systemFontInfoLength);\n    systemFontInfoData.set(\n      new Uint8Array(this.#buffer, offset + 4, systemFontInfoLength)\n    );\n    return new SystemFontInfo(systemFontInfoData.buffer);\n  }\n\n  static write(font) {\n    const systemFontInfoBuffer = font.systemFontInfo\n      ? SystemFontInfo.write(font.systemFontInfo)\n      : null;\n    const cssFontInfoBuffer = font.cssFontInfo\n      ? CssFontInfo.write(font.cssFontInfo)\n      : null;\n\n    const encoder = new TextEncoder();\n    const encodedStrings = {};\n    let stringsLength = 0;\n    for (const prop of FontInfo.strings) {\n      encodedStrings[prop] = encoder.encode(font[prop]);\n      stringsLength += 4 + encodedStrings[prop].length;\n    }\n\n    const lengthEstimate =\n      FontInfo.#OFFSET_STRINGS +\n      4 +\n      stringsLength +\n      4 +\n      (systemFontInfoBuffer ? systemFontInfoBuffer.byteLength : 0) +\n      4 +\n      (cssFontInfoBuffer ? cssFontInfoBuffer.byteLength : 0) +\n      4 +\n      (font.data ? font.data.length : 0);\n\n    const buffer = new ArrayBuffer(lengthEstimate);\n    const data = new Uint8Array(buffer);\n    const view = new DataView(buffer);\n    let offset = 0;\n\n    const numBools = FontInfo.bools.length;\n    let boolByte = 0,\n      boolBit = 0;\n    for (let i = 0; i < numBools; i++) {\n      const value = font[FontInfo.bools[i]];\n      // eslint-disable-next-line no-nested-ternary\n      const bits = value === undefined ? 0x00 : value ? 0x02 : 0x01;\n      boolByte |= bits << boolBit;\n      boolBit += 2;\n      if (boolBit === 8 || i === numBools - 1) {\n        view.setUint8(offset++, boolByte);\n        boolByte = 0;\n        boolBit = 0;\n      }\n    }\n    assert(\n      offset === FontInfo.#OFFSET_NUMBERS,\n      \"FontInfo.write: Boolean properties offset mismatch\"\n    );\n\n    for (const prop of FontInfo.numbers) {\n      view.setFloat64(offset, font[prop]);\n      offset += 8;\n    }\n    assert(\n      offset === FontInfo.#OFFSET_BBOX,\n      \"FontInfo.write: Number properties offset mismatch\"\n    );\n\n    if (font.bbox) {\n      view.setUint8(offset++, 4);\n      for (const coord of font.bbox) {\n        view.setInt16(offset, coord, true);\n        offset += 2;\n      }\n    } else {\n      view.setUint8(offset++, 0);\n      offset += 2 * 4; // TODO: optimize this padding away\n    }\n\n    assert(\n      offset === FontInfo.#OFFSET_FONT_MATRIX,\n      \"FontInfo.write: BBox properties offset mismatch\"\n    );\n\n    if (font.fontMatrix) {\n      view.setUint8(offset++, 6);\n      for (const point of font.fontMatrix) {\n        view.setFloat64(offset, point, true);\n        offset += 8;\n      }\n    } else {\n      view.setUint8(offset++, 0);\n      offset += 8 * 6; // TODO: optimize this padding away\n    }\n\n    assert(\n      offset === FontInfo.#OFFSET_DEFAULT_VMETRICS,\n      \"FontInfo.write: FontMatrix properties offset mismatch\"\n    );\n\n    if (font.defaultVMetrics) {\n      view.setUint8(offset++, 1);\n      for (const metric of font.defaultVMetrics) {\n        view.setInt16(offset, metric, true);\n        offset += 2;\n      }\n    } else {\n      view.setUint8(offset++, 0);\n      offset += 3 * 2; // TODO: optimize this padding away\n    }\n\n    assert(\n      offset === FontInfo.#OFFSET_STRINGS,\n      \"FontInfo.write: DefaultVMetrics properties offset mismatch\"\n    );\n\n    view.setUint32(FontInfo.#OFFSET_STRINGS, 0);\n    offset += 4;\n    for (const prop of FontInfo.strings) {\n      const encoded = encodedStrings[prop];\n      const length = encoded.length;\n      view.setUint32(offset, length);\n      data.set(encoded, offset + 4);\n      offset += 4 + length;\n    }\n    view.setUint32(\n      FontInfo.#OFFSET_STRINGS,\n      offset - FontInfo.#OFFSET_STRINGS - 4\n    );\n\n    if (!systemFontInfoBuffer) {\n      view.setUint32(offset, 0);\n      offset += 4;\n    } else {\n      const length = systemFontInfoBuffer.byteLength;\n      view.setUint32(offset, length);\n      assert(\n        offset + 4 + length <= buffer.byteLength,\n        \"FontInfo.write: Buffer overflow at systemFontInfo\"\n      );\n      data.set(new Uint8Array(systemFontInfoBuffer), offset + 4);\n      offset += 4 + length;\n    }\n\n    if (!cssFontInfoBuffer) {\n      view.setUint32(offset, 0);\n      offset += 4;\n    } else {\n      const length = cssFontInfoBuffer.byteLength;\n      view.setUint32(offset, length);\n      assert(\n        offset + 4 + length <= buffer.byteLength,\n        \"FontInfo.write: Buffer overflow at cssFontInfo\"\n      );\n      data.set(new Uint8Array(cssFontInfoBuffer), offset + 4);\n      offset += 4 + length;\n    }\n\n    if (font.data === undefined) {\n      view.setUint32(offset, 0);\n      offset += 4;\n    } else {\n      view.setUint32(offset, font.data.length);\n      data.set(font.data, offset + 4);\n      offset += 4 + font.data.length;\n    }\n\n    assert(offset <= buffer.byteLength, \"FontInfo.write: Buffer overflow\");\n    return buffer.transferToFixedLength(offset);\n  }\n}\n\nexport { CssFontInfo, FontInfo, SystemFontInfo };\n", "/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass GlobalWorkerOptions {\n  static #port = null;\n\n  static #src = \"\";\n\n  /**\n   * @type {Worker | null}\n   */\n  static get workerPort() {\n    return this.#port;\n  }\n\n  /**\n   * @param {Worker | null} workerPort - Defines global port for worker process.\n   *   Overrides the `workerSrc` option.\n   */\n  static set workerPort(val) {\n    if (\n      !(typeof Worker !== \"undefined\" && val instanceof Worker) &&\n      val !== null\n    ) {\n      throw new Error(\"Invalid `workerPort` type.\");\n    }\n    this.#port = val;\n  }\n\n  /**\n   * @type {string}\n   */\n  static get workerSrc() {\n    return this.#src;\n  }\n\n  /**\n   * @param {string} workerSrc - A string containing the path and filename of\n   *   the worker file.\n   *\n   *   NOTE: The `workerSrc` option should always be set, in order to prevent\n   *         any issues when using the PDF.js library.\n   */\n  static set workerSrc(val) {\n    if (typeof val !== \"string\") {\n      throw new Error(\"Invalid `workerSrc` type.\");\n    }\n    this.#src = val;\n  }\n}\n\nexport { GlobalWorkerOptions };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass Metadata {\n  #map;\n\n  #data;\n\n  constructor({ parsedData, rawData }) {\n    this.#map = parsedData;\n    this.#data = rawData;\n  }\n\n  getRaw() {\n    return this.#data;\n  }\n\n  get(name) {\n    return this.#map.get(name) ?? null;\n  }\n\n  [Symbol.iterator]() {\n    return this.#map.entries();\n  }\n}\n\nexport { Metadata };\n", "/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  info,\n  RenderingIntentFlag,\n  unreachable,\n  warn,\n} from \"../shared/util.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst INTERNAL = Symbol(\"INTERNAL\");\n\nclass OptionalContentGroup {\n  #isDisplay = false;\n\n  #isPrint = false;\n\n  #userSet = false;\n\n  #visible = true;\n\n  constructor(renderingIntent, { name, intent, usage, rbGroups }) {\n    this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n    this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n    this.name = name;\n    this.intent = intent;\n    this.usage = usage;\n    this.rbGroups = rbGroups;\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get visible() {\n    if (this.#userSet) {\n      return this.#visible;\n    }\n    if (!this.#visible) {\n      return false;\n    }\n    const { print, view } = this.usage;\n\n    if (this.#isDisplay) {\n      return view?.viewState !== \"OFF\";\n    } else if (this.#isPrint) {\n      return print?.printState !== \"OFF\";\n    }\n    return true;\n  }\n\n  /**\n   * @ignore\n   */\n  _setVisible(internal, visible, userSet = false) {\n    if (internal !== INTERNAL) {\n      unreachable(\"Internal method `_setVisible` called.\");\n    }\n    this.#userSet = userSet;\n    this.#visible = visible;\n  }\n}\n\nclass OptionalContentConfig {\n  #cachedGetHash = null;\n\n  #groups = new Map();\n\n  #initialHash = null;\n\n  #order = null;\n\n  constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {\n    this.renderingIntent = renderingIntent;\n\n    this.name = null;\n    this.creator = null;\n\n    if (data === null) {\n      return;\n    }\n    this.name = data.name;\n    this.creator = data.creator;\n    this.#order = data.order;\n    for (const group of data.groups) {\n      this.#groups.set(\n        group.id,\n        new OptionalContentGroup(renderingIntent, group)\n      );\n    }\n\n    if (data.baseState === \"OFF\") {\n      for (const group of this.#groups.values()) {\n        group._setVisible(INTERNAL, false);\n      }\n    }\n\n    for (const on of data.on) {\n      this.#groups.get(on)._setVisible(INTERNAL, true);\n    }\n\n    for (const off of data.off) {\n      this.#groups.get(off)._setVisible(INTERNAL, false);\n    }\n\n    // The following code must always run *last* in the constructor.\n    this.#initialHash = this.getHash();\n  }\n\n  #evaluateVisibilityExpression(array) {\n    const length = array.length;\n    if (length < 2) {\n      return true;\n    }\n    const operator = array[0];\n    for (let i = 1; i < length; i++) {\n      const element = array[i];\n      let state;\n      if (Array.isArray(element)) {\n        state = this.#evaluateVisibilityExpression(element);\n      } else if (this.#groups.has(element)) {\n        state = this.#groups.get(element).visible;\n      } else {\n        warn(`Optional content group not found: ${element}`);\n        return true;\n      }\n      switch (operator) {\n        case \"And\":\n          if (!state) {\n            return false;\n          }\n          break;\n        case \"Or\":\n          if (state) {\n            return true;\n          }\n          break;\n        case \"Not\":\n          return !state;\n        default:\n          return true;\n      }\n    }\n    return operator === \"And\";\n  }\n\n  isVisible(group) {\n    if (this.#groups.size === 0) {\n      return true;\n    }\n    if (!group) {\n      info(\"Optional content group not defined.\");\n      return true;\n    }\n    if (group.type === \"OCG\") {\n      if (!this.#groups.has(group.id)) {\n        warn(`Optional content group not found: ${group.id}`);\n        return true;\n      }\n      return this.#groups.get(group.id).visible;\n    } else if (group.type === \"OCMD\") {\n      // Per the spec, the expression should be preferred if available.\n      if (group.expression) {\n        return this.#evaluateVisibilityExpression(group.expression);\n      }\n      if (!group.policy || group.policy === \"AnyOn\") {\n        // Default\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      } else if (group.policy === \"AnyOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      }\n      warn(`Unknown optional content policy ${group.policy}.`);\n      return true;\n    }\n    warn(`Unknown group type ${group.type}.`);\n    return true;\n  }\n\n  setVisibility(id, visible = true, preserveRB = true) {\n    const group = this.#groups.get(id);\n    if (!group) {\n      warn(`Optional content group not found: ${id}`);\n      return;\n    }\n\n    // If the visibility is about to be set to `true` and the group belongs to\n    // any radiobutton groups, hide all other OCGs in these radiobutton groups,\n    // provided that radiobutton state relationships are to be preserved.\n    if (preserveRB && visible && group.rbGroups.length) {\n      for (const rbGroup of group.rbGroups) {\n        for (const otherId of rbGroup) {\n          if (otherId !== id) {\n            this.#groups.get(otherId)?._setVisible(INTERNAL, false, true);\n          }\n        }\n      }\n    }\n\n    group._setVisible(INTERNAL, !!visible, /* userSet = */ true);\n\n    this.#cachedGetHash = null;\n  }\n\n  setOCGState({ state, preserveRB }) {\n    let operator;\n\n    for (const elem of state) {\n      switch (elem) {\n        case \"ON\":\n        case \"OFF\":\n        case \"Toggle\":\n          operator = elem;\n          continue;\n      }\n\n      const group = this.#groups.get(elem);\n      if (!group) {\n        continue;\n      }\n      switch (operator) {\n        case \"ON\":\n          this.setVisibility(elem, true, preserveRB);\n          break;\n        case \"OFF\":\n          this.setVisibility(elem, false, preserveRB);\n          break;\n        case \"Toggle\":\n          this.setVisibility(elem, !group.visible, preserveRB);\n          break;\n      }\n    }\n\n    this.#cachedGetHash = null;\n  }\n\n  get hasInitialVisibility() {\n    return this.#initialHash === null || this.getHash() === this.#initialHash;\n  }\n\n  getOrder() {\n    if (!this.#groups.size) {\n      return null;\n    }\n    if (this.#order) {\n      return this.#order.slice();\n    }\n    return [...this.#groups.keys()];\n  }\n\n  getGroup(id) {\n    return this.#groups.get(id) || null;\n  }\n\n  getHash() {\n    if (this.#cachedGetHash !== null) {\n      return this.#cachedGetHash;\n    }\n    const hash = new MurmurHash3_64();\n\n    for (const [id, group] of this.#groups) {\n      hash.update(`${id}:${group.visible}`);\n    }\n    return (this.#cachedGetHash = hash.hexdigest());\n  }\n\n  [Symbol.iterator]() {\n    return this.#groups.entries();\n  }\n}\n\nexport { OptionalContentConfig };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../interfaces\").IPDFStream} IPDFStream */\n/** @typedef {import(\"../interfaces\").IPDFStreamReader} IPDFStreamReader */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../interfaces\").IPDFStreamRangeReader} IPDFStreamRangeReader */\n\nimport { assert } from \"../shared/util.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\n/** @implements {IPDFStream} */\nclass PDFDataTransportStream {\n  constructor(\n    pdfDataRangeTransport,\n    { disableRange = false, disableStream = false }\n  ) {\n    assert(\n      pdfDataRangeTransport,\n      'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.'\n    );\n    const { length, initialData, progressiveDone, contentDispositionFilename } =\n      pdfDataRangeTransport;\n\n    this._queuedChunks = [];\n    this._progressiveDone = progressiveDone;\n    this._contentDispositionFilename = contentDispositionFilename;\n\n    if (initialData?.length > 0) {\n      // Prevent any possible issues by only transferring a Uint8Array that\n      // completely \"utilizes\" its underlying ArrayBuffer.\n      const buffer =\n        initialData instanceof Uint8Array &&\n        initialData.byteLength === initialData.buffer.byteLength\n          ? initialData.buffer\n          : new Uint8Array(initialData).buffer;\n      this._queuedChunks.push(buffer);\n    }\n\n    this._pdfDataRangeTransport = pdfDataRangeTransport;\n    this._isStreamingSupported = !disableStream;\n    this._isRangeSupported = !disableRange;\n    this._contentLength = length;\n\n    this._fullRequestReader = null;\n    this._rangeReaders = [];\n\n    pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n      this._onReceiveData({ begin, chunk });\n    });\n\n    pdfDataRangeTransport.addProgressListener((loaded, total) => {\n      this._onProgress({ loaded, total });\n    });\n\n    pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n      this._onReceiveData({ chunk });\n    });\n\n    pdfDataRangeTransport.addProgressiveDoneListener(() => {\n      this._onProgressiveDone();\n    });\n\n    pdfDataRangeTransport.transportReady();\n  }\n\n  _onReceiveData({ begin, chunk }) {\n    // Prevent any possible issues by only transferring a Uint8Array that\n    // completely \"utilizes\" its underlying ArrayBuffer.\n    const buffer =\n      chunk instanceof Uint8Array &&\n      chunk.byteLength === chunk.buffer.byteLength\n        ? chunk.buffer\n        : new Uint8Array(chunk).buffer;\n\n    if (begin === undefined) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader._enqueue(buffer);\n      } else {\n        this._queuedChunks.push(buffer);\n      }\n    } else {\n      const found = this._rangeReaders.some(function (rangeReader) {\n        if (rangeReader._begin !== begin) {\n          return false;\n        }\n        rangeReader._enqueue(buffer);\n        return true;\n      });\n      assert(\n        found,\n        \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\"\n      );\n    }\n  }\n\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n\n  _onProgress(evt) {\n    if (evt.total === undefined) {\n      // Reporting to first range reader, if it exists.\n      this._rangeReaders[0]?.onProgress?.({ loaded: evt.loaded });\n    } else {\n      this._fullRequestReader?.onProgress?.({\n        loaded: evt.loaded,\n        total: evt.total,\n      });\n    }\n  }\n\n  _onProgressiveDone() {\n    this._fullRequestReader?.progressiveDone();\n    this._progressiveDone = true;\n  }\n\n  _removeRangeReader(reader) {\n    const i = this._rangeReaders.indexOf(reader);\n    if (i >= 0) {\n      this._rangeReaders.splice(i, 1);\n    }\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFDataTransportStream.getFullReader can only be called once.\"\n    );\n    const queuedChunks = this._queuedChunks;\n    this._queuedChunks = null;\n    return new PDFDataTransportStreamReader(\n      this,\n      queuedChunks,\n      this._progressiveDone,\n      this._contentDispositionFilename\n    );\n  }\n\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n    this._pdfDataRangeTransport.requestDataRange(begin, end);\n    this._rangeReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n\n    for (const reader of this._rangeReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n    this._pdfDataRangeTransport.abort();\n  }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFDataTransportStreamReader {\n  constructor(\n    stream,\n    queuedChunks,\n    progressiveDone = false,\n    contentDispositionFilename = null\n  ) {\n    this._stream = stream;\n    this._done = progressiveDone || false;\n    this._filename = isPdfFile(contentDispositionFilename)\n      ? contentDispositionFilename\n      : null;\n    this._queuedChunks = queuedChunks || [];\n    this._loaded = 0;\n    for (const chunk of this._queuedChunks) {\n      this._loaded += chunk.byteLength;\n    }\n    this._requests = [];\n    this._headersReady = Promise.resolve();\n    stream._fullRequestReader = this;\n\n    this.onProgress = null;\n  }\n\n  _enqueue(chunk) {\n    if (this._done) {\n      return; // Ignore new data.\n    }\n    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({ value: chunk, done: false });\n    } else {\n      this._queuedChunks.push(chunk);\n    }\n    this._loaded += chunk.byteLength;\n  }\n\n  get headersReady() {\n    return this._headersReady;\n  }\n\n  get filename() {\n    return this._filename;\n  }\n\n  get isRangeSupported() {\n    return this._stream._isRangeSupported;\n  }\n\n  get isStreamingSupported() {\n    return this._stream._isStreamingSupported;\n  }\n\n  get contentLength() {\n    return this._stream._contentLength;\n  }\n\n  async read() {\n    if (this._queuedChunks.length > 0) {\n      const chunk = this._queuedChunks.shift();\n      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n  }\n\n  progressiveDone() {\n    if (this._done) {\n      return;\n    }\n    this._done = true;\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFDataTransportStreamRangeReader {\n  constructor(stream, begin, end) {\n    this._stream = stream;\n    this._begin = begin;\n    this._end = end;\n    this._queuedChunk = null;\n    this._requests = [];\n    this._done = false;\n\n    this.onProgress = null;\n  }\n\n  _enqueue(chunk) {\n    if (this._done) {\n      return; // ignore new data\n    }\n    if (this._requests.length === 0) {\n      this._queuedChunk = chunk;\n    } else {\n      const requestsCapability = this._requests.shift();\n      requestsCapability.resolve({ value: chunk, done: false });\n      for (const requestCapability of this._requests) {\n        requestCapability.resolve({ value: undefined, done: true });\n      }\n      this._requests.length = 0;\n    }\n    this._done = true;\n    this._stream._removeRangeReader(this);\n  }\n\n  get isStreamingSupported() {\n    return false;\n  }\n\n  async read() {\n    if (this._queuedChunk) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n    this._stream._removeRangeReader(this);\n  }\n}\n\nexport { PDFDataTransportStream };\n", "/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes } from \"../shared/util.js\";\n\n// This getFilenameFromContentDispositionHeader function is adapted from\n// https://github.com/Rob--W/open-in-browser/blob/7e2e35a38b8b4e981b11da7b2f01df0149049e92/extension/content-disposition.js\n// with the following changes:\n// - Modified to conform to PDF.js's coding style.\n// - Move return to the end of the function to prevent Babel from dropping the\n//   function declarations.\n\n/**\n * Extract file name from the Content-Disposition HTTP response header.\n *\n * @param {string} contentDisposition\n * @returns {string} Filename, if found in the Content-Disposition header.\n */\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  let needsEncodingFixup = true;\n\n  // filename*=ext-value (\"ext-value\" from RFC 5987, referenced by RFC 6266).\n  let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = unescape(filename);\n    filename = rfc5987decode(filename);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n\n  // Continuations (RFC 2231 section 3, referenced by RFC 5987 section 3.1).\n  // filename*n*=part\n  // filename*n=part\n  tmp = rfc2231getparam(contentDisposition);\n  if (tmp) {\n    // RFC 2047, section\n    const filename = rfc2047decode(tmp);\n    return fixupEncoding(filename);\n  }\n\n  // filename=value (RFC 5987, section 4.1).\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n\n  // After this line there are only function declarations. We cannot put\n  // \"return\" here for readability because babel would then drop the function\n  // declarations...\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\n      \"(?:^|;)\\\\s*\" +\n        attributePattern +\n        \"\\\\s*=\\\\s*\" +\n        // Captures: value = token | quoted-string\n        // (RFC 2616, section 3.6 and referenced by RFC 6266 4.1)\n        \"(\" +\n        '[^\";\\\\s][^;\\\\s]*' +\n        \"|\" +\n        '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' +\n        \")\",\n      flags\n    );\n  }\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n      try {\n        const decoder = new TextDecoder(encoding, { fatal: true });\n        const buffer = stringToBytes(value);\n        value = decoder.decode(buffer);\n        needsEncodingFixup = false;\n      } catch {\n        // TextDecoder constructor threw - unrecognized encoding.\n      }\n    }\n    return value;\n  }\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      // Maybe multi-byte UTF-8.\n      value = textdecode(\"utf-8\", value);\n      if (needsEncodingFixup) {\n        // Try iso-8859-1 encoding.\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n    return value;\n  }\n  function rfc2231getparam(contentDispositionStr) {\n    const matches = [];\n    let match;\n    // Iterate over all filename*n= and filename*n*= with n being an integer\n    // of at least zero. Any non-zero number must not start with '0'.\n    const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      let [, n, quot, part] = match; // eslint-disable-line prefer-const\n      n = parseInt(n, 10);\n      if (n in matches) {\n        // Ignore anything after the invalid second filename*0.\n        if (n === 0) {\n          break;\n        }\n        continue;\n      }\n      matches[n] = [quot, part];\n    }\n    const parts = [];\n    for (let n = 0; n < matches.length; ++n) {\n      if (!(n in matches)) {\n        // Numbers must be consecutive. Truncate when there is a hole.\n        break;\n      }\n      let [quot, part] = matches[n]; // eslint-disable-line prefer-const\n      part = rfc2616unquote(part);\n      if (quot) {\n        part = unescape(part);\n        if (n === 0) {\n          part = rfc5987decode(part);\n        }\n      }\n      parts.push(part);\n    }\n    return parts.join(\"\");\n  }\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      const parts = value.slice(1).split('\\\\\"');\n      // Find the first unescaped \" and terminate there.\n      for (let i = 0; i < parts.length; ++i) {\n        const quotindex = parts[i].indexOf('\"');\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1; // Truncates and stop the iteration.\n        }\n        parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n      }\n      value = parts.join('\"');\n    }\n    return value;\n  }\n  function rfc5987decode(extvalue) {\n    // Decodes \"ext-value\" from RFC 5987.\n    const encodingend = extvalue.indexOf(\"'\");\n    if (encodingend === -1) {\n      // Some servers send \"filename*=\" without encoding 'language' prefix,\n      // e.g. in https://github.com/Rob--W/open-in-browser/issues/26\n      // Let's accept the value like Firefox (57) (Chrome 62 rejects it).\n      return extvalue;\n    }\n    const encoding = extvalue.slice(0, encodingend);\n    const langvalue = extvalue.slice(encodingend + 1);\n    // Ignore language (RFC 5987 section 3.2.1, and RFC 6266 section 4.1 ).\n    const value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n  function rfc2047decode(value) {\n    // RFC 2047-decode the result. Firefox tried to drop support for it, but\n    // backed out because some servers use it - https://bugzil.la/875615\n    // Firefox's condition for decoding is here: https://searchfox.org/mozilla-central/rev/4a590a5a15e35d88a3b23dd6ac3c471cf85b04a8/netwerk/mime/nsMIMEHeaderParamImpl.cpp#742-748\n\n    // We are more strict and only recognize RFC 2047-encoding if the value\n    // starts with \"=?\", since then it is likely that the full value is\n    // RFC 2047-encoded.\n\n    // Firefox also decodes words even where RFC 2047 section 5 states:\n    // \"An 'encoded-word' MUST NOT appear within a 'quoted-string'.\"\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n    // RFC 2047, section 2.4\n    // encoded-word = \"=?\" charset \"?\" encoding \"?\" encoded-text \"?=\"\n    // charset = token (but let's restrict to characters that denote a\n    //       possibly valid encoding).\n    // encoding = q or b\n    // encoded-text = any printable ASCII character other than ? or space.\n    //        ... but Firefox permits ? and space.\n    return value.replaceAll(\n      /=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g,\n      function (matches, charset, encoding, text) {\n        if (encoding === \"q\" || encoding === \"Q\") {\n          // RFC 2047 section 4.2.\n          text = text.replaceAll(\"_\", \" \");\n          text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n            return String.fromCharCode(parseInt(hex, 16));\n          });\n          return textdecode(charset, text);\n        } // else encoding is b or B - base64 (RFC 2047 section 4.1)\n        try {\n          text = atob(text);\n        } catch {}\n        return textdecode(charset, text);\n      }\n    );\n  }\n\n  return \"\";\n}\n\nexport { getFilenameFromContentDispositionHeader };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, ResponseException } from \"../shared/util.js\";\nimport { getFilenameFromContentDispositionHeader } from \"./content_disposition.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\nfunction createHeaders(isHttp, httpHeaders) {\n  const headers = new Headers();\n\n  if (!isHttp || !httpHeaders || typeof httpHeaders !== \"object\") {\n    return headers;\n  }\n  for (const key in httpHeaders) {\n    const val = httpHeaders[key];\n    if (val !== undefined) {\n      headers.append(key, val);\n    }\n  }\n  return headers;\n}\n\nfunction getResponseOrigin(url) {\n  // Notably, null is distinct from \"null\" string (e.g. from file:-URLs).\n  return URL.parse(url)?.origin ?? null;\n}\n\nfunction validateRangeRequestCapabilities({\n  responseHeaders,\n  isHttp,\n  rangeChunkSize,\n  disableRange,\n}) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      Number.isInteger(rangeChunkSize) && rangeChunkSize > 0,\n      \"rangeChunkSize must be an integer larger than zero.\"\n    );\n  }\n  const returnValues = {\n    allowRangeRequests: false,\n    suggestedLength: undefined,\n  };\n\n  const length = parseInt(responseHeaders.get(\"Content-Length\"), 10);\n  if (!Number.isInteger(length)) {\n    return returnValues;\n  }\n\n  returnValues.suggestedLength = length;\n\n  if (length <= 2 * rangeChunkSize) {\n    // The file size is smaller than the size of two chunks, so it does not\n    // make any sense to abort the request and retry with a range request.\n    return returnValues;\n  }\n\n  if (disableRange || !isHttp) {\n    return returnValues;\n  }\n  if (responseHeaders.get(\"Accept-Ranges\") !== \"bytes\") {\n    return returnValues;\n  }\n\n  const contentEncoding = responseHeaders.get(\"Content-Encoding\") || \"identity\";\n  if (contentEncoding !== \"identity\") {\n    return returnValues;\n  }\n\n  returnValues.allowRangeRequests = true;\n  return returnValues;\n}\n\nfunction extractFilenameFromHeader(responseHeaders) {\n  const contentDisposition = responseHeaders.get(\"Content-Disposition\");\n  if (contentDisposition) {\n    let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch {}\n    }\n    if (isPdfFile(filename)) {\n      return filename;\n    }\n  }\n  return null;\n}\n\nfunction createResponseError(status, url) {\n  return new ResponseException(\n    `Unexpected server response (${status}) while retrieving PDF \"${url}\".`,\n    status,\n    /* missing = */ status === 404 || (status === 0 && url.startsWith(\"file:\"))\n  );\n}\n\nfunction validateResponseStatus(status) {\n  return status === 200 || status === 206;\n}\n\nexport {\n  createHeaders,\n  createResponseError,\n  extractFilenameFromHeader,\n  getResponseOrigin,\n  validateRangeRequestCapabilities,\n  validateResponseStatus,\n};\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbortException, assert, warn } from \"../shared/util.js\";\nimport {\n  createHeaders,\n  createResponseError,\n  extractFilenameFromHeader,\n  getResponseOrigin,\n  validateRangeRequestCapabilities,\n  validateResponseStatus,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./fetch_stream.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n  return {\n    method: \"GET\",\n    headers,\n    signal: abortController.signal,\n    mode: \"cors\",\n    credentials: withCredentials ? \"include\" : \"same-origin\",\n    redirect: \"follow\",\n  };\n}\n\nfunction getArrayBuffer(val) {\n  if (val instanceof Uint8Array) {\n    return val.buffer;\n  }\n  if (val instanceof ArrayBuffer) {\n    return val;\n  }\n  warn(`getArrayBuffer - unexpected data format: ${val}`);\n  return new Uint8Array(val).buffer;\n}\n\n/** @implements {IPDFStream} */\nclass PDFFetchStream {\n  _responseOrigin = null;\n\n  constructor(source) {\n    this.source = source;\n    this.isHttp = /^https?:/i.test(source.url);\n    this.headers = createHeaders(this.isHttp, source.httpHeaders);\n\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFFetchStream.getFullReader can only be called once.\"\n    );\n    this._fullRequestReader = new PDFFetchStreamReader(this);\n    return this._fullRequestReader;\n  }\n\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new PDFFetchStreamRangeReader(this, begin, end);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFFetchStreamReader {\n  constructor(stream) {\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    this._filename = null;\n    const source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._contentLength = source.length;\n    this._headersCapability = Promise.withResolvers();\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._abortController = new AbortController();\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n    // Always create a copy of the headers.\n    const headers = new Headers(stream.headers);\n\n    const url = source.url;\n    fetch(\n      url,\n      createFetchOptions(headers, this._withCredentials, this._abortController)\n    )\n      .then(response => {\n        stream._responseOrigin = getResponseOrigin(response.url);\n\n        if (!validateResponseStatus(response.status)) {\n          throw createResponseError(response.status, url);\n        }\n        this._reader = response.body.getReader();\n        this._headersCapability.resolve();\n\n        const responseHeaders = response.headers;\n\n        const { allowRangeRequests, suggestedLength } =\n          validateRangeRequestCapabilities({\n            responseHeaders,\n            isHttp: stream.isHttp,\n            rangeChunkSize: this._rangeChunkSize,\n            disableRange: this._disableRange,\n          });\n\n        this._isRangeSupported = allowRangeRequests;\n        // Setting right content length.\n        this._contentLength = suggestedLength || this._contentLength;\n\n        this._filename = extractFilenameFromHeader(responseHeaders);\n\n        // We need to stop reading when range is supported and streaming is\n        // disabled.\n        if (!this._isStreamingSupported && this._isRangeSupported) {\n          this.cancel(new AbortException(\"Streaming is disabled.\"));\n        }\n      })\n      .catch(this._headersCapability.reject);\n\n    this.onProgress = null;\n  }\n\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n\n  get filename() {\n    return this._filename;\n  }\n\n  get contentLength() {\n    return this._contentLength;\n  }\n\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  async read() {\n    await this._headersCapability.promise;\n    const { value, done } = await this._reader.read();\n    if (done) {\n      return { value, done };\n    }\n    this._loaded += value.byteLength;\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength,\n    });\n\n    return { value: getArrayBuffer(value), done: false };\n  }\n\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFFetchStreamRangeReader {\n  constructor(stream, begin, end) {\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    const source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._readCapability = Promise.withResolvers();\n    this._isStreamingSupported = !source.disableStream;\n\n    this._abortController = new AbortController();\n    // Always create a copy of the headers.\n    const headers = new Headers(stream.headers);\n    headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n    const url = source.url;\n    fetch(\n      url,\n      createFetchOptions(headers, this._withCredentials, this._abortController)\n    )\n      .then(response => {\n        const responseOrigin = getResponseOrigin(response.url);\n\n        if (responseOrigin !== stream._responseOrigin) {\n          throw new Error(\n            `Expected range response-origin \"${responseOrigin}\" to match \"${stream._responseOrigin}\".`\n          );\n        }\n        if (!validateResponseStatus(response.status)) {\n          throw createResponseError(response.status, url);\n        }\n        this._readCapability.resolve();\n        this._reader = response.body.getReader();\n      })\n      .catch(this._readCapability.reject);\n\n    this.onProgress = null;\n  }\n\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  async read() {\n    await this._readCapability.promise;\n    const { value, done } = await this._reader.read();\n    if (done) {\n      return { value, done };\n    }\n    this._loaded += value.byteLength;\n    this.onProgress?.({ loaded: this._loaded });\n\n    return { value: getArrayBuffer(value), done: false };\n  }\n\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\n\nexport { PDFFetchStream };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, stringToBytes, warn } from \"../shared/util.js\";\nimport {\n  createHeaders,\n  createResponseError,\n  extractFilenameFromHeader,\n  getResponseOrigin,\n  validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./network.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n  const data = xhr.response;\n  if (typeof data !== \"string\") {\n    return data;\n  }\n  return stringToBytes(data).buffer;\n}\n\nclass NetworkManager {\n  _responseOrigin = null;\n\n  constructor({ url, httpHeaders, withCredentials }) {\n    this.url = url;\n    this.isHttp = /^https?:/i.test(url);\n    this.headers = createHeaders(this.isHttp, httpHeaders);\n    this.withCredentials = withCredentials || false;\n\n    this.currXhrId = 0;\n    this.pendingRequests = Object.create(null);\n  }\n\n  request(args) {\n    const xhr = new XMLHttpRequest();\n    const xhrId = this.currXhrId++;\n    const pendingRequest = (this.pendingRequests[xhrId] = { xhr });\n\n    xhr.open(\"GET\", this.url);\n    xhr.withCredentials = this.withCredentials;\n    for (const [key, val] of this.headers) {\n      xhr.setRequestHeader(key, val);\n    }\n    if (this.isHttp && \"begin\" in args && \"end\" in args) {\n      xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n      pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n    } else {\n      pendingRequest.expectedStatus = OK_RESPONSE;\n    }\n    xhr.responseType = \"arraybuffer\";\n\n    assert(args.onError, \"Expected `onError` callback to be provided.\");\n    xhr.onerror = () => {\n      args.onError(xhr.status);\n    };\n    xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n    xhr.onprogress = this.onProgress.bind(this, xhrId);\n\n    pendingRequest.onHeadersReceived = args.onHeadersReceived;\n    pendingRequest.onDone = args.onDone;\n    pendingRequest.onError = args.onError;\n    pendingRequest.onProgress = args.onProgress;\n\n    xhr.send(null);\n\n    return xhrId;\n  }\n\n  onProgress(xhrId, evt) {\n    const pendingRequest = this.pendingRequests[xhrId];\n    if (!pendingRequest) {\n      return; // Maybe abortRequest was called...\n    }\n    pendingRequest.onProgress?.(evt);\n  }\n\n  onStateChange(xhrId, evt) {\n    const pendingRequest = this.pendingRequests[xhrId];\n    if (!pendingRequest) {\n      return; // Maybe abortRequest was called...\n    }\n\n    const xhr = pendingRequest.xhr;\n    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n      pendingRequest.onHeadersReceived();\n      delete pendingRequest.onHeadersReceived;\n    }\n\n    if (xhr.readyState !== 4) {\n      return;\n    }\n\n    if (!(xhrId in this.pendingRequests)) {\n      // The XHR request might have been aborted in onHeadersReceived()\n      // callback, in which case we should abort request.\n      return;\n    }\n\n    delete this.pendingRequests[xhrId];\n\n    // Success status == 0 can be on ftp, file and other protocols.\n    if (xhr.status === 0 && this.isHttp) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n    const xhrStatus = xhr.status || OK_RESPONSE;\n\n    // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:\n    // \"A server MAY ignore the Range header\". This means it's possible to\n    // get a 200 rather than a 206 response from a range request.\n    const ok_response_on_range_request =\n      xhrStatus === OK_RESPONSE &&\n      pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n    if (\n      !ok_response_on_range_request &&\n      xhrStatus !== pendingRequest.expectedStatus\n    ) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n\n    const chunk = getArrayBuffer(xhr);\n    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n      const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n      const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n      if (matches) {\n        pendingRequest.onDone({\n          begin: parseInt(matches[1], 10),\n          chunk,\n        });\n      } else {\n        warn(`Missing or invalid \"Content-Range\" header.`);\n        pendingRequest.onError(0);\n      }\n    } else if (chunk) {\n      pendingRequest.onDone({\n        begin: 0,\n        chunk,\n      });\n    } else {\n      pendingRequest.onError(xhr.status);\n    }\n  }\n\n  getRequestXhr(xhrId) {\n    return this.pendingRequests[xhrId].xhr;\n  }\n\n  isPendingRequest(xhrId) {\n    return xhrId in this.pendingRequests;\n  }\n\n  abortRequest(xhrId) {\n    const xhr = this.pendingRequests[xhrId].xhr;\n    delete this.pendingRequests[xhrId];\n    xhr.abort();\n  }\n}\n\n/** @implements {IPDFStream} */\nclass PDFNetworkStream {\n  constructor(source) {\n    this._source = source;\n    this._manager = new NetworkManager(source);\n    this._rangeChunkSize = source.rangeChunkSize;\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  _onRangeRequestReaderClosed(reader) {\n    const i = this._rangeRequestReaders.indexOf(reader);\n    if (i >= 0) {\n      this._rangeRequestReaders.splice(i, 1);\n    }\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFNetworkStream.getFullReader can only be called once.\"\n    );\n    this._fullRequestReader = new PDFNetworkStreamFullRequestReader(\n      this._manager,\n      this._source\n    );\n    return this._fullRequestReader;\n  }\n\n  getRangeReader(begin, end) {\n    const reader = new PDFNetworkStreamRangeRequestReader(\n      this._manager,\n      begin,\n      end\n    );\n    reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFNetworkStreamFullRequestReader {\n  constructor(manager, source) {\n    this._manager = manager;\n\n    this._url = source.url;\n    this._fullRequestId = manager.request({\n      onHeadersReceived: this._onHeadersReceived.bind(this),\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this),\n    });\n    this._headersCapability = Promise.withResolvers();\n    this._disableRange = source.disableRange || false;\n    this._contentLength = source.length; // Optional\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = false;\n    this._isRangeSupported = false;\n\n    this._cachedChunks = [];\n    this._requests = [];\n    this._done = false;\n    this._storedError = undefined;\n    this._filename = null;\n\n    this.onProgress = null;\n  }\n\n  _onHeadersReceived() {\n    const fullRequestXhrId = this._fullRequestId;\n    const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n    this._manager._responseOrigin = getResponseOrigin(\n      fullRequestXhr.responseURL\n    );\n\n    const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();\n    const responseHeaders = new Headers(\n      rawResponseHeaders\n        ? rawResponseHeaders\n            .trimStart()\n            .replace(/[^\\S ]+$/, \"\") // Not `trimEnd`, to keep regular spaces.\n            .split(/[\\r\\n]+/)\n            .map(x => {\n              const [key, ...val] = x.split(\": \");\n              return [key, val.join(\": \")];\n            })\n        : []\n    );\n\n    const { allowRangeRequests, suggestedLength } =\n      validateRangeRequestCapabilities({\n        responseHeaders,\n        isHttp: this._manager.isHttp,\n        rangeChunkSize: this._rangeChunkSize,\n        disableRange: this._disableRange,\n      });\n\n    if (allowRangeRequests) {\n      this._isRangeSupported = true;\n    }\n    // Setting right content length.\n    this._contentLength = suggestedLength || this._contentLength;\n\n    this._filename = extractFilenameFromHeader(responseHeaders);\n\n    if (this._isRangeSupported) {\n      // NOTE: by cancelling the full request, and then issuing range\n      // requests, there will be an issue for sites where you can only\n      // request the pdf once. However, if this is the case, then the\n      // server should not be returning that it can support range requests.\n      this._manager.abortRequest(fullRequestXhrId);\n    }\n\n    this._headersCapability.resolve();\n  }\n\n  _onDone(data) {\n    if (data) {\n      if (this._requests.length > 0) {\n        const requestCapability = this._requests.shift();\n        requestCapability.resolve({ value: data.chunk, done: false });\n      } else {\n        this._cachedChunks.push(data.chunk);\n      }\n    }\n    this._done = true;\n    if (this._cachedChunks.length > 0) {\n      return;\n    }\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n  }\n\n  _onError(status) {\n    this._storedError = createResponseError(status, this._url);\n    this._headersCapability.reject(this._storedError);\n    for (const requestCapability of this._requests) {\n      requestCapability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._cachedChunks.length = 0;\n  }\n\n  _onProgress(evt) {\n    this.onProgress?.({\n      loaded: evt.loaded,\n      total: evt.lengthComputable ? evt.total : this._contentLength,\n    });\n  }\n\n  get filename() {\n    return this._filename;\n  }\n\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  get contentLength() {\n    return this._contentLength;\n  }\n\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n\n  async read() {\n    await this._headersCapability.promise;\n\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._cachedChunks.length > 0) {\n      const chunk = this._cachedChunks.shift();\n      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    this._headersCapability.reject(reason);\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n    if (this._manager.isPendingRequest(this._fullRequestId)) {\n      this._manager.abortRequest(this._fullRequestId);\n    }\n    this._fullRequestReader = null;\n  }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFNetworkStreamRangeRequestReader {\n  constructor(manager, begin, end) {\n    this._manager = manager;\n\n    this._url = manager.url;\n    this._requestId = manager.request({\n      begin,\n      end,\n      onHeadersReceived: this._onHeadersReceived.bind(this),\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this),\n    });\n    this._requests = [];\n    this._queuedChunk = null;\n    this._done = false;\n    this._storedError = undefined;\n\n    this.onProgress = null;\n    this.onClosed = null;\n  }\n\n  _onHeadersReceived() {\n    const responseOrigin = getResponseOrigin(\n      this._manager.getRequestXhr(this._requestId)?.responseURL\n    );\n\n    if (responseOrigin !== this._manager._responseOrigin) {\n      this._storedError = new Error(\n        `Expected range response-origin \"${responseOrigin}\" to match \"${this._manager._responseOrigin}\".`\n      );\n      this._onError(0);\n    }\n  }\n\n  _close() {\n    this.onClosed?.(this);\n  }\n\n  _onDone(data) {\n    const chunk = data.chunk;\n    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({ value: chunk, done: false });\n    } else {\n      this._queuedChunk = chunk;\n    }\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n    this._close();\n  }\n\n  _onError(status) {\n    this._storedError ??= createResponseError(status, this._url);\n    for (const requestCapability of this._requests) {\n      requestCapability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._queuedChunk = null;\n  }\n\n  _onProgress(evt) {\n    if (!this.isStreamingSupported) {\n      this.onProgress?.({ loaded: evt.loaded });\n    }\n  }\n\n  get isStreamingSupported() {\n    return false;\n  }\n\n  async read() {\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._queuedChunk !== null) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return { value: chunk, done: false };\n    }\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({ value: undefined, done: true });\n    }\n    this._requests.length = 0;\n    if (this._manager.isPendingRequest(this._requestId)) {\n      this._manager.abortRequest(this._requestId);\n    }\n    this._close();\n  }\n}\n\nexport { PDFNetworkStream };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { AbortException, assert } from \"../shared/util.js\";\nimport { createResponseError } from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n  throw new Error(\n    'Module \"./node_stream.js\" shall not be used with MOZCENTRAL builds.'\n  );\n}\n\nconst urlRegex = /^[a-z][a-z0-9\\-+.]+:/i;\n\nfunction parseUrlOrPath(sourceUrl) {\n  if (urlRegex.test(sourceUrl)) {\n    return new URL(sourceUrl);\n  }\n  const url = process.getBuiltinModule(\"url\");\n  return new URL(url.pathToFileURL(sourceUrl));\n}\n\nclass PDFNodeStream {\n  constructor(source) {\n    this.source = source;\n    this.url = parseUrlOrPath(source.url);\n    assert(\n      this.url.protocol === \"file:\",\n      \"PDFNodeStream only supports file:// URLs.\"\n    );\n\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n\n  getFullReader() {\n    assert(\n      !this._fullRequestReader,\n      \"PDFNodeStream.getFullReader can only be called once.\"\n    );\n    this._fullRequestReader = new PDFNodeStreamFsFullReader(this);\n    return this._fullRequestReader;\n  }\n\n  getRangeReader(start, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const rangeReader = new PDFNodeStreamFsRangeReader(this, start, end);\n    this._rangeRequestReaders.push(rangeReader);\n    return rangeReader;\n  }\n\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\n\nclass PDFNodeStreamFsFullReader {\n  constructor(stream) {\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    const source = stream.source;\n    this._contentLength = source.length; // optional\n    this._loaded = 0;\n    this._filename = null;\n\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n\n    this._readableStream = null;\n    this._readCapability = Promise.withResolvers();\n    this._headersCapability = Promise.withResolvers();\n\n    const fs = process.getBuiltinModule(\"fs\");\n    fs.promises.lstat(this._url).then(\n      stat => {\n        // Setting right content length.\n        this._contentLength = stat.size;\n\n        this._setReadableStream(fs.createReadStream(this._url));\n        this._headersCapability.resolve();\n      },\n      error => {\n        if (error.code === \"ENOENT\") {\n          error = createResponseError(/* status = */ 0, this._url.href);\n        }\n        this._storedError = error;\n        this._headersCapability.reject(error);\n      }\n    );\n  }\n\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n\n  get filename() {\n    return this._filename;\n  }\n\n  get contentLength() {\n    return this._contentLength;\n  }\n\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  async read() {\n    await this._readCapability.promise;\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = Promise.withResolvers();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength,\n    });\n\n    // Ensure that `read()` method returns ArrayBuffer.\n    const buffer = new Uint8Array(chunk).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    // Call `this._error()` method when cancel is called\n    // before _readableStream is set.\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"end\", () => {\n      // Destroy readable to minimize resource usage.\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n\n    // We need to stop reading when range is supported and streaming is\n    // disabled.\n    if (!this._isStreamingSupported && this._isRangeSupported) {\n      this._error(new AbortException(\"streaming is disabled\"));\n    }\n\n    // Destroy ReadableStream if already in errored state.\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\n    }\n  }\n}\n\nclass PDFNodeStreamFsRangeReader {\n  constructor(stream, start, end) {\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    this._loaded = 0;\n    this._readableStream = null;\n    this._readCapability = Promise.withResolvers();\n    const source = stream.source;\n    this._isStreamingSupported = !source.disableStream;\n\n    const fs = process.getBuiltinModule(\"fs\");\n    this._setReadableStream(\n      fs.createReadStream(this._url, { start, end: end - 1 })\n    );\n  }\n\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  async read() {\n    await this._readCapability.promise;\n    if (this._done) {\n      return { value: undefined, done: true };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = Promise.withResolvers();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    this.onProgress?.({ loaded: this._loaded });\n\n    // Ensure that `read()` method returns ArrayBuffer.\n    const buffer = new Uint8Array(chunk).buffer;\n    return { value: buffer, done: false };\n  }\n\n  cancel(reason) {\n    // Call `this._error()` method when cancel is called\n    // before _readableStream is set.\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"end\", () => {\n      // Destroy readableStream to minimize resource usage.\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n\n    // Destroy readableStream if already in errored state.\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\n    }\n  }\n}\n\nexport { PDFNodeStream };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst INITIAL_DATA = Symbol(\"INITIAL_DATA\");\n\n/**\n * A PDF document and page is built of many objects. E.g. there are objects for\n * fonts, images, rendering code, etc. These objects may get processed inside of\n * a worker. This class implements some basic methods to manage these objects.\n */\nclass PDFObjects {\n  #objs = Object.create(null);\n\n  /**\n   * Ensures there is an object defined for `objId`.\n   *\n   * @param {string} objId\n   * @returns {Object}\n   */\n  #ensureObj(objId) {\n    return (this.#objs[objId] ||= {\n      ...Promise.withResolvers(),\n      data: INITIAL_DATA,\n    });\n  }\n\n  /**\n   * If called *without* callback, this returns the data of `objId` but the\n   * object needs to be resolved. If it isn't, this method throws.\n   *\n   * If called *with* a callback, the callback is called with the data of the\n   * object once the object is resolved. That means, if you call this method\n   * and the object is already resolved, the callback gets called right away.\n   *\n   * @param {string} objId\n   * @param {function} [callback]\n   * @returns {any}\n   */\n  get(objId, callback = null) {\n    // If there is a callback, then the get can be async and the object is\n    // not required to be resolved right now.\n    if (callback) {\n      const obj = this.#ensureObj(objId);\n      obj.promise.then(() => callback(obj.data));\n      return null;\n    }\n    // If there isn't a callback, the user expects to get the resolved data\n    // directly.\n    const obj = this.#objs[objId];\n    // If there isn't an object yet or the object isn't resolved, then the\n    // data isn't ready yet!\n    if (!obj || obj.data === INITIAL_DATA) {\n      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n    }\n    return obj.data;\n  }\n\n  /**\n   * @param {string} objId\n   * @returns {boolean}\n   */\n  has(objId) {\n    const obj = this.#objs[objId];\n    return !!obj && obj.data !== INITIAL_DATA;\n  }\n\n  /**\n   * @param {string} objId\n   * @returns {boolean}\n   */\n  delete(objId) {\n    const obj = this.#objs[objId];\n    if (!obj || obj.data === INITIAL_DATA) {\n      // Only allow removing the object *after* it's been resolved.\n      return false;\n    }\n    delete this.#objs[objId];\n    return true;\n  }\n\n  /**\n   * Resolves the object `objId` with optional `data`.\n   *\n   * @param {string} objId\n   * @param {any} [data]\n   */\n  resolve(objId, data = null) {\n    const obj = this.#ensureObj(objId);\n    obj.data = data;\n    obj.resolve();\n  }\n\n  clear() {\n    for (const objId in this.#objs) {\n      const { data } = this.#objs[objId];\n      data?.bitmap?.close(); // Release any `ImageBitmap` data.\n    }\n    this.#objs = Object.create(null);\n  }\n\n  *[Symbol.iterator]() {\n    for (const objId in this.#objs) {\n      const { data } = this.#objs[objId];\n\n      if (data === INITIAL_DATA) {\n        continue;\n      }\n      yield [objId, data];\n    }\n  }\n}\n\nexport { PDFObjects };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nimport {\n  AbortException,\n  FeatureTest,\n  shadow,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { OutputScale, setLayerDimensions } from \"./display_utils.js\";\n\n/**\n * @typedef {Object} TextLayerParameters\n * @property {ReadableStream | TextContent} textContentSource - Text content to\n *   render, i.e. the value returned by the page's `streamTextContent` or\n *   `getTextContent` method.\n * @property {HTMLElement} container - The DOM node that will contain the text\n *   runs.\n * @property {PageViewport} viewport - The target viewport to properly layout\n *   the text runs.\n */\n\n/**\n * @typedef {Object} TextLayerUpdateParameters\n * @property {PageViewport} viewport - The target viewport to properly layout\n *   the text runs.\n * @property {function} [onBefore] - Callback invoked before the textLayer is\n *   updated in the DOM.\n */\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\n\nclass TextLayer {\n  #capability = Promise.withResolvers();\n\n  #container = null;\n\n  #disableProcessItems = false;\n\n  #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n\n  #lang = null;\n\n  #layoutTextParams = null;\n\n  #pageHeight = 0;\n\n  #pageWidth = 0;\n\n  #reader = null;\n\n  #rootContainer = null;\n\n  #rotation = 0;\n\n  #scale = 0;\n\n  #styleCache = Object.create(null);\n\n  #textContentItemsStr = [];\n\n  #textContentSource = null;\n\n  #textDivs = [];\n\n  #textDivProperties = new WeakMap();\n\n  #transform = null;\n\n  static #ascentCache = new Map();\n\n  static #canvasContexts = new Map();\n\n  static #canvasCtxFonts = new WeakMap();\n\n  static #minFontSize = null;\n\n  static #pendingTextLayers = new Set();\n\n  /**\n   * @param {TextLayerParameters} options\n   */\n  constructor({ textContentSource, container, viewport }) {\n    if (textContentSource instanceof ReadableStream) {\n      this.#textContentSource = textContentSource;\n    } else if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      typeof textContentSource === \"object\"\n    ) {\n      this.#textContentSource = new ReadableStream({\n        start(controller) {\n          controller.enqueue(textContentSource);\n          controller.close();\n        },\n      });\n    } else {\n      throw new Error('No \"textContentSource\" parameter specified.');\n    }\n    this.#container = this.#rootContainer = container;\n\n    this.#scale = viewport.scale * OutputScale.pixelRatio;\n    this.#rotation = viewport.rotation;\n    this.#layoutTextParams = {\n      div: null,\n      properties: null,\n      ctx: null,\n    };\n    const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n    this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n    this.#pageWidth = pageWidth;\n    this.#pageHeight = pageHeight;\n\n    TextLayer.#ensureMinFontSizeComputed();\n\n    setLayerDimensions(container, viewport);\n\n    // Always clean-up the temporary canvas once rendering is no longer pending.\n    this.#capability.promise\n      .finally(() => {\n        TextLayer.#pendingTextLayers.delete(this);\n        this.#layoutTextParams = null;\n        this.#styleCache = null;\n      })\n      .catch(() => {\n        // Avoid \"Uncaught promise\" messages in the console.\n      });\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"pageWidth\", {\n        get() {\n          return this.#pageWidth;\n        },\n      });\n      Object.defineProperty(this, \"pageHeight\", {\n        get() {\n          return this.#pageHeight;\n        },\n      });\n    }\n  }\n\n  static get fontFamilyMap() {\n    const { isWindows, isFirefox } = FeatureTest.platform;\n    return shadow(\n      this,\n      \"fontFamilyMap\",\n      new Map([\n        [\n          \"sans-serif\",\n          `${isWindows && isFirefox ? \"Calibri, \" : \"\"}sans-serif`,\n        ],\n        [\n          \"monospace\",\n          `${isWindows && isFirefox ? \"Lucida Console, \" : \"\"}monospace`,\n        ],\n      ])\n    );\n  }\n\n  /**\n   * Render the textLayer.\n   * @returns {Promise}\n   */\n  render() {\n    const pump = () => {\n      this.#reader.read().then(({ value, done }) => {\n        if (done) {\n          this.#capability.resolve();\n          return;\n        }\n        this.#lang ??= value.lang;\n        Object.assign(this.#styleCache, value.styles);\n        this.#processItems(value.items);\n        pump();\n      }, this.#capability.reject);\n    };\n    this.#reader = this.#textContentSource.getReader();\n    TextLayer.#pendingTextLayers.add(this);\n    pump();\n\n    return this.#capability.promise;\n  }\n\n  /**\n   * Update a previously rendered textLayer, if necessary.\n   * @param {TextLayerUpdateParameters} options\n   * @returns {undefined}\n   */\n  update({ viewport, onBefore = null }) {\n    const scale = viewport.scale * OutputScale.pixelRatio;\n    const rotation = viewport.rotation;\n\n    if (rotation !== this.#rotation) {\n      onBefore?.();\n      this.#rotation = rotation;\n      setLayerDimensions(this.#rootContainer, { rotation });\n    }\n\n    if (scale !== this.#scale) {\n      onBefore?.();\n      this.#scale = scale;\n      const params = {\n        div: null,\n        properties: null,\n        ctx: TextLayer.#getCtx(this.#lang),\n      };\n      for (const div of this.#textDivs) {\n        params.properties = this.#textDivProperties.get(div);\n        params.div = div;\n        this.#layout(params);\n      }\n    }\n  }\n\n  /**\n   * Cancel rendering of the textLayer.\n   * @returns {undefined}\n   */\n  cancel() {\n    const abortEx = new AbortException(\"TextLayer task cancelled.\");\n\n    this.#reader?.cancel(abortEx).catch(() => {\n      // Avoid \"Uncaught promise\" messages in the console.\n    });\n    this.#reader = null;\n\n    this.#capability.reject(abortEx);\n  }\n\n  /**\n   * @type {Array<HTMLElement>} HTML elements that correspond to the text items\n   *   of the textContent input.\n   *   This is output and will initially be set to an empty array.\n   */\n  get textDivs() {\n    return this.#textDivs;\n  }\n\n  /**\n   * @type {Array<string>} Strings that correspond to the `str` property of\n   *   the text items of the textContent input.\n   *   This is output and will initially be set to an empty array\n   */\n  get textContentItemsStr() {\n    return this.#textContentItemsStr;\n  }\n\n  #processItems(items) {\n    if (this.#disableProcessItems) {\n      return;\n    }\n    this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang);\n\n    const textDivs = this.#textDivs,\n      textContentItemsStr = this.#textContentItemsStr;\n\n    for (const item of items) {\n      // No point in rendering many divs as it would make the browser\n      // unusable even after the divs are rendered.\n      if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n        warn(\"Ignoring additional textDivs for performance reasons.\");\n\n        this.#disableProcessItems = true; // Avoid multiple warnings for one page.\n        return;\n      }\n\n      if (item.str === undefined) {\n        if (\n          item.type === \"beginMarkedContentProps\" ||\n          item.type === \"beginMarkedContent\"\n        ) {\n          const parent = this.#container;\n          this.#container = document.createElement(\"span\");\n          this.#container.classList.add(\"markedContent\");\n          if (item.id) {\n            this.#container.setAttribute(\"id\", `${item.id}`);\n          }\n          parent.append(this.#container);\n        } else if (item.type === \"endMarkedContent\") {\n          this.#container = this.#container.parentNode;\n        }\n        continue;\n      }\n      textContentItemsStr.push(item.str);\n      this.#appendText(item);\n    }\n  }\n\n  #appendText(geom) {\n    // Initialize all used properties to keep the caches monomorphic.\n    const textDiv = document.createElement(\"span\");\n    const textDivProperties = {\n      angle: 0,\n      canvasWidth: 0,\n      hasText: geom.str !== \"\",\n      hasEOL: geom.hasEOL,\n      fontSize: 0,\n    };\n    this.#textDivs.push(textDiv);\n\n    const tx = Util.transform(this.#transform, geom.transform);\n    let angle = Math.atan2(tx[1], tx[0]);\n    const style = this.#styleCache[geom.fontName];\n    if (style.vertical) {\n      angle += Math.PI / 2;\n    }\n\n    let fontFamily =\n      (this.#fontInspectorEnabled && style.fontSubstitution) ||\n      style.fontFamily;\n\n    // Workaround for bug 1922063.\n    fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;\n    const fontHeight = Math.hypot(tx[2], tx[3]);\n    const fontAscent =\n      fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang);\n\n    let left, top;\n    if (angle === 0) {\n      left = tx[4];\n      top = tx[5] - fontAscent;\n    } else {\n      left = tx[4] + fontAscent * Math.sin(angle);\n      top = tx[5] - fontAscent * Math.cos(angle);\n    }\n\n    const scaleFactorStr = \"calc(var(--total-scale-factor) *\";\n    const divStyle = textDiv.style;\n    // Setting the style properties individually, rather than all at once,\n    // should be OK since the `textDiv` isn't appended to the document yet.\n    if (this.#container === this.#rootContainer) {\n      divStyle.left = `${((100 * left) / this.#pageWidth).toFixed(2)}%`;\n      divStyle.top = `${((100 * top) / this.#pageHeight).toFixed(2)}%`;\n    } else {\n      // We're in a marked content span, hence we can't use percents.\n      divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;\n      divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;\n    }\n    // We multiply the font size by #minFontSize, and then #layout will\n    // scale the element by 1/#minFontSize. This allows us to effectively\n    // ignore the minimum font size enforced by the browser, so that the text\n    // layer <span>s can always match the size of the text in the canvas.\n    divStyle.fontSize = `${scaleFactorStr}${(TextLayer.#minFontSize * fontHeight).toFixed(2)}px)`;\n    divStyle.fontFamily = fontFamily;\n\n    textDivProperties.fontSize = fontHeight;\n\n    // Keeps screen readers from pausing on every new text span.\n    textDiv.setAttribute(\"role\", \"presentation\");\n\n    textDiv.textContent = geom.str;\n    // geom.dir may be 'ttb' for vertical texts.\n    textDiv.dir = geom.dir;\n\n    // `fontName` is only used by the FontInspector, and we only use `dataset`\n    // here to make the font name available in the debugger.\n    if (this.#fontInspectorEnabled) {\n      textDiv.dataset.fontName =\n        style.fontSubstitutionLoadedName || geom.fontName;\n    }\n    if (angle !== 0) {\n      textDivProperties.angle = angle * (180 / Math.PI);\n    }\n    // We don't bother scaling single-char text divs, because it has very\n    // little effect on text highlighting. This makes scrolling on docs with\n    // lots of such divs a lot faster.\n    let shouldScaleText = false;\n    if (geom.str.length > 1) {\n      shouldScaleText = true;\n    } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n      const absScaleX = Math.abs(geom.transform[0]),\n        absScaleY = Math.abs(geom.transform[3]);\n      // When the horizontal/vertical scaling differs significantly, also scale\n      // even single-char text to improve highlighting (fixes issue11713.pdf).\n      if (\n        absScaleX !== absScaleY &&\n        Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5\n      ) {\n        shouldScaleText = true;\n      }\n    }\n    if (shouldScaleText) {\n      textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n    }\n    this.#textDivProperties.set(textDiv, textDivProperties);\n\n    // Finally, layout and append the text to the DOM.\n    this.#layoutTextParams.div = textDiv;\n    this.#layoutTextParams.properties = textDivProperties;\n    this.#layout(this.#layoutTextParams);\n\n    if (textDivProperties.hasText) {\n      this.#container.append(textDiv);\n    }\n    if (textDivProperties.hasEOL) {\n      const br = document.createElement(\"br\");\n      br.setAttribute(\"role\", \"presentation\");\n      this.#container.append(br);\n    }\n  }\n\n  #layout(params) {\n    const { div, properties, ctx } = params;\n    const { style } = div;\n\n    let transform = \"\";\n    if (TextLayer.#minFontSize > 1) {\n      transform = `scale(${1 / TextLayer.#minFontSize})`;\n    }\n\n    if (properties.canvasWidth !== 0 && properties.hasText) {\n      const { fontFamily } = style;\n      const { canvasWidth, fontSize } = properties;\n\n      TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily);\n      // Only measure the width for multi-char text divs, see `appendText`.\n      const { width } = ctx.measureText(div.textContent);\n\n      if (width > 0) {\n        transform = `scaleX(${(canvasWidth * this.#scale) / width}) ${transform}`;\n      }\n    }\n    if (properties.angle !== 0) {\n      transform = `rotate(${properties.angle}deg) ${transform}`;\n    }\n    if (transform.length > 0) {\n      style.transform = transform;\n    }\n  }\n\n  /**\n   * Clean-up global textLayer data.\n   * @returns {undefined}\n   */\n  static cleanup() {\n    if (this.#pendingTextLayers.size > 0) {\n      return;\n    }\n    this.#ascentCache.clear();\n\n    for (const { canvas } of this.#canvasContexts.values()) {\n      canvas.remove();\n    }\n    this.#canvasContexts.clear();\n  }\n\n  static #getCtx(lang = null) {\n    let ctx = this.#canvasContexts.get((lang ||= \"\"));\n    if (!ctx) {\n      // We don't use an OffscreenCanvas here because we use serif/sans serif\n      // fonts with it and they depends on the locale.\n      // In Firefox, the <html> element get a lang attribute that depends on\n      // what Fluent returns for the locale and the OffscreenCanvas uses\n      // the OS locale.\n      // Those two locales can be different and consequently the used fonts will\n      // be different (see bug 1869001).\n      // Ideally, we should use in the text layer the fonts we've in the pdf (or\n      // their replacements when they aren't embedded) and then we can use an\n      // OffscreenCanvas.\n      const canvas = document.createElement(\"canvas\");\n      canvas.className = \"hiddenCanvasElement\";\n      canvas.lang = lang;\n      document.body.append(canvas);\n      ctx = canvas.getContext(\"2d\", {\n        alpha: false,\n        willReadFrequently: true,\n      });\n      this.#canvasContexts.set(lang, ctx);\n\n      // Also, initialize state for the `#ensureCtxFont` method.\n      this.#canvasCtxFonts.set(ctx, { size: 0, family: \"\" });\n    }\n    return ctx;\n  }\n\n  static #ensureCtxFont(ctx, size, family) {\n    const cached = this.#canvasCtxFonts.get(ctx);\n    if (size === cached.size && family === cached.family) {\n      return; // The font is already set.\n    }\n    ctx.font = `${size}px ${family}`;\n    cached.size = size;\n    cached.family = family;\n  }\n\n  /**\n   * Compute the minimum font size enforced by the browser.\n   */\n  static #ensureMinFontSizeComputed() {\n    if (this.#minFontSize !== null) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    div.style.opacity = 0;\n    div.style.lineHeight = 1;\n    div.style.fontSize = \"1px\";\n    div.style.position = \"absolute\";\n    div.textContent = \"X\";\n    document.body.append(div);\n    // In `display:block` elements contain a single line of text,\n    // the height matches the line height (which, when set to 1,\n    // matches the actual font size).\n    this.#minFontSize = div.getBoundingClientRect().height;\n    div.remove();\n  }\n\n  static #getAscent(fontFamily, style, lang) {\n    const cachedAscent = this.#ascentCache.get(fontFamily);\n    if (cachedAscent) {\n      return cachedAscent;\n    }\n    const ctx = this.#getCtx(lang);\n\n    ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n    this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily);\n    const metrics = ctx.measureText(\"\");\n\n    const ascent = metrics.fontBoundingBoxAscent;\n    const descent = Math.abs(metrics.fontBoundingBoxDescent);\n\n    ctx.canvas.width = ctx.canvas.height = 0;\n    let ratio = 0.8; // DEFAULT_FONT_ASCENT\n\n    if (ascent) {\n      ratio = ascent / (ascent + descent);\n    } else {\n      if (\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        FeatureTest.platform.isFirefox\n      ) {\n        warn(\n          \"Enable the `dom.textMetrics.fontBoundingBox.enabled` preference \" +\n            \"in `about:config` to improve TextLayer rendering.\"\n        );\n      }\n      if (style.ascent) {\n        ratio = style.ascent;\n      } else if (style.descent) {\n        ratio = 1 + style.descent;\n      }\n    }\n\n    this.#ascentCache.set(fontFamily, ratio);\n    return ratio;\n  }\n}\n\nexport { TextLayer };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n  AbortException,\n  AnnotationMode,\n  assert,\n  FeatureTest,\n  getVerbosityLevel,\n  info,\n  isNodeJS,\n  RenderingIntentFlag,\n  setVerbosityLevel,\n  shadow,\n  unreachable,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  AnnotationStorage,\n  PrintAnnotationStorage,\n  SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport {\n  deprecated,\n  isDataScheme,\n  isValidFetchUrl,\n  PageViewport,\n  RenderingCancelledException,\n  StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n  getDataProp,\n  getFactoryUrlProp,\n  getUrlProp,\n  isRefProxy,\n  LoopbackPort,\n} from \"./api_utils.js\";\nimport { MessageHandler, wrapReason } from \"../shared/message_handler.js\";\nimport {\n  NodeCanvasFactory,\n  NodeCMapReaderFactory,\n  NodeFilterFactory,\n  NodeStandardFontDataFactory,\n  NodeWasmFactory,\n} from \"display-node_utils\";\nimport { CanvasDependencyTracker } from \"./canvas_dependency_tracker.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { DOMCanvasFactory } from \"./canvas_factory.js\";\nimport { DOMCMapReaderFactory } from \"display-cmap_reader_factory\";\nimport { DOMFilterFactory } from \"./filter_factory.js\";\nimport { DOMStandardFontDataFactory } from \"display-standard_fontdata_factory\";\nimport { DOMWasmFactory } from \"display-wasm_factory\";\nimport { FontInfo } from \"../shared/obj-bin-transform.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { PDFObjects } from \"./pdf_objects.js\";\nimport { TextLayer } from \"./text_layer.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n *            Int16Array | Uint16Array |\n *            Int32Array | Uint32Array | Float32Array |\n *            Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {TypedArray | ArrayBuffer | Array<number> | string} [data] -\n *   Binary PDF data.\n *   Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n *   BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n *   NOTE: If TypedArrays are used they will generally be transferred to the\n *   worker-thread. This will help reduce main-thread memory usage, however\n *   it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n *   cross-site Access-Control requests should be made using credentials such\n *   as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n *   reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n *   transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n *   per range request. The default value is 65536 (= 2^16).\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n *   parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n *   from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n *   attempting to recover valid absolute URLs for annotations, and outline\n *   items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n *   located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n *   packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n *   reading built-in CMap files.\n *   The default value is {DOMCMapReaderFactory}.\n * @property {string} [iccUrl] - The URL where the predefined ICC profiles are\n *   located. Include the trailing slash.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n *   embedded in the PDF document will fallback to a system font.\n *   The default value is `true` in web environments and `false` in Node.js;\n *   unless `disableFontFace === true` in which case this defaults to `false`\n *   regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n *   files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n *   when reading the standard font files.\n *   The default value is {DOMStandardFontDataFactory}.\n * @property {string} [wasmUrl] - The URL where the wasm files are located.\n *   Include the trailing slash.\n * @property {Object} [WasmFactory] - The factory that will be used\n *   when reading the wasm files.\n *   The default value is {DOMWasmFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n *   worker-thread when reading CMap and standard font files. When `true`,\n *   the `CMapReaderFactory`, `StandardFontDataFactory`, and `WasmFactory`\n *   options are ignored.\n *   The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [useWasm] - Attempt to use WebAssembly in order to\n *    improve e.g. image decoding performance.\n *    The default value is `true`.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n *   `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n *   PDF data cannot be successfully parsed, instead of attempting to recover\n *   whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n *   pixels, i.e. width * height. Images above this value will not be rendered.\n *   Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n *   as JavaScript. Primarily used to improve performance of PDF functions.\n *   The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n *   `OffscreenCanvas` in the worker. Primarily used to improve performance of\n *   image conversion/rendering.\n *   The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [isImageDecoderSupported] - Determines if we can use\n *   `ImageDecoder` in the worker. Primarily used to improve performance of\n *   image conversion/rendering.\n *   The default value is `true` in web environments and `false` in Node.js.\n *\n *   NOTE: Also temporarily disabled in Chromium browsers, until we no longer\n *   support the affected browser versions, because of various bugs:\n *\n *    - Crashes when using the BMP decoder with huge images, e.g. issue6741.pdf;\n *      see https://issues.chromium.org/issues/374807001\n *\n *    - Broken images when using the JPEG decoder with images that have custom\n *      colour profiles, e.g. GitHub discussion 19030;\n *      see https://issues.chromium.org/issues/378869810\n *\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n *   know when an image must be resized (uses `OffscreenCanvas` in the worker).\n *   If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n *   OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n *   If disabled, fonts will be rendered using a built-in font renderer that\n *   constructs the glyphs with primitive path commands.\n *   The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n *   which are unused during rendering of PDF documents, when exporting the\n *   parsed font data from the worker-thread. This may be useful for debugging\n *   purposes (and backwards compatibility), but note that it will lead to\n *   increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n *   The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n *   context to create elements with and to load resources, such as fonts,\n *   into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n *   files. When enabled, and if the server supports partial content requests,\n *   then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n *   By default PDF.js attempts to load PDF files in chunks. The default value\n *   is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n *   data. When range requests are enabled PDF.js will automatically keep\n *   fetching more data even if it isn't needed to display the current page.\n *   The default value is `false`.\n *\n *   NOTE: It is also necessary to disable streaming, see above, in order for\n *   disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n *   (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [CanvasFactory] - The factory that will be used when\n *    creating canvases. The default value is {DOMCanvasFactory}.\n * @property {Object} [FilterFactory] - The factory that will be used to\n *    create SVG filters when rendering some images on the main canvas.\n *    The default value is {DOMFilterFactory}.\n * @property {boolean} [enableHWA] - Enables hardware acceleration for\n *   rendering. The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n *   src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n *         already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src = {}) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n    if (typeof src === \"string\" || src instanceof URL) {\n      src = { url: src };\n    } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {\n      src = { data: src };\n    }\n  }\n  const task = new PDFDocumentLoadingTask();\n  const { docId } = task;\n\n  const url = src.url ? getUrlProp(src.url) : null;\n  const data = src.data ? getDataProp(src.data) : null;\n  const httpHeaders = src.httpHeaders || null;\n  const withCredentials = src.withCredentials === true;\n  const password = src.password ?? null;\n  const rangeTransport =\n    src.range instanceof PDFDataRangeTransport ? src.range : null;\n  const rangeChunkSize =\n    Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n      ? src.rangeChunkSize\n      : 2 ** 16;\n  let worker = src.worker instanceof PDFWorker ? src.worker : null;\n  const verbosity = src.verbosity;\n  // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n  // URLs anyway. We want to avoid sending them to the worker-thread, since\n  // they contain the *entire* PDF document and can thus be arbitrarily long.\n  const docBaseUrl =\n    typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n      ? src.docBaseUrl\n      : null;\n  const cMapUrl = getFactoryUrlProp(src.cMapUrl);\n  const cMapPacked = src.cMapPacked !== false;\n  const CMapReaderFactory =\n    src.CMapReaderFactory ||\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n      ? NodeCMapReaderFactory\n      : DOMCMapReaderFactory);\n  const iccUrl = getFactoryUrlProp(src.iccUrl);\n  const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl);\n  const StandardFontDataFactory =\n    src.StandardFontDataFactory ||\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n      ? NodeStandardFontDataFactory\n      : DOMStandardFontDataFactory);\n  const wasmUrl = getFactoryUrlProp(src.wasmUrl);\n  const WasmFactory =\n    src.WasmFactory ||\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n      ? NodeWasmFactory\n      : DOMWasmFactory);\n  const ignoreErrors = src.stopAtErrors !== true;\n  const maxImageSize =\n    Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n      ? src.maxImageSize\n      : -1;\n  const isEvalSupported = src.isEvalSupported !== false;\n  const isOffscreenCanvasSupported =\n    typeof src.isOffscreenCanvasSupported === \"boolean\"\n      ? src.isOffscreenCanvasSupported\n      : !isNodeJS;\n  const isImageDecoderSupported =\n    // eslint-disable-next-line no-nested-ternary\n    typeof src.isImageDecoderSupported === \"boolean\"\n      ? src.isImageDecoderSupported\n      : // eslint-disable-next-line no-nested-ternary\n        typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n        ? true\n        : typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n          ? false\n          : !isNodeJS && (FeatureTest.platform.isFirefox || !globalThis.chrome);\n  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n    ? src.canvasMaxAreaInBytes\n    : -1;\n  const disableFontFace =\n    typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n  const fontExtraProperties = src.fontExtraProperties === true;\n  const enableXfa = src.enableXfa === true;\n  const ownerDocument = src.ownerDocument || globalThis.document;\n  const disableRange = src.disableRange === true;\n  const disableStream = src.disableStream === true;\n  const disableAutoFetch = src.disableAutoFetch === true;\n  const pdfBug = src.pdfBug === true;\n  const CanvasFactory =\n    src.CanvasFactory ||\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n      ? NodeCanvasFactory\n      : DOMCanvasFactory);\n  const FilterFactory =\n    src.FilterFactory ||\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n      ? NodeFilterFactory\n      : DOMFilterFactory);\n  const enableHWA = src.enableHWA === true;\n  const useWasm = src.useWasm !== false;\n\n  // Parameters whose default values depend on other parameters.\n  const length = rangeTransport ? rangeTransport.length : (src.length ?? NaN);\n  const useSystemFonts =\n    typeof src.useSystemFonts === \"boolean\"\n      ? src.useSystemFonts\n      : !isNodeJS && !disableFontFace;\n  const useWorkerFetch =\n    typeof src.useWorkerFetch === \"boolean\"\n      ? src.useWorkerFetch\n      : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        !!(\n          CMapReaderFactory === DOMCMapReaderFactory &&\n          StandardFontDataFactory === DOMStandardFontDataFactory &&\n          WasmFactory === DOMWasmFactory &&\n          cMapUrl &&\n          standardFontDataUrl &&\n          wasmUrl &&\n          isValidFetchUrl(cMapUrl, document.baseURI) &&\n          isValidFetchUrl(standardFontDataUrl, document.baseURI) &&\n          isValidFetchUrl(wasmUrl, document.baseURI)\n        );\n\n  // Parameters only intended for development/testing purposes.\n  const styleElement =\n    typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n      ? src.styleElement\n      : null;\n\n  // Set the main-thread verbosity level.\n  setVerbosityLevel(verbosity);\n\n  // Ensure that the various factories can be initialized, when necessary,\n  // since the user may provide *custom* ones.\n  const transportFactory = {\n    canvasFactory: new CanvasFactory({ ownerDocument, enableHWA }),\n    filterFactory: new FilterFactory({ docId, ownerDocument }),\n    cMapReaderFactory:\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      useWorkerFetch\n        ? null\n        : new CMapReaderFactory({ baseUrl: cMapUrl, isCompressed: cMapPacked }),\n    standardFontDataFactory:\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      useWorkerFetch\n        ? null\n        : new StandardFontDataFactory({ baseUrl: standardFontDataUrl }),\n    wasmFactory:\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      useWorkerFetch\n        ? null\n        : new WasmFactory({ baseUrl: wasmUrl }),\n  };\n\n  if (!worker) {\n    // Worker was not provided -- creating and owning our own. If message port\n    // is specified in global worker options, using it.\n    worker = PDFWorker.create({\n      verbosity,\n      port: GlobalWorkerOptions.workerPort,\n    });\n    task._worker = worker;\n  }\n\n  const docParams = {\n    docId,\n    apiVersion:\n      typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n        ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n        : null,\n    data,\n    password,\n    disableAutoFetch,\n    rangeChunkSize,\n    length,\n    docBaseUrl,\n    enableXfa,\n    evaluatorOptions: {\n      maxImageSize,\n      disableFontFace,\n      ignoreErrors,\n      isEvalSupported,\n      isOffscreenCanvasSupported,\n      isImageDecoderSupported,\n      canvasMaxAreaInBytes,\n      fontExtraProperties,\n      useSystemFonts,\n      useWasm,\n      useWorkerFetch,\n      cMapUrl,\n      iccUrl,\n      standardFontDataUrl,\n      wasmUrl,\n    },\n  };\n  const transportParams = {\n    ownerDocument,\n    pdfBug,\n    styleElement,\n    loadingParams: {\n      disableAutoFetch,\n      enableXfa,\n    },\n  };\n\n  worker.promise\n    .then(function () {\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n      if (worker.destroyed) {\n        throw new Error(\"Worker was destroyed\");\n      }\n\n      const workerIdPromise = worker.messageHandler.sendWithPromise(\n        \"GetDocRequest\",\n        docParams,\n        data ? [data.buffer] : null\n      );\n\n      let networkStream;\n      if (rangeTransport) {\n        networkStream = new PDFDataTransportStream(rangeTransport, {\n          disableRange,\n          disableStream,\n        });\n      } else if (!data) {\n        if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n          throw new Error(\"Not implemented: NetworkStream\");\n        }\n        if (!url) {\n          throw new Error(\"getDocument - no `url` parameter provided.\");\n        }\n        // eslint-disable-next-line no-nested-ternary\n        const NetworkStream = isValidFetchUrl(url)\n          ? PDFFetchStream\n          : typeof PDFJSDev !== \"undefined\" &&\n              PDFJSDev.test(\"GENERIC\") &&\n              isNodeJS\n            ? PDFNodeStream\n            : PDFNetworkStream;\n\n        networkStream = new NetworkStream({\n          url,\n          length,\n          httpHeaders,\n          withCredentials,\n          rangeChunkSize,\n          disableRange,\n          disableStream,\n        });\n      }\n\n      return workerIdPromise.then(workerId => {\n        if (task.destroyed) {\n          throw new Error(\"Loading aborted\");\n        }\n        if (worker.destroyed) {\n          throw new Error(\"Worker was destroyed\");\n        }\n\n        const messageHandler = new MessageHandler(docId, workerId, worker.port);\n        const transport = new WorkerTransport(\n          messageHandler,\n          task,\n          networkStream,\n          transportParams,\n          transportFactory,\n          enableHWA\n        );\n        task._transport = transport;\n        messageHandler.send(\"Ready\", null);\n      });\n    })\n    .catch(task._capability.reject);\n\n  return task;\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n  static #docId = 0;\n\n  /**\n   * @private\n   */\n  _capability = Promise.withResolvers();\n\n  /**\n   * @private\n   */\n  _transport = null;\n\n  /**\n   * @private\n   */\n  _worker = null;\n\n  /**\n   * Unique identifier for the document loading task.\n   * @type {string}\n   */\n  docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n  /**\n   * Whether the loading task is destroyed or not.\n   * @type {boolean}\n   */\n  destroyed = false;\n\n  /**\n   * Callback to request a password if a wrong or no password was provided.\n   * The callback receives two parameters: a function that should be called\n   * with the new password, and a reason (see {@link PasswordResponses}).\n   * @type {function}\n   */\n  onPassword = null;\n\n  /**\n   * Callback to be able to monitor the loading progress of the PDF file\n   * (necessary to implement e.g. a loading bar).\n   * The callback receives an {@link OnProgressParameters} argument.\n   * @type {function}\n   */\n  onProgress = null;\n\n  /**\n   * Promise for document loading task completion.\n   * @type {Promise<PDFDocumentProxy>}\n   */\n  get promise() {\n    return this._capability.promise;\n  }\n\n  /**\n   * Abort all network requests and destroy the worker.\n   * @returns {Promise<void>} A promise that is resolved when destruction is\n   *   completed.\n   */\n  async destroy() {\n    this.destroyed = true;\n\n    try {\n      if (this._worker?.port) {\n        this._worker._pendingDestroy = true;\n      }\n      await this._transport?.destroy();\n    } catch (ex) {\n      if (this._worker?.port) {\n        delete this._worker._pendingDestroy;\n      }\n      throw ex;\n    }\n    this._transport = null;\n\n    this._worker?.destroy();\n    this._worker = null;\n  }\n\n  /**\n   * Attempt to fetch the raw data of the PDF document, when e.g.\n   *  - An exception was thrown during document initialization.\n   *  - An `onPassword` callback is delaying initialization.\n   * @returns {Promise<Uint8Array>}\n   */\n  async getData() {\n    return this._transport.getData();\n  }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n  #capability = Promise.withResolvers();\n\n  #progressiveDoneListeners = [];\n\n  #progressiveReadListeners = [];\n\n  #progressListeners = [];\n\n  #rangeListeners = [];\n\n  /**\n   * @param {number} length\n   * @param {Uint8Array|null} initialData\n   * @param {boolean} [progressiveDone]\n   * @param {string} [contentDispositionFilename]\n   */\n  constructor(\n    length,\n    initialData,\n    progressiveDone = false,\n    contentDispositionFilename = null\n  ) {\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n    this.contentDispositionFilename = contentDispositionFilename;\n  }\n\n  /**\n   * @param {function} listener\n   */\n  addRangeListener(listener) {\n    this.#rangeListeners.push(listener);\n  }\n\n  /**\n   * @param {function} listener\n   */\n  addProgressListener(listener) {\n    this.#progressListeners.push(listener);\n  }\n\n  /**\n   * @param {function} listener\n   */\n  addProgressiveReadListener(listener) {\n    this.#progressiveReadListeners.push(listener);\n  }\n\n  /**\n   * @param {function} listener\n   */\n  addProgressiveDoneListener(listener) {\n    this.#progressiveDoneListeners.push(listener);\n  }\n\n  /**\n   * @param {number} begin\n   * @param {Uint8Array|null} chunk\n   */\n  onDataRange(begin, chunk) {\n    for (const listener of this.#rangeListeners) {\n      listener(begin, chunk);\n    }\n  }\n\n  /**\n   * @param {number} loaded\n   * @param {number|undefined} total\n   */\n  onDataProgress(loaded, total) {\n    this.#capability.promise.then(() => {\n      for (const listener of this.#progressListeners) {\n        listener(loaded, total);\n      }\n    });\n  }\n\n  /**\n   * @param {Uint8Array|null} chunk\n   */\n  onDataProgressiveRead(chunk) {\n    this.#capability.promise.then(() => {\n      for (const listener of this.#progressiveReadListeners) {\n        listener(chunk);\n      }\n    });\n  }\n\n  onDataProgressiveDone() {\n    this.#capability.promise.then(() => {\n      for (const listener of this.#progressiveDoneListeners) {\n        listener();\n      }\n    });\n  }\n\n  transportReady() {\n    this.#capability.resolve();\n  }\n\n  /**\n   * @param {number} begin\n   * @param {number} end\n   */\n  requestDataRange(begin, end) {\n    unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n  }\n\n  abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n  constructor(pdfInfo, transport) {\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"getNetworkStreamName\", {\n        value: () => this._transport.getNetworkStreamName(),\n      });\n      Object.defineProperty(this, \"getXFADatasets\", {\n        value: () => this._transport.getXFADatasets(),\n      });\n      Object.defineProperty(this, \"getStartXRefPos\", {\n        value: () => this._transport.getStartXRefPos(),\n      });\n      Object.defineProperty(this, \"getAnnotArray\", {\n        value: pageIndex => this._transport.getAnnotArray(pageIndex),\n      });\n    }\n  }\n\n  /**\n   * @type {AnnotationStorage} Storage for annotation data in forms.\n   */\n  get annotationStorage() {\n    return this._transport.annotationStorage;\n  }\n\n  /**\n   * @type {Object} The canvas factory instance.\n   */\n  get canvasFactory() {\n    return this._transport.canvasFactory;\n  }\n\n  /**\n   * @type {Object} The filter factory instance.\n   */\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n\n  /**\n   * @type {number} Total number of pages in the PDF file.\n   */\n  get numPages() {\n    return this._pdfInfo.numPages;\n  }\n\n  /**\n   * @type {Array<string | null>} A (not guaranteed to be) unique ID to identify\n   *   the PDF document.\n   *   NOTE: The first element will always be defined for all PDF documents,\n   *   whereas the second element is only defined for *modified* PDF documents.\n   */\n  get fingerprints() {\n    return this._pdfInfo.fingerprints;\n  }\n\n  /**\n   * @type {boolean} True if only XFA form.\n   */\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n\n  /**\n   * NOTE: This is (mostly) intended to support printing of XFA forms.\n   *\n   * @type {Object | null} An object representing a HTML tree structure\n   *   to render the XFA, or `null` when no XFA form exists.\n   */\n  get allXfaHtml() {\n    return this._transport._htmlForXfa;\n  }\n\n  /**\n   * @param {number} pageNumber - The page number to get. The first page is 1.\n   * @returns {Promise<PDFPageProxy>} A promise that is resolved with\n   *   a {@link PDFPageProxy} object.\n   */\n  getPage(pageNumber) {\n    return this._transport.getPage(pageNumber);\n  }\n\n  /**\n   * @param {RefProxy} ref - The page reference.\n   * @returns {Promise<number>} A promise that is resolved with the page index,\n   *   starting from zero, that is associated with the reference.\n   */\n  getPageIndex(ref) {\n    return this._transport.getPageIndex(ref);\n  }\n\n  /**\n   * @returns {Promise<Object<string, Array<any>>>} A promise that is resolved\n   *   with a mapping from named destinations to references.\n   *\n   * This can be slow for large documents. Use `getDestination` instead.\n   */\n  getDestinations() {\n    return this._transport.getDestinations();\n  }\n\n  /**\n   * @param {string} id - The named destination to get.\n   * @returns {Promise<Array<any> | null>} A promise that is resolved with all\n   *   information of the given named destination, or `null` when the named\n   *   destination is not present in the PDF file.\n   */\n  getDestination(id) {\n    return this._transport.getDestination(id);\n  }\n\n  /**\n   * @returns {Promise<Array<string> | null>} A promise that is resolved with\n   *   an {Array} containing the page labels that correspond to the page\n   *   indexes, or `null` when no page labels are present in the PDF file.\n   */\n  getPageLabels() {\n    return this._transport.getPageLabels();\n  }\n\n  /**\n   * @returns {Promise<string>} A promise that is resolved with a {string}\n   *   containing the page layout name.\n   */\n  getPageLayout() {\n    return this._transport.getPageLayout();\n  }\n\n  /**\n   * @returns {Promise<string>} A promise that is resolved with a {string}\n   *   containing the page mode name.\n   */\n  getPageMode() {\n    return this._transport.getPageMode();\n  }\n\n  /**\n   * @returns {Promise<Object | null>} A promise that is resolved with an\n   *   {Object} containing the viewer preferences, or `null` when no viewer\n   *   preferences are present in the PDF file.\n   */\n  getViewerPreferences() {\n    return this._transport.getViewerPreferences();\n  }\n\n  /**\n   * @returns {Promise<any | null>} A promise that is resolved with an {Array}\n   *   containing the destination, or `null` when no open action is present\n   *   in the PDF.\n   */\n  getOpenAction() {\n    return this._transport.getOpenAction();\n  }\n\n  /**\n   * @returns {Promise<any>} A promise that is resolved with a lookup table\n   *   for mapping named attachments to their content.\n   */\n  getAttachments() {\n    return this._transport.getAttachments();\n  }\n\n  /**\n   * @param {Set<number>} types - The annotation types to retrieve.\n   * @param {Set<number>} pageIndexesToSkip\n   * @returns {Promise<Array<Object>>} A promise that is resolved with a list of\n   *   annotations data.\n   */\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this._transport.getAnnotationsByType(types, pageIndexesToSkip);\n  }\n\n  /**\n   * @returns {Promise<Object | null>} A promise that is resolved with\n   *   an {Object} with the JavaScript actions:\n   *     - from the name tree.\n   *     - from A or AA entries in the catalog dictionary.\n   *   , or `null` if no JavaScript exists.\n   */\n  getJSActions() {\n    return this._transport.getDocJSActions();\n  }\n\n  /**\n   * @typedef {Object} OutlineNode\n   * @property {string} title\n   * @property {boolean} bold\n   * @property {boolean} italic\n   * @property {Uint8ClampedArray} color - The color in RGB format to use for\n   *   display purposes.\n   * @property {string | Array<any> | null} dest\n   * @property {string | null} url\n   * @property {string | undefined} unsafeUrl\n   * @property {boolean | undefined} newWindow\n   * @property {number | undefined} count\n   * @property {Array<OutlineNode>} items\n   */\n\n  /**\n   * @returns {Promise<Array<OutlineNode>>} A promise that is resolved with an\n   *   {Array} that is a tree outline (if it has one) of the PDF file.\n   */\n  getOutline() {\n    return this._transport.getOutline();\n  }\n\n  /**\n   * @typedef {Object} GetOptionalContentConfigParameters\n   * @property {string} [intent] - Determines the optional content groups that\n   *   are visible by default; valid values are:\n   *    - 'display' (viewable groups).\n   *    - 'print' (printable groups).\n   *    - 'any' (all groups).\n   *   The default value is 'display'.\n   */\n\n  /**\n   * @param {GetOptionalContentConfigParameters} [params] - Optional content\n   *   config parameters.\n   * @returns {Promise<OptionalContentConfig>} A promise that is resolved with\n   *   an {@link OptionalContentConfig} that contains all the optional content\n   *   groups (assuming that the document has any).\n   */\n  getOptionalContentConfig({ intent = \"display\" } = {}) {\n    const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n    return this._transport.getOptionalContentConfig(renderingIntent);\n  }\n\n  /**\n   * @returns {Promise<Array<number> | null>} A promise that is resolved with\n   *   an {Array} that contains the permission flags for the PDF document, or\n   *   `null` when no permissions are present in the PDF file.\n   */\n  getPermissions() {\n    return this._transport.getPermissions();\n  }\n\n  /**\n   * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n   *   resolved with an {Object} that has `info` and `metadata` properties.\n   *   `info` is an {Object} filled with anything available in the information\n   *   dictionary and similarly `metadata` is a {Metadata} object with\n   *   information from the metadata section of the PDF.\n   */\n  getMetadata() {\n    return this._transport.getMetadata();\n  }\n\n  /**\n   * @typedef {Object} MarkInfo\n   * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n   * @property {boolean} Marked\n   * @property {boolean} UserProperties\n   * @property {boolean} Suspects\n   */\n\n  /**\n   * @returns {Promise<MarkInfo | null>} A promise that is resolved with\n   *   a {MarkInfo} object that contains the MarkInfo flags for the PDF\n   *   document, or `null` when no MarkInfo values are present in the PDF file.\n   */\n  getMarkInfo() {\n    return this._transport.getMarkInfo();\n  }\n\n  /**\n   * @returns {Promise<Uint8Array>} A promise that is resolved with a\n   *   {Uint8Array} containing the raw data of the PDF document.\n   */\n  getData() {\n    return this._transport.getData();\n  }\n\n  /**\n   * @returns {Promise<Uint8Array>} A promise that is resolved with a\n   *   {Uint8Array} containing the full data of the saved document.\n   */\n  saveDocument() {\n    return this._transport.saveDocument();\n  }\n\n  /**\n   * @returns {Promise<{ length: number }>} A promise that is resolved when the\n   *   document's data is loaded. It is resolved with an {Object} that contains\n   *   the `length` property that indicates size of the PDF data in bytes.\n   */\n  getDownloadInfo() {\n    return this._transport.downloadInfoCapability.promise;\n  }\n\n  /**\n   * Cleans up resources allocated by the document on both the main and worker\n   * threads.\n   *\n   * NOTE: Do not, under any circumstances, call this method when rendering is\n   * currently ongoing since that may lead to rendering errors.\n   *\n   * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n   *   NOTE: This will increase persistent memory usage, hence don't use this\n   *   option unless absolutely necessary. The default value is `false`.\n   * @returns {Promise} A promise that is resolved when clean-up has finished.\n   */\n  cleanup(keepLoadedFonts = false) {\n    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n  }\n\n  /**\n   * Destroys the current document instance and terminates the worker.\n   */\n  destroy() {\n    return this.loadingTask.destroy();\n  }\n\n  /**\n   * @param {RefProxy} ref - The page reference.\n   * @returns {number | null} The page number, if it's cached.\n   */\n  cachedPageNumber(ref) {\n    return this._transport.cachedPageNumber(ref);\n  }\n\n  /**\n   * @type {DocumentInitParameters} A subset of the current\n   *   {DocumentInitParameters}, which are needed in the viewer.\n   */\n  get loadingParams() {\n    return this._transport.loadingParams;\n  }\n\n  /**\n   * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n   */\n  get loadingTask() {\n    return this._transport.loadingTask;\n  }\n\n  /**\n   * @returns {Promise<Object<string, Array<Object>> | null>} A promise that is\n   *   resolved with an {Object} containing /AcroForm field data for the JS\n   *   sandbox, or `null` when no field data is present in the PDF file.\n   */\n  getFieldObjects() {\n    return this._transport.getFieldObjects();\n  }\n\n  /**\n   * @returns {Promise<boolean>} A promise that is resolved with `true`\n   *   if some /AcroForm fields have JavaScript actions.\n   */\n  hasJSActions() {\n    return this._transport.hasJSActions();\n  }\n\n  /**\n   * @returns {Promise<Array<string> | null>} A promise that is resolved with an\n   *   {Array<string>} containing IDs of annotations that have a calculation\n   *   action, or `null` when no such annotations are present in the PDF file.\n   */\n  getCalculationOrderIds() {\n    return this._transport.getCalculationOrderIds();\n  }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n *   the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n *   The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n *   The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n *   flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n *   content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n *   normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array<TextItem | TextMarkedContent>} items - Array of\n *   {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n *   items are included when includeMarkedContent is true.\n * @property {Object<string, TextStyle>} styles - {@link TextStyle} objects,\n *   indexed by font name.\n * @property {string | null} lang - The document /Lang attribute.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array<any>} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n *   line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n *   'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n *   'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n *   can be 'display' (viewable annotations), 'print' (printable annotations),\n *   or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {HTMLCanvasElement|null} canvas - A DOM Canvas object. The default\n *   value is the canvas associated with the `canvasContext` parameter if no\n *   value is provided explicitly.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n *   the `PDFPageProxy.getViewport` method.\n * @property {CanvasRenderingContext2D} [canvasContext] - 2D context of a DOM\n *   Canvas object for backwards compatibility; it is recommended to use the\n *   `canvas` parameter instead.\n *   If the context must absolutely be used to render the page, the canvas must\n *   be null.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n *   or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n *   onto the canvas, for annotations with appearance-data; the values from\n *   {@link AnnotationMode} should be used. The following values are supported:\n *    - `AnnotationMode.DISABLE`, which disables all annotations.\n *    - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n *      it also depends on the `intent`-option, see above).\n *    - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n *      interactive form elements (those will be rendered in the display layer).\n *    - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n *      (as above) but where interactive form elements are updated with data\n *      from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n *   The default value is `AnnotationMode.ENABLE`.\n * @property {Array<any>} [transform] - Additional transform, applied just\n *   before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n *   to use for the canvas.\n *   Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n *   <color> value, a `CanvasGradient` object (a linear or radial gradient) or\n *   a `CanvasPattern` object (a repetitive image). The default value is\n *   'rgb(255,255,255)'.\n *\n *   NOTE: This option may be partially, or completely, ignored when the\n *   `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n *   with user defined ones in order to improve readability in high contrast\n *   mode.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n *   A promise that should resolve with an {@link OptionalContentConfig}\n *   created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n *   the configuration will be fetched automatically with the default visibility\n *   states set.\n * @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap] - Map some\n *   annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n * @property {boolean} [recordOperations] - Record the dependencies and bounding\n *   boxes of all PDF operations that render onto the canvas.\n * @property {OperationsFilter} [operationsFilter] - If provided, only\n *   run for which this function returns `true`.\n */\n\n/**\n * @callback OperationsFilter\n * @param {number} index - The index of the operation.\n * @returns {boolean} If false, the operation is ignored.\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n *   or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n *   in the operatorList, for annotations with appearance-data; the values from\n *   {@link AnnotationMode} should be used. The following values are supported:\n *    - `AnnotationMode.DISABLE`, which disables all annotations.\n *    - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n *      it also depends on the `intent`-option, see above).\n *    - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n *      interactive form elements (those will be rendered in the display layer).\n *    - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n *      (as above) but where interactive form elements are updated with data\n *      from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n *   The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array<StructTreeNode | StructTreeContent>} children - Array of\n *   {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n *   elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array<number>} fnArray - Array containing the operator functions.\n * @property {Array<any>} argsArray - Array containing the arguments of the\n *   functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n  #pendingCleanup = false;\n\n  constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._transport = transport;\n    this._stats = pdfBug ? new StatTimer() : null;\n    this._pdfBug = pdfBug;\n    /** @type {PDFObjects} */\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n\n    this._intentStates = new Map();\n    this.destroyed = false;\n    this.recordedBBoxes = null;\n  }\n\n  /**\n   * @type {number} Page number of the page. First page is 1.\n   */\n  get pageNumber() {\n    return this._pageIndex + 1;\n  }\n\n  /**\n   * @type {number} The number of degrees the page is rotated clockwise.\n   */\n  get rotate() {\n    return this._pageInfo.rotate;\n  }\n\n  /**\n   * @type {RefProxy | null} The reference that points to this page.\n   */\n  get ref() {\n    return this._pageInfo.ref;\n  }\n\n  /**\n   * @type {number} The default size of units in 1/72nds of an inch.\n   */\n  get userUnit() {\n    return this._pageInfo.userUnit;\n  }\n\n  /**\n   * @type {Array<number>} An array of the visible portion of the PDF page in\n   *   user space units [x1, y1, x2, y2].\n   */\n  get view() {\n    return this._pageInfo.view;\n  }\n\n  /**\n   * @param {GetViewportParameters} params - Viewport parameters.\n   * @returns {PageViewport} Contains 'width' and 'height' properties\n   *   along with transforms required for rendering.\n   */\n  getViewport({\n    scale,\n    rotation = this.rotate,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false,\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.view,\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip,\n    });\n  }\n\n  /**\n   * @param {GetAnnotationsParameters} [params] - Annotation parameters.\n   * @returns {Promise<Array<any>>} A promise that is resolved with an\n   *   {Array} of the annotation objects.\n   */\n  getAnnotations({ intent = \"display\" } = {}) {\n    const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n    return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n  }\n\n  /**\n   * @returns {Promise<Object>} A promise that is resolved with an\n   *   {Object} with JS actions.\n   */\n  getJSActions() {\n    return this._transport.getPageJSActions(this._pageIndex);\n  }\n\n  /**\n   * @type {Object} The filter factory instance.\n   */\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n\n  /**\n   * @type {boolean} True if only XFA form.\n   */\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n\n  /**\n   * @returns {Promise<Object | null>} A promise that is resolved with\n   *   an {Object} with a fake DOM object (a tree structure where elements\n   *   are {Object} with a name, attributes (class, style, ...), value and\n   *   children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n   */\n  async getXfa() {\n    return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n  }\n\n  /**\n   * Begins the process of rendering a page to the desired context.\n   *\n   * @param {RenderParameters} params - Page render parameters.\n   * @returns {RenderTask} An object that contains a promise that is\n   *   resolved when the page finishes rendering.\n   */\n  render({\n    canvasContext,\n    canvas = canvasContext.canvas,\n    viewport,\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    transform = null,\n    background = null,\n    optionalContentConfigPromise = null,\n    annotationCanvasMap = null,\n    pageColors = null,\n    printAnnotationStorage = null,\n    isEditing = false,\n    recordOperations = false,\n    operationsFilter = null,\n  }) {\n    this._stats?.time(\"Overall\");\n\n    const intentArgs = this._transport.getRenderingIntent(\n      intent,\n      annotationMode,\n      printAnnotationStorage,\n      isEditing\n    );\n    const { renderingIntent, cacheKey } = intentArgs;\n    // If there was a pending destroy, cancel it so no cleanup happens during\n    // this call to render.\n    this.#pendingCleanup = false;\n\n    optionalContentConfigPromise ||=\n      this._transport.getOptionalContentConfig(renderingIntent);\n\n    let intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(cacheKey, intentState);\n    }\n\n    // Ensure that a pending `streamReader` cancel timeout is always aborted.\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n\n    const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n    // If there's no displayReadyCapability yet, then the operatorList\n    // was never requested before. Make the request and create the promise.\n    if (!intentState.displayReadyCapability) {\n      intentState.displayReadyCapability = Promise.withResolvers();\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null,\n      };\n\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n\n    const recordForDebugger = Boolean(\n      this._pdfBug && globalThis.StepperManager?.enabled\n    );\n\n    const shouldRecordOperations =\n      !this.recordedBBoxes && (recordOperations || recordForDebugger);\n\n    const complete = error => {\n      intentState.renderTasks.delete(internalRenderTask);\n\n      if (shouldRecordOperations) {\n        const recordedBBoxes = internalRenderTask.gfx?.dependencyTracker.take();\n        if (recordedBBoxes) {\n          if (internalRenderTask.stepper) {\n            internalRenderTask.stepper.setOperatorBBoxes(\n              recordedBBoxes,\n              internalRenderTask.gfx.dependencyTracker.takeDebugMetadata()\n            );\n          }\n          if (recordOperations) {\n            this.recordedBBoxes = recordedBBoxes;\n          }\n        }\n      }\n\n      // Attempt to reduce memory usage during *printing*, by always running\n      // cleanup immediately once rendering has finished.\n      if (intentPrint) {\n        this.#pendingCleanup = true;\n      }\n      this.#tryCleanup();\n\n      if (error) {\n        internalRenderTask.capability.reject(error);\n\n        this._abortOperatorList({\n          intentState,\n          reason: error instanceof Error ? error : new Error(error),\n        });\n      } else {\n        internalRenderTask.capability.resolve();\n      }\n\n      if (this._stats) {\n        this._stats.timeEnd(\"Rendering\");\n        this._stats.timeEnd(\"Overall\");\n\n        if (globalThis.Stats?.enabled) {\n          globalThis.Stats.add(this.pageNumber, this._stats);\n        }\n      }\n    };\n\n    const internalRenderTask = new InternalRenderTask({\n      callback: complete,\n      // Only include the required properties, and *not* the entire object.\n      params: {\n        canvas,\n        canvasContext,\n        dependencyTracker: shouldRecordOperations\n          ? new CanvasDependencyTracker(\n              canvas,\n              intentState.operatorList.length,\n              recordForDebugger\n            )\n          : null,\n        viewport,\n        transform,\n        background,\n      },\n      objs: this.objs,\n      commonObjs: this.commonObjs,\n      annotationCanvasMap,\n      operatorList: intentState.operatorList,\n      pageIndex: this._pageIndex,\n      canvasFactory: this._transport.canvasFactory,\n      filterFactory: this._transport.filterFactory,\n      useRequestAnimationFrame: !intentPrint,\n      pdfBug: this._pdfBug,\n      pageColors,\n      enableHWA: this._transport.enableHWA,\n      operationsFilter,\n    });\n\n    (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n    const renderTask = internalRenderTask.task;\n\n    Promise.all([\n      intentState.displayReadyCapability.promise,\n      optionalContentConfigPromise,\n    ])\n      .then(([transparency, optionalContentConfig]) => {\n        if (this.destroyed) {\n          complete();\n          return;\n        }\n        this._stats?.time(\"Rendering\");\n\n        if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n          throw new Error(\n            \"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" +\n              \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\"\n          );\n        }\n        internalRenderTask.initializeGraphics({\n          transparency,\n          optionalContentConfig,\n        });\n        internalRenderTask.operatorListChanged();\n      })\n      .catch(complete);\n\n    return renderTask;\n  }\n\n  /**\n   * @param {GetOperatorListParameters} params - Page getOperatorList\n   *   parameters.\n   * @returns {Promise<PDFOperatorList>} A promise resolved with an\n   *   {@link PDFOperatorList} object that represents the page's operator list.\n   */\n  getOperatorList({\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    printAnnotationStorage = null,\n    isEditing = false,\n  } = {}) {\n    if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n      throw new Error(\"Not implemented: getOperatorList\");\n    }\n    function operatorListChanged() {\n      if (intentState.operatorList.lastChunk) {\n        intentState.opListReadCapability.resolve(intentState.operatorList);\n\n        intentState.renderTasks.delete(opListTask);\n      }\n    }\n\n    const intentArgs = this._transport.getRenderingIntent(\n      intent,\n      annotationMode,\n      printAnnotationStorage,\n      isEditing,\n      /* isOpList = */ true\n    );\n    let intentState = this._intentStates.get(intentArgs.cacheKey);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(intentArgs.cacheKey, intentState);\n    }\n    let opListTask;\n\n    if (!intentState.opListReadCapability) {\n      opListTask = Object.create(null);\n      opListTask.operatorListChanged = operatorListChanged;\n      intentState.opListReadCapability = Promise.withResolvers();\n      (intentState.renderTasks ||= new Set()).add(opListTask);\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null,\n      };\n\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    return intentState.opListReadCapability.promise;\n  }\n\n  /**\n   * NOTE: All occurrences of whitespace will be replaced by\n   * standard spaces (0x20).\n   *\n   * @param {getTextContentParameters} params - getTextContent parameters.\n   * @returns {ReadableStream} Stream for reading text content chunks.\n   */\n  streamTextContent({\n    includeMarkedContent = false,\n    disableNormalization = false,\n  } = {}) {\n    const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n    return this._transport.messageHandler.sendWithStream(\n      \"GetTextContent\",\n      {\n        pageIndex: this._pageIndex,\n        includeMarkedContent: includeMarkedContent === true,\n        disableNormalization: disableNormalization === true,\n      },\n      {\n        highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n        size(textContent) {\n          return textContent.items.length;\n        },\n      }\n    );\n  }\n\n  /**\n   * NOTE: All occurrences of whitespace will be replaced by\n   * standard spaces (0x20).\n   *\n   * @param {getTextContentParameters} params - getTextContent parameters.\n   * @returns {Promise<TextContent>} A promise that is resolved with a\n   *   {@link TextContent} object that represents the page's text content.\n   */\n  getTextContent(params = {}) {\n    if (this._transport._htmlForXfa) {\n      // TODO: We need to revisit this once the XFA foreground patch lands and\n      // only do this for non-foreground XFA.\n      return this.getXfa().then(xfa => XfaText.textContent(xfa));\n    }\n    const readableStream = this.streamTextContent(params);\n\n    return new Promise(function (resolve, reject) {\n      function pump() {\n        reader.read().then(function ({ value, done }) {\n          if (done) {\n            resolve(textContent);\n            return;\n          }\n          textContent.lang ??= value.lang;\n          Object.assign(textContent.styles, value.styles);\n          textContent.items.push(...value.items);\n          pump();\n        }, reject);\n      }\n\n      const reader = readableStream.getReader();\n      const textContent = {\n        items: [],\n        styles: Object.create(null),\n        lang: null,\n      };\n      pump();\n    });\n  }\n\n  /**\n   * @returns {Promise<StructTreeNode>} A promise that is resolved with a\n   *   {@link StructTreeNode} object that represents the page's structure tree,\n   *   or `null` when no structure tree is present for the current page.\n   */\n  getStructTree() {\n    return this._transport.getStructTree(this._pageIndex);\n  }\n\n  /**\n   * Destroys the page object.\n   * @private\n   */\n  _destroy() {\n    this.destroyed = true;\n\n    const waitOn = [];\n    for (const intentState of this._intentStates.values()) {\n      this._abortOperatorList({\n        intentState,\n        reason: new Error(\"Page was destroyed.\"),\n        force: true,\n      });\n\n      if (intentState.opListReadCapability) {\n        // Avoid errors below, since the renderTasks are just stubs.\n        continue;\n      }\n      for (const internalRenderTask of intentState.renderTasks) {\n        waitOn.push(internalRenderTask.completed);\n        internalRenderTask.cancel();\n      }\n    }\n    this.objs.clear();\n    this.#pendingCleanup = false;\n\n    return Promise.all(waitOn);\n  }\n\n  /**\n   * Cleans up resources allocated by the page.\n   *\n   * @param {boolean} [resetStats] - Reset page stats, if enabled.\n   *   The default value is `false`.\n   * @returns {boolean} Indicates if clean-up was successfully run.\n   */\n  cleanup(resetStats = false) {\n    this.#pendingCleanup = true;\n    const success = this.#tryCleanup();\n\n    if (resetStats && success) {\n      this._stats &&= new StatTimer();\n    }\n    return success;\n  }\n\n  /**\n   * Attempts to clean up if rendering is in a state where that's possible.\n   * @returns {boolean} Indicates if clean-up was successfully run.\n   */\n  #tryCleanup() {\n    if (!this.#pendingCleanup || this.destroyed) {\n      return false;\n    }\n    for (const { renderTasks, operatorList } of this._intentStates.values()) {\n      if (renderTasks.size > 0 || !operatorList.lastChunk) {\n        return false;\n      }\n    }\n    this._intentStates.clear();\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return true;\n  }\n\n  /**\n   * @private\n   */\n  _startRenderPage(transparency, cacheKey) {\n    const intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      return; // Rendering was cancelled.\n    }\n    this._stats?.timeEnd(\"Page Request\");\n\n    // TODO Refactor RenderPageRequest to separate rendering\n    // and operator list logic\n    intentState.displayReadyCapability?.resolve(transparency);\n  }\n\n  /**\n   * @private\n   */\n  _renderPageChunk(operatorListChunk, intentState) {\n    // Add the new chunk to the current operator list.\n    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n    }\n    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n    // Notify all the rendering tasks there are more operators to be consumed.\n    for (const internalRenderTask of intentState.renderTasks) {\n      internalRenderTask.operatorListChanged();\n    }\n\n    if (operatorListChunk.lastChunk) {\n      this.#tryCleanup();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _pumpOperatorList({\n    renderingIntent,\n    cacheKey,\n    annotationStorageSerializable,\n    modifiedIds,\n  }) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        Number.isInteger(renderingIntent) && renderingIntent > 0,\n        '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n      );\n    }\n    const { map, transfer } = annotationStorageSerializable;\n\n    const readableStream = this._transport.messageHandler.sendWithStream(\n      \"GetOperatorList\",\n      {\n        pageIndex: this._pageIndex,\n        intent: renderingIntent,\n        cacheKey,\n        annotationStorage: map,\n        modifiedIds,\n      },\n      transfer\n    );\n    const reader = readableStream.getReader();\n\n    const intentState = this._intentStates.get(cacheKey);\n    intentState.streamReader = reader;\n\n    const pump = () => {\n      reader.read().then(\n        ({ value, done }) => {\n          if (done) {\n            intentState.streamReader = null;\n            return;\n          }\n          if (this._transport.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          this._renderPageChunk(value, intentState);\n          pump();\n        },\n        reason => {\n          intentState.streamReader = null;\n\n          if (this._transport.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          if (intentState.operatorList) {\n            // Mark operator list as complete.\n            intentState.operatorList.lastChunk = true;\n\n            for (const internalRenderTask of intentState.renderTasks) {\n              internalRenderTask.operatorListChanged();\n            }\n            this.#tryCleanup();\n          }\n\n          if (intentState.displayReadyCapability) {\n            intentState.displayReadyCapability.reject(reason);\n          } else if (intentState.opListReadCapability) {\n            intentState.opListReadCapability.reject(reason);\n          } else {\n            throw reason;\n          }\n        }\n      );\n    };\n    pump();\n  }\n\n  /**\n   * @private\n   */\n  _abortOperatorList({ intentState, reason, force = false }) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        reason instanceof Error,\n        '_abortOperatorList: Expected valid \"reason\" argument.'\n      );\n    }\n\n    if (!intentState.streamReader) {\n      return;\n    }\n    // Ensure that a pending `streamReader` cancel timeout is always aborted.\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n\n    if (!force) {\n      // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n      // multiple render() calls on the same canvas, won't break all rendering.\n      if (intentState.renderTasks.size > 0) {\n        return;\n      }\n      // Don't immediately abort parsing on the worker-thread when rendering is\n      // cancelled, since that will unnecessarily delay re-rendering when (for\n      // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n      if (reason instanceof RenderingCancelledException) {\n        let delay = RENDERING_CANCELLED_TIMEOUT;\n        if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n          // Above, we prevent the total delay from becoming arbitrarily large.\n          delay += reason.extraDelay;\n        }\n\n        intentState.streamReaderCancelTimeout = setTimeout(() => {\n          intentState.streamReaderCancelTimeout = null;\n          this._abortOperatorList({ intentState, reason, force: true });\n        }, delay);\n        return;\n      }\n    }\n    intentState.streamReader\n      .cancel(new AbortException(reason.message))\n      .catch(() => {\n        // Avoid \"Uncaught promise\" messages in the console.\n      });\n    intentState.streamReader = null;\n\n    if (this._transport.destroyed) {\n      return; // Ignore any pending requests if the worker was terminated.\n    }\n    // Remove the current `intentState`, since a cancelled `getOperatorList`\n    // call on the worker-thread cannot be re-started...\n    for (const [curCacheKey, curIntentState] of this._intentStates) {\n      if (curIntentState === intentState) {\n        this._intentStates.delete(curCacheKey);\n        break;\n      }\n    }\n    // ... and force clean-up to ensure that any old state is always removed.\n    this.cleanup();\n  }\n\n  /**\n   * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n   *   otherwise.\n   */\n  get stats() {\n    return this._stats;\n  }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n *   the constants from {@link VerbosityLevel} should be used.\n */\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n  #capability = Promise.withResolvers();\n\n  #messageHandler = null;\n\n  #port = null;\n\n  #webWorker = null;\n\n  static #fakeWorkerId = 0;\n\n  static #isWorkerDisabled = false;\n\n  static #workerPorts = new WeakMap();\n\n  static {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      if (isNodeJS) {\n        // Workers aren't supported in Node.js, force-disabling them there.\n        this.#isWorkerDisabled = true;\n\n        GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n          ? \"../pdf.worker.js\"\n          : \"./pdf.worker.mjs\";\n      }\n\n      // Check if URLs have the same origin. For non-HTTP based URLs, returns\n      // false.\n      this._isSameOrigin = (baseUrl, otherUrl) => {\n        const base = URL.parse(baseUrl);\n        if (!base?.origin || base.origin === \"null\") {\n          return false; // non-HTTP url\n        }\n        const other = new URL(otherUrl, base);\n        return base.origin === other.origin;\n      };\n\n      this._createCDNWrapper = url => {\n        // We will rely on blob URL's property to specify origin.\n        // We want this function to fail in case if createObjectURL or Blob do\n        // not exist or fail for some reason -- our Worker creation will fail\n        // anyway.\n        const wrapper = `await import(\"${url}\");`;\n        return URL.createObjectURL(\n          new Blob([wrapper], { type: \"text/javascript\" })\n        );\n      };\n\n      this.fromPort = params => {\n        deprecated(\n          \"`PDFWorker.fromPort` - please use `PDFWorker.create` instead.\"\n        );\n        if (!params?.port) {\n          throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n        }\n        return this.create(params);\n      };\n    }\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      this._resetGlobalState = () => {\n        this.#isWorkerDisabled = false;\n        delete globalThis.pdfjsWorker;\n      };\n    }\n  }\n\n  constructor({\n    name = null,\n    port = null,\n    verbosity = getVerbosityLevel(),\n  } = {}) {\n    this.name = name;\n    this.destroyed = false;\n    this.verbosity = verbosity;\n\n    if (port) {\n      if (PDFWorker.#workerPorts.has(port)) {\n        throw new Error(\"Cannot use more than one PDFWorker per port.\");\n      }\n      PDFWorker.#workerPorts.set(port, this);\n      this.#initializeFromPort(port);\n    } else {\n      this.#initialize();\n    }\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"_webWorker\", {\n        get() {\n          return this.#webWorker;\n        },\n      });\n    }\n  }\n\n  /**\n   * Promise for worker initialization completion.\n   * @type {Promise<void>}\n   */\n  get promise() {\n    return this.#capability.promise;\n  }\n\n  #resolve() {\n    this.#capability.resolve();\n    // Send global setting, e.g. verbosity level.\n    this.#messageHandler.send(\"configure\", {\n      verbosity: this.verbosity,\n    });\n  }\n\n  /**\n   * The current `workerPort`, when it exists.\n   * @type {Worker}\n   */\n  get port() {\n    return this.#port;\n  }\n\n  /**\n   * The current MessageHandler-instance.\n   * @type {MessageHandler}\n   */\n  get messageHandler() {\n    return this.#messageHandler;\n  }\n\n  #initializeFromPort(port) {\n    this.#port = port;\n    this.#messageHandler = new MessageHandler(\"main\", \"worker\", port);\n    this.#messageHandler.on(\"ready\", () => {\n      // Ignoring \"ready\" event -- MessageHandler should already be initialized\n      // and ready to accept messages.\n    });\n    this.#resolve();\n  }\n\n  #initialize() {\n    // If worker support isn't disabled explicit and the browser has worker\n    // support, create a new web worker and test if it/the browser fulfills\n    // all requirements to run parts of pdf.js in a web worker.\n    // Right now, the requirement is, that an Uint8Array is still an\n    // Uint8Array as it arrives on the worker.\n    if (\n      PDFWorker.#isWorkerDisabled ||\n      PDFWorker.#mainThreadWorkerMessageHandler\n    ) {\n      this.#setupFakeWorker();\n      return;\n    }\n    let { workerSrc } = PDFWorker;\n\n    try {\n      // Wraps workerSrc path into blob URL, if the former does not belong\n      // to the same origin.\n      if (\n        typeof PDFJSDev !== \"undefined\" &&\n        PDFJSDev.test(\"GENERIC\") &&\n        !PDFWorker._isSameOrigin(window.location, workerSrc)\n      ) {\n        workerSrc = PDFWorker._createCDNWrapper(\n          new URL(workerSrc, window.location).href\n        );\n      }\n\n      const worker = new Worker(workerSrc, { type: \"module\" });\n      const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n      const terminateEarly = () => {\n        ac.abort();\n        messageHandler.destroy();\n        worker.terminate();\n        if (this.destroyed) {\n          this.#capability.reject(new Error(\"Worker was destroyed\"));\n        } else {\n          // Fall back to fake worker if the termination is caused by an\n          // error (e.g. NetworkError / SecurityError).\n          this.#setupFakeWorker();\n        }\n      };\n\n      const ac = new AbortController();\n      worker.addEventListener(\n        \"error\",\n        () => {\n          if (!this.#webWorker) {\n            // Worker failed to initialize due to an error. Clean up and fall\n            // back to the fake worker.\n            terminateEarly();\n          }\n        },\n        { signal: ac.signal }\n      );\n\n      messageHandler.on(\"test\", data => {\n        ac.abort();\n        if (this.destroyed || !data) {\n          terminateEarly();\n          return;\n        }\n        this.#messageHandler = messageHandler;\n        this.#port = worker;\n        this.#webWorker = worker;\n\n        this.#resolve();\n      });\n\n      messageHandler.on(\"ready\", data => {\n        ac.abort();\n        if (this.destroyed) {\n          terminateEarly();\n          return;\n        }\n        try {\n          sendTest();\n        } catch {\n          // We need fallback to a faked worker.\n          this.#setupFakeWorker();\n        }\n      });\n\n      const sendTest = () => {\n        const testObj = new Uint8Array();\n        // Ensure that we can use `postMessage` transfers.\n        messageHandler.send(\"test\", testObj, [testObj.buffer]);\n      };\n\n      // It might take time for the worker to initialize. We will try to send\n      // the \"test\" message immediately, and once the \"ready\" message arrives.\n      // The worker shall process only the first received \"test\" message.\n      sendTest();\n      return;\n    } catch {\n      info(\"The worker has been disabled.\");\n    }\n    // Either workers are not supported or have thrown an exception.\n    // Thus, we fallback to a faked worker.\n    this.#setupFakeWorker();\n  }\n\n  #setupFakeWorker() {\n    if (!PDFWorker.#isWorkerDisabled) {\n      warn(\"Setting up fake worker.\");\n      PDFWorker.#isWorkerDisabled = true;\n    }\n\n    PDFWorker._setupFakeWorkerGlobal\n      .then(WorkerMessageHandler => {\n        if (this.destroyed) {\n          this.#capability.reject(new Error(\"Worker was destroyed\"));\n          return;\n        }\n        const port = new LoopbackPort();\n        this.#port = port;\n\n        // All fake workers use the same port, making id unique.\n        const id = `fake${PDFWorker.#fakeWorkerId++}`;\n\n        // If the main thread is our worker, setup the handling for the\n        // messages -- the main thread sends to it self.\n        const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n        WorkerMessageHandler.setup(workerHandler, port);\n\n        this.#messageHandler = new MessageHandler(id, id + \"_worker\", port);\n        this.#resolve();\n      })\n      .catch(reason => {\n        this.#capability.reject(\n          new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n        );\n      });\n  }\n\n  /**\n   * Destroys the worker instance.\n   */\n  destroy() {\n    this.destroyed = true;\n\n    // We need to terminate only web worker created resource.\n    this.#webWorker?.terminate();\n    this.#webWorker = null;\n\n    PDFWorker.#workerPorts.delete(this.#port);\n    this.#port = null;\n\n    this.#messageHandler?.destroy();\n    this.#messageHandler = null;\n  }\n\n  /**\n   * @param {PDFWorkerParameters} params - The worker initialization parameters.\n   * @returns {PDFWorker}\n   */\n  static create(params) {\n    const cachedPort = this.#workerPorts.get(params?.port);\n    if (cachedPort) {\n      if (cachedPort._pendingDestroy) {\n        throw new Error(\n          \"PDFWorker.create - the worker is being destroyed.\\n\" +\n            \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n        );\n      }\n      return cachedPort;\n    }\n    return new PDFWorker(params);\n  }\n\n  /**\n   * The current `workerSrc`, when it exists.\n   * @type {string}\n   */\n  static get workerSrc() {\n    if (GlobalWorkerOptions.workerSrc) {\n      return GlobalWorkerOptions.workerSrc;\n    }\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n  }\n\n  static get #mainThreadWorkerMessageHandler() {\n    try {\n      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n    } catch {\n      return null;\n    }\n  }\n\n  // Loads worker code into the main-thread.\n  static get _setupFakeWorkerGlobal() {\n    const loader = async () => {\n      if (this.#mainThreadWorkerMessageHandler) {\n        // The worker was already loaded using e.g. a `<script>` tag.\n        return this.#mainThreadWorkerMessageHandler;\n      }\n      const worker =\n        typeof PDFJSDev === \"undefined\"\n          ? await import(\"pdfjs/pdf.worker.js\")\n          : await __raw_import__(this.workerSrc);\n      return worker.WorkerMessageHandler;\n    };\n\n    return shadow(this, \"_setupFakeWorkerGlobal\", loader());\n  }\n}\n\n/**\n * For internal use only.\n * @ignore\n */\nclass WorkerTransport {\n  #methodPromises = new Map();\n\n  #pageCache = new Map();\n\n  #pagePromises = new Map();\n\n  #pageRefCache = new Map();\n\n  #passwordCapability = null;\n\n  constructor(\n    messageHandler,\n    loadingTask,\n    networkStream,\n    params,\n    factory,\n    enableHWA\n  ) {\n    this.messageHandler = messageHandler;\n    this.loadingTask = loadingTask;\n    this.commonObjs = new PDFObjects();\n    this.fontLoader = new FontLoader({\n      ownerDocument: params.ownerDocument,\n      styleElement: params.styleElement,\n    });\n    this.loadingParams = params.loadingParams;\n    this._params = params;\n\n    this.canvasFactory = factory.canvasFactory;\n    this.filterFactory = factory.filterFactory;\n    this.cMapReaderFactory = factory.cMapReaderFactory;\n    this.standardFontDataFactory = factory.standardFontDataFactory;\n    this.wasmFactory = factory.wasmFactory;\n\n    this.destroyed = false;\n    this.destroyCapability = null;\n\n    this._networkStream = networkStream;\n    this._fullReader = null;\n    this._lastProgress = null;\n    this.downloadInfoCapability = Promise.withResolvers();\n    this.enableHWA = enableHWA;\n\n    this.setupMessageHandler();\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"getNetworkStreamName\", {\n        value: () => networkStream?.constructor?.name || null,\n      });\n      Object.defineProperty(this, \"getXFADatasets\", {\n        value: () =>\n          this.messageHandler.sendWithPromise(\"GetXFADatasets\", null),\n      });\n      Object.defineProperty(this, \"getXRefPrevValue\", {\n        value: () =>\n          this.messageHandler.sendWithPromise(\"GetXRefPrevValue\", null),\n      });\n      Object.defineProperty(this, \"getStartXRefPos\", {\n        value: () =>\n          this.messageHandler.sendWithPromise(\"GetStartXRefPos\", null),\n      });\n      Object.defineProperty(this, \"getAnnotArray\", {\n        value: pageIndex =>\n          this.messageHandler.sendWithPromise(\"GetAnnotArray\", { pageIndex }),\n      });\n    }\n  }\n\n  #cacheSimpleMethod(name, data = null) {\n    const cachedPromise = this.#methodPromises.get(name);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(name, data);\n\n    this.#methodPromises.set(name, promise);\n    return promise;\n  }\n\n  get annotationStorage() {\n    return shadow(this, \"annotationStorage\", new AnnotationStorage());\n  }\n\n  getRenderingIntent(\n    intent,\n    annotationMode = AnnotationMode.ENABLE,\n    printAnnotationStorage = null,\n    isEditing = false,\n    isOpList = false\n  ) {\n    let renderingIntent = RenderingIntentFlag.DISPLAY; // Default value.\n    let annotationStorageSerializable = SerializableEmpty;\n\n    switch (intent) {\n      case \"any\":\n        renderingIntent = RenderingIntentFlag.ANY;\n        break;\n      case \"display\":\n        break;\n      case \"print\":\n        renderingIntent = RenderingIntentFlag.PRINT;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid intent: ${intent}`);\n    }\n\n    const annotationStorage =\n      renderingIntent & RenderingIntentFlag.PRINT &&\n      printAnnotationStorage instanceof PrintAnnotationStorage\n        ? printAnnotationStorage\n        : this.annotationStorage;\n\n    switch (annotationMode) {\n      case AnnotationMode.DISABLE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE;\n        break;\n      case AnnotationMode.ENABLE:\n        break;\n      case AnnotationMode.ENABLE_FORMS:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS;\n        break;\n      case AnnotationMode.ENABLE_STORAGE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE;\n\n        annotationStorageSerializable = annotationStorage.serializable;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);\n    }\n\n    if (isEditing) {\n      renderingIntent += RenderingIntentFlag.IS_EDITING;\n    }\n    if (isOpList) {\n      renderingIntent += RenderingIntentFlag.OPLIST;\n    }\n\n    const { ids: modifiedIds, hash: modifiedIdsHash } =\n      annotationStorage.modifiedIds;\n\n    const cacheKeyBuf = [\n      renderingIntent,\n      annotationStorageSerializable.hash,\n      modifiedIdsHash,\n    ];\n\n    return {\n      renderingIntent,\n      cacheKey: cacheKeyBuf.join(\"_\"),\n      annotationStorageSerializable,\n      modifiedIds,\n    };\n  }\n\n  destroy() {\n    if (this.destroyCapability) {\n      return this.destroyCapability.promise;\n    }\n\n    this.destroyed = true;\n    this.destroyCapability = Promise.withResolvers();\n\n    this.#passwordCapability?.reject(\n      new Error(\"Worker was destroyed during onPassword callback\")\n    );\n\n    const waitOn = [];\n    // We need to wait for all renderings to be completed, e.g.\n    // timeout/rAF can take a long time.\n    for (const page of this.#pageCache.values()) {\n      waitOn.push(page._destroy());\n    }\n    this.#pageCache.clear();\n    this.#pagePromises.clear();\n    this.#pageRefCache.clear();\n    // Allow `AnnotationStorage`-related clean-up when destroying the document.\n    if (this.hasOwnProperty(\"annotationStorage\")) {\n      this.annotationStorage.resetModified();\n    }\n    // We also need to wait for the worker to finish its long running tasks.\n    const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n    waitOn.push(terminated);\n\n    Promise.all(waitOn).then(() => {\n      this.commonObjs.clear();\n      this.fontLoader.clear();\n      this.#methodPromises.clear();\n      this.filterFactory.destroy();\n      TextLayer.cleanup();\n\n      this._networkStream?.cancelAllRequests(\n        new AbortException(\"Worker was terminated.\")\n      );\n\n      this.messageHandler?.destroy();\n      this.messageHandler = null;\n\n      this.destroyCapability.resolve();\n    }, this.destroyCapability.reject);\n    return this.destroyCapability.promise;\n  }\n\n  setupMessageHandler() {\n    const { messageHandler, loadingTask } = this;\n\n    messageHandler.on(\"GetReader\", (data, sink) => {\n      assert(\n        this._networkStream,\n        \"GetReader - no `IPDFStream` instance available.\"\n      );\n      this._fullReader = this._networkStream.getFullReader();\n      this._fullReader.onProgress = evt => {\n        this._lastProgress = {\n          loaded: evt.loaded,\n          total: evt.total,\n        };\n      };\n      sink.onPull = () => {\n        this._fullReader\n          .read()\n          .then(function ({ value, done }) {\n            if (done) {\n              sink.close();\n              return;\n            }\n            assert(\n              value instanceof ArrayBuffer,\n              \"GetReader - expected an ArrayBuffer.\"\n            );\n            // Enqueue data chunk into sink, and transfer it\n            // to other side as `Transferable` object.\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })\n          .catch(reason => {\n            sink.error(reason);\n          });\n      };\n\n      sink.onCancel = reason => {\n        this._fullReader.cancel(reason);\n\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          throw readyReason;\n        });\n      };\n    });\n\n    messageHandler.on(\"ReaderHeadersReady\", async data => {\n      await this._fullReader.headersReady;\n\n      const { isStreamingSupported, isRangeSupported, contentLength } =\n        this._fullReader;\n\n      // If stream or range are disabled, it's our only way to report\n      // loading progress.\n      if (!isStreamingSupported || !isRangeSupported) {\n        if (this._lastProgress) {\n          loadingTask.onProgress?.(this._lastProgress);\n        }\n        this._fullReader.onProgress = evt => {\n          loadingTask.onProgress?.({\n            loaded: evt.loaded,\n            total: evt.total,\n          });\n        };\n      }\n\n      return { isStreamingSupported, isRangeSupported, contentLength };\n    });\n\n    messageHandler.on(\"GetRangeReader\", (data, sink) => {\n      assert(\n        this._networkStream,\n        \"GetRangeReader - no `IPDFStream` instance available.\"\n      );\n      const rangeReader = this._networkStream.getRangeReader(\n        data.begin,\n        data.end\n      );\n\n      // When streaming is enabled, it's possible that the data requested here\n      // has already been fetched via the `_fullRequestReader` implementation.\n      // However, given that the PDF data is loaded asynchronously on the\n      // main-thread and then sent via `postMessage` to the worker-thread,\n      // it may not have been available during parsing (hence the attempt to\n      // use range requests here).\n      //\n      // To avoid wasting time and resources here, we'll thus *not* dispatch\n      // range requests if the data was already loaded but has not been sent to\n      // the worker-thread yet (which will happen via the `_fullRequestReader`).\n      if (!rangeReader) {\n        sink.close();\n        return;\n      }\n\n      sink.onPull = () => {\n        rangeReader\n          .read()\n          .then(function ({ value, done }) {\n            if (done) {\n              sink.close();\n              return;\n            }\n            assert(\n              value instanceof ArrayBuffer,\n              \"GetRangeReader - expected an ArrayBuffer.\"\n            );\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })\n          .catch(reason => {\n            sink.error(reason);\n          });\n      };\n\n      sink.onCancel = reason => {\n        rangeReader.cancel(reason);\n\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return; // Ignore any pending requests if the worker was terminated.\n          }\n          throw readyReason;\n        });\n      };\n    });\n\n    messageHandler.on(\"GetDoc\", ({ pdfInfo }) => {\n      this._numPages = pdfInfo.numPages;\n      this._htmlForXfa = pdfInfo.htmlForXfa;\n      delete pdfInfo.htmlForXfa;\n      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n    });\n\n    messageHandler.on(\"DocException\", ex => {\n      loadingTask._capability.reject(wrapReason(ex));\n    });\n\n    messageHandler.on(\"PasswordRequest\", ex => {\n      this.#passwordCapability = Promise.withResolvers();\n\n      try {\n        if (!loadingTask.onPassword) {\n          throw wrapReason(ex);\n        }\n\n        const updatePassword = password => {\n          if (password instanceof Error) {\n            this.#passwordCapability.reject(password);\n          } else {\n            this.#passwordCapability.resolve({ password });\n          }\n        };\n        loadingTask.onPassword(updatePassword, ex.code);\n      } catch (err) {\n        this.#passwordCapability.reject(err);\n      }\n      return this.#passwordCapability.promise;\n    });\n\n    messageHandler.on(\"DataLoaded\", data => {\n      // For consistency: Ensure that progress is always reported when the\n      // entire PDF file has been loaded, regardless of how it was fetched.\n      loadingTask.onProgress?.({\n        loaded: data.length,\n        total: data.length,\n      });\n\n      this.downloadInfoCapability.resolve(data);\n    });\n\n    messageHandler.on(\"StartRenderPage\", data => {\n      if (this.destroyed) {\n        return; // Ignore any pending requests if the worker was terminated.\n      }\n\n      const page = this.#pageCache.get(data.pageIndex);\n      page._startRenderPage(data.transparency, data.cacheKey);\n    });\n\n    messageHandler.on(\"commonobj\", ([id, type, exportedData]) => {\n      if (this.destroyed) {\n        return null; // Ignore any pending requests if the worker was terminated.\n      }\n\n      if (this.commonObjs.has(id)) {\n        return null;\n      }\n\n      switch (type) {\n        case \"Font\":\n          if (\"error\" in exportedData) {\n            const exportedError = exportedData.error;\n            warn(`Error during font loading: ${exportedError}`);\n            this.commonObjs.resolve(id, exportedError);\n            break;\n          }\n\n          const fontData = new FontInfo(exportedData);\n          const inspectFont =\n            this._params.pdfBug && globalThis.FontInspector?.enabled\n              ? (font, url) => globalThis.FontInspector.fontAdded(font, url)\n              : null;\n          const font = new FontFaceObject(\n            fontData,\n            inspectFont,\n            exportedData.extra,\n            exportedData.charProcOperatorList\n          );\n\n          this.fontLoader\n            .bind(font)\n            .catch(() => messageHandler.sendWithPromise(\"FontFallback\", { id }))\n            .finally(() => {\n              if (!font.fontExtraProperties && font.data) {\n                // Immediately release the `font.data` property once the font\n                // has been attached to the DOM, since it's no longer needed,\n                // rather than waiting for a `PDFDocumentProxy.cleanup` call.\n                // Since `font.data` could be very large, e.g. in some cases\n                // multiple megabytes, this will help reduce memory usage.\n                font.clearData();\n              }\n              this.commonObjs.resolve(id, font);\n            });\n          break;\n        case \"CopyLocalImage\":\n          const { imageRef } = exportedData;\n          assert(imageRef, \"The imageRef must be defined.\");\n\n          for (const pageProxy of this.#pageCache.values()) {\n            for (const [, data] of pageProxy.objs) {\n              if (data?.ref !== imageRef) {\n                continue;\n              }\n              if (!data.dataLen) {\n                return null;\n              }\n              this.commonObjs.resolve(id, structuredClone(data));\n              return data.dataLen;\n            }\n          }\n          break;\n        case \"FontPath\":\n        case \"Image\":\n        case \"Pattern\":\n          this.commonObjs.resolve(id, exportedData);\n          break;\n        default:\n          throw new Error(`Got unknown common object type ${type}`);\n      }\n\n      return null;\n    });\n\n    messageHandler.on(\"obj\", ([id, pageIndex, type, imageData]) => {\n      if (this.destroyed) {\n        // Ignore any pending requests if the worker was terminated.\n        return;\n      }\n\n      const pageProxy = this.#pageCache.get(pageIndex);\n      if (pageProxy.objs.has(id)) {\n        return;\n      }\n      // Don't store data *after* cleanup has successfully run, see bug 1854145.\n      if (pageProxy._intentStates.size === 0) {\n        imageData?.bitmap?.close(); // Release any `ImageBitmap` data.\n        return;\n      }\n\n      switch (type) {\n        case \"Image\":\n        case \"Pattern\":\n          pageProxy.objs.resolve(id, imageData);\n          break;\n        default:\n          throw new Error(`Got unknown object type ${type}`);\n      }\n    });\n\n    messageHandler.on(\"DocProgress\", data => {\n      if (this.destroyed) {\n        return; // Ignore any pending requests if the worker was terminated.\n      }\n      loadingTask.onProgress?.({\n        loaded: data.loaded,\n        total: data.total,\n      });\n    });\n\n    messageHandler.on(\"FetchBinaryData\", async data => {\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n        throw new Error(\"Not implemented: FetchBinaryData\");\n      }\n      if (this.destroyed) {\n        throw new Error(\"Worker was destroyed.\");\n      }\n      const factory = this[data.type];\n\n      if (!factory) {\n        throw new Error(\n          `${data.type} not initialized, see the \\`useWorkerFetch\\` parameter.`\n        );\n      }\n      return factory.fetch(data);\n    });\n  }\n\n  getData() {\n    return this.messageHandler.sendWithPromise(\"GetData\", null);\n  }\n\n  saveDocument() {\n    if (this.annotationStorage.size <= 0) {\n      warn(\n        \"saveDocument called while `annotationStorage` is empty, \" +\n          \"please use the getData-method instead.\"\n      );\n    }\n    const { map, transfer } = this.annotationStorage.serializable;\n\n    return this.messageHandler\n      .sendWithPromise(\n        \"SaveDocument\",\n        {\n          isPureXfa: !!this._htmlForXfa,\n          numPages: this._numPages,\n          annotationStorage: map,\n          filename: this._fullReader?.filename ?? null,\n        },\n        transfer\n      )\n      .finally(() => {\n        this.annotationStorage.resetModified();\n      });\n  }\n\n  getPage(pageNumber) {\n    if (\n      !Number.isInteger(pageNumber) ||\n      pageNumber <= 0 ||\n      pageNumber > this._numPages\n    ) {\n      return Promise.reject(new Error(\"Invalid page request.\"));\n    }\n\n    const pageIndex = pageNumber - 1,\n      cachedPromise = this.#pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler\n      .sendWithPromise(\"GetPage\", {\n        pageIndex,\n      })\n      .then(pageInfo => {\n        if (this.destroyed) {\n          throw new Error(\"Transport destroyed\");\n        }\n        if (pageInfo.refStr) {\n          this.#pageRefCache.set(pageInfo.refStr, pageNumber);\n        }\n\n        const page = new PDFPageProxy(\n          pageIndex,\n          pageInfo,\n          this,\n          this._params.pdfBug\n        );\n        this.#pageCache.set(pageIndex, page);\n        return page;\n      });\n    this.#pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n\n  getPageIndex(ref) {\n    if (!isRefProxy(ref)) {\n      return Promise.reject(new Error(\"Invalid pageIndex request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n      num: ref.num,\n      gen: ref.gen,\n    });\n  }\n\n  getAnnotations(pageIndex, intent) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n      pageIndex,\n      intent,\n    });\n  }\n\n  getFieldObjects() {\n    return this.#cacheSimpleMethod(\"GetFieldObjects\");\n  }\n\n  hasJSActions() {\n    return this.#cacheSimpleMethod(\"HasJSActions\");\n  }\n\n  getCalculationOrderIds() {\n    return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n  }\n\n  getDestinations() {\n    return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n  }\n\n  getDestination(id) {\n    if (typeof id !== \"string\") {\n      return Promise.reject(new Error(\"Invalid destination request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetDestination\", {\n      id,\n    });\n  }\n\n  getPageLabels() {\n    return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n  }\n\n  getPageLayout() {\n    return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n  }\n\n  getPageMode() {\n    return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n  }\n\n  getViewerPreferences() {\n    return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n  }\n\n  getOpenAction() {\n    return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n  }\n\n  getAttachments() {\n    return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n  }\n\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotationsByType\", {\n      types,\n      pageIndexesToSkip,\n    });\n  }\n\n  getDocJSActions() {\n    return this.#cacheSimpleMethod(\"GetDocJSActions\");\n  }\n\n  getPageJSActions(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n      pageIndex,\n    });\n  }\n\n  getStructTree(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n      pageIndex,\n    });\n  }\n\n  getOutline() {\n    return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n  }\n\n  getOptionalContentConfig(renderingIntent) {\n    return this.#cacheSimpleMethod(\"GetOptionalContentConfig\").then(\n      data => new OptionalContentConfig(data, renderingIntent)\n    );\n  }\n\n  getPermissions() {\n    return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n  }\n\n  getMetadata() {\n    const name = \"GetMetadata\",\n      cachedPromise = this.#methodPromises.get(name);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler\n      .sendWithPromise(name, null)\n      .then(results => ({\n        info: results[0],\n        metadata: results[1] ? new Metadata(results[1]) : null,\n        contentDispositionFilename: this._fullReader?.filename ?? null,\n        contentLength: this._fullReader?.contentLength ?? null,\n      }));\n    this.#methodPromises.set(name, promise);\n    return promise;\n  }\n\n  getMarkInfo() {\n    return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n  }\n\n  async startCleanup(keepLoadedFonts = false) {\n    if (this.destroyed) {\n      return; // No need to manually clean-up when destruction has started.\n    }\n    await this.messageHandler.sendWithPromise(\"Cleanup\", null);\n\n    for (const page of this.#pageCache.values()) {\n      const cleanupSuccessful = page.cleanup();\n\n      if (!cleanupSuccessful) {\n        throw new Error(\n          `startCleanup: Page ${page.pageNumber} is currently rendering.`\n        );\n      }\n    }\n    this.commonObjs.clear();\n    if (!keepLoadedFonts) {\n      this.fontLoader.clear();\n    }\n    this.#methodPromises.clear();\n    this.filterFactory.destroy(/* keepHCM = */ true);\n    TextLayer.cleanup();\n  }\n\n  cachedPageNumber(ref) {\n    if (!isRefProxy(ref)) {\n      return null;\n    }\n    const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;\n    return this.#pageRefCache.get(refStr) ?? null;\n  }\n}\n\n/**\n * Allows controlling of the rendering tasks.\n */\nclass RenderTask {\n  #internalRenderTask = null;\n\n  /**\n   * Callback for incremental rendering -- a function that will be called\n   * each time the rendering is paused.  To continue rendering call the\n   * function that is the first argument to the callback.\n   * @type {function}\n   */\n  onContinue = null;\n\n  /**\n   * A function that will be synchronously called when the rendering tasks\n   * finishes with an error (either because of an actual error, or because the\n   * rendering is cancelled).\n   *\n   * @type {function}\n   * @param {Error} error\n   */\n  onError = null;\n\n  constructor(internalRenderTask) {\n    this.#internalRenderTask = internalRenderTask;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"getOperatorList\", {\n        value: () => this.#internalRenderTask.operatorList,\n      });\n    }\n  }\n\n  /**\n   * Promise for rendering task completion.\n   * @type {Promise<void>}\n   */\n  get promise() {\n    return this.#internalRenderTask.capability.promise;\n  }\n\n  /**\n   * Cancels the rendering task. If the task is currently rendering it will\n   * not be cancelled until graphics pauses with a timeout. The promise that\n   * this object extends will be rejected when cancelled.\n   *\n   * @param {number} [extraDelay]\n   */\n  cancel(extraDelay = 0) {\n    this.#internalRenderTask.cancel(/* error = */ null, extraDelay);\n  }\n\n  /**\n   * Whether form fields are rendered separately from the main operatorList.\n   * @type {boolean}\n   */\n  get separateAnnots() {\n    const { separateAnnots } = this.#internalRenderTask.operatorList;\n    if (!separateAnnots) {\n      return false;\n    }\n    const { annotationCanvasMap } = this.#internalRenderTask;\n    return (\n      separateAnnots.form ||\n      (separateAnnots.canvas && annotationCanvasMap?.size > 0)\n    );\n  }\n}\n\n/**\n * For internal use only.\n * @ignore\n */\nclass InternalRenderTask {\n  #rAF = null;\n\n  static #canvasInUse = new WeakSet();\n\n  constructor({\n    callback,\n    params,\n    objs,\n    commonObjs,\n    annotationCanvasMap,\n    operatorList,\n    pageIndex,\n    canvasFactory,\n    filterFactory,\n    useRequestAnimationFrame = false,\n    pdfBug = false,\n    pageColors = null,\n    enableHWA = false,\n    operationsFilter = null,\n  }) {\n    this.callback = callback;\n    this.params = params;\n    this.objs = objs;\n    this.commonObjs = commonObjs;\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.operatorListIdx = null;\n    this.operatorList = operatorList;\n    this._pageIndex = pageIndex;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this._pdfBug = pdfBug;\n    this.pageColors = pageColors;\n\n    this.running = false;\n    this.graphicsReadyCallback = null;\n    this.graphicsReady = false;\n    this._useRequestAnimationFrame =\n      useRequestAnimationFrame === true && typeof window !== \"undefined\";\n    this.cancelled = false;\n    this.capability = Promise.withResolvers();\n    this.task = new RenderTask(this);\n    // caching this-bound methods\n    this._cancelBound = this.cancel.bind(this);\n    this._continueBound = this._continue.bind(this);\n    this._scheduleNextBound = this._scheduleNext.bind(this);\n    this._nextBound = this._next.bind(this);\n    this._canvas = params.canvas;\n    this._canvasContext = params.canvas ? null : params.canvasContext;\n    this._enableHWA = enableHWA;\n    this._dependencyTracker = params.dependencyTracker;\n    this._operationsFilter = operationsFilter;\n  }\n\n  get completed() {\n    return this.capability.promise.catch(function () {\n      // Ignoring errors, since we only want to know when rendering is\n      // no longer pending.\n    });\n  }\n\n  initializeGraphics({ transparency = false, optionalContentConfig }) {\n    if (this.cancelled) {\n      return;\n    }\n    if (this._canvas) {\n      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {\n        throw new Error(\n          \"Cannot use the same canvas during multiple render() operations. \" +\n            \"Use different canvas or ensure previous operations were \" +\n            \"cancelled or completed.\"\n        );\n      }\n      InternalRenderTask.#canvasInUse.add(this._canvas);\n    }\n\n    if (this._pdfBug && globalThis.StepperManager?.enabled) {\n      this.stepper = globalThis.StepperManager.create(this._pageIndex);\n      this.stepper.init(this.operatorList);\n      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n    }\n    const { viewport, transform, background, dependencyTracker } = this.params;\n\n    // When printing in Firefox, we get a specific context in mozPrintCallback\n    // which cannot be created from the canvas itself.\n    const canvasContext =\n      this._canvasContext ||\n      this._canvas.getContext(\"2d\", {\n        alpha: false,\n        willReadFrequently: !this._enableHWA,\n      });\n\n    this.gfx = new CanvasGraphics(\n      canvasContext,\n      this.commonObjs,\n      this.objs,\n      this.canvasFactory,\n      this.filterFactory,\n      { optionalContentConfig },\n      this.annotationCanvasMap,\n      this.pageColors,\n      dependencyTracker\n    );\n    this.gfx.beginDrawing({\n      transform,\n      viewport,\n      transparency,\n      background,\n    });\n    this.operatorListIdx = 0;\n    this.graphicsReady = true;\n    this.graphicsReadyCallback?.();\n  }\n\n  cancel(error = null, extraDelay = 0) {\n    this.running = false;\n    this.cancelled = true;\n    this.gfx?.endDrawing();\n    if (this.#rAF) {\n      window.cancelAnimationFrame(this.#rAF);\n      this.#rAF = null;\n    }\n    InternalRenderTask.#canvasInUse.delete(this._canvas);\n\n    error ||= new RenderingCancelledException(\n      `Rendering cancelled, page ${this._pageIndex + 1}`,\n      extraDelay\n    );\n    this.callback(error);\n\n    this.task.onError?.(error);\n  }\n\n  operatorListChanged() {\n    if (!this.graphicsReady) {\n      this.graphicsReadyCallback ||= this._continueBound;\n      return;\n    }\n    this.gfx.dependencyTracker?.growOperationsCount(\n      this.operatorList.fnArray.length\n    );\n    this.stepper?.updateOperatorList(this.operatorList);\n\n    if (this.running) {\n      return;\n    }\n    this._continue();\n  }\n\n  _continue() {\n    this.running = true;\n    if (this.cancelled) {\n      return;\n    }\n    if (this.task.onContinue) {\n      this.task.onContinue(this._scheduleNextBound);\n    } else {\n      this._scheduleNext();\n    }\n  }\n\n  _scheduleNext() {\n    if (this._useRequestAnimationFrame) {\n      this.#rAF = window.requestAnimationFrame(() => {\n        this.#rAF = null;\n        this._nextBound().catch(this._cancelBound);\n      });\n    } else {\n      Promise.resolve().then(this._nextBound).catch(this._cancelBound);\n    }\n  }\n\n  async _next() {\n    if (this.cancelled) {\n      return;\n    }\n    this.operatorListIdx = this.gfx.executeOperatorList(\n      this.operatorList,\n      this.operatorListIdx,\n      this._continueBound,\n      this.stepper,\n      this._operationsFilter\n    );\n    if (this.operatorListIdx === this.operatorList.argsArray.length) {\n      this.running = false;\n      if (this.operatorList.lastChunk) {\n        this.gfx.endDrawing();\n        InternalRenderTask.#canvasInUse.delete(this._canvas);\n\n        this.callback();\n      }\n    }\n  }\n}\n\n/** @type {string} */\nconst version =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : null;\n/** @type {string} */\nconst build =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : null;\n\nexport {\n  build,\n  getDocument,\n  PDFDataRangeTransport,\n  PDFDocumentLoadingTask,\n  PDFDocumentProxy,\n  PDFPageProxy,\n  PDFWorker,\n  RenderTask,\n  version,\n};\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationEditorParamsType, shadow } from \"../../shared/util.js\";\nimport { KeyboardManager } from \"./tools.js\";\nimport { noContextMenu } from \"../display_utils.js\";\n\n/**\n * ColorPicker class provides a color picker for the annotation editor.\n * It displays a dropdown with some predefined colors and allows the user\n * to select a color for the annotation.\n */\nclass ColorPicker {\n  #button = null;\n\n  #buttonSwatch = null;\n\n  #defaultColor;\n\n  #dropdown = null;\n\n  #dropdownWasFromKeyboard = false;\n\n  #isMainColorPicker = false;\n\n  #editor = null;\n\n  #eventBus;\n\n  #openDropdownAC = null;\n\n  #uiManager = null;\n\n  static #l10nColor = null;\n\n  static get _keyboardManager() {\n    return shadow(\n      this,\n      \"_keyboardManager\",\n      new KeyboardManager([\n        [\n          [\"Escape\", \"mac+Escape\"],\n          ColorPicker.prototype._hideDropdownFromKeyboard,\n        ],\n        [[\" \", \"mac+ \"], ColorPicker.prototype._colorSelectFromKeyboard],\n        [\n          [\"ArrowDown\", \"ArrowRight\", \"mac+ArrowDown\", \"mac+ArrowRight\"],\n          ColorPicker.prototype._moveToNext,\n        ],\n        [\n          [\"ArrowUp\", \"ArrowLeft\", \"mac+ArrowUp\", \"mac+ArrowLeft\"],\n          ColorPicker.prototype._moveToPrevious,\n        ],\n        [[\"Home\", \"mac+Home\"], ColorPicker.prototype._moveToBeginning],\n        [[\"End\", \"mac+End\"], ColorPicker.prototype._moveToEnd],\n      ])\n    );\n  }\n\n  constructor({ editor = null, uiManager = null }) {\n    if (editor) {\n      this.#isMainColorPicker = false;\n      this.#editor = editor;\n    } else {\n      this.#isMainColorPicker = true;\n    }\n    this.#uiManager = editor?._uiManager || uiManager;\n    this.#eventBus = this.#uiManager._eventBus;\n    this.#defaultColor =\n      editor?.color?.toUpperCase() ||\n      this.#uiManager?.highlightColors.values().next().value ||\n      \"#FFFF98\";\n\n    ColorPicker.#l10nColor ||= Object.freeze({\n      blue: \"pdfjs-editor-colorpicker-blue\",\n      green: \"pdfjs-editor-colorpicker-green\",\n      pink: \"pdfjs-editor-colorpicker-pink\",\n      red: \"pdfjs-editor-colorpicker-red\",\n      yellow: \"pdfjs-editor-colorpicker-yellow\",\n    });\n  }\n\n  renderButton() {\n    const button = (this.#button = document.createElement(\"button\"));\n    button.className = \"colorPicker\";\n    button.tabIndex = \"0\";\n    button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-button\");\n    button.ariaHasPopup = \"true\";\n    if (this.#editor) {\n      button.ariaControls = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    const signal = this.#uiManager._signal;\n    button.addEventListener(\"click\", this.#openDropdown.bind(this), { signal });\n    button.addEventListener(\"keydown\", this.#keyDown.bind(this), { signal });\n    const swatch = (this.#buttonSwatch = document.createElement(\"span\"));\n    swatch.className = \"swatch\";\n    swatch.ariaHidden = \"true\";\n    swatch.style.backgroundColor = this.#defaultColor;\n    button.append(swatch);\n    return button;\n  }\n\n  renderMainDropdown() {\n    const dropdown = (this.#dropdown = this.#getDropdownRoot());\n    dropdown.ariaOrientation = \"horizontal\";\n    dropdown.ariaLabelledBy = \"highlightColorPickerLabel\";\n\n    return dropdown;\n  }\n\n  #getDropdownRoot() {\n    const div = document.createElement(\"div\");\n    const signal = this.#uiManager._signal;\n    div.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    div.className = \"dropdown\";\n    div.role = \"listbox\";\n    div.ariaMultiSelectable = \"false\";\n    div.ariaOrientation = \"vertical\";\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-dropdown\");\n    if (this.#editor) {\n      div.id = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    for (const [name, color] of this.#uiManager.highlightColors) {\n      const button = document.createElement(\"button\");\n      button.tabIndex = \"0\";\n      button.role = \"option\";\n      button.setAttribute(\"data-color\", color);\n      button.title = name;\n      button.setAttribute(\"data-l10n-id\", ColorPicker.#l10nColor[name]);\n      const swatch = document.createElement(\"span\");\n      button.append(swatch);\n      swatch.className = \"swatch\";\n      swatch.style.backgroundColor = color;\n      button.ariaSelected = color === this.#defaultColor;\n      button.addEventListener(\"click\", this.#colorSelect.bind(this, color), {\n        signal,\n      });\n      div.append(button);\n    }\n\n    div.addEventListener(\"keydown\", this.#keyDown.bind(this), { signal });\n\n    return div;\n  }\n\n  #colorSelect(color, event) {\n    event.stopPropagation();\n    this.#eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      value: color,\n    });\n    this.updateColor(color);\n  }\n\n  _colorSelectFromKeyboard(event) {\n    if (event.target === this.#button) {\n      this.#openDropdown(event);\n      return;\n    }\n    const color = event.target.getAttribute(\"data-color\");\n    if (!color) {\n      return;\n    }\n    this.#colorSelect(color, event);\n  }\n\n  _moveToNext(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    if (event.target === this.#button) {\n      this.#dropdown.firstChild?.focus();\n      return;\n    }\n    event.target.nextSibling?.focus();\n  }\n\n  _moveToPrevious(event) {\n    if (\n      event.target === this.#dropdown?.firstChild ||\n      event.target === this.#button\n    ) {\n      if (this.#isDropdownVisible) {\n        this._hideDropdownFromKeyboard();\n      }\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n    }\n    event.target.previousSibling?.focus();\n  }\n\n  _moveToBeginning(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.firstChild?.focus();\n  }\n\n  _moveToEnd(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.lastChild?.focus();\n  }\n\n  #keyDown(event) {\n    ColorPicker._keyboardManager.exec(this, event);\n  }\n\n  #openDropdown(event) {\n    if (this.#isDropdownVisible) {\n      this.hideDropdown();\n      return;\n    }\n    this.#dropdownWasFromKeyboard = event.detail === 0;\n\n    if (!this.#openDropdownAC) {\n      this.#openDropdownAC = new AbortController();\n\n      window.addEventListener(\"pointerdown\", this.#pointerDown.bind(this), {\n        signal: this.#uiManager.combinedSignal(this.#openDropdownAC),\n      });\n    }\n    this.#button.ariaExpanded = \"true\";\n    if (this.#dropdown) {\n      this.#dropdown.classList.remove(\"hidden\");\n      return;\n    }\n    const root = (this.#dropdown = this.#getDropdownRoot());\n    this.#button.append(root);\n  }\n\n  #pointerDown(event) {\n    if (this.#dropdown?.contains(event.target)) {\n      return;\n    }\n    this.hideDropdown();\n  }\n\n  hideDropdown() {\n    this.#dropdown?.classList.add(\"hidden\");\n    this.#button.ariaExpanded = \"false\";\n    this.#openDropdownAC?.abort();\n    this.#openDropdownAC = null;\n  }\n\n  get #isDropdownVisible() {\n    return this.#dropdown && !this.#dropdown.classList.contains(\"hidden\");\n  }\n\n  _hideDropdownFromKeyboard() {\n    if (this.#isMainColorPicker) {\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      // The user pressed Escape with no dropdown visible, so we must\n      // unselect it.\n      this.#editor?.unselect();\n      return;\n    }\n    this.hideDropdown();\n    this.#button.focus({\n      preventScroll: true,\n      focusVisible: this.#dropdownWasFromKeyboard,\n    });\n  }\n\n  updateColor(color) {\n    if (this.#buttonSwatch) {\n      this.#buttonSwatch.style.backgroundColor = color;\n    }\n    if (!this.#dropdown) {\n      return;\n    }\n\n    const i = this.#uiManager.highlightColors.values();\n    for (const child of this.#dropdown.children) {\n      child.ariaSelected = i.next().value === color.toUpperCase();\n    }\n  }\n\n  destroy() {\n    this.#button?.remove();\n    this.#button = null;\n    this.#buttonSwatch = null;\n    this.#dropdown?.remove();\n    this.#dropdown = null;\n  }\n}\n\n/**\n * BasicColorPicker class provides a simple color picker.\n * It displays an input element (with type=\"color\") that allows the user\n * to select a color for the annotation.\n */\nclass BasicColorPicker {\n  #input = null;\n\n  #editor = null;\n\n  #uiManager = null;\n\n  static #l10nColor = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n    this.#uiManager = editor._uiManager;\n\n    BasicColorPicker.#l10nColor ||= Object.freeze({\n      freetext: \"pdfjs-editor-color-picker-free-text-input\",\n      ink: \"pdfjs-editor-color-picker-ink-input\",\n    });\n  }\n\n  renderButton() {\n    if (this.#input) {\n      return this.#input;\n    }\n    const { editorType, colorType, colorValue } = this.#editor;\n    const input = (this.#input = document.createElement(\"input\"));\n    input.type = \"color\";\n    input.value = colorValue || \"#000000\";\n    input.className = \"basicColorPicker\";\n    input.tabIndex = 0;\n    input.setAttribute(\"data-l10n-id\", BasicColorPicker.#l10nColor[editorType]);\n    input.addEventListener(\n      \"input\",\n      () => {\n        this.#uiManager.updateParams(colorType, input.value);\n      },\n      { signal: this.#uiManager._signal }\n    );\n    return input;\n  }\n\n  update(value) {\n    if (!this.#input) {\n      return;\n    }\n    this.#input.value = value;\n  }\n\n  destroy() {\n    this.#input?.remove();\n    this.#input = null;\n  }\n\n  hideDropdown() {}\n}\n\nexport { BasicColorPicker, ColorPicker };\n", "/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * PLEASE NOTE: This file is currently imported in both the `../display/` and\n *              `../scripting_api/` folders, hence be EXTREMELY careful about\n *              introducing any dependencies here since that can lead to an\n *              unexpected/unnecessary size increase of the *built* files.\n */\n\nfunction makeColorComp(n) {\n  return Math.floor(Math.max(0, Math.min(1, n)) * 255)\n    .toString(16)\n    .padStart(2, \"0\");\n}\n\nfunction scaleAndClamp(x) {\n  return Math.max(0, Math.min(255, 255 * x));\n}\n\n// PDF specifications section 10.3\nclass ColorConverters {\n  static CMYK_G([c, y, m, k]) {\n    return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n  }\n\n  static G_CMYK([g]) {\n    return [\"CMYK\", 0, 0, 0, 1 - g];\n  }\n\n  static G_RGB([g]) {\n    return [\"RGB\", g, g, g];\n  }\n\n  static G_rgb([g]) {\n    g = scaleAndClamp(g);\n    return [g, g, g];\n  }\n\n  static G_HTML([g]) {\n    const G = makeColorComp(g);\n    return `#${G}${G}${G}`;\n  }\n\n  static RGB_G([r, g, b]) {\n    return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n  }\n\n  static RGB_rgb(color) {\n    return color.map(scaleAndClamp);\n  }\n\n  static RGB_HTML(color) {\n    return `#${color.map(makeColorComp).join(\"\")}`;\n  }\n\n  static T_HTML() {\n    return \"#00000000\";\n  }\n\n  static T_rgb() {\n    return [null];\n  }\n\n  static CMYK_RGB([c, y, m, k]) {\n    return [\n      \"RGB\",\n      1 - Math.min(1, c + k),\n      1 - Math.min(1, m + k),\n      1 - Math.min(1, y + k),\n    ];\n  }\n\n  static CMYK_rgb([c, y, m, k]) {\n    return [\n      scaleAndClamp(1 - Math.min(1, c + k)),\n      scaleAndClamp(1 - Math.min(1, m + k)),\n      scaleAndClamp(1 - Math.min(1, y + k)),\n    ];\n  }\n\n  static CMYK_HTML(components) {\n    const rgb = this.CMYK_RGB(components).slice(1);\n    return this.RGB_HTML(rgb);\n  }\n\n  static RGB_CMYK([r, g, b]) {\n    const c = 1 - r;\n    const m = 1 - g;\n    const y = 1 - b;\n    const k = Math.min(c, m, y);\n    return [\"CMYK\", c, m, y, k];\n  }\n}\n\nconst DateFormats = [\n  \"m/d\",\n  \"m/d/yy\",\n  \"mm/dd/yy\",\n  \"mm/yy\",\n  \"d-mmm\",\n  \"d-mmm-yy\",\n  \"dd-mmm-yy\",\n  \"yy-mm-dd\",\n  \"mmm-yy\",\n  \"mmmm-yy\",\n  \"mmm d, yyyy\",\n  \"mmmm d, yyyy\",\n  \"m/d/yy h:MM tt\",\n  \"m/d/yy HH:MM\",\n];\nconst TimeFormats = [\"HH:MM\", \"h:MM tt\", \"HH:MM:ss\", \"h:MM:ss tt\"];\n\nexport { ColorConverters, DateFormats, TimeFormats };\n", "/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SVG_NS } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseSVGFactory {\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseSVGFactory\n    ) {\n      unreachable(\"Cannot initialize BaseSVGFactory.\");\n    }\n  }\n\n  create(width, height, skipDimensions = false) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid SVG dimensions\");\n    }\n    const svg = this._createSVG(\"svg:svg\");\n    svg.setAttribute(\"version\", \"1.1\");\n\n    if (!skipDimensions) {\n      svg.setAttribute(\"width\", `${width}px`);\n      svg.setAttribute(\"height\", `${height}px`);\n    }\n\n    svg.setAttribute(\"preserveAspectRatio\", \"none\");\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\n    return svg;\n  }\n\n  createElement(type) {\n    if (typeof type !== \"string\") {\n      throw new Error(\"Invalid SVG element type\");\n    }\n    return this._createSVG(type);\n  }\n\n  /**\n   * @ignore\n   */\n  _createSVG(type) {\n    unreachable(\"Abstract method `_createSVG` called.\");\n  }\n}\n\nclass DOMSVGFactory extends BaseSVGFactory {\n  /**\n   * @ignore\n   */\n  _createSVG(type) {\n    return document.createElementNS(SVG_NS, type);\n  }\n}\n\nexport { BaseSVGFactory, DOMSVGFactory };\n", "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").PDFPageProxy} PDFPageProxy */\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"../../web/interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/editor/tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/struct_tree_layer_builder.js\").StructTreeLayerBuilder} StructTreeLayerBuilder */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/comment_manager.js\").CommentManager} CommentManager */\n\nimport {\n  AnnotationBorderStyleType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  AnnotationPrefix,\n  AnnotationType,\n  FeatureTest,\n  LINE_FACTOR,\n  shadow,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  PDFDateString,\n  renderRichText,\n  setLayerDimensions,\n} from \"./display_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { ColorConverters } from \"../shared/scripting_utils.js\";\nimport { DOMSVGFactory } from \"./svg_factory.js\";\n\nconst DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\nconst TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000;\n\n/**\n * @typedef {Object} AnnotationElementParameters\n * @property {Object} data\n * @property {HTMLDivElement} layer\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {Object} svgFactory\n * @property {boolean} [enableScripting]\n * @property {boolean} [hasJSActions]\n * @property {Object} [fieldObjects]\n */\n\nclass AnnotationElementFactory {\n  /**\n   * @param {AnnotationElementParameters} parameters\n   * @returns {AnnotationElement}\n   */\n  static create(parameters) {\n    const subtype = parameters.data.annotationType;\n\n    switch (subtype) {\n      case AnnotationType.LINK:\n        return new LinkAnnotationElement(parameters);\n\n      case AnnotationType.TEXT:\n        return new TextAnnotationElement(parameters);\n\n      case AnnotationType.WIDGET:\n        const fieldType = parameters.data.fieldType;\n\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotationElement(parameters);\n          case \"Btn\":\n            if (parameters.data.radioButton) {\n              return new RadioButtonWidgetAnnotationElement(parameters);\n            } else if (parameters.data.checkBox) {\n              return new CheckboxWidgetAnnotationElement(parameters);\n            }\n            return new PushButtonWidgetAnnotationElement(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotationElement(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotationElement(parameters);\n        }\n        return new WidgetAnnotationElement(parameters);\n\n      case AnnotationType.POPUP:\n        return new PopupAnnotationElement(parameters);\n\n      case AnnotationType.FREETEXT:\n        return new FreeTextAnnotationElement(parameters);\n\n      case AnnotationType.LINE:\n        return new LineAnnotationElement(parameters);\n\n      case AnnotationType.SQUARE:\n        return new SquareAnnotationElement(parameters);\n\n      case AnnotationType.CIRCLE:\n        return new CircleAnnotationElement(parameters);\n\n      case AnnotationType.POLYLINE:\n        return new PolylineAnnotationElement(parameters);\n\n      case AnnotationType.CARET:\n        return new CaretAnnotationElement(parameters);\n\n      case AnnotationType.INK:\n        return new InkAnnotationElement(parameters);\n\n      case AnnotationType.POLYGON:\n        return new PolygonAnnotationElement(parameters);\n\n      case AnnotationType.HIGHLIGHT:\n        return new HighlightAnnotationElement(parameters);\n\n      case AnnotationType.UNDERLINE:\n        return new UnderlineAnnotationElement(parameters);\n\n      case AnnotationType.SQUIGGLY:\n        return new SquigglyAnnotationElement(parameters);\n\n      case AnnotationType.STRIKEOUT:\n        return new StrikeOutAnnotationElement(parameters);\n\n      case AnnotationType.STAMP:\n        return new StampAnnotationElement(parameters);\n\n      case AnnotationType.FILEATTACHMENT:\n        return new FileAttachmentAnnotationElement(parameters);\n\n      default:\n        return new AnnotationElement(parameters);\n    }\n  }\n}\n\nclass AnnotationElement {\n  #updates = null;\n\n  #hasBorder = false;\n\n  #popupElement = null;\n\n  constructor(\n    parameters,\n    {\n      isRenderable = false,\n      ignoreBorder = false,\n      createQuadrilaterals = false,\n    } = {}\n  ) {\n    this.isRenderable = isRenderable;\n    this.data = parameters.data;\n    this.layer = parameters.layer;\n    this.linkService = parameters.linkService;\n    this.downloadManager = parameters.downloadManager;\n    this.imageResourcesPath = parameters.imageResourcesPath;\n    this.renderForms = parameters.renderForms;\n    this.svgFactory = parameters.svgFactory;\n    this.annotationStorage = parameters.annotationStorage;\n    this.enableComment = parameters.enableComment;\n    this.enableScripting = parameters.enableScripting;\n    this.hasJSActions = parameters.hasJSActions;\n    this._fieldObjects = parameters.fieldObjects;\n    this.parent = parameters.parent;\n\n    if (isRenderable) {\n      this.container = this._createContainer(ignoreBorder);\n    }\n    if (createQuadrilaterals) {\n      this._createQuadrilaterals();\n    }\n  }\n\n  static _hasPopupData({ contentsObj, richText }) {\n    return !!(contentsObj?.str || richText?.str);\n  }\n\n  get _isEditable() {\n    return this.data.isEditable;\n  }\n\n  get hasPopupData() {\n    return (\n      AnnotationElement._hasPopupData(this.data) ||\n      (this.enableComment && !!this.commentText)\n    );\n  }\n\n  get commentData() {\n    const { data } = this;\n    const editor = this.annotationStorage?.getEditor(data.id);\n    if (editor) {\n      return editor.getData();\n    }\n    return data;\n  }\n\n  get hasCommentButton() {\n    return this.enableComment && this.hasPopupElement;\n  }\n\n  get commentButtonPosition() {\n    const editor = this.annotationStorage?.getEditor(this.data.id);\n    if (editor) {\n      return editor.commentButtonPositionInPage;\n    }\n    const { quadPoints, inkLists, rect } = this.data;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    if (quadPoints?.length >= 8) {\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        if (quadPoints[i + 1] > maxY) {\n          maxY = quadPoints[i + 1];\n          maxX = quadPoints[i + 2];\n        } else if (quadPoints[i + 1] === maxY) {\n          maxX = Math.max(maxX, quadPoints[i + 2]);\n        }\n      }\n      return [maxX, maxY];\n    }\n    if (inkLists?.length >= 1) {\n      for (const inkList of inkLists) {\n        for (let i = 0, ii = inkList.length; i < ii; i += 2) {\n          if (inkList[i + 1] > maxY) {\n            maxY = inkList[i + 1];\n            maxX = inkList[i];\n          } else if (inkList[i + 1] === maxY) {\n            maxX = Math.max(maxX, inkList[i]);\n          }\n        }\n      }\n      if (maxX !== Infinity) {\n        return [maxX, maxY];\n      }\n    }\n    if (rect) {\n      return [rect[2], rect[3]];\n    }\n    return null;\n  }\n\n  _normalizePoint(point) {\n    const {\n      page: { view },\n      viewport: {\n        rawDims: { pageWidth, pageHeight, pageX, pageY },\n      },\n    } = this.parent;\n    point[1] = view[3] - point[1] + view[1];\n    point[0] = (100 * (point[0] - pageX)) / pageWidth;\n    point[1] = (100 * (point[1] - pageY)) / pageHeight;\n    return point;\n  }\n\n  get commentText() {\n    const { data } = this;\n    return (\n      this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)\n        ?.popup?.contents ||\n      data.contentsObj?.str ||\n      \"\"\n    );\n  }\n\n  set commentText(text) {\n    const { data } = this;\n    const popup = { deleted: !text, contents: text || \"\" };\n    if (!this.annotationStorage.updateEditor(data.id, { popup })) {\n      this.annotationStorage.setValue(`${AnnotationEditorPrefix}${data.id}`, {\n        id: data.id,\n        annotationType: data.annotationType,\n        pageIndex: this.parent.page._pageIndex,\n        popup,\n        popupRef: data.popupRef,\n        modificationDate: new Date(),\n      });\n    }\n    if (!text) {\n      this.removePopup();\n    }\n  }\n\n  removePopup() {\n    (this.#popupElement?.popup || this.popup)?.remove();\n    this.#popupElement = this.popup = null;\n  }\n\n  updateEdited(params) {\n    if (!this.container) {\n      return;\n    }\n\n    if (params.rect) {\n      this.#updates ||= {\n        rect: this.data.rect.slice(0),\n      };\n    }\n\n    const { rect, popup: newPopup } = params;\n\n    if (rect) {\n      this.#setRectEdited(rect);\n    }\n\n    let popup = this.#popupElement?.popup || this.popup;\n    if (!popup && newPopup?.text) {\n      this._createPopup(newPopup);\n      popup = this.#popupElement.popup;\n    }\n    if (!popup) {\n      return;\n    }\n    popup.updateEdited(params);\n    if (newPopup?.deleted) {\n      popup.remove();\n      this.#popupElement = null;\n      this.popup = null;\n    }\n  }\n\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    this.#setRectEdited(this.#updates.rect);\n    this.#popupElement?.popup.resetEdited();\n    this.#updates = null;\n  }\n\n  #setRectEdited(rect) {\n    const {\n      container: { style },\n      data: { rect: currentRect, rotation },\n      parent: {\n        viewport: {\n          rawDims: { pageWidth, pageHeight, pageX, pageY },\n        },\n      },\n    } = this;\n    currentRect?.splice(0, 4, ...rect);\n    style.left = `${(100 * (rect[0] - pageX)) / pageWidth}%`;\n    style.top = `${(100 * (pageHeight - rect[3] + pageY)) / pageHeight}%`;\n    if (rotation === 0) {\n      style.width = `${(100 * /* width = */ (rect[2] - rect[0])) / pageWidth}%`;\n      style.height = `${(100 * /* height = */ (rect[3] - rect[1])) / pageHeight}%`;\n    } else {\n      this.setRotation(rotation);\n    }\n  }\n\n  /**\n   * Create an empty container for the annotation's HTML element.\n   *\n   * @private\n   * @param {boolean} ignoreBorder\n   * @memberof AnnotationElement\n   * @returns {HTMLElement} A section element.\n   */\n  _createContainer(ignoreBorder) {\n    const {\n      data,\n      parent: { page, viewport },\n    } = this;\n\n    const container = document.createElement(\"section\");\n    container.setAttribute(\"data-annotation-id\", data.id);\n    if (\n      !(this instanceof WidgetAnnotationElement) &&\n      !(this instanceof LinkAnnotationElement)\n    ) {\n      container.tabIndex = 0;\n    }\n    const { style } = container;\n\n    // The accessibility manager will move the annotation in the DOM in\n    // order to match the visual ordering.\n    // But if an annotation is above an other one, then we must draw it\n    // after the other one whatever the order is in the DOM, hence the\n    // use of the z-index.\n    style.zIndex = this.parent.zIndex;\n    // Keep zIndex + 1 for stuff we want to add on top of this annotation.\n    this.parent.zIndex += 2;\n\n    if (data.alternativeText) {\n      container.title = data.alternativeText;\n    }\n\n    if (data.noRotate) {\n      container.classList.add(\"norotate\");\n    }\n\n    if (!data.rect || this instanceof PopupAnnotationElement) {\n      const { rotation } = data;\n      if (!data.hasOwnCanvas && rotation !== 0) {\n        this.setRotation(rotation, container);\n      }\n      return container;\n    }\n    const { width, height } = this;\n\n    if (!ignoreBorder && data.borderStyle.width > 0) {\n      style.borderWidth = `${data.borderStyle.width}px`;\n\n      const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n      const verticalRadius = data.borderStyle.verticalCornerRadius;\n      if (horizontalRadius > 0 || verticalRadius > 0) {\n        const radius = `calc(${horizontalRadius}px * var(--total-scale-factor)) / calc(${verticalRadius}px * var(--total-scale-factor))`;\n        style.borderRadius = radius;\n      } else if (this instanceof RadioButtonWidgetAnnotationElement) {\n        const radius = `calc(${width}px * var(--total-scale-factor)) / calc(${height}px * var(--total-scale-factor))`;\n        style.borderRadius = radius;\n      }\n\n      switch (data.borderStyle.style) {\n        case AnnotationBorderStyleType.SOLID:\n          style.borderStyle = \"solid\";\n          break;\n\n        case AnnotationBorderStyleType.DASHED:\n          style.borderStyle = \"dashed\";\n          break;\n\n        case AnnotationBorderStyleType.BEVELED:\n          warn(\"Unimplemented border style: beveled\");\n          break;\n\n        case AnnotationBorderStyleType.INSET:\n          warn(\"Unimplemented border style: inset\");\n          break;\n\n        case AnnotationBorderStyleType.UNDERLINE:\n          style.borderBottomStyle = \"solid\";\n          break;\n\n        default:\n          break;\n      }\n\n      const borderColor = data.borderColor || null;\n      if (borderColor) {\n        this.#hasBorder = true;\n        style.borderColor = Util.makeHexColor(\n          borderColor[0] | 0,\n          borderColor[1] | 0,\n          borderColor[2] | 0\n        );\n      } else {\n        // Transparent (invisible) border, so do not draw it at all.\n        style.borderWidth = 0;\n      }\n    }\n\n    // Do *not* modify `data.rect`, since that will corrupt the annotation\n    // position on subsequent calls to `_createContainer` (see issue 6804).\n    const rect = Util.normalizeRect([\n      data.rect[0],\n      page.view[3] - data.rect[1] + page.view[1],\n      data.rect[2],\n      page.view[3] - data.rect[3] + page.view[1],\n    ]);\n    const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n\n    style.left = `${(100 * (rect[0] - pageX)) / pageWidth}%`;\n    style.top = `${(100 * (rect[1] - pageY)) / pageHeight}%`;\n\n    const { rotation } = data;\n    if (data.hasOwnCanvas || rotation === 0) {\n      style.width = `${(100 * width) / pageWidth}%`;\n      style.height = `${(100 * height) / pageHeight}%`;\n    } else {\n      this.setRotation(rotation, container);\n    }\n\n    return container;\n  }\n\n  setRotation(angle, container = this.container) {\n    if (!this.data.rect) {\n      return;\n    }\n    const { pageWidth, pageHeight } = this.parent.viewport.rawDims;\n    let { width, height } = this;\n\n    if (angle % 180 !== 0) {\n      [width, height] = [height, width];\n    }\n    container.style.width = `${(100 * width) / pageWidth}%`;\n    container.style.height = `${(100 * height) / pageHeight}%`;\n\n    container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n  }\n\n  get _commonActions() {\n    const setColor = (jsName, styleName, event) => {\n      const color = event.detail[jsName];\n      const colorType = color[0];\n      const colorArray = color.slice(1);\n      event.target.style[styleName] =\n        ColorConverters[`${colorType}_HTML`](colorArray);\n      this.annotationStorage.setValue(this.data.id, {\n        [styleName]: ColorConverters[`${colorType}_rgb`](colorArray),\n      });\n    };\n\n    return shadow(this, \"_commonActions\", {\n      display: event => {\n        const { display } = event.detail;\n        // See scripting/constants.js for the values of `Display`.\n        // 0 = visible, 1 = hidden, 2 = noPrint and 3 = noView.\n        const hidden = display % 2 === 1;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noView: hidden,\n          noPrint: display === 1 || display === 2,\n        });\n      },\n      print: event => {\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: !event.detail.print,\n        });\n      },\n      hidden: event => {\n        const { hidden } = event.detail;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: hidden,\n          noView: hidden,\n        });\n      },\n      focus: event => {\n        setTimeout(() => event.target.focus({ preventScroll: false }), 0);\n      },\n      userName: event => {\n        // tooltip\n        event.target.title = event.detail.userName;\n      },\n      readonly: event => {\n        event.target.disabled = event.detail.readonly;\n      },\n      required: event => {\n        this._setRequired(event.target, event.detail.required);\n      },\n      bgColor: event => {\n        setColor(\"bgColor\", \"backgroundColor\", event);\n      },\n      fillColor: event => {\n        setColor(\"fillColor\", \"backgroundColor\", event);\n      },\n      fgColor: event => {\n        setColor(\"fgColor\", \"color\", event);\n      },\n      textColor: event => {\n        setColor(\"textColor\", \"color\", event);\n      },\n      borderColor: event => {\n        setColor(\"borderColor\", \"borderColor\", event);\n      },\n      strokeColor: event => {\n        setColor(\"strokeColor\", \"borderColor\", event);\n      },\n      rotation: event => {\n        const angle = event.detail.rotation;\n        this.setRotation(angle);\n        this.annotationStorage.setValue(this.data.id, {\n          rotation: angle,\n        });\n      },\n    });\n  }\n\n  _dispatchEventFromSandbox(actions, jsEvent) {\n    const commonActions = this._commonActions;\n    for (const name of Object.keys(jsEvent.detail)) {\n      const action = actions[name] || commonActions[name];\n      action?.(jsEvent);\n    }\n  }\n\n  _setDefaultPropertiesFromJS(element) {\n    if (!this.enableScripting) {\n      return;\n    }\n\n    // Some properties may have been updated thanks to JS.\n    const storedData = this.annotationStorage.getRawValue(this.data.id);\n    if (!storedData) {\n      return;\n    }\n\n    const commonActions = this._commonActions;\n    for (const [actionName, detail] of Object.entries(storedData)) {\n      const action = commonActions[actionName];\n      if (action) {\n        const eventProxy = {\n          detail: {\n            [actionName]: detail,\n          },\n          target: element,\n        };\n        action(eventProxy);\n        // The action has been consumed: no need to keep it.\n        delete storedData[actionName];\n      }\n    }\n  }\n\n  /**\n   * Create quadrilaterals from the annotation's quadpoints.\n   *\n   * @private\n   * @memberof AnnotationElement\n   */\n  _createQuadrilaterals() {\n    if (!this.container) {\n      return;\n    }\n    const { quadPoints } = this.data;\n    if (!quadPoints) {\n      return;\n    }\n\n    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map(x =>\n      Math.fround(x)\n    );\n\n    if (quadPoints.length === 8) {\n      const [trX, trY, blX, blY] = quadPoints.subarray(2, 6);\n      if (\n        rectTrX === trX &&\n        rectTrY === trY &&\n        rectBlX === blX &&\n        rectBlY === blY\n      ) {\n        // The quadpoints cover the whole annotation rectangle, so no need to\n        // create a quadrilateral.\n        return;\n      }\n    }\n\n    const { style } = this.container;\n    let svgBuffer;\n    if (this.#hasBorder) {\n      const { borderColor, borderWidth } = style;\n      style.borderWidth = 0;\n      svgBuffer = [\n        \"url('data:image/svg+xml;utf8,\",\n        `<svg xmlns=\"http://www.w3.org/2000/svg\"`,\n        ` preserveAspectRatio=\"none\" viewBox=\"0 0 1 1\">`,\n        `<g fill=\"transparent\" stroke=\"${borderColor}\" stroke-width=\"${borderWidth}\">`,\n      ];\n      this.container.classList.add(\"hasBorder\");\n    }\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      this.container.classList.add(\"hasClipPath\");\n    }\n\n    const width = rectTrX - rectBlX;\n    const height = rectTrY - rectBlY;\n\n    const { svgFactory } = this;\n    const svg = svgFactory.createElement(\"svg\");\n    svg.classList.add(\"quadrilateralsContainer\");\n    svg.setAttribute(\"width\", 0);\n    svg.setAttribute(\"height\", 0);\n    svg.role = \"none\";\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const clipPath = svgFactory.createElement(\"clipPath\");\n    const id = `clippath_${this.data.id}`;\n    clipPath.setAttribute(\"id\", id);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    defs.append(clipPath);\n\n    for (let i = 2, ii = quadPoints.length; i < ii; i += 8) {\n      const trX = quadPoints[i];\n      const trY = quadPoints[i + 1];\n      const blX = quadPoints[i + 2];\n      const blY = quadPoints[i + 3];\n      const rect = svgFactory.createElement(\"rect\");\n      const x = (blX - rectBlX) / width;\n      const y = (rectTrY - trY) / height;\n      const rectWidth = (trX - blX) / width;\n      const rectHeight = (trY - blY) / height;\n      rect.setAttribute(\"x\", x);\n      rect.setAttribute(\"y\", y);\n      rect.setAttribute(\"width\", rectWidth);\n      rect.setAttribute(\"height\", rectHeight);\n      clipPath.append(rect);\n      svgBuffer?.push(\n        `<rect vector-effect=\"non-scaling-stroke\" x=\"${x}\" y=\"${y}\" width=\"${rectWidth}\" height=\"${rectHeight}\"/>`\n      );\n    }\n\n    if (this.#hasBorder) {\n      svgBuffer.push(`</g></svg>')`);\n      style.backgroundImage = svgBuffer.join(\"\");\n    }\n\n    this.container.append(svg);\n    this.container.style.clipPath = `url(#${id})`;\n  }\n\n  /**\n   * Create a popup for the annotation's HTML element. This is used for\n   * annotations that do not have a Popup entry in the dictionary, but\n   * are of a type that works with popups (such as Highlight annotations).\n   *\n   * @param {Object} [popupData] - The data for the popup, if any.\n   *\n   * @private\n   * @memberof AnnotationElement\n   */\n  _createPopup(popupData = null) {\n    const { data } = this;\n\n    let contentsObj, modificationDate;\n    if (popupData) {\n      contentsObj = {\n        str: popupData.text,\n      };\n      modificationDate = popupData.date;\n    } else {\n      contentsObj = data.contentsObj;\n      modificationDate = data.modificationDate;\n    }\n    const popup = (this.#popupElement = new PopupAnnotationElement({\n      data: {\n        color: data.color,\n        titleObj: data.titleObj,\n        modificationDate,\n        contentsObj,\n        richText: data.richText,\n        parentRect: data.rect,\n        borderStyle: 0,\n        id: `popup_${data.id}`,\n        rotation: data.rotation,\n        noRotate: true,\n      },\n      linkService: this.linkService,\n      parent: this.parent,\n      elements: [this],\n    }));\n    if (!this.parent._commentManager) {\n      this.parent.div.append(popup.render());\n    }\n  }\n\n  get hasPopupElement() {\n    return !!(this.#popupElement || this.popup || this.data.popupRef);\n  }\n\n  get extraPopupElement() {\n    return this.#popupElement;\n  }\n\n  /**\n   * Render the annotation's HTML element(s).\n   *\n   * @public\n   * @memberof AnnotationElement\n   */\n  render() {\n    unreachable(\"Abstract method `AnnotationElement.render` called\");\n  }\n\n  /**\n   * @private\n   * @returns {Array}\n   */\n  _getElementsByName(name, skipId = null) {\n    const fields = [];\n\n    if (this._fieldObjects) {\n      const fieldObj = this._fieldObjects[name];\n      if (fieldObj) {\n        for (const { page, id, exportValues } of fieldObj) {\n          if (page === -1) {\n            continue;\n          }\n          if (id === skipId) {\n            continue;\n          }\n          const exportValue =\n            typeof exportValues === \"string\" ? exportValues : null;\n\n          const domElement = document.querySelector(\n            `[data-element-id=\"${id}\"]`\n          );\n          if (domElement && !GetElementsByNameSet.has(domElement)) {\n            warn(`_getElementsByName - element not allowed: ${id}`);\n            continue;\n          }\n          fields.push({ id, exportValue, domElement });\n        }\n      }\n      return fields;\n    }\n    // Fallback to a regular DOM lookup, to ensure that the standalone\n    // viewer components won't break.\n    for (const domElement of document.getElementsByName(name)) {\n      const { exportValue } = domElement;\n      const id = domElement.getAttribute(\"data-element-id\");\n      if (id === skipId) {\n        continue;\n      }\n      if (!GetElementsByNameSet.has(domElement)) {\n        continue;\n      }\n      fields.push({ id, exportValue, domElement });\n    }\n    return fields;\n  }\n\n  show() {\n    if (this.container) {\n      this.container.hidden = false;\n    }\n    this.popup?.maybeShow();\n  }\n\n  hide() {\n    if (this.container) {\n      this.container.hidden = true;\n    }\n    this.popup?.forceHide();\n  }\n\n  /**\n   * Get the HTML element(s) which can trigger a popup when clicked or hovered.\n   *\n   * @public\n   * @memberof AnnotationElement\n   * @returns {Array<HTMLElement>|HTMLElement} An array of elements or an\n   *          element.\n   */\n  getElementsToTriggerPopup() {\n    return this.container;\n  }\n\n  addHighlightArea() {\n    const triggers = this.getElementsToTriggerPopup();\n    if (Array.isArray(triggers)) {\n      for (const element of triggers) {\n        element.classList.add(\"highlightArea\");\n      }\n    } else {\n      triggers.classList.add(\"highlightArea\");\n    }\n  }\n\n  _editOnDoubleClick() {\n    if (!this._isEditable) {\n      return;\n    }\n    const {\n      annotationEditorType: mode,\n      data: { id: editId },\n    } = this;\n    this.container.addEventListener(\"dblclick\", () => {\n      this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n        source: this,\n        mode,\n        editId,\n        mustEnterInEditMode: true,\n      });\n    });\n  }\n\n  get width() {\n    return this.data.rect[2] - this.data.rect[0];\n  }\n\n  get height() {\n    return this.data.rect[3] - this.data.rect[1];\n  }\n}\n\nclass EditorAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n    this.editor = parameters.editor;\n  }\n\n  render() {\n    this.container.className = \"editorAnnotation\";\n    return this.container;\n  }\n\n  createOrUpdatePopup() {\n    const { editor } = this;\n    if (!editor.hasComment) {\n      return;\n    }\n    this._createPopup(editor.comment);\n    this.extraPopupElement.popup.renderCommentButton();\n  }\n\n  get hasCommentButton() {\n    return this.enableComment && this.editor.hasComment;\n  }\n\n  get commentButtonPosition() {\n    return this.editor.commentButtonPositionInPage;\n  }\n\n  get commentText() {\n    return this.editor.comment.text;\n  }\n\n  set commentText(text) {\n    this.editor.comment = text;\n    if (!text) {\n      this.removePopup();\n    }\n  }\n\n  get commentData() {\n    return this.editor.getData();\n  }\n\n  remove() {\n    this.container.remove();\n    this.container = null;\n    this.removePopup();\n  }\n}\n\nclass LinkAnnotationElement extends AnnotationElement {\n  constructor(parameters, options = null) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: !!options?.ignoreBorder,\n      createQuadrilaterals: true,\n    });\n    this.isTooltipOnly = parameters.data.isTooltipOnly;\n  }\n\n  render() {\n    const { data, linkService } = this;\n    const link = document.createElement(\"a\");\n    link.setAttribute(\"data-element-id\", data.id);\n    let isBound = false;\n\n    if (data.url) {\n      linkService.addLinkAttributes(link, data.url, data.newWindow);\n      isBound = true;\n    } else if (data.action) {\n      this._bindNamedAction(link, data.action, data.overlaidText);\n      isBound = true;\n    } else if (data.attachment) {\n      this.#bindAttachment(\n        link,\n        data.attachment,\n        data.overlaidText,\n        data.attachmentDest\n      );\n      isBound = true;\n    } else if (data.setOCGState) {\n      this.#bindSetOCGState(link, data.setOCGState, data.overlaidText);\n      isBound = true;\n    } else if (data.dest) {\n      this._bindLink(link, data.dest, data.overlaidText);\n      isBound = true;\n    } else {\n      if (\n        data.actions &&\n        (data.actions.Action ||\n          data.actions[\"Mouse Up\"] ||\n          data.actions[\"Mouse Down\"]) &&\n        this.enableScripting &&\n        this.hasJSActions\n      ) {\n        this._bindJSAction(link, data);\n        isBound = true;\n      }\n\n      if (data.resetForm) {\n        this._bindResetFormAction(link, data.resetForm);\n        isBound = true;\n      } else if (this.isTooltipOnly && !isBound) {\n        this._bindLink(link, \"\");\n        isBound = true;\n      }\n    }\n\n    this.container.classList.add(\"linkAnnotation\");\n    if (isBound) {\n      this.container.append(link);\n    }\n\n    return this.container;\n  }\n\n  #setInternalLink() {\n    this.container.setAttribute(\"data-internal-link\", \"\");\n  }\n\n  /**\n   * Bind internal links to the link element.\n   *\n   * @private\n   * @param {Object} link\n   * @param {Object} destination\n   * @param {string} [overlaidText]\n   * @memberof LinkAnnotationElement\n   */\n  _bindLink(link, destination, overlaidText = \"\") {\n    link.href = this.linkService.getDestinationHash(destination);\n    link.onclick = () => {\n      if (destination) {\n        this.linkService.goToDestination(destination);\n      }\n      return false;\n    };\n    if (destination || destination === /* isTooltipOnly = */ \"\") {\n      this.#setInternalLink();\n    }\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n  }\n\n  /**\n   * Bind named actions to the link element.\n   *\n   * @private\n   * @param {Object} link\n   * @param {Object} action\n   * @param {string} [overlaidText]\n   * @memberof LinkAnnotationElement\n   */\n  _bindNamedAction(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeNamedAction(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n\n  /**\n   * Bind attachments to the link element.\n   * @param {Object} link\n   * @param {Object} attachment\n   * @param {string} [overlaidText]\n   * @param {string} [dest]\n   */\n  #bindAttachment(link, attachment, overlaidText = \"\", dest = null) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    if (attachment.description) {\n      link.title = attachment.description;\n    } else if (overlaidText) {\n      link.title = overlaidText;\n    }\n    link.onclick = () => {\n      this.downloadManager?.openOrDownloadData(\n        attachment.content,\n        attachment.filename,\n        dest\n      );\n      return false;\n    };\n    this.#setInternalLink();\n  }\n\n  /**\n   * Bind SetOCGState actions to the link element.\n   * @param {Object} link\n   * @param {Object} action\n   * @param {string} [overlaidText]\n   */\n  #bindSetOCGState(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeSetOCGState(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n\n  /**\n   * Bind JS actions to the link element.\n   *\n   * @private\n   * @param {Object} link\n   * @param {Object} data\n   * @memberof LinkAnnotationElement\n   */\n  _bindJSAction(link, data) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    const map = new Map([\n      [\"Action\", \"onclick\"],\n      [\"Mouse Up\", \"onmouseup\"],\n      [\"Mouse Down\", \"onmousedown\"],\n    ]);\n    for (const name of Object.keys(data.actions)) {\n      const jsName = map.get(name);\n      if (!jsName) {\n        continue;\n      }\n      link[jsName] = () => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: data.id,\n            name,\n          },\n        });\n        return false;\n      };\n    }\n    if (data.overlaidText) {\n      link.title = data.overlaidText;\n    }\n\n    if (!link.onclick) {\n      link.onclick = () => false;\n    }\n    this.#setInternalLink();\n  }\n\n  _bindResetFormAction(link, resetForm) {\n    const otherClickAction = link.onclick;\n    if (!otherClickAction) {\n      link.href = this.linkService.getAnchorUrl(\"\");\n    }\n    this.#setInternalLink();\n\n    if (!this._fieldObjects) {\n      warn(\n        `_bindResetFormAction - \"resetForm\" action not supported, ` +\n          \"ensure that the `fieldObjects` parameter is provided.\"\n      );\n      if (!otherClickAction) {\n        link.onclick = () => false;\n      }\n      return;\n    }\n\n    link.onclick = () => {\n      otherClickAction?.();\n\n      const {\n        fields: resetFormFields,\n        refs: resetFormRefs,\n        include,\n      } = resetForm;\n\n      const allFields = [];\n      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n        const fieldIds = new Set(resetFormRefs);\n        for (const fieldName of resetFormFields) {\n          const fields = this._fieldObjects[fieldName] || [];\n          for (const { id } of fields) {\n            fieldIds.add(id);\n          }\n        }\n        for (const fields of Object.values(this._fieldObjects)) {\n          for (const field of fields) {\n            if (fieldIds.has(field.id) === include) {\n              allFields.push(field);\n            }\n          }\n        }\n      } else {\n        for (const fields of Object.values(this._fieldObjects)) {\n          allFields.push(...fields);\n        }\n      }\n\n      const storage = this.annotationStorage;\n      const allIds = [];\n      for (const field of allFields) {\n        const { id } = field;\n        allIds.push(id);\n        switch (field.type) {\n          case \"text\": {\n            const value = field.defaultValue || \"\";\n            storage.setValue(id, { value });\n            break;\n          }\n          case \"checkbox\":\n          case \"radiobutton\": {\n            const value = field.defaultValue === field.exportValues;\n            storage.setValue(id, { value });\n            break;\n          }\n          case \"combobox\":\n          case \"listbox\": {\n            const value = field.defaultValue || \"\";\n            storage.setValue(id, { value });\n            break;\n          }\n          default:\n            continue;\n        }\n\n        const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n        if (!domElement) {\n          continue;\n        } else if (!GetElementsByNameSet.has(domElement)) {\n          warn(`_bindResetFormAction - element not allowed: ${id}`);\n          continue;\n        }\n        domElement.dispatchEvent(new Event(\"resetform\"));\n      }\n\n      if (this.enableScripting) {\n        // Update the values in the sandbox.\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: \"app\",\n            ids: allIds,\n            name: \"ResetForm\",\n          },\n        });\n      }\n\n      return false;\n    };\n  }\n}\n\nclass TextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: true });\n  }\n\n  render() {\n    this.container.classList.add(\"textAnnotation\");\n\n    const image = document.createElement(\"img\");\n    image.src =\n      this.imageResourcesPath +\n      \"annotation-\" +\n      this.data.name.toLowerCase() +\n      \".svg\";\n    image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n    image.setAttribute(\n      \"data-l10n-args\",\n      JSON.stringify({ type: this.data.name })\n    );\n\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.append(image);\n    return this.container;\n  }\n}\n\nclass WidgetAnnotationElement extends AnnotationElement {\n  render() {\n    // Show only the container for unsupported field types.\n    return this.container;\n  }\n\n  showElementAndHideCanvas(element) {\n    if (this.data.hasOwnCanvas) {\n      if (element.previousSibling?.nodeName === \"CANVAS\") {\n        element.previousSibling.hidden = true;\n      }\n      element.hidden = false;\n    }\n  }\n\n  _getKeyModifier(event) {\n    return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n  }\n\n  _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n    if (baseName.includes(\"mouse\")) {\n      // Mouse events\n      element.addEventListener(baseName, event => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event),\n            shift: event.shiftKey,\n            modifier: this._getKeyModifier(event),\n          },\n        });\n      });\n    } else {\n      // Non-mouse events\n      element.addEventListener(baseName, event => {\n        if (baseName === \"blur\") {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          elementData.focused = false;\n        } else if (baseName === \"focus\") {\n          if (elementData.focused) {\n            return;\n          }\n          elementData.focused = true;\n        }\n\n        if (!valueGetter) {\n          return;\n        }\n\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event),\n          },\n        });\n      });\n    }\n  }\n\n  _setEventListeners(element, elementData, names, getter) {\n    for (const [baseName, eventName] of names) {\n      if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n        if (eventName === \"Focus\" || eventName === \"Blur\") {\n          elementData ||= { focused: false };\n        }\n        this._setEventListener(\n          element,\n          elementData,\n          baseName,\n          eventName,\n          getter\n        );\n        if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n          // Ensure that elementData will have the correct value.\n          this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n        } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n          this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n        }\n      }\n    }\n  }\n\n  _setBackgroundColor(element) {\n    const color = this.data.backgroundColor || null;\n    element.style.backgroundColor =\n      color === null\n        ? \"transparent\"\n        : Util.makeHexColor(color[0], color[1], color[2]);\n  }\n\n  /**\n   * Apply text styles to the text in the element.\n   *\n   * @private\n   * @param {HTMLDivElement} element\n   * @memberof TextWidgetAnnotationElement\n   */\n  _setTextStyle(element) {\n    const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n    const { fontColor } = this.data.defaultAppearanceData;\n    const fontSize =\n      this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE;\n\n    const style = element.style;\n\n    // TODO: If the font-size is zero, calculate it based on the height and\n    //       width of the element.\n    // Not setting `style.fontSize` will use the default font-size for now.\n\n    // We don't use the font, as specified in the PDF document, for the <input>\n    // element. Hence using the original `fontSize` could look bad, which is why\n    // it's instead based on the field height.\n    // If the height is \"big\" then it could lead to a too big font size\n    // so in this case use the one we've in the pdf (hence the min).\n    let computedFontSize;\n    const BORDER_SIZE = 2;\n    const roundToOneDecimal = x => Math.round(10 * x) / 10;\n    if (this.data.multiLine) {\n      const height = Math.abs(\n        this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n      );\n      const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;\n      const lineHeight = height / numberOfLines;\n      computedFontSize = Math.min(\n        fontSize,\n        roundToOneDecimal(lineHeight / LINE_FACTOR)\n      );\n    } else {\n      const height = Math.abs(\n        this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n      );\n      computedFontSize = Math.min(\n        fontSize,\n        roundToOneDecimal(height / LINE_FACTOR)\n      );\n    }\n    style.fontSize = `calc(${computedFontSize}px * var(--total-scale-factor))`;\n\n    style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\n\n    if (this.data.textAlignment !== null) {\n      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n    }\n  }\n\n  _setRequired(element, isRequired) {\n    if (isRequired) {\n      element.setAttribute(\"required\", true);\n    } else {\n      element.removeAttribute(\"required\");\n    }\n    element.setAttribute(\"aria-required\", isRequired);\n  }\n}\n\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    const isRenderable =\n      parameters.renderForms ||\n      parameters.data.hasOwnCanvas ||\n      (!parameters.data.hasAppearance && !!parameters.data.fieldValue);\n    super(parameters, { isRenderable });\n  }\n\n  setPropertyOnSiblings(base, key, value, keyInStorage) {\n    const storage = this.annotationStorage;\n    for (const element of this._getElementsByName(\n      base.name,\n      /* skipId = */ base.id\n    )) {\n      if (element.domElement) {\n        element.domElement[key] = value;\n      }\n      storage.setValue(element.id, { [keyInStorage]: value });\n    }\n  }\n\n  render() {\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n\n    this.container.classList.add(\"textWidgetAnnotation\");\n\n    let element = null;\n    if (this.renderForms) {\n      // NOTE: We cannot set the values using `element.value` below, since it\n      //       prevents the AnnotationLayer rasterizer in `test/driver.js`\n      //       from parsing the elements correctly for the reference tests.\n      const storedData = storage.getValue(id, {\n        value: this.data.fieldValue,\n      });\n      let textContent = storedData.value || \"\";\n      const maxLen = storage.getValue(id, {\n        charLimit: this.data.maxLen,\n      }).charLimit;\n      if (maxLen && textContent.length > maxLen) {\n        textContent = textContent.slice(0, maxLen);\n      }\n\n      let fieldFormattedValues =\n        storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n      if (fieldFormattedValues && this.data.comb) {\n        fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n      }\n\n      const elementData = {\n        userValue: textContent,\n        formattedValue: fieldFormattedValues,\n        lastCommittedValue: null,\n        commitKey: 1,\n        focused: false,\n      };\n\n      if (this.data.multiLine) {\n        element = document.createElement(\"textarea\");\n        element.textContent = fieldFormattedValues ?? textContent;\n        if (this.data.doNotScroll) {\n          element.style.overflowY = \"hidden\";\n        }\n      } else {\n        element = document.createElement(\"input\");\n        element.type = this.data.password ? \"password\" : \"text\";\n        element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n        if (this.data.doNotScroll) {\n          element.style.overflowX = \"hidden\";\n        }\n      }\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n      GetElementsByNameSet.add(element);\n      element.setAttribute(\"data-element-id\", id);\n\n      element.disabled = this.data.readOnly;\n      element.name = this.data.fieldName;\n      element.tabIndex = 0;\n      const { datetimeFormat, datetimeType, timeStep } = this.data;\n      const hasDateOrTime = !!datetimeType && this.enableScripting;\n      if (datetimeFormat) {\n        element.title = datetimeFormat;\n      }\n\n      this._setRequired(element, this.data.required);\n\n      if (maxLen) {\n        element.maxLength = maxLen;\n      }\n\n      element.addEventListener(\"input\", event => {\n        storage.setValue(id, { value: event.target.value });\n        this.setPropertyOnSiblings(\n          element,\n          \"value\",\n          event.target.value,\n          \"value\"\n        );\n        elementData.formattedValue = null;\n      });\n\n      element.addEventListener(\"resetform\", event => {\n        const defaultValue = this.data.defaultFieldValue ?? \"\";\n        element.value = elementData.userValue = defaultValue;\n        elementData.formattedValue = null;\n      });\n\n      let blurListener = event => {\n        const { formattedValue } = elementData;\n        if (formattedValue !== null && formattedValue !== undefined) {\n          event.target.value = formattedValue;\n        }\n        // Reset the cursor position to the start of the field (issue 12359).\n        event.target.scrollLeft = 0;\n      };\n\n      if (this.enableScripting && this.hasJSActions) {\n        element.addEventListener(\"focus\", event => {\n          if (elementData.focused) {\n            return;\n          }\n          const { target } = event;\n          if (hasDateOrTime) {\n            target.type = datetimeType;\n            if (timeStep) {\n              target.step = timeStep;\n            }\n          }\n\n          if (elementData.userValue) {\n            const value = elementData.userValue;\n            if (hasDateOrTime) {\n              if (datetimeType === \"time\") {\n                const date = new Date(value);\n                const parts = [\n                  date.getHours(),\n                  date.getMinutes(),\n                  date.getSeconds(),\n                ];\n                target.value = parts\n                  .map(v => v.toString().padStart(2, \"0\"))\n                  .join(\":\");\n              } else {\n                target.value = new Date(value - TIMEZONE_OFFSET)\n                  .toISOString()\n                  .split(datetimeType === \"date\" ? \"T\" : \".\", 1)[0];\n              }\n            } else {\n              target.value = value;\n            }\n          }\n          elementData.lastCommittedValue = target.value;\n          elementData.commitKey = 1;\n          if (!this.data.actions?.Focus) {\n            elementData.focused = true;\n          }\n        });\n\n        element.addEventListener(\"updatefromsandbox\", jsEvent => {\n          this.showElementAndHideCanvas(jsEvent.target);\n          const actions = {\n            value(event) {\n              elementData.userValue = event.detail.value ?? \"\";\n              if (!hasDateOrTime) {\n                storage.setValue(id, {\n                  value: elementData.userValue.toString(),\n                });\n              }\n              event.target.value = elementData.userValue;\n            },\n            formattedValue(event) {\n              const { formattedValue } = event.detail;\n              elementData.formattedValue = formattedValue;\n              if (\n                formattedValue !== null &&\n                formattedValue !== undefined &&\n                event.target !== document.activeElement\n              ) {\n                // Input hasn't the focus so display formatted string\n                event.target.value = formattedValue;\n              }\n              const data = {\n                formattedValue,\n              };\n              if (hasDateOrTime) {\n                // If the field is a date or time, we store the formatted value\n                // in the `value` property, so that it can be used by the\n                // `Keystroke` action.\n                data.value = formattedValue;\n              }\n              storage.setValue(id, data);\n            },\n            selRange(event) {\n              event.target.setSelectionRange(...event.detail.selRange);\n            },\n            charLimit: event => {\n              const { charLimit } = event.detail;\n              const { target } = event;\n              if (charLimit === 0) {\n                target.removeAttribute(\"maxLength\");\n                return;\n              }\n\n              target.setAttribute(\"maxLength\", charLimit);\n              let value = elementData.userValue;\n              if (!value || value.length <= charLimit) {\n                return;\n              }\n              value = value.slice(0, charLimit);\n              target.value = elementData.userValue = value;\n              storage.setValue(id, { value });\n\n              this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n                source: this,\n                detail: {\n                  id,\n                  name: \"Keystroke\",\n                  value,\n                  willCommit: true,\n                  commitKey: 1,\n                  selStart: target.selectionStart,\n                  selEnd: target.selectionEnd,\n                },\n              });\n            },\n          };\n          this._dispatchEventFromSandbox(actions, jsEvent);\n        });\n\n        // Even if the field hasn't any actions\n        // leaving it can still trigger some actions with Calculate\n        element.addEventListener(\"keydown\", event => {\n          elementData.commitKey = 1;\n          // If the key is one of Escape, Enter then the data are committed.\n          // If we've a Tab then data will be committed on blur.\n          let commitKey = -1;\n          if (event.key === \"Escape\") {\n            commitKey = 0;\n          } else if (event.key === \"Enter\" && !this.data.multiLine) {\n            // When we've a multiline field, \"Enter\" key is a key as the other\n            // hence we don't commit the data (Acrobat behaves the same way)\n            // (see issue #15627).\n            commitKey = 2;\n          } else if (event.key === \"Tab\") {\n            elementData.commitKey = 3;\n          }\n          if (commitKey === -1) {\n            return;\n          }\n          const { value } = event.target;\n          if (elementData.lastCommittedValue === value) {\n            return;\n          }\n          elementData.lastCommittedValue = value;\n          // Save the entered value\n          elementData.userValue = value;\n          this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n            source: this,\n            detail: {\n              id,\n              name: \"Keystroke\",\n              value,\n              willCommit: true,\n              commitKey,\n              selStart: event.target.selectionStart,\n              selEnd: event.target.selectionEnd,\n            },\n          });\n        });\n        const _blurListener = blurListener;\n        blurListener = null;\n        element.addEventListener(\"blur\", event => {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          if (!this.data.actions?.Blur) {\n            elementData.focused = false;\n          }\n          const { target } = event;\n          let { value } = target;\n          if (hasDateOrTime) {\n            if (value && datetimeType === \"time\") {\n              const parts = value.split(\":\").map(v => parseInt(v, 10));\n              value = new Date(\n                2000,\n                0,\n                1,\n                parts[0],\n                parts[1],\n                parts[2] || 0\n              ).valueOf();\n              target.step = \"\";\n            } else {\n              // Unfortunately, when the date is \"2025-09-23\", the parser\n              // converts it to UTC time which may lead to the date being off by\n              // one day depending on the timezone. To workaround this, we\n              // append \"T00:00\" to the date so that it's parsed as local\n              // time (bug 1989874).\n              if (!value.includes(\"T\")) {\n                value = `${value}T00:00`;\n              }\n              value = new Date(value).valueOf();\n            }\n            target.type = \"text\";\n          }\n          elementData.userValue = value;\n          if (elementData.lastCommittedValue !== value) {\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                willCommit: true,\n                commitKey: elementData.commitKey,\n                selStart: event.target.selectionStart,\n                selEnd: event.target.selectionEnd,\n              },\n            });\n          }\n          _blurListener(event);\n        });\n\n        if (this.data.actions?.Keystroke) {\n          element.addEventListener(\"beforeinput\", event => {\n            elementData.lastCommittedValue = null;\n            const { data, target } = event;\n            const { value, selectionStart, selectionEnd } = target;\n\n            let selStart = selectionStart,\n              selEnd = selectionEnd;\n\n            switch (event.inputType) {\n              // https://rawgit.com/w3c/input-events/v1/index.html#interface-InputEvent-Attributes\n              case \"deleteWordBackward\": {\n                const match = value\n                  .substring(0, selectionStart)\n                  .match(/\\w*[^\\w]*$/);\n                if (match) {\n                  selStart -= match[0].length;\n                }\n                break;\n              }\n              case \"deleteWordForward\": {\n                const match = value\n                  .substring(selectionStart)\n                  .match(/^[^\\w]*\\w*/);\n                if (match) {\n                  selEnd += match[0].length;\n                }\n                break;\n              }\n              case \"deleteContentBackward\":\n                if (selectionStart === selectionEnd) {\n                  selStart -= 1;\n                }\n                break;\n              case \"deleteContentForward\":\n                if (selectionStart === selectionEnd) {\n                  selEnd += 1;\n                }\n                break;\n            }\n\n            // We handle the event ourselves.\n            event.preventDefault();\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                change: data || \"\",\n                willCommit: false,\n                selStart,\n                selEnd,\n              },\n            });\n          });\n        }\n\n        this._setEventListeners(\n          element,\n          elementData,\n          [\n            [\"focus\", \"Focus\"],\n            [\"blur\", \"Blur\"],\n            [\"mousedown\", \"Mouse Down\"],\n            [\"mouseenter\", \"Mouse Enter\"],\n            [\"mouseleave\", \"Mouse Exit\"],\n            [\"mouseup\", \"Mouse Up\"],\n          ],\n          event => event.target.value\n        );\n      }\n\n      if (blurListener) {\n        element.addEventListener(\"blur\", blurListener);\n      }\n\n      if (this.data.comb) {\n        const fieldWidth = this.data.rect[2] - this.data.rect[0];\n        const combWidth = fieldWidth / maxLen;\n\n        element.classList.add(\"comb\");\n        element.style.letterSpacing = `calc(${combWidth}px * var(--total-scale-factor) - 1ch)`;\n      }\n    } else {\n      element = document.createElement(\"div\");\n      element.textContent = this.data.fieldValue;\n      element.style.verticalAlign = \"middle\";\n      element.style.display = \"table-cell\";\n\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n    }\n\n    this._setTextStyle(element);\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n\n    this.container.append(element);\n    return this.container;\n  }\n}\n\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: !!parameters.data.hasOwnCanvas });\n  }\n}\n\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: parameters.renderForms });\n  }\n\n  render() {\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.exportValue === data.fieldValue,\n    }).value;\n    if (typeof value === \"string\") {\n      // The value has been changed through js and set in annotationStorage.\n      value = value !== \"Off\";\n      storage.setValue(id, { value });\n    }\n\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"checkbox\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.setAttribute(\"exportValue\", data.exportValue);\n    element.tabIndex = 0;\n\n    element.addEventListener(\"change\", event => {\n      const { name, checked } = event.target;\n      for (const checkbox of this._getElementsByName(name, /* skipId = */ id)) {\n        const curChecked = checked && checkbox.exportValue === data.exportValue;\n        if (checkbox.domElement) {\n          checkbox.domElement.checked = curChecked;\n        }\n        storage.setValue(checkbox.id, { value: curChecked });\n      }\n      storage.setValue(id, { value: checked });\n    });\n\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue || \"Off\";\n      event.target.checked = defaultValue === data.exportValue;\n    });\n\n    if (this.enableScripting && this.hasJSActions) {\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            event.target.checked = event.detail.value !== \"Off\";\n            storage.setValue(id, { value: event.target.checked });\n          },\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n\n      this._setEventListeners(\n        element,\n        null,\n        [\n          [\"change\", \"Validate\"],\n          [\"change\", \"Action\"],\n          [\"focus\", \"Focus\"],\n          [\"blur\", \"Blur\"],\n          [\"mousedown\", \"Mouse Down\"],\n          [\"mouseenter\", \"Mouse Enter\"],\n          [\"mouseleave\", \"Mouse Exit\"],\n          [\"mouseup\", \"Mouse Up\"],\n        ],\n        event => event.target.checked\n      );\n    }\n\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n\n    this.container.append(element);\n    return this.container;\n  }\n}\n\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: parameters.renderForms });\n  }\n\n  render() {\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.fieldValue === data.buttonValue,\n    }).value;\n    if (typeof value === \"string\") {\n      // The value has been changed through js and set in annotationStorage.\n      value = value !== data.buttonValue;\n      storage.setValue(id, { value });\n    }\n\n    if (value) {\n      // It's possible that multiple radio buttons are checked.\n      // So if this one is checked we just reset the other ones.\n      // (see bug 1864136). Then when the other ones will be rendered they will\n      // unchecked (because of their value in the storage).\n      // Consequently, the first checked radio button will be the only checked\n      // one.\n      for (const radio of this._getElementsByName(\n        data.fieldName,\n        /* skipId = */ id\n      )) {\n        storage.setValue(radio.id, { value: false });\n      }\n    }\n\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"radio\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.tabIndex = 0;\n\n    element.addEventListener(\"change\", event => {\n      const { name, checked } = event.target;\n      for (const radio of this._getElementsByName(name, /* skipId = */ id)) {\n        storage.setValue(radio.id, { value: false });\n      }\n      storage.setValue(id, { value: checked });\n    });\n\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue;\n      event.target.checked =\n        defaultValue !== null &&\n        defaultValue !== undefined &&\n        defaultValue === data.buttonValue;\n    });\n\n    if (this.enableScripting && this.hasJSActions) {\n      const pdfButtonValue = data.buttonValue;\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value: event => {\n            const checked = pdfButtonValue === event.detail.value;\n            for (const radio of this._getElementsByName(event.target.name)) {\n              const curChecked = checked && radio.id === id;\n              if (radio.domElement) {\n                radio.domElement.checked = curChecked;\n              }\n              storage.setValue(radio.id, { value: curChecked });\n            }\n          },\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n\n      this._setEventListeners(\n        element,\n        null,\n        [\n          [\"change\", \"Validate\"],\n          [\"change\", \"Action\"],\n          [\"focus\", \"Focus\"],\n          [\"blur\", \"Blur\"],\n          [\"mousedown\", \"Mouse Down\"],\n          [\"mouseenter\", \"Mouse Enter\"],\n          [\"mouseleave\", \"Mouse Exit\"],\n          [\"mouseup\", \"Mouse Up\"],\n        ],\n        event => event.target.checked\n      );\n    }\n\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n\n    this.container.append(element);\n    return this.container;\n  }\n}\n\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n  constructor(parameters) {\n    super(parameters, { ignoreBorder: parameters.data.hasAppearance });\n  }\n\n  render() {\n    // The rendering and functionality of a push button widget annotation is\n    // equal to that of a link annotation, but may have more functionality, such\n    // as performing actions on form fields (resetting, submitting, et cetera).\n    const container = super.render();\n    container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n\n    const linkElement = container.lastChild;\n    if (this.enableScripting && this.hasJSActions && linkElement) {\n      this._setDefaultPropertiesFromJS(linkElement);\n\n      linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        this._dispatchEventFromSandbox({}, jsEvent);\n      });\n    }\n\n    return container;\n  }\n}\n\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: parameters.renderForms });\n  }\n\n  render() {\n    this.container.classList.add(\"choiceWidgetAnnotation\");\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n\n    const storedData = storage.getValue(id, {\n      value: this.data.fieldValue,\n    });\n\n    const selectElement = document.createElement(\"select\");\n    GetElementsByNameSet.add(selectElement);\n    selectElement.setAttribute(\"data-element-id\", id);\n\n    selectElement.disabled = this.data.readOnly;\n    this._setRequired(selectElement, this.data.required);\n    selectElement.name = this.data.fieldName;\n    selectElement.tabIndex = 0;\n\n    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n\n    if (!this.data.combo) {\n      // List boxes have a size and (optionally) multiple selection.\n      selectElement.size = this.data.options.length;\n      if (this.data.multiSelect) {\n        selectElement.multiple = true;\n      }\n    }\n\n    selectElement.addEventListener(\"resetform\", event => {\n      const defaultValue = this.data.defaultFieldValue;\n      for (const option of selectElement.options) {\n        option.selected = option.value === defaultValue;\n      }\n    });\n\n    // Insert the options into the choice field.\n    for (const option of this.data.options) {\n      const optionElement = document.createElement(\"option\");\n      optionElement.textContent = option.displayValue;\n      optionElement.value = option.exportValue;\n      if (storedData.value.includes(option.exportValue)) {\n        optionElement.setAttribute(\"selected\", true);\n        addAnEmptyEntry = false;\n      }\n      selectElement.append(optionElement);\n    }\n\n    let removeEmptyEntry = null;\n    if (addAnEmptyEntry) {\n      const noneOptionElement = document.createElement(\"option\");\n      noneOptionElement.value = \" \";\n      noneOptionElement.setAttribute(\"hidden\", true);\n      noneOptionElement.setAttribute(\"selected\", true);\n      selectElement.prepend(noneOptionElement);\n\n      removeEmptyEntry = () => {\n        noneOptionElement.remove();\n        selectElement.removeEventListener(\"input\", removeEmptyEntry);\n        removeEmptyEntry = null;\n      };\n      selectElement.addEventListener(\"input\", removeEmptyEntry);\n    }\n\n    const getValue = isExport => {\n      const name = isExport ? \"value\" : \"textContent\";\n      const { options, multiple } = selectElement;\n      if (!multiple) {\n        return options.selectedIndex === -1\n          ? null\n          : options[options.selectedIndex][name];\n      }\n      return Array.prototype.filter\n        .call(options, option => option.selected)\n        .map(option => option[name]);\n    };\n\n    let selectedValues = getValue(/* isExport */ false);\n\n    const getItems = event => {\n      const options = event.target.options;\n      return Array.prototype.map.call(options, option => ({\n        displayValue: option.textContent,\n        exportValue: option.value,\n      }));\n    };\n\n    if (this.enableScripting && this.hasJSActions) {\n      selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            removeEmptyEntry?.();\n            const value = event.detail.value;\n            const values = new Set(Array.isArray(value) ? value : [value]);\n            for (const option of selectElement.options) {\n              option.selected = values.has(option.value);\n            }\n            storage.setValue(id, {\n              value: getValue(/* isExport */ true),\n            });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          multipleSelection(event) {\n            selectElement.multiple = true;\n          },\n          remove(event) {\n            const options = selectElement.options;\n            const index = event.detail.remove;\n            options[index].selected = false;\n            selectElement.remove(index);\n            if (options.length > 0) {\n              const i = Array.prototype.findIndex.call(\n                options,\n                option => option.selected\n              );\n              if (i === -1) {\n                options[0].selected = true;\n              }\n            }\n            storage.setValue(id, {\n              value: getValue(/* isExport */ true),\n              items: getItems(event),\n            });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          clear(event) {\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            storage.setValue(id, { value: null, items: [] });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          insert(event) {\n            const { index, displayValue, exportValue } = event.detail.insert;\n            const selectChild = selectElement.children[index];\n            const optionElement = document.createElement(\"option\");\n            optionElement.textContent = displayValue;\n            optionElement.value = exportValue;\n\n            if (selectChild) {\n              selectChild.before(optionElement);\n            } else {\n              selectElement.append(optionElement);\n            }\n            storage.setValue(id, {\n              value: getValue(/* isExport */ true),\n              items: getItems(event),\n            });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          items(event) {\n            const { items } = event.detail;\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            for (const item of items) {\n              const { displayValue, exportValue } = item;\n              const optionElement = document.createElement(\"option\");\n              optionElement.textContent = displayValue;\n              optionElement.value = exportValue;\n              selectElement.append(optionElement);\n            }\n            if (selectElement.options.length > 0) {\n              selectElement.options[0].selected = true;\n            }\n            storage.setValue(id, {\n              value: getValue(/* isExport */ true),\n              items: getItems(event),\n            });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          indices(event) {\n            const indices = new Set(event.detail.indices);\n            for (const option of event.target.options) {\n              option.selected = indices.has(option.index);\n            }\n            storage.setValue(id, {\n              value: getValue(/* isExport */ true),\n            });\n            selectedValues = getValue(/* isExport */ false);\n          },\n          editable(event) {\n            event.target.disabled = !event.detail.editable;\n          },\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n\n      selectElement.addEventListener(\"input\", event => {\n        const exportValue = getValue(/* isExport */ true);\n        const change = getValue(/* isExport */ false);\n        storage.setValue(id, { value: exportValue });\n\n        event.preventDefault();\n\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id,\n            name: \"Keystroke\",\n            value: selectedValues,\n            change,\n            changeEx: exportValue,\n            willCommit: false,\n            commitKey: 1,\n            keyDown: false,\n          },\n        });\n      });\n\n      this._setEventListeners(\n        selectElement,\n        null,\n        [\n          [\"focus\", \"Focus\"],\n          [\"blur\", \"Blur\"],\n          [\"mousedown\", \"Mouse Down\"],\n          [\"mouseenter\", \"Mouse Enter\"],\n          [\"mouseleave\", \"Mouse Exit\"],\n          [\"mouseup\", \"Mouse Up\"],\n          [\"input\", \"Action\"],\n          [\"input\", \"Validate\"],\n        ],\n        event => event.target.value\n      );\n    } else {\n      selectElement.addEventListener(\"input\", function (event) {\n        storage.setValue(id, { value: getValue(/* isExport */ true) });\n      });\n    }\n\n    if (this.data.combo) {\n      this._setTextStyle(selectElement);\n    } else {\n      // Just use the default font size...\n      // it's a bit hard to guess what is a good size.\n    }\n    this._setBackgroundColor(selectElement);\n    this._setDefaultPropertiesFromJS(selectElement);\n\n    this.container.append(selectElement);\n    return this.container;\n  }\n}\n\nclass PopupAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const { data, elements, parent } = parameters;\n    const hasCommentManager = !!parent._commentManager;\n    super(parameters, {\n      isRenderable: !hasCommentManager && AnnotationElement._hasPopupData(data),\n    });\n    this.elements = elements;\n    if (hasCommentManager && AnnotationElement._hasPopupData(data)) {\n      const popup = (this.popup = this.#createPopup());\n      for (const element of elements) {\n        element.popup = popup;\n      }\n    } else {\n      this.popup = null;\n    }\n  }\n\n  #createPopup() {\n    return new PopupElement({\n      container: this.container,\n      color: this.data.color,\n      titleObj: this.data.titleObj,\n      modificationDate: this.data.modificationDate || this.data.creationDate,\n      contentsObj: this.data.contentsObj,\n      richText: this.data.richText,\n      rect: this.data.rect,\n      parentRect: this.data.parentRect || null,\n      parent: this.parent,\n      elements: this.elements,\n      open: this.data.open,\n      commentManager: this.parent._commentManager,\n    });\n  }\n\n  render() {\n    const { container } = this;\n    container.classList.add(\"popupAnnotation\");\n    container.role = \"comment\";\n\n    const popup = (this.popup = this.#createPopup());\n\n    const elementIds = [];\n    for (const element of this.elements) {\n      element.popup = popup;\n      element.container.ariaHasPopup = \"dialog\";\n      elementIds.push(element.data.id);\n      element.addHighlightArea();\n    }\n\n    this.container.setAttribute(\n      \"aria-controls\",\n      elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\")\n    );\n\n    return this.container;\n  }\n}\n\nclass PopupElement {\n  #commentManager = null;\n\n  #boundKeyDown = this.#keyDown.bind(this);\n\n  #boundHide = this.#hide.bind(this);\n\n  #boundShow = this.#show.bind(this);\n\n  #boundToggle = this.#toggle.bind(this);\n\n  #color = null;\n\n  #container = null;\n\n  #contentsObj = null;\n\n  #dateObj = null;\n\n  #elements = null;\n\n  #parent = null;\n\n  #parentRect = null;\n\n  #pinned = false;\n\n  #popup = null;\n\n  #popupAbortController = null;\n\n  #position = null;\n\n  #commentButton = null;\n\n  #commentButtonPosition = null;\n\n  #popupPosition = null;\n\n  #rect = null;\n\n  #richText = null;\n\n  #titleObj = null;\n\n  #updates = null;\n\n  #wasVisible = false;\n\n  #firstElement = null;\n\n  #commentText = null;\n\n  constructor({\n    container,\n    color,\n    elements,\n    titleObj,\n    modificationDate,\n    contentsObj,\n    richText,\n    parent,\n    rect,\n    parentRect,\n    open,\n    commentManager = null,\n  }) {\n    this.#container = container;\n    this.#titleObj = titleObj;\n    this.#contentsObj = contentsObj;\n    this.#richText = richText;\n    this.#parent = parent;\n    this.#color = color;\n    this.#rect = rect;\n    this.#parentRect = parentRect;\n    this.#elements = elements;\n    this.#commentManager = commentManager;\n    this.#firstElement = elements[0];\n\n    // The modification date is shown in the popup instead of the creation\n    // date if it is available and can be parsed correctly, which is\n    // consistent with other viewers such as Adobe Acrobat.\n    this.#dateObj = PDFDateString.toDateObject(modificationDate);\n\n    // The elements that will trigger the popup.\n    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n\n    if (commentManager) {\n      this.renderCommentButton();\n    } else {\n      this.#addEventListeners();\n\n      this.#container.hidden = true;\n      if (open) {\n        this.#toggle();\n      }\n\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n        // Since the popup is lazily created, we need to ensure that it'll be\n        // created and displayed during reference tests.\n        this.#parent.popupShow.push(async () => {\n          if (this.#container.hidden) {\n            this.#show();\n          }\n        });\n      }\n    }\n  }\n\n  #addEventListeners() {\n    if (this.#popupAbortController) {\n      return;\n    }\n    this.#popupAbortController = new AbortController();\n    const { signal } = this.#popupAbortController;\n\n    // Attach the event listeners to the trigger element.\n    for (const element of this.trigger) {\n      element.addEventListener(\"click\", this.#boundToggle, { signal });\n      element.addEventListener(\"pointerenter\", this.#boundShow, { signal });\n      element.addEventListener(\"pointerleave\", this.#boundHide, { signal });\n      element.classList.add(\"popupTriggerArea\");\n    }\n\n    // Attach the event listener to toggle the popup with the keyboard.\n    for (const element of this.#elements) {\n      element.container?.addEventListener(\"keydown\", this.#boundKeyDown, {\n        signal,\n      });\n    }\n  }\n\n  #setCommentButtonPosition() {\n    const element = this.#elements.find(e => e.hasCommentButton);\n    if (!element) {\n      return;\n    }\n    this.#commentButtonPosition = element._normalizePoint(\n      element.commentButtonPosition\n    );\n  }\n\n  renderCommentButton() {\n    if (this.#commentButton) {\n      return;\n    }\n\n    if (!this.#commentButtonPosition) {\n      this.#setCommentButtonPosition();\n    }\n\n    if (!this.#commentButtonPosition) {\n      return;\n    }\n\n    const { signal } = (this.#popupAbortController = new AbortController());\n    const hasOwnButton = !!this.#firstElement.extraPopupElement;\n    const togglePopup = () => {\n      this.#commentManager.toggleCommentPopup(\n        this,\n        /* isSelected = */ true,\n        /* visibility = */ undefined,\n        /* isEditable = */ !hasOwnButton\n      );\n    };\n    const showPopup = () => {\n      this.#commentManager.toggleCommentPopup(\n        this,\n        /* isSelected = */ false,\n        /* visibility = */ true,\n        /* isEditable = */ !hasOwnButton\n      );\n    };\n    const hidePopup = () => {\n      this.#commentManager.toggleCommentPopup(\n        this,\n        /* isSelected = */ false,\n        /* visibility = */ false\n      );\n    };\n\n    if (!hasOwnButton) {\n      const button = (this.#commentButton = document.createElement(\"button\"));\n      button.className = \"annotationCommentButton\";\n      const parentContainer = this.#firstElement.container;\n      button.style.zIndex = parentContainer.style.zIndex + 1;\n      button.tabIndex = 0;\n      button.ariaHasPopup = \"dialog\";\n      button.ariaControls = \"commentPopup\";\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n      this.#updateColor();\n      this.#updateCommentButtonPosition();\n      button.addEventListener(\"keydown\", this.#boundKeyDown, { signal });\n      button.addEventListener(\"click\", togglePopup, { signal });\n      button.addEventListener(\"pointerenter\", showPopup, { signal });\n      button.addEventListener(\"pointerleave\", hidePopup, { signal });\n      parentContainer.after(button);\n    } else {\n      this.#commentButton = this.#firstElement.container;\n      for (const element of this.trigger) {\n        element.ariaHasPopup = \"dialog\";\n        element.ariaControls = \"commentPopup\";\n        element.addEventListener(\"keydown\", this.#boundKeyDown, { signal });\n        element.addEventListener(\"click\", togglePopup, { signal });\n        element.addEventListener(\"pointerenter\", showPopup, { signal });\n        element.addEventListener(\"pointerleave\", hidePopup, { signal });\n        element.classList.add(\"popupTriggerArea\");\n      }\n    }\n  }\n\n  #updateCommentButtonPosition() {\n    if (this.#firstElement.extraPopupElement && !this.#firstElement.editor) {\n      // If there's no editor associated with the annotation then the comment\n      // button position can't be changed.\n      return;\n    }\n    this.renderCommentButton();\n    const [x, y] = this.#commentButtonPosition;\n    const { style } = this.#commentButton;\n    style.left = `calc(${x}%)`;\n    style.top = `calc(${y}% - var(--comment-button-dim))`;\n  }\n\n  #updateColor() {\n    if (this.#firstElement.extraPopupElement) {\n      return;\n    }\n    this.renderCommentButton();\n    this.#commentButton.style.backgroundColor = this.commentButtonColor || \"\";\n  }\n\n  get commentButtonColor() {\n    const { color, opacity } = this.#firstElement.commentData;\n    if (!color) {\n      return null;\n    }\n    return this.#parent._commentManager.makeCommentColor(color, opacity);\n  }\n\n  focusCommentButton() {\n    setTimeout(() => {\n      this.#commentButton?.focus();\n    }, 0);\n  }\n\n  getData() {\n    const { richText, color, opacity, creationDate, modificationDate } =\n      this.#firstElement.commentData;\n    return {\n      contentsObj: { str: this.comment },\n      richText,\n      color,\n      opacity,\n      creationDate,\n      modificationDate,\n    };\n  }\n\n  get elementBeforePopup() {\n    return this.#commentButton;\n  }\n\n  get comment() {\n    this.#commentText ||= this.#firstElement.commentText;\n    return this.#commentText;\n  }\n\n  set comment(text) {\n    if (text === this.comment) {\n      return;\n    }\n    this.#firstElement.commentText = this.#commentText = text;\n  }\n\n  get parentBoundingClientRect() {\n    return this.#firstElement.layer.getBoundingClientRect();\n  }\n\n  setCommentButtonStates({ selected, hasPopup }) {\n    if (!this.#commentButton) {\n      return;\n    }\n    this.#commentButton.classList.toggle(\"selected\", selected);\n    this.#commentButton.ariaExpanded = hasPopup;\n  }\n\n  setSelectedCommentButton(selected) {\n    this.#commentButton.classList.toggle(\"selected\", selected);\n  }\n\n  get commentPopupPosition() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    const { x, y, height } = this.#commentButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight,\n    } = this.#firstElement.layer.getBoundingClientRect();\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n\n  set commentPopupPosition(pos) {\n    this.#popupPosition = pos;\n  }\n\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n\n  get commentButtonPosition() {\n    return this.#commentButtonPosition;\n  }\n\n  get commentButtonWidth() {\n    return (\n      this.#commentButton.getBoundingClientRect().width /\n      this.parentBoundingClientRect.width\n    );\n  }\n\n  editComment(options) {\n    const [posX, posY] =\n      this.#popupPosition || this.commentButtonPosition.map(x => x / 100);\n    const parentDimensions = this.parentBoundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight,\n    } = parentDimensions;\n    this.#commentManager.showDialog(\n      null,\n      this,\n      parentX + posX * parentWidth,\n      parentY + posY * parentHeight,\n      { ...options, parentDimensions }\n    );\n  }\n\n  render() {\n    if (this.#popup) {\n      return;\n    }\n\n    const popup = (this.#popup = document.createElement(\"div\"));\n    popup.className = \"popup\";\n\n    if (this.#color) {\n      const baseColor = (popup.style.outlineColor = Util.makeHexColor(\n        ...this.#color\n      ));\n      popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n    }\n\n    const header = document.createElement(\"span\");\n    header.className = \"header\";\n    if (this.#titleObj?.str) {\n      const title = document.createElement(\"span\");\n      title.className = \"title\";\n      header.append(title);\n      ({ dir: title.dir, str: title.textContent } = this.#titleObj);\n    }\n    popup.append(header);\n\n    if (this.#dateObj) {\n      const modificationDate = document.createElement(\"time\");\n      modificationDate.className = \"popupDate\";\n      modificationDate.setAttribute(\n        \"data-l10n-id\",\n        \"pdfjs-annotation-date-time-string\"\n      );\n      modificationDate.setAttribute(\n        \"data-l10n-args\",\n        JSON.stringify({ dateObj: this.#dateObj.valueOf() })\n      );\n      modificationDate.dateTime = this.#dateObj.toISOString();\n      header.append(modificationDate);\n    }\n\n    renderRichText(\n      {\n        html: this.#html || this.#contentsObj.str,\n        dir: this.#contentsObj?.dir,\n        className: \"popupContent\",\n      },\n      popup\n    );\n\n    this.#container.append(popup);\n  }\n\n  get #html() {\n    const richText = this.#richText;\n    const contentsObj = this.#contentsObj;\n    if (\n      richText?.str &&\n      (!contentsObj?.str || contentsObj.str === richText.str)\n    ) {\n      return this.#richText.html || null;\n    }\n    return null;\n  }\n\n  get #fontSize() {\n    return this.#html?.attributes?.style?.fontSize || 0;\n  }\n\n  get #fontColor() {\n    return this.#html?.attributes?.style?.color || null;\n  }\n\n  #makePopupContent(text) {\n    const popupLines = [];\n    const popupContent = {\n      str: text,\n      html: {\n        name: \"div\",\n        attributes: {\n          dir: \"auto\",\n        },\n        children: [\n          {\n            name: \"p\",\n            children: popupLines,\n          },\n        ],\n      },\n    };\n    const lineAttributes = {\n      style: {\n        color: this.#fontColor,\n        fontSize: this.#fontSize\n          ? `calc(${this.#fontSize}px * var(--total-scale-factor))`\n          : \"\",\n      },\n    };\n    for (const line of text.split(\"\\n\")) {\n      popupLines.push({\n        name: \"span\",\n        value: line,\n        attributes: lineAttributes,\n      });\n    }\n    return popupContent;\n  }\n\n  #keyDown(event) {\n    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n\n    if (event.key === \"Enter\" || (event.key === \"Escape\" && this.#pinned)) {\n      this.#toggle();\n    }\n  }\n\n  updateEdited({ rect, popup, deleted }) {\n    if (this.#commentManager) {\n      if (deleted) {\n        this.remove();\n        this.#commentText = null;\n      } else if (popup) {\n        if (popup.deleted) {\n          this.remove();\n        } else {\n          this.#updateColor();\n          this.#commentText = popup.text;\n        }\n      }\n      if (rect) {\n        this.#commentButtonPosition = null;\n        this.#setCommentButtonPosition();\n        this.#updateCommentButtonPosition();\n      }\n      return;\n    }\n    if (deleted || popup?.deleted) {\n      this.remove();\n      return;\n    }\n    this.#addEventListeners();\n    this.#updates ||= {\n      contentsObj: this.#contentsObj,\n      richText: this.#richText,\n    };\n    if (rect) {\n      this.#position = null;\n    }\n    if (popup && popup.text) {\n      this.#richText = this.#makePopupContent(popup.text);\n      this.#dateObj = PDFDateString.toDateObject(popup.date);\n      this.#contentsObj = null;\n    }\n    this.#popup?.remove();\n    this.#popup = null;\n  }\n\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    ({ contentsObj: this.#contentsObj, richText: this.#richText } =\n      this.#updates);\n    this.#updates = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#position = null;\n  }\n\n  remove() {\n    this.#popupAbortController?.abort();\n    this.#popupAbortController = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#wasVisible = false;\n    this.#pinned = false;\n    this.#commentButton?.remove();\n    this.#commentButton = null;\n    if (this.trigger) {\n      for (const element of this.trigger) {\n        element.classList.remove(\"popupTriggerArea\");\n      }\n    }\n  }\n\n  #setPosition() {\n    if (this.#position !== null) {\n      return;\n    }\n    const {\n      page: { view },\n      viewport: {\n        rawDims: { pageWidth, pageHeight, pageX, pageY },\n      },\n    } = this.#parent;\n\n    let useParentRect = !!this.#parentRect;\n    let rect = useParentRect ? this.#parentRect : this.#rect;\n    for (const element of this.#elements) {\n      if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n        rect = element.data.rect;\n        useParentRect = true;\n        break;\n      }\n    }\n\n    const normalizedRect = Util.normalizeRect([\n      rect[0],\n      view[3] - rect[1] + view[1],\n      rect[2],\n      view[3] - rect[3] + view[1],\n    ]);\n\n    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n    const parentWidth = useParentRect\n      ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION\n      : 0;\n    const popupLeft = normalizedRect[0] + parentWidth;\n    const popupTop = normalizedRect[1];\n    this.#position = [\n      (100 * (popupLeft - pageX)) / pageWidth,\n      (100 * (popupTop - pageY)) / pageHeight,\n    ];\n\n    const { style } = this.#container;\n    style.left = `${this.#position[0]}%`;\n    style.top = `${this.#position[1]}%`;\n  }\n\n  /**\n   * Toggle the visibility of the popup.\n   */\n  #toggle() {\n    if (this.#commentManager) {\n      this.#commentManager.toggleCommentPopup(this, /* isSelected = */ false);\n      return;\n    }\n\n    this.#pinned = !this.#pinned;\n    if (this.#pinned) {\n      this.#show();\n      this.#container.addEventListener(\"click\", this.#boundToggle);\n      this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n    } else {\n      this.#hide();\n      this.#container.removeEventListener(\"click\", this.#boundToggle);\n      this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n    }\n  }\n\n  /**\n   * Show the popup.\n   */\n  #show() {\n    if (!this.#popup) {\n      this.render();\n    }\n    if (!this.isVisible) {\n      this.#setPosition();\n      this.#container.hidden = false;\n      this.#container.style.zIndex =\n        parseInt(this.#container.style.zIndex) + 1000;\n    } else if (this.#pinned) {\n      this.#container.classList.add(\"focused\");\n    }\n  }\n\n  /**\n   * Hide the popup.\n   */\n  #hide() {\n    this.#container.classList.remove(\"focused\");\n    if (this.#pinned || !this.isVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n    this.#container.style.zIndex =\n      parseInt(this.#container.style.zIndex) - 1000;\n  }\n\n  forceHide() {\n    this.#wasVisible = this.isVisible;\n    if (!this.#wasVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n  }\n\n  maybeShow() {\n    if (this.#commentManager) {\n      return;\n    }\n    this.#addEventListeners();\n    if (!this.#wasVisible) {\n      return;\n    }\n    if (!this.#popup) {\n      this.#show();\n    }\n    this.#wasVisible = false;\n    this.#container.hidden = false;\n  }\n\n  get isVisible() {\n    if (this.#commentManager) {\n      return false;\n    }\n    return this.#container.hidden === false;\n  }\n}\n\nclass FreeTextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n    this.textContent = parameters.data.textContent;\n    this.textPosition = parameters.data.textPosition;\n    this.annotationEditorType = AnnotationEditorType.FREETEXT;\n  }\n\n  render() {\n    this.container.classList.add(\"freeTextAnnotation\");\n\n    if (this.textContent) {\n      const content = document.createElement(\"div\");\n      content.classList.add(\"annotationTextContent\");\n      content.setAttribute(\"role\", \"comment\");\n      for (const line of this.textContent) {\n        const lineSpan = document.createElement(\"span\");\n        lineSpan.textContent = line;\n        content.append(lineSpan);\n      }\n      this.container.append(content);\n    }\n\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this._editOnDoubleClick();\n\n    return this.container;\n  }\n}\n\nclass LineAnnotationElement extends AnnotationElement {\n  #line = null;\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n  }\n\n  render() {\n    this.container.classList.add(\"lineAnnotation\");\n\n    // Create an invisible line with the same starting and ending coordinates\n    // that acts as the trigger for the popup. Only the line itself should\n    // trigger the popup, not the entire container.\n    const { data, width, height } = this;\n    const svg = this.svgFactory.create(\n      width,\n      height,\n      /* skipDimensions = */ true\n    );\n\n    // PDF coordinates are calculated from a bottom left origin, so transform\n    // the line coordinates to a top left origin for the SVG element.\n    const line = (this.#line = this.svgFactory.createElement(\"svg:line\"));\n    line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n    line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n    line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n    line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    line.setAttribute(\"stroke\", \"transparent\");\n    line.setAttribute(\"fill\", \"transparent\");\n\n    svg.append(line);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the line instead\n    // of to the entire container (which is the default).\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    return this.container;\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#line;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\n\nclass SquareAnnotationElement extends AnnotationElement {\n  #square = null;\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n  }\n\n  render() {\n    this.container.classList.add(\"squareAnnotation\");\n\n    // Create an invisible square with the same rectangle that acts as the\n    // trigger for the popup. Only the square itself should trigger the\n    // popup, not the entire container.\n    const { data, width, height } = this;\n    const svg = this.svgFactory.create(\n      width,\n      height,\n      /* skipDimensions = */ true\n    );\n\n    // The browser draws half of the borders inside the square and half of\n    // the borders outside the square by default. This behavior cannot be\n    // changed programmatically, so correct for that here.\n    const borderWidth = data.borderStyle.width;\n    const square = (this.#square = this.svgFactory.createElement(\"svg:rect\"));\n    square.setAttribute(\"x\", borderWidth / 2);\n    square.setAttribute(\"y\", borderWidth / 2);\n    square.setAttribute(\"width\", width - borderWidth);\n    square.setAttribute(\"height\", height - borderWidth);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    square.setAttribute(\"stroke-width\", borderWidth || 1);\n    square.setAttribute(\"stroke\", \"transparent\");\n    square.setAttribute(\"fill\", \"transparent\");\n\n    svg.append(square);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the square instead\n    // of to the entire container (which is the default).\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    return this.container;\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#square;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\n\nclass CircleAnnotationElement extends AnnotationElement {\n  #circle = null;\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n  }\n\n  render() {\n    this.container.classList.add(\"circleAnnotation\");\n\n    // Create an invisible circle with the same ellipse that acts as the\n    // trigger for the popup. Only the circle itself should trigger the\n    // popup, not the entire container.\n    const { data, width, height } = this;\n    const svg = this.svgFactory.create(\n      width,\n      height,\n      /* skipDimensions = */ true\n    );\n\n    // The browser draws half of the borders inside the circle and half of\n    // the borders outside the circle by default. This behavior cannot be\n    // changed programmatically, so correct for that here.\n    const borderWidth = data.borderStyle.width;\n    const circle = (this.#circle =\n      this.svgFactory.createElement(\"svg:ellipse\"));\n    circle.setAttribute(\"cx\", width / 2);\n    circle.setAttribute(\"cy\", height / 2);\n    circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n    circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    circle.setAttribute(\"stroke-width\", borderWidth || 1);\n    circle.setAttribute(\"stroke\", \"transparent\");\n    circle.setAttribute(\"fill\", \"transparent\");\n\n    svg.append(circle);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the circle instead\n    // of to the entire container (which is the default).\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    return this.container;\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#circle;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\n\nclass PolylineAnnotationElement extends AnnotationElement {\n  #polyline = null;\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n\n    this.containerClassName = \"polylineAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n  }\n\n  render() {\n    this.container.classList.add(this.containerClassName);\n\n    // Create an invisible polyline with the same points that acts as the\n    // trigger for the popup. Only the polyline itself should trigger the\n    // popup, not the entire container.\n    const {\n      data: { rect, vertices, borderStyle, popupRef },\n      width,\n      height,\n    } = this;\n    if (!vertices) {\n      return this.container;\n    }\n    const svg = this.svgFactory.create(\n      width,\n      height,\n      /* skipDimensions = */ true\n    );\n\n    // Convert the vertices array to a single points string that the SVG\n    // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n    // calculated from a bottom left origin, so transform the polyline\n    // coordinates to a top left origin for the SVG element.\n    let points = [];\n    for (let i = 0, ii = vertices.length; i < ii; i += 2) {\n      const x = vertices[i] - rect[0];\n      const y = rect[3] - vertices[i + 1];\n      points.push(`${x},${y}`);\n    }\n    points = points.join(\" \");\n\n    const polyline = (this.#polyline = this.svgFactory.createElement(\n      this.svgElementName\n    ));\n    polyline.setAttribute(\"points\", points);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    polyline.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    polyline.setAttribute(\"stroke\", \"transparent\");\n    polyline.setAttribute(\"fill\", \"transparent\");\n\n    svg.append(polyline);\n    this.container.append(svg);\n\n    // Create the popup ourselves so that we can bind it to the polyline\n    // instead of to the entire container (which is the default).\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    return this.container;\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#polyline;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\n\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n  constructor(parameters) {\n    // Polygons are specific forms of polylines, so reuse their logic.\n    super(parameters);\n\n    this.containerClassName = \"polygonAnnotation\";\n    this.svgElementName = \"svg:polygon\";\n  }\n}\n\nclass CaretAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n  }\n\n  render() {\n    this.container.classList.add(\"caretAnnotation\");\n\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n}\n\nclass InkAnnotationElement extends AnnotationElement {\n  #polylinesGroupElement = null;\n\n  #polylines = [];\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n\n    this.containerClassName = \"inkAnnotation\";\n\n    // Use the polyline SVG element since it allows us to use coordinates\n    // directly and to draw both straight lines and curves.\n    this.svgElementName = \"svg:polyline\";\n\n    this.annotationEditorType =\n      this.data.it === \"InkHighlight\"\n        ? AnnotationEditorType.HIGHLIGHT\n        : AnnotationEditorType.INK;\n  }\n\n  #getTransform(rotation, rect) {\n    // PDF coordinates are calculated from a bottom left origin, so\n    // transform the polyline coordinates to a top left origin for the\n    // SVG element.\n    switch (rotation) {\n      case 90:\n        return {\n          transform: `rotate(90) translate(${-rect[0]},${rect[1]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0],\n        };\n      case 180:\n        return {\n          transform: `rotate(180) translate(${-rect[2]},${rect[1]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1],\n        };\n      case 270:\n        return {\n          transform: `rotate(270) translate(${-rect[2]},${rect[3]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0],\n        };\n      default:\n        return {\n          transform: `translate(${-rect[0]},${rect[3]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1],\n        };\n    }\n  }\n\n  render() {\n    this.container.classList.add(this.containerClassName);\n\n    // Create an invisible polyline with the same points that acts as the\n    // trigger for the popup.\n    const {\n      data: { rect, rotation, inkLists, borderStyle, popupRef },\n    } = this;\n    const { transform, width, height } = this.#getTransform(rotation, rect);\n\n    const svg = this.svgFactory.create(\n      width,\n      height,\n      /* skipDimensions = */ true\n    );\n    const g = (this.#polylinesGroupElement =\n      this.svgFactory.createElement(\"svg:g\"));\n    svg.append(g);\n    // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n    // won't be possible to open/close the popup (note e.g. issue 11122).\n    g.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    g.setAttribute(\"stroke-linecap\", \"round\");\n    g.setAttribute(\"stroke-linejoin\", \"round\");\n    g.setAttribute(\"stroke-miterlimit\", 10);\n    g.setAttribute(\"stroke\", \"transparent\");\n    g.setAttribute(\"fill\", \"transparent\");\n    g.setAttribute(\"transform\", transform);\n\n    for (let i = 0, ii = inkLists.length; i < ii; i++) {\n      const polyline = this.svgFactory.createElement(this.svgElementName);\n      this.#polylines.push(polyline);\n      polyline.setAttribute(\"points\", inkLists[i].join(\",\"));\n      g.append(polyline);\n    }\n\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.append(svg);\n    this._editOnDoubleClick();\n\n    return this.container;\n  }\n\n  updateEdited(params) {\n    super.updateEdited(params);\n    const { thickness, points, rect } = params;\n    const g = this.#polylinesGroupElement;\n    if (thickness >= 0) {\n      g.setAttribute(\"stroke-width\", thickness || 1);\n    }\n    if (points) {\n      for (let i = 0, ii = this.#polylines.length; i < ii; i++) {\n        this.#polylines[i].setAttribute(\"points\", points[i].join(\",\"));\n      }\n    }\n    if (rect) {\n      const { transform, width, height } = this.#getTransform(\n        this.data.rotation,\n        rect\n      );\n      const root = g.parentElement;\n      root.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n      g.setAttribute(\"transform\", transform);\n    }\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#polylines;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\n\nclass HighlightAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true,\n    });\n    this.annotationEditorType = AnnotationEditorType.HIGHLIGHT;\n  }\n\n  render() {\n    const {\n      data: { overlaidText, popupRef },\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.classList.add(\"highlightAnnotation\");\n    this._editOnDoubleClick();\n\n    if (overlaidText) {\n      const mark = document.createElement(\"mark\");\n      mark.classList.add(\"overlaidText\");\n      mark.textContent = overlaidText;\n      this.container.append(mark);\n    }\n\n    return this.container;\n  }\n}\n\nclass UnderlineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true,\n    });\n  }\n\n  render() {\n    const {\n      data: { overlaidText, popupRef },\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.classList.add(\"underlineAnnotation\");\n\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n\n    return this.container;\n  }\n}\n\nclass SquigglyAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true,\n    });\n  }\n\n  render() {\n    const {\n      data: { overlaidText, popupRef },\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.classList.add(\"squigglyAnnotation\");\n\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n\n    return this.container;\n  }\n}\n\nclass StrikeOutAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true,\n    });\n  }\n\n  render() {\n    const {\n      data: { overlaidText, popupRef },\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n\n    this.container.classList.add(\"strikeoutAnnotation\");\n\n    if (overlaidText) {\n      const strikeout = document.createElement(\"s\");\n      strikeout.classList.add(\"overlaidText\");\n      strikeout.textContent = overlaidText;\n      this.container.append(strikeout);\n    }\n\n    return this.container;\n  }\n}\n\nclass StampAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, { isRenderable: true, ignoreBorder: true });\n    this.annotationEditorType = AnnotationEditorType.STAMP;\n  }\n\n  render() {\n    this.container.classList.add(\"stampAnnotation\");\n    this.container.setAttribute(\"role\", \"img\");\n\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n\n    return this.container;\n  }\n}\n\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n  #trigger = null;\n\n  constructor(parameters) {\n    super(parameters, { isRenderable: true });\n\n    const { file } = this.data;\n    this.filename = file.filename;\n    this.content = file.content;\n\n    this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n      source: this,\n      ...file,\n    });\n  }\n\n  render() {\n    this.container.classList.add(\"fileAttachmentAnnotation\");\n\n    const { container, data } = this;\n    let trigger;\n    if (data.hasAppearance || data.fillAlpha === 0) {\n      trigger = document.createElement(\"div\");\n    } else {\n      // Unfortunately it seems that it's not clearly specified exactly what\n      // names are actually valid, since Table 184 contains:\n      //   Conforming readers shall provide predefined icon appearances for at\n      //   least the following standard names: GraphPushPin, PaperclipTag.\n      //   Additional names may be supported as well. Default value: PushPin.\n      trigger = document.createElement(\"img\");\n      trigger.src = `${this.imageResourcesPath}annotation-${\n        /paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"\n      }.svg`;\n\n      if (data.fillAlpha && data.fillAlpha < 1) {\n        trigger.style = `filter: opacity(${Math.round(\n          data.fillAlpha * 100\n        )}%);`;\n\n        if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n          this.container.classList.add(\"hasFillAlpha\");\n        }\n      }\n    }\n    trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n    this.#trigger = trigger;\n\n    const { isMac } = FeatureTest.platform;\n    container.addEventListener(\"keydown\", evt => {\n      if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n        this.#download();\n      }\n    });\n\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    } else {\n      trigger.classList.add(\"popupTriggerArea\");\n    }\n\n    container.append(trigger);\n    return container;\n  }\n\n  getElementsToTriggerPopup() {\n    return this.#trigger;\n  }\n\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n\n  /**\n   * Download the file attachment associated with this annotation.\n   */\n  #download() {\n    this.downloadManager?.openOrDownloadData(this.content, this.filename);\n  }\n}\n\n/**\n * @typedef {Object} AnnotationLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Array} annotations\n * @property {PDFPageProxy} page\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {boolean} [enableScripting] - Enable embedded script execution.\n * @property {boolean} [hasJSActions] - Some fields have JS actions.\n *   The default value is `false`.\n * @property {Object<string, Array<Object>> | null} [fieldObjects]\n * @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {AnnotationEditorUIManager} [annotationEditorUIManager]\n * @property {StructTreeLayerBuilder} [structTreeLayer]\n * @property {CommentManager} [commentManager] - The comment manager instance.\n */\n\n/**\n * Manage the layer containing all the annotations.\n */\nclass AnnotationLayer {\n  #accessibilityManager = null;\n\n  #annotationCanvasMap = null;\n\n  #annotationStorage = null;\n\n  #editableAnnotations = new Map();\n\n  #structTreeLayer = null;\n\n  #linkService = null;\n\n  constructor({\n    div,\n    accessibilityManager,\n    annotationCanvasMap,\n    annotationEditorUIManager,\n    page,\n    viewport,\n    structTreeLayer,\n    commentManager,\n    linkService,\n    annotationStorage,\n  }) {\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationCanvasMap = annotationCanvasMap;\n    this.#structTreeLayer = structTreeLayer || null;\n    this.#linkService = linkService || null;\n    this.#annotationStorage = annotationStorage || new AnnotationStorage();\n    this.page = page;\n    this.viewport = viewport;\n    this.zIndex = 0;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n    this._commentManager = commentManager || null;\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"showPopups\", {\n        value: async () => {\n          for (const show of this.popupShow) {\n            await show();\n          }\n        },\n      });\n      this.popupShow = [];\n    }\n  }\n\n  hasEditableAnnotations() {\n    return this.#editableAnnotations.size > 0;\n  }\n\n  async #appendElement(element, id, popupElements) {\n    const contentElement = element.firstChild || element;\n    const annotationId = (contentElement.id = `${AnnotationPrefix}${id}`);\n    const ariaAttributes =\n      await this.#structTreeLayer?.getAriaAttributes(annotationId);\n    if (ariaAttributes) {\n      for (const [key, value] of ariaAttributes) {\n        contentElement.setAttribute(key, value);\n      }\n    }\n\n    if (popupElements) {\n      // Set the popup just after the first element associated with the popup.\n      popupElements.at(-1).container.after(element);\n    } else {\n      this.div.append(element);\n      this.#accessibilityManager?.moveElementInDOM(\n        this.div,\n        element,\n        contentElement,\n        /* isRemovable = */ false\n      );\n    }\n  }\n\n  /**\n   * Render a new annotation layer with all annotation elements.\n   *\n   * @param {AnnotationLayerParameters} params\n   * @memberof AnnotationLayer\n   */\n  async render(params) {\n    const { annotations } = params;\n    const layer = this.div;\n    setLayerDimensions(layer, this.viewport);\n\n    const popupToElements = new Map();\n    const elementParams = {\n      data: null,\n      layer,\n      linkService: this.#linkService,\n      downloadManager: params.downloadManager,\n      imageResourcesPath: params.imageResourcesPath || \"\",\n      renderForms: params.renderForms !== false,\n      svgFactory: new DOMSVGFactory(),\n      annotationStorage: this.#annotationStorage,\n      enableComment: params.enableComment === true,\n      enableScripting: params.enableScripting === true,\n      hasJSActions: params.hasJSActions,\n      fieldObjects: params.fieldObjects,\n      parent: this,\n      elements: null,\n    };\n\n    for (const data of annotations) {\n      if (data.noHTML) {\n        continue;\n      }\n      const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n      if (!isPopupAnnotation) {\n        if (data.rect[2] === data.rect[0] || data.rect[3] === data.rect[1]) {\n          continue; // Ignore empty annotations.\n        }\n      } else {\n        const elements = popupToElements.get(data.id);\n        if (!elements) {\n          // Ignore popup annotations without a corresponding annotation.\n          continue;\n        }\n        elementParams.elements = elements;\n      }\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n\n      if (!element.isRenderable) {\n        continue;\n      }\n\n      if (!isPopupAnnotation && data.popupRef) {\n        const elements = popupToElements.get(data.popupRef);\n        if (!elements) {\n          popupToElements.set(data.popupRef, [element]);\n        } else {\n          elements.push(element);\n        }\n      }\n\n      const rendered = element.render();\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      await this.#appendElement(rendered, data.id, elementParams.elements);\n      element.extraPopupElement?.popup?.renderCommentButton();\n\n      if (element._isEditable) {\n        this.#editableAnnotations.set(element.data.id, element);\n        this._annotationEditorUIManager?.renderAnnotationElement(element);\n      }\n    }\n\n    this.#setAnnotationCanvasMap();\n  }\n\n  /**\n   * Add link annotations to the annotation layer.\n   *\n   * @param {Array<Object>} annotations\n   * @param {IPDFLinkService} linkService\n   * @memberof AnnotationLayer\n   */\n  async addLinkAnnotations(annotations) {\n    const elementParams = {\n      data: null,\n      layer: this.div,\n      linkService: this.#linkService,\n      svgFactory: new DOMSVGFactory(),\n      parent: this,\n    };\n    for (const data of annotations) {\n      data.borderStyle ||= AnnotationLayer._defaultBorderStyle;\n\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n\n      if (!element.isRenderable) {\n        continue;\n      }\n      const rendered = element.render();\n      await this.#appendElement(rendered, data.id, null);\n    }\n  }\n\n  /**\n   * Update the annotation elements on existing annotation layer.\n   *\n   * @param {AnnotationLayerParameters} viewport\n   * @memberof AnnotationLayer\n   */\n  update({ viewport }) {\n    const layer = this.div;\n    this.viewport = viewport;\n    setLayerDimensions(layer, { rotation: viewport.rotation });\n\n    this.#setAnnotationCanvasMap();\n    layer.hidden = false;\n  }\n\n  #setAnnotationCanvasMap() {\n    if (!this.#annotationCanvasMap) {\n      return;\n    }\n    const layer = this.div;\n    for (const [id, canvas] of this.#annotationCanvasMap) {\n      const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n      if (!element) {\n        continue;\n      }\n\n      canvas.className = \"annotationContent\";\n      const { firstChild } = element;\n      if (!firstChild) {\n        element.append(canvas);\n      } else if (firstChild.nodeName === \"CANVAS\") {\n        firstChild.replaceWith(canvas);\n      } else if (!firstChild.classList.contains(\"annotationContent\")) {\n        firstChild.before(canvas);\n      } else {\n        firstChild.after(canvas);\n      }\n\n      const editableAnnotation = this.#editableAnnotations.get(id);\n      if (!editableAnnotation) {\n        continue;\n      }\n      if (editableAnnotation._hasNoCanvas) {\n        // The canvas wasn't available when the annotation was created.\n        this._annotationEditorUIManager?.setMissingCanvas(\n          id,\n          element.id,\n          canvas\n        );\n        editableAnnotation._hasNoCanvas = false;\n      } else {\n        editableAnnotation.canvas = canvas;\n      }\n    }\n    this.#annotationCanvasMap.clear();\n  }\n\n  getEditableAnnotations() {\n    return Array.from(this.#editableAnnotations.values());\n  }\n\n  getEditableAnnotation(id) {\n    return this.#editableAnnotations.get(id);\n  }\n\n  addFakeAnnotation(editor) {\n    const { div } = this;\n    const { id, rotation } = editor;\n    const element = new EditorAnnotationElement({\n      data: {\n        id,\n        rect: editor.getPDFRect(),\n        rotation,\n      },\n      editor,\n      layer: div,\n      parent: this,\n      enableComment: !!this._commentManager,\n      linkService: this.#linkService,\n      annotationStorage: this.#annotationStorage,\n    });\n    const htmlElement = element.render();\n    div.append(htmlElement);\n    this.#accessibilityManager?.moveElementInDOM(\n      div,\n      htmlElement,\n      htmlElement,\n      /* isRemovable = */ false\n    );\n    element.createOrUpdatePopup();\n    return element;\n  }\n\n  /**\n   * @private\n   */\n  static get _defaultBorderStyle() {\n    return shadow(\n      this,\n      \"_defaultBorderStyle\",\n      Object.freeze({\n        width: 1,\n        rawWidth: 1,\n        style: AnnotationBorderStyleType.SOLID,\n        dashArray: [3],\n        horizontalCornerRadius: 0,\n        verticalCornerRadius: 0,\n      })\n    );\n  }\n}\n\nexport {\n  AnnotationLayer,\n  FreeTextAnnotationElement,\n  HighlightAnnotationElement,\n  InkAnnotationElement,\n  StampAnnotationElement,\n};\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  assert,\n  LINE_FACTOR,\n  shadow,\n  Util,\n} from \"../../shared/util.js\";\nimport { AnnotationEditorUIManager, KeyboardManager } from \"./tools.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { BasicColorPicker } from \"./color_picker.js\";\nimport { FreeTextAnnotationElement } from \"../annotation_layer.js\";\n\nconst EOL_PATTERN = /\\r\\n?|\\n/g;\n\n/**\n * Basic text editor in order to create a FreeTex annotation.\n */\nclass FreeTextEditor extends AnnotationEditor {\n  #content = \"\";\n\n  #editorDivId = `${this.id}-editor`;\n\n  #editModeAC = null;\n\n  #fontSize;\n\n  _colorPicker = null;\n\n  static _freeTextDefaultContent = \"\";\n\n  static _internalPadding = 0;\n\n  static _defaultColor = null;\n\n  static _defaultFontSize = 10;\n\n  static get _keyboardManager() {\n    const proto = FreeTextEditor.prototype;\n\n    const arrowChecker = self => self.isEmpty();\n\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n    return shadow(\n      this,\n      \"_keyboardManager\",\n      new KeyboardManager([\n        [\n          // Commit the text in case the user use ctrl+s to save the document.\n          // The event must bubble in order to be caught by the viewer.\n          // See bug 1831574.\n          [\"ctrl+s\", \"mac+meta+s\", \"ctrl+p\", \"mac+meta+p\"],\n          proto.commitOrRemove,\n          { bubbles: true },\n        ],\n        [\n          [\"ctrl+Enter\", \"mac+meta+Enter\", \"Escape\", \"mac+Escape\"],\n          proto.commitOrRemove,\n        ],\n        [\n          [\"ArrowLeft\", \"mac+ArrowLeft\"],\n          proto._translateEmpty,\n          { args: [-small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n          proto._translateEmpty,\n          { args: [-big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowRight\", \"mac+ArrowRight\"],\n          proto._translateEmpty,\n          { args: [small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n          proto._translateEmpty,\n          { args: [big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowUp\", \"mac+ArrowUp\"],\n          proto._translateEmpty,\n          { args: [0, -small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n          proto._translateEmpty,\n          { args: [0, -big], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowDown\", \"mac+ArrowDown\"],\n          proto._translateEmpty,\n          { args: [0, small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n          proto._translateEmpty,\n          { args: [0, big], checker: arrowChecker },\n        ],\n      ])\n    );\n  }\n\n  static _type = \"freetext\";\n\n  static _editorType = AnnotationEditorType.FREETEXT;\n\n  constructor(params) {\n    super({ ...params, name: \"freeTextEditor\" });\n    this.color =\n      params.color ||\n      FreeTextEditor._defaultColor ||\n      AnnotationEditor._defaultLineColor;\n    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(\"pdfjs-editor-freetext-added-alert\");\n    }\n  }\n\n  /** @inheritdoc */\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    const style = getComputedStyle(document.documentElement);\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      const lineHeight = parseFloat(\n        style.getPropertyValue(\"--freetext-line-height\")\n      );\n      assert(\n        lineHeight === LINE_FACTOR,\n        \"Update the CSS variable to agree with the constant.\"\n      );\n    }\n\n    this._internalPadding = parseFloat(\n      style.getPropertyValue(\"--freetext-padding\")\n    );\n  }\n\n  /** @inheritdoc */\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        FreeTextEditor._defaultFontSize = value;\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        FreeTextEditor._defaultColor = value;\n        break;\n    }\n  }\n\n  /** @inheritdoc */\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        this.#updateFontSize(value);\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        this.#updateColor(value);\n        break;\n    }\n  }\n\n  /** @inheritdoc */\n  static get defaultPropertiesToUpdate() {\n    return [\n      [\n        AnnotationEditorParamsType.FREETEXT_SIZE,\n        FreeTextEditor._defaultFontSize,\n      ],\n      [\n        AnnotationEditorParamsType.FREETEXT_COLOR,\n        FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor,\n      ],\n    ];\n  }\n\n  /** @inheritdoc */\n  get propertiesToUpdate() {\n    return [\n      [AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize],\n      [AnnotationEditorParamsType.FREETEXT_COLOR, this.color],\n    ];\n  }\n\n  /** @inheritdoc */\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n\n  get colorType() {\n    return AnnotationEditorParamsType.FREETEXT_COLOR;\n  }\n\n  /**\n   * Update the font size and make this action as undoable.\n   * @param {number} fontSize\n   */\n  #updateFontSize(fontSize) {\n    const setFontsize = size => {\n      this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`;\n      this.translate(0, -(size - this.#fontSize) * this.parentScale);\n      this.#fontSize = size;\n      this.#setEditorDimensions();\n    };\n    const savedFontsize = this.#fontSize;\n    this.addCommands({\n      cmd: setFontsize.bind(this, fontSize),\n      undo: setFontsize.bind(this, savedFontsize),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_SIZE,\n      overwriteIfSameType: true,\n      keepUndo: true,\n    });\n  }\n\n  /** @inheritdoc */\n  onUpdatedColor() {\n    this.editorDiv.style.color = this.color;\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n\n  /**\n   * Update the color and make this action undoable.\n   * @param {string} color\n   */\n  #updateColor(color) {\n    const setColor = col => {\n      this.color = col;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true,\n    });\n  }\n\n  /**\n   * Helper to translate the editor with the keyboard when it's empty.\n   * @param {number} x in page units.\n   * @param {number} y in page units.\n   */\n  _translateEmpty(x, y) {\n    this._uiManager.translateSelectedEditors(x, y, /* noCommit = */ true);\n  }\n\n  /** @inheritdoc */\n  getInitialTranslation() {\n    // The start of the base line is where the user clicked.\n    const scale = this.parentScale;\n    return [\n      -FreeTextEditor._internalPadding * scale,\n      -(FreeTextEditor._internalPadding + this.#fontSize) * scale,\n    ];\n  }\n\n  /** @inheritdoc */\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n\n    if (!this.isAttachedToDOM) {\n      // At some point this editor was removed and we're rebuilting it,\n      // hence we must add it to its parent.\n      this.parent.add(this);\n    }\n  }\n\n  /** @inheritdoc */\n  enableEditMode() {\n    if (!super.enableEditMode()) {\n      return false;\n    }\n\n    this.overlayDiv.classList.remove(\"enabled\");\n    this.editorDiv.contentEditable = true;\n    this._isDraggable = false;\n    this.div.removeAttribute(\"aria-activedescendant\");\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        !this.#editModeAC,\n        \"No `this.#editModeAC` AbortController should exist.\"\n      );\n    }\n    this.#editModeAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#editModeAC);\n\n    this.editorDiv.addEventListener(\n      \"keydown\",\n      this.editorDivKeydown.bind(this),\n      { signal }\n    );\n    this.editorDiv.addEventListener(\"focus\", this.editorDivFocus.bind(this), {\n      signal,\n    });\n    this.editorDiv.addEventListener(\"blur\", this.editorDivBlur.bind(this), {\n      signal,\n    });\n    this.editorDiv.addEventListener(\"input\", this.editorDivInput.bind(this), {\n      signal,\n    });\n    this.editorDiv.addEventListener(\"paste\", this.editorDivPaste.bind(this), {\n      signal,\n    });\n\n    return true;\n  }\n\n  /** @inheritdoc */\n  disableEditMode() {\n    if (!super.disableEditMode()) {\n      return false;\n    }\n\n    this.overlayDiv.classList.add(\"enabled\");\n    this.editorDiv.contentEditable = false;\n    this.div.setAttribute(\"aria-activedescendant\", this.#editorDivId);\n    this._isDraggable = true;\n\n    this.#editModeAC?.abort();\n    this.#editModeAC = null;\n\n    // On Chrome, the focus is given to <body> when contentEditable is set to\n    // false, hence we focus the div.\n    this.div.focus({\n      preventScroll: true /* See issue #15744 */,\n    });\n\n    // In case the blur callback hasn't been called.\n    this.isEditing = false;\n    this.parent.div.classList.add(\"freetextEditing\");\n\n    return true;\n  }\n\n  /** @inheritdoc */\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    super.focusin(event);\n    if (event.target !== this.editorDiv) {\n      this.editorDiv.focus();\n    }\n  }\n\n  /** @inheritdoc */\n  onceAdded(focus) {\n    if (this.width) {\n      // The editor was created in using ctrl+c.\n      return;\n    }\n    this.enableEditMode();\n    if (focus) {\n      this.editorDiv.focus();\n    }\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    }\n    this._initialOptions = null;\n  }\n\n  /** @inheritdoc */\n  isEmpty() {\n    return !this.editorDiv || this.editorDiv.innerText.trim() === \"\";\n  }\n\n  /** @inheritdoc */\n  remove() {\n    this.isEditing = false;\n    if (this.parent) {\n      this.parent.setEditingState(true);\n      this.parent.div.classList.add(\"freetextEditing\");\n    }\n    super.remove();\n  }\n\n  /**\n   * Extract the text from this editor.\n   * @returns {string}\n   */\n  #extractText() {\n    // We don't use innerText because there are some bugs with line breaks.\n    const buffer = [];\n    this.editorDiv.normalize();\n    let prevChild = null;\n    for (const child of this.editorDiv.childNodes) {\n      if (prevChild?.nodeType === Node.TEXT_NODE && child.nodeName === \"BR\") {\n        // It can happen if the user uses shift+enter to add a new line.\n        // If we don't skip it, we'll end up with an extra line (one for the\n        // text and one for the br element).\n        continue;\n      }\n      buffer.push(FreeTextEditor.#getNodeContent(child));\n      prevChild = child;\n    }\n    return buffer.join(\"\\n\");\n  }\n\n  #setEditorDimensions() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n\n    let rect;\n    if (this.isAttachedToDOM) {\n      rect = this.div.getBoundingClientRect();\n    } else {\n      // This editor isn't on screen but we need to get its dimensions, so\n      // we just insert it in the DOM, get its bounding box and then remove it.\n      const { currentLayer, div } = this;\n      const savedDisplay = div.style.display;\n      const savedVisibility = div.classList.contains(\"hidden\");\n      div.classList.remove(\"hidden\");\n      div.style.display = \"hidden\";\n      currentLayer.div.append(this.div);\n      rect = div.getBoundingClientRect();\n      div.remove();\n      div.style.display = savedDisplay;\n      div.classList.toggle(\"hidden\", savedVisibility);\n    }\n\n    // The dimensions are relative to the rotation of the page, hence we need to\n    // take that into account (see issue #16636).\n    if (this.rotation % 180 === this.parentRotation % 180) {\n      this.width = rect.width / parentWidth;\n      this.height = rect.height / parentHeight;\n    } else {\n      this.width = rect.height / parentWidth;\n      this.height = rect.width / parentHeight;\n    }\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Commit the content we have in this editor.\n   * @returns {undefined}\n   */\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n\n    super.commit();\n    this.disableEditMode();\n    const savedText = this.#content;\n    const newText = (this.#content = this.#extractText().trimEnd());\n    if (savedText === newText) {\n      return;\n    }\n\n    const setText = text => {\n      this.#content = text;\n      if (!text) {\n        this.remove();\n        return;\n      }\n      this.#setContent();\n      this._uiManager.rebuild(this);\n      this.#setEditorDimensions();\n    };\n    this.addCommands({\n      cmd: () => {\n        setText(newText);\n      },\n      undo: () => {\n        setText(savedText);\n      },\n      mustExec: false,\n    });\n    this.#setEditorDimensions();\n  }\n\n  /** @inheritdoc */\n  shouldGetKeyboardEvents() {\n    return this.isInEditMode();\n  }\n\n  /** @inheritdoc */\n  enterInEditMode() {\n    this.enableEditMode();\n    this.editorDiv.focus();\n  }\n\n  /** @inheritdoc */\n  keydown(event) {\n    if (event.target === this.div && event.key === \"Enter\") {\n      this.enterInEditMode();\n      // Avoid to add an unwanted new line.\n      event.preventDefault();\n    }\n  }\n\n  editorDivKeydown(event) {\n    FreeTextEditor._keyboardManager.exec(this, event);\n  }\n\n  editorDivFocus(event) {\n    this.isEditing = true;\n  }\n\n  editorDivBlur(event) {\n    this.isEditing = false;\n  }\n\n  editorDivInput(event) {\n    this.parent.div.classList.toggle(\"freetextEditing\", this.isEmpty());\n  }\n\n  /** @inheritdoc */\n  disableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"comment\");\n    this.editorDiv.removeAttribute(\"aria-multiline\");\n  }\n\n  /** @inheritdoc */\n  enableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"textbox\");\n    this.editorDiv.setAttribute(\"aria-multiline\", true);\n  }\n\n  /** @inheritdoc */\n  get canChangeContent() {\n    return true;\n  }\n\n  /** @inheritdoc */\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n\n    let baseX, baseY;\n    if (this._isCopy || this.annotationElementId) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n\n    super.render();\n    this.editorDiv = document.createElement(\"div\");\n    this.editorDiv.className = \"internal\";\n\n    this.editorDiv.setAttribute(\"id\", this.#editorDivId);\n    this.editorDiv.setAttribute(\"data-l10n-id\", \"pdfjs-free-text2\");\n    this.editorDiv.setAttribute(\"data-l10n-attrs\", \"default-content\");\n    this.enableEditing();\n\n    this.editorDiv.contentEditable = true;\n\n    const { style } = this.editorDiv;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n\n    this.div.append(this.editorDiv);\n\n    this.overlayDiv = document.createElement(\"div\");\n    this.overlayDiv.classList.add(\"overlay\", \"enabled\");\n    this.div.append(this.overlayDiv);\n\n    if (this._isCopy || this.annotationElementId) {\n      // This editor was created in using copy (ctrl+c).\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      if (this.annotationElementId) {\n        // This stuff is hard to test: if something is changed here, please\n        // test with the following PDF file:\n        //  - freetexts.pdf\n        //  - rotated_freetexts.pdf\n        // Only small variations between the original annotation and its editor\n        // are allowed.\n\n        // position is the position of the first glyph in the annotation\n        // and it's relative to its container.\n        const { position } = this._initialData;\n        let [tx, ty] = this.getInitialTranslation();\n        [tx, ty] = this.pageTranslationToScreen(tx, ty);\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        const [pageX, pageY] = this.pageTranslation;\n        let posX, posY;\n        switch (this.rotation) {\n          case 0:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY + this.height - (position[1] - pageY) / pageHeight;\n            break;\n          case 90:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [ty, -tx];\n            break;\n          case 180:\n            posX = baseX - this.width + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [-tx, -ty];\n            break;\n          case 270:\n            posX =\n              baseX +\n              (position[0] - pageX - this.height * pageHeight) / pageWidth;\n            posY =\n              baseY +\n              (position[1] - pageY - this.width * pageWidth) / pageHeight;\n            [tx, ty] = [-ty, tx];\n            break;\n        }\n        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);\n      } else {\n        this._moveAfterPaste(baseX, baseY);\n      }\n\n      this.#setContent();\n      this._isDraggable = true;\n      this.editorDiv.contentEditable = false;\n    } else {\n      this._isDraggable = false;\n      this.editorDiv.contentEditable = true;\n    }\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      this.div.setAttribute(\"annotation-id\", this.annotationElementId);\n    }\n\n    return this.div;\n  }\n\n  static #getNodeContent(node) {\n    return (\n      node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText\n    ).replaceAll(EOL_PATTERN, \"\");\n  }\n\n  editorDivPaste(event) {\n    const clipboardData = event.clipboardData || window.clipboardData;\n    const { types } = clipboardData;\n    if (types.length === 1 && types[0] === \"text/plain\") {\n      return;\n    }\n\n    event.preventDefault();\n    const paste = FreeTextEditor.#deserializeContent(\n      clipboardData.getData(\"text\") || \"\"\n    ).replaceAll(EOL_PATTERN, \"\\n\");\n    if (!paste) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (!selection.rangeCount) {\n      return;\n    }\n    this.editorDiv.normalize();\n    selection.deleteFromDocument();\n    const range = selection.getRangeAt(0);\n    if (!paste.includes(\"\\n\")) {\n      range.insertNode(document.createTextNode(paste));\n      this.editorDiv.normalize();\n      selection.collapseToStart();\n      return;\n    }\n\n    // Collect the text before and after the caret.\n    const { startContainer, startOffset } = range;\n    const bufferBefore = [];\n    const bufferAfter = [];\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      const parent = startContainer.parentElement;\n      bufferAfter.push(\n        startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, \"\")\n      );\n      if (parent !== this.editorDiv) {\n        let buffer = bufferBefore;\n        for (const child of this.editorDiv.childNodes) {\n          if (child === parent) {\n            buffer = bufferAfter;\n            continue;\n          }\n          buffer.push(FreeTextEditor.#getNodeContent(child));\n        }\n      }\n      bufferBefore.push(\n        startContainer.nodeValue\n          .slice(0, startOffset)\n          .replaceAll(EOL_PATTERN, \"\")\n      );\n    } else if (startContainer === this.editorDiv) {\n      let buffer = bufferBefore;\n      let i = 0;\n      for (const child of this.editorDiv.childNodes) {\n        if (i++ === startOffset) {\n          buffer = bufferAfter;\n        }\n        buffer.push(FreeTextEditor.#getNodeContent(child));\n      }\n    }\n    this.#content = `${bufferBefore.join(\"\\n\")}${paste}${bufferAfter.join(\"\\n\")}`;\n    this.#setContent();\n\n    // Set the caret at the right position.\n    const newRange = new Range();\n    let beforeLength = Math.sumPrecise(bufferBefore.map(line => line.length));\n    for (const { firstChild } of this.editorDiv.childNodes) {\n      // Each child is either a div with a text node or a br element.\n      if (firstChild.nodeType === Node.TEXT_NODE) {\n        const length = firstChild.nodeValue.length;\n        if (beforeLength <= length) {\n          newRange.setStart(firstChild, beforeLength);\n          newRange.setEnd(firstChild, beforeLength);\n          break;\n        }\n        beforeLength -= length;\n      }\n    }\n    selection.removeAllRanges();\n    selection.addRange(newRange);\n  }\n\n  #setContent() {\n    this.editorDiv.replaceChildren();\n    if (!this.#content) {\n      return;\n    }\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(\n        line ? document.createTextNode(line) : document.createElement(\"br\")\n      );\n      this.editorDiv.append(div);\n    }\n  }\n\n  #serializeContent() {\n    return this.#content.replaceAll(\"\\xa0\", \" \");\n  }\n\n  static #deserializeContent(content) {\n    return content.replaceAll(\" \", \"\\xa0\");\n  }\n\n  /** @inheritdoc */\n  get contentDiv() {\n    return this.editorDiv;\n  }\n\n  /** @inheritdoc */\n  getPDFRect() {\n    const padding = FreeTextEditor._internalPadding * this.parentScale;\n    return this.getRect(padding, padding);\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof FreeTextAnnotationElement) {\n      const {\n        data: {\n          defaultAppearanceData: { fontSize, fontColor },\n          rect,\n          rotation,\n          id,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate,\n        },\n        textContent,\n        textPosition,\n        parent: {\n          page: { pageNumber },\n        },\n      } = data;\n      // textContent is supposed to be an array of strings containing each line\n      // of text. However, it can be null or empty.\n      if (!textContent || textContent.length === 0) {\n        // Empty annotation.\n        return null;\n      }\n      initialData = data = {\n        annotationType: AnnotationEditorType.FREETEXT,\n        color: Array.from(fontColor),\n        fontSize,\n        value: textContent.join(\"\\n\"),\n        position: textPosition,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        comment: contentsObj?.str || null,\n        richText,\n        creationDate,\n        modificationDate,\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#fontSize = data.fontSize;\n    editor.color = Util.makeHexColor(...data.color);\n    editor.#content = FreeTextEditor.#deserializeContent(data.value);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n\n    return editor;\n  }\n\n  /** @inheritdoc */\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n\n    const color = AnnotationEditor._colorManager.convert(\n      this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.color\n    );\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color,\n      fontSize: this.#fontSize,\n      value: this.#serializeContent(),\n    });\n    this.addComment(serialized);\n\n    if (isForCopying) {\n      // Don't add the id when copying because the pasted editor mustn't be\n      // linked to an existing annotation.\n      serialized.isCopy = true;\n      return serialized;\n    }\n\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n\n    serialized.id = this.annotationElementId;\n\n    return serialized;\n  }\n\n  #hasElementChanged(serialized) {\n    const { value, fontSize, color, pageIndex } = this._initialData;\n\n    return (\n      this.hasEditedComment ||\n      this._hasBeenMoved ||\n      serialized.value !== value ||\n      serialized.fontSize !== fontSize ||\n      serialized.color.some((c, i) => c !== color[i]) ||\n      serialized.pageIndex !== pageIndex\n    );\n  }\n\n  /** @inheritdoc */\n  renderAnnotationElement(annotation) {\n    const content = super.renderAnnotationElement(annotation);\n    if (!content) {\n      return null;\n    }\n    const { style } = content;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n\n    content.replaceChildren();\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(\n        line ? document.createTextNode(line) : document.createElement(\"br\")\n      );\n      content.append(div);\n    }\n\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup:\n        this._uiManager.hasCommentManager() || this.hasEditedComment\n          ? this.comment\n          : { text: this.#content },\n    });\n\n    return content;\n  }\n\n  resetAnnotationElement(annotation) {\n    super.resetAnnotationElement(annotation);\n    annotation.resetEdited();\n  }\n}\n\nexport { FreeTextEditor };\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../../../shared/util.js\";\n\nclass Outline {\n  static PRECISION = 1e-4;\n\n  /**\n   * @returns {string} The SVG path of the outline.\n   */\n  toSVGPath() {\n    unreachable(\"Abstract method `toSVGPath` must be implemented.\");\n  }\n\n  /**\n   * @type {Object|null} The bounding box of the outline.\n   */\n  // eslint-disable-next-line getter-return\n  get box() {\n    unreachable(\"Abstract getter `box` must be implemented.\");\n  }\n\n  serialize(_bbox, _rotation) {\n    unreachable(\"Abstract method `serialize` must be implemented.\");\n  }\n\n  static _rescale(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i] * sx;\n      dest[i + 1] = ty + src[i + 1] * sy;\n    }\n    return dest;\n  }\n\n  static _rescaleAndSwap(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i + 1] * sx;\n      dest[i + 1] = ty + src[i] * sy;\n    }\n    return dest;\n  }\n\n  static _translate(src, tx, ty, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i];\n      dest[i + 1] = ty + src[i + 1];\n    }\n    return dest;\n  }\n\n  static svgRound(x) {\n    // 0.1234 will be 1234 and this way we economize 2 bytes per number.\n    // Of course, it makes sense only when the viewBox is [0 0 10000 10000].\n    // And it helps to avoid bugs like:\n    //  https://bugzilla.mozilla.org/show_bug.cgi?id=1929340\n    return Math.round(x * 10000);\n  }\n\n  static _normalizePoint(x, y, parentWidth, parentHeight, rotation) {\n    switch (rotation) {\n      case 90:\n        return [1 - y / parentWidth, x / parentHeight];\n      case 180:\n        return [1 - x / parentWidth, 1 - y / parentHeight];\n      case 270:\n        return [y / parentWidth, 1 - x / parentHeight];\n      default:\n        return [x / parentWidth, y / parentHeight];\n    }\n  }\n\n  static _normalizePagePoint(x, y, rotation) {\n    switch (rotation) {\n      case 90:\n        return [1 - y, x];\n      case 180:\n        return [1 - x, 1 - y];\n      case 270:\n        return [y, 1 - x];\n      default:\n        return [x, y];\n    }\n  }\n\n  static createBezierPoints(x1, y1, x2, y2, x3, y3) {\n    return [\n      (x1 + 5 * x2) / 6,\n      (y1 + 5 * y2) / 6,\n      (5 * x2 + x3) / 6,\n      (5 * y2 + y3) / 6,\n      (x2 + x3) / 2,\n      (y2 + y3) / 2,\n    ];\n  }\n}\n\nexport { Outline };\n", "/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Outline } from \"./outline.js\";\nimport { Util } from \"../../../shared/util.js\";\n\nclass FreeDrawOutliner {\n  #box;\n\n  #bottom = [];\n\n  #innerMargin;\n\n  #isLTR;\n\n  #top = [];\n\n  // The first 6 elements are the last 3 points of the top part of the outline.\n  // The next 6 elements are the last 3 points of the line.\n  // The next 6 elements are the last 3 points of the bottom part of the\n  // outline.\n  // We track the last 3 points in order to be able to:\n  //  - compute the normal of the line,\n  //  - compute the control points of the quadratic Bézier curve.\n  #last = new Float32Array(18);\n\n  #lastX;\n\n  #lastY;\n\n  #min;\n\n  #min_dist;\n\n  #scaleFactor;\n\n  #thickness;\n\n  #points = [];\n\n  static #MIN_DIST = 8;\n\n  static #MIN_DIFF = 2;\n\n  static #MIN = FreeDrawOutliner.#MIN_DIST + FreeDrawOutliner.#MIN_DIFF;\n\n  constructor({ x, y }, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    this.#box = box;\n    this.#thickness = thickness * scaleFactor;\n    this.#isLTR = isLTR;\n    this.#last.set([NaN, NaN, NaN, NaN, x, y], 6);\n    this.#innerMargin = innerMargin;\n    this.#min_dist = FreeDrawOutliner.#MIN_DIST * scaleFactor;\n    this.#min = FreeDrawOutliner.#MIN * scaleFactor;\n    this.#scaleFactor = scaleFactor;\n    this.#points.push(x, y);\n  }\n\n  isEmpty() {\n    // When we add a second point then this.#last.slice(6) will be something\n    // like [NaN, NaN, firstX, firstY, secondX, secondY,...] so having a NaN\n    // at index 8 means that we've only one point.\n    return isNaN(this.#last[8]);\n  }\n\n  #getLastCoords() {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [x, y, width, height] = this.#box;\n\n    return [\n      (this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width,\n      (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height,\n      (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width,\n      (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height,\n    ];\n  }\n\n  add({ x, y }) {\n    this.#lastX = x;\n    this.#lastY = y;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    let [x1, y1, x2, y2] = this.#last.subarray(8, 12);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(diffX, diffY);\n    if (d < this.#min) {\n      // The idea is to avoid garbage points around the last point.\n      // When the points are too close, it just leads to bad normal vectors and\n      // control points.\n      return false;\n    }\n    const diffD = d - this.#min_dist;\n    const K = diffD / d;\n    const shiftX = K * diffX;\n    const shiftY = K * diffY;\n\n    // We update the last 3 points of the line.\n    let x0 = x1;\n    let y0 = y1;\n    x1 = x2;\n    y1 = y2;\n    x2 += shiftX;\n    y2 += shiftY;\n\n    // We keep track of the points in order to be able to compute the focus\n    // outline.\n    this.#points?.push(x, y);\n\n    // Create the normal unit vector.\n    // |(shiftX, shiftY)| = |K| * |(diffX, diffY)| = |K| * d = diffD.\n    const nX = -shiftY / diffD;\n    const nY = shiftX / diffD;\n    const thX = nX * this.#thickness;\n    const thY = nY * this.#thickness;\n    this.#last.set(this.#last.subarray(2, 8), 0);\n    this.#last.set([x2 + thX, y2 + thY], 4);\n    this.#last.set(this.#last.subarray(14, 18), 12);\n    this.#last.set([x2 - thX, y2 - thY], 16);\n\n    if (isNaN(this.#last[6])) {\n      if (this.#top.length === 0) {\n        this.#last.set([x1 + thX, y1 + thY], 2);\n        this.#top.push(\n          NaN,\n          NaN,\n          NaN,\n          NaN,\n          (x1 + thX - layerX) / layerWidth,\n          (y1 + thY - layerY) / layerHeight\n        );\n        this.#last.set([x1 - thX, y1 - thY], 14);\n        this.#bottom.push(\n          NaN,\n          NaN,\n          NaN,\n          NaN,\n          (x1 - thX - layerX) / layerWidth,\n          (y1 - thY - layerY) / layerHeight\n        );\n      }\n      this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n      return !this.isEmpty();\n    }\n\n    this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n\n    const angle = Math.abs(\n      Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)\n    );\n    if (angle < Math.PI / 2) {\n      // In order to avoid some possible artifacts, we're going to use the a\n      // straight line instead of a quadratic Bézier curve.\n      [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n      this.#top.push(\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        ((x1 + x2) / 2 - layerX) / layerWidth,\n        ((y1 + y2) / 2 - layerY) / layerHeight\n      );\n      [x1, y1, x0, y0] = this.#last.subarray(14, 18);\n      this.#bottom.push(\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        ((x0 + x1) / 2 - layerX) / layerWidth,\n        ((y0 + y1) / 2 - layerY) / layerHeight\n      );\n      return true;\n    }\n\n    // Control points and the final point for the quadratic Bézier curve.\n    [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6);\n    this.#top.push(\n      ((x0 + 5 * x1) / 6 - layerX) / layerWidth,\n      ((y0 + 5 * y1) / 6 - layerY) / layerHeight,\n      ((5 * x1 + x2) / 6 - layerX) / layerWidth,\n      ((5 * y1 + y2) / 6 - layerY) / layerHeight,\n      ((x1 + x2) / 2 - layerX) / layerWidth,\n      ((y1 + y2) / 2 - layerY) / layerHeight\n    );\n    [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18);\n    this.#bottom.push(\n      ((x0 + 5 * x1) / 6 - layerX) / layerWidth,\n      ((y0 + 5 * y1) / 6 - layerY) / layerHeight,\n      ((5 * x1 + x2) / 6 - layerX) / layerWidth,\n      ((5 * y1 + y2) / 6 - layerY) / layerHeight,\n      ((x1 + x2) / 2 - layerX) / layerWidth,\n      ((y1 + y2) / 2 - layerY) / layerHeight\n    );\n    return true;\n  }\n\n  toSVGPath() {\n    if (this.isEmpty()) {\n      // We've only one point.\n      return \"\";\n    }\n    const top = this.#top;\n    const bottom = this.#bottom;\n\n    if (isNaN(this.#last[6]) && !this.isEmpty()) {\n      // We've only two points.\n      return this.#toSVGPathTwoPoints();\n    }\n\n    const buffer = [];\n    buffer.push(`M${top[4]} ${top[5]}`);\n    for (let i = 6; i < top.length; i += 6) {\n      if (isNaN(top[i])) {\n        buffer.push(`L${top[i + 4]} ${top[i + 5]}`);\n      } else {\n        buffer.push(\n          `C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${\n            top[i + 5]\n          }`\n        );\n      }\n    }\n\n    this.#toSVGPathEnd(buffer);\n\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      if (isNaN(bottom[i])) {\n        buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`);\n      } else {\n        buffer.push(\n          `C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${\n            bottom[i + 4]\n          } ${bottom[i + 5]}`\n        );\n      }\n    }\n\n    this.#toSVGPathStart(buffer);\n\n    return buffer.join(\" \");\n  }\n\n  #toSVGPathTwoPoints() {\n    const [x, y, width, height] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] =\n      this.#getLastCoords();\n\n    return `M${(this.#last[2] - x) / width} ${\n      (this.#last[3] - y) / height\n    } L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${\n      (this.#last[16] - x) / width\n    } ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${\n      (this.#last[15] - y) / height\n    } Z`;\n  }\n\n  #toSVGPathStart(buffer) {\n    const bottom = this.#bottom;\n    buffer.push(`L${bottom[4]} ${bottom[5]} Z`);\n  }\n\n  #toSVGPathEnd(buffer) {\n    const [x, y, width, height] = this.#box;\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] =\n      this.#getLastCoords();\n\n    buffer.push(\n      `L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${\n        (lastBottom[0] - x) / width\n      } ${(lastBottom[1] - y) / height}`\n    );\n  }\n\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeDrawOutline(\n      outline,\n      points,\n      box,\n      scaleFactor,\n      innerMargin,\n      isLTR\n    );\n  }\n\n  getOutlines() {\n    const top = this.#top;\n    const bottom = this.#bottom;\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n\n    const points = new Float32Array((this.#points?.length ?? 0) + 2);\n    for (let i = 0, ii = points.length - 2; i < ii; i += 2) {\n      points[i] = (this.#points[i] - layerX) / layerWidth;\n      points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;\n    }\n    points[points.length - 2] = (this.#lastX - layerX) / layerWidth;\n    points[points.length - 1] = (this.#lastY - layerY) / layerHeight;\n\n    if (isNaN(last[6]) && !this.isEmpty()) {\n      // We've only two points.\n      return this.#getOutlineTwoPoints(points);\n    }\n\n    const outline = new Float32Array(\n      this.#top.length + 24 + this.#bottom.length\n    );\n    let N = top.length;\n    for (let i = 0; i < N; i += 2) {\n      if (isNaN(top[i])) {\n        outline[i] = outline[i + 1] = NaN;\n        continue;\n      }\n      outline[i] = top[i];\n      outline[i + 1] = top[i + 1];\n    }\n\n    N = this.#getOutlineEnd(outline, N);\n\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      for (let j = 0; j < 6; j += 2) {\n        if (isNaN(bottom[i + j])) {\n          outline[N] = outline[N + 1] = NaN;\n          N += 2;\n          continue;\n        }\n        outline[N] = bottom[i + j];\n        outline[N + 1] = bottom[i + j + 1];\n        N += 2;\n      }\n    }\n\n    this.#getOutlineStart(outline, N);\n\n    return this.newFreeDrawOutline(\n      outline,\n      points,\n      this.#box,\n      this.#scaleFactor,\n      this.#innerMargin,\n      this.#isLTR\n    );\n  }\n\n  #getOutlineTwoPoints(points) {\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] =\n      this.#getLastCoords();\n    const outline = new Float32Array(36);\n    outline.set(\n      [\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (last[2] - layerX) / layerWidth,\n        (last[3] - layerY) / layerHeight,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (last[4] - layerX) / layerWidth,\n        (last[5] - layerY) / layerHeight,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        lastTopX,\n        lastTopY,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        lastBottomX,\n        lastBottomY,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (last[16] - layerX) / layerWidth,\n        (last[17] - layerY) / layerHeight,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (last[14] - layerX) / layerWidth,\n        (last[15] - layerY) / layerHeight,\n      ],\n      0\n    );\n    return this.newFreeDrawOutline(\n      outline,\n      points,\n      this.#box,\n      this.#scaleFactor,\n      this.#innerMargin,\n      this.#isLTR\n    );\n  }\n\n  #getOutlineStart(outline, pos) {\n    const bottom = this.#bottom;\n    outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos);\n    return (pos += 6);\n  }\n\n  #getOutlineEnd(outline, pos) {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] =\n      this.#getLastCoords();\n    outline.set(\n      [\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (lastTop[0] - layerX) / layerWidth,\n        (lastTop[1] - layerY) / layerHeight,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        lastTopX,\n        lastTopY,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        lastBottomX,\n        lastBottomY,\n        NaN,\n        NaN,\n        NaN,\n        NaN,\n        (lastBottom[0] - layerX) / layerWidth,\n        (lastBottom[1] - layerY) / layerHeight,\n      ],\n      pos\n    );\n    return (pos += 24);\n  }\n}\n\nclass FreeDrawOutline extends Outline {\n  #box;\n\n  #bbox = new Float32Array(4);\n\n  #innerMargin;\n\n  #isLTR;\n\n  #points;\n\n  #scaleFactor;\n\n  #outline;\n\n  constructor(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    super();\n    this.#outline = outline;\n    this.#points = points;\n    this.#box = box;\n    this.#scaleFactor = scaleFactor;\n    this.#innerMargin = innerMargin;\n    this.#isLTR = isLTR;\n    this.firstPoint = [NaN, NaN];\n    this.lastPoint = [NaN, NaN];\n    this.#computeMinMax(isLTR);\n\n    const [x, y, width, height] = this.#bbox;\n    for (let i = 0, ii = outline.length; i < ii; i += 2) {\n      outline[i] = (outline[i] - x) / width;\n      outline[i + 1] = (outline[i + 1] - y) / height;\n    }\n    for (let i = 0, ii = points.length; i < ii; i += 2) {\n      points[i] = (points[i] - x) / width;\n      points[i + 1] = (points[i + 1] - y) / height;\n    }\n  }\n\n  toSVGPath() {\n    const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`];\n    for (let i = 6, ii = this.#outline.length; i < ii; i += 6) {\n      if (isNaN(this.#outline[i])) {\n        buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n        continue;\n      }\n      buffer.push(\n        `C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${\n          this.#outline[i + 3]\n        } ${this.#outline[i + 4]} ${this.#outline[i + 5]}`\n      );\n    }\n    buffer.push(\"Z\");\n    return buffer.join(\" \");\n  }\n\n  serialize([blX, blY, trX, trY], rotation) {\n    const width = trX - blX;\n    const height = trY - blY;\n    let outline;\n    let points;\n    switch (rotation) {\n      case 0:\n        outline = Outline._rescale(this.#outline, blX, trY, width, -height);\n        points = Outline._rescale(this.#points, blX, trY, width, -height);\n        break;\n      case 90:\n        outline = Outline._rescaleAndSwap(\n          this.#outline,\n          blX,\n          blY,\n          width,\n          height\n        );\n        points = Outline._rescaleAndSwap(this.#points, blX, blY, width, height);\n        break;\n      case 180:\n        outline = Outline._rescale(this.#outline, trX, blY, -width, height);\n        points = Outline._rescale(this.#points, trX, blY, -width, height);\n        break;\n      case 270:\n        outline = Outline._rescaleAndSwap(\n          this.#outline,\n          trX,\n          trY,\n          -width,\n          -height\n        );\n        points = Outline._rescaleAndSwap(\n          this.#points,\n          trX,\n          trY,\n          -width,\n          -height\n        );\n        break;\n    }\n    return { outline: Array.from(outline), points: [Array.from(points)] };\n  }\n\n  #computeMinMax(isLTR) {\n    const outline = this.#outline;\n    let lastX = outline[4];\n    let lastY = outline[5];\n    const minMax = [lastX, lastY, lastX, lastY];\n    let firstPointX = lastX;\n    let firstPointY = lastY;\n    let lastPointX = lastX;\n    let lastPointY = lastY;\n    const ltrCallback = isLTR ? Math.max : Math.min;\n    const bezierBbox = new Float32Array(4);\n\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      const x = outline[i + 4],\n        y = outline[i + 5];\n\n      if (isNaN(outline[i])) {\n        Util.pointBoundingBox(x, y, minMax);\n\n        if (firstPointY > y) {\n          firstPointX = x;\n          firstPointY = y;\n        } else if (firstPointY === y) {\n          firstPointX = ltrCallback(firstPointX, x);\n        }\n        if (lastPointY < y) {\n          lastPointX = x;\n          lastPointY = y;\n        } else if (lastPointY === y) {\n          lastPointX = ltrCallback(lastPointX, x);\n        }\n      } else {\n        bezierBbox[0] = bezierBbox[1] = Infinity;\n        bezierBbox[2] = bezierBbox[3] = -Infinity;\n        Util.bezierBoundingBox(\n          lastX,\n          lastY,\n          ...outline.slice(i, i + 6),\n          bezierBbox\n        );\n\n        Util.rectBoundingBox(\n          bezierBbox[0],\n          bezierBbox[1],\n          bezierBbox[2],\n          bezierBbox[3],\n          minMax\n        );\n\n        if (firstPointY > bezierBbox[1]) {\n          firstPointX = bezierBbox[0];\n          firstPointY = bezierBbox[1];\n        } else if (firstPointY === bezierBbox[1]) {\n          firstPointX = ltrCallback(firstPointX, bezierBbox[0]);\n        }\n        if (lastPointY < bezierBbox[3]) {\n          lastPointX = bezierBbox[2];\n          lastPointY = bezierBbox[3];\n        } else if (lastPointY === bezierBbox[3]) {\n          lastPointX = ltrCallback(lastPointX, bezierBbox[2]);\n        }\n      }\n      lastX = x;\n      lastY = y;\n    }\n\n    const bbox = this.#bbox;\n    bbox[0] = minMax[0] - this.#innerMargin;\n    bbox[1] = minMax[1] - this.#innerMargin;\n    bbox[2] = minMax[2] - minMax[0] + 2 * this.#innerMargin;\n    bbox[3] = minMax[3] - minMax[1] + 2 * this.#innerMargin;\n    this.firstPoint = [firstPointX, firstPointY];\n    this.lastPoint = [lastPointX, lastPointY];\n  }\n\n  get box() {\n    return this.#bbox;\n  }\n\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeDrawOutliner(\n      point,\n      box,\n      scaleFactor,\n      thickness,\n      isLTR,\n      innerMargin\n    );\n  }\n\n  getNewOutline(thickness, innerMargin) {\n    // Build the outline of the highlight to use as the focus outline.\n    const [x, y, width, height] = this.#bbox;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const sx = width * layerWidth;\n    const sy = height * layerHeight;\n    const tx = x * layerWidth + layerX;\n    const ty = y * layerHeight + layerY;\n    const outliner = this.newOutliner(\n      {\n        x: this.#points[0] * sx + tx,\n        y: this.#points[1] * sy + ty,\n      },\n      this.#box,\n      this.#scaleFactor,\n      thickness,\n      this.#isLTR,\n      innerMargin ?? this.#innerMargin\n    );\n    for (let i = 2; i < this.#points.length; i += 2) {\n      outliner.add({\n        x: this.#points[i] * sx + tx,\n        y: this.#points[i + 1] * sy + ty,\n      });\n    }\n    return outliner.getOutlines();\n  }\n}\n\nexport { FreeDrawOutline, FreeDrawOutliner };\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FreeDrawOutline, FreeDrawOutliner } from \"./freedraw.js\";\nimport { Outline } from \"./outline.js\";\nimport { Util } from \"../../../shared/util.js\";\n\nclass HighlightOutliner {\n  #box;\n\n  #firstPoint;\n\n  #lastPoint;\n\n  #verticalEdges = [];\n\n  #intervals = [];\n\n  /**\n   * Construct an outliner.\n   * @param {Array<Object>} boxes - An array of axis-aligned rectangles.\n   * @param {number} borderWidth - The width of the border of the boxes, it\n   *   allows to make the boxes bigger (or smaller).\n   * @param {number} innerMargin - The margin between the boxes and the\n   *   outlines. It's important to not have a null innerMargin when we want to\n   *   draw the outline else the stroked outline could be clipped because of its\n   *   width.\n   * @param {boolean} isLTR - true if we're in LTR mode. It's used to determine\n   *   the last point of the boxes.\n   */\n  constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) {\n    const minMax = [Infinity, Infinity, -Infinity, -Infinity];\n\n    // We round the coordinates to slightly reduce the number of edges in the\n    // final outlines.\n    const NUMBER_OF_DIGITS = 4;\n    const EPSILON = 10 ** -NUMBER_OF_DIGITS;\n\n    // The coordinates of the boxes are in the page coordinate system.\n    for (const { x, y, width, height } of boxes) {\n      const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON;\n      const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON;\n      const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON;\n      const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON;\n      const left = [x1, y1, y2, true];\n      const right = [x2, y1, y2, false];\n      this.#verticalEdges.push(left, right);\n\n      Util.rectBoundingBox(x1, y1, x2, y2, minMax);\n    }\n\n    const bboxWidth = minMax[2] - minMax[0] + 2 * innerMargin;\n    const bboxHeight = minMax[3] - minMax[1] + 2 * innerMargin;\n    const shiftedMinX = minMax[0] - innerMargin;\n    const shiftedMinY = minMax[1] - innerMargin;\n    let firstPointX = isLTR ? -Infinity : Infinity;\n    let firstPointY = Infinity;\n    const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2);\n    const lastPoint = [lastEdge[0], lastEdge[2]];\n\n    // Convert the coordinates of the edges into box coordinates.\n    for (const edge of this.#verticalEdges) {\n      const [x, y1, y2, left] = edge;\n      if (!left && isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.max(firstPointX, x);\n        }\n      } else if (left && !isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.min(firstPointX, x);\n        }\n      }\n\n      edge[0] = (x - shiftedMinX) / bboxWidth;\n      edge[1] = (y1 - shiftedMinY) / bboxHeight;\n      edge[2] = (y2 - shiftedMinY) / bboxHeight;\n    }\n\n    this.#box = new Float32Array([\n      shiftedMinX,\n      shiftedMinY,\n      bboxWidth,\n      bboxHeight,\n    ]);\n    this.#firstPoint = [firstPointX, firstPointY];\n    this.#lastPoint = lastPoint;\n  }\n\n  getOutlines() {\n    // We begin to sort lexicographically the vertical edges by their abscissa,\n    // and then by their ordinate.\n    this.#verticalEdges.sort(\n      (a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]\n    );\n\n    // We're now using a sweep line algorithm to find the outlines.\n    // We start with the leftmost vertical edge, and we're going to iterate\n    // over all the vertical edges from left to right.\n    // Each time we encounter a left edge, we're going to insert the interval\n    // [y1, y2] in the set of intervals.\n    // This set of intervals is used to break the vertical edges into chunks:\n    // we only take the part of the vertical edge that isn't in the union of\n    // the intervals.\n    const outlineVerticalEdges = [];\n    for (const edge of this.#verticalEdges) {\n      if (edge[3]) {\n        // Left edge.\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n        this.#insert(edge);\n      } else {\n        // Right edge.\n        this.#remove(edge);\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n      }\n    }\n    return this.#getOutlines(outlineVerticalEdges);\n  }\n\n  #getOutlines(outlineVerticalEdges) {\n    const edges = [];\n    const allEdges = new Set();\n\n    for (const edge of outlineVerticalEdges) {\n      const [x, y1, y2] = edge;\n      edges.push([x, y1, edge], [x, y2, edge]);\n    }\n\n    // We sort lexicographically the vertices of each edge by their ordinate and\n    // by their abscissa.\n    // Every pair (v_2i, v_{2i + 1}) of vertices defines a horizontal edge.\n    // So for every vertical edge, we're going to add the two vertical edges\n    // which are connected to it through a horizontal edge.\n    edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n    for (let i = 0, ii = edges.length; i < ii; i += 2) {\n      const edge1 = edges[i][2];\n      const edge2 = edges[i + 1][2];\n      edge1.push(edge2);\n      edge2.push(edge1);\n      allEdges.add(edge1);\n      allEdges.add(edge2);\n    }\n    const outlines = [];\n    let outline;\n\n    while (allEdges.size > 0) {\n      const edge = allEdges.values().next().value;\n      let [x, y1, y2, edge1, edge2] = edge;\n      allEdges.delete(edge);\n      let lastPointX = x;\n      let lastPointY = y1;\n\n      outline = [x, y2];\n      outlines.push(outline);\n\n      while (true) {\n        let e;\n        if (allEdges.has(edge1)) {\n          e = edge1;\n        } else if (allEdges.has(edge2)) {\n          e = edge2;\n        } else {\n          break;\n        }\n\n        allEdges.delete(e);\n        [x, y1, y2, edge1, edge2] = e;\n\n        if (lastPointX !== x) {\n          outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2);\n          lastPointX = x;\n        }\n        lastPointY = lastPointY === y1 ? y2 : y1;\n      }\n      outline.push(lastPointX, lastPointY);\n    }\n    return new HighlightOutline(\n      outlines,\n      this.#box,\n      this.#firstPoint,\n      this.#lastPoint\n    );\n  }\n\n  #binarySearch(y) {\n    const array = this.#intervals;\n    let start = 0;\n    let end = array.length - 1;\n\n    while (start <= end) {\n      const middle = (start + end) >> 1;\n      const y1 = array[middle][0];\n      if (y1 === y) {\n        return middle;\n      }\n      if (y1 < y) {\n        start = middle + 1;\n      } else {\n        end = middle - 1;\n      }\n    }\n    return end + 1;\n  }\n\n  #insert([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    this.#intervals.splice(index, 0, [y1, y2]);\n  }\n\n  #remove([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    for (let i = index; i < this.#intervals.length; i++) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n    for (let i = index - 1; i >= 0; i--) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n  }\n\n  #breakEdge(edge) {\n    const [x, y1, y2] = edge;\n    const results = [[x, y1, y2]];\n    const index = this.#binarySearch(y2);\n    for (let i = 0; i < index; i++) {\n      const [start, end] = this.#intervals[i];\n      for (let j = 0, jj = results.length; j < jj; j++) {\n        const [, y3, y4] = results[j];\n        if (end <= y3 || y4 <= start) {\n          // There is no intersection between the interval and the edge, hence\n          // we keep it as is.\n          continue;\n        }\n        if (y3 >= start) {\n          if (y4 > end) {\n            results[j][1] = end;\n          } else {\n            if (jj === 1) {\n              return [];\n            }\n            // The edge is included in the interval, hence we remove it.\n            results.splice(j, 1);\n            j--;\n            jj--;\n          }\n          continue;\n        }\n        results[j][2] = start;\n        if (y4 > end) {\n          results.push([x, end, y4]);\n        }\n      }\n    }\n    return results;\n  }\n}\n\nclass HighlightOutline extends Outline {\n  #box;\n\n  #outlines;\n\n  constructor(outlines, box, firstPoint, lastPoint) {\n    super();\n    this.#outlines = outlines;\n    this.#box = box;\n    this.firstPoint = firstPoint;\n    this.lastPoint = lastPoint;\n  }\n\n  toSVGPath() {\n    const buffer = [];\n    for (const polygon of this.#outlines) {\n      let [prevX, prevY] = polygon;\n      buffer.push(`M${prevX} ${prevY}`);\n      for (let i = 2; i < polygon.length; i += 2) {\n        const x = polygon[i];\n        const y = polygon[i + 1];\n        if (x === prevX) {\n          buffer.push(`V${y}`);\n          prevY = y;\n        } else if (y === prevY) {\n          buffer.push(`H${x}`);\n          prevX = x;\n        }\n      }\n      buffer.push(\"Z\");\n    }\n    return buffer.join(\" \");\n  }\n\n  /**\n   * Serialize the outlines into the PDF page coordinate system.\n   * @param {Array<number>} _bbox - the bounding box of the annotation.\n   * @param {number} _rotation - the rotation of the annotation.\n   * @returns {Array<Array<number>>}\n   */\n  serialize([blX, blY, trX, trY], _rotation) {\n    const outlines = [];\n    const width = trX - blX;\n    const height = trY - blY;\n    for (const outline of this.#outlines) {\n      const points = new Array(outline.length);\n      for (let i = 0; i < outline.length; i += 2) {\n        points[i] = blX + outline[i] * width;\n        points[i + 1] = trY - outline[i + 1] * height;\n      }\n      outlines.push(points);\n    }\n    return outlines;\n  }\n\n  get box() {\n    return this.#box;\n  }\n\n  get classNamesForOutlining() {\n    return [\"highlightOutline\"];\n  }\n}\n\nclass FreeHighlightOutliner extends FreeDrawOutliner {\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeHighlightOutline(\n      outline,\n      points,\n      box,\n      scaleFactor,\n      innerMargin,\n      isLTR\n    );\n  }\n}\n\nclass FreeHighlightOutline extends FreeDrawOutline {\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeHighlightOutliner(\n      point,\n      box,\n      scaleFactor,\n      thickness,\n      isLTR,\n      innerMargin\n    );\n  }\n}\n\nexport { FreeHighlightOutliner, HighlightOutliner };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  shadow,\n  Util,\n} from \"../../shared/util.js\";\nimport { bindEvents, KeyboardManager } from \"./tools.js\";\nimport {\n  FreeHighlightOutliner,\n  HighlightOutliner,\n} from \"./drawers/highlight.js\";\nimport {\n  HighlightAnnotationElement,\n  InkAnnotationElement,\n} from \"../annotation_layer.js\";\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { ColorPicker } from \"./color_picker.js\";\n\n/**\n * Basic draw editor in order to generate an Highlight annotation.\n */\nclass HighlightEditor extends AnnotationEditor {\n  #anchorNode = null;\n\n  #anchorOffset = 0;\n\n  #boxes;\n\n  #clipPathId = null;\n\n  #colorPicker = null;\n\n  #focusOutlines = null;\n\n  #focusNode = null;\n\n  #focusOffset = 0;\n\n  #highlightDiv = null;\n\n  #highlightOutlines = null;\n\n  #id = null;\n\n  #isFreeHighlight = false;\n\n  #firstPoint = null;\n\n  #lastPoint = null;\n\n  #outlineId = null;\n\n  #text = \"\";\n\n  #thickness;\n\n  #methodOfCreation = \"\";\n\n  static _defaultColor = null;\n\n  static _defaultOpacity = 1;\n\n  static _defaultThickness = 12;\n\n  static _type = \"highlight\";\n\n  static _editorType = AnnotationEditorType.HIGHLIGHT;\n\n  static _freeHighlightId = -1;\n\n  static _freeHighlight = null;\n\n  static _freeHighlightClipId = \"\";\n\n  static get _keyboardManager() {\n    const proto = HighlightEditor.prototype;\n    return shadow(\n      this,\n      \"_keyboardManager\",\n      new KeyboardManager([\n        [[\"ArrowLeft\", \"mac+ArrowLeft\"], proto._moveCaret, { args: [0] }],\n        [[\"ArrowRight\", \"mac+ArrowRight\"], proto._moveCaret, { args: [1] }],\n        [[\"ArrowUp\", \"mac+ArrowUp\"], proto._moveCaret, { args: [2] }],\n        [[\"ArrowDown\", \"mac+ArrowDown\"], proto._moveCaret, { args: [3] }],\n      ])\n    );\n  }\n\n  constructor(params) {\n    super({ ...params, name: \"highlightEditor\" });\n    this.color = params.color || HighlightEditor._defaultColor;\n    this.#thickness = params.thickness || HighlightEditor._defaultThickness;\n    this.opacity = params.opacity || HighlightEditor._defaultOpacity;\n    this.#boxes = params.boxes || null;\n    this.#methodOfCreation = params.methodOfCreation || \"\";\n    this.#text = params.text || \"\";\n    this._isDraggable = false;\n    this.defaultL10nId = \"pdfjs-editor-highlight-editor\";\n\n    if (params.highlightId > -1) {\n      this.#isFreeHighlight = true;\n      this.#createFreeOutlines(params);\n      this.#addToDrawLayer();\n    } else if (this.#boxes) {\n      this.#anchorNode = params.anchorNode;\n      this.#anchorOffset = params.anchorOffset;\n      this.#focusNode = params.focusNode;\n      this.#focusOffset = params.focusOffset;\n      this.#createOutlines();\n      this.#addToDrawLayer();\n      this.rotate(this.rotation);\n    }\n\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(\"pdfjs-editor-highlight-added-alert\");\n    }\n  }\n\n  /** @inheritdoc */\n  get telemetryInitialData() {\n    return {\n      action: \"added\",\n      type: this.#isFreeHighlight ? \"free_highlight\" : \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color),\n      thickness: this.#thickness,\n      methodOfCreation: this.#methodOfCreation,\n    };\n  }\n\n  /** @inheritdoc */\n  get telemetryFinalData() {\n    return {\n      type: \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color),\n    };\n  }\n\n  static computeTelemetryFinalData(data) {\n    // We want to know how many colors have been used.\n    return { numberOfColors: data.get(\"color\").size };\n  }\n\n  #createOutlines() {\n    const outliner = new HighlightOutliner(\n      this.#boxes,\n      /* borderWidth = */ 0.001\n    );\n    this.#highlightOutlines = outliner.getOutlines();\n    [this.x, this.y, this.width, this.height] = this.#highlightOutlines.box;\n\n    const outlinerForOutline = new HighlightOutliner(\n      this.#boxes,\n      /* borderWidth = */ 0.0025,\n      /* innerMargin = */ 0.001,\n      this._uiManager.direction === \"ltr\"\n    );\n    this.#focusOutlines = outlinerForOutline.getOutlines();\n\n    const { firstPoint } = this.#highlightOutlines;\n    this.#firstPoint = [\n      (firstPoint[0] - this.x) / this.width,\n      (firstPoint[1] - this.y) / this.height,\n    ];\n    // The last point is in the pages coordinate system.\n    const { lastPoint } = this.#focusOutlines;\n    this.#lastPoint = [\n      (lastPoint[0] - this.x) / this.width,\n      (lastPoint[1] - this.y) / this.height,\n    ];\n  }\n\n  #createFreeOutlines({ highlightOutlines, highlightId, clipPathId }) {\n    this.#highlightOutlines = highlightOutlines;\n    const extraThickness = 1.5;\n    this.#focusOutlines = highlightOutlines.getNewOutline(\n      /* Slightly bigger than the highlight in order to have a little\n         space between the highlight and the outline. */\n      this.#thickness / 2 + extraThickness,\n      /* innerMargin = */ 0.0025\n    );\n\n    if (highlightId >= 0) {\n      this.#id = highlightId;\n      this.#clipPathId = clipPathId;\n      // We need to redraw the highlight because we change the coordinates to be\n      // in the box coordinate system.\n      this.parent.drawLayer.finalizeDraw(highlightId, {\n        bbox: highlightOutlines.box,\n        path: {\n          d: highlightOutlines.toSVGPath(),\n        },\n      });\n      this.#outlineId = this.parent.drawLayer.drawOutline(\n        {\n          rootClass: {\n            highlightOutline: true,\n            free: true,\n          },\n          bbox: this.#focusOutlines.box,\n          path: {\n            d: this.#focusOutlines.toSVGPath(),\n          },\n        },\n        /* mustRemoveSelfIntersections = */ true\n      );\n    } else if (this.parent) {\n      const angle = this.parent.viewport.rotation;\n      this.parent.drawLayer.updateProperties(this.#id, {\n        bbox: HighlightEditor.#rotateBbox(\n          this.#highlightOutlines.box,\n          (angle - this.rotation + 360) % 360\n        ),\n        path: {\n          d: highlightOutlines.toSVGPath(),\n        },\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n        path: {\n          d: this.#focusOutlines.toSVGPath(),\n        },\n      });\n    }\n    const [x, y, width, height] = highlightOutlines.box;\n    switch (this.rotation) {\n      case 0:\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 90: {\n        const [pageWidth, pageHeight] = this.parentDimensions;\n        this.x = y;\n        this.y = 1 - x;\n        this.width = (width * pageHeight) / pageWidth;\n        this.height = (height * pageWidth) / pageHeight;\n        break;\n      }\n      case 180:\n        this.x = 1 - x;\n        this.y = 1 - y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 270: {\n        const [pageWidth, pageHeight] = this.parentDimensions;\n        this.x = 1 - y;\n        this.y = x;\n        this.width = (width * pageHeight) / pageWidth;\n        this.height = (height * pageWidth) / pageHeight;\n        break;\n      }\n    }\n\n    const { firstPoint } = highlightOutlines;\n    this.#firstPoint = [\n      (firstPoint[0] - x) / width,\n      (firstPoint[1] - y) / height,\n    ];\n    const { lastPoint } = this.#focusOutlines;\n    this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height];\n  }\n\n  /** @inheritdoc */\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    HighlightEditor._defaultColor ||=\n      uiManager.highlightColors?.values().next().value || \"#fff066\";\n  }\n\n  /** @inheritdoc */\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        HighlightEditor._defaultColor = value;\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        HighlightEditor._defaultThickness = value;\n        break;\n    }\n  }\n\n  /** @inheritdoc */\n  translateInPage(x, y) {}\n\n  /** @inheritdoc */\n  get toolbarPosition() {\n    return this.#lastPoint;\n  }\n\n  /** @inheritdoc */\n  get commentButtonPosition() {\n    return this.#firstPoint;\n  }\n\n  /** @inheritdoc */\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        this.#updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        this.#updateThickness(value);\n        break;\n    }\n  }\n\n  static get defaultPropertiesToUpdate() {\n    return [\n      [\n        AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n        HighlightEditor._defaultColor,\n      ],\n      [\n        AnnotationEditorParamsType.HIGHLIGHT_THICKNESS,\n        HighlightEditor._defaultThickness,\n      ],\n    ];\n  }\n\n  /** @inheritdoc */\n  get propertiesToUpdate() {\n    return [\n      [\n        AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n        this.color || HighlightEditor._defaultColor,\n      ],\n      [\n        AnnotationEditorParamsType.HIGHLIGHT_THICKNESS,\n        this.#thickness || HighlightEditor._defaultThickness,\n      ],\n      [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight],\n    ];\n  }\n\n  /** @inheritdoc */\n  onUpdatedColor() {\n    this.parent?.drawLayer.updateProperties(this.#id, {\n      root: {\n        fill: this.color,\n        \"fill-opacity\": this.opacity,\n      },\n    });\n    this.#colorPicker?.updateColor(this.color);\n    super.onUpdatedColor();\n  }\n\n  /**\n   * Update the color and make this action undoable.\n   * @param {string} color\n   */\n  #updateColor(color) {\n    const setColorAndOpacity = (col, opa) => {\n      this.color = col;\n      this.opacity = opa;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    const savedOpacity = this.opacity;\n    this.addCommands({\n      cmd: setColorAndOpacity.bind(\n        this,\n        color,\n        HighlightEditor._defaultOpacity\n      ),\n      undo: setColorAndOpacity.bind(this, savedColor, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true,\n    });\n\n    this._reportTelemetry(\n      {\n        action: \"color_changed\",\n        color: this._uiManager.getNonHCMColorName(color),\n      },\n      /* mustWait = */ true\n    );\n  }\n\n  /**\n   * Update the thickness and make this action undoable.\n   * @param {number} thickness\n   */\n  #updateThickness(thickness) {\n    const savedThickness = this.#thickness;\n    const setThickness = th => {\n      this.#thickness = th;\n      this.#changeThickness(th);\n    };\n    this.addCommands({\n      cmd: setThickness.bind(this, thickness),\n      undo: setThickness.bind(this, savedThickness),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_THICKNESS,\n      overwriteIfSameType: true,\n      keepUndo: true,\n    });\n    this._reportTelemetry(\n      { action: \"thickness_changed\", thickness },\n      /* mustWait = */ true\n    );\n  }\n\n  /** @inheritdoc */\n  get toolbarButtons() {\n    if (this._uiManager.highlightColors) {\n      const colorPicker = (this.#colorPicker = new ColorPicker({\n        editor: this,\n      }));\n      return [[\"colorPicker\", colorPicker]];\n    }\n    return super.toolbarButtons;\n  }\n\n  /** @inheritdoc */\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n\n  /** @inheritdoc */\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n\n  /** @inheritdoc */\n  fixAndSetPosition() {\n    return super.fixAndSetPosition(this.#getRotation());\n  }\n\n  /** @inheritdoc */\n  getBaseTranslation() {\n    // The editor itself doesn't have any CSS border (we're drawing one\n    // ourselves in using SVG).\n    return [0, 0];\n  }\n\n  /** @inheritdoc */\n  getRect(tx, ty) {\n    return super.getRect(tx, ty, this.#getRotation());\n  }\n\n  /** @inheritdoc */\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    if (focus) {\n      this.div.focus();\n    }\n  }\n\n  /** @inheritdoc */\n  remove() {\n    this.#cleanDrawLayer();\n    this._reportTelemetry({\n      action: \"deleted\",\n    });\n    super.remove();\n  }\n\n  /** @inheritdoc */\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n\n    this.#addToDrawLayer();\n\n    if (!this.isAttachedToDOM) {\n      // At some point this editor was removed and we're rebuilding it,\n      // hence we must add it to its parent.\n      this.parent.add(this);\n    }\n  }\n\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this.#addToDrawLayer(parent);\n      // If mustBeSelected is true it means that this editor was selected\n      // when its parent has been destroyed, hence we must select it again.\n      mustBeSelected =\n        !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    this.show(this._isVisible);\n    if (mustBeSelected) {\n      // We select it after the parent has been set.\n      this.select();\n    }\n  }\n\n  #changeThickness(thickness) {\n    if (!this.#isFreeHighlight) {\n      return;\n    }\n    this.#createFreeOutlines({\n      highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2),\n    });\n    this.fixAndSetPosition();\n    this.setDims(this.width, this.height);\n  }\n\n  #cleanDrawLayer() {\n    if (this.#id === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this.#id);\n    this.#id = null;\n    this.parent.drawLayer.remove(this.#outlineId);\n    this.#outlineId = null;\n  }\n\n  #addToDrawLayer(parent = this.parent) {\n    if (this.#id !== null) {\n      return;\n    }\n    ({ id: this.#id, clipPathId: this.#clipPathId } = parent.drawLayer.draw(\n      {\n        bbox: this.#highlightOutlines.box,\n        root: {\n          viewBox: \"0 0 1 1\",\n          fill: this.color,\n          \"fill-opacity\": this.opacity,\n        },\n        rootClass: {\n          highlight: true,\n          free: this.#isFreeHighlight,\n        },\n        path: {\n          d: this.#highlightOutlines.toSVGPath(),\n        },\n      },\n      /* isPathUpdatable = */ false,\n      /* hasClip = */ true\n    ));\n    this.#outlineId = parent.drawLayer.drawOutline(\n      {\n        rootClass: {\n          highlightOutline: true,\n          free: this.#isFreeHighlight,\n        },\n        bbox: this.#focusOutlines.box,\n        path: {\n          d: this.#focusOutlines.toSVGPath(),\n        },\n      },\n      /* mustRemoveSelfIntersections = */ this.#isFreeHighlight\n    );\n\n    if (this.#highlightDiv) {\n      this.#highlightDiv.style.clipPath = this.#clipPathId;\n    }\n  }\n\n  static #rotateBbox([x, y, width, height], angle) {\n    switch (angle) {\n      case 90:\n        return [1 - y - height, x, height, width];\n      case 180:\n        return [1 - x - width, 1 - y - height, width, height];\n      case 270:\n        return [y, 1 - x - width, height, width];\n    }\n    return [x, y, width, height];\n  }\n\n  /** @inheritdoc */\n  rotate(angle) {\n    // We need to rotate the svgs because of the coordinates system.\n    const { drawLayer } = this.parent;\n    let box;\n    if (this.#isFreeHighlight) {\n      angle = (angle - this.rotation + 360) % 360;\n      box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle);\n    } else {\n      // An highlight annotation is always drawn horizontally.\n      box = HighlightEditor.#rotateBbox(\n        [this.x, this.y, this.width, this.height],\n        angle\n      );\n    }\n    drawLayer.updateProperties(this.#id, {\n      bbox: box,\n      root: {\n        \"data-main-rotation\": angle,\n      },\n    });\n    drawLayer.updateProperties(this.#outlineId, {\n      bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n      root: {\n        \"data-main-rotation\": angle,\n      },\n    });\n  }\n\n  /** @inheritdoc */\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n\n    const div = super.render();\n    if (this.#text) {\n      div.setAttribute(\"aria-label\", this.#text);\n      div.setAttribute(\"role\", \"mark\");\n    }\n    if (this.#isFreeHighlight) {\n      div.classList.add(\"free\");\n    } else {\n      this.div.addEventListener(\"keydown\", this.#keydown.bind(this), {\n        signal: this._uiManager._signal,\n      });\n    }\n    const highlightDiv = (this.#highlightDiv = document.createElement(\"div\"));\n    div.append(highlightDiv);\n    highlightDiv.setAttribute(\"aria-hidden\", \"true\");\n    highlightDiv.className = \"internal\";\n    highlightDiv.style.clipPath = this.#clipPathId;\n    this.setDims(this.width, this.height);\n\n    bindEvents(this, this.#highlightDiv, [\"pointerover\", \"pointerleave\"]);\n    this.enableEditing();\n\n    return div;\n  }\n\n  pointerover() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: true,\n        },\n      });\n    }\n  }\n\n  pointerleave() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: false,\n        },\n      });\n    }\n  }\n\n  #keydown(event) {\n    HighlightEditor._keyboardManager.exec(this, event);\n  }\n\n  _moveCaret(direction) {\n    this.parent.unselect(this);\n    switch (direction) {\n      case 0 /* left */:\n      case 2 /* up */:\n        this.#setCaret(/* start = */ true);\n        break;\n      case 1 /* right */:\n      case 3 /* down */:\n        this.#setCaret(/* start = */ false);\n        break;\n    }\n  }\n\n  #setCaret(start) {\n    if (!this.#anchorNode) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (start) {\n      selection.setPosition(this.#anchorNode, this.#anchorOffset);\n    } else {\n      selection.setPosition(this.#focusNode, this.#focusOffset);\n    }\n  }\n\n  /** @inheritdoc */\n  select() {\n    super.select();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        hovered: false,\n        selected: true,\n      },\n    });\n  }\n\n  /** @inheritdoc */\n  unselect() {\n    super.unselect();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        selected: false,\n      },\n    });\n    if (!this.#isFreeHighlight) {\n      this.#setCaret(/* start = */ false);\n    }\n  }\n\n  /** @inheritdoc */\n  get _mustFixPosition() {\n    return !this.#isFreeHighlight;\n  }\n\n  /** @inheritdoc */\n  show(visible = this._isVisible) {\n    super.show(visible);\n    if (this.parent) {\n      this.parent.drawLayer.updateProperties(this.#id, {\n        rootClass: {\n          hidden: !visible,\n        },\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hidden: !visible,\n        },\n      });\n    }\n  }\n\n  #getRotation() {\n    // Highlight annotations are always drawn horizontally but if\n    // a free highlight annotation can be rotated.\n    return this.#isFreeHighlight ? this.rotation : 0;\n  }\n\n  #serializeBoxes() {\n    if (this.#isFreeHighlight) {\n      return null;\n    }\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const boxes = this.#boxes;\n    const quadPoints = new Float32Array(boxes.length * 8);\n    let i = 0;\n    for (const { x, y, width, height } of boxes) {\n      const sx = x * pageWidth + pageX;\n      const sy = (1 - y) * pageHeight + pageY;\n      // Serializes the rectangle in the Adobe Acrobat format.\n      // The rectangle's coordinates (b = bottom, t = top, L = left, R = right)\n      // are ordered as follows: tL, tR, bL, bR (bL origin).\n      quadPoints[i] = quadPoints[i + 4] = sx;\n      quadPoints[i + 1] = quadPoints[i + 3] = sy;\n      quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth;\n      quadPoints[i + 5] = quadPoints[i + 7] = sy - height * pageHeight;\n      i += 8;\n    }\n    return quadPoints;\n  }\n\n  #serializeOutlines(rect) {\n    return this.#highlightOutlines.serialize(rect, this.#getRotation());\n  }\n\n  static startHighlighting(parent, isLTR, { target: textLayer, x, y }) {\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight,\n    } = textLayer.getBoundingClientRect();\n\n    const ac = new AbortController();\n    const signal = parent.combinedSignal(ac);\n\n    const pointerUpCallback = e => {\n      ac.abort();\n      this.#endHighlight(parent, e);\n    };\n    window.addEventListener(\"blur\", pointerUpCallback, { signal });\n    window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n    window.addEventListener(\n      \"pointerdown\",\n      stopEvent /* Avoid to have undesired clicks during the drawing. */,\n      {\n        capture: true,\n        passive: false,\n        signal,\n      }\n    );\n    window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n\n    textLayer.addEventListener(\n      \"pointermove\",\n      this.#highlightMove.bind(this, parent),\n      { signal }\n    );\n    this._freeHighlight = new FreeHighlightOutliner(\n      { x, y },\n      [layerX, layerY, parentWidth, parentHeight],\n      parent.scale,\n      this._defaultThickness / 2,\n      isLTR,\n      /* innerMargin = */ 0.001\n    );\n    ({ id: this._freeHighlightId, clipPathId: this._freeHighlightClipId } =\n      parent.drawLayer.draw(\n        {\n          bbox: [0, 0, 1, 1],\n          root: {\n            viewBox: \"0 0 1 1\",\n            fill: this._defaultColor,\n            \"fill-opacity\": this._defaultOpacity,\n          },\n          rootClass: {\n            highlight: true,\n            free: true,\n          },\n          path: {\n            d: this._freeHighlight.toSVGPath(),\n          },\n        },\n        /* isPathUpdatable = */ true,\n        /* hasClip = */ true\n      ));\n  }\n\n  static #highlightMove(parent, event) {\n    if (this._freeHighlight.add(event)) {\n      // Redraw only if the point has been added.\n      parent.drawLayer.updateProperties(this._freeHighlightId, {\n        path: {\n          d: this._freeHighlight.toSVGPath(),\n        },\n      });\n    }\n  }\n\n  static #endHighlight(parent, event) {\n    if (!this._freeHighlight.isEmpty()) {\n      parent.createAndAddNewEditor(event, false, {\n        highlightId: this._freeHighlightId,\n        highlightOutlines: this._freeHighlight.getOutlines(),\n        clipPathId: this._freeHighlightClipId,\n        methodOfCreation: \"main_toolbar\",\n      });\n    } else {\n      parent.drawLayer.remove(this._freeHighlightId);\n    }\n    this._freeHighlightId = -1;\n    this._freeHighlight = null;\n    this._freeHighlightClipId = \"\";\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof HighlightAnnotationElement) {\n      const {\n        data: {\n          quadPoints,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate,\n        },\n        parent: {\n          page: { pageNumber },\n        },\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        opacity,\n        quadPoints,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate,\n      };\n    } else if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          borderStyle: { rawWidth: thickness },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate,\n        },\n        parent: {\n          page: { pageNumber },\n        },\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        thickness,\n        inkLists,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate,\n      };\n    }\n\n    const { color, quadPoints, inkLists, opacity } = data;\n    const editor = await super.deserialize(data, parent, uiManager);\n\n    editor.color = Util.makeHexColor(...color);\n    editor.opacity = opacity || 1;\n    if (inkLists) {\n      editor.#thickness = data.thickness;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [pageX, pageY] = editor.pageTranslation;\n\n    if (quadPoints) {\n      const boxes = (editor.#boxes = []);\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        boxes.push({\n          x: (quadPoints[i] - pageX) / pageWidth,\n          y: 1 - (quadPoints[i + 1] - pageY) / pageHeight,\n          width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,\n          height: (quadPoints[i + 1] - quadPoints[i + 5]) / pageHeight,\n        });\n      }\n      editor.#createOutlines();\n      editor.#addToDrawLayer();\n      editor.rotate(editor.rotation);\n    } else if (inkLists) {\n      editor.#isFreeHighlight = true;\n      const points = inkLists[0];\n      const point = {\n        x: points[0] - pageX,\n        y: pageHeight - (points[1] - pageY),\n      };\n      const outliner = new FreeHighlightOutliner(\n        point,\n        [0, 0, pageWidth, pageHeight],\n        1,\n        editor.#thickness / 2,\n        true,\n        0.001\n      );\n      for (let i = 0, ii = points.length; i < ii; i += 2) {\n        point.x = points[i] - pageX;\n        point.y = pageHeight - (points[i + 1] - pageY);\n        outliner.add(point);\n      }\n      const { id, clipPathId } = parent.drawLayer.draw(\n        {\n          bbox: [0, 0, 1, 1],\n          root: {\n            viewBox: \"0 0 1 1\",\n            fill: editor.color,\n            \"fill-opacity\": editor._defaultOpacity,\n          },\n          rootClass: {\n            highlight: true,\n            free: true,\n          },\n          path: {\n            d: outliner.toSVGPath(),\n          },\n        },\n        /* isPathUpdatable = */ true,\n        /* hasClip = */ true\n      );\n      editor.#createFreeOutlines({\n        highlightOutlines: outliner.getOutlines(),\n        highlightId: id,\n        clipPathId,\n      });\n      editor.#addToDrawLayer();\n      editor.rotate(editor.parentRotation);\n    }\n\n    return editor;\n  }\n\n  /** @inheritdoc */\n  serialize(isForCopying = false) {\n    // It doesn't make sense to copy/paste a highlight annotation.\n    if (this.isEmpty() || isForCopying) {\n      return null;\n    }\n\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n\n    const color = AnnotationEditor._colorManager.convert(\n      this._uiManager.getNonHCMColor(this.color)\n    );\n    const serialized = super.serialize(isForCopying);\n    Object.assign(serialized, {\n      color,\n      opacity: this.opacity,\n      thickness: this.#thickness,\n      quadPoints: this.#serializeBoxes(),\n      outlines: this.#serializeOutlines(serialized.rect),\n    });\n    this.addComment(serialized);\n\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n\n  #hasElementChanged(serialized) {\n    const { color } = this._initialData;\n    return (\n      this.hasEditedComment || serialized.color.some((c, i) => c !== color[i])\n    );\n  }\n\n  /** @inheritdoc */\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment,\n    });\n\n    return null;\n  }\n\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\nexport { HighlightEditor };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationEditorParamsType, unreachable } from \"../../shared/util.js\";\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\nimport { AnnotationEditor } from \"./editor.js\";\n\nclass DrawingOptions {\n  #svgProperties = Object.create(null);\n\n  updateProperty(name, value) {\n    this[name] = value;\n    this.updateSVGProperty(name, value);\n  }\n\n  updateProperties(properties) {\n    if (!properties) {\n      return;\n    }\n    for (const [name, value] of Object.entries(properties)) {\n      if (!name.startsWith(\"_\")) {\n        this.updateProperty(name, value);\n      }\n    }\n  }\n\n  updateSVGProperty(name, value) {\n    this.#svgProperties[name] = value;\n  }\n\n  toSVGProperties() {\n    const root = this.#svgProperties;\n    this.#svgProperties = Object.create(null);\n    return { root };\n  }\n\n  reset() {\n    this.#svgProperties = Object.create(null);\n  }\n\n  updateAll(options = this) {\n    this.updateProperties(options);\n  }\n\n  clone() {\n    unreachable(\"Not implemented\");\n  }\n}\n\n/**\n * Basic draw editor.\n */\nclass DrawingEditor extends AnnotationEditor {\n  #drawOutlines = null;\n\n  #mustBeCommitted;\n\n  _colorPicker = null;\n\n  _drawId = null;\n\n  static _currentDrawId = -1;\n\n  static _currentParent = null;\n\n  static #currentDraw = null;\n\n  static #currentDrawingAC = null;\n\n  static #currentDrawingOptions = null;\n\n  static #currentPointerId = NaN;\n\n  static #currentPointerType = null;\n\n  static #currentPointerIds = null;\n\n  static #currentMoveTimestamp = NaN;\n\n  static _INNER_MARGIN = 3;\n\n  constructor(params) {\n    super(params);\n    this.#mustBeCommitted = params.mustBeCommitted || false;\n\n    this._addOutlines(params);\n  }\n\n  /** @inheritdoc */\n  onUpdatedColor() {\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n\n  _addOutlines(params) {\n    if (params.drawOutlines) {\n      this.#createDrawOutlines(params);\n      this.#addToDrawLayer();\n    }\n  }\n\n  #createDrawOutlines({ drawOutlines, drawId, drawingOptions }) {\n    this.#drawOutlines = drawOutlines;\n    this._drawingOptions ||= drawingOptions;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(`pdfjs-editor-${this.editorType}-added-alert`);\n    }\n\n    if (drawId >= 0) {\n      this._drawId = drawId;\n      // We need to redraw the drawing because we changed the coordinates to be\n      // in the box coordinate system.\n      this.parent.drawLayer.finalizeDraw(\n        drawId,\n        drawOutlines.defaultProperties\n      );\n    } else {\n      // We create a new drawing.\n      this._drawId = this.#createDrawing(drawOutlines, this.parent);\n    }\n\n    this.#updateBbox(drawOutlines.box);\n  }\n\n  #createDrawing(drawOutlines, parent) {\n    const { id } = parent.drawLayer.draw(\n      DrawingEditor._mergeSVGProperties(\n        this._drawingOptions.toSVGProperties(),\n        drawOutlines.defaultSVGProperties\n      ),\n      /* isPathUpdatable = */ false,\n      /* hasClip = */ false\n    );\n    return id;\n  }\n\n  static _mergeSVGProperties(p1, p2) {\n    const p1Keys = new Set(Object.keys(p1));\n\n    for (const [key, value] of Object.entries(p2)) {\n      if (p1Keys.has(key)) {\n        Object.assign(p1[key], value);\n      } else {\n        p1[key] = value;\n      }\n    }\n    return p1;\n  }\n\n  /**\n   * @param {Object} options\n   * @return {DrawingOptions} the default options to use for a new editor.\n   */\n  static getDefaultDrawingOptions(_options) {\n    unreachable(\"Not implemented\");\n  }\n\n  /**\n   * @return {Map<AnnotationEditorParamsType, string>} a map between the\n   *   parameter types and the name of the options.\n   */\n  // eslint-disable-next-line getter-return\n  static get typesMap() {\n    unreachable(\"Not implemented\");\n  }\n\n  static get isDrawer() {\n    return true;\n  }\n\n  /**\n   * @returns {boolean} `true` if several drawings can be added to the\n   * annotation.\n   */\n  static get supportMultipleDrawings() {\n    return false;\n  }\n\n  /** @inheritdoc */\n  static updateDefaultParams(type, value) {\n    const propertyName = this.typesMap.get(type);\n    if (propertyName) {\n      this._defaultDrawingOptions.updateProperty(propertyName, value);\n    }\n    if (this._currentParent) {\n      DrawingEditor.#currentDraw.updateProperty(propertyName, value);\n      this._currentParent.drawLayer.updateProperties(\n        this._currentDrawId,\n        this._defaultDrawingOptions.toSVGProperties()\n      );\n    }\n  }\n\n  /** @inheritdoc */\n  updateParams(type, value) {\n    const propertyName = this.constructor.typesMap.get(type);\n    if (propertyName) {\n      this._updateProperty(type, propertyName, value);\n    }\n  }\n\n  /** @inheritdoc */\n  static get defaultPropertiesToUpdate() {\n    const properties = [];\n    const options = this._defaultDrawingOptions;\n    for (const [type, name] of this.typesMap) {\n      properties.push([type, options[name]]);\n    }\n    return properties;\n  }\n\n  /** @inheritdoc */\n  get propertiesToUpdate() {\n    const properties = [];\n    const { _drawingOptions } = this;\n    for (const [type, name] of this.constructor.typesMap) {\n      properties.push([type, _drawingOptions[name]]);\n    }\n    return properties;\n  }\n\n  /**\n   * Update a property and make this action undoable.\n   * @param {string} color\n   */\n  _updateProperty(type, name, value) {\n    const options = this._drawingOptions;\n    const savedValue = options[name];\n    const setter = val => {\n      options.updateProperty(name, val);\n      const bbox = this.#drawOutlines.updateProperty(name, val);\n      if (bbox) {\n        this.#updateBbox(bbox);\n      }\n      this.parent?.drawLayer.updateProperties(\n        this._drawId,\n        options.toSVGProperties()\n      );\n      if (type === this.colorType) {\n        this.onUpdatedColor();\n      }\n    };\n    this.addCommands({\n      cmd: setter.bind(this, value),\n      undo: setter.bind(this, savedValue),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type,\n      overwriteIfSameType: true,\n      keepUndo: true,\n    });\n  }\n\n  /** @inheritdoc */\n  _onResizing() {\n    this.parent?.drawLayer.updateProperties(\n      this._drawId,\n      DrawingEditor._mergeSVGProperties(\n        this.#drawOutlines.getPathResizingSVGProperties(\n          this.#convertToDrawSpace()\n        ),\n        {\n          bbox: this.#rotateBox(),\n        }\n      )\n    );\n  }\n\n  /** @inheritdoc */\n  _onResized() {\n    this.parent?.drawLayer.updateProperties(\n      this._drawId,\n      DrawingEditor._mergeSVGProperties(\n        this.#drawOutlines.getPathResizedSVGProperties(\n          this.#convertToDrawSpace()\n        ),\n        {\n          bbox: this.#rotateBox(),\n        }\n      )\n    );\n  }\n\n  /** @inheritdoc */\n  _onTranslating(_x, _y) {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      bbox: this.#rotateBox(),\n    });\n  }\n\n  /** @inheritdoc */\n  _onTranslated() {\n    this.parent?.drawLayer.updateProperties(\n      this._drawId,\n      DrawingEditor._mergeSVGProperties(\n        this.#drawOutlines.getPathTranslatedSVGProperties(\n          this.#convertToDrawSpace(),\n          this.parentDimensions\n        ),\n        {\n          bbox: this.#rotateBox(),\n        }\n      )\n    );\n  }\n\n  _onStartDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: true,\n      },\n    });\n  }\n\n  _onStopDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: false,\n      },\n    });\n  }\n\n  /** @inheritdoc */\n  commit() {\n    super.commit();\n\n    this.disableEditMode();\n    this.disableEditing();\n  }\n\n  /** @inheritdoc */\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n\n  /** @inheritdoc */\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n\n  /** @inheritdoc */\n  getBaseTranslation() {\n    // The editor itself doesn't have any CSS border (we're drawing one\n    // ourselves in using SVG).\n    return [0, 0];\n  }\n\n  /** @inheritdoc */\n  get isResizable() {\n    return true;\n  }\n\n  /** @inheritdoc */\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    this._isDraggable = true;\n    if (this.#mustBeCommitted) {\n      this.#mustBeCommitted = false;\n      this.commit();\n      this.parent.setSelected(this);\n      if (focus && this.isOnScreen) {\n        this.div.focus();\n      }\n    }\n  }\n\n  /** @inheritdoc */\n  remove() {\n    this.#cleanDrawLayer();\n    super.remove();\n  }\n\n  /** @inheritdoc */\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n\n    this.#addToDrawLayer();\n    this.#updateBbox(this.#drawOutlines.box);\n\n    if (!this.isAttachedToDOM) {\n      // At some point this editor was removed and we're rebuilding it,\n      // hence we must add it to its parent.\n      this.parent.add(this);\n    }\n  }\n\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this._uiManager.removeShouldRescale(this);\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this._uiManager.addShouldRescale(this);\n      this.#addToDrawLayer(parent);\n      // If mustBeSelected is true it means that this editor was selected\n      // when its parent has been destroyed, hence we must select it again.\n      mustBeSelected =\n        !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    if (mustBeSelected) {\n      // We select it after the parent has been set.\n      this.select();\n    }\n  }\n\n  #cleanDrawLayer() {\n    if (this._drawId === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this._drawId);\n    this._drawId = null;\n\n    // All the SVG properties must be reset in order to make it possible to\n    // undo.\n    this._drawingOptions.reset();\n  }\n\n  #addToDrawLayer(parent = this.parent) {\n    if (this._drawId !== null && this.parent === parent) {\n      return;\n    }\n    if (this._drawId !== null) {\n      // The parent has changed, we need to move the drawing to the new parent.\n      this.parent.drawLayer.updateParent(this._drawId, parent.drawLayer);\n      return;\n    }\n    this._drawingOptions.updateAll();\n    this._drawId = this.#createDrawing(this.#drawOutlines, parent);\n  }\n\n  #convertToParentSpace([x, y, width, height]) {\n    const {\n      parentDimensions: [pW, pH],\n      rotation,\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [y, 1 - x, width * (pH / pW), height * (pW / pH)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [1 - y, x, width * (pH / pW), height * (pW / pH)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n\n  #convertToDrawSpace() {\n    const {\n      x,\n      y,\n      width,\n      height,\n      parentDimensions: [pW, pH],\n      rotation,\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n\n  #updateBbox(bbox) {\n    [this.x, this.y, this.width, this.height] =\n      this.#convertToParentSpace(bbox);\n    if (this.div) {\n      this.fixAndSetPosition();\n      this.setDims();\n    }\n    this._onResized();\n  }\n\n  #rotateBox() {\n    // We've to deal with two rotations: the rotation of the annotation and the\n    // rotation of the parent page.\n    // When the page is rotated, all the layers are just rotated thanks to CSS\n    // but there is a notable exception: the canvas wrapper.\n    // The canvas wrapper is not rotated but the dimensions are (or not) swapped\n    // and the page is redrawn with the rotation applied to the canvas.\n    // The drawn layer is under the canvas wrapper and is not rotated so we have\n    // to \"manually\" rotate the coordinates.\n    //\n    // The coordinates (this.x, this.y) correspond to the top-left corner of\n    // the editor after it has been rotated in the page coordinate system.\n\n    const {\n      x,\n      y,\n      width,\n      height,\n      rotation,\n      parentRotation,\n      parentDimensions: [pW, pH],\n    } = this;\n    switch ((rotation * 4 + parentRotation) / 90) {\n      case 1:\n        // 0 -> 90\n        return [1 - y - height, x, height, width];\n      case 2:\n        // 0 -> 180\n        return [1 - x - width, 1 - y - height, width, height];\n      case 3:\n        // 0 -> 270\n        return [y, 1 - x - width, height, width];\n      case 4:\n        // 90 -> 0\n        return [\n          x,\n          y - width * (pW / pH),\n          height * (pH / pW),\n          width * (pW / pH),\n        ];\n      case 5:\n        // 90 -> 90\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 6:\n        // 90 -> 180\n        return [\n          1 - x - height * (pH / pW),\n          1 - y,\n          height * (pH / pW),\n          width * (pW / pH),\n        ];\n      case 7:\n        // 90 -> 270\n        return [\n          y - width * (pW / pH),\n          1 - x - height * (pH / pW),\n          width * (pW / pH),\n          height * (pH / pW),\n        ];\n      case 8:\n        // 180 -> 0\n        return [x - width, y - height, width, height];\n      case 9:\n        // 180 -> 90\n        return [1 - y, x - width, height, width];\n      case 10:\n        // 180 -> 180\n        return [1 - x, 1 - y, width, height];\n      case 11:\n        // 180 -> 270\n        return [y - height, 1 - x, height, width];\n      case 12:\n        // 270 -> 0\n        return [\n          x - height * (pH / pW),\n          y,\n          height * (pH / pW),\n          width * (pW / pH),\n        ];\n      case 13:\n        // 270 -> 90\n        return [\n          1 - y - width * (pW / pH),\n          x - height * (pH / pW),\n          width * (pW / pH),\n          height * (pH / pW),\n        ];\n      case 14:\n        // 270 -> 180\n        return [\n          1 - x,\n          1 - y - width * (pW / pH),\n          height * (pH / pW),\n          width * (pW / pH),\n        ];\n      case 15:\n        // 270 -> 270\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        // 0 -> 0\n        return [x, y, width, height];\n    }\n  }\n\n  /** @inheritdoc */\n  rotate() {\n    if (!this.parent) {\n      return;\n    }\n    this.parent.drawLayer.updateProperties(\n      this._drawId,\n      DrawingEditor._mergeSVGProperties(\n        {\n          bbox: this.#rotateBox(),\n        },\n        this.#drawOutlines.updateRotation(\n          (this.parentRotation - this.rotation + 360) % 360\n        )\n      )\n    );\n  }\n\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    this.#updateBbox(\n      this.#drawOutlines.updateParentDimensions(\n        this.parentDimensions,\n        this.parent.scale\n      )\n    );\n  }\n\n  static onScaleChangingWhenDrawing() {}\n\n  /** @inheritdoc */\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n\n    const div = super.render();\n    div.classList.add(\"draw\");\n\n    const drawDiv = document.createElement(\"div\");\n    div.append(drawDiv);\n    drawDiv.setAttribute(\"aria-hidden\", \"true\");\n    drawDiv.className = \"internal\";\n    this.setDims();\n    this._uiManager.addShouldRescale(this);\n    this.disableEditing();\n\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n\n    return div;\n  }\n\n  /**\n   * Create a new drawer instance.\n   * @param {number} x - The x coordinate of the event.\n   * @param {number} y - The y coordinate of the event.\n   * @param {number} parentWidth - The parent width.\n   * @param {number} parentHeight - The parent height.\n   * @param {number} rotation - The parent rotation.\n   */\n  static createDrawerInstance(_x, _y, _parentWidth, _parentHeight, _rotation) {\n    unreachable(\"Not implemented\");\n  }\n\n  static startDrawing(parent, uiManager, _isLTR, event) {\n    // The _currentPointerType is set when the user starts an empty drawing\n    // session. If, in the same drawing session, the user starts using a\n    // different type of pointer (e.g. a pen and then a finger), we just return.\n    //\n    // The _currentPointerId  and _currentPointerIds are used to keep track of\n    // the pointers with a same type (e.g. two fingers). If the user starts to\n    // draw with a finger and then uses a second finger, we just stop the\n    // current drawing and let the user zoom the document.\n\n    const { target, offsetX: x, offsetY: y, pointerId, pointerType } = event;\n    if (\n      DrawingEditor.#currentPointerType &&\n      DrawingEditor.#currentPointerType !== pointerType\n    ) {\n      return;\n    }\n\n    const {\n      viewport: { rotation },\n    } = parent;\n    const { width: parentWidth, height: parentHeight } =\n      target.getBoundingClientRect();\n\n    const ac = (DrawingEditor.#currentDrawingAC = new AbortController());\n    const signal = parent.combinedSignal(ac);\n\n    DrawingEditor.#currentPointerId ||= pointerId;\n    DrawingEditor.#currentPointerType ??= pointerType;\n\n    window.addEventListener(\n      \"pointerup\",\n      e => {\n        if (DrawingEditor.#currentPointerId === e.pointerId) {\n          this._endDraw(e);\n        } else {\n          DrawingEditor.#currentPointerIds?.delete(e.pointerId);\n        }\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"pointercancel\",\n      e => {\n        if (DrawingEditor.#currentPointerId === e.pointerId) {\n          this._currentParent.endDrawingSession();\n        } else {\n          DrawingEditor.#currentPointerIds?.delete(e.pointerId);\n        }\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"pointerdown\",\n      e => {\n        if (DrawingEditor.#currentPointerType !== e.pointerType) {\n          // For example, we started with a pen and the user\n          // is now using a finger.\n          return;\n        }\n\n        // For example, the user is using a second finger.\n        (DrawingEditor.#currentPointerIds ||= new Set()).add(e.pointerId);\n\n        // The first finger created a first point and a second finger just\n        // started, so we stop the drawing and remove this only point.\n        if (DrawingEditor.#currentDraw.isCancellable()) {\n          DrawingEditor.#currentDraw.removeLastElement();\n          if (DrawingEditor.#currentDraw.isEmpty()) {\n            this._currentParent.endDrawingSession(/* isAborted = */ true);\n          } else {\n            this._endDraw(null);\n          }\n        }\n      },\n      {\n        capture: true,\n        passive: false,\n        signal,\n      }\n    );\n    window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n    target.addEventListener(\"pointermove\", this._drawMove.bind(this), {\n      signal,\n    });\n    target.addEventListener(\n      \"touchmove\",\n      e => {\n        if (e.timeStamp === DrawingEditor.#currentMoveTimestamp) {\n          // This move event is used to draw so we don't want to scroll.\n          stopEvent(e);\n        }\n      },\n      { signal }\n    );\n    parent.toggleDrawing();\n    uiManager._editorUndoBar?.hide();\n\n    if (DrawingEditor.#currentDraw) {\n      parent.drawLayer.updateProperties(\n        this._currentDrawId,\n        DrawingEditor.#currentDraw.startNew(\n          x,\n          y,\n          parentWidth,\n          parentHeight,\n          rotation\n        )\n      );\n      return;\n    }\n\n    uiManager.updateUIForDefaultProperties(this);\n\n    DrawingEditor.#currentDraw = this.createDrawerInstance(\n      x,\n      y,\n      parentWidth,\n      parentHeight,\n      rotation\n    );\n    DrawingEditor.#currentDrawingOptions = this.getDefaultDrawingOptions();\n    this._currentParent = parent;\n\n    ({ id: this._currentDrawId } = parent.drawLayer.draw(\n      this._mergeSVGProperties(\n        DrawingEditor.#currentDrawingOptions.toSVGProperties(),\n        DrawingEditor.#currentDraw.defaultSVGProperties\n      ),\n      /* isPathUpdatable = */ true,\n      /* hasClip = */ false\n    ));\n  }\n\n  static _drawMove(event) {\n    DrawingEditor.#currentMoveTimestamp = -1;\n    if (!DrawingEditor.#currentDraw) {\n      return;\n    }\n    const { offsetX, offsetY, pointerId } = event;\n\n    if (DrawingEditor.#currentPointerId !== pointerId) {\n      return;\n    }\n    if (DrawingEditor.#currentPointerIds?.size >= 1) {\n      // The user is using multiple fingers and the first one is moving.\n      this._endDraw(event);\n      return;\n    }\n    this._currentParent.drawLayer.updateProperties(\n      this._currentDrawId,\n      DrawingEditor.#currentDraw.add(offsetX, offsetY)\n    );\n    // We track the timestamp to know if the touchmove event is used to draw.\n    DrawingEditor.#currentMoveTimestamp = event.timeStamp;\n    stopEvent(event);\n  }\n\n  static _cleanup(all) {\n    if (all) {\n      this._currentDrawId = -1;\n      this._currentParent = null;\n      DrawingEditor.#currentDraw = null;\n      DrawingEditor.#currentDrawingOptions = null;\n      DrawingEditor.#currentPointerType = null;\n      DrawingEditor.#currentMoveTimestamp = NaN;\n    }\n\n    if (DrawingEditor.#currentDrawingAC) {\n      DrawingEditor.#currentDrawingAC.abort();\n      DrawingEditor.#currentDrawingAC = null;\n      DrawingEditor.#currentPointerId = NaN;\n      DrawingEditor.#currentPointerIds = null;\n    }\n  }\n\n  static _endDraw(event) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n\n    parent.toggleDrawing(true);\n    this._cleanup(false);\n\n    if (event?.target === parent.div) {\n      parent.drawLayer.updateProperties(\n        this._currentDrawId,\n        DrawingEditor.#currentDraw.end(event.offsetX, event.offsetY)\n      );\n    }\n    if (this.supportMultipleDrawings) {\n      const draw = DrawingEditor.#currentDraw;\n      const drawId = this._currentDrawId;\n      const lastElement = draw.getLastElement();\n      parent.addCommands({\n        cmd: () => {\n          parent.drawLayer.updateProperties(\n            drawId,\n            draw.setLastElement(lastElement)\n          );\n        },\n        undo: () => {\n          parent.drawLayer.updateProperties(drawId, draw.removeLastElement());\n        },\n        mustExec: false,\n        type: AnnotationEditorParamsType.DRAW_STEP,\n      });\n\n      return;\n    }\n\n    this.endDrawing(/* isAborted = */ false);\n  }\n\n  static endDrawing(isAborted) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return null;\n    }\n    parent.toggleDrawing(true);\n    parent.cleanUndoStack(AnnotationEditorParamsType.DRAW_STEP);\n\n    if (!DrawingEditor.#currentDraw.isEmpty()) {\n      const {\n        pageDimensions: [pageWidth, pageHeight],\n        scale,\n      } = parent;\n\n      const editor = parent.createAndAddNewEditor(\n        { offsetX: 0, offsetY: 0 },\n        false,\n        {\n          drawId: this._currentDrawId,\n          drawOutlines: DrawingEditor.#currentDraw.getOutlines(\n            pageWidth * scale,\n            pageHeight * scale,\n            scale,\n            this._INNER_MARGIN\n          ),\n          drawingOptions: DrawingEditor.#currentDrawingOptions,\n          mustBeCommitted: !isAborted,\n        }\n      );\n      this._cleanup(true);\n      return editor;\n    }\n\n    parent.drawLayer.remove(this._currentDrawId);\n    this._cleanup(true);\n    return null;\n  }\n\n  /**\n   * Create the drawing options.\n   * @param {Object} _data\n   */\n  createDrawingOptions(_data) {}\n\n  /**\n   * Deserialize the drawing outlines.\n   * @param {number} pageX - The x coordinate of the page.\n   * @param {number} pageY - The y coordinate of the page.\n   * @param {number} pageWidth - The width of the page.\n   * @param {number} pageHeight - The height of the page.\n   * @param {number} innerWidth - The inner width.\n   * @param {Object} data - The data to deserialize.\n   * @returns {Object} The deserialized outlines.\n   */\n  static deserializeDraw(\n    _pageX,\n    _pageY,\n    _pageWidth,\n    _pageHeight,\n    _innerWidth,\n    _data\n  ) {\n    unreachable(\"Not implemented\");\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    const {\n      rawDims: { pageWidth, pageHeight, pageX, pageY },\n    } = parent.viewport;\n    const drawOutlines = this.deserializeDraw(\n      pageX,\n      pageY,\n      pageWidth,\n      pageHeight,\n      this._INNER_MARGIN,\n      data\n    );\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.createDrawingOptions(data);\n    editor.#createDrawOutlines({ drawOutlines });\n    editor.#addToDrawLayer();\n    editor.onScaleChanging();\n    editor.rotate();\n\n    return editor;\n  }\n\n  serializeDraw(isForCopying) {\n    const [pageX, pageY] = this.pageTranslation;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    return this.#drawOutlines.serialize(\n      [pageX, pageY, pageWidth, pageHeight],\n      isForCopying\n    );\n  }\n\n  /** @inheritdoc */\n  renderAnnotationElement(annotation) {\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n    });\n\n    return null;\n  }\n\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\nexport { DrawingEditor, DrawingOptions };\n", "/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp, Util } from \"../../../shared/util.js\";\nimport { Outline } from \"./outline.js\";\n\nclass InkDrawOutliner {\n  // The last 3 points of the line.\n  #last = new Float64Array(6);\n\n  #line;\n\n  #lines;\n\n  #rotation;\n\n  #thickness;\n\n  #points;\n\n  #lastSVGPath = \"\";\n\n  #lastIndex = 0;\n\n  #outlines = new InkDrawOutline();\n\n  #parentWidth;\n\n  #parentHeight;\n\n  constructor(x, y, parentWidth, parentHeight, rotation, thickness) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n\n    [x, y] = this.#normalizePoint(x, y);\n\n    const line = (this.#line = [NaN, NaN, NaN, NaN, x, y]);\n    this.#points = [x, y];\n    this.#lines = [{ line, points: this.#points }];\n    this.#last.set(line, 0);\n  }\n\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      this.#thickness = value;\n    }\n  }\n\n  #normalizePoint(x, y) {\n    return Outline._normalizePoint(\n      x,\n      y,\n      this.#parentWidth,\n      this.#parentHeight,\n      this.#rotation\n    );\n  }\n\n  isEmpty() {\n    return !this.#lines || this.#lines.length === 0;\n  }\n\n  isCancellable() {\n    // The user a second finger after drawing 5 points: it's small enough\n    // to not be a real drawing.\n    return this.#points.length <= 10;\n  }\n\n  add(x, y) {\n    // The point is in canvas coordinates which means that there is no rotation.\n    // It's the same as parent coordinates.\n    [x, y] = this.#normalizePoint(x, y);\n    const [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(this.#parentWidth * diffX, this.#parentHeight * diffY);\n    if (d <= 2) {\n      // The idea is to avoid garbage points around the last point.\n      // When the points are too close, it just leads to bad normal vectors and\n      // control points.\n      return null;\n    }\n\n    this.#points.push(x, y);\n\n    if (isNaN(x1)) {\n      // We've only one point.\n      this.#last.set([x2, y2, x, y], 2);\n      this.#line.push(NaN, NaN, NaN, NaN, x, y);\n      return {\n        path: {\n          d: this.toSVGPath(),\n        },\n      };\n    }\n\n    if (isNaN(this.#last[0])) {\n      // We've only two points.\n      this.#line.splice(6, 6);\n    }\n\n    this.#last.set([x1, y1, x2, y2, x, y], 0);\n    this.#line.push(...Outline.createBezierPoints(x1, y1, x2, y2, x, y));\n\n    return {\n      path: {\n        d: this.toSVGPath(),\n      },\n    };\n  }\n\n  end(x, y) {\n    const change = this.add(x, y);\n    if (change) {\n      return change;\n    }\n    if (this.#points.length === 2) {\n      // We've only one point.\n      return {\n        path: {\n          d: this.toSVGPath(),\n        },\n      };\n    }\n    return null;\n  }\n\n  startNew(x, y, parentWidth, parentHeight, rotation) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n\n    [x, y] = this.#normalizePoint(x, y);\n\n    const line = (this.#line = [NaN, NaN, NaN, NaN, x, y]);\n    this.#points = [x, y];\n    const last = this.#lines.at(-1);\n    if (last) {\n      last.line = new Float32Array(last.line);\n      last.points = new Float32Array(last.points);\n    }\n    this.#lines.push({ line, points: this.#points });\n    this.#last.set(line, 0);\n    this.#lastIndex = 0;\n    this.toSVGPath();\n\n    return null;\n  }\n\n  getLastElement() {\n    return this.#lines.at(-1);\n  }\n\n  setLastElement(element) {\n    if (!this.#lines) {\n      return this.#outlines.setLastElement(element);\n    }\n    this.#lines.push(element);\n    this.#line = element.line;\n    this.#points = element.points;\n    this.#lastIndex = 0;\n    return {\n      path: {\n        d: this.toSVGPath(),\n      },\n    };\n  }\n\n  removeLastElement() {\n    if (!this.#lines) {\n      return this.#outlines.removeLastElement();\n    }\n    this.#lines.pop();\n    this.#lastSVGPath = \"\";\n    for (let i = 0, ii = this.#lines.length; i < ii; i++) {\n      const { line, points } = this.#lines[i];\n      this.#line = line;\n      this.#points = points;\n      this.#lastIndex = 0;\n      this.toSVGPath();\n    }\n\n    return {\n      path: {\n        d: this.#lastSVGPath,\n      },\n    };\n  }\n\n  toSVGPath() {\n    const firstX = Outline.svgRound(this.#line[4]);\n    const firstY = Outline.svgRound(this.#line[5]);\n    if (this.#points.length === 2) {\n      this.#lastSVGPath = `${this.#lastSVGPath} M ${firstX} ${firstY} Z`;\n      return this.#lastSVGPath;\n    }\n\n    if (this.#points.length <= 6) {\n      // We've 2 or 3 points.\n      const i = this.#lastSVGPath.lastIndexOf(\"M\");\n      this.#lastSVGPath = `${this.#lastSVGPath.slice(0, i)} M ${firstX} ${firstY}`;\n      this.#lastIndex = 6;\n    }\n\n    if (this.#points.length === 4) {\n      const secondX = Outline.svgRound(this.#line[10]);\n      const secondY = Outline.svgRound(this.#line[11]);\n      this.#lastSVGPath = `${this.#lastSVGPath} L ${secondX} ${secondY}`;\n      this.#lastIndex = 12;\n      return this.#lastSVGPath;\n    }\n\n    const buffer = [];\n    if (this.#lastIndex === 0) {\n      buffer.push(`M ${firstX} ${firstY}`);\n      this.#lastIndex = 6;\n    }\n\n    for (let i = this.#lastIndex, ii = this.#line.length; i < ii; i += 6) {\n      const [c1x, c1y, c2x, c2y, x, y] = this.#line\n        .slice(i, i + 6)\n        .map(Outline.svgRound);\n      buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n    }\n    this.#lastSVGPath += buffer.join(\" \");\n    this.#lastIndex = this.#line.length;\n\n    return this.#lastSVGPath;\n  }\n\n  getOutlines(parentWidth, parentHeight, scale, innerMargin) {\n    const last = this.#lines.at(-1);\n    last.line = new Float32Array(last.line);\n    last.points = new Float32Array(last.points);\n\n    this.#outlines.build(\n      this.#lines,\n      parentWidth,\n      parentHeight,\n      scale,\n      this.#rotation,\n      this.#thickness,\n      innerMargin\n    );\n\n    // We reset everything: the drawing is done.\n    this.#last = null;\n    this.#line = null;\n    this.#lines = null;\n    this.#lastSVGPath = null;\n\n    return this.#outlines;\n  }\n\n  get defaultSVGProperties() {\n    return {\n      root: {\n        viewBox: \"0 0 10000 10000\",\n      },\n      rootClass: {\n        draw: true,\n      },\n      bbox: [0, 0, 1, 1],\n    };\n  }\n}\n\nclass InkDrawOutline extends Outline {\n  #bbox;\n\n  #currentRotation = 0;\n\n  #innerMargin;\n\n  #lines;\n\n  #parentWidth;\n\n  #parentHeight;\n\n  #parentScale;\n\n  #rotation;\n\n  #thickness;\n\n  build(\n    lines,\n    parentWidth,\n    parentHeight,\n    parentScale,\n    rotation,\n    thickness,\n    innerMargin\n  ) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#parentScale = parentScale;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n    this.#innerMargin = innerMargin ?? 0;\n    this.#lines = lines;\n\n    this.#computeBbox();\n  }\n\n  get thickness() {\n    return this.#thickness;\n  }\n\n  setLastElement(element) {\n    this.#lines.push(element);\n    return {\n      path: {\n        d: this.toSVGPath(),\n      },\n    };\n  }\n\n  removeLastElement() {\n    this.#lines.pop();\n    return {\n      path: {\n        d: this.toSVGPath(),\n      },\n    };\n  }\n\n  toSVGPath() {\n    const buffer = [];\n    for (const { line } of this.#lines) {\n      buffer.push(`M${Outline.svgRound(line[4])} ${Outline.svgRound(line[5])}`);\n      if (line.length === 6) {\n        buffer.push(\"Z\");\n        continue;\n      }\n      if (line.length === 12 && isNaN(line[6])) {\n        buffer.push(\n          `L${Outline.svgRound(line[10])} ${Outline.svgRound(line[11])}`\n        );\n        continue;\n      }\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line\n          .subarray(i, i + 6)\n          .map(Outline.svgRound);\n        buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n      }\n    }\n    return buffer.join(\"\");\n  }\n\n  serialize([pageX, pageY, pageWidth, pageHeight], isForCopying) {\n    const serializedLines = [];\n    const serializedPoints = [];\n    const [x, y, width, height] = this.#getBBoxWithNoMargin();\n    let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn;\n\n    switch (this.#rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = pageX;\n        ty = pageY + pageHeight;\n        sx = pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + x * pageWidth;\n        y1 = pageY + (1 - y - height) * pageHeight;\n        x2 = pageX + (x + width) * pageWidth;\n        y2 = pageY + (1 - y) * pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX;\n        ty = pageY;\n        sx = pageWidth;\n        sy = pageHeight;\n        x1 = pageX + y * pageWidth;\n        y1 = pageY + x * pageHeight;\n        x2 = pageX + (y + height) * pageWidth;\n        y2 = pageY + (x + width) * pageHeight;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX + pageWidth;\n        ty = pageY;\n        sx = -pageWidth;\n        sy = pageHeight;\n        x1 = pageX + (1 - x - width) * pageWidth;\n        y1 = pageY + y * pageHeight;\n        x2 = pageX + (1 - x) * pageWidth;\n        y2 = pageY + (y + height) * pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX + pageWidth;\n        ty = pageY + pageHeight;\n        sx = -pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + (1 - y - height) * pageWidth;\n        y1 = pageY + (1 - x - width) * pageHeight;\n        x2 = pageX + (1 - y) * pageWidth;\n        y2 = pageY + (1 - x) * pageHeight;\n        break;\n    }\n\n    for (const { line, points } of this.#lines) {\n      serializedLines.push(\n        rescaleFn(\n          line,\n          tx,\n          ty,\n          sx,\n          sy,\n          isForCopying ? new Array(line.length) : null\n        )\n      );\n      serializedPoints.push(\n        rescaleFn(\n          points,\n          tx,\n          ty,\n          sx,\n          sy,\n          isForCopying ? new Array(points.length) : null\n        )\n      );\n    }\n\n    return {\n      lines: serializedLines,\n      points: serializedPoints,\n      rect: [x1, y1, x2, y2],\n    };\n  }\n\n  static deserialize(\n    pageX,\n    pageY,\n    pageWidth,\n    pageHeight,\n    innerMargin,\n    { paths: { lines, points }, rotation, thickness }\n  ) {\n    const newLines = [];\n    let tx, ty, sx, sy, rescaleFn;\n    switch (rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = -pageX / pageWidth;\n        ty = pageY / pageHeight + 1;\n        sx = 1 / pageWidth;\n        sy = -1 / pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = -pageY / pageHeight;\n        ty = -pageX / pageWidth;\n        sx = 1 / pageHeight;\n        sy = 1 / pageWidth;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX / pageWidth + 1;\n        ty = -pageY / pageHeight;\n        sx = -1 / pageWidth;\n        sy = 1 / pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageY / pageHeight + 1;\n        ty = pageX / pageWidth + 1;\n        sx = -1 / pageHeight;\n        sy = -1 / pageWidth;\n        break;\n    }\n\n    if (!lines) {\n      lines = [];\n      for (const point of points) {\n        const len = point.length;\n        if (len === 2) {\n          lines.push(\n            new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1]])\n          );\n          continue;\n        }\n        if (len === 4) {\n          lines.push(\n            new Float32Array([\n              NaN,\n              NaN,\n              NaN,\n              NaN,\n              point[0],\n              point[1],\n              NaN,\n              NaN,\n              NaN,\n              NaN,\n              point[2],\n              point[3],\n            ])\n          );\n          continue;\n        }\n        const line = new Float32Array(3 * (len - 2));\n        lines.push(line);\n        let [x1, y1, x2, y2] = point.subarray(0, 4);\n        line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n        for (let i = 4; i < len; i += 2) {\n          const x = point[i];\n          const y = point[i + 1];\n          line.set(\n            Outline.createBezierPoints(x1, y1, x2, y2, x, y),\n            (i - 2) * 3\n          );\n          [x1, y1, x2, y2] = [x2, y2, x, y];\n        }\n      }\n    }\n\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      newLines.push({\n        line: rescaleFn(\n          lines[i].map(x => x ?? NaN),\n          tx,\n          ty,\n          sx,\n          sy\n        ),\n        points: rescaleFn(\n          points[i].map(x => x ?? NaN),\n          tx,\n          ty,\n          sx,\n          sy\n        ),\n      });\n    }\n\n    const outlines = new this.prototype.constructor();\n    outlines.build(\n      newLines,\n      pageWidth,\n      pageHeight,\n      1,\n      rotation,\n      thickness,\n      innerMargin\n    );\n\n    return outlines;\n  }\n\n  #getMarginComponents(thickness = this.#thickness) {\n    const margin = this.#innerMargin + (thickness / 2) * this.#parentScale;\n    return this.#rotation % 180 === 0\n      ? [margin / this.#parentWidth, margin / this.#parentHeight]\n      : [margin / this.#parentHeight, margin / this.#parentWidth];\n  }\n\n  #getBBoxWithNoMargin() {\n    const [x, y, width, height] = this.#bbox;\n    const [marginX, marginY] = this.#getMarginComponents(0);\n\n    return [\n      x + marginX,\n      y + marginY,\n      width - 2 * marginX,\n      height - 2 * marginY,\n    ];\n  }\n\n  #computeBbox() {\n    const bbox = (this.#bbox = new Float32Array([\n      Infinity,\n      Infinity,\n      -Infinity,\n      -Infinity,\n    ]));\n\n    for (const { line } of this.#lines) {\n      if (line.length <= 12) {\n        // We've only one or two points => no bezier curve.\n        for (let i = 4, ii = line.length; i < ii; i += 6) {\n          Util.pointBoundingBox(line[i], line[i + 1], bbox);\n        }\n        continue;\n      }\n      let lastX = line[4],\n        lastY = line[5];\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6);\n        Util.bezierBoundingBox(lastX, lastY, c1x, c1y, c2x, c2y, x, y, bbox);\n        lastX = x;\n        lastY = y;\n      }\n    }\n\n    const [marginX, marginY] = this.#getMarginComponents();\n    bbox[0] = MathClamp(bbox[0] - marginX, 0, 1);\n    bbox[1] = MathClamp(bbox[1] - marginY, 0, 1);\n    bbox[2] = MathClamp(bbox[2] + marginX, 0, 1);\n    bbox[3] = MathClamp(bbox[3] + marginY, 0, 1);\n\n    bbox[2] -= bbox[0];\n    bbox[3] -= bbox[1];\n  }\n\n  get box() {\n    return this.#bbox;\n  }\n\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      return this.#updateThickness(value);\n    }\n    return null;\n  }\n\n  #updateThickness(thickness) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#thickness = thickness;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const [diffMarginX, diffMarginY] = [\n      newMarginX - oldMarginX,\n      newMarginY - oldMarginY,\n    ];\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n\n    return bbox;\n  }\n\n  updateParentDimensions([width, height], scale) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#parentWidth = width;\n    this.#parentHeight = height;\n    this.#parentScale = scale;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const diffMarginX = newMarginX - oldMarginX;\n    const diffMarginY = newMarginY - oldMarginY;\n\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n\n    return bbox;\n  }\n\n  updateRotation(rotation) {\n    this.#currentRotation = rotation;\n    return {\n      path: {\n        transform: this.rotationTransform,\n      },\n    };\n  }\n\n  get viewBox() {\n    return this.#bbox.map(Outline.svgRound).join(\" \");\n  }\n\n  get defaultProperties() {\n    const [x, y] = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox,\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`,\n      },\n    };\n  }\n\n  get rotationTransform() {\n    const [, , width, height] = this.#bbox;\n    let a = 0,\n      b = 0,\n      c = 0,\n      d = 0,\n      e = 0,\n      f = 0;\n    switch (this.#currentRotation) {\n      case 90:\n        b = height / width;\n        c = -width / height;\n        e = width;\n        break;\n      case 180:\n        a = -1;\n        d = -1;\n        e = width;\n        f = height;\n        break;\n      case 270:\n        b = -height / width;\n        c = width / height;\n        f = height;\n        break;\n      default:\n        return \"\";\n    }\n    return `matrix(${a} ${b} ${c} ${d} ${Outline.svgRound(e)} ${Outline.svgRound(f)})`;\n  }\n\n  getPathResizingSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const [x, y, width, height] = this.#bbox;\n\n    if (\n      Math.abs(width - marginX) <= Outline.PRECISION ||\n      Math.abs(height - marginY) <= Outline.PRECISION\n    ) {\n      // Center the path in the new bounding box.\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      return {\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: `${this.rotationTransform} translate(${tx} ${ty})`,\n        },\n      };\n    }\n\n    // We compute the following transform:\n    //  1. Translate the path to the origin (-marginX, -marginY).\n    //  2. Scale the path to the new size:\n    //   ((newWidth - 2*marginX) / (bbox.width - 2*marginX),\n    //   (newHeight - 2*marginY) / (bbox.height - 2*marginY)).\n    //  3. Translate the path back to its original position\n    //   (marginX, marginY).\n    //  4. Scale the inverse of bbox scaling:\n    //   (bbox.width / newWidth, bbox.height / newHeight).\n\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const s2x = width / newWidth;\n    const s2y = height / newHeight;\n\n    return {\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`,\n        transform:\n          `${this.rotationTransform} scale(${s2x} ${s2y}) ` +\n          `translate(${Outline.svgRound(marginX)} ${Outline.svgRound(marginY)}) scale(${s1x} ${s1y}) ` +\n          `translate(${Outline.svgRound(-marginX)} ${Outline.svgRound(-marginY)})`,\n      },\n    };\n  }\n\n  getPathResizedSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const bbox = this.#bbox;\n    const [x, y, width, height] = bbox;\n\n    bbox[0] = newX;\n    bbox[1] = newY;\n    bbox[2] = newWidth;\n    bbox[3] = newHeight;\n\n    if (\n      Math.abs(width - marginX) <= Outline.PRECISION ||\n      Math.abs(height - marginY) <= Outline.PRECISION\n    ) {\n      // Center the path in the new bounding box.\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      for (const { line, points } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n      return {\n        root: {\n          viewBox: this.viewBox,\n        },\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: this.rotationTransform || null,\n          d: this.toSVGPath(),\n        },\n      };\n    }\n\n    // We compute the following transform:\n    //  1. Translate the path to the origin (-(x + marginX), -(y + marginY)).\n    //  2. Scale the path to the new size:\n    //   ((newWidth - 2*marginX) / (bbox.width - 2*marginX),\n    //   (newHeight - 2*marginY) / (bbox.height - 2*marginY)).\n    //  3. Translate the path back to its new position\n    //     (newX + marginX,y newY + marginY).\n\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const tx = -s1x * (x + marginX) + newX + marginX;\n    const ty = -s1y * (y + marginY) + newY + marginY;\n\n    if (s1x !== 1 || s1y !== 1 || tx !== 0 || ty !== 0) {\n      for (const { line, points } of this.#lines) {\n        Outline._rescale(line, tx, ty, s1x, s1y, line);\n        Outline._rescale(points, tx, ty, s1x, s1y, points);\n      }\n    }\n\n    return {\n      root: {\n        viewBox: this.viewBox,\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n        transform: this.rotationTransform || null,\n        d: this.toSVGPath(),\n      },\n    };\n  }\n\n  getPathTranslatedSVGProperties([newX, newY], parentDimensions) {\n    const [newParentWidth, newParentHeight] = parentDimensions;\n    const bbox = this.#bbox;\n    const tx = newX - bbox[0];\n    const ty = newY - bbox[1];\n\n    if (\n      this.#parentWidth === newParentWidth &&\n      this.#parentHeight === newParentHeight\n    ) {\n      // We don't change the parent dimensions so it's a simple translation.\n      for (const { line, points } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n    } else {\n      const sx = this.#parentWidth / newParentWidth;\n      const sy = this.#parentHeight / newParentHeight;\n      this.#parentWidth = newParentWidth;\n      this.#parentHeight = newParentHeight;\n\n      for (const { line, points } of this.#lines) {\n        Outline._rescale(line, tx, ty, sx, sy, line);\n        Outline._rescale(points, tx, ty, sx, sy, points);\n      }\n      bbox[2] *= sx;\n      bbox[3] *= sy;\n    }\n    bbox[0] = newX;\n    bbox[1] = newY;\n\n    return {\n      root: {\n        viewBox: this.viewBox,\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n      },\n    };\n  }\n\n  get defaultSVGProperties() {\n    const bbox = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox,\n      },\n      rootClass: {\n        draw: true,\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(bbox[0])} ${Outline.svgRound(bbox[1])}`,\n        transform: this.rotationTransform || null,\n      },\n      bbox,\n    };\n  }\n}\n\nexport { InkDrawOutline, InkDrawOutliner };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  shadow,\n  Util,\n} from \"../../shared/util.js\";\nimport { DrawingEditor, DrawingOptions } from \"./draw.js\";\nimport { InkDrawOutline, InkDrawOutliner } from \"./drawers/inkdraw.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { BasicColorPicker } from \"./color_picker.js\";\nimport { InkAnnotationElement } from \"../annotation_layer.js\";\n\nclass InkDrawingOptions extends DrawingOptions {\n  constructor(viewerParameters) {\n    super();\n    this._viewParameters = viewerParameters;\n\n    super.updateProperties({\n      fill: \"none\",\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-opacity\": 1,\n      \"stroke-width\": 1,\n      \"stroke-linecap\": \"round\",\n      \"stroke-linejoin\": \"round\",\n      \"stroke-miterlimit\": 10,\n    });\n  }\n\n  updateSVGProperty(name, value) {\n    if (name === \"stroke-width\") {\n      value ??= this[\"stroke-width\"];\n      value *= this._viewParameters.realScale;\n    }\n    super.updateSVGProperty(name, value);\n  }\n\n  clone() {\n    const clone = new InkDrawingOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\n\n/**\n * Basic draw editor in order to generate an Ink annotation.\n */\nclass InkEditor extends DrawingEditor {\n  static _type = \"ink\";\n\n  static _editorType = AnnotationEditorType.INK;\n\n  static _defaultDrawingOptions = null;\n\n  constructor(params) {\n    super({ ...params, name: \"inkEditor\" });\n    this._willKeepAspectRatio = true;\n    this.defaultL10nId = \"pdfjs-editor-ink-editor\";\n  }\n\n  /** @inheritdoc */\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    this._defaultDrawingOptions = new InkDrawingOptions(\n      uiManager.viewParameters\n    );\n  }\n\n  /** @inheritdoc */\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n\n  /** @inheritdoc */\n  static get supportMultipleDrawings() {\n    return true;\n  }\n\n  /** @inheritdoc */\n  static get typesMap() {\n    return shadow(\n      this,\n      \"typesMap\",\n      new Map([\n        [AnnotationEditorParamsType.INK_THICKNESS, \"stroke-width\"],\n        [AnnotationEditorParamsType.INK_COLOR, \"stroke\"],\n        [AnnotationEditorParamsType.INK_OPACITY, \"stroke-opacity\"],\n      ])\n    );\n  }\n\n  /** @inheritdoc */\n  static createDrawerInstance(x, y, parentWidth, parentHeight, rotation) {\n    return new InkDrawOutliner(\n      x,\n      y,\n      parentWidth,\n      parentHeight,\n      rotation,\n      this._defaultDrawingOptions[\"stroke-width\"]\n    );\n  }\n\n  /** @inheritdoc */\n  static deserializeDraw(\n    pageX,\n    pageY,\n    pageWidth,\n    pageHeight,\n    innerMargin,\n    data\n  ) {\n    return InkDrawOutline.deserialize(\n      pageX,\n      pageY,\n      pageWidth,\n      pageHeight,\n      innerMargin,\n      data\n    );\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          borderStyle: { rawWidth: thickness },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate,\n        },\n        parent: {\n          page: { pageNumber },\n        },\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.INK,\n        color: Array.from(color),\n        thickness,\n        opacity,\n        paths: { points: inkLists },\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate,\n      };\n    }\n\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n\n    return editor;\n  }\n\n  /** @inheritdoc */\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n\n  get colorType() {\n    return AnnotationEditorParamsType.INK_COLOR;\n  }\n\n  get color() {\n    return this._drawingOptions.stroke;\n  }\n\n  get opacity() {\n    return this._drawingOptions[\"stroke-opacity\"];\n  }\n\n  /** @inheritdoc */\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    super.onScaleChanging();\n    const { _drawId, _drawingOptions, parent } = this;\n    _drawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(\n      _drawId,\n      _drawingOptions.toSVGProperties()\n    );\n  }\n\n  static onScaleChangingWhenDrawing() {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n    super.onScaleChangingWhenDrawing();\n    this._defaultDrawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(\n      this._currentDrawId,\n      this._defaultDrawingOptions.toSVGProperties()\n    );\n  }\n\n  /** @inheritdoc */\n  createDrawingOptions({ color, thickness, opacity }) {\n    this._drawingOptions = InkEditor.getDefaultDrawingOptions({\n      stroke: Util.makeHexColor(...color),\n      \"stroke-width\": thickness,\n      \"stroke-opacity\": opacity,\n    });\n  }\n\n  /** @inheritdoc */\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n\n    const { lines, points } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: {\n        stroke,\n        \"stroke-opacity\": opacity,\n        \"stroke-width\": thickness,\n      },\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color: AnnotationEditor._colorManager.convert(stroke),\n      opacity,\n      thickness,\n      paths: {\n        lines,\n        points,\n      },\n    });\n    this.addComment(serialized);\n\n    if (isForCopying) {\n      serialized.isCopy = true;\n      return serialized;\n    }\n\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n\n  #hasElementChanged(serialized) {\n    const { color, thickness, opacity, pageIndex } = this._initialData;\n    return (\n      this.hasEditedComment ||\n      this._hasBeenMoved ||\n      this._hasBeenResized ||\n      serialized.color.some((c, i) => c !== color[i]) ||\n      serialized.thickness !== thickness ||\n      serialized.opacity !== opacity ||\n      serialized.pageIndex !== pageIndex\n    );\n  }\n\n  /** @inheritdoc */\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    const { points, rect } = this.serializeDraw(/* isForCopying = */ false);\n    annotation.updateEdited({\n      rect,\n      thickness: this._drawingOptions[\"stroke-width\"],\n      points,\n      popup: this.comment,\n    });\n\n    return null;\n  }\n}\n\nexport { InkDrawingOptions, InkEditor };\n", "/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InkDrawOutline } from \"./inkdraw.js\";\n\nclass ContourDrawOutline extends InkDrawOutline {\n  toSVGPath() {\n    let path = super.toSVGPath();\n    if (!path.endsWith(\"Z\")) {\n      path += \"Z\";\n    }\n    return path;\n  }\n}\n\nexport { ContourDrawOutline };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fromBase64Util, toBase64Util, warn } from \"../../../shared/util.js\";\nimport { ContourDrawOutline } from \"./contour.js\";\nimport { InkDrawOutline } from \"./inkdraw.js\";\nimport { Outline } from \"./outline.js\";\n\nconst BASE_HEADER_LENGTH = 8;\nconst POINTS_PROPERTIES_NUMBER = 3;\n\n/**\n * Basic text editor in order to create a Signature annotation.\n */\nclass SignatureExtractor {\n  static #PARAMETERS = {\n    maxDim: 512,\n    sigmaSFactor: 0.02,\n    sigmaR: 25,\n    kernelSize: 16,\n  };\n\n  static #neighborIndexToId(i0, j0, i, j) {\n    /*\n      The idea is to map the neighbors of a pixel into a unique id.\n        3 2 1\n        4 X 0\n        5 6 7\n    */\n\n    i -= i0;\n    j -= j0;\n\n    if (i === 0) {\n      return j > 0 ? 0 : 4;\n    }\n\n    if (i === 1) {\n      return j + 6;\n    }\n\n    return 2 - j;\n  }\n\n  static #neighborIdToIndex = new Int32Array([\n    0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1,\n  ]);\n\n  static #clockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (-k + id - offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n\n  static #counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (k + id + offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n\n  static #findContours(buf, width, height, threshold) {\n    // Based on the Suzuki's algorithm:\n    //  https://web.archive.org/web/20231213161741/https://www.nevis.columbia.edu/~vgenty/public/suzuki_et_al.pdf\n\n    const N = buf.length;\n    const types = new Int32Array(N);\n    for (let i = 0; i < N; i++) {\n      types[i] = buf[i] <= threshold ? 1 : 0;\n    }\n\n    for (let i = 1; i < height - 1; i++) {\n      types[i * width] = types[i * width + width - 1] = 0;\n    }\n    for (let i = 0; i < width; i++) {\n      types[i] = types[width * height - 1 - i] = 0;\n    }\n\n    let nbd = 1;\n    let lnbd;\n    const contours = [];\n\n    for (let i = 1; i < height - 1; i++) {\n      lnbd = 1;\n      for (let j = 1; j < width - 1; j++) {\n        const ij = i * width + j;\n        const pix = types[ij];\n        if (pix === 0) {\n          continue;\n        }\n\n        let i2 = i;\n        let j2 = j;\n\n        if (pix === 1 && types[ij - 1] === 0) {\n          // Outer border.\n          nbd += 1;\n          j2 -= 1;\n        } else if (pix >= 1 && types[ij + 1] === 0) {\n          // Hole border.\n          nbd += 1;\n          j2 += 1;\n          if (pix > 1) {\n            lnbd = pix;\n          }\n        } else {\n          if (pix !== 1) {\n            lnbd = Math.abs(pix);\n          }\n          continue;\n        }\n\n        const points = [j, i];\n        const isHole = j2 === j + 1;\n        const contour = {\n          isHole,\n          points,\n          id: nbd,\n          parent: 0,\n        };\n        contours.push(contour);\n\n        let contour0;\n        for (const c of contours) {\n          if (c.id === lnbd) {\n            contour0 = c;\n            break;\n          }\n        }\n\n        if (!contour0) {\n          contour.parent = isHole ? lnbd : 0;\n        } else if (contour0.isHole) {\n          contour.parent = isHole ? contour0.parent : lnbd;\n        } else {\n          contour.parent = isHole ? lnbd : contour0.parent;\n        }\n\n        const k = this.#clockwiseNonZero(types, width, i, j, i2, j2, 0);\n        if (k === -1) {\n          types[ij] = -nbd;\n          if (types[ij] !== 1) {\n            lnbd = Math.abs(types[ij]);\n          }\n          continue;\n        }\n\n        let shiftI = this.#neighborIdToIndex[2 * k];\n        let shiftJ = this.#neighborIdToIndex[2 * k + 1];\n        const i1 = i + shiftI;\n        const j1 = j + shiftJ;\n        i2 = i1;\n        j2 = j1;\n        let i3 = i;\n        let j3 = j;\n\n        while (true) {\n          const kk = this.#counterClockwiseNonZero(\n            types,\n            width,\n            i3,\n            j3,\n            i2,\n            j2,\n            1\n          );\n          shiftI = this.#neighborIdToIndex[2 * kk];\n          shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n          const i4 = i3 + shiftI;\n          const j4 = j3 + shiftJ;\n          points.push(j4, i4);\n          const ij3 = i3 * width + j3;\n          if (types[ij3 + 1] === 0) {\n            types[ij3] = -nbd;\n          } else if (types[ij3] === 1) {\n            types[ij3] = nbd;\n          }\n\n          if (i4 === i && j4 === j && i3 === i1 && j3 === j1) {\n            if (types[ij] !== 1) {\n              lnbd = Math.abs(types[ij]);\n            }\n            break;\n          } else {\n            i2 = i3;\n            j2 = j3;\n            i3 = i4;\n            j3 = j4;\n          }\n        }\n      }\n    }\n    return contours;\n  }\n\n  static #douglasPeuckerHelper(points, start, end, output) {\n    // Based on the Douglas-Peucker algorithm:\n    //  https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm\n    if (end - start <= 4) {\n      for (let i = start; i < end - 2; i += 2) {\n        output.push(points[i], points[i + 1]);\n      }\n      return;\n    }\n\n    const ax = points[start];\n    const ay = points[start + 1];\n    const abx = points[end - 4] - ax;\n    const aby = points[end - 3] - ay;\n    const dist = Math.hypot(abx, aby);\n    const nabx = abx / dist;\n    const naby = aby / dist;\n    const aa = nabx * ay - naby * ax;\n\n    // Guessing the epsilon value.\n    // See \"A novel framework for making dominant point detection methods\n    // non-parametric\".\n    const m = aby / abx;\n    const invS = 1 / dist;\n    const phi = Math.atan(m);\n    const cosPhi = Math.cos(phi);\n    const sinPhi = Math.sin(phi);\n    const tmax = invS * (Math.abs(cosPhi) + Math.abs(sinPhi));\n    const poly = invS * (1 - tmax + tmax ** 2);\n    const partialPhi = Math.max(\n      Math.atan(Math.abs(sinPhi + cosPhi) * poly),\n      Math.atan(Math.abs(sinPhi - cosPhi) * poly)\n    );\n\n    let dmax = 0;\n    let index = start;\n    for (let i = start + 2; i < end - 2; i += 2) {\n      const d = Math.abs(aa - nabx * points[i + 1] + naby * points[i]);\n      if (d > dmax) {\n        index = i;\n        dmax = d;\n      }\n    }\n\n    if (dmax > (dist * partialPhi) ** 2) {\n      this.#douglasPeuckerHelper(points, start, index + 2, output);\n      this.#douglasPeuckerHelper(points, index, end, output);\n    } else {\n      output.push(ax, ay);\n    }\n  }\n\n  static #douglasPeucker(points) {\n    const output = [];\n    const len = points.length;\n    this.#douglasPeuckerHelper(points, 0, len, output);\n    output.push(points[len - 2], points[len - 1]);\n    return output.length <= 4 ? null : output;\n  }\n\n  static #bilateralFilter(buf, width, height, sigmaS, sigmaR, kernelSize) {\n    // The bilateral filter is a nonlinear filter that does spatial averaging.\n    // Its main interest is to preserve edges while removing noise.\n    // See https://en.wikipedia.org/wiki/Bilateral_filter for more details.\n    // sigmaS is the standard deviation of the spatial gaussian.\n    // sigmaR is the standard deviation of the range (in term of pixel\n    // intensity) gaussian.\n\n    // Create a gaussian kernel\n    const kernel = new Float32Array(kernelSize ** 2);\n    const sigmaS2 = -2 * sigmaS ** 2;\n    const halfSize = kernelSize >> 1;\n\n    for (let i = 0; i < kernelSize; i++) {\n      const x = (i - halfSize) ** 2;\n      for (let j = 0; j < kernelSize; j++) {\n        kernel[i * kernelSize + j] = Math.exp(\n          (x + (j - halfSize) ** 2) / sigmaS2\n        );\n      }\n    }\n\n    // Create the range values to be used with the distance between pixels.\n    // It's a way faster with a lookup table than computing the exponential.\n    const rangeValues = new Float32Array(256);\n    const sigmaR2 = -2 * sigmaR ** 2;\n    for (let i = 0; i < 256; i++) {\n      rangeValues[i] = Math.exp(i ** 2 / sigmaR2);\n    }\n\n    const N = buf.length;\n    const out = new Uint8Array(N);\n\n    // We compute the histogram here instead of doing it later: it's slightly\n    // faster.\n    const histogram = new Uint32Array(256);\n    for (let i = 0; i < height; i++) {\n      for (let j = 0; j < width; j++) {\n        const ij = i * width + j;\n        const center = buf[ij];\n        let sum = 0;\n        let norm = 0;\n\n        for (let k = 0; k < kernelSize; k++) {\n          const y = i + k - halfSize;\n          if (y < 0 || y >= height) {\n            continue;\n          }\n          for (let l = 0; l < kernelSize; l++) {\n            const x = j + l - halfSize;\n            if (x < 0 || x >= width) {\n              continue;\n            }\n            const neighbour = buf[y * width + x];\n            const w =\n              kernel[k * kernelSize + l] *\n              rangeValues[Math.abs(neighbour - center)];\n            sum += neighbour * w;\n            norm += w;\n          }\n        }\n\n        const pix = (out[ij] = Math.round(sum / norm));\n        histogram[pix]++;\n      }\n    }\n\n    return [out, histogram];\n  }\n\n  static #getHistogram(buf) {\n    const histogram = new Uint32Array(256);\n    for (const g of buf) {\n      histogram[g]++;\n    }\n    return histogram;\n  }\n\n  static #toUint8(buf) {\n    // We have a RGBA buffer, containing a grayscale image.\n    // We want to convert it into a basic G buffer.\n    // Also, we want to normalize the values between 0 and 255 in order to\n    // increase the contrast.\n    const N = buf.length;\n    const out = new Uint8ClampedArray(N >> 2);\n    let max = -Infinity;\n    let min = Infinity;\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      const pix = (out[i] = buf[i << 2]);\n      max = Math.max(max, pix);\n      min = Math.min(min, pix);\n    }\n    const ratio = 255 / (max - min);\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      out[i] = (out[i] - min) * ratio;\n    }\n\n    return out;\n  }\n\n  static #guessThreshold(histogram) {\n    // We want to find the threshold that will separate the background from the\n    // foreground.\n    // We could have used Otsu's method, but unfortunately it doesn't work well\n    // when the background has too much shade of greys.\n    // So the idea is to find a maximum in the black part of the histogram and\n    // figure out the value which will be the first one of the white part.\n\n    let i;\n    let M = -Infinity;\n    let L = -Infinity;\n    const min = histogram.findIndex(v => v !== 0);\n    let pos = min;\n    let spos = min;\n    for (i = min; i < 256; i++) {\n      const v = histogram[i];\n      if (v > M) {\n        if (i - pos > L) {\n          L = i - pos;\n          spos = i - 1;\n        }\n        M = v;\n        pos = i;\n      }\n    }\n    for (i = spos - 1; i >= 0; i--) {\n      if (histogram[i] > histogram[i + 1]) {\n        break;\n      }\n    }\n\n    return i;\n  }\n\n  static #getGrayPixels(bitmap) {\n    const originalBitmap = bitmap;\n    const { width, height } = bitmap;\n    const { maxDim } = this.#PARAMETERS;\n    let newWidth = width;\n    let newHeight = height;\n\n    if (width > maxDim || height > maxDim) {\n      let prevWidth = width;\n      let prevHeight = height;\n\n      let steps = Math.log2(Math.max(width, height) / maxDim);\n      const isteps = Math.floor(steps);\n      steps = steps === isteps ? isteps - 1 : isteps;\n      for (let i = 0; i < steps; i++) {\n        newWidth = Math.ceil(prevWidth / 2);\n        newHeight = Math.ceil(prevHeight / 2);\n\n        const offscreen = new OffscreenCanvas(newWidth, newHeight);\n        const ctx = offscreen.getContext(\"2d\");\n        ctx.drawImage(\n          bitmap,\n          0,\n          0,\n          prevWidth,\n          prevHeight,\n          0,\n          0,\n          newWidth,\n          newHeight\n        );\n        prevWidth = newWidth;\n        prevHeight = newHeight;\n\n        // Release the resources associated with the bitmap.\n        if (bitmap !== originalBitmap) {\n          bitmap.close();\n        }\n        bitmap = offscreen.transferToImageBitmap();\n      }\n\n      const ratio = Math.min(maxDim / newWidth, maxDim / newHeight);\n      newWidth = Math.round(newWidth * ratio);\n      newHeight = Math.round(newHeight * ratio);\n    }\n    const offscreen = new OffscreenCanvas(newWidth, newHeight);\n    const ctx = offscreen.getContext(\"2d\", { willReadFrequently: true });\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, newWidth, newHeight);\n    ctx.filter = \"grayscale(1)\";\n    ctx.drawImage(\n      bitmap,\n      0,\n      0,\n      bitmap.width,\n      bitmap.height,\n      0,\n      0,\n      newWidth,\n      newHeight\n    );\n    const grayImage = ctx.getImageData(0, 0, newWidth, newHeight).data;\n    const uint8Buf = this.#toUint8(grayImage);\n\n    return [uint8Buf, newWidth, newHeight];\n  }\n\n  static extractContoursFromText(\n    text,\n    { fontFamily, fontStyle, fontWeight },\n    pageWidth,\n    pageHeight,\n    rotation,\n    innerMargin\n  ) {\n    let canvas = new OffscreenCanvas(1, 1);\n    let ctx = canvas.getContext(\"2d\", { alpha: false });\n    const fontSize = 200;\n    const font =\n      (ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`);\n    const {\n      actualBoundingBoxLeft,\n      actualBoundingBoxRight,\n      actualBoundingBoxAscent,\n      actualBoundingBoxDescent,\n      fontBoundingBoxAscent,\n      fontBoundingBoxDescent,\n      width,\n    } = ctx.measureText(text);\n\n    // We rescale the canvas to make \"sure\" the text fits.\n    const SCALE = 1.5;\n    const canvasWidth = Math.ceil(\n      Math.max(\n        Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0,\n        width\n      ) * SCALE\n    );\n    const canvasHeight = Math.ceil(\n      Math.max(\n        Math.abs(actualBoundingBoxAscent) +\n          Math.abs(actualBoundingBoxDescent) || fontSize,\n        Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) ||\n          fontSize\n      ) * SCALE\n    );\n    canvas = new OffscreenCanvas(canvasWidth, canvasHeight);\n    ctx = canvas.getContext(\"2d\", { alpha: true, willReadFrequently: true });\n    ctx.font = font;\n    ctx.filter = \"grayscale(1)\";\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n    ctx.fillStyle = \"black\";\n    ctx.fillText(\n      text,\n      (canvasWidth * (SCALE - 1)) / 2,\n      (canvasHeight * (3 - SCALE)) / 2\n    );\n\n    const uint8Buf = this.#toUint8(\n      ctx.getImageData(0, 0, canvasWidth, canvasHeight).data\n    );\n    const histogram = this.#getHistogram(uint8Buf);\n    const threshold = this.#guessThreshold(histogram);\n\n    const contourList = this.#findContours(\n      uint8Buf,\n      canvasWidth,\n      canvasHeight,\n      threshold\n    );\n\n    return this.processDrawnLines({\n      lines: { curves: contourList, width: canvasWidth, height: canvasHeight },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true,\n    });\n  }\n\n  static process(bitmap, pageWidth, pageHeight, rotation, innerMargin) {\n    const [uint8Buf, width, height] = this.#getGrayPixels(bitmap);\n    const [buffer, histogram] = this.#bilateralFilter(\n      uint8Buf,\n      width,\n      height,\n      Math.hypot(width, height) * this.#PARAMETERS.sigmaSFactor,\n      this.#PARAMETERS.sigmaR,\n      this.#PARAMETERS.kernelSize\n    );\n\n    const threshold = this.#guessThreshold(histogram);\n    const contourList = this.#findContours(buffer, width, height, threshold);\n\n    return this.processDrawnLines({\n      lines: { curves: contourList, width, height },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true,\n    });\n  }\n\n  static processDrawnLines({\n    lines,\n    pageWidth,\n    pageHeight,\n    rotation,\n    innerMargin,\n    mustSmooth,\n    areContours,\n  }) {\n    if (rotation % 180 !== 0) {\n      [pageWidth, pageHeight] = [pageHeight, pageWidth];\n    }\n\n    const { curves, width, height } = lines;\n    const thickness = lines.thickness ?? 0;\n    const linesAndPoints = [];\n    const ratio = Math.min(pageWidth / width, pageHeight / height);\n    const xScale = ratio / pageWidth;\n    const yScale = ratio / pageHeight;\n    const newCurves = [];\n\n    for (const { points } of curves) {\n      const reducedPoints = mustSmooth ? this.#douglasPeucker(points) : points;\n      if (!reducedPoints) {\n        continue;\n      }\n      newCurves.push(reducedPoints);\n\n      const len = reducedPoints.length;\n      const newPoints = new Float32Array(len);\n      const line = new Float32Array(3 * (len === 2 ? 2 : len - 2));\n      linesAndPoints.push({ line, points: newPoints });\n\n      if (len === 2) {\n        newPoints[0] = reducedPoints[0] * xScale;\n        newPoints[1] = reducedPoints[1] * yScale;\n        line.set([NaN, NaN, NaN, NaN, newPoints[0], newPoints[1]], 0);\n        continue;\n      }\n\n      let [x1, y1, x2, y2] = reducedPoints;\n      x1 *= xScale;\n      y1 *= yScale;\n      x2 *= xScale;\n      y2 *= yScale;\n      newPoints.set([x1, y1, x2, y2], 0);\n\n      line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n      for (let i = 4; i < len; i += 2) {\n        const x = (newPoints[i] = reducedPoints[i] * xScale);\n        const y = (newPoints[i + 1] = reducedPoints[i + 1] * yScale);\n        line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);\n        [x1, y1, x2, y2] = [x2, y2, x, y];\n      }\n    }\n\n    if (linesAndPoints.length === 0) {\n      return null;\n    }\n\n    const outline = areContours\n      ? new ContourDrawOutline()\n      : new InkDrawOutline();\n\n    outline.build(\n      linesAndPoints,\n      pageWidth,\n      pageHeight,\n      1,\n      rotation,\n      areContours ? 0 : thickness,\n      innerMargin\n    );\n\n    return { outline, newCurves, areContours, thickness, width, height };\n  }\n\n  static async compressSignature({\n    outlines,\n    areContours,\n    thickness,\n    width,\n    height,\n  }) {\n    // We create a single array containing all the outlines.\n    // The format is the following:\n    // - 4 bytes: data length.\n    // - 4 bytes: version.\n    // - 4 bytes: width.\n    // - 4 bytes: height.\n    // - 4 bytes: 0 if it's a contour, 1 if it's an ink.\n    // - 4 bytes: thickness.\n    // - 4 bytes: number of drawings.\n    // - 4 bytes: size of the buffer containing the diff of the coordinates.\n    // - 4 bytes: number of points in the first drawing.\n    // - 4 bytes: x coordinate of the first point.\n    // - 4 bytes: y coordinate of the first point.\n    // - 4 bytes: number of points in the second drawing.\n    // - 4 bytes: x coordinate of the first point.\n    // - 4 bytes: y coordinate of the first point.\n    // - ...\n    // - The buffer containing the diff of the coordinates.\n\n    // The coordinates are supposed to be positive integers.\n\n    // We also compute the min and max difference between two points.\n    // This will help us to determine the type of the buffer (Int8, Int16 or\n    // Int32) in order to minimize the amount of data we have.\n    let minDiff = Infinity;\n    let maxDiff = -Infinity;\n    let outlinesLength = 0;\n    for (const points of outlines) {\n      outlinesLength += points.length;\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        const dx = points[i] - points[i - 2];\n        minDiff = Math.min(minDiff, dx);\n        maxDiff = Math.max(maxDiff, dx);\n      }\n    }\n\n    let bufferType;\n    if (minDiff >= -128 && maxDiff <= 127) {\n      bufferType = Int8Array;\n    } else if (minDiff >= -32768 && maxDiff <= 32767) {\n      bufferType = Int16Array;\n    } else {\n      bufferType = Int32Array;\n    }\n\n    const len = outlines.length;\n    const headerLength = BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * len;\n    const header = new Uint32Array(headerLength);\n\n    let offset = 0;\n    header[offset++] =\n      headerLength * Uint32Array.BYTES_PER_ELEMENT +\n      (outlinesLength - 2 * len) * bufferType.BYTES_PER_ELEMENT;\n    header[offset++] = 0; // Version.\n    header[offset++] = width;\n    header[offset++] = height;\n    header[offset++] = areContours ? 0 : 1;\n    header[offset++] = Math.max(0, Math.floor(thickness ?? 0));\n    header[offset++] = len;\n    header[offset++] = bufferType.BYTES_PER_ELEMENT;\n    for (const points of outlines) {\n      header[offset++] = points.length - 2;\n      header[offset++] = points[0];\n      header[offset++] = points[1];\n    }\n\n    const cs = new CompressionStream(\"deflate-raw\");\n    const writer = cs.writable.getWriter();\n    await writer.ready;\n\n    writer.write(header);\n    const BufferCtor = bufferType.prototype.constructor;\n    for (const points of outlines) {\n      const diffs = new BufferCtor(points.length - 2);\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        diffs[i - 2] = points[i] - points[i - 2];\n      }\n      writer.write(diffs);\n    }\n\n    writer.close();\n\n    const buf = await new Response(cs.readable).arrayBuffer();\n    const bytes = new Uint8Array(buf);\n\n    return toBase64Util(bytes);\n  }\n\n  static async decompressSignature(signatureData) {\n    try {\n      const bytes = fromBase64Util(signatureData);\n      const { readable, writable } = new DecompressionStream(\"deflate-raw\");\n      const writer = writable.getWriter();\n      await writer.ready;\n\n      // We can't await writer.write() because it'll block until the reader\n      // starts which happens few lines below.\n      writer\n        .write(bytes)\n        .then(async () => {\n          await writer.ready;\n          await writer.close();\n        })\n        .catch(() => {});\n\n      let data = null;\n      let offset = 0;\n      for await (const chunk of readable) {\n        data ||= new Uint8Array(new Uint32Array(chunk.buffer, 0, 4)[0]);\n        data.set(chunk, offset);\n        offset += chunk.length;\n      }\n\n      // We take a bit too much data for the header but it's fine.\n      const header = new Uint32Array(data.buffer, 0, data.length >> 2);\n      const version = header[1];\n      if (version !== 0) {\n        throw new Error(`Invalid version: ${version}`);\n      }\n      const width = header[2];\n      const height = header[3];\n      const areContours = header[4] === 0;\n      const thickness = header[5];\n      const numberOfDrawings = header[6];\n      const bufferType = header[7];\n      const outlines = [];\n      const diffsOffset =\n        (BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * numberOfDrawings) *\n        Uint32Array.BYTES_PER_ELEMENT;\n      let diffs;\n\n      switch (bufferType) {\n        case Int8Array.BYTES_PER_ELEMENT:\n          diffs = new Int8Array(data.buffer, diffsOffset);\n          break;\n        case Int16Array.BYTES_PER_ELEMENT:\n          diffs = new Int16Array(data.buffer, diffsOffset);\n          break;\n        case Int32Array.BYTES_PER_ELEMENT:\n          diffs = new Int32Array(data.buffer, diffsOffset);\n          break;\n      }\n\n      offset = 0;\n      for (let i = 0; i < numberOfDrawings; i++) {\n        const len = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH];\n        const points = new Float32Array(len + 2);\n        outlines.push(points);\n\n        for (let j = 0; j < POINTS_PROPERTIES_NUMBER - 1; j++) {\n          points[j] =\n            header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH + j + 1];\n        }\n        for (let j = 0; j < len; j++) {\n          points[j + 2] = points[j] + diffs[offset++];\n        }\n      }\n\n      return {\n        areContours,\n        thickness,\n        outlines,\n        width,\n        height,\n      };\n    } catch (e) {\n      warn(`decompressSignature: ${e}`);\n      return null;\n    }\n  }\n}\n\nexport { SignatureExtractor };\n", "/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationEditorType, shadow } from \"../../shared/util.js\";\nimport { DrawingEditor, DrawingOptions } from \"./draw.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { ContourDrawOutline } from \"./drawers/contour.js\";\nimport { InkDrawingOptions } from \"./ink.js\";\nimport { InkDrawOutline } from \"./drawers/inkdraw.js\";\nimport { SignatureExtractor } from \"./drawers/signaturedraw.js\";\n\nclass SignatureOptions extends DrawingOptions {\n  constructor() {\n    super();\n\n    super.updateProperties({\n      fill: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 0,\n    });\n  }\n\n  clone() {\n    const clone = new SignatureOptions();\n    clone.updateAll(this);\n    return clone;\n  }\n}\n\nclass DrawnSignatureOptions extends InkDrawingOptions {\n  constructor(viewerParameters) {\n    super(viewerParameters);\n\n    super.updateProperties({\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 1,\n    });\n  }\n\n  clone() {\n    const clone = new DrawnSignatureOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\n\n/**\n * Basic editor in order to generate an Stamp annotation annotation containing\n * a signature drawing.\n */\nclass SignatureEditor extends DrawingEditor {\n  #isExtracted = false;\n\n  #description = null;\n\n  #signatureData = null;\n\n  #signatureUUID = null;\n\n  static _type = \"signature\";\n\n  static _editorType = AnnotationEditorType.SIGNATURE;\n\n  static _defaultDrawingOptions = null;\n\n  constructor(params) {\n    super({ ...params, mustBeCommitted: true, name: \"signatureEditor\" });\n    this._willKeepAspectRatio = true;\n    this.#signatureData = params.signatureData || null;\n    this.#description = null;\n    this.defaultL10nId = \"pdfjs-editor-signature-editor1\";\n  }\n\n  /** @inheritdoc */\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n\n    this._defaultDrawingOptions = new SignatureOptions();\n    this._defaultDrawnSignatureOptions = new DrawnSignatureOptions(\n      uiManager.viewParameters\n    );\n  }\n\n  /** @inheritdoc */\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n\n  /** @inheritdoc */\n  static get supportMultipleDrawings() {\n    return false;\n  }\n\n  static get typesMap() {\n    return shadow(this, \"typesMap\", new Map());\n  }\n\n  static get isDrawer() {\n    return false;\n  }\n\n  /** @inheritdoc */\n  get telemetryFinalData() {\n    return {\n      type: \"signature\",\n      hasDescription: !!this.#description,\n    };\n  }\n\n  static computeTelemetryFinalData(data) {\n    const hasDescriptionStats = data.get(\"hasDescription\");\n    return {\n      hasAltText: hasDescriptionStats.get(true) ?? 0,\n      hasNoAltText: hasDescriptionStats.get(false) ?? 0,\n    };\n  }\n\n  /** @inheritdoc */\n  get isResizable() {\n    return true;\n  }\n\n  /** @inheritdoc */\n  onScaleChanging() {\n    if (this._drawId === null) {\n      return;\n    }\n    super.onScaleChanging();\n  }\n\n  /** @inheritdoc */\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n\n    let baseX, baseY;\n    const { _isCopy } = this;\n    if (_isCopy) {\n      // No need to adjust the position when rendering in DrawingEditor.\n      this._isCopy = false;\n      baseX = this.x;\n      baseY = this.y;\n    }\n\n    super.render();\n\n    if (this._drawId === null) {\n      if (this.#signatureData) {\n        const {\n          lines,\n          mustSmooth,\n          areContours,\n          description,\n          uuid,\n          heightInPage,\n        } = this.#signatureData;\n        const {\n          rawDims: { pageWidth, pageHeight },\n          rotation,\n        } = this.parent.viewport;\n        const outline = SignatureExtractor.processDrawnLines({\n          lines,\n          pageWidth,\n          pageHeight,\n          rotation,\n          innerMargin: SignatureEditor._INNER_MARGIN,\n          mustSmooth,\n          areContours,\n        });\n        this.addSignature(outline, heightInPage, description, uuid);\n      } else {\n        // Avoid Firefox crashing (with a local build) because the description\n        // parameter is missing.\n        this.div.setAttribute(\n          \"data-l10n-args\",\n          JSON.stringify({ description: \"\" })\n        );\n        this.div.hidden = true;\n        this._uiManager.getSignature(this);\n      }\n    } else {\n      this.div.setAttribute(\n        \"data-l10n-args\",\n        JSON.stringify({ description: this.#description || \"\" })\n      );\n    }\n\n    if (_isCopy) {\n      this._isCopy = true;\n      this._moveAfterPaste(baseX, baseY);\n    }\n\n    return this.div;\n  }\n\n  setUuid(uuid) {\n    this.#signatureUUID = uuid;\n    this.addEditToolbar();\n  }\n\n  getUuid() {\n    return this.#signatureUUID;\n  }\n\n  get description() {\n    return this.#description;\n  }\n\n  set description(description) {\n    this.#description = description;\n    if (!this.div) {\n      return;\n    }\n    this.div.setAttribute(\"data-l10n-args\", JSON.stringify({ description }));\n    super.addEditToolbar().then(toolbar => {\n      toolbar?.updateEditSignatureButton(description);\n    });\n  }\n\n  getSignaturePreview() {\n    const { newCurves, areContours, thickness, width, height } =\n      this.#signatureData;\n    const maxDim = Math.max(width, height);\n    const outlineData = SignatureExtractor.processDrawnLines({\n      lines: {\n        curves: newCurves.map(points => ({ points })),\n        thickness,\n        width,\n        height,\n      },\n      pageWidth: maxDim,\n      pageHeight: maxDim,\n      rotation: 0,\n      innerMargin: 0,\n      mustSmooth: false,\n      areContours,\n    });\n    return { areContours, outline: outlineData.outline };\n  }\n\n  /** @inheritdoc */\n  get toolbarButtons() {\n    if (this._uiManager.signatureManager) {\n      return [[\"editSignature\", this._uiManager.signatureManager]];\n    }\n    return super.toolbarButtons;\n  }\n\n  addSignature(data, heightInPage, description, uuid) {\n    const { x: savedX, y: savedY } = this;\n    const { outline } = (this.#signatureData = data);\n    this.#isExtracted = outline instanceof ContourDrawOutline;\n    this.description = description;\n    let drawingOptions;\n    if (this.#isExtracted) {\n      drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();\n      drawingOptions.updateProperties({ \"stroke-width\": outline.thickness });\n    }\n    this._addOutlines({\n      drawOutlines: outline,\n      drawingOptions,\n    });\n    const [, pageHeight] = this.pageDimensions;\n    let newHeight = heightInPage / pageHeight;\n    // Ensure the signature doesn't exceed the page height.\n    // If the signature is too big, we scale it down to 50% of the page height.\n    newHeight = newHeight >= 1 ? 0.5 : newHeight;\n\n    this.width *= newHeight / this.height;\n    if (this.width >= 1) {\n      newHeight *= 0.9 / this.width;\n      this.width = 0.9;\n    }\n\n    this.height = newHeight;\n    this.setDims();\n    this.x = savedX;\n    this.y = savedY;\n    this.center();\n\n    this._onResized();\n    this.onScaleChanging();\n    this.rotate();\n    this._uiManager.addToAnnotationStorage(this);\n    this.setUuid(uuid);\n\n    this._reportTelemetry({\n      action: \"pdfjs.signature.inserted\",\n      data: {\n        hasBeenSaved: !!uuid,\n        hasDescription: !!description,\n      },\n    });\n\n    this.div.hidden = false;\n  }\n\n  getFromImage(bitmap) {\n    const {\n      rawDims: { pageWidth, pageHeight },\n      rotation,\n    } = this.parent.viewport;\n    return SignatureExtractor.process(\n      bitmap,\n      pageWidth,\n      pageHeight,\n      rotation,\n      SignatureEditor._INNER_MARGIN\n    );\n  }\n\n  getFromText(text, fontInfo) {\n    const {\n      rawDims: { pageWidth, pageHeight },\n      rotation,\n    } = this.parent.viewport;\n    return SignatureExtractor.extractContoursFromText(\n      text,\n      fontInfo,\n      pageWidth,\n      pageHeight,\n      rotation,\n      SignatureEditor._INNER_MARGIN\n    );\n  }\n\n  getDrawnSignature(curves) {\n    const {\n      rawDims: { pageWidth, pageHeight },\n      rotation,\n    } = this.parent.viewport;\n    return SignatureExtractor.processDrawnLines({\n      lines: curves,\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin: SignatureEditor._INNER_MARGIN,\n      mustSmooth: false,\n      areContours: false,\n    });\n  }\n\n  /** @inheritdoc */\n  createDrawingOptions({ areContours, thickness }) {\n    if (areContours) {\n      this._drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      this._drawingOptions =\n        SignatureEditor._defaultDrawnSignatureOptions.clone();\n      this._drawingOptions.updateProperties({ \"stroke-width\": thickness });\n    }\n  }\n\n  /** @inheritdoc */\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n\n    const { lines, points } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: { \"stroke-width\": thickness },\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      isSignature: true,\n      areContours: this.#isExtracted,\n      color: [0, 0, 0],\n      thickness: this.#isExtracted ? 0 : thickness,\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.paths = { lines, points };\n      serialized.uuid = this.#signatureUUID;\n      serialized.isCopy = true;\n    } else {\n      serialized.lines = lines;\n    }\n    if (this.#description) {\n      serialized.accessibilityData = { type: \"Figure\", alt: this.#description };\n    }\n    return serialized;\n  }\n\n  /** @inheritdoc */\n  static deserializeDraw(\n    pageX,\n    pageY,\n    pageWidth,\n    pageHeight,\n    innerMargin,\n    data\n  ) {\n    if (data.areContours) {\n      return ContourDrawOutline.deserialize(\n        pageX,\n        pageY,\n        pageWidth,\n        pageHeight,\n        innerMargin,\n        data\n      );\n    }\n\n    return InkDrawOutline.deserialize(\n      pageX,\n      pageY,\n      pageWidth,\n      pageHeight,\n      innerMargin,\n      data\n    );\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#isExtracted = data.areContours;\n    editor.description = data.accessibilityData?.alt || \"\";\n    editor.#signatureUUID = data.uuid;\n    return editor;\n  }\n}\n\nexport { SignatureEditor };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationEditorType, AnnotationPrefix } from \"../../shared/util.js\";\nimport {\n  ColorScheme,\n  OutputScale,\n  PixelsPerInch,\n  SupportedImageMimeTypes,\n} from \"../display_utils.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { StampAnnotationElement } from \"../annotation_layer.js\";\n\n/**\n * Basic text editor in order to create a FreeTex annotation.\n */\nclass StampEditor extends AnnotationEditor {\n  #bitmap = null;\n\n  #bitmapId = null;\n\n  #bitmapPromise = null;\n\n  #bitmapUrl = null;\n\n  #bitmapFile = null;\n\n  #bitmapFileName = \"\";\n\n  #canvas = null;\n\n  #missingCanvas = false;\n\n  #resizeTimeoutId = null;\n\n  #isSvg = false;\n\n  #hasBeenAddedInUndoStack = false;\n\n  static _type = \"stamp\";\n\n  static _editorType = AnnotationEditorType.STAMP;\n\n  constructor(params) {\n    super({ ...params, name: \"stampEditor\" });\n    this.#bitmapUrl = params.bitmapUrl;\n    this.#bitmapFile = params.bitmapFile;\n    this.defaultL10nId = \"pdfjs-editor-stamp-editor\";\n  }\n\n  /** @inheritdoc */\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n  }\n\n  /** @inheritdoc */\n  static isHandlingMimeForPasting(mime) {\n    return SupportedImageMimeTypes.includes(mime);\n  }\n\n  /** @inheritdoc */\n  static paste(item, parent) {\n    parent.pasteEditor(\n      { mode: AnnotationEditorType.STAMP },\n      { bitmapFile: item.getAsFile() }\n    );\n  }\n\n  /** @inheritdoc */\n  altTextFinish() {\n    if (this._uiManager.useNewAltTextFlow) {\n      this.div.hidden = false;\n    }\n    super.altTextFinish();\n  }\n\n  /** @inheritdoc */\n  get telemetryFinalData() {\n    return {\n      type: \"stamp\",\n      hasAltText: !!this.altTextData?.altText,\n    };\n  }\n\n  static computeTelemetryFinalData(data) {\n    const hasAltTextStats = data.get(\"hasAltText\");\n    return {\n      hasAltText: hasAltTextStats.get(true) ?? 0,\n      hasNoAltText: hasAltTextStats.get(false) ?? 0,\n    };\n  }\n\n  #getBitmapFetched(data, fromId = false) {\n    if (!data) {\n      this.remove();\n      return;\n    }\n    this.#bitmap = data.bitmap;\n    if (!fromId) {\n      this.#bitmapId = data.id;\n      this.#isSvg = data.isSvg;\n    }\n    if (data.file) {\n      this.#bitmapFileName = data.file.name;\n    }\n    this.#createCanvas();\n  }\n\n  #getBitmapDone() {\n    this.#bitmapPromise = null;\n    this._uiManager.enableWaiting(false);\n    if (!this.#canvas) {\n      return;\n    }\n    if (\n      this._uiManager.useNewAltTextWhenAddingImage &&\n      this._uiManager.useNewAltTextFlow &&\n      this.#bitmap\n    ) {\n      this.addEditToolbar().then(() => {\n        this._editToolbar.hide();\n        this._uiManager.editAltText(this, /* firstTime = */ true);\n      });\n      return;\n    }\n\n    if (\n      !this._uiManager.useNewAltTextWhenAddingImage &&\n      this._uiManager.useNewAltTextFlow &&\n      this.#bitmap\n    ) {\n      this._reportTelemetry({\n        action: \"pdfjs.image.image_added\",\n        data: { alt_text_modal: false, alt_text_type: \"empty\" },\n      });\n      try {\n        // The alt-text dialog isn't opened but we still want to guess the alt\n        // text.\n        this.mlGuessAltText();\n      } catch {}\n    }\n\n    this.div.focus();\n  }\n\n  async mlGuessAltText(imageData = null, updateAltTextData = true) {\n    if (this.hasAltTextData()) {\n      return null;\n    }\n\n    const { mlManager } = this._uiManager;\n    if (!mlManager) {\n      throw new Error(\"No ML.\");\n    }\n    if (!(await mlManager.isEnabledFor(\"altText\"))) {\n      throw new Error(\"ML isn't enabled for alt text.\");\n    }\n    const { data, width, height } =\n      imageData ||\n      this.copyCanvas(null, null, /* createImageData = */ true).imageData;\n    const response = await mlManager.guess({\n      name: \"altText\",\n      request: {\n        data,\n        width,\n        height,\n        channels: data.length / (width * height),\n      },\n    });\n    if (!response) {\n      throw new Error(\"No response from the AI service.\");\n    }\n    if (response.error) {\n      throw new Error(\"Error from the AI service.\");\n    }\n    if (response.cancel) {\n      return null;\n    }\n    if (!response.output) {\n      throw new Error(\"No valid response from the AI service.\");\n    }\n    const altText = response.output;\n    await this.setGuessedAltText(altText);\n    if (updateAltTextData && !this.hasAltTextData()) {\n      this.altTextData = { alt: altText, decorative: false };\n    }\n    return altText;\n  }\n\n  #getBitmap() {\n    if (this.#bitmapId) {\n      this._uiManager.enableWaiting(true);\n      this._uiManager.imageManager\n        .getFromId(this.#bitmapId)\n        .then(data => this.#getBitmapFetched(data, /* fromId = */ true))\n        .finally(() => this.#getBitmapDone());\n      return;\n    }\n\n    if (this.#bitmapUrl) {\n      const url = this.#bitmapUrl;\n      this.#bitmapUrl = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager\n        .getFromUrl(url)\n        .then(data => this.#getBitmapFetched(data))\n        .finally(() => this.#getBitmapDone());\n      return;\n    }\n\n    if (this.#bitmapFile) {\n      const file = this.#bitmapFile;\n      this.#bitmapFile = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager\n        .getFromFile(file)\n        .then(data => this.#getBitmapFetched(data))\n        .finally(() => this.#getBitmapDone());\n      return;\n    }\n\n    const input = document.createElement(\"input\");\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      input.hidden = true;\n      input.id = \"stampEditorFileInput\";\n      document.body.append(input);\n    }\n    input.type = \"file\";\n    input.accept = SupportedImageMimeTypes.join(\",\");\n    const signal = this._uiManager._signal;\n    this.#bitmapPromise = new Promise(resolve => {\n      input.addEventListener(\n        \"change\",\n        async () => {\n          if (!input.files || input.files.length === 0) {\n            this.remove();\n          } else {\n            this._uiManager.enableWaiting(true);\n            const data = await this._uiManager.imageManager.getFromFile(\n              input.files[0]\n            );\n            this._reportTelemetry({\n              action: \"pdfjs.image.image_selected\",\n              data: { alt_text_modal: this._uiManager.useNewAltTextFlow },\n            });\n            this.#getBitmapFetched(data);\n          }\n          if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n            input.remove();\n          }\n          resolve();\n        },\n        { signal }\n      );\n      input.addEventListener(\n        \"cancel\",\n        () => {\n          this.remove();\n          resolve();\n        },\n        { signal }\n      );\n    }).finally(() => this.#getBitmapDone());\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"TESTING\")) {\n      input.click();\n    }\n  }\n\n  /** @inheritdoc */\n  remove() {\n    if (this.#bitmapId) {\n      this.#bitmap = null;\n      this._uiManager.imageManager.deleteId(this.#bitmapId);\n      this.#canvas?.remove();\n      this.#canvas = null;\n      if (this.#resizeTimeoutId) {\n        clearTimeout(this.#resizeTimeoutId);\n        this.#resizeTimeoutId = null;\n      }\n    }\n    super.remove();\n  }\n\n  /** @inheritdoc */\n  rebuild() {\n    if (!this.parent) {\n      // It's possible to have to rebuild an editor which is not on a visible\n      // page.\n      if (this.#bitmapId) {\n        this.#getBitmap();\n      }\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n\n    if (this.#bitmapId && this.#canvas === null) {\n      this.#getBitmap();\n    }\n\n    if (!this.isAttachedToDOM) {\n      // At some point this editor was removed and we're rebuilting it,\n      // hence we must add it to its parent.\n      this.parent.add(this);\n    }\n  }\n\n  /** @inheritdoc */\n  onceAdded(focus) {\n    this._isDraggable = true;\n    if (focus) {\n      this.div.focus();\n    }\n  }\n\n  /** @inheritdoc */\n  isEmpty() {\n    return !(\n      this.#bitmapPromise ||\n      this.#bitmap ||\n      this.#bitmapUrl ||\n      this.#bitmapFile ||\n      this.#bitmapId ||\n      this.#missingCanvas\n    );\n  }\n\n  /** @inheritdoc */\n  get toolbarButtons() {\n    return [[\"altText\", this.createAltText()]];\n  }\n\n  /** @inheritdoc */\n  get isResizable() {\n    return true;\n  }\n\n  /** @inheritdoc */\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n\n    super.render();\n    this.div.hidden = true;\n\n    this.createAltText();\n\n    if (!this.#missingCanvas) {\n      if (this.#bitmap) {\n        this.#createCanvas();\n      } else {\n        this.#getBitmap();\n      }\n    }\n\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n\n    this._uiManager.addShouldRescale(this);\n\n    return this.div;\n  }\n\n  setCanvas(annotationElementId, canvas) {\n    const { id: bitmapId, bitmap } = this._uiManager.imageManager.getFromCanvas(\n      annotationElementId,\n      canvas\n    );\n    canvas.remove();\n    if (bitmapId && this._uiManager.imageManager.isValidId(bitmapId)) {\n      this.#bitmapId = bitmapId;\n      if (bitmap) {\n        this.#bitmap = bitmap;\n      }\n      this.#missingCanvas = false;\n      this.#createCanvas();\n    }\n  }\n\n  /** @inheritdoc */\n  _onResized() {\n    // We used a CSS-zoom during the resizing, but now it's resized we can\n    // rescale correctly the bitmap to fit the new dimensions.\n    this.onScaleChanging();\n  }\n\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    if (this.#resizeTimeoutId !== null) {\n      clearTimeout(this.#resizeTimeoutId);\n    }\n    // The user's zooming the page, there is no need to redraw the bitmap at\n    // each step, hence we wait a bit before redrawing it.\n    const TIME_TO_WAIT = 200;\n    this.#resizeTimeoutId = setTimeout(() => {\n      this.#resizeTimeoutId = null;\n      this.#drawBitmap();\n    }, TIME_TO_WAIT);\n  }\n\n  #createCanvas() {\n    const { div } = this;\n    let { width, height } = this.#bitmap;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const MAX_RATIO = 0.75;\n    if (this.width) {\n      width = this.width * pageWidth;\n      height = this.height * pageHeight;\n    } else if (\n      width > MAX_RATIO * pageWidth ||\n      height > MAX_RATIO * pageHeight\n    ) {\n      // If the image is too big compared to the page dimensions\n      // (more than MAX_RATIO) then we scale it down.\n      const factor = Math.min(\n        (MAX_RATIO * pageWidth) / width,\n        (MAX_RATIO * pageHeight) / height\n      );\n      width *= factor;\n      height *= factor;\n    }\n\n    this._uiManager.enableWaiting(false);\n    const canvas = (this.#canvas = document.createElement(\"canvas\"));\n    canvas.setAttribute(\"role\", \"img\");\n    this.addContainer(canvas);\n\n    this.width = width / pageWidth;\n    this.height = height / pageHeight;\n    this.setDims();\n\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    } else {\n      this.fixAndSetPosition();\n    }\n    this._initialOptions = null;\n\n    if (\n      !this._uiManager.useNewAltTextWhenAddingImage ||\n      !this._uiManager.useNewAltTextFlow ||\n      this.annotationElementId\n    ) {\n      div.hidden = false;\n    }\n    this.#drawBitmap();\n    if (!this.#hasBeenAddedInUndoStack) {\n      this.parent.addUndoableEditor(this);\n      this.#hasBeenAddedInUndoStack = true;\n    }\n\n    // There are multiple ways to add an image to the page, so here we just\n    // count the number of times an image is added to the page whatever the way\n    // is.\n    this._reportTelemetry({\n      action: \"inserted_image\",\n    });\n    if (this.#bitmapFileName) {\n      this.div.setAttribute(\"aria-description\", this.#bitmapFileName);\n    }\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(\"pdfjs-editor-stamp-added-alert\");\n    }\n  }\n\n  copyCanvas(maxDataDimension, maxPreviewDimension, createImageData = false) {\n    if (!maxDataDimension) {\n      // TODO: get this value from Firefox\n      //   (https://bugzilla.mozilla.org/show_bug.cgi?id=1908184)\n      // It's the maximum dimension that the AI can handle.\n      maxDataDimension = 224;\n    }\n\n    const { width: bitmapWidth, height: bitmapHeight } = this.#bitmap;\n    const outputScale = new OutputScale();\n\n    let bitmap = this.#bitmap;\n    let width = bitmapWidth,\n      height = bitmapHeight;\n    let canvas = null;\n\n    if (maxPreviewDimension) {\n      if (\n        bitmapWidth > maxPreviewDimension ||\n        bitmapHeight > maxPreviewDimension\n      ) {\n        const ratio = Math.min(\n          maxPreviewDimension / bitmapWidth,\n          maxPreviewDimension / bitmapHeight\n        );\n        width = Math.floor(bitmapWidth * ratio);\n        height = Math.floor(bitmapHeight * ratio);\n      }\n\n      canvas = document.createElement(\"canvas\");\n      const scaledWidth = (canvas.width = Math.ceil(width * outputScale.sx));\n      const scaledHeight = (canvas.height = Math.ceil(height * outputScale.sy));\n\n      if (!this.#isSvg) {\n        bitmap = this.#scaleBitmap(scaledWidth, scaledHeight);\n      }\n\n      const ctx = canvas.getContext(\"2d\");\n      ctx.filter = this._uiManager.hcmFilter;\n\n      // Add a checkerboard pattern as a background in case the image has some\n      // transparency.\n      let white = \"white\",\n        black = \"#cfcfd8\";\n      if (this._uiManager.hcmFilter !== \"none\") {\n        black = \"black\";\n      } else if (ColorScheme.isDarkMode) {\n        white = \"#8f8f9d\";\n        black = \"#42414d\";\n      }\n      const boxDim = 15;\n      const boxDimWidth = boxDim * outputScale.sx;\n      const boxDimHeight = boxDim * outputScale.sy;\n      const pattern = new OffscreenCanvas(boxDimWidth * 2, boxDimHeight * 2);\n      const patternCtx = pattern.getContext(\"2d\");\n      patternCtx.fillStyle = white;\n      patternCtx.fillRect(0, 0, boxDimWidth * 2, boxDimHeight * 2);\n      patternCtx.fillStyle = black;\n      patternCtx.fillRect(0, 0, boxDimWidth, boxDimHeight);\n      patternCtx.fillRect(boxDimWidth, boxDimHeight, boxDimWidth, boxDimHeight);\n      ctx.fillStyle = ctx.createPattern(pattern, \"repeat\");\n      ctx.fillRect(0, 0, scaledWidth, scaledHeight);\n      ctx.drawImage(\n        bitmap,\n        0,\n        0,\n        bitmap.width,\n        bitmap.height,\n        0,\n        0,\n        scaledWidth,\n        scaledHeight\n      );\n    }\n\n    let imageData = null;\n    if (createImageData) {\n      let dataWidth, dataHeight;\n      if (\n        outputScale.symmetric &&\n        bitmap.width < maxDataDimension &&\n        bitmap.height < maxDataDimension\n      ) {\n        dataWidth = bitmap.width;\n        dataHeight = bitmap.height;\n      } else {\n        bitmap = this.#bitmap;\n        if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) {\n          const ratio = Math.min(\n            maxDataDimension / bitmapWidth,\n            maxDataDimension / bitmapHeight\n          );\n          dataWidth = Math.floor(bitmapWidth * ratio);\n          dataHeight = Math.floor(bitmapHeight * ratio);\n\n          if (!this.#isSvg) {\n            bitmap = this.#scaleBitmap(dataWidth, dataHeight);\n          }\n        }\n      }\n\n      const offscreen = new OffscreenCanvas(dataWidth, dataHeight);\n      const offscreenCtx = offscreen.getContext(\"2d\", {\n        willReadFrequently: true,\n      });\n      offscreenCtx.drawImage(\n        bitmap,\n        0,\n        0,\n        bitmap.width,\n        bitmap.height,\n        0,\n        0,\n        dataWidth,\n        dataHeight\n      );\n      imageData = {\n        width: dataWidth,\n        height: dataHeight,\n        data: offscreenCtx.getImageData(0, 0, dataWidth, dataHeight).data,\n      };\n    }\n\n    return { canvas, width, height, imageData };\n  }\n\n  #scaleBitmap(width, height) {\n    const { width: bitmapWidth, height: bitmapHeight } = this.#bitmap;\n\n    let newWidth = bitmapWidth;\n    let newHeight = bitmapHeight;\n    let bitmap = this.#bitmap;\n    while (newWidth > 2 * width || newHeight > 2 * height) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n\n      if (newWidth > 2 * width) {\n        // See bug 1820511 (Windows specific bug).\n        // TODO: once the above bug is fixed we could revert to:\n        // newWidth = Math.ceil(newWidth / 2);\n        newWidth =\n          newWidth >= 16384\n            ? Math.floor(newWidth / 2) - 1\n            : Math.ceil(newWidth / 2);\n      }\n      if (newHeight > 2 * height) {\n        newHeight =\n          newHeight >= 16384\n            ? Math.floor(newHeight / 2) - 1\n            : Math.ceil(newHeight / 2);\n      }\n\n      const offscreen = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(\n        bitmap,\n        0,\n        0,\n        prevWidth,\n        prevHeight,\n        0,\n        0,\n        newWidth,\n        newHeight\n      );\n      bitmap = offscreen.transferToImageBitmap();\n    }\n\n    return bitmap;\n  }\n\n  #drawBitmap() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const { width, height } = this;\n    const outputScale = new OutputScale();\n    const scaledWidth = Math.ceil(width * parentWidth * outputScale.sx);\n    const scaledHeight = Math.ceil(height * parentHeight * outputScale.sy);\n    const canvas = this.#canvas;\n\n    if (\n      !canvas ||\n      (canvas.width === scaledWidth && canvas.height === scaledHeight)\n    ) {\n      return;\n    }\n\n    canvas.width = scaledWidth;\n    canvas.height = scaledHeight;\n\n    const bitmap = this.#isSvg\n      ? this.#bitmap\n      : this.#scaleBitmap(scaledWidth, scaledHeight);\n\n    const ctx = canvas.getContext(\"2d\");\n    ctx.filter = this._uiManager.hcmFilter;\n    ctx.drawImage(\n      bitmap,\n      0,\n      0,\n      bitmap.width,\n      bitmap.height,\n      0,\n      0,\n      scaledWidth,\n      scaledHeight\n    );\n  }\n\n  #serializeBitmap(toUrl) {\n    if (toUrl) {\n      if (this.#isSvg) {\n        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);\n        if (url) {\n          return url;\n        }\n      }\n      // We convert to a data url because it's sync and the url can live in the\n      // clipboard.\n      const canvas = document.createElement(\"canvas\");\n      ({ width: canvas.width, height: canvas.height } = this.#bitmap);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0);\n\n      return canvas.toDataURL();\n    }\n\n    if (this.#isSvg) {\n      const [pageWidth, pageHeight] = this.pageDimensions;\n      // Multiply by PixelsPerInch.PDF_TO_CSS_UNITS in order to increase the\n      // image resolution when rasterizing it.\n      const width = Math.round(\n        this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS\n      );\n      const height = Math.round(\n        this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS\n      );\n      const offscreen = new OffscreenCanvas(width, height);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(\n        this.#bitmap,\n        0,\n        0,\n        this.#bitmap.width,\n        this.#bitmap.height,\n        0,\n        0,\n        width,\n        height\n      );\n      return offscreen.transferToImageBitmap();\n    }\n\n    return structuredClone(this.#bitmap);\n  }\n\n  /** @inheritdoc */\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    let missingCanvas = false;\n    if (data instanceof StampAnnotationElement) {\n      const {\n        data: {\n          rect,\n          rotation,\n          id,\n          structParent,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate,\n        },\n        container,\n        parent: {\n          page: { pageNumber },\n        },\n        canvas,\n      } = data;\n      let bitmapId, bitmap;\n      if (canvas) {\n        delete data.canvas;\n        ({ id: bitmapId, bitmap } = uiManager.imageManager.getFromCanvas(\n          container.id,\n          canvas\n        ));\n        canvas.remove();\n      } else {\n        missingCanvas = true;\n        data._hasNoCanvas = true;\n      }\n\n      // When switching to edit mode, we wait for the structure tree to be\n      // ready (see pdf_viewer.js), so it's fine to use getAriaAttributesSync.\n      const altText =\n        (\n          await parent._structTree.getAriaAttributes(`${AnnotationPrefix}${id}`)\n        )?.get(\"aria-label\") || \"\";\n\n      initialData = data = {\n        annotationType: AnnotationEditorType.STAMP,\n        bitmapId,\n        bitmap,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        accessibilityData: {\n          decorative: false,\n          altText,\n        },\n        isSvg: false,\n        structParent,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate,\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    const { rect, bitmap, bitmapUrl, bitmapId, isSvg, accessibilityData } =\n      data;\n    if (missingCanvas) {\n      uiManager.addMissingCanvas(data.id, editor);\n      editor.#missingCanvas = true;\n    } else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {\n      editor.#bitmapId = bitmapId;\n      if (bitmap) {\n        editor.#bitmap = bitmap;\n      }\n    } else {\n      editor.#bitmapUrl = bitmapUrl;\n    }\n    editor.#isSvg = isSvg;\n\n    const [parentWidth, parentHeight] = editor.pageDimensions;\n    editor.width = (rect[2] - rect[0]) / parentWidth;\n    editor.height = (rect[3] - rect[1]) / parentHeight;\n\n    if (accessibilityData) {\n      editor.altTextData = accessibilityData;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    // No need to be add in the undo stack if the editor is created from an\n    // existing one.\n    editor.#hasBeenAddedInUndoStack = !!initialData;\n\n    return editor;\n  }\n\n  /** @inheritdoc */\n  serialize(isForCopying = false, context = null) {\n    if (this.isEmpty()) {\n      return null;\n    }\n\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      bitmapId: this.#bitmapId,\n      isSvg: this.#isSvg,\n    });\n    this.addComment(serialized);\n\n    if (isForCopying) {\n      // We don't know what's the final destination (this pdf or another one)\n      // of this annotation and the clipboard doesn't support ImageBitmaps,\n      // hence we serialize the bitmap to a data url.\n      serialized.bitmapUrl = this.#serializeBitmap(/* toUrl = */ true);\n      serialized.accessibilityData = this.serializeAltText(true);\n      serialized.isCopy = true;\n      return serialized;\n    }\n\n    const { decorative, altText } = this.serializeAltText(false);\n    if (!decorative && altText) {\n      serialized.accessibilityData = { type: \"Figure\", alt: altText };\n    }\n    if (this.annotationElementId) {\n      const changes = this.#hasElementChanged(serialized);\n      if (changes.isSame) {\n        // Nothing has been changed.\n        return null;\n      }\n      if (changes.isSameAltText) {\n        delete serialized.accessibilityData;\n      } else {\n        serialized.accessibilityData.structParent =\n          this._initialData.structParent ?? -1;\n      }\n      serialized.id = this.annotationElementId;\n      delete serialized.bitmapId;\n      return serialized;\n    }\n\n    if (context === null) {\n      return serialized;\n    }\n\n    context.stamps ||= new Map();\n    const area = this.#isSvg\n      ? (serialized.rect[2] - serialized.rect[0]) *\n        (serialized.rect[3] - serialized.rect[1])\n      : null;\n    if (!context.stamps.has(this.#bitmapId)) {\n      // We don't want to have multiple copies of the same bitmap in the\n      // annotationMap, hence we only add the bitmap the first time we meet it.\n      context.stamps.set(this.#bitmapId, { area, serialized });\n      serialized.bitmap = this.#serializeBitmap(/* toUrl = */ false);\n    } else if (this.#isSvg) {\n      // If we have multiple copies of the same svg but with different sizes,\n      // then we want to keep the biggest one.\n      const prevData = context.stamps.get(this.#bitmapId);\n      if (area > prevData.area) {\n        prevData.area = area;\n        prevData.serialized.bitmap.close();\n        prevData.serialized.bitmap = this.#serializeBitmap(/* toUrl = */ false);\n      }\n    }\n    return serialized;\n  }\n\n  #hasElementChanged(serialized) {\n    const {\n      pageIndex,\n      accessibilityData: { altText },\n    } = this._initialData;\n\n    const isSamePageIndex = serialized.pageIndex === pageIndex;\n    const isSameAltText = (serialized.accessibilityData?.alt || \"\") === altText;\n\n    return {\n      isSame:\n        !this.hasEditedComment &&\n        !this._hasBeenMoved &&\n        !this._hasBeenResized &&\n        isSamePageIndex &&\n        isSameAltText,\n      isSameAltText,\n    };\n  }\n\n  /** @inheritdoc */\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment,\n    });\n\n    return null;\n  }\n}\n\nexport { StampEditor };\n", "/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n/** @typedef {import(\"../display_utils.js\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../../web/text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n/** @typedef {import(\"../../../web/interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../annotation_layer.js\").AnnotationLayer} AnnotationLayer */\n/** @typedef {import(\"../draw_layer.js\").DrawLayer} DrawLayer */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/struct_tree_layer_builder.js\").StructTreeLayerBuilder} StructTreeLayerBuilder */\n\nimport {\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  FeatureTest,\n} from \"../../shared/util.js\";\nimport { AnnotationEditor } from \"./editor.js\";\nimport { FreeTextEditor } from \"./freetext.js\";\nimport { HighlightEditor } from \"./highlight.js\";\nimport { InkEditor } from \"./ink.js\";\nimport { setLayerDimensions } from \"../display_utils.js\";\nimport { SignatureEditor } from \"./signature.js\";\nimport { StampEditor } from \"./stamp.js\";\n\n/**\n * @typedef {Object} AnnotationEditorLayerOptions\n * @property {Object} mode\n * @property {HTMLDivElement} div\n * @property {StructTreeLayerBuilder} structTreeLayer\n * @property {AnnotationEditorUIManager} uiManager\n * @property {boolean} enabled\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {number} pageIndex\n * @property {IL10n} l10n\n * @property {AnnotationLayer} [annotationLayer]\n * @property {HTMLDivElement} [textLayer]\n * @property {DrawLayer} drawLayer\n * @property {PageViewport} viewport\n */\n\n/**\n * @typedef {Object} RenderEditorLayerOptions\n * @property {PageViewport} viewport\n */\n\n/**\n * Manage all the different editors on a page.\n */\nclass AnnotationEditorLayer {\n  #accessibilityManager;\n\n  #allowClick = false;\n\n  #annotationLayer = null;\n\n  #clickAC = null;\n\n  #editorFocusTimeoutId = null;\n\n  #editors = new Map();\n\n  #hadPointerDown = false;\n\n  #isDisabling = false;\n\n  #isEnabling = false;\n\n  #drawingAC = null;\n\n  #focusedElement = null;\n\n  #textLayer = null;\n\n  #textSelectionAC = null;\n\n  #textLayerDblClickAC = null;\n\n  #lastPointerDownTimestamp = -1;\n\n  #uiManager;\n\n  static _initialized = false;\n\n  static #editorTypes = new Map(\n    [\n      FreeTextEditor,\n      InkEditor,\n      StampEditor,\n      HighlightEditor,\n      SignatureEditor,\n    ].map(type => [type._editorType, type])\n  );\n\n  /**\n   * @param {AnnotationEditorLayerOptions} options\n   */\n  constructor({\n    uiManager,\n    pageIndex,\n    div,\n    structTreeLayer,\n    accessibilityManager,\n    annotationLayer,\n    drawLayer,\n    textLayer,\n    viewport,\n    l10n,\n  }) {\n    const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()];\n    if (!AnnotationEditorLayer._initialized) {\n      AnnotationEditorLayer._initialized = true;\n      for (const editorType of editorTypes) {\n        editorType.initialize(l10n, uiManager);\n      }\n    }\n    uiManager.registerEditorTypes(editorTypes);\n\n    this.#uiManager = uiManager;\n    this.pageIndex = pageIndex;\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationLayer = annotationLayer;\n    this.viewport = viewport;\n    this.#textLayer = textLayer;\n    this.drawLayer = drawLayer;\n    this._structTree = structTreeLayer;\n\n    this.#uiManager.addLayer(this);\n  }\n\n  get isEmpty() {\n    return this.#editors.size === 0;\n  }\n\n  get isInvisible() {\n    return (\n      this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE\n    );\n  }\n\n  /**\n   * Update the toolbar if it's required to reflect the tool currently used.\n   * @param {Object} options\n   */\n  updateToolbar(options) {\n    this.#uiManager.updateToolbar(options);\n  }\n\n  /**\n   * The mode has changed: it must be updated.\n   * @param {number} mode\n   */\n  updateMode(mode = this.#uiManager.getMode()) {\n    this.#cleanup();\n    switch (mode) {\n      case AnnotationEditorType.NONE:\n        this.div.classList.toggle(\"nonEditing\", true);\n        this.disableTextSelection();\n        this.togglePointerEvents(false);\n        this.toggleAnnotationLayerPointerEvents(true);\n        this.disableClick();\n        return;\n      case AnnotationEditorType.INK:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n        break;\n      case AnnotationEditorType.HIGHLIGHT:\n        this.enableTextSelection();\n        this.togglePointerEvents(false);\n        this.disableClick();\n        break;\n      default:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n    }\n\n    this.toggleAnnotationLayerPointerEvents(false);\n    const { classList } = this.div;\n    classList.toggle(\"nonEditing\", false);\n    if (mode === AnnotationEditorType.POPUP) {\n      classList.toggle(\"commentEditing\", true);\n    } else {\n      classList.toggle(\"commentEditing\", false);\n      for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n        classList.toggle(\n          `${editorType._type}Editing`,\n          mode === editorType._editorType\n        );\n      }\n    }\n    this.div.hidden = false;\n  }\n\n  hasTextLayer(textLayer) {\n    return textLayer === this.#textLayer?.div;\n  }\n\n  /**\n   * Set the editing state.\n   * @param {boolean} isEditing\n   */\n  setEditingState(isEditing) {\n    this.#uiManager.setEditingState(isEditing);\n  }\n\n  /**\n   * Add some commands into the CommandManager (undo/redo stuff).\n   * @param {Object} params\n   */\n  addCommands(params) {\n    this.#uiManager.addCommands(params);\n  }\n\n  cleanUndoStack(type) {\n    this.#uiManager.cleanUndoStack(type);\n  }\n\n  toggleDrawing(enabled = false) {\n    this.div.classList.toggle(\"drawing\", !enabled);\n  }\n\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n\n  toggleAnnotationLayerPointerEvents(enabled = false) {\n    this.#annotationLayer?.div.classList.toggle(\"disabled\", !enabled);\n  }\n\n  get #allEditorsIterator() {\n    return this.#editors.size !== 0\n      ? this.#editors.values()\n      : this.#uiManager.getEditors(this.pageIndex);\n  }\n\n  /**\n   * Enable pointer events on the main div in order to enable\n   * editor creation.\n   */\n  async enable() {\n    this.#isEnabling = true;\n    this.div.tabIndex = 0;\n    this.togglePointerEvents(true);\n    this.div.classList.toggle(\"nonEditing\", false);\n    this.#textLayerDblClickAC?.abort();\n    this.#textLayerDblClickAC = null;\n    const annotationElementIds = new Set();\n    for (const editor of this.#allEditorsIterator) {\n      editor.enableEditing();\n      editor.show(true);\n      if (editor.annotationElementId) {\n        this.#uiManager.removeChangedExistingAnnotation(editor);\n        annotationElementIds.add(editor.annotationElementId);\n      }\n    }\n\n    const annotationLayer = this.#annotationLayer;\n    if (annotationLayer) {\n      for (const editable of annotationLayer.getEditableAnnotations()) {\n        // The element must be hidden whatever its state is.\n        editable.hide();\n        if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {\n          continue;\n        }\n        if (annotationElementIds.has(editable.data.id)) {\n          continue;\n        }\n        const editor = await this.deserialize(editable);\n        if (!editor) {\n          continue;\n        }\n        this.addOrRebuild(editor);\n        editor.enableEditing();\n      }\n    }\n    this.#isEnabling = false;\n    this.#uiManager._eventBus.dispatch(\"editorsrendered\", {\n      source: this,\n      pageNumber: this.pageIndex + 1,\n    });\n  }\n\n  /**\n   * Disable editor creation.\n   */\n  disable() {\n    this.#isDisabling = true;\n    this.div.tabIndex = -1;\n    this.togglePointerEvents(false);\n    this.div.classList.toggle(\"nonEditing\", true);\n    if (this.#textLayer && !this.#textLayerDblClickAC) {\n      this.#textLayerDblClickAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textLayerDblClickAC);\n      this.#textLayer.div.addEventListener(\n        \"pointerdown\",\n        e => {\n          // It's the default value in Fenix:\n          // https://searchfox.org/mozilla-central/rev/beba5cde846f944c4d709e75cbe499d17af880a4/modules/libpref/init/StaticPrefList.yaml#19064\n          // and in Chrome and Windows:\n          // https://source.chromium.org/chromium/chromium/src/+/main:ui/events/event_constants.h;drc=f0f5f3ceebb00da9363ccc7a1e2c0f17b6b383ba;l=115\n          const DBL_CLICK_THRESHOLD = 500;\n          const { clientX, clientY, timeStamp } = e;\n          const lastPointerDownTimestamp = this.#lastPointerDownTimestamp;\n          if (timeStamp - lastPointerDownTimestamp > DBL_CLICK_THRESHOLD) {\n            this.#lastPointerDownTimestamp = timeStamp;\n            return;\n          }\n          this.#lastPointerDownTimestamp = -1;\n          const { classList } = this.div;\n          classList.toggle(\"getElements\", true);\n          const elements = document.elementsFromPoint(clientX, clientY);\n          classList.toggle(\"getElements\", false);\n          if (!this.div.contains(elements[0])) {\n            return;\n          }\n          let id;\n          const regex = new RegExp(`^${AnnotationEditorPrefix}[0-9]+$`);\n          for (const element of elements) {\n            if (regex.test(element.id)) {\n              id = element.id;\n              break;\n            }\n          }\n          if (!id) {\n            return;\n          }\n          const editor = this.#editors.get(id);\n          if (editor?.annotationElementId === null) {\n            e.stopPropagation();\n            e.preventDefault();\n            editor.dblclick(e);\n          }\n        },\n        { signal, capture: true }\n      );\n    }\n\n    const annotationLayer = this.#annotationLayer;\n    if (annotationLayer) {\n      const changedAnnotations = new Map();\n      const resetAnnotations = new Map();\n      for (const editor of this.#allEditorsIterator) {\n        editor.disableEditing();\n        if (!editor.annotationElementId) {\n          editor.updateFakeAnnotationElement(annotationLayer);\n          continue;\n        }\n        if (editor.serialize() !== null) {\n          changedAnnotations.set(editor.annotationElementId, editor);\n          continue;\n        } else {\n          resetAnnotations.set(editor.annotationElementId, editor);\n        }\n        this.getEditableAnnotation(editor.annotationElementId)?.show();\n        editor.remove();\n      }\n\n      // Show the annotations that were hidden in enable().\n      const editables = annotationLayer.getEditableAnnotations();\n      for (const editable of editables) {\n        const { id } = editable.data;\n        if (this.#uiManager.isDeletedAnnotationElement(id)) {\n          editable.updateEdited({ deleted: true });\n          continue;\n        }\n        let editor = resetAnnotations.get(id);\n        if (editor) {\n          editor.resetAnnotationElement(editable);\n          editor.show(false);\n          editable.show();\n          continue;\n        }\n\n        editor = changedAnnotations.get(id);\n        if (editor) {\n          this.#uiManager.addChangedExistingAnnotation(editor);\n          if (editor.renderAnnotationElement(editable)) {\n            // Content has changed, so we need to hide the editor.\n            editor.show(false);\n          }\n        }\n        editable.show();\n      }\n    }\n\n    this.#cleanup();\n    if (this.isEmpty) {\n      this.div.hidden = true;\n    }\n    const { classList } = this.div;\n    for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n      classList.remove(`${editorType._type}Editing`);\n    }\n    this.disableTextSelection();\n    this.toggleAnnotationLayerPointerEvents(true);\n\n    this.#isDisabling = false;\n  }\n\n  getEditableAnnotation(id) {\n    return this.#annotationLayer?.getEditableAnnotation(id) || null;\n  }\n\n  /**\n   * Set the current editor.\n   * @param {AnnotationEditor} editor\n   */\n  setActiveEditor(editor) {\n    const currentActive = this.#uiManager.getActive();\n    if (currentActive === editor) {\n      return;\n    }\n\n    this.#uiManager.setActiveEditor(editor);\n  }\n\n  enableTextSelection() {\n    this.div.tabIndex = -1;\n    if (this.#textLayer?.div && !this.#textSelectionAC) {\n      this.#textSelectionAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textSelectionAC);\n\n      this.#textLayer.div.addEventListener(\n        \"pointerdown\",\n        this.#textLayerPointerDown.bind(this),\n        { signal }\n      );\n      this.#textLayer.div.classList.add(\"highlighting\");\n    }\n  }\n\n  disableTextSelection() {\n    this.div.tabIndex = 0;\n    if (this.#textLayer?.div && this.#textSelectionAC) {\n      this.#textSelectionAC.abort();\n      this.#textSelectionAC = null;\n\n      this.#textLayer.div.classList.remove(\"highlighting\");\n    }\n  }\n\n  #textLayerPointerDown(event) {\n    // Unselect all the editors in order to let the user select some text\n    // without being annoyed by an editor toolbar.\n    this.#uiManager.unselectAll();\n    const { target } = event;\n    if (\n      target === this.#textLayer.div ||\n      ((target.getAttribute(\"role\") === \"img\" ||\n        target.classList.contains(\"endOfContent\")) &&\n        this.#textLayer.div.contains(target))\n    ) {\n      const { isMac } = FeatureTest.platform;\n      if (event.button !== 0 || (event.ctrlKey && isMac)) {\n        // Do nothing on right click.\n        return;\n      }\n      this.#uiManager.showAllEditors(\n        \"highlight\",\n        true,\n        /* updateButton = */ true\n      );\n      this.#textLayer.div.classList.add(\"free\");\n      this.toggleDrawing();\n      HighlightEditor.startHighlighting(\n        this,\n        this.#uiManager.direction === \"ltr\",\n        { target: this.#textLayer.div, x: event.x, y: event.y }\n      );\n      this.#textLayer.div.addEventListener(\n        \"pointerup\",\n        () => {\n          this.#textLayer.div.classList.remove(\"free\");\n          this.toggleDrawing(true);\n        },\n        { once: true, signal: this.#uiManager._signal }\n      );\n      event.preventDefault();\n    }\n  }\n\n  enableClick() {\n    if (this.#clickAC) {\n      return;\n    }\n    this.#clickAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#clickAC);\n\n    this.div.addEventListener(\"pointerdown\", this.pointerdown.bind(this), {\n      signal,\n    });\n    const pointerup = this.pointerup.bind(this);\n    this.div.addEventListener(\"pointerup\", pointerup, { signal });\n    this.div.addEventListener(\"pointercancel\", pointerup, { signal });\n  }\n\n  disableClick() {\n    this.#clickAC?.abort();\n    this.#clickAC = null;\n  }\n\n  attach(editor) {\n    this.#editors.set(editor.id, editor);\n    const { annotationElementId } = editor;\n    if (\n      annotationElementId &&\n      this.#uiManager.isDeletedAnnotationElement(annotationElementId)\n    ) {\n      this.#uiManager.removeDeletedAnnotationElement(editor);\n    }\n  }\n\n  detach(editor) {\n    this.#editors.delete(editor.id);\n    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n\n    if (!this.#isDisabling && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n    }\n  }\n\n  /**\n   * Remove an editor.\n   * @param {AnnotationEditor} editor\n   */\n  remove(editor) {\n    this.detach(editor);\n    this.#uiManager.removeEditor(editor);\n    editor.div.remove();\n    editor.isAttachedToDOM = false;\n  }\n\n  /**\n   * An editor can have a different parent, for example after having\n   * being dragged and dropped from a page to another.\n   * @param {AnnotationEditor} editor\n   */\n  changeParent(editor) {\n    if (editor.parent === this) {\n      return;\n    }\n\n    if (editor.parent && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId);\n      AnnotationEditor.deleteAnnotationElement(editor);\n      editor.annotationElementId = null;\n    }\n\n    this.attach(editor);\n    editor.parent?.detach(editor);\n    editor.setParent(this);\n    if (editor.div && editor.isAttachedToDOM) {\n      editor.div.remove();\n      this.div.append(editor.div);\n    }\n  }\n\n  /**\n   * Add a new editor in the current view.\n   * @param {AnnotationEditor} editor\n   */\n  add(editor) {\n    if (editor.parent === this && editor.isAttachedToDOM) {\n      return;\n    }\n    this.changeParent(editor);\n    this.#uiManager.addEditor(editor);\n    this.attach(editor);\n\n    if (!editor.isAttachedToDOM) {\n      const div = editor.render();\n      this.div.append(div);\n      editor.isAttachedToDOM = true;\n    }\n\n    // The editor will be correctly moved into the DOM (see fixAndSetPosition).\n    editor.fixAndSetPosition();\n    editor.onceAdded(/* focus = */ !this.#isEnabling);\n    this.#uiManager.addToAnnotationStorage(editor);\n    editor._reportTelemetry(editor.telemetryInitialData);\n  }\n\n  moveEditorInDOM(editor) {\n    if (!editor.isAttachedToDOM) {\n      return;\n    }\n\n    const { activeElement } = document;\n    if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) {\n      // When the div is moved in the DOM the focus can move somewhere else,\n      // so we want to be sure that the focus will stay on the editor but we\n      // don't want to call any focus callbacks, hence we disable them and only\n      // re-enable them when the editor has the focus.\n      editor._focusEventsAllowed = false;\n      this.#editorFocusTimeoutId = setTimeout(() => {\n        this.#editorFocusTimeoutId = null;\n        if (!editor.div.contains(document.activeElement)) {\n          editor.div.addEventListener(\n            \"focusin\",\n            () => {\n              editor._focusEventsAllowed = true;\n            },\n            { once: true, signal: this.#uiManager._signal }\n          );\n          activeElement.focus();\n        } else {\n          editor._focusEventsAllowed = true;\n        }\n      }, 0);\n    }\n\n    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(\n      this.div,\n      editor.div,\n      editor.contentDiv,\n      /* isRemovable = */ true\n    );\n  }\n\n  /**\n   * Add or rebuild depending if it has been removed or not.\n   * @param {AnnotationEditor} editor\n   */\n  addOrRebuild(editor) {\n    if (editor.needsToBeRebuilt()) {\n      editor.parent ||= this;\n      editor.rebuild();\n      editor.show();\n    } else {\n      this.add(editor);\n    }\n  }\n\n  /**\n   * Add a new editor and make this addition undoable.\n   * @param {AnnotationEditor} editor\n   */\n  addUndoableEditor(editor) {\n    const cmd = () => editor._uiManager.rebuild(editor);\n    const undo = () => {\n      editor.remove();\n    };\n\n    this.addCommands({ cmd, undo, mustExec: false });\n  }\n\n  getEditorByUID(uid) {\n    for (const editor of this.#editors.values()) {\n      if (editor.uid === uid) {\n        return editor;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Get an id for an editor.\n   * @returns {string}\n   */\n  getNextId() {\n    return this.#uiManager.getId();\n  }\n\n  get #currentEditorType() {\n    return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode());\n  }\n\n  combinedSignal(ac) {\n    return this.#uiManager.combinedSignal(ac);\n  }\n\n  /**\n   * Create a new editor\n   * @param {Object} params\n   * @returns {AnnotationEditor}\n   */\n  #createNewEditor(params) {\n    const editorType = this.#currentEditorType;\n    return editorType ? new editorType.prototype.constructor(params) : null;\n  }\n\n  canCreateNewEmptyEditor() {\n    return this.#currentEditorType?.canCreateNewEmptyEditor();\n  }\n\n  /**\n   * Paste some content into a new editor.\n   * @param {Object} options\n   * @param {Object} params\n   */\n  async pasteEditor(options, params) {\n    this.updateToolbar(options);\n    await this.#uiManager.updateMode(options.mode);\n\n    const { offsetX, offsetY } = this.#getCenterPoint();\n    const id = this.getNextId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: offsetX,\n      y: offsetY,\n      uiManager: this.#uiManager,\n      isCentered: true,\n      ...params,\n    });\n    if (editor) {\n      this.add(editor);\n    }\n  }\n\n  /**\n   * Create a new editor\n   * @param {Object} data\n   * @returns {Promise<AnnotationEditor | null>}\n   */\n  async deserialize(data) {\n    return (\n      (await AnnotationEditorLayer.#editorTypes\n        .get(data.annotationType ?? data.annotationEditorType)\n        ?.deserialize(data, this, this.#uiManager)) || null\n    );\n  }\n\n  /**\n   * Create and add a new editor.\n   * @param {PointerEvent} event\n   * @param {boolean} isCentered\n   * @param [Object] data\n   * @returns {AnnotationEditor}\n   */\n  createAndAddNewEditor(event, isCentered, data = {}) {\n    const id = this.getNextId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: event.offsetX,\n      y: event.offsetY,\n      uiManager: this.#uiManager,\n      isCentered,\n      ...data,\n    });\n    if (editor) {\n      this.add(editor);\n    }\n\n    return editor;\n  }\n\n  get boundingClientRect() {\n    return this.div.getBoundingClientRect();\n  }\n\n  #getCenterPoint() {\n    const { x, y, width, height } = this.boundingClientRect;\n    const tlX = Math.max(0, x);\n    const tlY = Math.max(0, y);\n    const brX = Math.min(window.innerWidth, x + width);\n    const brY = Math.min(window.innerHeight, y + height);\n    const centerX = (tlX + brX) / 2 - x;\n    const centerY = (tlY + brY) / 2 - y;\n    const [offsetX, offsetY] =\n      this.viewport.rotation % 180 === 0\n        ? [centerX, centerY]\n        : [centerY, centerX];\n\n    return { offsetX, offsetY };\n  }\n\n  /**\n   * Create and add a new editor.\n   */\n  addNewEditor(data = {}) {\n    this.createAndAddNewEditor(\n      this.#getCenterPoint(),\n      /* isCentered = */ true,\n      data\n    );\n  }\n\n  /**\n   * Set the last selected editor.\n   * @param {AnnotationEditor} editor\n   */\n  setSelected(editor) {\n    this.#uiManager.setSelected(editor);\n  }\n\n  /**\n   * Add or remove an editor the current selection.\n   * @param {AnnotationEditor} editor\n   */\n  toggleSelected(editor) {\n    this.#uiManager.toggleSelected(editor);\n  }\n\n  /**\n   * Unselect an editor.\n   * @param {AnnotationEditor} editor\n   */\n  unselect(editor) {\n    this.#uiManager.unselect(editor);\n  }\n\n  /**\n   * Pointerup callback.\n   * @param {PointerEvent} event\n   */\n  pointerup(event) {\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      // Don't create an editor on right click.\n      return;\n    }\n\n    if (event.target !== this.div) {\n      return;\n    }\n\n    if (!this.#hadPointerDown) {\n      // It can happen when the user starts a drag inside a text editor\n      // and then releases the mouse button outside of it. In such a case\n      // we don't want to create a new editor, hence we check that a pointerdown\n      // occurred on this div previously.\n      return;\n    }\n    this.#hadPointerDown = false;\n\n    if (\n      this.#currentEditorType?.isDrawer &&\n      this.#currentEditorType.supportMultipleDrawings\n    ) {\n      return;\n    }\n\n    if (!this.#allowClick) {\n      this.#allowClick = true;\n      return;\n    }\n\n    const currentMode = this.#uiManager.getMode();\n    if (\n      currentMode === AnnotationEditorType.STAMP ||\n      currentMode === AnnotationEditorType.SIGNATURE\n    ) {\n      this.#uiManager.unselectAll();\n      return;\n    }\n\n    this.createAndAddNewEditor(event, /* isCentered = */ false);\n  }\n\n  /**\n   * Pointerdown callback.\n   * @param {PointerEvent} event\n   */\n  pointerdown(event) {\n    if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) {\n      this.enableTextSelection();\n    }\n    if (this.#hadPointerDown) {\n      // It's possible to have a second pointerdown event before a pointerup one\n      // when the user puts a finger on a touchscreen and then add a second one\n      // to start a pinch-to-zoom gesture.\n      // That said, in case it's possible to have two pointerdown events with\n      // a mouse, we don't want to create a new editor in such a case either.\n      this.#hadPointerDown = false;\n      return;\n    }\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      // Do nothing on right click.\n      return;\n    }\n\n    if (event.target !== this.div) {\n      return;\n    }\n\n    this.#hadPointerDown = true;\n\n    if (this.#currentEditorType?.isDrawer) {\n      this.startDrawingSession(event);\n      return;\n    }\n\n    const editor = this.#uiManager.getActive();\n    this.#allowClick = !editor || editor.isEmpty();\n  }\n\n  startDrawingSession(event) {\n    this.div.focus({\n      preventScroll: true,\n    });\n    if (this.#drawingAC) {\n      this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n      return;\n    }\n\n    this.#uiManager.setCurrentDrawingSession(this);\n    this.#drawingAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#drawingAC);\n    this.div.addEventListener(\n      \"blur\",\n      ({ relatedTarget }) => {\n        if (relatedTarget && !this.div.contains(relatedTarget)) {\n          this.#focusedElement = null;\n          this.commitOrRemove();\n        }\n      },\n      { signal }\n    );\n    this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n  }\n\n  pause(on) {\n    if (on) {\n      const { activeElement } = document;\n      if (this.div.contains(activeElement)) {\n        this.#focusedElement = activeElement;\n      }\n      return;\n    }\n    if (this.#focusedElement) {\n      setTimeout(() => {\n        this.#focusedElement?.focus();\n        this.#focusedElement = null;\n      }, 0);\n    }\n  }\n\n  endDrawingSession(isAborted = false) {\n    if (!this.#drawingAC) {\n      return null;\n    }\n    this.#uiManager.setCurrentDrawingSession(null);\n    this.#drawingAC.abort();\n    this.#drawingAC = null;\n    this.#focusedElement = null;\n    return this.#currentEditorType.endDrawing(isAborted);\n  }\n\n  /**\n   *\n   * @param {AnnotationEditor} editor\n   * @param {number} x\n   * @param {number} y\n   * @returns\n   */\n  findNewParent(editor, x, y) {\n    const layer = this.#uiManager.findParent(x, y);\n    if (layer === null || layer === this) {\n      return false;\n    }\n    layer.changeParent(editor);\n    return true;\n  }\n\n  commitOrRemove() {\n    if (this.#drawingAC) {\n      this.endDrawingSession();\n      return true;\n    }\n    return false;\n  }\n\n  onScaleChanging() {\n    if (!this.#drawingAC) {\n      return;\n    }\n    this.#currentEditorType.onScaleChangingWhenDrawing(this);\n  }\n\n  /**\n   * Destroy the main editor.\n   */\n  destroy() {\n    this.commitOrRemove();\n    if (this.#uiManager.getActive()?.parent === this) {\n      // We need to commit the current editor before destroying the layer.\n      this.#uiManager.commitOrRemove();\n      this.#uiManager.setActiveEditor(null);\n    }\n\n    if (this.#editorFocusTimeoutId) {\n      clearTimeout(this.#editorFocusTimeoutId);\n      this.#editorFocusTimeoutId = null;\n    }\n\n    for (const editor of this.#editors.values()) {\n      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n      editor.setParent(null);\n      editor.isAttachedToDOM = false;\n      editor.div.remove();\n    }\n    this.div = null;\n    this.#editors.clear();\n    this.#uiManager.removeLayer(this);\n  }\n\n  #cleanup() {\n    // When we're cleaning up, some editors are removed but we don't want\n    // to add a new one which will induce an addition in this.#editors, hence\n    // an infinite loop.\n    for (const editor of this.#editors.values()) {\n      if (editor.isEmpty()) {\n        editor.remove();\n      }\n    }\n  }\n\n  /**\n   * Render the main editor.\n   * @param {RenderEditorLayerOptions} parameters\n   */\n  render({ viewport }) {\n    this.viewport = viewport;\n    setLayerDimensions(this.div, viewport);\n    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {\n      this.add(editor);\n      editor.rebuild();\n    }\n    // We're maybe rendering a layer which was invisible when we started to edit\n    // so we must set the different callbacks for it.\n    this.updateMode();\n  }\n\n  /**\n   * Update the main editor.\n   * @param {RenderEditorLayerOptions} parameters\n   */\n  update({ viewport }) {\n    // Editors have their dimensions/positions in percent so to avoid any\n    // issues (see #15582), we must commit the current one before changing\n    // the viewport.\n    this.#uiManager.commitOrRemove();\n    this.#cleanup();\n\n    const oldRotation = this.viewport.rotation;\n    const rotation = viewport.rotation;\n\n    this.viewport = viewport;\n    setLayerDimensions(this.div, { rotation });\n    if (oldRotation !== rotation) {\n      for (const editor of this.#editors.values()) {\n        editor.rotate(rotation);\n      }\n    }\n  }\n\n  /**\n   * Get page dimensions.\n   * @returns {Object} dimensions.\n   */\n  get pageDimensions() {\n    const { pageWidth, pageHeight } = this.viewport.rawDims;\n    return [pageWidth, pageHeight];\n  }\n\n  get scale() {\n    return this.#uiManager.viewParameters.realScale;\n  }\n}\n\nexport { AnnotationEditorLayer };\n", "/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DOMSVGFactory } from \"./svg_factory.js\";\nimport { shadow } from \"../shared/util.js\";\n\n/**\n * Manage the SVGs drawn on top of the page canvas.\n * It's important to have them directly on top of the canvas because we want to\n * be able to use mix-blend-mode for some of them.\n */\nclass DrawLayer {\n  #parent = null;\n\n  #mapping = new Map();\n\n  #toUpdate = new Map();\n\n  static #id = 0;\n\n  constructor({ pageIndex }) {\n    this.pageIndex = pageIndex;\n  }\n\n  setParent(parent) {\n    if (!this.#parent) {\n      this.#parent = parent;\n      return;\n    }\n\n    if (this.#parent !== parent) {\n      if (this.#mapping.size > 0) {\n        for (const root of this.#mapping.values()) {\n          root.remove();\n          parent.append(root);\n        }\n      }\n      this.#parent = parent;\n    }\n  }\n\n  static get _svgFactory() {\n    return shadow(this, \"_svgFactory\", new DOMSVGFactory());\n  }\n\n  static #setBox(element, [x, y, width, height]) {\n    const { style } = element;\n    style.top = `${100 * y}%`;\n    style.left = `${100 * x}%`;\n    style.width = `${100 * width}%`;\n    style.height = `${100 * height}%`;\n  }\n\n  #createSVG() {\n    const svg = DrawLayer._svgFactory.create(1, 1, /* skipDimensions = */ true);\n    this.#parent.append(svg);\n    svg.setAttribute(\"aria-hidden\", true);\n\n    return svg;\n  }\n\n  #createClipPath(defs, pathId) {\n    const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n    defs.append(clipPath);\n    const clipPathId = `clip_${pathId}`;\n    clipPath.setAttribute(\"id\", clipPathId);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    const clipPathUse = DrawLayer._svgFactory.createElement(\"use\");\n    clipPath.append(clipPathUse);\n    clipPathUse.setAttribute(\"href\", `#${pathId}`);\n    clipPathUse.classList.add(\"clip\");\n\n    return clipPathId;\n  }\n\n  #updateProperties(element, properties) {\n    for (const [key, value] of Object.entries(properties)) {\n      if (value === null) {\n        element.removeAttribute(key);\n      } else {\n        element.setAttribute(key, value);\n      }\n    }\n  }\n\n  draw(properties, isPathUpdatable = false, hasClip = false) {\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_p${this.pageIndex}_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n\n    if (isPathUpdatable) {\n      this.#toUpdate.set(id, path);\n    }\n\n    // Create the clipping path for the editor div.\n    const clipPathId = hasClip ? this.#createClipPath(defs, pathId) : null;\n\n    const use = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use);\n    use.setAttribute(\"href\", `#${pathId}`);\n    this.updateProperties(root, properties);\n\n    this.#mapping.set(id, root);\n\n    return { id, clipPathId: `url(#${clipPathId})` };\n  }\n\n  drawOutline(properties, mustRemoveSelfIntersections) {\n    // We cannot draw the outline directly in the SVG for highlights because\n    // it composes with its parent with mix-blend-mode: multiply.\n    // But the outline has a different mix-blend-mode, so we need to draw it in\n    // its own SVG.\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_p${this.pageIndex}_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n\n    let maskId;\n    if (mustRemoveSelfIntersections) {\n      const mask = DrawLayer._svgFactory.createElement(\"mask\");\n      defs.append(mask);\n      maskId = `mask_p${this.pageIndex}_${id}`;\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"objectBoundingBox\");\n      const rect = DrawLayer._svgFactory.createElement(\"rect\");\n      mask.append(rect);\n      rect.setAttribute(\"width\", \"1\");\n      rect.setAttribute(\"height\", \"1\");\n      rect.setAttribute(\"fill\", \"white\");\n      const use = DrawLayer._svgFactory.createElement(\"use\");\n      mask.append(use);\n      use.setAttribute(\"href\", `#${pathId}`);\n      use.setAttribute(\"stroke\", \"none\");\n      use.setAttribute(\"fill\", \"black\");\n      use.setAttribute(\"fill-rule\", \"nonzero\");\n      use.classList.add(\"mask\");\n    }\n\n    const use1 = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use1);\n    use1.setAttribute(\"href\", `#${pathId}`);\n    if (maskId) {\n      use1.setAttribute(\"mask\", `url(#${maskId})`);\n    }\n    const use2 = use1.cloneNode();\n    root.append(use2);\n    use1.classList.add(\"mainOutline\");\n    use2.classList.add(\"secondaryOutline\");\n\n    this.updateProperties(root, properties);\n\n    this.#mapping.set(id, root);\n\n    return id;\n  }\n\n  finalizeDraw(id, properties) {\n    this.#toUpdate.delete(id);\n    this.updateProperties(id, properties);\n  }\n\n  updateProperties(elementOrId, properties) {\n    if (!properties) {\n      return;\n    }\n    const { root, bbox, rootClass, path } = properties;\n    const element =\n      typeof elementOrId === \"number\"\n        ? this.#mapping.get(elementOrId)\n        : elementOrId;\n    if (!element) {\n      return;\n    }\n    if (root) {\n      this.#updateProperties(element, root);\n    }\n    if (bbox) {\n      DrawLayer.#setBox(element, bbox);\n    }\n    if (rootClass) {\n      const { classList } = element;\n      for (const [className, value] of Object.entries(rootClass)) {\n        classList.toggle(className, value);\n      }\n    }\n    if (path) {\n      const defs = element.firstChild;\n      const pathElement = defs.firstChild;\n      this.#updateProperties(pathElement, path);\n    }\n  }\n\n  updateParent(id, layer) {\n    if (layer === this) {\n      return;\n    }\n    const root = this.#mapping.get(id);\n    if (!root) {\n      return;\n    }\n    layer.#parent.append(root);\n    this.#mapping.delete(id);\n    layer.#mapping.set(id, root);\n  }\n\n  remove(id) {\n    this.#toUpdate.delete(id);\n    if (this.#parent === null) {\n      return;\n    }\n    this.#mapping.get(id).remove();\n    this.#mapping.delete(id);\n  }\n\n  destroy() {\n    this.#parent = null;\n    for (const root of this.#mapping.values()) {\n      root.remove();\n    }\n    this.#mapping.clear();\n    this.#toUpdate.clear();\n  }\n}\n\nexport { DrawLayer };\n", "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./display/api\").OnProgressParameters} OnProgressParameters */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./display/api\").PDFDocumentLoadingTask} PDFDocumentLoadingTask */\n/** @typedef {import(\"./display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"./display/api\").PDFPageProxy} PDFPageProxy */\n/** @typedef {import(\"./display/api\").RenderTask} RenderTask */\n/** @typedef {import(\"./display/display_utils\").PageViewport} PageViewport */\n\nimport {\n  AbortException,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationMode,\n  AnnotationType,\n  createValidAbsoluteUrl,\n  FeatureTest,\n  getUuid,\n  ImageKind,\n  InvalidPDFException,\n  MathClamp,\n  normalizeUnicode,\n  OPS,\n  PasswordResponses,\n  PermissionFlag,\n  ResponseException,\n  shadow,\n  updateUrlHash,\n  Util,\n  VerbosityLevel,\n} from \"./shared/util.js\";\nimport {\n  applyOpacity,\n  CSSConstants,\n  fetchData,\n  findContrastColor,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getXfaPageViewport,\n  isDataScheme,\n  isPdfFile,\n  noContextMenu,\n  OutputScale,\n  PDFDateString,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  setLayerDimensions,\n  stopEvent,\n  SupportedImageMimeTypes,\n} from \"./display/display_utils.js\";\nimport {\n  build,\n  getDocument,\n  PDFDataRangeTransport,\n  PDFWorker,\n  version,\n} from \"./display/api.js\";\nimport { AnnotationEditorLayer } from \"./display/editor/annotation_editor_layer.js\";\nimport { AnnotationEditorUIManager } from \"./display/editor/tools.js\";\nimport { AnnotationLayer } from \"./display/annotation_layer.js\";\nimport { ColorPicker } from \"./display/editor/color_picker.js\";\nimport { DOMSVGFactory } from \"./display/svg_factory.js\";\nimport { DrawLayer } from \"./display/draw_layer.js\";\nimport { GlobalWorkerOptions } from \"./display/worker_options.js\";\nimport { HighlightOutliner } from \"./display/editor/drawers/highlight.js\";\nimport { isValidExplicitDest } from \"./display/api_utils.js\";\nimport { SignatureExtractor } from \"./display/editor/drawers/signaturedraw.js\";\nimport { TextLayer } from \"./display/text_layer.js\";\nimport { TouchManager } from \"./display/touch_manager.js\";\nimport { XfaLayer } from \"./display/xfa_layer.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING || GENERIC\")) {\n  globalThis._pdfjsTestingUtils = {\n    HighlightOutliner,\n  };\n}\n\nglobalThis.pdfjsLib = {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  AnnotationType,\n  applyOpacity,\n  build,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  CSSConstants,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  findContrastColor,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getUuid,\n  getXfaPageViewport,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  isValidExplicitDest,\n  MathClamp,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  OutputScale,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  ResponseException,\n  setLayerDimensions,\n  shadow,\n  SignatureExtractor,\n  stopEvent,\n  SupportedImageMimeTypes,\n  TextLayer,\n  TouchManager,\n  updateUrlHash,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer,\n};\n\nexport {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  AnnotationType,\n  applyOpacity,\n  build,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  CSSConstants,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  findContrastColor,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getUuid,\n  getXfaPageViewport,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  isValidExplicitDest,\n  MathClamp,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  OutputScale,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  ResponseException,\n  setLayerDimensions,\n  shadow,\n  SignatureExtractor,\n  stopEvent,\n  SupportedImageMimeTypes,\n  TextLayer,\n  TouchManager,\n  updateUrlHash,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer,\n};\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "// Current version.\nexport var VERSION = '1.13.8';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n          (typeof global == 'object' && global.global === global && global) ||\n          Function('return this')() ||\n          {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n    slice = ArrayProto.slice,\n    toString = ObjProto.toString,\n    hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n    supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n    nativeKeys = Object.keys,\n    nativeCreate = Object.create,\n    nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n    _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n  'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n", "// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function\u2019s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6\u2019s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n  startIndex = startIndex == null ? func.length - 1 : +startIndex;\n  return function() {\n    var length = Math.max(arguments.length - startIndex, 0),\n        rest = Array(length),\n        index = 0;\n    for (; index < length; index++) {\n      rest[index] = arguments[index + startIndex];\n    }\n    switch (startIndex) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, arguments[0], rest);\n      case 2: return func.call(this, arguments[0], arguments[1], rest);\n    }\n    var args = Array(startIndex + 1);\n    for (index = 0; index < startIndex; index++) {\n      args[index] = arguments[index];\n    }\n    args[startIndex] = rest;\n    return func.apply(this, args);\n  };\n}\n", "// Is a given variable an object?\nexport default function isObject(obj) {\n  var type = typeof obj;\n  return type === 'function' || (type === 'object' && !!obj);\n}\n", "// Is a given value equal to null?\nexport default function isNull(obj) {\n  return obj === null;\n}\n", "// Is a given variable undefined?\nexport default function isUndefined(obj) {\n  return obj === void 0;\n}\n", "import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n  return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n", "// Is a given value a DOM element?\nexport default function isElement(obj) {\n  return !!(obj && obj.nodeType === 1);\n}\n", "import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n  var tag = '[object ' + name + ']';\n  return function(obj) {\n    return toString.call(obj) === tag;\n  };\n}\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n", "import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n  isFunction = function(obj) {\n    return typeof obj == 'function' || false;\n  };\n}\n\nexport default isFunction;\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n", "import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n      supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n    ),\n    isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n", "import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n  return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n", "import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n", "import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n  return obj != null && hasOwnProperty.call(obj, key);\n}\n", "import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n  if (!isArguments(arguments)) {\n    isArguments = function(obj) {\n      return has(obj, 'callee');\n    };\n  }\n}());\n\nexport default isArguments;\n", "import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n  return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n", "import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n  return isNumber(obj) && _isNaN(obj);\n}\n", "// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n  return function() {\n    return value;\n  };\n}\n", "import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n  return function(collection) {\n    var sizeProperty = getSizeProperty(collection);\n    return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n  }\n}\n", "// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n  return function(obj) {\n    return obj == null ? void 0 : obj[key];\n  };\n}\n", "import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n", "import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n", "import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n  // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n  // Otherwise, fall back on the above regular expression.\n  return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n                isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n", "import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n", "import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n  var hash = {};\n  for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n  return {\n    contains: function(key) { return hash[key] === true; },\n    push: function(key) {\n      hash[key] = true;\n      return keys.push(key);\n    }\n  };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n  keys = emulatedSet(keys);\n  var nonEnumIdx = nonEnumerableProps.length;\n  var constructor = obj.constructor;\n  var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n  // Constructor is a special case.\n  var prop = 'constructor';\n  if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n  while (nonEnumIdx--) {\n    prop = nonEnumerableProps[nonEnumIdx];\n    if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n      keys.push(prop);\n    }\n  }\n}\n", "import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n  if (!isObject(obj)) return [];\n  if (nativeKeys) return nativeKeys(obj);\n  var keys = [];\n  for (var key in obj) if (has(obj, key)) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n", "import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n  if (obj == null) return true;\n  // Skip the more expensive `toString`-based type checks if `obj` has no\n  // `.length`.\n  var length = getLength(obj);\n  if (typeof length == 'number' && (\n    isArray(obj) || isString(obj) || isArguments(obj)\n  )) return length === 0;\n  return getLength(keys(obj)) === 0;\n}\n", "import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n  var _keys = keys(attrs), length = _keys.length;\n  if (object == null) return !length;\n  var obj = Object(object);\n  for (var i = 0; i < length; i++) {\n    var key = _keys[i];\n    if (attrs[key] !== obj[key] || !(key in obj)) return false;\n  }\n  return true;\n}\n", "import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n  if (obj instanceof _) return obj;\n  if (!(this instanceof _)) return new _(obj);\n  this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n  return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n  return String(this._wrapped);\n};\n", "import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n  return new Uint8Array(\n    bufferSource.buffer || bufferSource,\n    bufferSource.byteOffset || 0,\n    getByteLength(bufferSource)\n  );\n}\n", "import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug }  from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n  var todo = [{a: a, b: b}];\n  // Initializing stacks of traversed objects for cycle detection.\n  var aStack = [], bStack = [];\n\n  while (todo.length) {\n    var frame = todo.pop();\n    if (frame === true) {\n      // Remove the first object from the stack of traversed objects.\n      aStack.pop();\n      bStack.pop();\n      continue;\n    }\n    a = frame.a;\n    b = frame.b;\n\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) {\n      if (a !== 0 || 1 / a === 1 / b) continue;\n      return false;\n    }\n    // `null` or `undefined` only equal to itself (strict comparison).\n    if (a == null || b == null) return false;\n    // `NaN`s are equivalent, but non-reflexive.\n    if (a !== a) {\n      if (b !== b) continue;\n      return false;\n    }\n    // Exhaust primitive checks\n    var type = typeof a;\n    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n\n// Internal recursive comparison function for `_.isEqual`.\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    // Work around a bug in IE 10 - Edge 13.\n    if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n      if (!isDataView(b)) return false;\n      className = tagDataView;\n    }\n    switch (className) {\n      // These types are compared by value.\n    case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case '[object String]':\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      if ('' + a === '' + b) continue;\n      return false;\n    case '[object Number]':\n      todo.push({a: +a, b: +b});\n      continue;\n    case '[object Date]':\n    case '[object Boolean]':\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      if (+a === +b) continue;\n      return false;\n    case '[object Symbol]':\n      if (SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b)) continue;\n      return false;\n    case '[object ArrayBuffer]':\n    case tagDataView:\n      // Coerce to typed array so we can fall through.\n      todo.push({a: toBufferView(a), b: toBufferView(b)});\n      continue;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays && isTypedArray(a)) {\n      var byteLength = getByteLength(a);\n      if (byteLength !== getByteLength(b)) return false;\n      if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) continue;\n      areArrays = true;\n    }\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n                               isFunction(bCtor) && bCtor instanceof bCtor)\n          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) {\n        if (bStack[length] === b) break;\n        return false;\n      }\n    }\n    if (length >= 0) continue;\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n    todo.push(true);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        todo.push({a: a[length], b: b[length]});\n      }\n    } else {\n      // Deep compare objects.\n      var _keys = keys(a), key;\n      length = _keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = _keys[length];\n        if (!has(b, key)) return false;\n        todo.push({a: a[key], b: b[key]});\n      }\n    }\n  }\n  return true;\n}\n", "import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n  if (!isObject(obj)) return [];\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n", "import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n  var length = getLength(methods);\n  return function(obj) {\n    if (obj == null) return false;\n    // `Map`, `WeakMap` and `Set` have no enumerable keys.\n    var keys = allKeys(obj);\n    if (getLength(keys)) return false;\n    for (var i = 0; i < length; i++) {\n      if (!isFunction(obj[methods[i]])) return false;\n    }\n    // If we are testing against `WeakMap`, we need to ensure that\n    // `obj` doesn't have a `forEach` method in order to distinguish\n    // it from a regular `Map`.\n    return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n  };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n    hasName = 'has',\n    commonInit = ['clear', 'delete'],\n    mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n    weakMapMethods = commonInit.concat(mapTail),\n    setMethods = ['add'].concat(commonInit, forEachName, hasName);\n", "import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n", "import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n", "import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n", "import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n", "import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var values = Array(length);\n  for (var i = 0; i < length; i++) {\n    values[i] = obj[_keys[i]];\n  }\n  return values;\n}\n", "import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var pairs = Array(length);\n  for (var i = 0; i < length; i++) {\n    pairs[i] = [_keys[i], obj[_keys[i]]];\n  }\n  return pairs;\n}\n", "import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n  var result = {};\n  var _keys = keys(obj);\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    result[obj[_keys[i]]] = _keys[i];\n  }\n  return result;\n}\n", "import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n  var names = [];\n  for (var key in obj) {\n    if (isFunction(obj[key])) names.push(key);\n  }\n  return names.sort();\n}\n", "// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n  return function(obj) {\n    var length = arguments.length;\n    if (defaults) obj = Object(obj);\n    if (length < 2 || obj == null) return obj;\n    for (var index = 1; index < length; index++) {\n      var source = arguments[index],\n          keys = keysFunc(source),\n          l = keys.length;\n      for (var i = 0; i < l; i++) {\n        var key = keys[i];\n        if (!defaults || obj[key] === void 0) obj[key] = source[key];\n      }\n    }\n    return obj;\n  };\n}\n", "import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n", "import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n", "import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n", "import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n  return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n  if (!isObject(prototype)) return {};\n  if (nativeCreate) return nativeCreate(prototype);\n  var Ctor = ctor();\n  Ctor.prototype = prototype;\n  var result = new Ctor;\n  Ctor.prototype = null;\n  return result;\n}\n", "import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n  var result = baseCreate(prototype);\n  if (props) extendOwn(result, props);\n  return result;\n}\n", "import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n  if (!isObject(obj)) return obj;\n  return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n", "// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n  interceptor(obj);\n  return obj;\n}\n", "import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n  return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n", "import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n  return _.toPath(path);\n}\n", "// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    if (obj == null) return void 0;\n    obj = obj[path[i]];\n  }\n  return length ? obj : void 0;\n}\n", "import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n  var value = deepGet(object, toPath(path));\n  return isUndefined(value) ? defaultValue : value;\n}\n", "import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n  path = toPath(path);\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    var key = path[i];\n    if (!_has(obj, key)) return false;\n    obj = obj[key];\n  }\n  return !!length;\n}\n", "// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n  return value;\n}\n", "import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n  attrs = extendOwn({}, attrs);\n  return function(obj) {\n    return isMatch(obj, attrs);\n  };\n}\n", "import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object\u2019s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n  path = toPath(path);\n  return function(obj) {\n    return deepGet(obj, path);\n  };\n}\n", "// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n  if (context === void 0) return func;\n  switch (argCount == null ? 3 : argCount) {\n    case 1: return function(value) {\n      return func.call(context, value);\n    };\n    // The 2-argument case is omitted because we\u2019re not using it.\n    case 3: return function(value, index, collection) {\n      return func.call(context, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(context, accumulator, value, index, collection);\n    };\n  }\n  return function() {\n    return func.apply(context, arguments);\n  };\n}\n", "import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result \u2014 either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n  if (value == null) return identity;\n  if (isFunction(value)) return optimizeCb(value, context, argCount);\n  if (isObject(value) && !isArray(value)) return matcher(value);\n  return property(value);\n}\n", "import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n  return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n", "import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n  if (_.iteratee !== iteratee) return _.iteratee(value, context);\n  return baseIteratee(value, context, argCount);\n}\n", "import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = keys(obj),\n      length = _keys.length,\n      results = {};\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys[index];\n    results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n", "// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n", "import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n  if (obj == null) return noop;\n  return function(path) {\n    return get(obj, path);\n  };\n}\n", "import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n  var accum = Array(Math.max(0, n));\n  iteratee = optimizeCb(iteratee, context, 1);\n  for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n  return accum;\n}\n", "// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n  if (max == null) {\n    max = min;\n    min = 0;\n  }\n  return min + Math.floor(Math.random() * (max - min + 1));\n}\n", "// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n  return new Date().getTime();\n};\n", "import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n  var escaper = function(match) {\n    return map[match];\n  };\n  // Regexes for identifying a key that needs to be escaped.\n  var source = '(?:' + keys(map).join('|') + ')';\n  var testRegexp = RegExp(source);\n  var replaceRegexp = RegExp(source, 'g');\n  return function(string) {\n    string = string == null ? '' : '' + string;\n    return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n  };\n}\n", "// Internal list of HTML entities for escaping.\nexport default {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;'\n};\n", "import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n", "import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n", "import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n", "import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n  evaluate: /<%([\\s\\S]+?)%>/g,\n  interpolate: /<%=([\\s\\S]+?)%>/g,\n  escape: /<%-([\\s\\S]+?)%>/g\n};\n", "import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n  \"'\": \"'\",\n  '\\\\': '\\\\',\n  '\\r': 'r',\n  '\\n': 'n',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n  return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n  if (!settings && oldSettings) settings = oldSettings;\n  settings = defaults({}, settings, _.templateSettings);\n\n  // Combine delimiters into one regular expression via alternation.\n  var matcher = RegExp([\n    (settings.escape || noMatch).source,\n    (settings.interpolate || noMatch).source,\n    (settings.evaluate || noMatch).source\n  ].join('|') + '|$', 'g');\n\n  // Compile the template source, escaping string literals appropriately.\n  var index = 0;\n  var source = \"__p+='\";\n  text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n    source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n    index = offset + match.length;\n\n    if (escape) {\n      source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n    } else if (interpolate) {\n      source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n    } else if (evaluate) {\n      source += \"';\\n\" + evaluate + \"\\n__p+='\";\n    }\n\n    // Adobe VMs need the match returned to produce the correct offset.\n    return match;\n  });\n  source += \"';\\n\";\n\n  var argument = settings.variable;\n  if (argument) {\n    // Insure against third-party code injection. (CVE-2021-23358)\n    if (!bareIdentifier.test(argument)) throw new Error(\n      'variable is not a bare identifier: ' + argument\n    );\n  } else {\n    // If a variable is not specified, place data values in local scope.\n    source = 'with(obj||{}){\\n' + source + '}\\n';\n    argument = 'obj';\n  }\n\n  source = \"var __t,__p='',__j=Array.prototype.join,\" +\n    \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n    source + 'return __p;\\n';\n\n  var render;\n  try {\n    render = new Function(argument, '_', source);\n  } catch (e) {\n    e.source = source;\n    throw e;\n  }\n\n  var template = function(data) {\n    return render.call(this, data, _);\n  };\n\n  // Provide the compiled source as a convenience for precompilation.\n  template.source = 'function(' + argument + '){\\n' + source + '}';\n\n  return template;\n}\n", "import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n  path = toPath(path);\n  var length = path.length;\n  if (!length) {\n    return isFunction(fallback) ? fallback.call(obj) : fallback;\n  }\n  for (var i = 0; i < length; i++) {\n    var prop = obj == null ? void 0 : obj[path[i]];\n    if (prop === void 0) {\n      prop = fallback;\n      i = length; // Ensure we don't continue iterating.\n    }\n    obj = isFunction(prop) ? prop.call(obj) : prop;\n  }\n  return obj;\n}\n", "// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n", "import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n  var instance = _(obj);\n  instance._chain = true;\n  return instance;\n}\n", "import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n  if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n  var self = baseCreate(sourceFunc.prototype);\n  var result = sourceFunc.apply(self, args);\n  if (isObject(result)) return result;\n  return self;\n}\n", "import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n  var placeholder = partial.placeholder;\n  var bound = function() {\n    var position = 0, length = boundArgs.length;\n    var args = Array(length);\n    for (var i = 0; i < length; i++) {\n      args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n    }\n    while (position < arguments.length) args.push(arguments[position++]);\n    return executeBound(func, bound, this, this, args);\n  };\n  return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n", "import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n  if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n  var bound = restArguments(function(callArgs) {\n    return executeBound(func, bound, context, this, args.concat(callArgs));\n  });\n  return bound;\n});\n", "import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n", "import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict) {\n  if (!depth && depth !== 0) depth = Infinity;\n  var output = [], idx = 0, i = 0, length = getLength(input) || 0, stack = [];\n  while (true) {\n    if (i >= length) {\n      if (!stack.length) break;\n      var frame = stack.pop();\n      i = frame.i;\n      input = frame.v;\n      length = getLength(input);\n      continue;\n    }\n    var value = input[i++];\n    if (stack.length >= depth) {\n      output[idx++] = value;\n    } else if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n      // Flatten current level of array or arguments object.\n      stack.push({i: i, v: input});\n      i = 0;\n      input = value;\n      length = getLength(input);\n    } else if (!strict) {\n      output[idx++] = value;\n    }\n  }\n  return output;\n}\n", "import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n  keys = flatten(keys, false, false);\n  var index = keys.length;\n  if (index < 1) throw new Error('bindAll must be passed function names');\n  while (index--) {\n    var key = keys[index];\n    obj[key] = bind(obj[key], obj);\n  }\n  return obj;\n});\n", "import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n  var memoize = function(key) {\n    var cache = memoize.cache;\n    var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n    if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n    return cache[address];\n  };\n  memoize.cache = {};\n  return memoize;\n}\n", "import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n  return setTimeout(function() {\n    return func.apply(null, args);\n  }, wait);\n});\n", "import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n", "import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n  var timeout, context, args, result;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function() {\n    var _now = now();\n    if (!previous && options.leading === false) previous = _now;\n    var remaining = wait - (_now - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = _now;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function() {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n", "import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n  var timeout, previous, args, result, context;\n\n  var later = function() {\n    var passed = now() - previous;\n    if (wait > passed) {\n      timeout = setTimeout(later, wait - passed);\n    } else {\n      timeout = null;\n      if (!immediate) result = func.apply(context, args);\n      // This check is needed because `func` can recursively invoke `debounced`.\n      if (!timeout) args = context = null;\n    }\n  };\n\n  var debounced = restArguments(function(_args) {\n    context = this;\n    args = _args;\n    previous = now();\n    if (!timeout) {\n      timeout = setTimeout(later, wait);\n      if (immediate) result = func.apply(context, args);\n    }\n    return result;\n  });\n\n  debounced.cancel = function() {\n    clearTimeout(timeout);\n    timeout = args = context = null;\n  };\n\n  return debounced;\n}\n", "import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n  return partial(wrapper, func);\n}\n", "// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n  return function() {\n    return !predicate.apply(this, arguments);\n  };\n}\n", "// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n  var args = arguments;\n  var start = args.length - 1;\n  return function() {\n    var i = start;\n    var result = args[start].apply(this, arguments);\n    while (i--) result = args[i].call(this, result);\n    return result;\n  };\n}\n", "// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n  return function() {\n    if (--times < 1) {\n      return func.apply(this, arguments);\n    }\n  };\n}\n", "// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n  var memo;\n  return function() {\n    if (--times > 0) {\n      memo = func.apply(this, arguments);\n    }\n    if (times <= 1) func = null;\n    return memo;\n  };\n}\n", "import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n", "import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = keys(obj), key;\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    key = _keys[i];\n    if (predicate(obj[key], key, obj)) return key;\n  }\n}\n", "import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n  return function(array, predicate, context) {\n    predicate = cb(predicate, context);\n    var length = getLength(array);\n    var index = dir > 0 ? 0 : length - 1;\n    for (; index >= 0 && index < length; index += dir) {\n      if (predicate(array[index], index, array)) return index;\n    }\n    return -1;\n  };\n}\n", "import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n", "import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n", "import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n  iteratee = cb(iteratee, context, 1);\n  var value = iteratee(obj);\n  var low = 0, high = getLength(array);\n  while (low < high) {\n    var mid = Math.floor((low + high) / 2);\n    if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n  }\n  return low;\n}\n", "import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n  return function(array, item, idx) {\n    var i = 0, length = getLength(array);\n    if (typeof idx == 'number') {\n      if (dir > 0) {\n        i = idx >= 0 ? idx : Math.max(idx + length, i);\n      } else {\n        length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n      }\n    } else if (sortedIndex && idx && length) {\n      idx = sortedIndex(array, item);\n      return array[idx] === item ? idx : -1;\n    }\n    if (item !== item) {\n      idx = predicateFind(slice.call(array, i, length), isNaN);\n      return idx >= 0 ? idx + i : -1;\n    }\n    for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n      if (array[idx] === item) return idx;\n    }\n    return -1;\n  };\n}\n", "import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n", "import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n", "import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n  var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n  var key = keyFinder(obj, predicate, context);\n  if (key !== void 0 && key !== -1) return obj[key];\n}\n", "import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n  return find(obj, matcher(attrs));\n}\n", "import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n  iteratee = optimizeCb(iteratee, context);\n  var i, length;\n  if (isArrayLike(obj)) {\n    for (i = 0, length = obj.length; i < length; i++) {\n      iteratee(obj[i], i, obj);\n    }\n  } else {\n    var _keys = keys(obj);\n    for (i = 0, length = _keys.length; i < length; i++) {\n      iteratee(obj[_keys[i]], _keys[i], obj);\n    }\n  }\n  return obj;\n}\n", "import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length,\n      results = Array(length);\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    results[index] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n", "import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n  // Wrap code that reassigns argument variables in a separate function than\n  // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n  var reducer = function(obj, iteratee, memo, initial) {\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length,\n        index = dir > 0 ? 0 : length - 1;\n    if (!initial) {\n      memo = obj[_keys ? _keys[index] : index];\n      index += dir;\n    }\n    for (; index >= 0 && index < length; index += dir) {\n      var currentKey = _keys ? _keys[index] : index;\n      memo = iteratee(memo, obj[currentKey], currentKey, obj);\n    }\n    return memo;\n  };\n\n  return function(obj, iteratee, memo, context) {\n    var initial = arguments.length >= 3;\n    return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n  };\n}\n", "import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n", "import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n", "import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n  var results = [];\n  predicate = cb(predicate, context);\n  each(obj, function(value, index, list) {\n    if (predicate(value, index, list)) results.push(value);\n  });\n  return results;\n}\n", "import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n  return filter(obj, negate(cb(predicate)), context);\n}\n", "import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (!predicate(obj[currentKey], currentKey, obj)) return false;\n  }\n  return true;\n}\n", "import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (predicate(obj[currentKey], currentKey, obj)) return true;\n  }\n  return false;\n}\n", "import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n  if (!isArrayLike(obj)) obj = values(obj);\n  if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n  return indexOf(obj, item, fromIndex) >= 0;\n}\n", "import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n  var contextPath, func;\n  if (isFunction(path)) {\n    func = path;\n  } else {\n    path = toPath(path);\n    contextPath = path.slice(0, -1);\n    path = path[path.length - 1];\n  }\n  return map(obj, function(context) {\n    var method = func;\n    if (!method) {\n      if (contextPath && contextPath.length) {\n        context = deepGet(context, contextPath);\n      }\n      if (context == null) return void 0;\n      method = context[path];\n    }\n    return method == null ? method : method.apply(context, args);\n  });\n});\n", "import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n  return map(obj, property(key));\n}\n", "import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n  return filter(obj, matcher(attrs));\n}\n", "import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n  var result = -Infinity, lastComputed = -Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value > result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n", "import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n  var result = Infinity, lastComputed = Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value < result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n", "import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n  if (!obj) return [];\n  if (isArray(obj)) return slice.call(obj);\n  if (isString(obj)) {\n    // Keep surrogate pair characters together.\n    return obj.match(reStrSymbol);\n  }\n  if (isArrayLike(obj)) return map(obj, identity);\n  return values(obj);\n}\n", "import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher\u2013Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n  if (n == null || guard) {\n    if (!isArrayLike(obj)) obj = values(obj);\n    return obj[random(obj.length - 1)];\n  }\n  var sample = toArray(obj);\n  var length = getLength(sample);\n  n = Math.max(Math.min(n, length), 0);\n  var last = length - 1;\n  for (var index = 0; index < n; index++) {\n    var rand = random(index, last);\n    var temp = sample[index];\n    sample[index] = sample[rand];\n    sample[rand] = temp;\n  }\n  return sample.slice(0, n);\n}\n", "import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n  return sample(obj, Infinity);\n}\n", "import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n  var index = 0;\n  iteratee = cb(iteratee, context);\n  return pluck(map(obj, function(value, key, list) {\n    return {\n      value: value,\n      index: index++,\n      criteria: iteratee(value, key, list)\n    };\n  }).sort(function(left, right) {\n    var a = left.criteria;\n    var b = right.criteria;\n    if (a !== b) {\n      if (a > b || a === void 0) return 1;\n      if (a < b || b === void 0) return -1;\n    }\n    return left.index - right.index;\n  }), 'value');\n}\n", "import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n  return function(obj, iteratee, context) {\n    var result = partition ? [[], []] : {};\n    iteratee = cb(iteratee, context);\n    each(obj, function(value, index) {\n      var key = iteratee(value, index, obj);\n      behavior(result, value, key);\n    });\n    return result;\n  };\n}\n", "import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n", "import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n  result[key] = value;\n});\n", "import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key]++; else result[key] = 1;\n});\n", "import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n  result[pass ? 0 : 1].push(value);\n}, true);\n", "import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n  if (obj == null) return 0;\n  return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n", "// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n  return key in obj;\n}\n", "import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n  var result = {}, iteratee = keys[0];\n  if (obj == null) return result;\n  if (isFunction(iteratee)) {\n    if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n    keys = allKeys(obj);\n  } else {\n    iteratee = keyInObj;\n    keys = flatten(keys, false, false);\n    obj = Object(obj);\n  }\n  for (var i = 0, length = keys.length; i < length; i++) {\n    var key = keys[i];\n    var value = obj[key];\n    if (iteratee(value, key, obj)) result[key] = value;\n  }\n  return result;\n});\n", "import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n  var iteratee = keys[0], context;\n  if (isFunction(iteratee)) {\n    iteratee = negate(iteratee);\n    if (keys.length > 1) context = keys[1];\n  } else {\n    keys = map(flatten(keys, false, false), String);\n    iteratee = function(value, key) {\n      return !contains(keys, key);\n    };\n  }\n  return pick(obj, iteratee, context);\n});\n", "import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n  return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n", "import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[0];\n  return initial(array, array.length - n);\n}\n", "import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n  return slice.call(array, n == null || guard ? 1 : n);\n}\n", "import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[array.length - 1];\n  return rest(array, Math.max(0, array.length - n));\n}\n", "import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n  return filter(array, Boolean);\n}\n", "import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n  return _flatten(array, depth, false);\n}\n", "import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n  rest = flatten(rest, true, true);\n  return filter(array, function(value){\n    return !contains(rest, value);\n  });\n});\n", "import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n  return difference(array, otherArrays);\n});\n", "import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n  if (!isBoolean(isSorted)) {\n    context = iteratee;\n    iteratee = isSorted;\n    isSorted = false;\n  }\n  if (iteratee != null) iteratee = cb(iteratee, context);\n  var result = [];\n  var seen = [];\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var value = array[i],\n        computed = iteratee ? iteratee(value, i, array) : value;\n    if (isSorted && !iteratee) {\n      if (!i || seen !== computed) result.push(value);\n      seen = computed;\n    } else if (iteratee) {\n      if (!contains(seen, computed)) {\n        seen.push(computed);\n        result.push(value);\n      }\n    } else if (!contains(result, value)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n", "import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n  return uniq(flatten(arrays, true, true));\n});\n", "import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n  var result = [];\n  var argsLength = arguments.length;\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var item = array[i];\n    if (contains(result, item)) continue;\n    var j;\n    for (j = 1; j < argsLength; j++) {\n      if (!contains(arguments[j], item)) break;\n    }\n    if (j === argsLength) result.push(item);\n  }\n  return result;\n}\n", "import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n  var length = (array && max(array, getLength).length) || 0;\n  var result = Array(length);\n\n  for (var index = 0; index < length; index++) {\n    result[index] = pluck(array, index);\n  }\n  return result;\n}\n", "import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n", "import getLength  from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n  var result = {};\n  for (var i = 0, length = getLength(list); i < length; i++) {\n    if (values) {\n      result[list[i]] = values[i];\n    } else {\n      result[list[i][0]] = list[i][1];\n    }\n  }\n  return result;\n}\n", "// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n  if (stop == null) {\n    stop = start || 0;\n    start = 0;\n  }\n  if (!step) {\n    step = stop < start ? -1 : 1;\n  }\n\n  var length = Math.max(Math.ceil((stop - start) / step), 0);\n  var range = Array(length);\n\n  for (var idx = 0; idx < length; idx++, start += step) {\n    range[idx] = start;\n  }\n\n  return range;\n}\n", "import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n  if (count == null || count < 1) return [];\n  var result = [];\n  var i = 0, length = array.length;\n  while (i < length) {\n    result.push(slice.call(array, i, i += count));\n  }\n  return result;\n}\n", "import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n  return instance._chain ? _(obj).chain() : obj;\n}\n", "import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n  each(functions(obj), function(name) {\n    var func = _[name] = obj[name];\n    _.prototype[name] = function() {\n      var args = [this._wrapped];\n      push.apply(args, arguments);\n      return chainResult(this, func.apply(_, args));\n    };\n  });\n  return _;\n}\n", "import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) {\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n        delete obj[0];\n      }\n    }\n    return chainResult(this, obj);\n  };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) obj = method.apply(obj, arguments);\n    return chainResult(this, obj);\n  };\n});\n\nexport default _;\n", "// Named Exports\n// =============\n\n//     Underscore.js 1.13.8\n//     https://underscorejs.org\n//     (c) 2009-2026 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n// Baseline setup.\nexport { VERSION } from './_setup.js';\nexport { default as restArguments } from './restArguments.js';\n\n// Object Functions\n// ----------------\n// Our most fundamental functions operate on any JavaScript object.\n// Most functions in Underscore depend on at least one function in this section.\n\n// A group of functions that check the types of core JavaScript values.\n// These are often informally referred to as the \"isType\" functions.\nexport { default as isObject } from './isObject.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isString } from './isString.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isError } from './isError.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isDataView } from './isDataView.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isWeakSet } from './isWeakSet.js';\n\n// Functions that treat an object as a dictionary of key-value pairs.\nexport { default as keys } from './keys.js';\nexport { default as allKeys } from './allKeys.js';\nexport { default as values } from './values.js';\nexport { default as pairs } from './pairs.js';\nexport { default as invert } from './invert.js';\nexport { default as functions,\n         default as methods   } from './functions.js';\nexport { default as extend } from './extend.js';\nexport { default as extendOwn,\n         default as assign    } from './extendOwn.js';\nexport { default as defaults } from './defaults.js';\nexport { default as create } from './create.js';\nexport { default as clone } from './clone.js';\nexport { default as tap } from './tap.js';\nexport { default as get } from './get.js';\nexport { default as has } from './has.js';\nexport { default as mapObject } from './mapObject.js';\n\n// Utility Functions\n// -----------------\n// A bit of a grab bag: Predicate-generating functions for use with filters and\n// loops, string escaping and templating, create random numbers and unique ids,\n// and functions that facilitate Underscore's chaining and iteration conventions.\nexport { default as identity } from './identity.js';\nexport { default as constant } from './constant.js';\nexport { default as noop } from './noop.js';\nexport { default as toPath } from './toPath.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as matcher,\n         default as matches } from './matcher.js';\nexport { default as times } from './times.js';\nexport { default as random } from './random.js';\nexport { default as now } from './now.js';\nexport { default as escape } from './escape.js';\nexport { default as unescape } from './unescape.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as template } from './template.js';\nexport { default as result } from './result.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as chain } from './chain.js';\nexport { default as iteratee } from './iteratee.js';\n\n// Function (ahem) Functions\n// -------------------------\n// These functions take a function as an argument and return a new function\n// as the result. Also known as higher-order functions.\nexport { default as partial } from './partial.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as memoize } from './memoize.js';\nexport { default as delay } from './delay.js';\nexport { default as defer } from './defer.js';\nexport { default as throttle } from './throttle.js';\nexport { default as debounce } from './debounce.js';\nexport { default as wrap } from './wrap.js';\nexport { default as negate } from './negate.js';\nexport { default as compose } from './compose.js';\nexport { default as after } from './after.js';\nexport { default as before } from './before.js';\nexport { default as once } from './once.js';\n\n// Finders\n// -------\n// Functions that extract (the position of) a single element from an object\n// or array based on some criterion.\nexport { default as findKey } from './findKey.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as find,\n         default as detect } from './find.js';\nexport { default as findWhere } from './findWhere.js';\n\n// Collection Functions\n// --------------------\n// Functions that work on any collection of elements: either an array, or\n// an object of key-value pairs.\nexport { default as each,\n         default as forEach } from './each.js';\nexport { default as map,\n         default as collect } from './map.js';\nexport { default as reduce,\n         default as foldl,\n         default as inject } from './reduce.js';\nexport { default as reduceRight,\n         default as foldr       } from './reduceRight.js';\nexport { default as filter,\n         default as select } from './filter.js';\nexport { default as reject } from './reject.js';\nexport { default as every,\n         default as all   } from './every.js';\nexport { default as some,\n         default as any  } from './some.js';\nexport { default as contains,\n         default as includes,\n         default as include  } from './contains.js';\nexport { default as invoke } from './invoke.js';\nexport { default as pluck } from './pluck.js';\nexport { default as where } from './where.js';\nexport { default as max } from './max.js';\nexport { default as min } from './min.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as sample } from './sample.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as indexBy } from './indexBy.js';\nexport { default as countBy } from './countBy.js';\nexport { default as partition } from './partition.js';\nexport { default as toArray } from './toArray.js';\nexport { default as size } from './size.js';\n\n// `_.pick` and `_.omit` are actually object functions, but we put\n// them here in order to create a more natural reading order in the\n// monolithic build as they depend on `_.contains`.\nexport { default as pick } from './pick.js';\nexport { default as omit } from './omit.js';\n\n// Array Functions\n// ---------------\n// Functions that operate on arrays (and array-likes) only, because they\u2019re\n// expressed in terms of operations on an ordered list of values.\nexport { default as first,\n         default as head,\n         default as take  } from './first.js';\nexport { default as initial } from './initial.js';\nexport { default as last } from './last.js';\nexport { default as rest,\n         default as tail,\n         default as drop } from './rest.js';\nexport { default as compact } from './compact.js';\nexport { default as flatten } from './flatten.js';\nexport { default as without } from './without.js';\nexport { default as uniq,\n         default as unique } from './uniq.js';\nexport { default as union } from './union.js';\nexport { default as intersection } from './intersection.js';\nexport { default as difference } from './difference.js';\nexport { default as unzip,\n         default as transpose } from './unzip.js';\nexport { default as zip } from './zip.js';\nexport { default as object } from './object.js';\nexport { default as range } from './range.js';\nexport { default as chunk } from './chunk.js';\n\n// OOP\n// ---\n// These modules support the \"object-oriented\" calling style. See also\n// `underscore.js` and `index-default.js`.\nexport { default as mixin } from './mixin.js';\nexport { default } from './underscore-array-methods.js';\n", "// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n", "// ESM Exports\n// ===========\n// This module is the package entry point for ES module users. In other words,\n// it is the module they are interfacing with when they import from the whole\n// package instead of from a submodule, like this:\n//\n// ```js\n// import { map } from 'underscore';\n// ```\n//\n// The difference with `./index-default`, which is the package entry point for\n// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and\n// default exports are considered to be siblings, so when you have a default\n// export, its properties are not automatically available as named exports. For\n// this reason, we re-export the named exports in addition to providing the same\n// default export as in `./index-default`.\nexport { default } from './index-default.js';\nexport * from './index.js';\n", "var isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n", "\"use strict\";\nvar es5 = require(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var l = 8;\n    while (l--) new FakeConstructor();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\";\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if ({}.toString.call(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nfunction domainBind(self, cb) {\n    return self.bind(cb);\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version = process.versions.node.split(\".\").map(Number);\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n", "\"use strict\";\nvar util = require(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova))) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n                toggleScheduled = true;\n                div2.classList.toggle(\"foo\");\n            };\n\n            return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n", "\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n", "\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule\");\nvar Queue = require(\"./queue\");\nvar util = require(\"./util\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n    this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nAsync.prototype._drainQueue = function(queue) {\n    while (queue.length() > 0) {\n        var fn = queue.shift();\n        if (typeof fn !== \"function\") {\n            fn._settlePromises();\n            continue;\n        }\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n};\n\nAsync.prototype._drainQueues = function () {\n    this._drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n", "\"use strict\";\nvar es5 = require(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = require(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = require(\"./errors\").Warning;\nvar util = require(\"./util\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (false ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Context.deactivateLongStackTraces();\n            async.enableTrampoline();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Context.activateLongStackTraces();\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new CustomEvent(name.toLowerCase(), {\n                    detail: event,\n                    cancelable: true\n                });\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new Event(name.toLowerCase(), {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name.toLowerCase(), false, true,\n                    event);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = firstLineError.stack.split(\"\\n\");\n    var lastStackLines = lastLineError.stack.split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise) {\nvar util = require(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nreturn PassThroughHandlerContext;\n};\n", "\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util\");\nvar getKeys = require(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n", "\"use strict\";\nvar util = require(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = require(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n         getDomain) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!false) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var domain = getDomain();\n                        if (domain !== null) {\n                            holder.fn = util.domainBind(domain, holder.fn);\n                        }\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];};\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : util.domainBind(domain, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n", "\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n    if (!false) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n", "\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = require(\"./util\");\n    var TypeError = require(\"./errors\").TypeError;\n    var inherits = require(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = require(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = require(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", value) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util\");\nvar nodebackForPromise = require(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n", "\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n", "\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var domain = getDomain();\n    this._fn = domain === null ? fn : util.domainBind(domain, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined && \n        this._eachValues !== null && \n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n", "\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util\");\nvar RangeError = require(\"./errors\").RangeError;\nvar AggregateError = require(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n", "\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = require(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = require(\"./es5\");\nvar Async = require(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = require(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = require(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    require(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = require(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = require(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    require(\"./finally\")(Promise, tryConvertToPromise);\nvar catchFilter = require(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = require(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n    if (self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n}\n\nfunction Promise(executor) {\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    if (executor !== INTERNAL) {\n        check(this, executor);\n        this._resolveFromExecutor(executor);\n    }\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"expecting an object but got \" +\n                    \"A catch statement predicate \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var domain = getDomain();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: domain === null ? handler\n                : (typeof handler === \"function\" &&\n                    util.domainBind(domain, handler)),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\nrequire(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\nrequire(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\nrequire(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\nrequire(\"./direct_resolve\")(Promise);\nrequire(\"./synchronous_inspection\")(Promise);\nrequire(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.4.7\";\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./call_get.js')(Promise);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\nrequire('./timers.js')(Promise, INTERNAL, debug);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\nrequire('./nodeify.js')(Promise);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./settle.js')(Promise, PromiseArray, debug);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./filter.js')(Promise, INTERNAL);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./any.js')(Promise);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n", "var _ = require(\"underscore\");\nvar bluebird = require(\"bluebird/js/release/promise\")();\n\nexports.defer = defer;\nexports.when = bluebird.resolve;\nexports.resolve = bluebird.resolve;\nexports.all = bluebird.all;\nexports.props = bluebird.props;\nexports.reject = bluebird.reject;\nexports.promisify = bluebird.promisify;\nexports.mapSeries = bluebird.mapSeries;\nexports.attempt = bluebird.attempt;\n\nexports.nfcall = function(func) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    var promisedFunc = bluebird.promisify(func);\n    return promisedFunc.apply(null, args);\n};\n\nbluebird.prototype.fail = bluebird.prototype.caught;\n\nbluebird.prototype.also = function(func) {\n    return this.then(function(value) {\n        var returnValue = _.extend({}, value, func(value));\n        return bluebird.props(returnValue);\n    });\n};\n\nfunction defer() {\n    var resolve;\n    var reject;\n    var promise = new bluebird.Promise(function(resolveArg, rejectArg) {\n        resolve = resolveArg;\n        reject = rejectArg;\n    });\n\n    return {\n        resolve: resolve,\n        reject: reject,\n        promise: promise\n    };\n}\n", "var _ = require(\"underscore\");\n\nvar types = exports.types = {\n    document: \"document\",\n    paragraph: \"paragraph\",\n    run: \"run\",\n    text: \"text\",\n    tab: \"tab\",\n    checkbox: \"checkbox\",\n    hyperlink: \"hyperlink\",\n    noteReference: \"noteReference\",\n    image: \"image\",\n    note: \"note\",\n    commentReference: \"commentReference\",\n    comment: \"comment\",\n    table: \"table\",\n    tableRow: \"tableRow\",\n    tableCell: \"tableCell\",\n    \"break\": \"break\",\n    bookmarkStart: \"bookmarkStart\"\n};\n\nfunction Document(children, options) {\n    options = options || {};\n    return {\n        type: types.document,\n        children: children,\n        notes: options.notes || new Notes({}),\n        comments: options.comments || []\n    };\n}\n\nfunction Paragraph(children, properties) {\n    properties = properties || {};\n    var indent = properties.indent || {};\n    return {\n        type: types.paragraph,\n        children: children,\n        styleId: properties.styleId || null,\n        styleName: properties.styleName || null,\n        numbering: properties.numbering || null,\n        alignment: properties.alignment || null,\n        indent: {\n            start: indent.start || null,\n            end: indent.end || null,\n            firstLine: indent.firstLine || null,\n            hanging: indent.hanging || null\n        }\n    };\n}\n\nfunction Run(children, properties) {\n    properties = properties || {};\n    return {\n        type: types.run,\n        children: children,\n        styleId: properties.styleId || null,\n        styleName: properties.styleName || null,\n        isBold: !!properties.isBold,\n        isUnderline: !!properties.isUnderline,\n        isItalic: !!properties.isItalic,\n        isStrikethrough: !!properties.isStrikethrough,\n        isAllCaps: !!properties.isAllCaps,\n        isSmallCaps: !!properties.isSmallCaps,\n        verticalAlignment: properties.verticalAlignment || verticalAlignment.baseline,\n        font: properties.font || null,\n        fontSize: properties.fontSize || null,\n        highlight: properties.highlight || null\n    };\n}\n\nvar verticalAlignment = {\n    baseline: \"baseline\",\n    superscript: \"superscript\",\n    subscript: \"subscript\"\n};\n\nfunction Text(value) {\n    return {\n        type: types.text,\n        value: value\n    };\n}\n\nfunction Tab() {\n    return {\n        type: types.tab\n    };\n}\n\nfunction Checkbox(options) {\n    return {\n        type: types.checkbox,\n        checked: options.checked\n    };\n}\n\nfunction Hyperlink(children, options) {\n    return {\n        type: types.hyperlink,\n        children: children,\n        href: options.href,\n        anchor: options.anchor,\n        targetFrame: options.targetFrame\n    };\n}\n\nfunction NoteReference(options) {\n    return {\n        type: types.noteReference,\n        noteType: options.noteType,\n        noteId: options.noteId\n    };\n}\n\nfunction Notes(notes) {\n    this._notes = _.indexBy(notes, function(note) {\n        return noteKey(note.noteType, note.noteId);\n    });\n}\n\nNotes.prototype.resolve = function(reference) {\n    return this.findNoteByKey(noteKey(reference.noteType, reference.noteId));\n};\n\nNotes.prototype.findNoteByKey = function(key) {\n    return this._notes[key] || null;\n};\n\nfunction Note(options) {\n    return {\n        type: types.note,\n        noteType: options.noteType,\n        noteId: options.noteId,\n        body: options.body\n    };\n}\n\nfunction commentReference(options) {\n    return {\n        type: types.commentReference,\n        commentId: options.commentId\n    };\n}\n\nfunction comment(options) {\n    return {\n        type: types.comment,\n        commentId: options.commentId,\n        body: options.body,\n        authorName: options.authorName,\n        authorInitials: options.authorInitials\n    };\n}\n\nfunction noteKey(noteType, id) {\n    return noteType + \"-\" + id;\n}\n\nfunction Image(options) {\n    return {\n        type: types.image,\n        // `read` is retained for backwards compatibility, but other read\n        // methods should be preferred.\n        read: function(encoding) {\n            if (encoding) {\n                return options.readImage(encoding);\n            } else {\n                return options.readImage().then(function(arrayBuffer) {\n                    return Buffer.from(arrayBuffer);\n                });\n            }\n        },\n        readAsArrayBuffer: function() {\n            return options.readImage();\n        },\n        readAsBase64String: function() {\n            return options.readImage(\"base64\");\n        },\n        readAsBuffer: function() {\n            return options.readImage().then(function(arrayBuffer) {\n                return Buffer.from(arrayBuffer);\n            });\n        },\n        altText: options.altText,\n        contentType: options.contentType\n    };\n}\n\nfunction Table(children, properties) {\n    properties = properties || {};\n    return {\n        type: types.table,\n        children: children,\n        styleId: properties.styleId || null,\n        styleName: properties.styleName || null\n    };\n}\n\nfunction TableRow(children, options) {\n    options = options || {};\n    return {\n        type: types.tableRow,\n        children: children,\n        isHeader: options.isHeader || false\n    };\n}\n\nfunction TableCell(children, options) {\n    options = options || {};\n    return {\n        type: types.tableCell,\n        children: children,\n        colSpan: options.colSpan == null ? 1 : options.colSpan,\n        rowSpan: options.rowSpan == null ? 1 : options.rowSpan\n    };\n}\n\nfunction Break(breakType) {\n    return {\n        type: types[\"break\"],\n        breakType: breakType\n    };\n}\n\nfunction BookmarkStart(options) {\n    return {\n        type: types.bookmarkStart,\n        name: options.name\n    };\n}\n\nexports.document = exports.Document = Document;\nexports.paragraph = exports.Paragraph = Paragraph;\nexports.run = exports.Run = Run;\nexports.text = exports.Text = Text;\nexports.tab = exports.Tab = Tab;\nexports.checkbox = exports.Checkbox = Checkbox;\nexports.Hyperlink = Hyperlink;\nexports.noteReference = exports.NoteReference = NoteReference;\nexports.Notes = Notes;\nexports.Note = Note;\nexports.commentReference = commentReference;\nexports.comment = comment;\nexports.Image = Image;\nexports.Table = Table;\nexports.TableRow = TableRow;\nexports.TableCell = TableCell;\nexports.lineBreak = Break(\"line\");\nexports.pageBreak = Break(\"page\");\nexports.columnBreak = Break(\"column\");\nexports.BookmarkStart = BookmarkStart;\n\nexports.verticalAlignment = verticalAlignment;\n", "var _ = require(\"underscore\");\n\n\nexports.Result = Result;\nexports.success = success;\nexports.warning = warning;\nexports.error = error;\n\n\nfunction Result(value, messages) {\n    this.value = value;\n    this.messages = messages || [];\n}\n\nResult.prototype.map = function(func) {\n    return new Result(func(this.value), this.messages);\n};\n\nResult.prototype.flatMap = function(func) {\n    var funcResult = func(this.value);\n    return new Result(funcResult.value, combineMessages([this, funcResult]));\n};\n\nResult.prototype.flatMapThen = function(func) {\n    var that = this;\n    return func(this.value).then(function(otherResult) {\n        return new Result(otherResult.value, combineMessages([that, otherResult]));\n    });\n};\n\nResult.combine = function(results) {\n    var values = _.flatten(_.pluck(results, \"value\"));\n    var messages = combineMessages(results);\n    return new Result(values, messages);\n};\n\nfunction success(value) {\n    return new Result(value, []);\n}\n\nfunction warning(message) {\n    return {\n        type: \"warning\",\n        message: message\n    };\n}\n\nfunction error(exception) {\n    return {\n        type: \"error\",\n        message: exception.message,\n        error: exception\n    };\n}\n\nfunction combineMessages(results) {\n    var messages = [];\n    _.flatten(_.pluck(results, \"messages\"), true).forEach(function(message) {\n        if (!containsMessage(messages, message)) {\n            messages.push(message);\n        }\n    });\n    return messages;\n}\n\nfunction containsMessage(messages, message) {\n    return _.find(messages, isSameMessage.bind(null, message)) !== undefined;\n}\n\nfunction isSameMessage(first, second) {\n    return first.type === second.type && first.message === second.message;\n}\n", "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n", "'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "module.exports = require('stream');\n", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n", "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}", "'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n", "\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n", "\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n", "'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\nif (process.browser) {\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n} else {\n  scheduleDrain = function () {\n    process.nextTick(nextTick);\n  };\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n", "'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n/* istanbul ignore else */\nif (!process.browser) {\n  // in which we actually take advantage of JS scoping\n  var UNHANDLED = ['UNHANDLED'];\n}\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    this.handled = UNHANDLED;\n  }\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype.finally = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype.catch = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (this.handled === UNHANDLED) {\n      this.handled = null;\n    }\n  }\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (self.handled === UNHANDLED) {\n      immediate(function () {\n        if (self.handled === UNHANDLED) {\n          process.emit('unhandledRejection', error, self);\n        }\n      });\n    }\n  }\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n", "\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n", "(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6\u20138\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", "\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n", "\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n", "\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n", "\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n", "\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n", "\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n", "'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n", "'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n", "'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n", "// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n", "'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n", "'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n", "// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n", "\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n", "\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n", "\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n", "\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n", "\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n", "\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n", "\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So\u2026 we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n", "\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n", "var base64js = require(\"base64-js\");\nvar JSZip = require(\"jszip\");\n\nexports.openArrayBuffer = openArrayBuffer;\nexports.splitPath = splitPath;\nexports.joinPath = joinPath;\n\nfunction openArrayBuffer(arrayBuffer) {\n    return JSZip.loadAsync(arrayBuffer).then(function(zipFile) {\n        function exists(name) {\n            return zipFile.file(name) !== null;\n        }\n\n        function read(name, encoding) {\n            return zipFile.file(name).async(\"uint8array\").then(function(array) {\n                if (encoding === \"base64\") {\n                    return base64js.fromByteArray(array);\n                } else if (encoding) {\n                    var decoder = new TextDecoder(encoding);\n                    return decoder.decode(array);\n                } else {\n                    return array;\n                }\n            });\n        }\n\n        function write(name, contents) {\n            zipFile.file(name, contents);\n        }\n\n        function toArrayBuffer() {\n            return zipFile.generateAsync({type: \"arraybuffer\"});\n        }\n\n        return {\n            exists: exists,\n            read: read,\n            write: write,\n            toArrayBuffer: toArrayBuffer\n        };\n    });\n}\n\nfunction splitPath(path) {\n    var lastIndex = path.lastIndexOf(\"/\");\n    if (lastIndex === -1) {\n        return {dirname: \"\", basename: path};\n    } else {\n        return {\n            dirname: path.substring(0, lastIndex),\n            basename: path.substring(lastIndex + 1)\n        };\n    }\n}\n\nfunction joinPath() {\n    var nonEmptyPaths = Array.prototype.filter.call(arguments, function(path) {\n        return path;\n    });\n\n    var relevantPaths = [];\n\n    nonEmptyPaths.forEach(function(path) {\n        if (/^\\//.test(path)) {\n            relevantPaths = [path];\n        } else {\n            relevantPaths.push(path);\n        }\n    });\n\n    return relevantPaths.join(\"/\");\n}\n", "var _ = require(\"underscore\");\n\n\nexports.Element = Element;\nexports.element = function(name, attributes, children) {\n    return new Element(name, attributes, children);\n};\nexports.text = function(value) {\n    return {\n        type: \"text\",\n        value: value\n    };\n};\n\n\nvar emptyElement = exports.emptyElement = {\n    first: function() {\n        return null;\n    },\n    firstOrEmpty: function() {\n        return emptyElement;\n    },\n    attributes: {},\n    children: []\n};\n\nfunction Element(name, attributes, children) {\n    this.type = \"element\";\n    this.name = name;\n    this.attributes = attributes || {};\n    this.children = children || [];\n}\n\nElement.prototype.first = function(name) {\n    return _.find(this.children, function(child) {\n        return child.name === name;\n    });\n};\n\nElement.prototype.firstOrEmpty = function(name) {\n    return this.first(name) || emptyElement;\n};\n\nElement.prototype.getElementsByTagName = function(name) {\n    var elements = _.filter(this.children, function(child) {\n        return child.name === name;\n    });\n    return toElementList(elements);\n};\n\nElement.prototype.text = function() {\n    if (this.children.length === 0) {\n        return \"\";\n    } else if (this.children.length !== 1 || this.children[0].type !== \"text\") {\n        throw new Error(\"Not implemented\");\n    }\n    return this.children[0].value;\n};\n\nvar elementListPrototype = {\n    getElementsByTagName: function(name) {\n        return toElementList(_.flatten(this.map(function(element) {\n            return element.getElementsByTagName(name);\n        }, true)));\n    }\n};\n\nfunction toElementList(array) {\n    return _.extend(array, elementListPrototype);\n}\n", "'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array<T> | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly<T>}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n", "var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * @param {string} element\n * @returns {Record<string, boolean | undefined>}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long\n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter,options){\n\t\tvar requireWellFormed = !!options && !!options.requireWellFormed;\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter,null,requireWellFormed);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * @private\n\t * @param {function (Node):boolean} predicate\n\t * @returns {Node[]}\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * @private\n\t * @param {Node} item\n\t * @returns {number}\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\n\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i] || null;\n}\n\n_extends(LiveNodeList,NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used\n * to represent collections of nodes that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument  DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI,  qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This implementation differs from the specification:__\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * Note: `internalSubset` can only be introduced via a direct property write to `node.internalSubset` after creation.\n\t * Creation-time validation of `publicId`, `systemId` is not enforced.\n\t * The serializer-level check covers all mutation vectors, including direct property writes.\n\t * `internalSubset` is only serialized as `[ ... ]` when both `publicId` and `systemId` are\n\t * absent (empty or `'.'`) \u2014 if either external identifier is present, `internalSubset` is\n\t * silently omitted from the serialized output.\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * The external subset public identifier. Stored verbatim including surrounding quotes.\n\t * When serialized with `requireWellFormed: true` (via the 4th-parameter options object),\n\t * throws `DOMException` with code `INVALID_STATE_ERR` if the value is non-empty and does\n\t * not match the XML `PubidLiteral` production (W3C DOM Parsing \u00A73.2.1.3; XML 1.0 [12]).\n\t * @param {string} [systemId]\n\t * The external subset system identifier. Stored verbatim including surrounding quotes.\n\t * When serialized with `requireWellFormed: true`, throws `DOMException` with code\n\t * `INVALID_STATE_ERR` if the value is non-empty and does not match the XML `SystemLiteral`\n\t * production (W3C DOM Parsing \u00A73.2.1.3; XML 1.0 [11]).\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t  or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method iteratively traverses all child nodes to normalize all descendant nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t * @see ../docs/walk-dom.md.\n\t */\n\tnormalize: function () {\n\t\twalkDOM(this, null, {\n\t\t\tenter: function (node) {\n\t\t\t\t// Merge adjacent text children of node before walkDOM schedules them.\n\t\t\t\t// walkDOM reads lastChild/previousSibling after enter returns, so the\n\t\t\t\t// surviving post-merge children are what it descends into.\n\t\t\t\tvar child = node.firstChild;\n\t\t\t\twhile (child) {\n\t\t\t\t\tvar next = child.nextSibling;\n\t\t\t\t\tif (next !== null && next.nodeType === TEXT_NODE && child.nodeType === TEXT_NODE) {\n\t\t\t\t\t\tnode.removeChild(next);\n\t\t\t\t\t\tchild.appendData(next.data);\n\t\t\t\t\t\t// Do not advance child: re-check new nextSibling for another text run\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true; // descend into surviving children\n\t\t\t},\n\t\t});\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param {Node} node\n * Root of the subtree to visit.\n * @param {function(Node): boolean} callback\n * Called for each node in depth-first pre-order. Return a truthy value to stop traversal early.\n * @return {boolean} `true` if traversal was aborted by the callback, `false` otherwise.\n */\nfunction _visitNode(node, callback) {\n\treturn walkDOM(node, null, { enter: function (n) { return callback(n) ? walkDOM.STOP : true; } }) === walkDOM.STOP;\n}\n\n/**\n * Depth-first pre/post-order DOM tree walker.\n *\n * Visits every node in the subtree rooted at `node`. For each node:\n *\n * 1. Calls `callbacks.enter(node, context)` before descending into the node's children. The\n * return value becomes the `context` passed to each child's `enter` call and to the matching\n * `exit` call.\n * 2. If `enter` returns `null` or `undefined`, the node's children are skipped;\n * sibling traversal continues normally.\n * 3. If `enter` returns `walkDOM.STOP`, the entire traversal is aborted immediately \u2014 no\n * further `enter` or `exit` calls are made.\n * 4. `lastChild` and `previousSibling` are read **after** `enter` returns, so `enter` may\n * safely modify the node's own child list before the walker descends. Modifying siblings of\n * the current node or any other part of the tree produces unpredictable results: nodes already\n * queued on the stack are visited regardless of DOM changes, and newly inserted nodes outside\n * the current child list are never visited.\n * 5. Calls `callbacks.exit(node, context)` (if provided) after all of a node's children have\n * been visited, passing the same `context` that `enter`\n * returned for that node.\n *\n * This implementation uses an explicit stack and does not recurse \u2014 it is safe on arbitrarily\n * deep trees.\n *\n * @param {Node} node\n * Root of the subtree to walk.\n * @param {*} context\n * Initial context value passed to the root node's `enter`.\n * @param {{ enter: function(Node, *): *, exit?: function(Node, *): void }} callbacks\n * @returns {void | walkDOM.STOP}\n * @see ../docs/walk-dom.md.\n */\nfunction walkDOM(node, context, callbacks) {\n\t// Each stack frame is {node, context, phase}:\n\t//   walkDOM.ENTER \u2014 call enter, then push children\n\t//   walkDOM.EXIT  \u2014 call exit\n\tvar stack = [{ node: node, context: context, phase: walkDOM.ENTER }];\n\twhile (stack.length > 0) {\n\t\tvar frame = stack.pop();\n\t\tif (frame.phase === walkDOM.ENTER) {\n\t\t\tvar childContext = callbacks.enter(frame.node, frame.context);\n\t\t\tif (childContext === walkDOM.STOP) {\n\t\t\t\treturn walkDOM.STOP;\n\t\t\t}\n\t\t\t// Push exit frame before children so it fires after all children are processed (Last In First Out)\n\t\t\tstack.push({ node: frame.node, context: childContext, phase: walkDOM.EXIT });\n\t\t\tif (childContext === null || childContext === undefined) {\n\t\t\t\tcontinue; // skip children\n\t\t\t}\n\t\t\t// lastChild is read after enter returns, so enter may modify the child list.\n\t\t\tvar child = frame.node.lastChild;\n\t\t\t// Traverse from lastChild backwards so that pushing onto the stack\n\t\t\t// naturally yields firstChild on top (processed first).\n\t\t\twhile (child) {\n\t\t\t\tstack.push({ node: child, context: childContext, phase: walkDOM.ENTER });\n\t\t\t\tchild = child.previousSibling;\n\t\t\t}\n\t\t} else {\n\t\t\t// frame.phase === walkDOM.EXIT\n\t\t\tif (callbacks.exit) {\n\t\t\t\tcallbacks.exit(frame.node, frame.context);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Sentinel value returned from a `walkDOM` `enter` callback to abort the entire traversal\n * immediately.\n *\n * @type {symbol}\n */\nwalkDOM.STOP = Symbol('walkDOM.STOP');\n/**\n * Phase constant for a stack frame that has not yet been visited.\n * The `enter` callback is called and children are scheduled.\n *\n * @type {number}\n */\nwalkDOM.ENTER = 0;\n/**\n * Phase constant for a stack frame whose subtree has been fully visited.\n * The `exit` callback is called.\n *\n * @type {number}\n */\nwalkDOM.EXIT = 1;\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t\t// Update ownerDocument for each node being inserted\n\t\tvar targetDoc = parent.ownerDocument || parent;\n\t\t_updateOwnerDocument(newFirst, targetDoc);\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Recursively updates the ownerDocument property for a node and all its descendants\n * @param {Node} node\n * @param {Document} newOwnerDocument\n * @private\n */\nfunction _updateOwnerDocument(node, newOwnerDocument) {\n\tif (node.ownerDocument === newOwnerDocument) {\n\t\treturn;\n\t}\n\t\n\tnode.ownerDocument = newOwnerDocument;\n\t\n\t// Update attributes if this is an element\n\tif (node.nodeType === ELEMENT_NODE && node.attributes) {\n\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\tvar attr = node.attributes.item(i);\n\t\t\tif (attr) {\n\t\t\t\tattr.ownerDocument = newOwnerDocument;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Recursively update child nodes\n\tvar child = node.firstChild;\n\twhile (child) {\n\t\t_updateOwnerDocument(child, newOwnerDocument);\n\t\tchild = child.nextSibling;\n\t}\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\t\n\t// Update ownerDocument for the new child and all its descendants\n\tvar targetDoc = parentNode.ownerDocument || parentNode;\n\t_updateOwnerDocument(newChild, targetDoc);\n\t\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\t_updateOwnerDocument(newChild, this);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\t/**\n\t * Returns a new CDATASection node whose data is `data`.\n\t *\n\t * __This implementation differs from the specification:__\n\t * - calling this method on an HTML document does not throw `NotSupportedError`.\n\t *\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t * @throws DOMException with code `INVALID_CHARACTER_ERR` if `data` contains `\"]]>\"`.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection\n\t * @see https://dom.spec.whatwg.org/#dom-document-createcdatasection\n\t */\n\tcreateCDATASection :\tfunction(data){\n\t\tif (data.indexOf(']]>') !== -1) {\n\t\t\tthrow new DOMException(INVALID_CHARACTER_ERR, 'data contains \"]]>\"');\n\t\t}\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\t/**\n\t * Returns a ProcessingInstruction node whose target is target and data is data.\n\t *\n\t * __This implementation differs from the specification:__\n\t * - it does not do any input validation on the arguments and doesn't throw \"InvalidCharacterError\".\n\t *\n\t * Note: When the resulting document is serialized with `requireWellFormed: true`, the\n\t * serializer throws with code `INVALID_STATE_ERR` if `.data` contains `?>` (W3C DOM Parsing\n\t * \u00A73.2.1.7). Without that option the data is emitted verbatim.\n\t *\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t * @see https://developer.mozilla.org/docs/Web/API/Document/createProcessingInstruction\n\t * @see https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction\n\t * @see https://www.w3.org/TR/DOM-Parsing/#dfn-concept-serialize-xml \u00A73.2.1.7\n\t */\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\n/**\n * Represents a DocumentType node (the `<!DOCTYPE ...>` declaration).\n *\n * `publicId`, `systemId`, and `internalSubset` are plain own-property assignments.\n * xmldom does not enforce the `readonly` constraint declared by the WHATWG DOM spec \u2014\n * direct property writes succeed silently. Values are serialized verbatim when\n * `requireWellFormed` is false (the default). When the serializer is invoked with\n * `requireWellFormed: true` (via the 4th-parameter options object), it validates each\n * field and throws `DOMException` with code `INVALID_STATE_ERR` on invalid values.\n *\n * @class\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentType MDN\n */\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\n/**\n * Returns the result of serializing `node` to XML.\n *\n * When `options.requireWellFormed` is `true`, the serializer throws for content that would\n * produce ill-formed XML.\n *\n * __This implementation differs from the specification:__\n * - CDATASection nodes whose data contains `]]>` are serialized by splitting the section\n *   at each `]]>` occurrence (following W3C DOM Level 3 Core `split-cdata-sections`\n *   default behaviour) unless `requireWellFormed` is `true`.\n * - when `requireWellFormed` is `true`, `DOMException` with code `INVALID_STATE_ERR`\n *   is only thrown to prevent injection vectors, not for all the spec mandated checks.\n *\n * @param {Node} node\n * @param {boolean} [isHtml]\n * @param {function} [nodeFilter]\n * @param {Object} [options]\n * @param {boolean} [options.requireWellFormed=false]\n * When `true`, throws for content that would produce ill-formed XML.\n * @returns {string}\n * @throws {DOMException}\n * With code `INVALID_STATE_ERR` when `requireWellFormed` is `true` and:\n * - a CDATASection node's data contains `\"]]>\"`,\n * - a Comment node's data contains `\"-->\"` (bare `\"--\"` does not throw on this branch),\n * - a ProcessingInstruction's data contains `\"?>\"`,\n * - a DocumentType's `publicId` is non-empty and does not match the XML `PubidLiteral`\n *   production,\n * - a DocumentType's `systemId` is non-empty and does not match the XML `SystemLiteral`\n *   production, or\n * - a DocumentType's `internalSubset` contains `\"]>\"`.\n * Note: xmldom does not enforce `readonly` on DocumentType fields \u2014 direct property\n * writes succeed and are covered by the serializer-level checks above.\n * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring\n * @see https://w3c.github.io/DOM-Parsing/#xml-serialization\n * @see https://github.com/w3c/DOM-Parsing/issues/84\n */\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter,options){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter,options);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter,options){\n\tvar requireWellFormed = !!options && !!options.requireWellFormed;\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces,requireWellFormed);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node, buf, isHTML, nodeFilter, visibleNamespaces, requireWellFormed) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\twalkDOM(node, { ns: visibleNamespaces, isHTML: isHTML }, {\n\t\tenter: function (n, ctx) {\n\t\t\tvar ns = ctx.ns;\n\t\t\tvar html = ctx.isHTML;\n\n\t\t\tif (nodeFilter) {\n\t\t\t\tn = nodeFilter(n);\n\t\t\t\tif (n) {\n\t\t\t\t\tif (typeof n == 'string') {\n\t\t\t\t\t\tbuf.push(n);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (n.nodeType) {\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\tvar attrs = n.attributes;\n\t\t\t\t\tvar len = attrs.length;\n\t\t\t\t\tvar nodeName = n.tagName;\n\n\t\t\t\t\thtml = NAMESPACE.isHTML(n.namespaceURI) || html;\n\n\t\t\t\t\tvar prefixedNodeName = nodeName;\n\t\t\t\t\tif (!html && !n.prefix && n.namespaceURI) {\n\t\t\t\t\t\tvar defaultNS;\n\t\t\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\t\t\tfor (var nsi = ns.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\t\t\tvar nsEntry = ns[nsi];\n\t\t\t\t\t\t\t\tif (nsEntry.prefix === '' && nsEntry.namespace === n.namespaceURI) {\n\t\t\t\t\t\t\t\t\tdefaultNS = nsEntry.namespace;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (defaultNS !== n.namespaceURI) {\n\t\t\t\t\t\t\tfor (var nsi = ns.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\t\t\tvar nsEntry = ns[nsi];\n\t\t\t\t\t\t\t\tif (nsEntry.namespace === n.namespaceURI) {\n\t\t\t\t\t\t\t\t\tif (nsEntry.prefix) {\n\t\t\t\t\t\t\t\t\t\tprefixedNodeName = nsEntry.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\t\t\t// Build a fresh namespace snapshot for this element's children.\n\t\t\t\t\t// The slice prevents sibling elements from inheriting each other's declarations.\n\t\t\t\t\tvar childNs = ns.slice();\n\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\t\t\tchildNs.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\t\t\tchildNs.push({ prefix: '', namespace: attr.value });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\t\t\tif (needNamespaceDefine(attr, html, childNs)) {\n\t\t\t\t\t\t\tvar attrPrefix = attr.prefix || '';\n\t\t\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\t\t\taddSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri);\n\t\t\t\t\t\t\tchildNs.push({ prefix: attrPrefix, namespace: uri });\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Apply nodeFilter and serialize the attribute.\n\t\t\t\t\t\tvar filteredAttr = nodeFilter ? nodeFilter(attr) : attr;\n\t\t\t\t\t\tif (filteredAttr) {\n\t\t\t\t\t\t\tif (typeof filteredAttr === 'string') {\n\t\t\t\t\t\t\t\tbuf.push(filteredAttr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\taddSerializedAttribute(buf, filteredAttr.name, filteredAttr.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// add namespace for current node\n\t\t\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(n, html, childNs)) {\n\t\t\t\t\t\tvar nodePrefix = n.prefix || '';\n\t\t\t\t\t\tvar uri = n.namespaceURI;\n\t\t\t\t\t\taddSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri);\n\t\t\t\t\t\tchildNs.push({ prefix: nodePrefix, namespace: uri });\n\t\t\t\t\t}\n\n\t\t\t\t\tvar child = n.firstChild;\n\t\t\t\t\tif (child || html && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)) {\n\t\t\t\t\t\tbuf.push('>');\n\t\t\t\t\t\tif (html && /^script$/i.test(nodeName)) {\n\t\t\t\t\t\t\t// Inline serialization for <script> children; return null to skip walkDOM descent.\n\t\t\t\t\t\t\twhile (child) {\n\t\t\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tserializeToString(child, buf, html, nodeFilter, childNs.slice(), requireWellFormed);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbuf.push('</', nodeName, '>');\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Return child context; walkDOM descends and exit emits the closing tag.\n\t\t\t\t\t\treturn { ns: childNs, isHTML: html, tag: prefixedNodeName };\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuf.push('/>');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\tcase DOCUMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\t// Descend into children; exit is a no-op (tag is null).\n\t\t\t\t\treturn { ns: ns.slice(), isHTML: html, tag: null };\n\n\t\t\t\tcase ATTRIBUTE_NODE:\n\t\t\t\t\taddSerializedAttribute(buf, n.name, n.value);\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase TEXT_NODE:\n\t\t\t\t\t/**\n\t\t\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t\t\t\t * `&amp;` and `&lt;` respectively.\n\t\t\t\t\t * The right angle bracket (>) may be represented using the string \" &gt; \", and must, for compatibility,\n\t\t\t\t\t * be escaped using either `&gt;` or a character reference when it appears in the string `]]>` in content,\n\t\t\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t\t\t *\n\t\t\t\t\t * In the content of elements, character data is any string of characters\n\t\t\t\t\t * which does not contain the start-delimiter of any markup\n\t\t\t\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t\t\t\t *\n\t\t\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t\t\t */\n\t\t\t\t\tbuf.push(n.data.replace(/[<&>]/g, _xmlEncoder));\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase CDATA_SECTION_NODE:\n\t\t\t\t\tif (requireWellFormed && n.data.indexOf(']]>') !== -1) {\n\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'The CDATASection data contains \"]]>\"');\n\t\t\t\t\t}\n\t\t\t\t\tbuf.push('<![CDATA[', n.data.replace(/]]>/g, ']]]]><![CDATA[>'), ']]>');\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase COMMENT_NODE:\n\t\t\t\t\tif (requireWellFormed && n.data.indexOf('-->') !== -1) {\n\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'The comment node data contains \"-->\"');\n\t\t\t\t\t}\n\t\t\t\t\tbuf.push('<!--', n.data, '-->');\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\t\t\tif (requireWellFormed) {\n\t\t\t\t\t\tif (n.publicId && !/^(\"[\\x20\\r\\na-zA-Z0-9\\-()+,.\\/:=?;!*#@$_%']*\"|'[\\x20\\r\\na-zA-Z0-9\\-()+,.\\/:=?;!*#@$_%'\"]*')$/.test(n.publicId)) {\n\t\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'DocumentType publicId is not a valid PubidLiteral');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n.systemId && !/^(\"[^\"]*\"|'[^']*')$/.test(n.systemId)) {\n\t\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'DocumentType systemId is not a valid SystemLiteral');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n.internalSubset && n.internalSubset.indexOf(']>') !== -1) {\n\t\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'DocumentType internalSubset contains \"]>\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar pubid = n.publicId;\n\t\t\t\t\tvar sysid = n.systemId;\n\t\t\t\t\tbuf.push('<!DOCTYPE ', n.name);\n\t\t\t\t\tif (pubid) {\n\t\t\t\t\t\tbuf.push(' PUBLIC ', pubid);\n\t\t\t\t\t\tif (sysid && sysid != '.') {\n\t\t\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push('>');\n\t\t\t\t\t} else if (sysid && sysid != '.') {\n\t\t\t\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar sub = n.internalSubset;\n\t\t\t\t\t\tif (sub) {\n\t\t\t\t\t\t\tbuf.push(' [', sub, ']');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push('>');\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\t\t\tif (requireWellFormed && n.data.indexOf('?>') !== -1) {\n\t\t\t\t\t\tthrow new DOMException(INVALID_STATE_ERR, 'The ProcessingInstruction data contains \"?>\"');\n\t\t\t\t\t}\n\t\t\t\t\tbuf.push('<?', n.target, ' ', n.data, '?>');\n\t\t\t\t\treturn null;\n\n\t\t\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\t\t\tbuf.push('&', n.nodeName, ';');\n\t\t\t\t\treturn null;\n\n\t\t\t\t//case ENTITY_NODE:\n\t\t\t\t//case NOTATION_NODE:\n\t\t\t\tdefault:\n\t\t\t\t\tbuf.push('??', n.nodeName);\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\texit: function (n, childCtx) {\n\t\t\tif (childCtx && childCtx.tag) {\n\t\t\t\tbuf.push('</', childCtx.tag, '>');\n\t\t\t}\n\t\t},\n\t});\n}\n/**\n * Imports a node from a different document into `doc`, creating a new copy.\n * Delegates to {@link walkDOM} for traversal. Each node in the subtree is shallow-cloned,\n * stamped with `doc` as its `ownerDocument`, and detached (`parentNode` set to `null`).\n * Children are imported recursively when `deep` is `true`; for {@link Attr} nodes `deep` is\n * always forced to `true`\n * because an attribute's value lives in a child text node.\n *\n * @param {Document} doc\n * The document that will own the imported node.\n * @param {Node} node\n * The node to import.\n * @param {boolean} deep\n * If `true`, descendants are imported recursively.\n * @returns {Node}\n * The newly imported node, now owned by `doc`.\n */\nfunction importNode(doc, node, deep) {\n\tvar destRoot;\n\twalkDOM(node, null, {\n\t\tenter: function (srcNode, destParent) {\n\t\t\t// Shallow-clone the node and stamp it into the target document.\n\t\t\tvar destNode = srcNode.cloneNode(false);\n\t\t\tdestNode.ownerDocument = doc;\n\t\t\tdestNode.parentNode = null;\n\t\t\t// capture as the root of the imported subtree or attach to parent.\n\t\t\tif (destParent === null) {\n\t\t\t\tdestRoot = destNode;\n\t\t\t} else {\n\t\t\t\tdestParent.appendChild(destNode);\n\t\t\t}\n\t\t\t// ATTRIBUTE_NODE must always be imported deeply: its value lives in a child text node.\n\t\t\tvar shouldDeep = srcNode.nodeType === ATTRIBUTE_NODE || deep;\n\t\t\treturn shouldDeep ? destNode : null;\n\t\t},\n\t});\n\treturn destRoot;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc, node, deep) {\n\tvar destRoot;\n\twalkDOM(node, null, {\n\t\tenter: function (srcNode, destParent) {\n\t\t\t// 1. Create a blank node of the same type and copy all scalar own properties.\n\t\t\tvar destNode = new srcNode.constructor();\n\t\t\tfor (var n in srcNode) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(srcNode, n)) {\n\t\t\t\t\tvar v = srcNode[n];\n\t\t\t\t\tif (typeof v != 'object') {\n\t\t\t\t\t\tif (v != destNode[n]) {\n\t\t\t\t\t\t\tdestNode[n] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (srcNode.childNodes) {\n\t\t\t\tdestNode.childNodes = new NodeList();\n\t\t\t}\n\t\t\tdestNode.ownerDocument = doc;\n\t\t\t// 2. Handle node-type-specific setup.\n\t\t\t//    Attributes are not DOM children, so they are cloned inline here\n\t\t\t//    rather than by walkDOM descent.\n\t\t\t//    ATTRIBUTE_NODE forces deep=true so its own children are walked.\n\t\t\tvar shouldDeep = deep;\n\t\t\tswitch (destNode.nodeType) {\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\tvar attrs = srcNode.attributes;\n\t\t\t\t\tvar attrs2 = (destNode.attributes = new NamedNodeMap());\n\t\t\t\t\tvar len = attrs.length;\n\t\t\t\t\tattrs2._ownerElement = destNode;\n\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\tdestNode.setAttributeNode(cloneNode(doc, attrs.item(i), true));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase ATTRIBUTE_NODE:\n\t\t\t\t\tshouldDeep = true;\n\t\t\t}\n\t\t\t// 3. Attach to parent, or capture as the root of the cloned subtree.\n\t\t\tif (destParent !== null) {\n\t\t\t\tdestParent.appendChild(destNode);\n\t\t\t} else {\n\t\t\t\tdestRoot = destNode;\n\t\t\t}\n\t\t\t// 4. Return destNode as the context for children (causes walkDOM to descend),\n\t\t\t//    or null to skip children (shallow clone).\n\t\t\treturn shouldDeep ? destNode : null;\n\t\t},\n\t});\n\treturn destRoot;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * The text content of this node and its descendants.\n\t\t *\n\t\t * Setting `textContent` on an element or document fragment replaces all child nodes with a\n\t\t * single text node; on other nodes it sets `data`, `value`, and `nodeValue` directly.\n\t\t *\n\t\t * @type {string | null}\n\t\t * @see {@link https://dom.spec.whatwg.org/#dom-node-textcontent}\n\t\t */\n\t\tObject.defineProperty(Node.prototype, 'textContent', {\n\t\t\tget: function () {\n\t\t\t\tif (this.nodeType === ELEMENT_NODE || this.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\t\t\tvar buf = [];\n\t\t\t\t\twalkDOM(this, null, {\n\t\t\t\t\t\tenter: function (n) {\n\t\t\t\t\t\t\tif (n.nodeType === ELEMENT_NODE || n.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\t\t\t\t\t\treturn true; // enter children\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (n.nodeType === PROCESSING_INSTRUCTION_NODE || n.nodeType === COMMENT_NODE) {\n\t\t\t\t\t\t\t\treturn null; // excluded from text content\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbuf.push(n.nodeValue);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn buf.join('');\n\t\t\t\t}\n\t\t\t\treturn this.nodeValue;\n\t\t\t},\n\n\t\t\tset: function (data) {\n\t\t\t\tswitch (this.nodeType) {\n\t\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\t\twhile (this.firstChild) {\n\t\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (data || String(data)) {\n\t\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.data = data;\n\t\t\t\t\t\tthis.value = data;\n\t\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DocumentType = DocumentType;\n\texports.DOMException = DOMException;\n\texports.DOMImplementation = DOMImplementation;\n\texports.Element = Element;\n\texports.Node = Node;\n\texports.NodeList = NodeList;\n\texports.walkDOM = walkDOM;\n\texports.XMLSerializer = XMLSerializer;\n//}\n", "'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n", "var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el<el />\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t    \t\t\tdoc.appendChild(text);\n\t    \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t        \t\tend = tagStart+1+tagName.length;\n\t        \t}else if(tagName.match(/\\s</)){\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t        \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t        if(endIgnoreCaseMach){\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t        }else{\n\t\t        \tparseStack.push(config)\n\t\t        }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// <?...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\n\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(locator && len){\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\n\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator2\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t}else{\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (NAMESPACE.isHTML(el.uri) && !el.closed) {\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t} else {\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}\n\t\t}catch(e){\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: '+e)\n\t\t\tend = -1;\n\t\t}\n\t\tif(end>start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: \u8FD9\u91CC\u6709\u53EF\u80FDsax\u56DE\u9000\uFF0C\u6709\u4F4D\u7F6E\u9519\u8BEF\u98CE\u9669\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName =  el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\n\t\tif(pos<elStartEnd){//\u5FD8\u8BB0\u95ED\u5408\n\t\t\tpos = source.lastIndexOf('</'+tagName)\n\t\t}\n\t\tcloseMap[tagName] =pos\n\t}\n\treturn pos<elStartEnd;\n\t//}\n}\n\nfunction _copy (source, target) {\n\tfor (var n in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA()\n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = false;\n\t\t\tvar sysid = false;\n\t\t\tif(len>3){\n\t\t\t\tif(/^public$/i.test(matchs[2][0])){\n\t\t\t\t\tpubid = matchs[3][0];\n\t\t\t\t\tsysid = len>4 && matchs[4][0];\n\t\t\t\t}else if(/^system$/i.test(matchs[2][0])){\n\t\t\t\t\tsysid = matchs[3][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name, pubid, sysid);\n\t\t\tdomBuilder.endDTD();\n\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction ElementAttributes(){\n\tthis.attributeNames = {}\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\taddValue:function(qName, value, offset) {\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetLocator:function(i){return this[i].locator},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nexports.XMLReader = XMLReader;\nexports.ParseError = ParseError;\n", "var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record<string, string>} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n  \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.doc.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.doc.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.doc.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t    //used in characters() methods\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t    }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n *  #comment(chars, start, length)\n *  #startCDATA()\n *  #endCDATA()\n *  #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n *  #endDTD()\n *  #startEntity(name)\n *  #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n *  #elementDecl(name, model)\n *  #externalEntityDecl(name, publicId, systemId)\n *  #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\n *  #resolveEntity(publicId, systemId)\n *  #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n *  #notationDecl(name, publicId, systemId) {};\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.doc.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n", "var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n", "var xmldom = require(\"@xmldom/xmldom\");\nvar dom = require(\"@xmldom/xmldom/lib/dom\");\n\nfunction parseFromString(string) {\n    var error = null;\n\n    var domParser = new xmldom.DOMParser({\n        errorHandler: function(level, message) {\n            error = {level: level, message: message};\n        }\n    });\n\n    var document = domParser.parseFromString(string);\n\n    if (error === null) {\n        return document;\n    } else {\n        throw new Error(error.level + \": \" + error.message);\n    }\n}\n\nexports.parseFromString = parseFromString;\nexports.Node = dom.Node;\n", "var promises = require(\"../promises\");\nvar _ = require(\"underscore\");\n\nvar xmldom = require(\"./xmldom\");\nvar nodes = require(\"./nodes\");\nvar Element = nodes.Element;\n\nexports.readString = readString;\n\nvar Node = xmldom.Node;\n\nfunction readString(xmlString, namespaceMap) {\n    namespaceMap = namespaceMap || {};\n\n    try {\n        var document = xmldom.parseFromString(xmlString, \"text/xml\");\n    } catch (error) {\n        return promises.reject(error);\n    }\n\n    if (document.documentElement.tagName === \"parsererror\") {\n        return promises.resolve(new Error(document.documentElement.textContent));\n    }\n\n    function convertNode(node) {\n        switch (node.nodeType) {\n        case Node.ELEMENT_NODE:\n            return convertElement(node);\n        case Node.TEXT_NODE:\n            return nodes.text(node.nodeValue);\n        }\n    }\n\n    function convertElement(element) {\n        var convertedName = convertName(element);\n\n        var convertedChildren = [];\n        _.forEach(element.childNodes, function(childNode) {\n            var convertedNode = convertNode(childNode);\n            if (convertedNode) {\n                convertedChildren.push(convertedNode);\n            }\n        });\n\n        var convertedAttributes = {};\n        _.forEach(element.attributes, function(attribute) {\n            convertedAttributes[convertName(attribute)] = attribute.value;\n        });\n\n        return new Element(convertedName, convertedAttributes, convertedChildren);\n    }\n\n    function convertName(node) {\n        if (node.namespaceURI) {\n            var mappedPrefix = namespaceMap[node.namespaceURI];\n            var prefix;\n            if (mappedPrefix) {\n                prefix = mappedPrefix + \":\";\n            } else {\n                prefix = \"{\" + node.namespaceURI + \"}\";\n            }\n            return prefix + node.localName;\n        } else {\n            return node.localName;\n        }\n    }\n\n    return promises.resolve(convertNode(document.documentElement));\n}\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,\n    slice = [].slice,\n    hasProp = {}.hasOwnProperty;\n\n  assign = function() {\n    var i, key, len, source, sources, target;\n    target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n    if (isFunction(Object.assign)) {\n      Object.assign.apply(null, arguments);\n    } else {\n      for (i = 0, len = sources.length; i < len; i++) {\n        source = sources[i];\n        if (source != null) {\n          for (key in source) {\n            if (!hasProp.call(source, key)) continue;\n            target[key] = source[key];\n          }\n        }\n      }\n    }\n    return target;\n  };\n\n  isFunction = function(val) {\n    return !!val && Object.prototype.toString.call(val) === '[object Function]';\n  };\n\n  isObject = function(val) {\n    var ref;\n    return !!val && ((ref = typeof val) === 'function' || ref === 'object');\n  };\n\n  isArray = function(val) {\n    if (isFunction(Array.isArray)) {\n      return Array.isArray(val);\n    } else {\n      return Object.prototype.toString.call(val) === '[object Array]';\n    }\n  };\n\n  isEmpty = function(val) {\n    var key;\n    if (isArray(val)) {\n      return !val.length;\n    } else {\n      for (key in val) {\n        if (!hasProp.call(val, key)) continue;\n        return false;\n      }\n      return true;\n    }\n  };\n\n  isPlainObject = function(val) {\n    var ctor, proto;\n    return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));\n  };\n\n  getValue = function(obj) {\n    if (isFunction(obj.valueOf)) {\n      return obj.valueOf();\n    } else {\n      return obj;\n    }\n  };\n\n  module.exports.assign = assign;\n\n  module.exports.isFunction = isFunction;\n\n  module.exports.isObject = isObject;\n\n  module.exports.isArray = isArray;\n\n  module.exports.isEmpty = isEmpty;\n\n  module.exports.isPlainObject = isPlainObject;\n\n  module.exports.getValue = getValue;\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLAttribute;\n\n  module.exports = XMLAttribute = (function() {\n    function XMLAttribute(parent, name, value) {\n      this.options = parent.options;\n      this.stringify = parent.stringify;\n      this.parent = parent;\n      if (name == null) {\n        throw new Error(\"Missing attribute name. \" + this.debugInfo(name));\n      }\n      if (value == null) {\n        throw new Error(\"Missing attribute value. \" + this.debugInfo(name));\n      }\n      this.name = this.stringify.attName(name);\n      this.value = this.stringify.attValue(value);\n    }\n\n    XMLAttribute.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLAttribute.prototype.toString = function(options) {\n      return this.options.writer.set(options).attribute(this);\n    };\n\n    XMLAttribute.prototype.debugInfo = function(name) {\n      name = name || this.name;\n      if (name == null) {\n        return \"parent: <\" + this.parent.name + \">\";\n      } else {\n        return \"attribute: {\" + name + \"}, parent: <\" + this.parent.name + \">\";\n      }\n    };\n\n    return XMLAttribute;\n\n  })();\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLAttribute, XMLElement, XMLNode, getValue, isFunction, isObject, ref,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;\n\n  XMLNode = require('./XMLNode');\n\n  XMLAttribute = require('./XMLAttribute');\n\n  module.exports = XMLElement = (function(superClass) {\n    extend(XMLElement, superClass);\n\n    function XMLElement(parent, name, attributes) {\n      XMLElement.__super__.constructor.call(this, parent);\n      if (name == null) {\n        throw new Error(\"Missing element name. \" + this.debugInfo());\n      }\n      this.name = this.stringify.eleName(name);\n      this.attributes = {};\n      if (attributes != null) {\n        this.attribute(attributes);\n      }\n      if (parent.isDocument) {\n        this.isRoot = true;\n        this.documentObject = parent;\n        parent.rootObject = this;\n      }\n    }\n\n    XMLElement.prototype.clone = function() {\n      var att, attName, clonedSelf, ref1;\n      clonedSelf = Object.create(this);\n      if (clonedSelf.isRoot) {\n        clonedSelf.documentObject = null;\n      }\n      clonedSelf.attributes = {};\n      ref1 = this.attributes;\n      for (attName in ref1) {\n        if (!hasProp.call(ref1, attName)) continue;\n        att = ref1[attName];\n        clonedSelf.attributes[attName] = att.clone();\n      }\n      clonedSelf.children = [];\n      this.children.forEach(function(child) {\n        var clonedChild;\n        clonedChild = child.clone();\n        clonedChild.parent = clonedSelf;\n        return clonedSelf.children.push(clonedChild);\n      });\n      return clonedSelf;\n    };\n\n    XMLElement.prototype.attribute = function(name, value) {\n      var attName, attValue;\n      if (name != null) {\n        name = getValue(name);\n      }\n      if (isObject(name)) {\n        for (attName in name) {\n          if (!hasProp.call(name, attName)) continue;\n          attValue = name[attName];\n          this.attribute(attName, attValue);\n        }\n      } else {\n        if (isFunction(value)) {\n          value = value.apply();\n        }\n        if (!this.options.skipNullAttributes || (value != null)) {\n          this.attributes[name] = new XMLAttribute(this, name, value);\n        }\n      }\n      return this;\n    };\n\n    XMLElement.prototype.removeAttribute = function(name) {\n      var attName, i, len;\n      if (name == null) {\n        throw new Error(\"Missing attribute name. \" + this.debugInfo());\n      }\n      name = getValue(name);\n      if (Array.isArray(name)) {\n        for (i = 0, len = name.length; i < len; i++) {\n          attName = name[i];\n          delete this.attributes[attName];\n        }\n      } else {\n        delete this.attributes[name];\n      }\n      return this;\n    };\n\n    XMLElement.prototype.toString = function(options) {\n      return this.options.writer.set(options).element(this);\n    };\n\n    XMLElement.prototype.att = function(name, value) {\n      return this.attribute(name, value);\n    };\n\n    XMLElement.prototype.a = function(name, value) {\n      return this.attribute(name, value);\n    };\n\n    return XMLElement;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLCData, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLCData = (function(superClass) {\n    extend(XMLCData, superClass);\n\n    function XMLCData(parent, text) {\n      XMLCData.__super__.constructor.call(this, parent);\n      if (text == null) {\n        throw new Error(\"Missing CDATA text. \" + this.debugInfo());\n      }\n      this.text = this.stringify.cdata(text);\n    }\n\n    XMLCData.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLCData.prototype.toString = function(options) {\n      return this.options.writer.set(options).cdata(this);\n    };\n\n    return XMLCData;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLComment, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLComment = (function(superClass) {\n    extend(XMLComment, superClass);\n\n    function XMLComment(parent, text) {\n      XMLComment.__super__.constructor.call(this, parent);\n      if (text == null) {\n        throw new Error(\"Missing comment text. \" + this.debugInfo());\n      }\n      this.text = this.stringify.comment(text);\n    }\n\n    XMLComment.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLComment.prototype.toString = function(options) {\n      return this.options.writer.set(options).comment(this);\n    };\n\n    return XMLComment;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDeclaration, XMLNode, isObject,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  isObject = require('./Utility').isObject;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDeclaration = (function(superClass) {\n    extend(XMLDeclaration, superClass);\n\n    function XMLDeclaration(parent, version, encoding, standalone) {\n      var ref;\n      XMLDeclaration.__super__.constructor.call(this, parent);\n      if (isObject(version)) {\n        ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;\n      }\n      if (!version) {\n        version = '1.0';\n      }\n      this.version = this.stringify.xmlVersion(version);\n      if (encoding != null) {\n        this.encoding = this.stringify.xmlEncoding(encoding);\n      }\n      if (standalone != null) {\n        this.standalone = this.stringify.xmlStandalone(standalone);\n      }\n    }\n\n    XMLDeclaration.prototype.toString = function(options) {\n      return this.options.writer.set(options).declaration(this);\n    };\n\n    return XMLDeclaration;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDTDAttList, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDTDAttList = (function(superClass) {\n    extend(XMLDTDAttList, superClass);\n\n    function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n      XMLDTDAttList.__super__.constructor.call(this, parent);\n      if (elementName == null) {\n        throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n      }\n      if (attributeName == null) {\n        throw new Error(\"Missing DTD attribute name. \" + this.debugInfo(elementName));\n      }\n      if (!attributeType) {\n        throw new Error(\"Missing DTD attribute type. \" + this.debugInfo(elementName));\n      }\n      if (!defaultValueType) {\n        throw new Error(\"Missing DTD attribute default. \" + this.debugInfo(elementName));\n      }\n      if (defaultValueType.indexOf('#') !== 0) {\n        defaultValueType = '#' + defaultValueType;\n      }\n      if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {\n        throw new Error(\"Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n      }\n      if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {\n        throw new Error(\"Default value only applies to #FIXED or #DEFAULT. \" + this.debugInfo(elementName));\n      }\n      this.elementName = this.stringify.eleName(elementName);\n      this.attributeName = this.stringify.attName(attributeName);\n      this.attributeType = this.stringify.dtdAttType(attributeType);\n      this.defaultValue = this.stringify.dtdAttDefault(defaultValue);\n      this.defaultValueType = defaultValueType;\n    }\n\n    XMLDTDAttList.prototype.toString = function(options) {\n      return this.options.writer.set(options).dtdAttList(this);\n    };\n\n    return XMLDTDAttList;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDTDEntity, XMLNode, isObject,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  isObject = require('./Utility').isObject;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDTDEntity = (function(superClass) {\n    extend(XMLDTDEntity, superClass);\n\n    function XMLDTDEntity(parent, pe, name, value) {\n      XMLDTDEntity.__super__.constructor.call(this, parent);\n      if (name == null) {\n        throw new Error(\"Missing DTD entity name. \" + this.debugInfo(name));\n      }\n      if (value == null) {\n        throw new Error(\"Missing DTD entity value. \" + this.debugInfo(name));\n      }\n      this.pe = !!pe;\n      this.name = this.stringify.eleName(name);\n      if (!isObject(value)) {\n        this.value = this.stringify.dtdEntityValue(value);\n      } else {\n        if (!value.pubID && !value.sysID) {\n          throw new Error(\"Public and/or system identifiers are required for an external entity. \" + this.debugInfo(name));\n        }\n        if (value.pubID && !value.sysID) {\n          throw new Error(\"System identifier is required for a public external entity. \" + this.debugInfo(name));\n        }\n        if (value.pubID != null) {\n          this.pubID = this.stringify.dtdPubID(value.pubID);\n        }\n        if (value.sysID != null) {\n          this.sysID = this.stringify.dtdSysID(value.sysID);\n        }\n        if (value.nData != null) {\n          this.nData = this.stringify.dtdNData(value.nData);\n        }\n        if (this.pe && this.nData) {\n          throw new Error(\"Notation declaration is not allowed in a parameter entity. \" + this.debugInfo(name));\n        }\n      }\n    }\n\n    XMLDTDEntity.prototype.toString = function(options) {\n      return this.options.writer.set(options).dtdEntity(this);\n    };\n\n    return XMLDTDEntity;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDTDElement, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDTDElement = (function(superClass) {\n    extend(XMLDTDElement, superClass);\n\n    function XMLDTDElement(parent, name, value) {\n      XMLDTDElement.__super__.constructor.call(this, parent);\n      if (name == null) {\n        throw new Error(\"Missing DTD element name. \" + this.debugInfo());\n      }\n      if (!value) {\n        value = '(#PCDATA)';\n      }\n      if (Array.isArray(value)) {\n        value = '(' + value.join(',') + ')';\n      }\n      this.name = this.stringify.eleName(name);\n      this.value = this.stringify.dtdElementValue(value);\n    }\n\n    XMLDTDElement.prototype.toString = function(options) {\n      return this.options.writer.set(options).dtdElement(this);\n    };\n\n    return XMLDTDElement;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDTDNotation, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDTDNotation = (function(superClass) {\n    extend(XMLDTDNotation, superClass);\n\n    function XMLDTDNotation(parent, name, value) {\n      XMLDTDNotation.__super__.constructor.call(this, parent);\n      if (name == null) {\n        throw new Error(\"Missing DTD notation name. \" + this.debugInfo(name));\n      }\n      if (!value.pubID && !value.sysID) {\n        throw new Error(\"Public or system identifiers are required for an external entity. \" + this.debugInfo(name));\n      }\n      this.name = this.stringify.eleName(name);\n      if (value.pubID != null) {\n        this.pubID = this.stringify.dtdPubID(value.pubID);\n      }\n      if (value.sysID != null) {\n        this.sysID = this.stringify.dtdSysID(value.sysID);\n      }\n    }\n\n    XMLDTDNotation.prototype.toString = function(options) {\n      return this.options.writer.set(options).dtdNotation(this);\n    };\n\n    return XMLDTDNotation;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNode, isObject,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  isObject = require('./Utility').isObject;\n\n  XMLNode = require('./XMLNode');\n\n  XMLDTDAttList = require('./XMLDTDAttList');\n\n  XMLDTDEntity = require('./XMLDTDEntity');\n\n  XMLDTDElement = require('./XMLDTDElement');\n\n  XMLDTDNotation = require('./XMLDTDNotation');\n\n  module.exports = XMLDocType = (function(superClass) {\n    extend(XMLDocType, superClass);\n\n    function XMLDocType(parent, pubID, sysID) {\n      var ref, ref1;\n      XMLDocType.__super__.constructor.call(this, parent);\n      this.name = \"!DOCTYPE\";\n      this.documentObject = parent;\n      if (isObject(pubID)) {\n        ref = pubID, pubID = ref.pubID, sysID = ref.sysID;\n      }\n      if (sysID == null) {\n        ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1];\n      }\n      if (pubID != null) {\n        this.pubID = this.stringify.dtdPubID(pubID);\n      }\n      if (sysID != null) {\n        this.sysID = this.stringify.dtdSysID(sysID);\n      }\n    }\n\n    XMLDocType.prototype.element = function(name, value) {\n      var child;\n      child = new XMLDTDElement(this, name, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n      var child;\n      child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLDocType.prototype.entity = function(name, value) {\n      var child;\n      child = new XMLDTDEntity(this, false, name, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLDocType.prototype.pEntity = function(name, value) {\n      var child;\n      child = new XMLDTDEntity(this, true, name, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLDocType.prototype.notation = function(name, value) {\n      var child;\n      child = new XMLDTDNotation(this, name, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLDocType.prototype.toString = function(options) {\n      return this.options.writer.set(options).docType(this);\n    };\n\n    XMLDocType.prototype.ele = function(name, value) {\n      return this.element(name, value);\n    };\n\n    XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n      return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);\n    };\n\n    XMLDocType.prototype.ent = function(name, value) {\n      return this.entity(name, value);\n    };\n\n    XMLDocType.prototype.pent = function(name, value) {\n      return this.pEntity(name, value);\n    };\n\n    XMLDocType.prototype.not = function(name, value) {\n      return this.notation(name, value);\n    };\n\n    XMLDocType.prototype.up = function() {\n      return this.root() || this.documentObject;\n    };\n\n    return XMLDocType;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLNode, XMLRaw,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLRaw = (function(superClass) {\n    extend(XMLRaw, superClass);\n\n    function XMLRaw(parent, text) {\n      XMLRaw.__super__.constructor.call(this, parent);\n      if (text == null) {\n        throw new Error(\"Missing raw text. \" + this.debugInfo());\n      }\n      this.value = this.stringify.raw(text);\n    }\n\n    XMLRaw.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLRaw.prototype.toString = function(options) {\n      return this.options.writer.set(options).raw(this);\n    };\n\n    return XMLRaw;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLNode, XMLText,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLText = (function(superClass) {\n    extend(XMLText, superClass);\n\n    function XMLText(parent, text) {\n      XMLText.__super__.constructor.call(this, parent);\n      if (text == null) {\n        throw new Error(\"Missing element text. \" + this.debugInfo());\n      }\n      this.value = this.stringify.eleText(text);\n    }\n\n    XMLText.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLText.prototype.toString = function(options) {\n      return this.options.writer.set(options).text(this);\n    };\n\n    return XMLText;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLNode, XMLProcessingInstruction,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLProcessingInstruction = (function(superClass) {\n    extend(XMLProcessingInstruction, superClass);\n\n    function XMLProcessingInstruction(parent, target, value) {\n      XMLProcessingInstruction.__super__.constructor.call(this, parent);\n      if (target == null) {\n        throw new Error(\"Missing instruction target. \" + this.debugInfo());\n      }\n      this.target = this.stringify.insTarget(target);\n      if (value) {\n        this.value = this.stringify.insValue(value);\n      }\n    }\n\n    XMLProcessingInstruction.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLProcessingInstruction.prototype.toString = function(options) {\n      return this.options.writer.set(options).processingInstruction(this);\n    };\n\n    return XMLProcessingInstruction;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDummy, XMLNode,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLNode = require('./XMLNode');\n\n  module.exports = XMLDummy = (function(superClass) {\n    extend(XMLDummy, superClass);\n\n    function XMLDummy(parent) {\n      XMLDummy.__super__.constructor.call(this, parent);\n      this.isDummy = true;\n    }\n\n    XMLDummy.prototype.clone = function() {\n      return Object.create(this);\n    };\n\n    XMLDummy.prototype.toString = function(options) {\n      return '';\n    };\n\n    return XMLDummy;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNode, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref,\n    hasProp = {}.hasOwnProperty;\n\n  ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isEmpty = ref.isEmpty, getValue = ref.getValue;\n\n  XMLElement = null;\n\n  XMLCData = null;\n\n  XMLComment = null;\n\n  XMLDeclaration = null;\n\n  XMLDocType = null;\n\n  XMLRaw = null;\n\n  XMLText = null;\n\n  XMLProcessingInstruction = null;\n\n  XMLDummy = null;\n\n  module.exports = XMLNode = (function() {\n    function XMLNode(parent) {\n      this.parent = parent;\n      if (this.parent) {\n        this.options = this.parent.options;\n        this.stringify = this.parent.stringify;\n      }\n      this.children = [];\n      if (!XMLElement) {\n        XMLElement = require('./XMLElement');\n        XMLCData = require('./XMLCData');\n        XMLComment = require('./XMLComment');\n        XMLDeclaration = require('./XMLDeclaration');\n        XMLDocType = require('./XMLDocType');\n        XMLRaw = require('./XMLRaw');\n        XMLText = require('./XMLText');\n        XMLProcessingInstruction = require('./XMLProcessingInstruction');\n        XMLDummy = require('./XMLDummy');\n      }\n    }\n\n    XMLNode.prototype.element = function(name, attributes, text) {\n      var childNode, item, j, k, key, lastChild, len, len1, ref1, ref2, val;\n      lastChild = null;\n      if (attributes === null && (text == null)) {\n        ref1 = [{}, null], attributes = ref1[0], text = ref1[1];\n      }\n      if (attributes == null) {\n        attributes = {};\n      }\n      attributes = getValue(attributes);\n      if (!isObject(attributes)) {\n        ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n      }\n      if (name != null) {\n        name = getValue(name);\n      }\n      if (Array.isArray(name)) {\n        for (j = 0, len = name.length; j < len; j++) {\n          item = name[j];\n          lastChild = this.element(item);\n        }\n      } else if (isFunction(name)) {\n        lastChild = this.element(name.apply());\n      } else if (isObject(name)) {\n        for (key in name) {\n          if (!hasProp.call(name, key)) continue;\n          val = name[key];\n          if (isFunction(val)) {\n            val = val.apply();\n          }\n          if ((isObject(val)) && (isEmpty(val))) {\n            val = null;\n          }\n          if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {\n            lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);\n          } else if (!this.options.separateArrayItems && Array.isArray(val)) {\n            for (k = 0, len1 = val.length; k < len1; k++) {\n              item = val[k];\n              childNode = {};\n              childNode[key] = item;\n              lastChild = this.element(childNode);\n            }\n          } else if (isObject(val)) {\n            lastChild = this.element(key);\n            lastChild.element(val);\n          } else {\n            lastChild = this.element(key, val);\n          }\n        }\n      } else if (this.options.skipNullNodes && text === null) {\n        lastChild = this.dummy();\n      } else {\n        if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {\n          lastChild = this.text(text);\n        } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {\n          lastChild = this.cdata(text);\n        } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {\n          lastChild = this.comment(text);\n        } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {\n          lastChild = this.raw(text);\n        } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {\n          lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);\n        } else {\n          lastChild = this.node(name, attributes, text);\n        }\n      }\n      if (lastChild == null) {\n        throw new Error(\"Could not create any elements with: \" + name + \". \" + this.debugInfo());\n      }\n      return lastChild;\n    };\n\n    XMLNode.prototype.insertBefore = function(name, attributes, text) {\n      var child, i, removed;\n      if (this.isRoot) {\n        throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n      }\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i);\n      child = this.parent.element(name, attributes, text);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return child;\n    };\n\n    XMLNode.prototype.insertAfter = function(name, attributes, text) {\n      var child, i, removed;\n      if (this.isRoot) {\n        throw new Error(\"Cannot insert elements at root level. \" + this.debugInfo(name));\n      }\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i + 1);\n      child = this.parent.element(name, attributes, text);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return child;\n    };\n\n    XMLNode.prototype.remove = function() {\n      var i, ref1;\n      if (this.isRoot) {\n        throw new Error(\"Cannot remove the root element. \" + this.debugInfo());\n      }\n      i = this.parent.children.indexOf(this);\n      [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref1 = [])), ref1;\n      return this.parent;\n    };\n\n    XMLNode.prototype.node = function(name, attributes, text) {\n      var child, ref1;\n      if (name != null) {\n        name = getValue(name);\n      }\n      attributes || (attributes = {});\n      attributes = getValue(attributes);\n      if (!isObject(attributes)) {\n        ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];\n      }\n      child = new XMLElement(this, name, attributes);\n      if (text != null) {\n        child.text(text);\n      }\n      this.children.push(child);\n      return child;\n    };\n\n    XMLNode.prototype.text = function(value) {\n      var child;\n      child = new XMLText(this, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLNode.prototype.cdata = function(value) {\n      var child;\n      child = new XMLCData(this, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLNode.prototype.comment = function(value) {\n      var child;\n      child = new XMLComment(this, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLNode.prototype.commentBefore = function(value) {\n      var child, i, removed;\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i);\n      child = this.parent.comment(value);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return this;\n    };\n\n    XMLNode.prototype.commentAfter = function(value) {\n      var child, i, removed;\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i + 1);\n      child = this.parent.comment(value);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return this;\n    };\n\n    XMLNode.prototype.raw = function(value) {\n      var child;\n      child = new XMLRaw(this, value);\n      this.children.push(child);\n      return this;\n    };\n\n    XMLNode.prototype.dummy = function() {\n      var child;\n      child = new XMLDummy(this);\n      this.children.push(child);\n      return child;\n    };\n\n    XMLNode.prototype.instruction = function(target, value) {\n      var insTarget, insValue, instruction, j, len;\n      if (target != null) {\n        target = getValue(target);\n      }\n      if (value != null) {\n        value = getValue(value);\n      }\n      if (Array.isArray(target)) {\n        for (j = 0, len = target.length; j < len; j++) {\n          insTarget = target[j];\n          this.instruction(insTarget);\n        }\n      } else if (isObject(target)) {\n        for (insTarget in target) {\n          if (!hasProp.call(target, insTarget)) continue;\n          insValue = target[insTarget];\n          this.instruction(insTarget, insValue);\n        }\n      } else {\n        if (isFunction(value)) {\n          value = value.apply();\n        }\n        instruction = new XMLProcessingInstruction(this, target, value);\n        this.children.push(instruction);\n      }\n      return this;\n    };\n\n    XMLNode.prototype.instructionBefore = function(target, value) {\n      var child, i, removed;\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i);\n      child = this.parent.instruction(target, value);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return this;\n    };\n\n    XMLNode.prototype.instructionAfter = function(target, value) {\n      var child, i, removed;\n      i = this.parent.children.indexOf(this);\n      removed = this.parent.children.splice(i + 1);\n      child = this.parent.instruction(target, value);\n      Array.prototype.push.apply(this.parent.children, removed);\n      return this;\n    };\n\n    XMLNode.prototype.declaration = function(version, encoding, standalone) {\n      var doc, xmldec;\n      doc = this.document();\n      xmldec = new XMLDeclaration(doc, version, encoding, standalone);\n      if (doc.children[0] instanceof XMLDeclaration) {\n        doc.children[0] = xmldec;\n      } else {\n        doc.children.unshift(xmldec);\n      }\n      return doc.root() || doc;\n    };\n\n    XMLNode.prototype.doctype = function(pubID, sysID) {\n      var child, doc, doctype, i, j, k, len, len1, ref1, ref2;\n      doc = this.document();\n      doctype = new XMLDocType(doc, pubID, sysID);\n      ref1 = doc.children;\n      for (i = j = 0, len = ref1.length; j < len; i = ++j) {\n        child = ref1[i];\n        if (child instanceof XMLDocType) {\n          doc.children[i] = doctype;\n          return doctype;\n        }\n      }\n      ref2 = doc.children;\n      for (i = k = 0, len1 = ref2.length; k < len1; i = ++k) {\n        child = ref2[i];\n        if (child.isRoot) {\n          doc.children.splice(i, 0, doctype);\n          return doctype;\n        }\n      }\n      doc.children.push(doctype);\n      return doctype;\n    };\n\n    XMLNode.prototype.up = function() {\n      if (this.isRoot) {\n        throw new Error(\"The root node has no parent. Use doc() if you need to get the document object.\");\n      }\n      return this.parent;\n    };\n\n    XMLNode.prototype.root = function() {\n      var node;\n      node = this;\n      while (node) {\n        if (node.isDocument) {\n          return node.rootObject;\n        } else if (node.isRoot) {\n          return node;\n        } else {\n          node = node.parent;\n        }\n      }\n    };\n\n    XMLNode.prototype.document = function() {\n      var node;\n      node = this;\n      while (node) {\n        if (node.isDocument) {\n          return node;\n        } else {\n          node = node.parent;\n        }\n      }\n    };\n\n    XMLNode.prototype.end = function(options) {\n      return this.document().end(options);\n    };\n\n    XMLNode.prototype.prev = function() {\n      var i;\n      i = this.parent.children.indexOf(this);\n      while (i > 0 && this.parent.children[i - 1].isDummy) {\n        i = i - 1;\n      }\n      if (i < 1) {\n        throw new Error(\"Already at the first node. \" + this.debugInfo());\n      }\n      return this.parent.children[i - 1];\n    };\n\n    XMLNode.prototype.next = function() {\n      var i;\n      i = this.parent.children.indexOf(this);\n      while (i < this.parent.children.length - 1 && this.parent.children[i + 1].isDummy) {\n        i = i + 1;\n      }\n      if (i === -1 || i === this.parent.children.length - 1) {\n        throw new Error(\"Already at the last node. \" + this.debugInfo());\n      }\n      return this.parent.children[i + 1];\n    };\n\n    XMLNode.prototype.importDocument = function(doc) {\n      var clonedRoot;\n      clonedRoot = doc.root().clone();\n      clonedRoot.parent = this;\n      clonedRoot.isRoot = false;\n      this.children.push(clonedRoot);\n      return this;\n    };\n\n    XMLNode.prototype.debugInfo = function(name) {\n      var ref1, ref2;\n      name = name || this.name;\n      if ((name == null) && !((ref1 = this.parent) != null ? ref1.name : void 0)) {\n        return \"\";\n      } else if (name == null) {\n        return \"parent: <\" + this.parent.name + \">\";\n      } else if (!((ref2 = this.parent) != null ? ref2.name : void 0)) {\n        return \"node: <\" + name + \">\";\n      } else {\n        return \"node: <\" + name + \">, parent: <\" + this.parent.name + \">\";\n      }\n    };\n\n    XMLNode.prototype.ele = function(name, attributes, text) {\n      return this.element(name, attributes, text);\n    };\n\n    XMLNode.prototype.nod = function(name, attributes, text) {\n      return this.node(name, attributes, text);\n    };\n\n    XMLNode.prototype.txt = function(value) {\n      return this.text(value);\n    };\n\n    XMLNode.prototype.dat = function(value) {\n      return this.cdata(value);\n    };\n\n    XMLNode.prototype.com = function(value) {\n      return this.comment(value);\n    };\n\n    XMLNode.prototype.ins = function(target, value) {\n      return this.instruction(target, value);\n    };\n\n    XMLNode.prototype.doc = function() {\n      return this.document();\n    };\n\n    XMLNode.prototype.dec = function(version, encoding, standalone) {\n      return this.declaration(version, encoding, standalone);\n    };\n\n    XMLNode.prototype.dtd = function(pubID, sysID) {\n      return this.doctype(pubID, sysID);\n    };\n\n    XMLNode.prototype.e = function(name, attributes, text) {\n      return this.element(name, attributes, text);\n    };\n\n    XMLNode.prototype.n = function(name, attributes, text) {\n      return this.node(name, attributes, text);\n    };\n\n    XMLNode.prototype.t = function(value) {\n      return this.text(value);\n    };\n\n    XMLNode.prototype.d = function(value) {\n      return this.cdata(value);\n    };\n\n    XMLNode.prototype.c = function(value) {\n      return this.comment(value);\n    };\n\n    XMLNode.prototype.r = function(value) {\n      return this.raw(value);\n    };\n\n    XMLNode.prototype.i = function(target, value) {\n      return this.instruction(target, value);\n    };\n\n    XMLNode.prototype.u = function() {\n      return this.up();\n    };\n\n    XMLNode.prototype.importXMLBuilder = function(doc) {\n      return this.importDocument(doc);\n    };\n\n    return XMLNode;\n\n  })();\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLStringifier,\n    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n    hasProp = {}.hasOwnProperty;\n\n  module.exports = XMLStringifier = (function() {\n    function XMLStringifier(options) {\n      this.assertLegalChar = bind(this.assertLegalChar, this);\n      var key, ref, value;\n      options || (options = {});\n      this.noDoubleEncoding = options.noDoubleEncoding;\n      ref = options.stringify || {};\n      for (key in ref) {\n        if (!hasProp.call(ref, key)) continue;\n        value = ref[key];\n        this[key] = value;\n      }\n    }\n\n    XMLStringifier.prototype.eleName = function(val) {\n      val = '' + val || '';\n      return this.assertLegalChar(val);\n    };\n\n    XMLStringifier.prototype.eleText = function(val) {\n      val = '' + val || '';\n      return this.assertLegalChar(this.elEscape(val));\n    };\n\n    XMLStringifier.prototype.cdata = function(val) {\n      val = '' + val || '';\n      val = val.replace(']]>', ']]]]><![CDATA[>');\n      return this.assertLegalChar(val);\n    };\n\n    XMLStringifier.prototype.comment = function(val) {\n      val = '' + val || '';\n      if (val.match(/--/)) {\n        throw new Error(\"Comment text cannot contain double-hypen: \" + val);\n      }\n      return this.assertLegalChar(val);\n    };\n\n    XMLStringifier.prototype.raw = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.attName = function(val) {\n      return val = '' + val || '';\n    };\n\n    XMLStringifier.prototype.attValue = function(val) {\n      val = '' + val || '';\n      return this.attEscape(val);\n    };\n\n    XMLStringifier.prototype.insTarget = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.insValue = function(val) {\n      val = '' + val || '';\n      if (val.match(/\\?>/)) {\n        throw new Error(\"Invalid processing instruction value: \" + val);\n      }\n      return val;\n    };\n\n    XMLStringifier.prototype.xmlVersion = function(val) {\n      val = '' + val || '';\n      if (!val.match(/1\\.[0-9]+/)) {\n        throw new Error(\"Invalid version number: \" + val);\n      }\n      return val;\n    };\n\n    XMLStringifier.prototype.xmlEncoding = function(val) {\n      val = '' + val || '';\n      if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {\n        throw new Error(\"Invalid encoding: \" + val);\n      }\n      return val;\n    };\n\n    XMLStringifier.prototype.xmlStandalone = function(val) {\n      if (val) {\n        return \"yes\";\n      } else {\n        return \"no\";\n      }\n    };\n\n    XMLStringifier.prototype.dtdPubID = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.dtdSysID = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.dtdElementValue = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.dtdAttType = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.dtdAttDefault = function(val) {\n      if (val != null) {\n        return '' + val || '';\n      } else {\n        return val;\n      }\n    };\n\n    XMLStringifier.prototype.dtdEntityValue = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.dtdNData = function(val) {\n      return '' + val || '';\n    };\n\n    XMLStringifier.prototype.convertAttKey = '@';\n\n    XMLStringifier.prototype.convertPIKey = '?';\n\n    XMLStringifier.prototype.convertTextKey = '#text';\n\n    XMLStringifier.prototype.convertCDataKey = '#cdata';\n\n    XMLStringifier.prototype.convertCommentKey = '#comment';\n\n    XMLStringifier.prototype.convertRawKey = '#raw';\n\n    XMLStringifier.prototype.assertLegalChar = function(str) {\n      var res;\n      res = str.match(/[\\0\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/);\n      if (res) {\n        throw new Error(\"Invalid character in string: \" + str + \" at index \" + res.index);\n      }\n      return str;\n    };\n\n    XMLStringifier.prototype.elEscape = function(str) {\n      var ampregex;\n      ampregex = this.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n      return str.replace(ampregex, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\r/g, '&#xD;');\n    };\n\n    XMLStringifier.prototype.attEscape = function(str) {\n      var ampregex;\n      ampregex = this.noDoubleEncoding ? /(?!&\\S+;)&/g : /&/g;\n      return str.replace(ampregex, '&amp;').replace(/</g, '&lt;').replace(/\"/g, '&quot;').replace(/\\t/g, '&#x9;').replace(/\\n/g, '&#xA;').replace(/\\r/g, '&#xD;');\n    };\n\n    return XMLStringifier;\n\n  })();\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLWriterBase,\n    hasProp = {}.hasOwnProperty;\n\n  module.exports = XMLWriterBase = (function() {\n    function XMLWriterBase(options) {\n      var key, ref, ref1, ref2, ref3, ref4, ref5, ref6, value;\n      options || (options = {});\n      this.pretty = options.pretty || false;\n      this.allowEmpty = (ref = options.allowEmpty) != null ? ref : false;\n      if (this.pretty) {\n        this.indent = (ref1 = options.indent) != null ? ref1 : '  ';\n        this.newline = (ref2 = options.newline) != null ? ref2 : '\\n';\n        this.offset = (ref3 = options.offset) != null ? ref3 : 0;\n        this.dontprettytextnodes = (ref4 = options.dontprettytextnodes) != null ? ref4 : 0;\n      } else {\n        this.indent = '';\n        this.newline = '';\n        this.offset = 0;\n        this.dontprettytextnodes = 0;\n      }\n      this.spacebeforeslash = (ref5 = options.spacebeforeslash) != null ? ref5 : '';\n      if (this.spacebeforeslash === true) {\n        this.spacebeforeslash = ' ';\n      }\n      this.newlinedefault = this.newline;\n      this.prettydefault = this.pretty;\n      ref6 = options.writer || {};\n      for (key in ref6) {\n        if (!hasProp.call(ref6, key)) continue;\n        value = ref6[key];\n        this[key] = value;\n      }\n    }\n\n    XMLWriterBase.prototype.set = function(options) {\n      var key, ref, value;\n      options || (options = {});\n      if (\"pretty\" in options) {\n        this.pretty = options.pretty;\n      }\n      if (\"allowEmpty\" in options) {\n        this.allowEmpty = options.allowEmpty;\n      }\n      if (this.pretty) {\n        this.indent = \"indent\" in options ? options.indent : '  ';\n        this.newline = \"newline\" in options ? options.newline : '\\n';\n        this.offset = \"offset\" in options ? options.offset : 0;\n        this.dontprettytextnodes = \"dontprettytextnodes\" in options ? options.dontprettytextnodes : 0;\n      } else {\n        this.indent = '';\n        this.newline = '';\n        this.offset = 0;\n        this.dontprettytextnodes = 0;\n      }\n      this.spacebeforeslash = \"spacebeforeslash\" in options ? options.spacebeforeslash : '';\n      if (this.spacebeforeslash === true) {\n        this.spacebeforeslash = ' ';\n      }\n      this.newlinedefault = this.newline;\n      this.prettydefault = this.pretty;\n      ref = options.writer || {};\n      for (key in ref) {\n        if (!hasProp.call(ref, key)) continue;\n        value = ref[key];\n        this[key] = value;\n      }\n      return this;\n    };\n\n    XMLWriterBase.prototype.space = function(level) {\n      var indent;\n      if (this.pretty) {\n        indent = (level || 0) + this.offset + 1;\n        if (indent > 0) {\n          return new Array(indent).join(this.indent);\n        } else {\n          return '';\n        }\n      } else {\n        return '';\n      }\n    };\n\n    return XMLWriterBase;\n\n  })();\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLText, XMLWriterBase,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLDeclaration = require('./XMLDeclaration');\n\n  XMLDocType = require('./XMLDocType');\n\n  XMLCData = require('./XMLCData');\n\n  XMLComment = require('./XMLComment');\n\n  XMLElement = require('./XMLElement');\n\n  XMLRaw = require('./XMLRaw');\n\n  XMLText = require('./XMLText');\n\n  XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n  XMLDummy = require('./XMLDummy');\n\n  XMLDTDAttList = require('./XMLDTDAttList');\n\n  XMLDTDElement = require('./XMLDTDElement');\n\n  XMLDTDEntity = require('./XMLDTDEntity');\n\n  XMLDTDNotation = require('./XMLDTDNotation');\n\n  XMLWriterBase = require('./XMLWriterBase');\n\n  module.exports = XMLStringWriter = (function(superClass) {\n    extend(XMLStringWriter, superClass);\n\n    function XMLStringWriter(options) {\n      XMLStringWriter.__super__.constructor.call(this, options);\n    }\n\n    XMLStringWriter.prototype.document = function(doc) {\n      var child, i, len, r, ref;\n      this.textispresent = false;\n      r = '';\n      ref = doc.children;\n      for (i = 0, len = ref.length; i < len; i++) {\n        child = ref[i];\n        if (child instanceof XMLDummy) {\n          continue;\n        }\n        r += (function() {\n          switch (false) {\n            case !(child instanceof XMLDeclaration):\n              return this.declaration(child);\n            case !(child instanceof XMLDocType):\n              return this.docType(child);\n            case !(child instanceof XMLComment):\n              return this.comment(child);\n            case !(child instanceof XMLProcessingInstruction):\n              return this.processingInstruction(child);\n            default:\n              return this.element(child, 0);\n          }\n        }).call(this);\n      }\n      if (this.pretty && r.slice(-this.newline.length) === this.newline) {\n        r = r.slice(0, -this.newline.length);\n      }\n      return r;\n    };\n\n    XMLStringWriter.prototype.attribute = function(att) {\n      return ' ' + att.name + '=\"' + att.value + '\"';\n    };\n\n    XMLStringWriter.prototype.cdata = function(node, level) {\n      return this.space(level) + '<![CDATA[' + node.text + ']]>' + this.newline;\n    };\n\n    XMLStringWriter.prototype.comment = function(node, level) {\n      return this.space(level) + '<!-- ' + node.text + ' -->' + this.newline;\n    };\n\n    XMLStringWriter.prototype.declaration = function(node, level) {\n      var r;\n      r = this.space(level);\n      r += '<?xml version=\"' + node.version + '\"';\n      if (node.encoding != null) {\n        r += ' encoding=\"' + node.encoding + '\"';\n      }\n      if (node.standalone != null) {\n        r += ' standalone=\"' + node.standalone + '\"';\n      }\n      r += this.spacebeforeslash + '?>';\n      r += this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.docType = function(node, level) {\n      var child, i, len, r, ref;\n      level || (level = 0);\n      r = this.space(level);\n      r += '<!DOCTYPE ' + node.root().name;\n      if (node.pubID && node.sysID) {\n        r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n      } else if (node.sysID) {\n        r += ' SYSTEM \"' + node.sysID + '\"';\n      }\n      if (node.children.length > 0) {\n        r += ' [';\n        r += this.newline;\n        ref = node.children;\n        for (i = 0, len = ref.length; i < len; i++) {\n          child = ref[i];\n          r += (function() {\n            switch (false) {\n              case !(child instanceof XMLDTDAttList):\n                return this.dtdAttList(child, level + 1);\n              case !(child instanceof XMLDTDElement):\n                return this.dtdElement(child, level + 1);\n              case !(child instanceof XMLDTDEntity):\n                return this.dtdEntity(child, level + 1);\n              case !(child instanceof XMLDTDNotation):\n                return this.dtdNotation(child, level + 1);\n              case !(child instanceof XMLCData):\n                return this.cdata(child, level + 1);\n              case !(child instanceof XMLComment):\n                return this.comment(child, level + 1);\n              case !(child instanceof XMLProcessingInstruction):\n                return this.processingInstruction(child, level + 1);\n              default:\n                throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n            }\n          }).call(this);\n        }\n        r += ']';\n      }\n      r += this.spacebeforeslash + '>';\n      r += this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.element = function(node, level) {\n      var att, child, i, j, len, len1, name, r, ref, ref1, ref2, space, textispresentwasset;\n      level || (level = 0);\n      textispresentwasset = false;\n      if (this.textispresent) {\n        this.newline = '';\n        this.pretty = false;\n      } else {\n        this.newline = this.newlinedefault;\n        this.pretty = this.prettydefault;\n      }\n      space = this.space(level);\n      r = '';\n      r += space + '<' + node.name;\n      ref = node.attributes;\n      for (name in ref) {\n        if (!hasProp.call(ref, name)) continue;\n        att = ref[name];\n        r += this.attribute(att);\n      }\n      if (node.children.length === 0 || node.children.every(function(e) {\n        return e.value === '';\n      })) {\n        if (this.allowEmpty) {\n          r += '></' + node.name + '>' + this.newline;\n        } else {\n          r += this.spacebeforeslash + '/>' + this.newline;\n        }\n      } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n        r += '>';\n        r += node.children[0].value;\n        r += '</' + node.name + '>' + this.newline;\n      } else {\n        if (this.dontprettytextnodes) {\n          ref1 = node.children;\n          for (i = 0, len = ref1.length; i < len; i++) {\n            child = ref1[i];\n            if (child.value != null) {\n              this.textispresent++;\n              textispresentwasset = true;\n              break;\n            }\n          }\n        }\n        if (this.textispresent) {\n          this.newline = '';\n          this.pretty = false;\n          space = this.space(level);\n        }\n        r += '>' + this.newline;\n        ref2 = node.children;\n        for (j = 0, len1 = ref2.length; j < len1; j++) {\n          child = ref2[j];\n          r += (function() {\n            switch (false) {\n              case !(child instanceof XMLCData):\n                return this.cdata(child, level + 1);\n              case !(child instanceof XMLComment):\n                return this.comment(child, level + 1);\n              case !(child instanceof XMLElement):\n                return this.element(child, level + 1);\n              case !(child instanceof XMLRaw):\n                return this.raw(child, level + 1);\n              case !(child instanceof XMLText):\n                return this.text(child, level + 1);\n              case !(child instanceof XMLProcessingInstruction):\n                return this.processingInstruction(child, level + 1);\n              case !(child instanceof XMLDummy):\n                return '';\n              default:\n                throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n            }\n          }).call(this);\n        }\n        if (textispresentwasset) {\n          this.textispresent--;\n        }\n        if (!this.textispresent) {\n          this.newline = this.newlinedefault;\n          this.pretty = this.prettydefault;\n        }\n        r += space + '</' + node.name + '>' + this.newline;\n      }\n      return r;\n    };\n\n    XMLStringWriter.prototype.processingInstruction = function(node, level) {\n      var r;\n      r = this.space(level) + '<?' + node.target;\n      if (node.value) {\n        r += ' ' + node.value;\n      }\n      r += this.spacebeforeslash + '?>' + this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.raw = function(node, level) {\n      return this.space(level) + node.value + this.newline;\n    };\n\n    XMLStringWriter.prototype.text = function(node, level) {\n      return this.space(level) + node.value + this.newline;\n    };\n\n    XMLStringWriter.prototype.dtdAttList = function(node, level) {\n      var r;\n      r = this.space(level) + '<!ATTLIST ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType;\n      if (node.defaultValueType !== '#DEFAULT') {\n        r += ' ' + node.defaultValueType;\n      }\n      if (node.defaultValue) {\n        r += ' \"' + node.defaultValue + '\"';\n      }\n      r += this.spacebeforeslash + '>' + this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.dtdElement = function(node, level) {\n      return this.space(level) + '<!ELEMENT ' + node.name + ' ' + node.value + this.spacebeforeslash + '>' + this.newline;\n    };\n\n    XMLStringWriter.prototype.dtdEntity = function(node, level) {\n      var r;\n      r = this.space(level) + '<!ENTITY';\n      if (node.pe) {\n        r += ' %';\n      }\n      r += ' ' + node.name;\n      if (node.value) {\n        r += ' \"' + node.value + '\"';\n      } else {\n        if (node.pubID && node.sysID) {\n          r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n        } else if (node.sysID) {\n          r += ' SYSTEM \"' + node.sysID + '\"';\n        }\n        if (node.nData) {\n          r += ' NDATA ' + node.nData;\n        }\n      }\n      r += this.spacebeforeslash + '>' + this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.dtdNotation = function(node, level) {\n      var r;\n      r = this.space(level) + '<!NOTATION ' + node.name;\n      if (node.pubID && node.sysID) {\n        r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n      } else if (node.pubID) {\n        r += ' PUBLIC \"' + node.pubID + '\"';\n      } else if (node.sysID) {\n        r += ' SYSTEM \"' + node.sysID + '\"';\n      }\n      r += this.spacebeforeslash + '>' + this.newline;\n      return r;\n    };\n\n    XMLStringWriter.prototype.openNode = function(node, level) {\n      var att, name, r, ref;\n      level || (level = 0);\n      if (node instanceof XMLElement) {\n        r = this.space(level) + '<' + node.name;\n        ref = node.attributes;\n        for (name in ref) {\n          if (!hasProp.call(ref, name)) continue;\n          att = ref[name];\n          r += this.attribute(att);\n        }\n        r += (node.children ? '>' : '/>') + this.newline;\n        return r;\n      } else {\n        r = this.space(level) + '<!DOCTYPE ' + node.rootNodeName;\n        if (node.pubID && node.sysID) {\n          r += ' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"';\n        } else if (node.sysID) {\n          r += ' SYSTEM \"' + node.sysID + '\"';\n        }\n        r += (node.children ? ' [' : '>') + this.newline;\n        return r;\n      }\n    };\n\n    XMLStringWriter.prototype.closeNode = function(node, level) {\n      level || (level = 0);\n      switch (false) {\n        case !(node instanceof XMLElement):\n          return this.space(level) + '</' + node.name + '>' + this.newline;\n        case !(node instanceof XMLDocType):\n          return this.space(level) + ']>' + this.newline;\n      }\n    };\n\n    return XMLStringWriter;\n\n  })(XMLWriterBase);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  isPlainObject = require('./Utility').isPlainObject;\n\n  XMLNode = require('./XMLNode');\n\n  XMLStringifier = require('./XMLStringifier');\n\n  XMLStringWriter = require('./XMLStringWriter');\n\n  module.exports = XMLDocument = (function(superClass) {\n    extend(XMLDocument, superClass);\n\n    function XMLDocument(options) {\n      XMLDocument.__super__.constructor.call(this, null);\n      this.name = \"?xml\";\n      options || (options = {});\n      if (!options.writer) {\n        options.writer = new XMLStringWriter();\n      }\n      this.options = options;\n      this.stringify = new XMLStringifier(options);\n      this.isDocument = true;\n    }\n\n    XMLDocument.prototype.end = function(writer) {\n      var writerOptions;\n      if (!writer) {\n        writer = this.options.writer;\n      } else if (isPlainObject(writer)) {\n        writerOptions = writer;\n        writer = this.options.writer.set(writerOptions);\n      }\n      return writer.document(this);\n    };\n\n    XMLDocument.prototype.toString = function(options) {\n      return this.options.writer.set(options).document(this);\n    };\n\n    return XMLDocument;\n\n  })(XMLNode);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,\n    hasProp = {}.hasOwnProperty;\n\n  ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;\n\n  XMLElement = require('./XMLElement');\n\n  XMLCData = require('./XMLCData');\n\n  XMLComment = require('./XMLComment');\n\n  XMLRaw = require('./XMLRaw');\n\n  XMLText = require('./XMLText');\n\n  XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n  XMLDeclaration = require('./XMLDeclaration');\n\n  XMLDocType = require('./XMLDocType');\n\n  XMLDTDAttList = require('./XMLDTDAttList');\n\n  XMLDTDEntity = require('./XMLDTDEntity');\n\n  XMLDTDElement = require('./XMLDTDElement');\n\n  XMLDTDNotation = require('./XMLDTDNotation');\n\n  XMLAttribute = require('./XMLAttribute');\n\n  XMLStringifier = require('./XMLStringifier');\n\n  XMLStringWriter = require('./XMLStringWriter');\n\n  module.exports = XMLDocumentCB = (function() {\n    function XMLDocumentCB(options, onData, onEnd) {\n      var writerOptions;\n      this.name = \"?xml\";\n      options || (options = {});\n      if (!options.writer) {\n        options.writer = new XMLStringWriter(options);\n      } else if (isPlainObject(options.writer)) {\n        writerOptions = options.writer;\n        options.writer = new XMLStringWriter(writerOptions);\n      }\n      this.options = options;\n      this.writer = options.writer;\n      this.stringify = new XMLStringifier(options);\n      this.onDataCallback = onData || function() {};\n      this.onEndCallback = onEnd || function() {};\n      this.currentNode = null;\n      this.currentLevel = -1;\n      this.openTags = {};\n      this.documentStarted = false;\n      this.documentCompleted = false;\n      this.root = null;\n    }\n\n    XMLDocumentCB.prototype.node = function(name, attributes, text) {\n      var ref1, ref2;\n      if (name == null) {\n        throw new Error(\"Missing node name.\");\n      }\n      if (this.root && this.currentLevel === -1) {\n        throw new Error(\"Document can only have one root node. \" + this.debugInfo(name));\n      }\n      this.openCurrent();\n      name = getValue(name);\n      if (attributes === null && (text == null)) {\n        ref1 = [{}, null], attributes = ref1[0], text = ref1[1];\n      }\n      if (attributes == null) {\n        attributes = {};\n      }\n      attributes = getValue(attributes);\n      if (!isObject(attributes)) {\n        ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];\n      }\n      this.currentNode = new XMLElement(this, name, attributes);\n      this.currentNode.children = false;\n      this.currentLevel++;\n      this.openTags[this.currentLevel] = this.currentNode;\n      if (text != null) {\n        this.text(text);\n      }\n      return this;\n    };\n\n    XMLDocumentCB.prototype.element = function(name, attributes, text) {\n      if (this.currentNode && this.currentNode instanceof XMLDocType) {\n        return this.dtdElement.apply(this, arguments);\n      } else {\n        return this.node(name, attributes, text);\n      }\n    };\n\n    XMLDocumentCB.prototype.attribute = function(name, value) {\n      var attName, attValue;\n      if (!this.currentNode || this.currentNode.children) {\n        throw new Error(\"att() can only be used immediately after an ele() call in callback mode. \" + this.debugInfo(name));\n      }\n      if (name != null) {\n        name = getValue(name);\n      }\n      if (isObject(name)) {\n        for (attName in name) {\n          if (!hasProp.call(name, attName)) continue;\n          attValue = name[attName];\n          this.attribute(attName, attValue);\n        }\n      } else {\n        if (isFunction(value)) {\n          value = value.apply();\n        }\n        if (!this.options.skipNullAttributes || (value != null)) {\n          this.currentNode.attributes[name] = new XMLAttribute(this, name, value);\n        }\n      }\n      return this;\n    };\n\n    XMLDocumentCB.prototype.text = function(value) {\n      var node;\n      this.openCurrent();\n      node = new XMLText(this, value);\n      this.onData(this.writer.text(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.cdata = function(value) {\n      var node;\n      this.openCurrent();\n      node = new XMLCData(this, value);\n      this.onData(this.writer.cdata(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.comment = function(value) {\n      var node;\n      this.openCurrent();\n      node = new XMLComment(this, value);\n      this.onData(this.writer.comment(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.raw = function(value) {\n      var node;\n      this.openCurrent();\n      node = new XMLRaw(this, value);\n      this.onData(this.writer.raw(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.instruction = function(target, value) {\n      var i, insTarget, insValue, len, node;\n      this.openCurrent();\n      if (target != null) {\n        target = getValue(target);\n      }\n      if (value != null) {\n        value = getValue(value);\n      }\n      if (Array.isArray(target)) {\n        for (i = 0, len = target.length; i < len; i++) {\n          insTarget = target[i];\n          this.instruction(insTarget);\n        }\n      } else if (isObject(target)) {\n        for (insTarget in target) {\n          if (!hasProp.call(target, insTarget)) continue;\n          insValue = target[insTarget];\n          this.instruction(insTarget, insValue);\n        }\n      } else {\n        if (isFunction(value)) {\n          value = value.apply();\n        }\n        node = new XMLProcessingInstruction(this, target, value);\n        this.onData(this.writer.processingInstruction(node, this.currentLevel + 1), this.currentLevel + 1);\n      }\n      return this;\n    };\n\n    XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {\n      var node;\n      this.openCurrent();\n      if (this.documentStarted) {\n        throw new Error(\"declaration() must be the first node.\");\n      }\n      node = new XMLDeclaration(this, version, encoding, standalone);\n      this.onData(this.writer.declaration(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {\n      this.openCurrent();\n      if (root == null) {\n        throw new Error(\"Missing root node name.\");\n      }\n      if (this.root) {\n        throw new Error(\"dtd() must come before the root node.\");\n      }\n      this.currentNode = new XMLDocType(this, pubID, sysID);\n      this.currentNode.rootNodeName = root;\n      this.currentNode.children = false;\n      this.currentLevel++;\n      this.openTags[this.currentLevel] = this.currentNode;\n      return this;\n    };\n\n    XMLDocumentCB.prototype.dtdElement = function(name, value) {\n      var node;\n      this.openCurrent();\n      node = new XMLDTDElement(this, name, value);\n      this.onData(this.writer.dtdElement(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n      var node;\n      this.openCurrent();\n      node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n      this.onData(this.writer.dtdAttList(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.entity = function(name, value) {\n      var node;\n      this.openCurrent();\n      node = new XMLDTDEntity(this, false, name, value);\n      this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.pEntity = function(name, value) {\n      var node;\n      this.openCurrent();\n      node = new XMLDTDEntity(this, true, name, value);\n      this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.notation = function(name, value) {\n      var node;\n      this.openCurrent();\n      node = new XMLDTDNotation(this, name, value);\n      this.onData(this.writer.dtdNotation(node, this.currentLevel + 1), this.currentLevel + 1);\n      return this;\n    };\n\n    XMLDocumentCB.prototype.up = function() {\n      if (this.currentLevel < 0) {\n        throw new Error(\"The document node has no parent.\");\n      }\n      if (this.currentNode) {\n        if (this.currentNode.children) {\n          this.closeNode(this.currentNode);\n        } else {\n          this.openNode(this.currentNode);\n        }\n        this.currentNode = null;\n      } else {\n        this.closeNode(this.openTags[this.currentLevel]);\n      }\n      delete this.openTags[this.currentLevel];\n      this.currentLevel--;\n      return this;\n    };\n\n    XMLDocumentCB.prototype.end = function() {\n      while (this.currentLevel >= 0) {\n        this.up();\n      }\n      return this.onEnd();\n    };\n\n    XMLDocumentCB.prototype.openCurrent = function() {\n      if (this.currentNode) {\n        this.currentNode.children = true;\n        return this.openNode(this.currentNode);\n      }\n    };\n\n    XMLDocumentCB.prototype.openNode = function(node) {\n      if (!node.isOpen) {\n        if (!this.root && this.currentLevel === 0 && node instanceof XMLElement) {\n          this.root = node;\n        }\n        this.onData(this.writer.openNode(node, this.currentLevel), this.currentLevel);\n        return node.isOpen = true;\n      }\n    };\n\n    XMLDocumentCB.prototype.closeNode = function(node) {\n      if (!node.isClosed) {\n        this.onData(this.writer.closeNode(node, this.currentLevel), this.currentLevel);\n        return node.isClosed = true;\n      }\n    };\n\n    XMLDocumentCB.prototype.onData = function(chunk, level) {\n      this.documentStarted = true;\n      return this.onDataCallback(chunk, level + 1);\n    };\n\n    XMLDocumentCB.prototype.onEnd = function() {\n      this.documentCompleted = true;\n      return this.onEndCallback();\n    };\n\n    XMLDocumentCB.prototype.debugInfo = function(name) {\n      if (name == null) {\n        return \"\";\n      } else {\n        return \"node: <\" + name + \">\";\n      }\n    };\n\n    XMLDocumentCB.prototype.ele = function() {\n      return this.element.apply(this, arguments);\n    };\n\n    XMLDocumentCB.prototype.nod = function(name, attributes, text) {\n      return this.node(name, attributes, text);\n    };\n\n    XMLDocumentCB.prototype.txt = function(value) {\n      return this.text(value);\n    };\n\n    XMLDocumentCB.prototype.dat = function(value) {\n      return this.cdata(value);\n    };\n\n    XMLDocumentCB.prototype.com = function(value) {\n      return this.comment(value);\n    };\n\n    XMLDocumentCB.prototype.ins = function(target, value) {\n      return this.instruction(target, value);\n    };\n\n    XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {\n      return this.declaration(version, encoding, standalone);\n    };\n\n    XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {\n      return this.doctype(root, pubID, sysID);\n    };\n\n    XMLDocumentCB.prototype.e = function(name, attributes, text) {\n      return this.element(name, attributes, text);\n    };\n\n    XMLDocumentCB.prototype.n = function(name, attributes, text) {\n      return this.node(name, attributes, text);\n    };\n\n    XMLDocumentCB.prototype.t = function(value) {\n      return this.text(value);\n    };\n\n    XMLDocumentCB.prototype.d = function(value) {\n      return this.cdata(value);\n    };\n\n    XMLDocumentCB.prototype.c = function(value) {\n      return this.comment(value);\n    };\n\n    XMLDocumentCB.prototype.r = function(value) {\n      return this.raw(value);\n    };\n\n    XMLDocumentCB.prototype.i = function(target, value) {\n      return this.instruction(target, value);\n    };\n\n    XMLDocumentCB.prototype.att = function() {\n      if (this.currentNode && this.currentNode instanceof XMLDocType) {\n        return this.attList.apply(this, arguments);\n      } else {\n        return this.attribute.apply(this, arguments);\n      }\n    };\n\n    XMLDocumentCB.prototype.a = function() {\n      if (this.currentNode && this.currentNode instanceof XMLDocType) {\n        return this.attList.apply(this, arguments);\n      } else {\n        return this.attribute.apply(this, arguments);\n      }\n    };\n\n    XMLDocumentCB.prototype.ent = function(name, value) {\n      return this.entity(name, value);\n    };\n\n    XMLDocumentCB.prototype.pent = function(name, value) {\n      return this.pEntity(name, value);\n    };\n\n    XMLDocumentCB.prototype.not = function(name, value) {\n      return this.notation(name, value);\n    };\n\n    return XMLDocumentCB;\n\n  })();\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStreamWriter, XMLText, XMLWriterBase,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    hasProp = {}.hasOwnProperty;\n\n  XMLDeclaration = require('./XMLDeclaration');\n\n  XMLDocType = require('./XMLDocType');\n\n  XMLCData = require('./XMLCData');\n\n  XMLComment = require('./XMLComment');\n\n  XMLElement = require('./XMLElement');\n\n  XMLRaw = require('./XMLRaw');\n\n  XMLText = require('./XMLText');\n\n  XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n  XMLDummy = require('./XMLDummy');\n\n  XMLDTDAttList = require('./XMLDTDAttList');\n\n  XMLDTDElement = require('./XMLDTDElement');\n\n  XMLDTDEntity = require('./XMLDTDEntity');\n\n  XMLDTDNotation = require('./XMLDTDNotation');\n\n  XMLWriterBase = require('./XMLWriterBase');\n\n  module.exports = XMLStreamWriter = (function(superClass) {\n    extend(XMLStreamWriter, superClass);\n\n    function XMLStreamWriter(stream, options) {\n      XMLStreamWriter.__super__.constructor.call(this, options);\n      this.stream = stream;\n    }\n\n    XMLStreamWriter.prototype.document = function(doc) {\n      var child, i, j, len, len1, ref, ref1, results;\n      ref = doc.children;\n      for (i = 0, len = ref.length; i < len; i++) {\n        child = ref[i];\n        child.isLastRootNode = false;\n      }\n      doc.children[doc.children.length - 1].isLastRootNode = true;\n      ref1 = doc.children;\n      results = [];\n      for (j = 0, len1 = ref1.length; j < len1; j++) {\n        child = ref1[j];\n        if (child instanceof XMLDummy) {\n          continue;\n        }\n        switch (false) {\n          case !(child instanceof XMLDeclaration):\n            results.push(this.declaration(child));\n            break;\n          case !(child instanceof XMLDocType):\n            results.push(this.docType(child));\n            break;\n          case !(child instanceof XMLComment):\n            results.push(this.comment(child));\n            break;\n          case !(child instanceof XMLProcessingInstruction):\n            results.push(this.processingInstruction(child));\n            break;\n          default:\n            results.push(this.element(child));\n        }\n      }\n      return results;\n    };\n\n    XMLStreamWriter.prototype.attribute = function(att) {\n      return this.stream.write(' ' + att.name + '=\"' + att.value + '\"');\n    };\n\n    XMLStreamWriter.prototype.cdata = function(node, level) {\n      return this.stream.write(this.space(level) + '<![CDATA[' + node.text + ']]>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.comment = function(node, level) {\n      return this.stream.write(this.space(level) + '<!-- ' + node.text + ' -->' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.declaration = function(node, level) {\n      this.stream.write(this.space(level));\n      this.stream.write('<?xml version=\"' + node.version + '\"');\n      if (node.encoding != null) {\n        this.stream.write(' encoding=\"' + node.encoding + '\"');\n      }\n      if (node.standalone != null) {\n        this.stream.write(' standalone=\"' + node.standalone + '\"');\n      }\n      this.stream.write(this.spacebeforeslash + '?>');\n      return this.stream.write(this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.docType = function(node, level) {\n      var child, i, len, ref;\n      level || (level = 0);\n      this.stream.write(this.space(level));\n      this.stream.write('<!DOCTYPE ' + node.root().name);\n      if (node.pubID && node.sysID) {\n        this.stream.write(' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"');\n      } else if (node.sysID) {\n        this.stream.write(' SYSTEM \"' + node.sysID + '\"');\n      }\n      if (node.children.length > 0) {\n        this.stream.write(' [');\n        this.stream.write(this.endline(node));\n        ref = node.children;\n        for (i = 0, len = ref.length; i < len; i++) {\n          child = ref[i];\n          switch (false) {\n            case !(child instanceof XMLDTDAttList):\n              this.dtdAttList(child, level + 1);\n              break;\n            case !(child instanceof XMLDTDElement):\n              this.dtdElement(child, level + 1);\n              break;\n            case !(child instanceof XMLDTDEntity):\n              this.dtdEntity(child, level + 1);\n              break;\n            case !(child instanceof XMLDTDNotation):\n              this.dtdNotation(child, level + 1);\n              break;\n            case !(child instanceof XMLCData):\n              this.cdata(child, level + 1);\n              break;\n            case !(child instanceof XMLComment):\n              this.comment(child, level + 1);\n              break;\n            case !(child instanceof XMLProcessingInstruction):\n              this.processingInstruction(child, level + 1);\n              break;\n            default:\n              throw new Error(\"Unknown DTD node type: \" + child.constructor.name);\n          }\n        }\n        this.stream.write(']');\n      }\n      this.stream.write(this.spacebeforeslash + '>');\n      return this.stream.write(this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.element = function(node, level) {\n      var att, child, i, len, name, ref, ref1, space;\n      level || (level = 0);\n      space = this.space(level);\n      this.stream.write(space + '<' + node.name);\n      ref = node.attributes;\n      for (name in ref) {\n        if (!hasProp.call(ref, name)) continue;\n        att = ref[name];\n        this.attribute(att);\n      }\n      if (node.children.length === 0 || node.children.every(function(e) {\n        return e.value === '';\n      })) {\n        if (this.allowEmpty) {\n          this.stream.write('></' + node.name + '>');\n        } else {\n          this.stream.write(this.spacebeforeslash + '/>');\n        }\n      } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) {\n        this.stream.write('>');\n        this.stream.write(node.children[0].value);\n        this.stream.write('</' + node.name + '>');\n      } else {\n        this.stream.write('>' + this.newline);\n        ref1 = node.children;\n        for (i = 0, len = ref1.length; i < len; i++) {\n          child = ref1[i];\n          switch (false) {\n            case !(child instanceof XMLCData):\n              this.cdata(child, level + 1);\n              break;\n            case !(child instanceof XMLComment):\n              this.comment(child, level + 1);\n              break;\n            case !(child instanceof XMLElement):\n              this.element(child, level + 1);\n              break;\n            case !(child instanceof XMLRaw):\n              this.raw(child, level + 1);\n              break;\n            case !(child instanceof XMLText):\n              this.text(child, level + 1);\n              break;\n            case !(child instanceof XMLProcessingInstruction):\n              this.processingInstruction(child, level + 1);\n              break;\n            case !(child instanceof XMLDummy):\n              '';\n              break;\n            default:\n              throw new Error(\"Unknown XML node type: \" + child.constructor.name);\n          }\n        }\n        this.stream.write(space + '</' + node.name + '>');\n      }\n      return this.stream.write(this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.processingInstruction = function(node, level) {\n      this.stream.write(this.space(level) + '<?' + node.target);\n      if (node.value) {\n        this.stream.write(' ' + node.value);\n      }\n      return this.stream.write(this.spacebeforeslash + '?>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.raw = function(node, level) {\n      return this.stream.write(this.space(level) + node.value + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.text = function(node, level) {\n      return this.stream.write(this.space(level) + node.value + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.dtdAttList = function(node, level) {\n      this.stream.write(this.space(level) + '<!ATTLIST ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType);\n      if (node.defaultValueType !== '#DEFAULT') {\n        this.stream.write(' ' + node.defaultValueType);\n      }\n      if (node.defaultValue) {\n        this.stream.write(' \"' + node.defaultValue + '\"');\n      }\n      return this.stream.write(this.spacebeforeslash + '>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.dtdElement = function(node, level) {\n      this.stream.write(this.space(level) + '<!ELEMENT ' + node.name + ' ' + node.value);\n      return this.stream.write(this.spacebeforeslash + '>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.dtdEntity = function(node, level) {\n      this.stream.write(this.space(level) + '<!ENTITY');\n      if (node.pe) {\n        this.stream.write(' %');\n      }\n      this.stream.write(' ' + node.name);\n      if (node.value) {\n        this.stream.write(' \"' + node.value + '\"');\n      } else {\n        if (node.pubID && node.sysID) {\n          this.stream.write(' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"');\n        } else if (node.sysID) {\n          this.stream.write(' SYSTEM \"' + node.sysID + '\"');\n        }\n        if (node.nData) {\n          this.stream.write(' NDATA ' + node.nData);\n        }\n      }\n      return this.stream.write(this.spacebeforeslash + '>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.dtdNotation = function(node, level) {\n      this.stream.write(this.space(level) + '<!NOTATION ' + node.name);\n      if (node.pubID && node.sysID) {\n        this.stream.write(' PUBLIC \"' + node.pubID + '\" \"' + node.sysID + '\"');\n      } else if (node.pubID) {\n        this.stream.write(' PUBLIC \"' + node.pubID + '\"');\n      } else if (node.sysID) {\n        this.stream.write(' SYSTEM \"' + node.sysID + '\"');\n      }\n      return this.stream.write(this.spacebeforeslash + '>' + this.endline(node));\n    };\n\n    XMLStreamWriter.prototype.endline = function(node) {\n      if (!node.isLastRootNode) {\n        return this.newline;\n      } else {\n        return '';\n      }\n    };\n\n    return XMLStreamWriter;\n\n  })(XMLWriterBase);\n\n}).call(this);\n", "// Generated by CoffeeScript 1.12.7\n(function() {\n  var XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;\n\n  ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction;\n\n  XMLDocument = require('./XMLDocument');\n\n  XMLDocumentCB = require('./XMLDocumentCB');\n\n  XMLStringWriter = require('./XMLStringWriter');\n\n  XMLStreamWriter = require('./XMLStreamWriter');\n\n  module.exports.create = function(name, xmldec, doctype, options) {\n    var doc, root;\n    if (name == null) {\n      throw new Error(\"Root element needs a name.\");\n    }\n    options = assign({}, xmldec, doctype, options);\n    doc = new XMLDocument(options);\n    root = doc.element(name);\n    if (!options.headless) {\n      doc.declaration(options);\n      if ((options.pubID != null) || (options.sysID != null)) {\n        doc.doctype(options);\n      }\n    }\n    return root;\n  };\n\n  module.exports.begin = function(options, onData, onEnd) {\n    var ref1;\n    if (isFunction(options)) {\n      ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];\n      options = {};\n    }\n    if (onData) {\n      return new XMLDocumentCB(options, onData, onEnd);\n    } else {\n      return new XMLDocument(options);\n    }\n  };\n\n  module.exports.stringWriter = function(options) {\n    return new XMLStringWriter(options);\n  };\n\n  module.exports.streamWriter = function(stream, options) {\n    return new XMLStreamWriter(stream, options);\n  };\n\n}).call(this);\n", "var _ = require(\"underscore\");\nvar xmlbuilder = require(\"xmlbuilder\");\n\n\nexports.writeString = writeString;\n\n\nfunction writeString(root, namespaces) {\n    var uriToPrefix = _.invert(namespaces);\n    \n    var nodeWriters = {\n        element: writeElement,\n        text: writeTextNode\n    };\n\n    function writeNode(builder, node) {\n        return nodeWriters[node.type](builder, node);\n    }\n\n    function writeElement(builder, element) {\n        var elementBuilder = builder.element(mapElementName(element.name), element.attributes);\n        element.children.forEach(function(child) {\n            writeNode(elementBuilder, child);\n        });\n    }\n    \n    function mapElementName(name) {\n        var longFormMatch = /^\\{(.*)\\}(.*)$/.exec(name);\n        if (longFormMatch) {\n            var prefix = uriToPrefix[longFormMatch[1]];\n            return prefix + (prefix === \"\" ? \"\" : \":\") + longFormMatch[2];\n        } else {\n            return name;\n        }\n    }\n    \n    function writeDocument(root) {\n        var builder = xmlbuilder\n            .create(mapElementName(root.name), {\n                version: '1.0',\n                encoding: 'UTF-8',\n                standalone: true\n            });\n        \n        _.forEach(namespaces, function(uri, prefix) {\n            var key = \"xmlns\" + (prefix === \"\" ? \"\" : \":\" + prefix);\n            builder.attribute(key, uri);\n        });\n        \n        root.children.forEach(function(child) {\n            writeNode(builder, child);\n        });\n        return builder.end();\n    }\n\n    return writeDocument(root);\n}\n\nfunction writeTextNode(builder, node) {\n    builder.text(node.value);\n}\n", "var nodes = require(\"./nodes\");\n\nexports.Element = nodes.Element;\nexports.element = nodes.element;\nexports.emptyElement = nodes.emptyElement;\nexports.text = nodes.text;\nexports.readString = require(\"./reader\").readString;\nexports.writeString = require(\"./writer\").writeString;\n", "var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\n\nexports.read = read;\nexports.readXmlFromZipFile = readXmlFromZipFile;\n\nvar xmlNamespaceMap = {\n    // Transitional format\n    \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\": \"w\",\n    \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\": \"r\",\n    \"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\": \"wp\",\n    \"http://schemas.openxmlformats.org/drawingml/2006/main\": \"a\",\n    \"http://schemas.openxmlformats.org/drawingml/2006/picture\": \"pic\",\n\n    // Strict format\n    \"http://purl.oclc.org/ooxml/wordprocessingml/main\": \"w\",\n    \"http://purl.oclc.org/ooxml/officeDocument/relationships\": \"r\",\n    \"http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing\": \"wp\",\n    \"http://purl.oclc.org/ooxml/drawingml/main\": \"a\",\n    \"http://purl.oclc.org/ooxml/drawingml/picture\": \"pic\",\n\n    // Common\n    \"http://schemas.openxmlformats.org/package/2006/content-types\": \"content-types\",\n    \"http://schemas.openxmlformats.org/package/2006/relationships\": \"relationships\",\n    \"http://schemas.openxmlformats.org/markup-compatibility/2006\": \"mc\",\n    \"urn:schemas-microsoft-com:vml\": \"v\",\n    \"urn:schemas-microsoft-com:office:word\": \"office-word\",\n\n    // [MS-DOCX]: Word Extensions to the Office Open XML (.docx) File Format\n    // https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b839fe1f-e1ca-4fa6-8c26-5954d0abbccd\n    \"http://schemas.microsoft.com/office/word/2010/wordml\": \"wordml\"\n};\n\n\nfunction read(xmlString) {\n    return xml.readString(xmlString, xmlNamespaceMap)\n        .then(function(document) {\n            return collapseAlternateContent(document)[0];\n        });\n}\n\n\nfunction readXmlFromZipFile(docxFile, path) {\n    if (docxFile.exists(path)) {\n        return docxFile.read(path, \"utf-8\")\n            .then(stripUtf8Bom)\n            .then(read);\n    } else {\n        return promises.resolve(null);\n    }\n}\n\n\nfunction stripUtf8Bom(xmlString) {\n    return xmlString.replace(/^\\uFEFF/g, '');\n}\n\n\nfunction collapseAlternateContent(node) {\n    if (node.type === \"element\") {\n        if (node.name === \"mc:AlternateContent\") {\n            return node.firstOrEmpty(\"mc:Fallback\").children;\n        } else {\n            node.children = _.flatten(node.children.map(collapseAlternateContent, true));\n            return [node];\n        }\n    } else {\n        return [node];\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dingbats = [\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"33\", \"Unicode hex\": \"21\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"8704\", \"Unicode hex\": \"2200\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"35\", \"Unicode hex\": \"23\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"8707\", \"Unicode hex\": \"2203\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"37\", \"Unicode hex\": \"25\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"38\", \"Unicode hex\": \"26\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"8717\", \"Unicode hex\": \"220D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"40\", \"Unicode hex\": \"28\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"41\", \"Unicode hex\": \"29\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"42\", \"Unicode hex\": \"2A\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"43\", \"Unicode hex\": \"2B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"44\", \"Unicode hex\": \"2C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"8722\", \"Unicode hex\": \"2212\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"46\", \"Unicode hex\": \"2E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"47\", \"Unicode hex\": \"2F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"48\", \"Unicode hex\": \"30\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"49\", \"Unicode hex\": \"31\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"50\", \"Unicode hex\": \"32\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"51\", \"Unicode hex\": \"33\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"52\", \"Unicode hex\": \"34\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"53\", \"Unicode hex\": \"35\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"54\", \"Unicode hex\": \"36\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"55\", \"Unicode hex\": \"37\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"56\", \"Unicode hex\": \"38\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"57\", \"Unicode hex\": \"39\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"58\", \"Unicode hex\": \"3A\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"59\", \"Unicode hex\": \"3B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"60\", \"Unicode hex\": \"3C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"61\", \"Unicode hex\": \"3D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"62\", \"Unicode hex\": \"3E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"63\", \"Unicode hex\": \"3F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"8773\", \"Unicode hex\": \"2245\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"913\", \"Unicode hex\": \"391\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"914\", \"Unicode hex\": \"392\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"935\", \"Unicode hex\": \"3A7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"916\", \"Unicode hex\": \"394\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"917\", \"Unicode hex\": \"395\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"934\", \"Unicode hex\": \"3A6\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"915\", \"Unicode hex\": \"393\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"919\", \"Unicode hex\": \"397\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"921\", \"Unicode hex\": \"399\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"977\", \"Unicode hex\": \"3D1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"922\", \"Unicode hex\": \"39A\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"923\", \"Unicode hex\": \"39B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"924\", \"Unicode hex\": \"39C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"925\", \"Unicode hex\": \"39D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"927\", \"Unicode hex\": \"39F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"928\", \"Unicode hex\": \"3A0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"920\", \"Unicode hex\": \"398\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"929\", \"Unicode hex\": \"3A1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"931\", \"Unicode hex\": \"3A3\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"932\", \"Unicode hex\": \"3A4\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"933\", \"Unicode hex\": \"3A5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"962\", \"Unicode hex\": \"3C2\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"937\", \"Unicode hex\": \"3A9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"926\", \"Unicode hex\": \"39E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"936\", \"Unicode hex\": \"3A8\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"918\", \"Unicode hex\": \"396\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"91\", \"Unicode hex\": \"5B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"8756\", \"Unicode hex\": \"2234\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"93\", \"Unicode hex\": \"5D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"8869\", \"Unicode hex\": \"22A5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"95\", \"Unicode hex\": \"5F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"8254\", \"Unicode hex\": \"203E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"945\", \"Unicode hex\": \"3B1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"946\", \"Unicode hex\": \"3B2\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"967\", \"Unicode hex\": \"3C7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"948\", \"Unicode hex\": \"3B4\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"949\", \"Unicode hex\": \"3B5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"966\", \"Unicode hex\": \"3C6\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"947\", \"Unicode hex\": \"3B3\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"951\", \"Unicode hex\": \"3B7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"953\", \"Unicode hex\": \"3B9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"981\", \"Unicode hex\": \"3D5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"954\", \"Unicode hex\": \"3BA\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"955\", \"Unicode hex\": \"3BB\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"956\", \"Unicode hex\": \"3BC\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"957\", \"Unicode hex\": \"3BD\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"959\", \"Unicode hex\": \"3BF\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"960\", \"Unicode hex\": \"3C0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"952\", \"Unicode hex\": \"3B8\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"961\", \"Unicode hex\": \"3C1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"963\", \"Unicode hex\": \"3C3\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"964\", \"Unicode hex\": \"3C4\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"965\", \"Unicode hex\": \"3C5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"982\", \"Unicode hex\": \"3D6\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"969\", \"Unicode hex\": \"3C9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"958\", \"Unicode hex\": \"3BE\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"968\", \"Unicode hex\": \"3C8\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"950\", \"Unicode hex\": \"3B6\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"123\", \"Unicode hex\": \"7B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"124\", \"Unicode hex\": \"7C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"125\", \"Unicode hex\": \"7D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"126\", \"Unicode hex\": \"7E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"8364\", \"Unicode hex\": \"20AC\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"978\", \"Unicode hex\": \"3D2\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"8242\", \"Unicode hex\": \"2032\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"8804\", \"Unicode hex\": \"2264\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"8260\", \"Unicode hex\": \"2044\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"8734\", \"Unicode hex\": \"221E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"402\", \"Unicode hex\": \"192\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9827\", \"Unicode hex\": \"2663\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9830\", \"Unicode hex\": \"2666\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"9829\", \"Unicode hex\": \"2665\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"9824\", \"Unicode hex\": \"2660\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"8596\", \"Unicode hex\": \"2194\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"8592\", \"Unicode hex\": \"2190\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"8593\", \"Unicode hex\": \"2191\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"8594\", \"Unicode hex\": \"2192\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"8595\", \"Unicode hex\": \"2193\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"176\", \"Unicode hex\": \"B0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"177\", \"Unicode hex\": \"B1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"8243\", \"Unicode hex\": \"2033\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"8805\", \"Unicode hex\": \"2265\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"215\", \"Unicode hex\": \"D7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"8733\", \"Unicode hex\": \"221D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"8706\", \"Unicode hex\": \"2202\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"247\", \"Unicode hex\": \"F7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"8800\", \"Unicode hex\": \"2260\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"8801\", \"Unicode hex\": \"2261\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"8776\", \"Unicode hex\": \"2248\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"8230\", \"Unicode hex\": \"2026\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"9135\", \"Unicode hex\": \"23AF\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"8629\", \"Unicode hex\": \"21B5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"8501\", \"Unicode hex\": \"2135\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"8465\", \"Unicode hex\": \"2111\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"8476\", \"Unicode hex\": \"211C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"8472\", \"Unicode hex\": \"2118\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"8855\", \"Unicode hex\": \"2297\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"8853\", \"Unicode hex\": \"2295\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"8709\", \"Unicode hex\": \"2205\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"8745\", \"Unicode hex\": \"2229\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"8746\", \"Unicode hex\": \"222A\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"8835\", \"Unicode hex\": \"2283\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"8839\", \"Unicode hex\": \"2287\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"8836\", \"Unicode hex\": \"2284\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"8834\", \"Unicode hex\": \"2282\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"8838\", \"Unicode hex\": \"2286\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"8712\", \"Unicode hex\": \"2208\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"8713\", \"Unicode hex\": \"2209\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"8736\", \"Unicode hex\": \"2220\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"8711\", \"Unicode hex\": \"2207\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"8719\", \"Unicode hex\": \"220F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8730\", \"Unicode hex\": \"221A\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"172\", \"Unicode hex\": \"AC\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"8743\", \"Unicode hex\": \"2227\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"8744\", \"Unicode hex\": \"2228\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"8660\", \"Unicode hex\": \"21D4\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"8656\", \"Unicode hex\": \"21D0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"8657\", \"Unicode hex\": \"21D1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"8658\", \"Unicode hex\": \"21D2\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"8659\", \"Unicode hex\": \"21D3\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"12296\", \"Unicode hex\": \"3008\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"174\", \"Unicode hex\": \"AE\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"169\", \"Unicode hex\": \"A9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"8482\", \"Unicode hex\": \"2122\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"8721\", \"Unicode hex\": \"2211\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"9115\", \"Unicode hex\": \"239B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"9116\", \"Unicode hex\": \"239C\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9117\", \"Unicode hex\": \"239D\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9121\", \"Unicode hex\": \"23A1\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"9122\", \"Unicode hex\": \"23A2\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"9123\", \"Unicode hex\": \"23A3\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"9127\", \"Unicode hex\": \"23A7\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"9128\", \"Unicode hex\": \"23A8\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"9129\", \"Unicode hex\": \"23A9\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"9130\", \"Unicode hex\": \"23AA\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"63743\", \"Unicode hex\": \"F8FF\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"12297\", \"Unicode hex\": \"3009\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8747\", \"Unicode hex\": \"222B\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"8992\", \"Unicode hex\": \"2320\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"9134\", \"Unicode hex\": \"23AE\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"8993\", \"Unicode hex\": \"2321\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"9118\", \"Unicode hex\": \"239E\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"9119\", \"Unicode hex\": \"239F\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"9120\", \"Unicode hex\": \"23A0\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"9124\", \"Unicode hex\": \"23A4\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"9125\", \"Unicode hex\": \"23A5\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"9126\", \"Unicode hex\": \"23A6\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"9131\", \"Unicode hex\": \"23AB\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"9132\", \"Unicode hex\": \"23AC\" },\n    { \"Typeface name\": \"Symbol\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"9133\", \"Unicode hex\": \"23AD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128375\", \"Unicode hex\": \"1F577\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128376\", \"Unicode hex\": \"1F578\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128370\", \"Unicode hex\": \"1F572\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128374\", \"Unicode hex\": \"1F576\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"127942\", \"Unicode hex\": \"1F3C6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"127894\", \"Unicode hex\": \"1F396\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128391\", \"Unicode hex\": \"1F587\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128488\", \"Unicode hex\": \"1F5E8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128489\", \"Unicode hex\": \"1F5E9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128496\", \"Unicode hex\": \"1F5F0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128497\", \"Unicode hex\": \"1F5F1\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"127798\", \"Unicode hex\": \"1F336\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"127895\", \"Unicode hex\": \"1F397\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128638\", \"Unicode hex\": \"1F67E\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128636\", \"Unicode hex\": \"1F67C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128469\", \"Unicode hex\": \"1F5D5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128470\", \"Unicode hex\": \"1F5D6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128471\", \"Unicode hex\": \"1F5D7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"9204\", \"Unicode hex\": \"23F4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"9205\", \"Unicode hex\": \"23F5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"9206\", \"Unicode hex\": \"23F6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"9207\", \"Unicode hex\": \"23F7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"9194\", \"Unicode hex\": \"23EA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"9193\", \"Unicode hex\": \"23E9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"9198\", \"Unicode hex\": \"23EE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"9197\", \"Unicode hex\": \"23ED\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"9208\", \"Unicode hex\": \"23F8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"9209\", \"Unicode hex\": \"23F9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"9210\", \"Unicode hex\": \"23FA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128474\", \"Unicode hex\": \"1F5DA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128499\", \"Unicode hex\": \"1F5F3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128736\", \"Unicode hex\": \"1F6E0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"127959\", \"Unicode hex\": \"1F3D7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"127960\", \"Unicode hex\": \"1F3D8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"127961\", \"Unicode hex\": \"1F3D9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"127962\", \"Unicode hex\": \"1F3DA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"127964\", \"Unicode hex\": \"1F3DC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"127981\", \"Unicode hex\": \"1F3ED\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"127963\", \"Unicode hex\": \"1F3DB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"127968\", \"Unicode hex\": \"1F3E0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"127958\", \"Unicode hex\": \"1F3D6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"127965\", \"Unicode hex\": \"1F3DD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128739\", \"Unicode hex\": \"1F6E3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128269\", \"Unicode hex\": \"1F50D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"127956\", \"Unicode hex\": \"1F3D4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128065\", \"Unicode hex\": \"1F441\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128066\", \"Unicode hex\": \"1F442\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127966\", \"Unicode hex\": \"1F3DE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"127957\", \"Unicode hex\": \"1F3D5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"128740\", \"Unicode hex\": \"1F6E4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127967\", \"Unicode hex\": \"1F3DF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"128755\", \"Unicode hex\": \"1F6F3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128364\", \"Unicode hex\": \"1F56C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"128363\", \"Unicode hex\": \"1F56B\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128360\", \"Unicode hex\": \"1F568\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"128264\", \"Unicode hex\": \"1F508\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"127892\", \"Unicode hex\": \"1F394\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"127893\", \"Unicode hex\": \"1F395\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128492\", \"Unicode hex\": \"1F5EC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128637\", \"Unicode hex\": \"1F67D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"128493\", \"Unicode hex\": \"1F5ED\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128490\", \"Unicode hex\": \"1F5EA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128491\", \"Unicode hex\": \"1F5EB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"11156\", \"Unicode hex\": \"2B94\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"10004\", \"Unicode hex\": \"2714\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128690\", \"Unicode hex\": \"1F6B2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"11036\", \"Unicode hex\": \"2B1C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128737\", \"Unicode hex\": \"1F6E1\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128230\", \"Unicode hex\": \"1F4E6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128753\", \"Unicode hex\": \"1F6F1\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"11035\", \"Unicode hex\": \"2B1B\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128657\", \"Unicode hex\": \"1F691\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"128712\", \"Unicode hex\": \"1F6C8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128745\", \"Unicode hex\": \"1F6E9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128752\", \"Unicode hex\": \"1F6F0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"128968\", \"Unicode hex\": \"1F7C8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128372\", \"Unicode hex\": \"1F574\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"11044\", \"Unicode hex\": \"2B24\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128741\", \"Unicode hex\": \"1F6E5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128660\", \"Unicode hex\": \"1F694\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"128472\", \"Unicode hex\": \"1F5D8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"128473\", \"Unicode hex\": \"1F5D9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"10067\", \"Unicode hex\": \"2753\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"128754\", \"Unicode hex\": \"1F6F2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"128647\", \"Unicode hex\": \"1F687\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"128653\", \"Unicode hex\": \"1F68D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9971\", \"Unicode hex\": \"26F3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"8854\", \"Unicode hex\": \"2296\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"128685\", \"Unicode hex\": \"1F6AD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"128494\", \"Unicode hex\": \"1F5EE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"9168\", \"Unicode hex\": \"23D0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128495\", \"Unicode hex\": \"1F5EF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128498\", \"Unicode hex\": \"1F5F2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128697\", \"Unicode hex\": \"1F6B9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"128698\", \"Unicode hex\": \"1F6BA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"128713\", \"Unicode hex\": \"1F6C9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"128714\", \"Unicode hex\": \"1F6CA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"128700\", \"Unicode hex\": \"1F6BC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"128125\", \"Unicode hex\": \"1F47D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"127947\", \"Unicode hex\": \"1F3CB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"9975\", \"Unicode hex\": \"26F7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"127938\", \"Unicode hex\": \"1F3C2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"127948\", \"Unicode hex\": \"1F3CC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"127946\", \"Unicode hex\": \"1F3CA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127940\", \"Unicode hex\": \"1F3C4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"127949\", \"Unicode hex\": \"1F3CD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"127950\", \"Unicode hex\": \"1F3CE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128664\", \"Unicode hex\": \"1F698\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128480\", \"Unicode hex\": \"1F5E0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128738\", \"Unicode hex\": \"1F6E2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128176\", \"Unicode hex\": \"1F4B0\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"127991\", \"Unicode hex\": \"1F3F7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128179\", \"Unicode hex\": \"1F4B3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128106\", \"Unicode hex\": \"1F46A\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"128481\", \"Unicode hex\": \"1F5E1\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128482\", \"Unicode hex\": \"1F5E2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128483\", \"Unicode hex\": \"1F5E3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128388\", \"Unicode hex\": \"1F584\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128389\", \"Unicode hex\": \"1F585\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128390\", \"Unicode hex\": \"1F586\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128441\", \"Unicode hex\": \"1F5B9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"128442\", \"Unicode hex\": \"1F5BA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128443\", \"Unicode hex\": \"1F5BB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128373\", \"Unicode hex\": \"1F575\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"128368\", \"Unicode hex\": \"1F570\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128445\", \"Unicode hex\": \"1F5BD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128446\", \"Unicode hex\": \"1F5BE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128466\", \"Unicode hex\": \"1F5D2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128467\", \"Unicode hex\": \"1F5D3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128218\", \"Unicode hex\": \"1F4DA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128478\", \"Unicode hex\": \"1F5DE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128479\", \"Unicode hex\": \"1F5DF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128451\", \"Unicode hex\": \"1F5C3\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128450\", \"Unicode hex\": \"1F5C2\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128444\", \"Unicode hex\": \"1F5BC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"127917\", \"Unicode hex\": \"1F3AD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"127900\", \"Unicode hex\": \"1F39C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"127896\", \"Unicode hex\": \"1F398\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"127897\", \"Unicode hex\": \"1F399\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"127911\", \"Unicode hex\": \"1F3A7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128191\", \"Unicode hex\": \"1F4BF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"127902\", \"Unicode hex\": \"1F39E\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128247\", \"Unicode hex\": \"1F4F7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"127903\", \"Unicode hex\": \"1F39F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"127916\", \"Unicode hex\": \"1F3AC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128253\", \"Unicode hex\": \"1F4FD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128249\", \"Unicode hex\": \"1F4F9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128254\", \"Unicode hex\": \"1F4FE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128251\", \"Unicode hex\": \"1F4FB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"127898\", \"Unicode hex\": \"1F39A\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"127899\", \"Unicode hex\": \"1F39B\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128250\", \"Unicode hex\": \"1F4FA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128187\", \"Unicode hex\": \"1F4BB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128421\", \"Unicode hex\": \"1F5A5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128422\", \"Unicode hex\": \"1F5A6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128423\", \"Unicode hex\": \"1F5A7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"128377\", \"Unicode hex\": \"1F579\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"127918\", \"Unicode hex\": \"1F3AE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"128379\", \"Unicode hex\": \"1F57B\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128380\", \"Unicode hex\": \"1F57C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128223\", \"Unicode hex\": \"1F4DF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128385\", \"Unicode hex\": \"1F581\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128384\", \"Unicode hex\": \"1F580\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128424\", \"Unicode hex\": \"1F5A8\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128425\", \"Unicode hex\": \"1F5A9\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128447\", \"Unicode hex\": \"1F5BF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128426\", \"Unicode hex\": \"1F5AA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128476\", \"Unicode hex\": \"1F5DC\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128274\", \"Unicode hex\": \"1F512\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128275\", \"Unicode hex\": \"1F513\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128477\", \"Unicode hex\": \"1F5DD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128229\", \"Unicode hex\": \"1F4E5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128228\", \"Unicode hex\": \"1F4E4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128371\", \"Unicode hex\": \"1F573\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"127779\", \"Unicode hex\": \"1F323\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"127780\", \"Unicode hex\": \"1F324\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"127781\", \"Unicode hex\": \"1F325\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"127782\", \"Unicode hex\": \"1F326\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"9729\", \"Unicode hex\": \"2601\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"127784\", \"Unicode hex\": \"1F328\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"127783\", \"Unicode hex\": \"1F327\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"127785\", \"Unicode hex\": \"1F329\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"127786\", \"Unicode hex\": \"1F32A\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"127788\", \"Unicode hex\": \"1F32C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"127787\", \"Unicode hex\": \"1F32B\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"127772\", \"Unicode hex\": \"1F31C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"127777\", \"Unicode hex\": \"1F321\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128715\", \"Unicode hex\": \"1F6CB\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128719\", \"Unicode hex\": \"1F6CF\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"127869\", \"Unicode hex\": \"1F37D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"127864\", \"Unicode hex\": \"1F378\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128718\", \"Unicode hex\": \"1F6CE\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128717\", \"Unicode hex\": \"1F6CD\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"9413\", \"Unicode hex\": \"24C5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"9855\", \"Unicode hex\": \"267F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128710\", \"Unicode hex\": \"1F6C6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"128392\", \"Unicode hex\": \"1F588\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"127891\", \"Unicode hex\": \"1F393\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128484\", \"Unicode hex\": \"1F5E4\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128485\", \"Unicode hex\": \"1F5E5\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128486\", \"Unicode hex\": \"1F5E6\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"128487\", \"Unicode hex\": \"1F5E7\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128746\", \"Unicode hex\": \"1F6EA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128063\", \"Unicode hex\": \"1F43F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"128038\", \"Unicode hex\": \"1F426\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128031\", \"Unicode hex\": \"1F41F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128021\", \"Unicode hex\": \"1F415\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"128008\", \"Unicode hex\": \"1F408\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"128620\", \"Unicode hex\": \"1F66C\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"128622\", \"Unicode hex\": \"1F66E\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"128621\", \"Unicode hex\": \"1F66D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"128623\", \"Unicode hex\": \"1F66F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128506\", \"Unicode hex\": \"1F5FA\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"127757\", \"Unicode hex\": \"1F30D\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"127759\", \"Unicode hex\": \"1F30F\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"127758\", \"Unicode hex\": \"1F30E\" },\n    { \"Typeface name\": \"Webdings\", \"Dingbat dec\": \"255\", \"Dingbat hex\": \"FF\", \"Unicode dec\": \"128330\", \"Unicode hex\": \"1F54A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128393\", \"Unicode hex\": \"1F589\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"9986\", \"Unicode hex\": \"2702\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"9985\", \"Unicode hex\": \"2701\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128083\", \"Unicode hex\": \"1F453\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"128365\", \"Unicode hex\": \"1F56D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"128366\", \"Unicode hex\": \"1F56E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128367\", \"Unicode hex\": \"1F56F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128383\", \"Unicode hex\": \"1F57F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"9990\", \"Unicode hex\": \"2706\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128386\", \"Unicode hex\": \"1F582\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128387\", \"Unicode hex\": \"1F583\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128234\", \"Unicode hex\": \"1F4EA\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128235\", \"Unicode hex\": \"1F4EB\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128236\", \"Unicode hex\": \"1F4EC\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128237\", \"Unicode hex\": \"1F4ED\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128448\", \"Unicode hex\": \"1F5C0\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128449\", \"Unicode hex\": \"1F5C1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128462\", \"Unicode hex\": \"1F5CE\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128463\", \"Unicode hex\": \"1F5CF\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128464\", \"Unicode hex\": \"1F5D0\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128452\", \"Unicode hex\": \"1F5C4\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"8987\", \"Unicode hex\": \"231B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128430\", \"Unicode hex\": \"1F5AE\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128432\", \"Unicode hex\": \"1F5B0\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128434\", \"Unicode hex\": \"1F5B2\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128435\", \"Unicode hex\": \"1F5B3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128436\", \"Unicode hex\": \"1F5B4\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128427\", \"Unicode hex\": \"1F5AB\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128428\", \"Unicode hex\": \"1F5AC\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"9991\", \"Unicode hex\": \"2707\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"9997\", \"Unicode hex\": \"270D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128398\", \"Unicode hex\": \"1F58E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"9996\", \"Unicode hex\": \"270C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128399\", \"Unicode hex\": \"1F58F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128077\", \"Unicode hex\": \"1F44D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128078\", \"Unicode hex\": \"1F44E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"9756\", \"Unicode hex\": \"261C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"9758\", \"Unicode hex\": \"261E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"9757\", \"Unicode hex\": \"261D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"9759\", \"Unicode hex\": \"261F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128400\", \"Unicode hex\": \"1F590\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"9786\", \"Unicode hex\": \"263A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128528\", \"Unicode hex\": \"1F610\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"9785\", \"Unicode hex\": \"2639\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128163\", \"Unicode hex\": \"1F4A3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128369\", \"Unicode hex\": \"1F571\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"127987\", \"Unicode hex\": \"1F3F3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"127985\", \"Unicode hex\": \"1F3F1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"9992\", \"Unicode hex\": \"2708\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9788\", \"Unicode hex\": \"263C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"127778\", \"Unicode hex\": \"1F322\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"10052\", \"Unicode hex\": \"2744\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"128326\", \"Unicode hex\": \"1F546\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"10014\", \"Unicode hex\": \"271E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128328\", \"Unicode hex\": \"1F548\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10016\", \"Unicode hex\": \"2720\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"10017\", \"Unicode hex\": \"2721\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"9770\", \"Unicode hex\": \"262A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"9775\", \"Unicode hex\": \"262F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128329\", \"Unicode hex\": \"1F549\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"9784\", \"Unicode hex\": \"2638\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"9800\", \"Unicode hex\": \"2648\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"9801\", \"Unicode hex\": \"2649\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"9802\", \"Unicode hex\": \"264A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"9803\", \"Unicode hex\": \"264B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"9804\", \"Unicode hex\": \"264C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"9805\", \"Unicode hex\": \"264D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"9806\", \"Unicode hex\": \"264E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"9807\", \"Unicode hex\": \"264F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"9808\", \"Unicode hex\": \"2650\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"9809\", \"Unicode hex\": \"2651\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"9810\", \"Unicode hex\": \"2652\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9811\", \"Unicode hex\": \"2653\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"128624\", \"Unicode hex\": \"1F670\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"128629\", \"Unicode hex\": \"1F675\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9899\", \"Unicode hex\": \"26AB\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"128318\", \"Unicode hex\": \"1F53E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9724\", \"Unicode hex\": \"25FC\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"128911\", \"Unicode hex\": \"1F78F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"128912\", \"Unicode hex\": \"1F790\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"10065\", \"Unicode hex\": \"2751\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"10066\", \"Unicode hex\": \"2752\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"128927\", \"Unicode hex\": \"1F79F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"10731\", \"Unicode hex\": \"29EB\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9670\", \"Unicode hex\": \"25C6\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10070\", \"Unicode hex\": \"2756\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"8999\", \"Unicode hex\": \"2327\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"11193\", \"Unicode hex\": \"2BB9\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"8984\", \"Unicode hex\": \"2318\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"127989\", \"Unicode hex\": \"1F3F5\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"127990\", \"Unicode hex\": \"1F3F6\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128630\", \"Unicode hex\": \"1F676\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128631\", \"Unicode hex\": \"1F677\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"127\", \"Dingbat hex\": \"7F\", \"Unicode dec\": \"9647\", \"Unicode hex\": \"25AF\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"127243\", \"Unicode hex\": \"1F10B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"10112\", \"Unicode hex\": \"2780\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"10113\", \"Unicode hex\": \"2781\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"10114\", \"Unicode hex\": \"2782\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"10115\", \"Unicode hex\": \"2783\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10116\", \"Unicode hex\": \"2784\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"10117\", \"Unicode hex\": \"2785\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"10118\", \"Unicode hex\": \"2786\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"10119\", \"Unicode hex\": \"2787\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"10120\", \"Unicode hex\": \"2788\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"10121\", \"Unicode hex\": \"2789\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"127244\", \"Unicode hex\": \"1F10C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"10122\", \"Unicode hex\": \"278A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"10123\", \"Unicode hex\": \"278B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"10124\", \"Unicode hex\": \"278C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"10125\", \"Unicode hex\": \"278D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"10126\", \"Unicode hex\": \"278E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"10127\", \"Unicode hex\": \"278F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"10128\", \"Unicode hex\": \"2790\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"10129\", \"Unicode hex\": \"2791\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"10130\", \"Unicode hex\": \"2792\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"10131\", \"Unicode hex\": \"2793\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128610\", \"Unicode hex\": \"1F662\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"128608\", \"Unicode hex\": \"1F660\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"128609\", \"Unicode hex\": \"1F661\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"128611\", \"Unicode hex\": \"1F663\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128606\", \"Unicode hex\": \"1F65E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128604\", \"Unicode hex\": \"1F65C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128605\", \"Unicode hex\": \"1F65D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"128607\", \"Unicode hex\": \"1F65F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"8729\", \"Unicode hex\": \"2219\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"8226\", \"Unicode hex\": \"2022\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"11037\", \"Unicode hex\": \"2B1D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"11096\", \"Unicode hex\": \"2B58\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"128902\", \"Unicode hex\": \"1F786\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"128904\", \"Unicode hex\": \"1F788\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128906\", \"Unicode hex\": \"1F78A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128907\", \"Unicode hex\": \"1F78B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128319\", \"Unicode hex\": \"1F53F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"9642\", \"Unicode hex\": \"25AA\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"128910\", \"Unicode hex\": \"1F78E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128961\", \"Unicode hex\": \"1F7C1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128965\", \"Unicode hex\": \"1F7C5\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"9733\", \"Unicode hex\": \"2605\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128971\", \"Unicode hex\": \"1F7CB\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"128975\", \"Unicode hex\": \"1F7CF\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"128979\", \"Unicode hex\": \"1F7D3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"128977\", \"Unicode hex\": \"1F7D1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"11216\", \"Unicode hex\": \"2BD0\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"8982\", \"Unicode hex\": \"2316\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"11214\", \"Unicode hex\": \"2BCE\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"11215\", \"Unicode hex\": \"2BCF\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"11217\", \"Unicode hex\": \"2BD1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"10026\", \"Unicode hex\": \"272A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"10032\", \"Unicode hex\": \"2730\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"128336\", \"Unicode hex\": \"1F550\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"128337\", \"Unicode hex\": \"1F551\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128338\", \"Unicode hex\": \"1F552\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"128339\", \"Unicode hex\": \"1F553\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"128340\", \"Unicode hex\": \"1F554\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"128341\", \"Unicode hex\": \"1F555\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"128342\", \"Unicode hex\": \"1F556\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"128343\", \"Unicode hex\": \"1F557\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"128344\", \"Unicode hex\": \"1F558\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"128345\", \"Unicode hex\": \"1F559\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"128346\", \"Unicode hex\": \"1F55A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"128347\", \"Unicode hex\": \"1F55B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11184\", \"Unicode hex\": \"2BB0\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11185\", \"Unicode hex\": \"2BB1\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11186\", \"Unicode hex\": \"2BB2\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"11187\", \"Unicode hex\": \"2BB3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"11188\", \"Unicode hex\": \"2BB4\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"11189\", \"Unicode hex\": \"2BB5\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11190\", \"Unicode hex\": \"2BB6\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11191\", \"Unicode hex\": \"2BB7\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128618\", \"Unicode hex\": \"1F66A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128619\", \"Unicode hex\": \"1F66B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128597\", \"Unicode hex\": \"1F655\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128596\", \"Unicode hex\": \"1F654\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128599\", \"Unicode hex\": \"1F657\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128598\", \"Unicode hex\": \"1F656\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128592\", \"Unicode hex\": \"1F650\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128593\", \"Unicode hex\": \"1F651\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128594\", \"Unicode hex\": \"1F652\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128595\", \"Unicode hex\": \"1F653\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"9003\", \"Unicode hex\": \"232B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"8998\", \"Unicode hex\": \"2326\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"11160\", \"Unicode hex\": \"2B98\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"11162\", \"Unicode hex\": \"2B9A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"11161\", \"Unicode hex\": \"2B99\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"11163\", \"Unicode hex\": \"2B9B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"11144\", \"Unicode hex\": \"2B88\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"11146\", \"Unicode hex\": \"2B8A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"11145\", \"Unicode hex\": \"2B89\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"11147\", \"Unicode hex\": \"2B8B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129128\", \"Unicode hex\": \"1F868\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129130\", \"Unicode hex\": \"1F86A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129129\", \"Unicode hex\": \"1F869\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129131\", \"Unicode hex\": \"1F86B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129132\", \"Unicode hex\": \"1F86C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129133\", \"Unicode hex\": \"1F86D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129135\", \"Unicode hex\": \"1F86F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129134\", \"Unicode hex\": \"1F86E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129144\", \"Unicode hex\": \"1F878\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129146\", \"Unicode hex\": \"1F87A\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129145\", \"Unicode hex\": \"1F879\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129147\", \"Unicode hex\": \"1F87B\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129148\", \"Unicode hex\": \"1F87C\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129149\", \"Unicode hex\": \"1F87D\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129151\", \"Unicode hex\": \"1F87F\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129150\", \"Unicode hex\": \"1F87E\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"8678\", \"Unicode hex\": \"21E6\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"8680\", \"Unicode hex\": \"21E8\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"8679\", \"Unicode hex\": \"21E7\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"8681\", \"Unicode hex\": \"21E9\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"11012\", \"Unicode hex\": \"2B04\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"8691\", \"Unicode hex\": \"21F3\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"11009\", \"Unicode hex\": \"2B01\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11008\", \"Unicode hex\": \"2B00\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11011\", \"Unicode hex\": \"2B03\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"11010\", \"Unicode hex\": \"2B02\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"129196\", \"Unicode hex\": \"1F8AC\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"250\", \"Dingbat hex\": \"FA\", \"Unicode dec\": \"129197\", \"Unicode hex\": \"1F8AD\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"251\", \"Dingbat hex\": \"FB\", \"Unicode dec\": \"128502\", \"Unicode hex\": \"1F5F6\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"252\", \"Dingbat hex\": \"FC\", \"Unicode dec\": \"10003\", \"Unicode hex\": \"2713\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"253\", \"Dingbat hex\": \"FD\", \"Unicode dec\": \"128503\", \"Unicode hex\": \"1F5F7\" },\n    { \"Typeface name\": \"Wingdings\", \"Dingbat dec\": \"254\", \"Dingbat hex\": \"FE\", \"Unicode dec\": \"128505\", \"Unicode hex\": \"1F5F9\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"128394\", \"Unicode hex\": \"1F58A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"128395\", \"Unicode hex\": \"1F58B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"128396\", \"Unicode hex\": \"1F58C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"128397\", \"Unicode hex\": \"1F58D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"9988\", \"Unicode hex\": \"2704\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"9984\", \"Unicode hex\": \"2700\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"128382\", \"Unicode hex\": \"1F57E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"128381\", \"Unicode hex\": \"1F57D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"128453\", \"Unicode hex\": \"1F5C5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"128454\", \"Unicode hex\": \"1F5C6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"128455\", \"Unicode hex\": \"1F5C7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"128456\", \"Unicode hex\": \"1F5C8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"128457\", \"Unicode hex\": \"1F5C9\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"128458\", \"Unicode hex\": \"1F5CA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"128459\", \"Unicode hex\": \"1F5CB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"128460\", \"Unicode hex\": \"1F5CC\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"128461\", \"Unicode hex\": \"1F5CD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"128203\", \"Unicode hex\": \"1F4CB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"128465\", \"Unicode hex\": \"1F5D1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"128468\", \"Unicode hex\": \"1F5D4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"128437\", \"Unicode hex\": \"1F5B5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"128438\", \"Unicode hex\": \"1F5B6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"128439\", \"Unicode hex\": \"1F5B7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"128440\", \"Unicode hex\": \"1F5B8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"128429\", \"Unicode hex\": \"1F5AD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"128431\", \"Unicode hex\": \"1F5AF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"128433\", \"Unicode hex\": \"1F5B1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"128402\", \"Unicode hex\": \"1F592\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"128403\", \"Unicode hex\": \"1F593\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"128408\", \"Unicode hex\": \"1F598\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"128409\", \"Unicode hex\": \"1F599\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"128410\", \"Unicode hex\": \"1F59A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"128411\", \"Unicode hex\": \"1F59B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"128072\", \"Unicode hex\": \"1F448\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"128073\", \"Unicode hex\": \"1F449\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"128412\", \"Unicode hex\": \"1F59C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"128413\", \"Unicode hex\": \"1F59D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"128414\", \"Unicode hex\": \"1F59E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"128415\", \"Unicode hex\": \"1F59F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"128416\", \"Unicode hex\": \"1F5A0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"128417\", \"Unicode hex\": \"1F5A1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"128070\", \"Unicode hex\": \"1F446\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"128071\", \"Unicode hex\": \"1F447\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"128418\", \"Unicode hex\": \"1F5A2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"128419\", \"Unicode hex\": \"1F5A3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"128401\", \"Unicode hex\": \"1F591\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"128500\", \"Unicode hex\": \"1F5F4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"128504\", \"Unicode hex\": \"1F5F8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"128501\", \"Unicode hex\": \"1F5F5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9745\", \"Unicode hex\": \"2611\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"11197\", \"Unicode hex\": \"2BBD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"9746\", \"Unicode hex\": \"2612\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"11198\", \"Unicode hex\": \"2BBE\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"11199\", \"Unicode hex\": \"2BBF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"128711\", \"Unicode hex\": \"1F6C7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"10680\", \"Unicode hex\": \"29B8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"128625\", \"Unicode hex\": \"1F671\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"128628\", \"Unicode hex\": \"1F674\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"128626\", \"Unicode hex\": \"1F672\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"128627\", \"Unicode hex\": \"1F673\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"8253\", \"Unicode hex\": \"203D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"128633\", \"Unicode hex\": \"1F679\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"128634\", \"Unicode hex\": \"1F67A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"128635\", \"Unicode hex\": \"1F67B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"128614\", \"Unicode hex\": \"1F666\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"128612\", \"Unicode hex\": \"1F664\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"128613\", \"Unicode hex\": \"1F665\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"128615\", \"Unicode hex\": \"1F667\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"128602\", \"Unicode hex\": \"1F65A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"128600\", \"Unicode hex\": \"1F658\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"128601\", \"Unicode hex\": \"1F659\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"128603\", \"Unicode hex\": \"1F65B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"9450\", \"Unicode hex\": \"24EA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"9312\", \"Unicode hex\": \"2460\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"9313\", \"Unicode hex\": \"2461\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"9314\", \"Unicode hex\": \"2462\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"9315\", \"Unicode hex\": \"2463\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"9316\", \"Unicode hex\": \"2464\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"9317\", \"Unicode hex\": \"2465\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9318\", \"Unicode hex\": \"2466\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9319\", \"Unicode hex\": \"2467\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9320\", \"Unicode hex\": \"2468\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9321\", \"Unicode hex\": \"2469\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9471\", \"Unicode hex\": \"24FF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"10102\", \"Unicode hex\": \"2776\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"10103\", \"Unicode hex\": \"2777\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"10104\", \"Unicode hex\": \"2778\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"10105\", \"Unicode hex\": \"2779\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"10106\", \"Unicode hex\": \"277A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"10107\", \"Unicode hex\": \"277B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"10108\", \"Unicode hex\": \"277C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"10109\", \"Unicode hex\": \"277D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"10110\", \"Unicode hex\": \"277E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"10111\", \"Unicode hex\": \"277F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"9737\", \"Unicode hex\": \"2609\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"127765\", \"Unicode hex\": \"1F315\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"9789\", \"Unicode hex\": \"263D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"9790\", \"Unicode hex\": \"263E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11839\", \"Unicode hex\": \"2E3F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"10013\", \"Unicode hex\": \"271D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"128327\", \"Unicode hex\": \"1F547\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"128348\", \"Unicode hex\": \"1F55C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"128349\", \"Unicode hex\": \"1F55D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"128350\", \"Unicode hex\": \"1F55E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"128351\", \"Unicode hex\": \"1F55F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"128352\", \"Unicode hex\": \"1F560\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"128353\", \"Unicode hex\": \"1F561\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"128354\", \"Unicode hex\": \"1F562\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"128355\", \"Unicode hex\": \"1F563\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"128356\", \"Unicode hex\": \"1F564\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"128357\", \"Unicode hex\": \"1F565\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"128358\", \"Unicode hex\": \"1F566\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"128359\", \"Unicode hex\": \"1F567\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"128616\", \"Unicode hex\": \"1F668\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"128617\", \"Unicode hex\": \"1F669\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"8901\", \"Unicode hex\": \"22C5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"128900\", \"Unicode hex\": \"1F784\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"10625\", \"Unicode hex\": \"2981\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"9679\", \"Unicode hex\": \"25CF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"9675\", \"Unicode hex\": \"25CB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"128901\", \"Unicode hex\": \"1F785\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"128903\", \"Unicode hex\": \"1F787\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"128905\", \"Unicode hex\": \"1F789\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"8857\", \"Unicode hex\": \"2299\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"10687\", \"Unicode hex\": \"29BF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"128908\", \"Unicode hex\": \"1F78C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"128909\", \"Unicode hex\": \"1F78D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"9726\", \"Unicode hex\": \"25FE\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"9632\", \"Unicode hex\": \"25A0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"9633\", \"Unicode hex\": \"25A1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"128913\", \"Unicode hex\": \"1F791\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"128914\", \"Unicode hex\": \"1F792\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"128915\", \"Unicode hex\": \"1F793\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"128916\", \"Unicode hex\": \"1F794\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"9635\", \"Unicode hex\": \"25A3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"128917\", \"Unicode hex\": \"1F795\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"128918\", \"Unicode hex\": \"1F796\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"128919\", \"Unicode hex\": \"1F797\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"128920\", \"Unicode hex\": \"1F798\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"11049\", \"Unicode hex\": \"2B29\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"11045\", \"Unicode hex\": \"2B25\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"9671\", \"Unicode hex\": \"25C7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"128922\", \"Unicode hex\": \"1F79A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"9672\", \"Unicode hex\": \"25C8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"128923\", \"Unicode hex\": \"1F79B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"128924\", \"Unicode hex\": \"1F79C\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"128925\", \"Unicode hex\": \"1F79D\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"128926\", \"Unicode hex\": \"1F79E\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"11050\", \"Unicode hex\": \"2B2A\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"11047\", \"Unicode hex\": \"2B27\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"9674\", \"Unicode hex\": \"25CA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"128928\", \"Unicode hex\": \"1F7A0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"9686\", \"Unicode hex\": \"25D6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"9687\", \"Unicode hex\": \"25D7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"11210\", \"Unicode hex\": \"2BCA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"11211\", \"Unicode hex\": \"2BCB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"11200\", \"Unicode hex\": \"2BC0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"11201\", \"Unicode hex\": \"2BC1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"11039\", \"Unicode hex\": \"2B1F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"11202\", \"Unicode hex\": \"2BC2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"11043\", \"Unicode hex\": \"2B23\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"11042\", \"Unicode hex\": \"2B22\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"11203\", \"Unicode hex\": \"2BC3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"11204\", \"Unicode hex\": \"2BC4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"128929\", \"Unicode hex\": \"1F7A1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"128930\", \"Unicode hex\": \"1F7A2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"128931\", \"Unicode hex\": \"1F7A3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"128932\", \"Unicode hex\": \"1F7A4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"128933\", \"Unicode hex\": \"1F7A5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"128934\", \"Unicode hex\": \"1F7A6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"128935\", \"Unicode hex\": \"1F7A7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"128936\", \"Unicode hex\": \"1F7A8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"128937\", \"Unicode hex\": \"1F7A9\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"128938\", \"Unicode hex\": \"1F7AA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"128939\", \"Unicode hex\": \"1F7AB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"128940\", \"Unicode hex\": \"1F7AC\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"128941\", \"Unicode hex\": \"1F7AD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"128942\", \"Unicode hex\": \"1F7AE\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"128943\", \"Unicode hex\": \"1F7AF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"128944\", \"Unicode hex\": \"1F7B0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"128945\", \"Unicode hex\": \"1F7B1\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"128946\", \"Unicode hex\": \"1F7B2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"128947\", \"Unicode hex\": \"1F7B3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"128948\", \"Unicode hex\": \"1F7B4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"128949\", \"Unicode hex\": \"1F7B5\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"128950\", \"Unicode hex\": \"1F7B6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"128951\", \"Unicode hex\": \"1F7B7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"128952\", \"Unicode hex\": \"1F7B8\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"128953\", \"Unicode hex\": \"1F7B9\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"128954\", \"Unicode hex\": \"1F7BA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"128955\", \"Unicode hex\": \"1F7BB\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"128956\", \"Unicode hex\": \"1F7BC\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"128957\", \"Unicode hex\": \"1F7BD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"128958\", \"Unicode hex\": \"1F7BE\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"128959\", \"Unicode hex\": \"1F7BF\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"128960\", \"Unicode hex\": \"1F7C0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"128962\", \"Unicode hex\": \"1F7C2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"128964\", \"Unicode hex\": \"1F7C4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"128966\", \"Unicode hex\": \"1F7C6\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"128969\", \"Unicode hex\": \"1F7C9\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"128970\", \"Unicode hex\": \"1F7CA\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"10038\", \"Unicode hex\": \"2736\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"128972\", \"Unicode hex\": \"1F7CC\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"128974\", \"Unicode hex\": \"1F7CE\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"128976\", \"Unicode hex\": \"1F7D0\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"128978\", \"Unicode hex\": \"1F7D2\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"10041\", \"Unicode hex\": \"2739\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"241\", \"Dingbat hex\": \"F1\", \"Unicode dec\": \"128963\", \"Unicode hex\": \"1F7C3\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"242\", \"Dingbat hex\": \"F2\", \"Unicode dec\": \"128967\", \"Unicode hex\": \"1F7C7\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"243\", \"Dingbat hex\": \"F3\", \"Unicode dec\": \"10031\", \"Unicode hex\": \"272F\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"244\", \"Dingbat hex\": \"F4\", \"Unicode dec\": \"128973\", \"Unicode hex\": \"1F7CD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"245\", \"Dingbat hex\": \"F5\", \"Unicode dec\": \"128980\", \"Unicode hex\": \"1F7D4\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"246\", \"Dingbat hex\": \"F6\", \"Unicode dec\": \"11212\", \"Unicode hex\": \"2BCC\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"247\", \"Dingbat hex\": \"F7\", \"Unicode dec\": \"11213\", \"Unicode hex\": \"2BCD\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"248\", \"Dingbat hex\": \"F8\", \"Unicode dec\": \"8251\", \"Unicode hex\": \"203B\" },\n    { \"Typeface name\": \"Wingdings 2\", \"Dingbat dec\": \"249\", \"Dingbat hex\": \"F9\", \"Unicode dec\": \"8258\", \"Unicode hex\": \"2042\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"32\", \"Dingbat hex\": \"20\", \"Unicode dec\": \"32\", \"Unicode hex\": \"20\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"33\", \"Dingbat hex\": \"21\", \"Unicode dec\": \"11104\", \"Unicode hex\": \"2B60\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"34\", \"Dingbat hex\": \"22\", \"Unicode dec\": \"11106\", \"Unicode hex\": \"2B62\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"35\", \"Dingbat hex\": \"23\", \"Unicode dec\": \"11105\", \"Unicode hex\": \"2B61\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"36\", \"Dingbat hex\": \"24\", \"Unicode dec\": \"11107\", \"Unicode hex\": \"2B63\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"37\", \"Dingbat hex\": \"25\", \"Unicode dec\": \"11110\", \"Unicode hex\": \"2B66\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"38\", \"Dingbat hex\": \"26\", \"Unicode dec\": \"11111\", \"Unicode hex\": \"2B67\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"39\", \"Dingbat hex\": \"27\", \"Unicode dec\": \"11113\", \"Unicode hex\": \"2B69\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"40\", \"Dingbat hex\": \"28\", \"Unicode dec\": \"11112\", \"Unicode hex\": \"2B68\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"41\", \"Dingbat hex\": \"29\", \"Unicode dec\": \"11120\", \"Unicode hex\": \"2B70\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"42\", \"Dingbat hex\": \"2A\", \"Unicode dec\": \"11122\", \"Unicode hex\": \"2B72\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"43\", \"Dingbat hex\": \"2B\", \"Unicode dec\": \"11121\", \"Unicode hex\": \"2B71\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"44\", \"Dingbat hex\": \"2C\", \"Unicode dec\": \"11123\", \"Unicode hex\": \"2B73\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"45\", \"Dingbat hex\": \"2D\", \"Unicode dec\": \"11126\", \"Unicode hex\": \"2B76\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"46\", \"Dingbat hex\": \"2E\", \"Unicode dec\": \"11128\", \"Unicode hex\": \"2B78\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"47\", \"Dingbat hex\": \"2F\", \"Unicode dec\": \"11131\", \"Unicode hex\": \"2B7B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"48\", \"Dingbat hex\": \"30\", \"Unicode dec\": \"11133\", \"Unicode hex\": \"2B7D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"49\", \"Dingbat hex\": \"31\", \"Unicode dec\": \"11108\", \"Unicode hex\": \"2B64\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"50\", \"Dingbat hex\": \"32\", \"Unicode dec\": \"11109\", \"Unicode hex\": \"2B65\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"51\", \"Dingbat hex\": \"33\", \"Unicode dec\": \"11114\", \"Unicode hex\": \"2B6A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"52\", \"Dingbat hex\": \"34\", \"Unicode dec\": \"11116\", \"Unicode hex\": \"2B6C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"53\", \"Dingbat hex\": \"35\", \"Unicode dec\": \"11115\", \"Unicode hex\": \"2B6B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"54\", \"Dingbat hex\": \"36\", \"Unicode dec\": \"11117\", \"Unicode hex\": \"2B6D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"55\", \"Dingbat hex\": \"37\", \"Unicode dec\": \"11085\", \"Unicode hex\": \"2B4D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"56\", \"Dingbat hex\": \"38\", \"Unicode dec\": \"11168\", \"Unicode hex\": \"2BA0\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"57\", \"Dingbat hex\": \"39\", \"Unicode dec\": \"11169\", \"Unicode hex\": \"2BA1\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"58\", \"Dingbat hex\": \"3A\", \"Unicode dec\": \"11170\", \"Unicode hex\": \"2BA2\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"59\", \"Dingbat hex\": \"3B\", \"Unicode dec\": \"11171\", \"Unicode hex\": \"2BA3\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"60\", \"Dingbat hex\": \"3C\", \"Unicode dec\": \"11172\", \"Unicode hex\": \"2BA4\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"61\", \"Dingbat hex\": \"3D\", \"Unicode dec\": \"11173\", \"Unicode hex\": \"2BA5\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"62\", \"Dingbat hex\": \"3E\", \"Unicode dec\": \"11174\", \"Unicode hex\": \"2BA6\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"63\", \"Dingbat hex\": \"3F\", \"Unicode dec\": \"11175\", \"Unicode hex\": \"2BA7\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"64\", \"Dingbat hex\": \"40\", \"Unicode dec\": \"11152\", \"Unicode hex\": \"2B90\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"65\", \"Dingbat hex\": \"41\", \"Unicode dec\": \"11153\", \"Unicode hex\": \"2B91\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"66\", \"Dingbat hex\": \"42\", \"Unicode dec\": \"11154\", \"Unicode hex\": \"2B92\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"67\", \"Dingbat hex\": \"43\", \"Unicode dec\": \"11155\", \"Unicode hex\": \"2B93\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"68\", \"Dingbat hex\": \"44\", \"Unicode dec\": \"11136\", \"Unicode hex\": \"2B80\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"69\", \"Dingbat hex\": \"45\", \"Unicode dec\": \"11139\", \"Unicode hex\": \"2B83\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"70\", \"Dingbat hex\": \"46\", \"Unicode dec\": \"11134\", \"Unicode hex\": \"2B7E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"71\", \"Dingbat hex\": \"47\", \"Unicode dec\": \"11135\", \"Unicode hex\": \"2B7F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"72\", \"Dingbat hex\": \"48\", \"Unicode dec\": \"11140\", \"Unicode hex\": \"2B84\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"73\", \"Dingbat hex\": \"49\", \"Unicode dec\": \"11142\", \"Unicode hex\": \"2B86\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"74\", \"Dingbat hex\": \"4A\", \"Unicode dec\": \"11141\", \"Unicode hex\": \"2B85\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"75\", \"Dingbat hex\": \"4B\", \"Unicode dec\": \"11143\", \"Unicode hex\": \"2B87\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"76\", \"Dingbat hex\": \"4C\", \"Unicode dec\": \"11151\", \"Unicode hex\": \"2B8F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"77\", \"Dingbat hex\": \"4D\", \"Unicode dec\": \"11149\", \"Unicode hex\": \"2B8D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"78\", \"Dingbat hex\": \"4E\", \"Unicode dec\": \"11150\", \"Unicode hex\": \"2B8E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"79\", \"Dingbat hex\": \"4F\", \"Unicode dec\": \"11148\", \"Unicode hex\": \"2B8C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"80\", \"Dingbat hex\": \"50\", \"Unicode dec\": \"11118\", \"Unicode hex\": \"2B6E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"81\", \"Dingbat hex\": \"51\", \"Unicode dec\": \"11119\", \"Unicode hex\": \"2B6F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"82\", \"Dingbat hex\": \"52\", \"Unicode dec\": \"9099\", \"Unicode hex\": \"238B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"83\", \"Dingbat hex\": \"53\", \"Unicode dec\": \"8996\", \"Unicode hex\": \"2324\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"84\", \"Dingbat hex\": \"54\", \"Unicode dec\": \"8963\", \"Unicode hex\": \"2303\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"85\", \"Dingbat hex\": \"55\", \"Unicode dec\": \"8997\", \"Unicode hex\": \"2325\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"86\", \"Dingbat hex\": \"56\", \"Unicode dec\": \"9251\", \"Unicode hex\": \"2423\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"87\", \"Dingbat hex\": \"57\", \"Unicode dec\": \"9085\", \"Unicode hex\": \"237D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"88\", \"Dingbat hex\": \"58\", \"Unicode dec\": \"8682\", \"Unicode hex\": \"21EA\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"89\", \"Dingbat hex\": \"59\", \"Unicode dec\": \"11192\", \"Unicode hex\": \"2BB8\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"90\", \"Dingbat hex\": \"5A\", \"Unicode dec\": \"129184\", \"Unicode hex\": \"1F8A0\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"91\", \"Dingbat hex\": \"5B\", \"Unicode dec\": \"129185\", \"Unicode hex\": \"1F8A1\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"92\", \"Dingbat hex\": \"5C\", \"Unicode dec\": \"129186\", \"Unicode hex\": \"1F8A2\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"93\", \"Dingbat hex\": \"5D\", \"Unicode dec\": \"129187\", \"Unicode hex\": \"1F8A3\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"94\", \"Dingbat hex\": \"5E\", \"Unicode dec\": \"129188\", \"Unicode hex\": \"1F8A4\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"95\", \"Dingbat hex\": \"5F\", \"Unicode dec\": \"129189\", \"Unicode hex\": \"1F8A5\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"96\", \"Dingbat hex\": \"60\", \"Unicode dec\": \"129190\", \"Unicode hex\": \"1F8A6\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"97\", \"Dingbat hex\": \"61\", \"Unicode dec\": \"129191\", \"Unicode hex\": \"1F8A7\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"98\", \"Dingbat hex\": \"62\", \"Unicode dec\": \"129192\", \"Unicode hex\": \"1F8A8\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"99\", \"Dingbat hex\": \"63\", \"Unicode dec\": \"129193\", \"Unicode hex\": \"1F8A9\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"100\", \"Dingbat hex\": \"64\", \"Unicode dec\": \"129194\", \"Unicode hex\": \"1F8AA\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"101\", \"Dingbat hex\": \"65\", \"Unicode dec\": \"129195\", \"Unicode hex\": \"1F8AB\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"102\", \"Dingbat hex\": \"66\", \"Unicode dec\": \"129104\", \"Unicode hex\": \"1F850\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"103\", \"Dingbat hex\": \"67\", \"Unicode dec\": \"129106\", \"Unicode hex\": \"1F852\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"104\", \"Dingbat hex\": \"68\", \"Unicode dec\": \"129105\", \"Unicode hex\": \"1F851\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"105\", \"Dingbat hex\": \"69\", \"Unicode dec\": \"129107\", \"Unicode hex\": \"1F853\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"106\", \"Dingbat hex\": \"6A\", \"Unicode dec\": \"129108\", \"Unicode hex\": \"1F854\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"107\", \"Dingbat hex\": \"6B\", \"Unicode dec\": \"129109\", \"Unicode hex\": \"1F855\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"108\", \"Dingbat hex\": \"6C\", \"Unicode dec\": \"129111\", \"Unicode hex\": \"1F857\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"109\", \"Dingbat hex\": \"6D\", \"Unicode dec\": \"129110\", \"Unicode hex\": \"1F856\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"110\", \"Dingbat hex\": \"6E\", \"Unicode dec\": \"129112\", \"Unicode hex\": \"1F858\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"111\", \"Dingbat hex\": \"6F\", \"Unicode dec\": \"129113\", \"Unicode hex\": \"1F859\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"112\", \"Dingbat hex\": \"70\", \"Unicode dec\": \"9650\", \"Unicode hex\": \"25B2\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"113\", \"Dingbat hex\": \"71\", \"Unicode dec\": \"9660\", \"Unicode hex\": \"25BC\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"114\", \"Dingbat hex\": \"72\", \"Unicode dec\": \"9651\", \"Unicode hex\": \"25B3\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"115\", \"Dingbat hex\": \"73\", \"Unicode dec\": \"9661\", \"Unicode hex\": \"25BD\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"116\", \"Dingbat hex\": \"74\", \"Unicode dec\": \"9664\", \"Unicode hex\": \"25C0\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"117\", \"Dingbat hex\": \"75\", \"Unicode dec\": \"9654\", \"Unicode hex\": \"25B6\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"118\", \"Dingbat hex\": \"76\", \"Unicode dec\": \"9665\", \"Unicode hex\": \"25C1\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"119\", \"Dingbat hex\": \"77\", \"Unicode dec\": \"9655\", \"Unicode hex\": \"25B7\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"120\", \"Dingbat hex\": \"78\", \"Unicode dec\": \"9699\", \"Unicode hex\": \"25E3\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"121\", \"Dingbat hex\": \"79\", \"Unicode dec\": \"9698\", \"Unicode hex\": \"25E2\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"122\", \"Dingbat hex\": \"7A\", \"Unicode dec\": \"9700\", \"Unicode hex\": \"25E4\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"123\", \"Dingbat hex\": \"7B\", \"Unicode dec\": \"9701\", \"Unicode hex\": \"25E5\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"124\", \"Dingbat hex\": \"7C\", \"Unicode dec\": \"128896\", \"Unicode hex\": \"1F780\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"125\", \"Dingbat hex\": \"7D\", \"Unicode dec\": \"128898\", \"Unicode hex\": \"1F782\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"126\", \"Dingbat hex\": \"7E\", \"Unicode dec\": \"128897\", \"Unicode hex\": \"1F781\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"128\", \"Dingbat hex\": \"80\", \"Unicode dec\": \"128899\", \"Unicode hex\": \"1F783\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"129\", \"Dingbat hex\": \"81\", \"Unicode dec\": \"11205\", \"Unicode hex\": \"2BC5\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"130\", \"Dingbat hex\": \"82\", \"Unicode dec\": \"11206\", \"Unicode hex\": \"2BC6\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"131\", \"Dingbat hex\": \"83\", \"Unicode dec\": \"11207\", \"Unicode hex\": \"2BC7\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"132\", \"Dingbat hex\": \"84\", \"Unicode dec\": \"11208\", \"Unicode hex\": \"2BC8\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"133\", \"Dingbat hex\": \"85\", \"Unicode dec\": \"11164\", \"Unicode hex\": \"2B9C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"134\", \"Dingbat hex\": \"86\", \"Unicode dec\": \"11166\", \"Unicode hex\": \"2B9E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"135\", \"Dingbat hex\": \"87\", \"Unicode dec\": \"11165\", \"Unicode hex\": \"2B9D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"136\", \"Dingbat hex\": \"88\", \"Unicode dec\": \"11167\", \"Unicode hex\": \"2B9F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"137\", \"Dingbat hex\": \"89\", \"Unicode dec\": \"129040\", \"Unicode hex\": \"1F810\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"138\", \"Dingbat hex\": \"8A\", \"Unicode dec\": \"129042\", \"Unicode hex\": \"1F812\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"139\", \"Dingbat hex\": \"8B\", \"Unicode dec\": \"129041\", \"Unicode hex\": \"1F811\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"140\", \"Dingbat hex\": \"8C\", \"Unicode dec\": \"129043\", \"Unicode hex\": \"1F813\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"141\", \"Dingbat hex\": \"8D\", \"Unicode dec\": \"129044\", \"Unicode hex\": \"1F814\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"142\", \"Dingbat hex\": \"8E\", \"Unicode dec\": \"129046\", \"Unicode hex\": \"1F816\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"143\", \"Dingbat hex\": \"8F\", \"Unicode dec\": \"129045\", \"Unicode hex\": \"1F815\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"144\", \"Dingbat hex\": \"90\", \"Unicode dec\": \"129047\", \"Unicode hex\": \"1F817\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"145\", \"Dingbat hex\": \"91\", \"Unicode dec\": \"129048\", \"Unicode hex\": \"1F818\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"146\", \"Dingbat hex\": \"92\", \"Unicode dec\": \"129050\", \"Unicode hex\": \"1F81A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"147\", \"Dingbat hex\": \"93\", \"Unicode dec\": \"129049\", \"Unicode hex\": \"1F819\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"148\", \"Dingbat hex\": \"94\", \"Unicode dec\": \"129051\", \"Unicode hex\": \"1F81B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"149\", \"Dingbat hex\": \"95\", \"Unicode dec\": \"129052\", \"Unicode hex\": \"1F81C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"150\", \"Dingbat hex\": \"96\", \"Unicode dec\": \"129054\", \"Unicode hex\": \"1F81E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"151\", \"Dingbat hex\": \"97\", \"Unicode dec\": \"129053\", \"Unicode hex\": \"1F81D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"152\", \"Dingbat hex\": \"98\", \"Unicode dec\": \"129055\", \"Unicode hex\": \"1F81F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"153\", \"Dingbat hex\": \"99\", \"Unicode dec\": \"129024\", \"Unicode hex\": \"1F800\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"154\", \"Dingbat hex\": \"9A\", \"Unicode dec\": \"129026\", \"Unicode hex\": \"1F802\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"155\", \"Dingbat hex\": \"9B\", \"Unicode dec\": \"129025\", \"Unicode hex\": \"1F801\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"156\", \"Dingbat hex\": \"9C\", \"Unicode dec\": \"129027\", \"Unicode hex\": \"1F803\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"157\", \"Dingbat hex\": \"9D\", \"Unicode dec\": \"129028\", \"Unicode hex\": \"1F804\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"158\", \"Dingbat hex\": \"9E\", \"Unicode dec\": \"129030\", \"Unicode hex\": \"1F806\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"159\", \"Dingbat hex\": \"9F\", \"Unicode dec\": \"129029\", \"Unicode hex\": \"1F805\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"160\", \"Dingbat hex\": \"A0\", \"Unicode dec\": \"129031\", \"Unicode hex\": \"1F807\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"161\", \"Dingbat hex\": \"A1\", \"Unicode dec\": \"129032\", \"Unicode hex\": \"1F808\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"162\", \"Dingbat hex\": \"A2\", \"Unicode dec\": \"129034\", \"Unicode hex\": \"1F80A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"163\", \"Dingbat hex\": \"A3\", \"Unicode dec\": \"129033\", \"Unicode hex\": \"1F809\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"164\", \"Dingbat hex\": \"A4\", \"Unicode dec\": \"129035\", \"Unicode hex\": \"1F80B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"165\", \"Dingbat hex\": \"A5\", \"Unicode dec\": \"129056\", \"Unicode hex\": \"1F820\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"166\", \"Dingbat hex\": \"A6\", \"Unicode dec\": \"129058\", \"Unicode hex\": \"1F822\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"167\", \"Dingbat hex\": \"A7\", \"Unicode dec\": \"129060\", \"Unicode hex\": \"1F824\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"168\", \"Dingbat hex\": \"A8\", \"Unicode dec\": \"129062\", \"Unicode hex\": \"1F826\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"169\", \"Dingbat hex\": \"A9\", \"Unicode dec\": \"129064\", \"Unicode hex\": \"1F828\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"170\", \"Dingbat hex\": \"AA\", \"Unicode dec\": \"129066\", \"Unicode hex\": \"1F82A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"171\", \"Dingbat hex\": \"AB\", \"Unicode dec\": \"129068\", \"Unicode hex\": \"1F82C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"172\", \"Dingbat hex\": \"AC\", \"Unicode dec\": \"129180\", \"Unicode hex\": \"1F89C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"173\", \"Dingbat hex\": \"AD\", \"Unicode dec\": \"129181\", \"Unicode hex\": \"1F89D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"174\", \"Dingbat hex\": \"AE\", \"Unicode dec\": \"129182\", \"Unicode hex\": \"1F89E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"175\", \"Dingbat hex\": \"AF\", \"Unicode dec\": \"129183\", \"Unicode hex\": \"1F89F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"176\", \"Dingbat hex\": \"B0\", \"Unicode dec\": \"129070\", \"Unicode hex\": \"1F82E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"177\", \"Dingbat hex\": \"B1\", \"Unicode dec\": \"129072\", \"Unicode hex\": \"1F830\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"178\", \"Dingbat hex\": \"B2\", \"Unicode dec\": \"129074\", \"Unicode hex\": \"1F832\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"179\", \"Dingbat hex\": \"B3\", \"Unicode dec\": \"129076\", \"Unicode hex\": \"1F834\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"180\", \"Dingbat hex\": \"B4\", \"Unicode dec\": \"129078\", \"Unicode hex\": \"1F836\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"181\", \"Dingbat hex\": \"B5\", \"Unicode dec\": \"129080\", \"Unicode hex\": \"1F838\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"182\", \"Dingbat hex\": \"B6\", \"Unicode dec\": \"129082\", \"Unicode hex\": \"1F83A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"183\", \"Dingbat hex\": \"B7\", \"Unicode dec\": \"129081\", \"Unicode hex\": \"1F839\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"184\", \"Dingbat hex\": \"B8\", \"Unicode dec\": \"129083\", \"Unicode hex\": \"1F83B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"185\", \"Dingbat hex\": \"B9\", \"Unicode dec\": \"129176\", \"Unicode hex\": \"1F898\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"186\", \"Dingbat hex\": \"BA\", \"Unicode dec\": \"129178\", \"Unicode hex\": \"1F89A\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"187\", \"Dingbat hex\": \"BB\", \"Unicode dec\": \"129177\", \"Unicode hex\": \"1F899\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"188\", \"Dingbat hex\": \"BC\", \"Unicode dec\": \"129179\", \"Unicode hex\": \"1F89B\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"189\", \"Dingbat hex\": \"BD\", \"Unicode dec\": \"129084\", \"Unicode hex\": \"1F83C\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"190\", \"Dingbat hex\": \"BE\", \"Unicode dec\": \"129086\", \"Unicode hex\": \"1F83E\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"191\", \"Dingbat hex\": \"BF\", \"Unicode dec\": \"129085\", \"Unicode hex\": \"1F83D\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"192\", \"Dingbat hex\": \"C0\", \"Unicode dec\": \"129087\", \"Unicode hex\": \"1F83F\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"193\", \"Dingbat hex\": \"C1\", \"Unicode dec\": \"129088\", \"Unicode hex\": \"1F840\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"194\", \"Dingbat hex\": \"C2\", \"Unicode dec\": \"129090\", \"Unicode hex\": \"1F842\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"195\", \"Dingbat hex\": \"C3\", \"Unicode dec\": \"129089\", \"Unicode hex\": \"1F841\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"196\", \"Dingbat hex\": \"C4\", \"Unicode dec\": \"129091\", \"Unicode hex\": \"1F843\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"197\", \"Dingbat hex\": \"C5\", \"Unicode dec\": \"129092\", \"Unicode hex\": \"1F844\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"198\", \"Dingbat hex\": \"C6\", \"Unicode dec\": \"129094\", \"Unicode hex\": \"1F846\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"199\", \"Dingbat hex\": \"C7\", \"Unicode dec\": \"129093\", \"Unicode hex\": \"1F845\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"200\", \"Dingbat hex\": \"C8\", \"Unicode dec\": \"129095\", \"Unicode hex\": \"1F847\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"201\", \"Dingbat hex\": \"C9\", \"Unicode dec\": \"11176\", \"Unicode hex\": \"2BA8\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"202\", \"Dingbat hex\": \"CA\", \"Unicode dec\": \"11177\", \"Unicode hex\": \"2BA9\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"203\", \"Dingbat hex\": \"CB\", \"Unicode dec\": \"11178\", \"Unicode hex\": \"2BAA\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"204\", \"Dingbat hex\": \"CC\", \"Unicode dec\": \"11179\", \"Unicode hex\": \"2BAB\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"205\", \"Dingbat hex\": \"CD\", \"Unicode dec\": \"11180\", \"Unicode hex\": \"2BAC\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"206\", \"Dingbat hex\": \"CE\", \"Unicode dec\": \"11181\", \"Unicode hex\": \"2BAD\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"207\", \"Dingbat hex\": \"CF\", \"Unicode dec\": \"11182\", \"Unicode hex\": \"2BAE\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"208\", \"Dingbat hex\": \"D0\", \"Unicode dec\": \"11183\", \"Unicode hex\": \"2BAF\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"209\", \"Dingbat hex\": \"D1\", \"Unicode dec\": \"129120\", \"Unicode hex\": \"1F860\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"210\", \"Dingbat hex\": \"D2\", \"Unicode dec\": \"129122\", \"Unicode hex\": \"1F862\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"211\", \"Dingbat hex\": \"D3\", \"Unicode dec\": \"129121\", \"Unicode hex\": \"1F861\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"212\", \"Dingbat hex\": \"D4\", \"Unicode dec\": \"129123\", \"Unicode hex\": \"1F863\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"213\", \"Dingbat hex\": \"D5\", \"Unicode dec\": \"129124\", \"Unicode hex\": \"1F864\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"214\", \"Dingbat hex\": \"D6\", \"Unicode dec\": \"129125\", \"Unicode hex\": \"1F865\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"215\", \"Dingbat hex\": \"D7\", \"Unicode dec\": \"129127\", \"Unicode hex\": \"1F867\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"216\", \"Dingbat hex\": \"D8\", \"Unicode dec\": \"129126\", \"Unicode hex\": \"1F866\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"217\", \"Dingbat hex\": \"D9\", \"Unicode dec\": \"129136\", \"Unicode hex\": \"1F870\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"218\", \"Dingbat hex\": \"DA\", \"Unicode dec\": \"129138\", \"Unicode hex\": \"1F872\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"219\", \"Dingbat hex\": \"DB\", \"Unicode dec\": \"129137\", \"Unicode hex\": \"1F871\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"220\", \"Dingbat hex\": \"DC\", \"Unicode dec\": \"129139\", \"Unicode hex\": \"1F873\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"221\", \"Dingbat hex\": \"DD\", \"Unicode dec\": \"129140\", \"Unicode hex\": \"1F874\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"222\", \"Dingbat hex\": \"DE\", \"Unicode dec\": \"129141\", \"Unicode hex\": \"1F875\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"223\", \"Dingbat hex\": \"DF\", \"Unicode dec\": \"129143\", \"Unicode hex\": \"1F877\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"224\", \"Dingbat hex\": \"E0\", \"Unicode dec\": \"129142\", \"Unicode hex\": \"1F876\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"225\", \"Dingbat hex\": \"E1\", \"Unicode dec\": \"129152\", \"Unicode hex\": \"1F880\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"226\", \"Dingbat hex\": \"E2\", \"Unicode dec\": \"129154\", \"Unicode hex\": \"1F882\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"227\", \"Dingbat hex\": \"E3\", \"Unicode dec\": \"129153\", \"Unicode hex\": \"1F881\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"228\", \"Dingbat hex\": \"E4\", \"Unicode dec\": \"129155\", \"Unicode hex\": \"1F883\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"229\", \"Dingbat hex\": \"E5\", \"Unicode dec\": \"129156\", \"Unicode hex\": \"1F884\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"230\", \"Dingbat hex\": \"E6\", \"Unicode dec\": \"129157\", \"Unicode hex\": \"1F885\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"231\", \"Dingbat hex\": \"E7\", \"Unicode dec\": \"129159\", \"Unicode hex\": \"1F887\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"232\", \"Dingbat hex\": \"E8\", \"Unicode dec\": \"129158\", \"Unicode hex\": \"1F886\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"233\", \"Dingbat hex\": \"E9\", \"Unicode dec\": \"129168\", \"Unicode hex\": \"1F890\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"234\", \"Dingbat hex\": \"EA\", \"Unicode dec\": \"129170\", \"Unicode hex\": \"1F892\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"235\", \"Dingbat hex\": \"EB\", \"Unicode dec\": \"129169\", \"Unicode hex\": \"1F891\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"236\", \"Dingbat hex\": \"EC\", \"Unicode dec\": \"129171\", \"Unicode hex\": \"1F893\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"237\", \"Dingbat hex\": \"ED\", \"Unicode dec\": \"129172\", \"Unicode hex\": \"1F894\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"238\", \"Dingbat hex\": \"EE\", \"Unicode dec\": \"129174\", \"Unicode hex\": \"1F896\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"239\", \"Dingbat hex\": \"EF\", \"Unicode dec\": \"129173\", \"Unicode hex\": \"1F895\" },\n    { \"Typeface name\": \"Wingdings 3\", \"Dingbat dec\": \"240\", \"Dingbat hex\": \"F0\", \"Unicode dec\": \"129175\", \"Unicode hex\": \"1F897\" },\n];\nexports.default = dingbats;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hex = exports.dec = exports.codePoint = void 0;\nvar dingbats_1 = __importDefault(require(\"./dingbats\"));\nvar dingbatsByCodePoint = {};\nvar fromCodePoint = String.fromCodePoint ? String.fromCodePoint : fromCodePointPolyfill;\nfor (var _i = 0, dingbats_2 = dingbats_1.default; _i < dingbats_2.length; _i++) {\n    var dingbat = dingbats_2[_i];\n    var codePoint_1 = parseInt(dingbat[\"Unicode dec\"], 10);\n    var scalarValue = {\n        codePoint: codePoint_1,\n        string: fromCodePoint(codePoint_1),\n    };\n    dingbatsByCodePoint[dingbat[\"Typeface name\"].toUpperCase() + \"_\" + dingbat[\"Dingbat dec\"]] = scalarValue;\n}\nfunction codePoint(typeface, codePoint) {\n    return dingbatsByCodePoint[typeface.toUpperCase() + \"_\" + codePoint];\n}\nexports.codePoint = codePoint;\nfunction dec(typeface, dec) {\n    return codePoint(typeface, parseInt(dec, 10));\n}\nexports.dec = dec;\nfunction hex(typeface, hex) {\n    return codePoint(typeface, parseInt(hex, 16));\n}\nexports.hex = hex;\nfunction fromCodePointPolyfill(codePoint) {\n    if (codePoint <= 0xFFFF) {\n        // BMP\n        return String.fromCharCode(codePoint);\n    }\n    else {\n        // Astral\n        // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n        var highSurrogate = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;\n        var lowSurrogate = (codePoint - 0x10000) % 0x400 + 0xDC00;\n        return String.fromCharCode(highSurrogate, lowSurrogate);\n    }\n}\n;\n", "var _ = require(\"underscore\");\n\nexports.paragraph = paragraph;\nexports.run = run;\nexports._elements = elements;\nexports._elementsOfType = elementsOfType;\nexports.getDescendantsOfType = getDescendantsOfType;\nexports.getDescendants = getDescendants;\n\nfunction paragraph(transform) {\n    return elementsOfType(\"paragraph\", transform);\n}\n\nfunction run(transform) {\n    return elementsOfType(\"run\", transform);\n}\n\nfunction elementsOfType(elementType, transform) {\n    return elements(function(element) {\n        if (element.type === elementType) {\n            return transform(element);\n        } else {\n            return element;\n        }\n    });\n}\n\nfunction elements(transform) {\n    return function transformElement(element) {\n        if (element.children) {\n            var children = _.map(element.children, transformElement);\n            element = _.extend(element, {children: children});\n        }\n        return transform(element);\n    };\n}\n\n\nfunction getDescendantsOfType(element, type) {\n    return getDescendants(element).filter(function(descendant) {\n        return descendant.type === type;\n    });\n}\n\nfunction getDescendants(element) {\n    var descendants = [];\n\n    visitDescendants(element, function(descendant) {\n        descendants.push(descendant);\n    });\n\n    return descendants;\n}\n\nfunction visitDescendants(element, visit) {\n    if (element.children) {\n        element.children.forEach(function(child) {\n            visitDescendants(child, visit);\n            visit(child);\n        });\n    }\n}\n", "exports.uriToZipEntryName = uriToZipEntryName;\nexports.replaceFragment = replaceFragment;\n\nfunction uriToZipEntryName(base, uri) {\n    if (uri.charAt(0) === \"/\") {\n        return uri.substr(1);\n    } else {\n        // In general, we should check first and second for trailing and leading slashes,\n        // but in our specific case this seems to be sufficient\n        return base + \"/\" + uri;\n    }\n}\n\n\nfunction replaceFragment(uri, fragment) {\n    var hashIndex = uri.indexOf(\"#\");\n    if (hashIndex !== -1) {\n        uri = uri.substring(0, hashIndex);\n    }\n    return uri + \"#\" + fragment;\n}\n", "exports.createBodyReader = createBodyReader;\nexports._readNumberingProperties = readNumberingProperties;\n\nvar dingbatToUnicode = require(\"dingbat-to-unicode\");\nvar _ = require(\"underscore\");\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar warning = require(\"../results\").warning;\nvar xml = require(\"../xml\");\nvar transforms = require(\"../transforms\");\nvar uris = require(\"./uris\");\n\nfunction createBodyReader(options) {\n    return {\n        readXmlElement: function(element) {\n            return new BodyReader(options).readXmlElement(element);\n        },\n        readXmlElements: function(elements) {\n            return new BodyReader(options).readXmlElements(elements);\n        }\n    };\n}\n\nfunction BodyReader(options) {\n    var complexFieldStack = [];\n    var currentInstrText = [];\n\n    // When a paragraph is marked as deleted, its contents should be combined\n    // with the following paragraph. See 17.13.5.15 del (Deleted Paragraph) of\n    // ECMA-376 4th edition Part 1.\n    var deletedParagraphContents = [];\n\n    var relationships = options.relationships;\n    var contentTypes = options.contentTypes;\n    var docxFile = options.docxFile;\n    var files = options.files;\n    var numbering = options.numbering;\n    var styles = options.styles;\n\n    function readXmlElements(elements) {\n        var results = elements.map(readXmlElement);\n        return combineResults(results);\n    }\n\n    function readXmlElement(element) {\n        if (element.type === \"element\") {\n            var handler = xmlElementReaders[element.name];\n            if (handler) {\n                return handler(element);\n            } else if (!Object.prototype.hasOwnProperty.call(ignoreElements, element.name)) {\n                var message = warning(\"An unrecognised element was ignored: \" + element.name);\n                return emptyResultWithMessages([message]);\n            }\n        }\n        return emptyResult();\n    }\n\n    function readParagraphProperties(element) {\n        return readParagraphStyle(element).map(function(style) {\n            return {\n                type: \"paragraphProperties\",\n                styleId: style.styleId,\n                styleName: style.name,\n                alignment: element.firstOrEmpty(\"w:jc\").attributes[\"w:val\"],\n                numbering: readNumberingProperties(style.styleId, element.firstOrEmpty(\"w:numPr\"), numbering),\n                indent: readParagraphIndent(element.firstOrEmpty(\"w:ind\"))\n            };\n        });\n    }\n\n    function readParagraphIndent(element) {\n        return {\n            start: element.attributes[\"w:start\"] || element.attributes[\"w:left\"],\n            end: element.attributes[\"w:end\"] || element.attributes[\"w:right\"],\n            firstLine: element.attributes[\"w:firstLine\"],\n            hanging: element.attributes[\"w:hanging\"]\n        };\n    }\n\n    function readRunProperties(element) {\n        return readRunStyle(element).map(function(style) {\n            var fontSizeString = element.firstOrEmpty(\"w:sz\").attributes[\"w:val\"];\n            // w:sz gives the font size in half points, so halve the value to get the size in points\n            var fontSize = /^[0-9]+$/.test(fontSizeString) ? parseInt(fontSizeString, 10) / 2 : null;\n\n            return {\n                type: \"runProperties\",\n                styleId: style.styleId,\n                styleName: style.name,\n                verticalAlignment: element.firstOrEmpty(\"w:vertAlign\").attributes[\"w:val\"],\n                font: element.firstOrEmpty(\"w:rFonts\").attributes[\"w:ascii\"],\n                fontSize: fontSize,\n                isBold: readBooleanElement(element.first(\"w:b\")),\n                isUnderline: readUnderline(element.first(\"w:u\")),\n                isItalic: readBooleanElement(element.first(\"w:i\")),\n                isStrikethrough: readBooleanElement(element.first(\"w:strike\")),\n                isAllCaps: readBooleanElement(element.first(\"w:caps\")),\n                isSmallCaps: readBooleanElement(element.first(\"w:smallCaps\")),\n                highlight: readHighlightValue(element.firstOrEmpty(\"w:highlight\").attributes[\"w:val\"])\n            };\n        });\n    }\n\n    function readUnderline(element) {\n        if (element) {\n            var value = element.attributes[\"w:val\"];\n            return value !== undefined && value !== \"false\" && value !== \"0\" && value !== \"none\";\n        } else {\n            return false;\n        }\n    }\n\n    function readBooleanElement(element) {\n        if (element) {\n            var value = element.attributes[\"w:val\"];\n            return value !== \"false\" && value !== \"0\";\n        } else {\n            return false;\n        }\n    }\n\n    function readBooleanAttributeValue(value) {\n        return value !== \"false\" && value !== \"0\";\n    }\n\n    function readHighlightValue(value) {\n        if (!value || value === \"none\") {\n            return null;\n        } else {\n            return value;\n        }\n    }\n\n    function readParagraphStyle(element) {\n        return readStyle(element, \"w:pStyle\", \"Paragraph\", styles.findParagraphStyleById);\n    }\n\n    function readRunStyle(element) {\n        return readStyle(element, \"w:rStyle\", \"Run\", styles.findCharacterStyleById);\n    }\n\n    function readTableStyle(element) {\n        return readStyle(element, \"w:tblStyle\", \"Table\", styles.findTableStyleById);\n    }\n\n    function readStyle(element, styleTagName, styleType, findStyleById) {\n        var messages = [];\n        var styleElement = element.first(styleTagName);\n        var styleId = null;\n        var name = null;\n        if (styleElement) {\n            styleId = styleElement.attributes[\"w:val\"];\n            if (styleId) {\n                var style = findStyleById(styleId);\n                if (style) {\n                    name = style.name;\n                } else {\n                    messages.push(undefinedStyleWarning(styleType, styleId));\n                }\n            }\n        }\n        return elementResultWithMessages({styleId: styleId, name: name}, messages);\n    }\n\n    function readFldChar(element) {\n        var type = element.attributes[\"w:fldCharType\"];\n        if (type === \"begin\") {\n            complexFieldStack.push({type: \"begin\", fldChar: element});\n            currentInstrText = [];\n        } else if (type === \"end\") {\n            var complexFieldEnd = complexFieldStack.pop();\n            if (complexFieldEnd.type === \"begin\") {\n                complexFieldEnd = parseCurrentInstrText(complexFieldEnd);\n            }\n            if (complexFieldEnd.type === \"checkbox\") {\n                return elementResult(documents.checkbox({\n                    checked: complexFieldEnd.checked\n                }));\n            }\n        } else if (type === \"separate\") {\n            var complexFieldSeparate = complexFieldStack.pop();\n            var complexField = parseCurrentInstrText(complexFieldSeparate);\n            complexFieldStack.push(complexField);\n        }\n        return emptyResult();\n    }\n\n    function currentHyperlinkOptions() {\n        var topHyperlink = _.last(complexFieldStack.filter(function(complexField) {\n            return complexField.type === \"hyperlink\";\n        }));\n        return topHyperlink ? topHyperlink.options : null;\n    }\n\n    function parseCurrentInstrText(complexField) {\n        return parseInstrText(\n            currentInstrText.join(''),\n            complexField.type === \"begin\"\n                ? complexField.fldChar\n                : xml.emptyElement\n        );\n    }\n\n    function parseInstrText(instrText, fldChar) {\n        var linkResult = /^\\s*HYPERLINK\\s+(\\\\l\\s+)?(?:\"(.*)\"|([^\\\\]\\S*))/.exec(instrText);\n        if (linkResult) {\n            var location = linkResult[2] === undefined ? linkResult[3] : linkResult[2];\n            var options = linkResult[1] === undefined ? {href: location} : {anchor: location};\n            return {type: \"hyperlink\", options: options};\n        }\n\n        var checkboxResult = /\\s*FORMCHECKBOX\\s*/.exec(instrText);\n        if (checkboxResult) {\n            var checkboxElement = fldChar\n                .firstOrEmpty(\"w:ffData\")\n                .firstOrEmpty(\"w:checkBox\");\n            var checkedElement = checkboxElement.first(\"w:checked\");\n            var checked = checkedElement == null\n                ? readBooleanElement(checkboxElement.first(\"w:default\"))\n                : readBooleanElement(checkedElement);\n            return {type: \"checkbox\", checked: checked};\n        }\n\n        return {type: \"unknown\"};\n    }\n\n    function readInstrText(element) {\n        currentInstrText.push(element.text());\n        return emptyResult();\n    }\n\n    function readSymbol(element) {\n        // See 17.3.3.30 sym (Symbol Character) of ECMA-376 4th edition Part 1\n        var font = element.attributes[\"w:font\"];\n        var char = element.attributes[\"w:char\"];\n        var unicodeCharacter = dingbatToUnicode.hex(font, char);\n        if (unicodeCharacter == null && /^F0..$/.test(char)) {\n            unicodeCharacter = dingbatToUnicode.hex(font, char.substring(2));\n        }\n\n        if (unicodeCharacter == null) {\n            return emptyResultWithMessages([warning(\n                \"A w:sym element with an unsupported character was ignored: char \" +  char + \" in font \" + font\n            )]);\n        } else {\n            return elementResult(new documents.Text(unicodeCharacter.string));\n        }\n    }\n\n    function noteReferenceReader(noteType) {\n        return function(element) {\n            var noteId = element.attributes[\"w:id\"];\n            return elementResult(new documents.NoteReference({\n                noteType: noteType,\n                noteId: noteId\n            }));\n        };\n    }\n\n    function readCommentReference(element) {\n        return elementResult(documents.commentReference({\n            commentId: element.attributes[\"w:id\"]\n        }));\n    }\n\n    function readChildElements(element) {\n        return readXmlElements(element.children);\n    }\n\n    var xmlElementReaders = {\n        \"w:p\": function(element) {\n            var paragraphPropertiesElement = element.firstOrEmpty(\"w:pPr\");\n\n            var isDeleted = !!paragraphPropertiesElement\n                .firstOrEmpty(\"w:rPr\")\n                .first(\"w:del\");\n\n            if (isDeleted) {\n                element.children.forEach(function(child) {\n                    deletedParagraphContents.push(child);\n                });\n                return emptyResult();\n            } else {\n                var childrenXml = element.children;\n                if (deletedParagraphContents.length > 0) {\n                    childrenXml = deletedParagraphContents.concat(childrenXml);\n                    deletedParagraphContents = [];\n                }\n                return ReadResult.map(\n                    readParagraphProperties(paragraphPropertiesElement),\n                    readXmlElements(childrenXml),\n                    function(properties, children) {\n                        return new documents.Paragraph(children, properties);\n                    }\n                ).insertExtra();\n            }\n        },\n        \"w:r\": function(element) {\n            return ReadResult.map(\n                readRunProperties(element.firstOrEmpty(\"w:rPr\")),\n                readXmlElements(element.children),\n                function(properties, children) {\n                    var hyperlinkOptions = currentHyperlinkOptions();\n                    if (hyperlinkOptions !== null) {\n                        children = [new documents.Hyperlink(children, hyperlinkOptions)];\n                    }\n\n                    return new documents.Run(children, properties);\n                }\n            );\n        },\n        \"w:fldChar\": readFldChar,\n        \"w:instrText\": readInstrText,\n        \"w:t\": function(element) {\n            return elementResult(new documents.Text(element.text()));\n        },\n        \"w:tab\": function(element) {\n            return elementResult(new documents.Tab());\n        },\n        \"w:noBreakHyphen\": function() {\n            return elementResult(new documents.Text(\"\\u2011\"));\n        },\n        \"w:softHyphen\": function(element) {\n            return elementResult(new documents.Text(\"\\u00AD\"));\n        },\n        \"w:sym\": readSymbol,\n        \"w:hyperlink\": function(element) {\n            var relationshipId = element.attributes[\"r:id\"];\n            var anchor = element.attributes[\"w:anchor\"];\n            return readXmlElements(element.children).map(function(children) {\n                function create(options) {\n                    var targetFrame = element.attributes[\"w:tgtFrame\"] || null;\n\n                    return new documents.Hyperlink(\n                        children,\n                        _.extend({targetFrame: targetFrame}, options)\n                    );\n                }\n\n                if (relationshipId) {\n                    var href = relationships.findTargetByRelationshipId(relationshipId);\n                    if (anchor) {\n                        href = uris.replaceFragment(href, anchor);\n                    }\n                    return create({href: href});\n                } else if (anchor) {\n                    return create({anchor: anchor});\n                } else {\n                    return children;\n                }\n            });\n        },\n        \"w:tbl\": readTable,\n        \"w:tr\": readTableRow,\n        \"w:tc\": readTableCell,\n        \"w:footnoteReference\": noteReferenceReader(\"footnote\"),\n        \"w:endnoteReference\": noteReferenceReader(\"endnote\"),\n        \"w:commentReference\": readCommentReference,\n        \"w:br\": function(element) {\n            var breakType = element.attributes[\"w:type\"];\n            if (breakType == null || breakType === \"textWrapping\") {\n                return elementResult(documents.lineBreak);\n            } else if (breakType === \"page\") {\n                return elementResult(documents.pageBreak);\n            } else if (breakType === \"column\") {\n                return elementResult(documents.columnBreak);\n            } else {\n                return emptyResultWithMessages([warning(\"Unsupported break type: \" + breakType)]);\n            }\n        },\n        \"w:bookmarkStart\": function(element){\n            var name = element.attributes[\"w:name\"];\n            if (name === \"_GoBack\") {\n                return emptyResult();\n            } else {\n                return elementResult(new documents.BookmarkStart({name: name}));\n            }\n        },\n\n        \"mc:AlternateContent\": function(element) {\n            return readChildElements(element.firstOrEmpty(\"mc:Fallback\"));\n        },\n\n        \"w:sdt\": function(element) {\n            var contentResult = readXmlElements(element.firstOrEmpty(\"w:sdtContent\").children);\n            return contentResult.map(function(content) {\n                // From the WordML standard: https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/3350cb64-931f-41f7-8824-f18b2568ce66\n                //\n                // > A CT_SdtCheckbox element that specifies that the parent\n                // > structured document tag is a checkbox when displayed in the\n                // > document. The parent structured document tag contents MUST\n                // > contain a single character and optionally an additional\n                // > character in a deleted run.\n\n                var checkbox = element\n                    .firstOrEmpty(\"w:sdtPr\")\n                    .first(\"wordml:checkbox\");\n\n                if (checkbox) {\n                    var checkedElement = checkbox.first(\"wordml:checked\");\n                    var isChecked = !!checkedElement && readBooleanAttributeValue(\n                        checkedElement.attributes[\"wordml:val\"]\n                    );\n                    var documentCheckbox = documents.checkbox({\n                        checked: isChecked\n                    });\n\n                    var hasCheckbox = false;\n                    var replacedContent = content.map(transforms._elementsOfType(\n                        documents.types.text,\n                        function(text) {\n                            if (text.value.length > 0 && !hasCheckbox) {\n                                hasCheckbox = true;\n                                return documentCheckbox;\n                            } else {\n                                return text;\n                            }\n                        }\n                    ));\n\n                    if (hasCheckbox) {\n                        return replacedContent;\n                    } else {\n                        return documentCheckbox;\n                    }\n\n                } else {\n                    return content;\n                }\n            });\n        },\n\n        \"w:ins\": readChildElements,\n        \"w:object\": readChildElements,\n        \"w:smartTag\": readChildElements,\n        \"w:drawing\": readChildElements,\n        \"w:pict\": function(element) {\n            return readChildElements(element).toExtra();\n        },\n        \"v:roundrect\": readChildElements,\n        \"v:shape\": readChildElements,\n        \"v:textbox\": readChildElements,\n        \"w:txbxContent\": readChildElements,\n        \"wp:inline\": readDrawingElement,\n        \"wp:anchor\": readDrawingElement,\n        \"v:imagedata\": readImageData,\n        \"v:group\": readChildElements,\n        \"v:rect\": readChildElements\n    };\n\n    return {\n        readXmlElement: readXmlElement,\n        readXmlElements: readXmlElements\n    };\n\n\n    function readTable(element) {\n        var propertiesResult = readTableProperties(element.firstOrEmpty(\"w:tblPr\"));\n        return readXmlElements(element.children)\n            .flatMap(calculateRowSpans)\n            .flatMap(function(children) {\n                return propertiesResult.map(function(properties) {\n                    return documents.Table(children, properties);\n                });\n            });\n    }\n\n    function readTableProperties(element) {\n        return readTableStyle(element).map(function(style) {\n            return {\n                styleId: style.styleId,\n                styleName: style.name\n            };\n        });\n    }\n\n    function readTableRow(element) {\n        var properties = element.firstOrEmpty(\"w:trPr\");\n\n        // See 17.13.5.12 del (Deleted Table Row) of ECMA-376 4th edition Part 1\n        var isDeleted = !!properties.first(\"w:del\");\n        if (isDeleted) {\n            return emptyResult();\n        }\n\n        var isHeader = !!properties.first(\"w:tblHeader\");\n        return readXmlElements(element.children).map(function(children) {\n            return documents.TableRow(children, {isHeader: isHeader});\n        });\n    }\n\n    function readTableCell(element) {\n        return readXmlElements(element.children).map(function(children) {\n            var properties = element.firstOrEmpty(\"w:tcPr\");\n\n            var gridSpan = properties.firstOrEmpty(\"w:gridSpan\").attributes[\"w:val\"];\n            var colSpan = gridSpan ? parseInt(gridSpan, 10) : 1;\n\n            var cell = documents.TableCell(children, {colSpan: colSpan});\n            cell._vMerge = readVMerge(properties);\n            return cell;\n        });\n    }\n\n    function readVMerge(properties) {\n        var element = properties.first(\"w:vMerge\");\n        if (element) {\n            var val = element.attributes[\"w:val\"];\n            return val === \"continue\" || !val;\n        } else {\n            return null;\n        }\n    }\n\n    function calculateRowSpans(rows) {\n        var unexpectedNonRows = _.any(rows, function(row) {\n            return row.type !== documents.types.tableRow;\n        });\n        if (unexpectedNonRows) {\n            removeVMergeProperties(rows);\n            return elementResultWithMessages(rows, [warning(\n                \"unexpected non-row element in table, cell merging may be incorrect\"\n            )]);\n        }\n        var unexpectedNonCells = _.any(rows, function(row) {\n            return _.any(row.children, function(cell) {\n                return cell.type !== documents.types.tableCell;\n            });\n        });\n        if (unexpectedNonCells) {\n            removeVMergeProperties(rows);\n            return elementResultWithMessages(rows, [warning(\n                \"unexpected non-cell element in table row, cell merging may be incorrect\"\n            )]);\n        }\n\n        var columns = {};\n\n        rows.forEach(function(row) {\n            var cellIndex = 0;\n            row.children.forEach(function(cell) {\n                if (cell._vMerge && columns[cellIndex]) {\n                    columns[cellIndex].rowSpan++;\n                } else {\n                    columns[cellIndex] = cell;\n                    cell._vMerge = false;\n                }\n                cellIndex += cell.colSpan;\n            });\n        });\n\n        rows.forEach(function(row) {\n            row.children = row.children.filter(function(cell) {\n                return !cell._vMerge;\n            });\n            row.children.forEach(function(cell) {\n                delete cell._vMerge;\n            });\n        });\n\n        return elementResult(rows);\n    }\n\n    function removeVMergeProperties(rows) {\n        rows.forEach(function(row) {\n            var cells = transforms.getDescendantsOfType(row, documents.types.tableCell);\n            cells.forEach(function(cell) {\n                delete cell._vMerge;\n            });\n        });\n    }\n\n    function readDrawingElement(element) {\n        var blips = element\n            .getElementsByTagName(\"a:graphic\")\n            .getElementsByTagName(\"a:graphicData\")\n            .getElementsByTagName(\"pic:pic\")\n            .getElementsByTagName(\"pic:blipFill\")\n            .getElementsByTagName(\"a:blip\");\n\n        return combineResults(blips.map(readBlip.bind(null, element)));\n    }\n\n    function readBlip(element, blip) {\n        var propertiesElement = element.firstOrEmpty(\"wp:docPr\");\n        var properties = propertiesElement.attributes;\n\n        var altText = isBlank(properties.descr) ? properties.title : properties.descr;\n\n        var blipImageFile = findBlipImageFile(blip);\n        if (blipImageFile === null) {\n            return emptyResultWithMessages([warning(\"Could not find image file for a:blip element\")]);\n        }\n\n        return readImage(blipImageFile, altText).map(function(imageElement) {\n            var hlinkClickElement = propertiesElement.firstOrEmpty(\"a:hlinkClick\");\n            var relationshipId = hlinkClickElement.attributes[\"r:id\"];\n            if (relationshipId) {\n                var href = relationships.findTargetByRelationshipId(relationshipId);\n                return new documents.Hyperlink([imageElement], {href: href});\n            } else {\n                return imageElement;\n            }\n        });\n    }\n\n    function isBlank(value) {\n        return value == null || /^\\s*$/.test(value);\n    }\n\n    function findBlipImageFile(blip) {\n        var embedRelationshipId = blip.attributes[\"r:embed\"];\n        var linkRelationshipId = blip.attributes[\"r:link\"];\n        if (embedRelationshipId) {\n            return findEmbeddedImageFile(embedRelationshipId);\n        } else if (linkRelationshipId) {\n            var imagePath = relationships.findTargetByRelationshipId(linkRelationshipId);\n            return {\n                path: imagePath,\n                read: files.read.bind(files, imagePath)\n            };\n        } else {\n            return null;\n        }\n    }\n\n    function readImageData(element) {\n        var relationshipId = element.attributes['r:id'];\n\n        if (relationshipId) {\n            return readImage(\n                findEmbeddedImageFile(relationshipId),\n                element.attributes[\"o:title\"]);\n        } else {\n            return emptyResultWithMessages([warning(\"A v:imagedata element without a relationship ID was ignored\")]);\n        }\n    }\n\n    function findEmbeddedImageFile(relationshipId) {\n        var path = uris.uriToZipEntryName(\"word\", relationships.findTargetByRelationshipId(relationshipId));\n        return {\n            path: path,\n            read: docxFile.read.bind(docxFile, path)\n        };\n    }\n\n    function readImage(imageFile, altText) {\n        var contentType = contentTypes.findContentType(imageFile.path);\n\n        var image = documents.Image({\n            readImage: imageFile.read,\n            altText: altText,\n            contentType: contentType\n        });\n        var warnings = supportedImageTypes[contentType] ?\n            [] : warning(\"Image of type \" + contentType + \" is unlikely to display in web browsers\");\n        return elementResultWithMessages(image, warnings);\n    }\n\n    function undefinedStyleWarning(type, styleId) {\n        return warning(\n            type + \" style with ID \" + styleId + \" was referenced but not defined in the document\");\n    }\n}\n\n\nfunction readNumberingProperties(styleId, element, numbering) {\n    var level = element.firstOrEmpty(\"w:ilvl\").attributes[\"w:val\"];\n    var numId = element.firstOrEmpty(\"w:numId\").attributes[\"w:val\"];\n    if (level !== undefined && numId !== undefined) {\n        return numbering.findLevel(numId, level);\n    }\n\n    if (styleId != null) {\n        var levelByStyleId = numbering.findLevelByParagraphStyleId(styleId);\n        if (levelByStyleId != null) {\n            return levelByStyleId;\n        }\n    }\n\n    // Some malformed documents define numbering levels without an index, and\n    // reference the numbering using a w:numPr element without a w:ilvl child.\n    // To handle such cases, we assume a level of 0 as a fallback.\n    if (numId !== undefined) {\n        return numbering.findLevel(numId, \"0\");\n    }\n\n    return null;\n}\n\nvar supportedImageTypes = {\n    \"image/png\": true,\n    \"image/gif\": true,\n    \"image/jpeg\": true,\n    \"image/svg+xml\": true,\n    \"image/tiff\": true\n};\n\nvar ignoreElements = {\n    \"office-word:wrap\": true,\n    \"v:shadow\": true,\n    \"v:shapetype\": true,\n    \"w:annotationRef\": true,\n    \"w:bookmarkEnd\": true,\n    \"w:sectPr\": true,\n    \"w:proofErr\": true,\n    \"w:lastRenderedPageBreak\": true,\n    \"w:commentRangeStart\": true,\n    \"w:commentRangeEnd\": true,\n    \"w:del\": true,\n    \"w:footnoteRef\": true,\n    \"w:endnoteRef\": true,\n    \"w:pPr\": true,\n    \"w:rPr\": true,\n    \"w:tblPr\": true,\n    \"w:tblGrid\": true,\n    \"w:trPr\": true,\n    \"w:tcPr\": true\n};\n\nfunction emptyResultWithMessages(messages) {\n    return new ReadResult(null, null, messages);\n}\n\nfunction emptyResult() {\n    return new ReadResult(null);\n}\n\nfunction elementResult(element) {\n    return new ReadResult(element);\n}\n\nfunction elementResultWithMessages(element, messages) {\n    return new ReadResult(element, null, messages);\n}\n\nfunction ReadResult(element, extra, messages) {\n    this.value = element || [];\n    this.extra = extra || [];\n    this._result = new Result({\n        element: this.value,\n        extra: extra\n    }, messages);\n    this.messages = this._result.messages;\n}\n\nReadResult.prototype.toExtra = function() {\n    return new ReadResult(null, joinElements(this.extra, this.value), this.messages);\n};\n\nReadResult.prototype.insertExtra = function() {\n    var extra = this.extra;\n    if (extra && extra.length) {\n        return new ReadResult(joinElements(this.value, extra), null, this.messages);\n    } else {\n        return this;\n    }\n};\n\nReadResult.prototype.map = function(func) {\n    var result = this._result.map(function(value) {\n        return func(value.element);\n    });\n    return new ReadResult(result.value, this.extra, result.messages);\n};\n\nReadResult.prototype.flatMap = function(func) {\n    var result = this._result.flatMap(function(value) {\n        return func(value.element)._result;\n    });\n    return new ReadResult(result.value.element, joinElements(this.extra, result.value.extra), result.messages);\n};\n\nReadResult.map = function(first, second, func) {\n    return new ReadResult(\n        func(first.value, second.value),\n        joinElements(first.extra, second.extra),\n        first.messages.concat(second.messages)\n    );\n};\n\nfunction combineResults(results) {\n    var result = Result.combine(_.pluck(results, \"_result\"));\n    return new ReadResult(\n        _.flatten(_.pluck(result.value, \"element\")),\n        _.filter(_.flatten(_.pluck(result.value, \"extra\")), identity),\n        result.messages\n    );\n}\n\nfunction joinElements(first, second) {\n    return _.flatten([first, second]);\n}\n\nfunction identity(value) {\n    return value;\n}\n", "exports.DocumentXmlReader = DocumentXmlReader;\n\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\n\nfunction DocumentXmlReader(options) {\n    var bodyReader = options.bodyReader;\n\n    function convertXmlToDocument(element) {\n        var body = element.first(\"w:body\");\n\n        if (body == null) {\n            throw new Error(\"Could not find the body element: are you sure this is a docx file?\");\n        }\n\n        var result = bodyReader.readXmlElements(body.children)\n            .map(function(children) {\n                return new documents.Document(children, {\n                    notes: options.notes,\n                    comments: options.comments\n                });\n            });\n        return new Result(result.value, result.messages);\n    }\n\n    return {\n        convertXmlToDocument: convertXmlToDocument\n    };\n}\n", "exports.readRelationships = readRelationships;\nexports.defaultValue = new Relationships([]);\nexports.Relationships = Relationships;\n\n\nfunction readRelationships(element) {\n    var relationships = [];\n    element.children.forEach(function(child) {\n        if (child.name === \"relationships:Relationship\") {\n            var relationship = {\n                relationshipId: child.attributes.Id,\n                target: child.attributes.Target,\n                type: child.attributes.Type\n            };\n            relationships.push(relationship);\n        }\n    });\n    return new Relationships(relationships);\n}\n\nfunction Relationships(relationships) {\n    var targetsByRelationshipId = {};\n    relationships.forEach(function(relationship) {\n        targetsByRelationshipId[relationship.relationshipId] = relationship.target;\n    });\n\n    var targetsByType = {};\n    relationships.forEach(function(relationship) {\n        if (!targetsByType[relationship.type]) {\n            targetsByType[relationship.type] = [];\n        }\n        targetsByType[relationship.type].push(relationship.target);\n    });\n\n    return {\n        findTargetByRelationshipId: function(relationshipId) {\n            return targetsByRelationshipId[relationshipId];\n        },\n        findTargetsByType: function(type) {\n            return targetsByType[type] || [];\n        }\n    };\n}\n", "exports.readContentTypesFromXml = readContentTypesFromXml;\n\nvar fallbackContentTypes = {\n    \"png\": \"png\",\n    \"gif\": \"gif\",\n    \"jpeg\": \"jpeg\",\n    \"jpg\": \"jpeg\",\n    \"tif\": \"tiff\",\n    \"tiff\": \"tiff\",\n    \"bmp\": \"bmp\"\n};\n\nexports.defaultContentTypes = contentTypes({}, {});\n\n\nfunction readContentTypesFromXml(element) {\n    var extensionDefaults = {};\n    var overrides = {};\n    \n    element.children.forEach(function(child) {\n        if (child.name === \"content-types:Default\") {\n            extensionDefaults[child.attributes.Extension] = child.attributes.ContentType;\n        }\n        if (child.name === \"content-types:Override\") {\n            var name = child.attributes.PartName;\n            if (name.charAt(0) === \"/\") {\n                name = name.substring(1);\n            }\n            overrides[name] = child.attributes.ContentType;\n        }\n    });\n    return contentTypes(overrides, extensionDefaults);\n}\n\nfunction contentTypes(overrides, extensionDefaults) {\n    return {\n        findContentType: function(path) {\n            var overrideContentType = overrides[path];\n            if (overrideContentType) {\n                return overrideContentType;\n            } else {\n                var pathParts = path.split(\".\");\n                var extension = pathParts[pathParts.length - 1];\n                if (extensionDefaults.hasOwnProperty(extension)) {\n                    return extensionDefaults[extension];\n                } else {\n                    var fallback = fallbackContentTypes[extension.toLowerCase()];\n                    if (fallback) {\n                        return \"image/\" + fallback;\n                    } else {\n                        return null;\n                    }\n                }\n            }\n        }\n    };\n    \n}\n", "var _ = require(\"underscore\");\n\nexports.readNumberingXml = readNumberingXml;\nexports.Numbering = Numbering;\nexports.defaultNumbering = new Numbering({}, {});\n\nfunction Numbering(nums, abstractNums, styles) {\n    var allLevels = _.flatten(_.values(abstractNums).map(function(abstractNum) {\n        return _.values(abstractNum.levels);\n    }));\n\n    var levelsByParagraphStyleId = _.indexBy(\n        allLevels.filter(function(level) {\n            return level.paragraphStyleId != null;\n        }),\n        \"paragraphStyleId\"\n    );\n\n    function findLevel(numId, level) {\n        var num = nums[numId];\n        if (num) {\n            var abstractNum = abstractNums[num.abstractNumId];\n            if (!abstractNum) {\n                return null;\n            } else if (abstractNum.numStyleLink == null) {\n                return abstractNums[num.abstractNumId].levels[level];\n            } else {\n                var style = styles.findNumberingStyleById(abstractNum.numStyleLink);\n                return findLevel(style.numId, level);\n            }\n        } else {\n            return null;\n        }\n    }\n\n    function findLevelByParagraphStyleId(styleId) {\n        return levelsByParagraphStyleId[styleId] || null;\n    }\n\n    return {\n        findLevel: findLevel,\n        findLevelByParagraphStyleId: findLevelByParagraphStyleId\n    };\n}\n\nfunction readNumberingXml(root, options) {\n    if (!options || !options.styles) {\n        throw new Error(\"styles is missing\");\n    }\n\n    var abstractNums = readAbstractNums(root);\n    var nums = readNums(root, abstractNums);\n    return new Numbering(nums, abstractNums, options.styles);\n}\n\nfunction readAbstractNums(root) {\n    var abstractNums = {};\n    root.getElementsByTagName(\"w:abstractNum\").forEach(function(element) {\n        var id = element.attributes[\"w:abstractNumId\"];\n        abstractNums[id] = readAbstractNum(element);\n    });\n    return abstractNums;\n}\n\nfunction readAbstractNum(element) {\n    var levels = {};\n\n    // Some malformed documents define numbering levels without an index, and\n    // reference the numbering using a w:numPr element without a w:ilvl child.\n    // To handle such cases, we assume a level of 0 as a fallback.\n    var levelWithoutIndex = null;\n\n    element.getElementsByTagName(\"w:lvl\").forEach(function(levelElement) {\n        var levelIndex = levelElement.attributes[\"w:ilvl\"];\n        var numFmt = levelElement.firstOrEmpty(\"w:numFmt\").attributes[\"w:val\"];\n        var isOrdered = numFmt !== \"bullet\";\n        var paragraphStyleId = levelElement.firstOrEmpty(\"w:pStyle\").attributes[\"w:val\"];\n\n        if (levelIndex === undefined) {\n            levelWithoutIndex = {\n                isOrdered: isOrdered,\n                level: \"0\",\n                paragraphStyleId: paragraphStyleId\n            };\n        } else {\n            levels[levelIndex] = {\n                isOrdered: isOrdered,\n                level: levelIndex,\n                paragraphStyleId: paragraphStyleId\n            };\n        }\n    });\n\n    if (levelWithoutIndex !== null && levels[levelWithoutIndex.level] === undefined) {\n        levels[levelWithoutIndex.level] = levelWithoutIndex;\n    }\n\n    var numStyleLink = element.firstOrEmpty(\"w:numStyleLink\").attributes[\"w:val\"];\n\n    return {levels: levels, numStyleLink: numStyleLink};\n}\n\nfunction readNums(root) {\n    var nums = {};\n    root.getElementsByTagName(\"w:num\").forEach(function(element) {\n        var numId = element.attributes[\"w:numId\"];\n        var abstractNumId = element.first(\"w:abstractNumId\").attributes[\"w:val\"];\n        nums[numId] = {abstractNumId: abstractNumId};\n    });\n    return nums;\n}\n", "exports.readStylesXml = readStylesXml;\nexports.Styles = Styles;\nexports.defaultStyles = new Styles({}, {});\n\nfunction Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles) {\n    return {\n        findParagraphStyleById: function(styleId) {\n            return paragraphStyles[styleId];\n        },\n        findCharacterStyleById: function(styleId) {\n            return characterStyles[styleId];\n        },\n        findTableStyleById: function(styleId) {\n            return tableStyles[styleId];\n        },\n        findNumberingStyleById: function(styleId) {\n            return numberingStyles[styleId];\n        }\n    };\n}\n\nStyles.EMPTY = new Styles({}, {}, {}, {});\n\nfunction readStylesXml(root) {\n    var paragraphStyles = {};\n    var characterStyles = {};\n    var tableStyles = {};\n    var numberingStyles = {};\n\n    var styles = {\n        \"paragraph\": paragraphStyles,\n        \"character\": characterStyles,\n        \"table\": tableStyles,\n        \"numbering\": numberingStyles\n    };\n\n    root.getElementsByTagName(\"w:style\").forEach(function(styleElement) {\n        var style = readStyleElement(styleElement);\n        var styleSet = styles[style.type];\n\n        // Per 17.7.4.17 style (Style Definition) of ECMA-376 4th edition Part 1:\n        //\n        // > If multiple style definitions each declare the same value for their\n        // > styleId, then the first such instance shall keep its current\n        // > identifier with all other instances being reassigned in any manner\n        // > desired.\n        //\n        // For the purpose of conversion, there's no point holding onto styles\n        // with reassigned style IDs, so we ignore such style definitions.\n\n        if (styleSet && styleSet[style.styleId] === undefined) {\n            styleSet[style.styleId] = style;\n        }\n    });\n\n    return new Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles);\n}\n\nfunction readStyleElement(styleElement) {\n    var type = styleElement.attributes[\"w:type\"];\n\n    if (type === \"numbering\") {\n        return readNumberingStyleElement(type, styleElement);\n    } else {\n        var styleId = readStyleId(styleElement);\n        var name = styleName(styleElement);\n        return {type: type, styleId: styleId, name: name};\n    }\n}\n\nfunction styleName(styleElement) {\n    var nameElement = styleElement.first(\"w:name\");\n    return nameElement ? nameElement.attributes[\"w:val\"] : null;\n}\n\nfunction readNumberingStyleElement(type, styleElement) {\n    var styleId = readStyleId(styleElement);\n\n    var numId = styleElement\n        .firstOrEmpty(\"w:pPr\")\n        .firstOrEmpty(\"w:numPr\")\n        .firstOrEmpty(\"w:numId\")\n        .attributes[\"w:val\"];\n\n    return {type: type, numId: numId, styleId: styleId};\n}\n\nfunction readStyleId(styleElement) {\n    return styleElement.attributes[\"w:styleId\"];\n}\n", "var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nexports.createFootnotesReader = createReader.bind(this, \"footnote\");\nexports.createEndnotesReader = createReader.bind(this, \"endnote\");\n\nfunction createReader(noteType, bodyReader) {\n    function readNotesXml(element) {\n        return Result.combine(element.getElementsByTagName(\"w:\" + noteType)\n            .filter(isFootnoteElement)\n            .map(readFootnoteElement));\n    }\n\n    function isFootnoteElement(element) {\n        var type = element.attributes[\"w:type\"];\n        return type !== \"continuationSeparator\" && type !== \"separator\";\n    }\n\n    function readFootnoteElement(footnoteElement) {\n        var id = footnoteElement.attributes[\"w:id\"];\n        return bodyReader.readXmlElements(footnoteElement.children)\n            .map(function(body) {\n                return documents.Note({noteType: noteType, noteId: id, body: body});\n            });\n    }\n    \n    return readNotesXml;\n}\n", "var documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\n\nfunction createCommentsReader(bodyReader) {\n    function readCommentsXml(element) {\n        return Result.combine(element.getElementsByTagName(\"w:comment\")\n            .map(readCommentElement));\n    }\n\n    function readCommentElement(element) {\n        var id = element.attributes[\"w:id\"];\n\n        function readOptionalAttribute(name) {\n            return (element.attributes[name] || \"\").trim() || null;\n        }\n\n        return bodyReader.readXmlElements(element.children)\n            .map(function(body) {\n                return documents.comment({\n                    commentId: id,\n                    body: body,\n                    authorName: readOptionalAttribute(\"w:author\"),\n                    authorInitials: readOptionalAttribute(\"w:initials\")\n                });\n            });\n    }\n    \n    return readCommentsXml;\n}\n\nexports.createCommentsReader = createCommentsReader;\n", "'use strict';\n\nfunction posix(path) {\n\treturn path.charAt(0) === '/';\n}\n\nfunction win32(path) {\n\t// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56\n\tvar splitDeviceRe = /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\n\tvar result = splitDeviceRe.exec(path);\n\tvar device = result[1] || '';\n\tvar isUnc = Boolean(device && device.charAt(1) !== ':');\n\n\t// UNC paths are always absolute\n\treturn Boolean(result[2] || isUnc);\n}\n\nmodule.exports = process.platform === 'win32' ? win32 : posix;\nmodule.exports.posix = posix;\nmodule.exports.win32 = win32;\n", "var fs = require(\"fs\");\nvar url = require(\"url\");\nvar os = require(\"os\");\nvar dirname = require(\"path\").dirname;\nvar resolvePath = require(\"path\").resolve;\nvar isAbsolutePath = require('path-is-absolute');\n\nvar promises = require(\"../promises\");\n\n\nexports.Files = Files;\nexports.uriToPath = uriToPath;\n\n\nfunction Files(options) {\n    options = options || {};\n    if (!options.externalFileAccess) {\n        return {\n            read: function(uri) {\n                return promises.reject(new Error(\"could not read external image '\" + uri + \"', external file access is disabled\"));\n            }\n        };\n    }\n\n    var base = options.relativeToFile ? dirname(options.relativeToFile) : null;\n\n    function read(uri, encoding) {\n        return resolveUri(uri).then(function(path) {\n            return readFile(path, encoding).caught(function(error) {\n                var message = \"could not open external image: '\" + uri + \"' (document directory: '\" + base + \"')\\n\" + error.message;\n                return promises.reject(new Error(message));\n            });\n        });\n    }\n\n    function resolveUri(uri) {\n        var path = uriToPath(uri);\n        if (isAbsolutePath(path)) {\n            return promises.resolve(path);\n        } else if (base) {\n            return promises.resolve(resolvePath(base, path));\n        } else {\n            return promises.reject(new Error(\"could not find external image '\" + uri + \"', path of input document is unknown\"));\n        }\n    }\n\n    return {\n        read: read\n    };\n}\n\n\nvar readFile = promises.promisify(fs.readFile.bind(fs));\n\n\nfunction uriToPath(uriString, platform) {\n    if (!platform) {\n        platform = os.platform();\n    }\n\n    var uri = url.parse(uriString);\n    if (isLocalFileUri(uri) || isRelativeUri(uri)) {\n        var path = decodeURIComponent(uri.path);\n        if (platform === \"win32\" && /^\\/[a-z]:/i.test(path)) {\n            return path.slice(1);\n        } else {\n            return path;\n        }\n    } else {\n        throw new Error(\"Could not convert URI to path: \" + uriString);\n    }\n}\n\nfunction isLocalFileUri(uri) {\n    return uri.protocol === \"file:\" && (!uri.host || uri.host === \"localhost\");\n}\n\nfunction isRelativeUri(uri) {\n    return !uri.protocol && !uri.host;\n}\n", "exports.read = read;\nexports._findPartPaths = findPartPaths;\n\nvar promises = require(\"../promises\");\nvar documents = require(\"../documents\");\nvar Result = require(\"../results\").Result;\nvar zipfile = require(\"../zipfile\");\n\nvar readXmlFromZipFile = require(\"./office-xml-reader\").readXmlFromZipFile;\nvar createBodyReader = require(\"./body-reader\").createBodyReader;\nvar DocumentXmlReader = require(\"./document-xml-reader\").DocumentXmlReader;\nvar relationshipsReader = require(\"./relationships-reader\");\nvar contentTypesReader = require(\"./content-types-reader\");\nvar numberingXml = require(\"./numbering-xml\");\nvar stylesReader = require(\"./styles-reader\");\nvar notesReader = require(\"./notes-reader\");\nvar commentsReader = require(\"./comments-reader\");\nvar Files = require(\"./files\").Files;\n\n\nfunction read(docxFile, input, options) {\n    input = input || {};\n    options = options || {};\n\n    var files = new Files({\n        externalFileAccess: options.externalFileAccess,\n        relativeToFile: input.path\n    });\n\n    return promises.props({\n        contentTypes: readContentTypesFromZipFile(docxFile),\n        partPaths: findPartPaths(docxFile),\n        docxFile: docxFile,\n        files: files\n    }).also(function(result) {\n        return {\n            styles: readStylesFromZipFile(docxFile, result.partPaths.styles)\n        };\n    }).also(function(result) {\n        return {\n            numbering: readNumberingFromZipFile(docxFile, result.partPaths.numbering, result.styles)\n        };\n    }).also(function(result) {\n        return {\n            footnotes: readXmlFileWithBody(result.partPaths.footnotes, result, function(bodyReader, xml) {\n                if (xml) {\n                    return notesReader.createFootnotesReader(bodyReader)(xml);\n                } else {\n                    return new Result([]);\n                }\n            }),\n            endnotes: readXmlFileWithBody(result.partPaths.endnotes, result, function(bodyReader, xml) {\n                if (xml) {\n                    return notesReader.createEndnotesReader(bodyReader)(xml);\n                } else {\n                    return new Result([]);\n                }\n            }),\n            comments: readXmlFileWithBody(result.partPaths.comments, result, function(bodyReader, xml) {\n                if (xml) {\n                    return commentsReader.createCommentsReader(bodyReader)(xml);\n                } else {\n                    return new Result([]);\n                }\n            })\n        };\n    }).also(function(result) {\n        return {\n            notes: result.footnotes.flatMap(function(footnotes) {\n                return result.endnotes.map(function(endnotes) {\n                    return new documents.Notes(footnotes.concat(endnotes));\n                });\n            })\n        };\n    }).then(function(result) {\n        return readXmlFileWithBody(result.partPaths.mainDocument, result, function(bodyReader, xml) {\n            return result.notes.flatMap(function(notes) {\n                return result.comments.flatMap(function(comments) {\n                    var reader = new DocumentXmlReader({\n                        bodyReader: bodyReader,\n                        notes: notes,\n                        comments: comments\n                    });\n                    return reader.convertXmlToDocument(xml);\n                });\n            });\n        });\n    });\n}\n\nfunction findPartPaths(docxFile) {\n    return readPackageRelationships(docxFile).then(function(packageRelationships) {\n        var mainDocumentPath = findPartPath({\n            docxFile: docxFile,\n            relationships: packageRelationships,\n            relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n            basePath: \"\",\n            fallbackPath: \"word/document.xml\"\n        });\n\n        if (!docxFile.exists(mainDocumentPath)) {\n            throw new Error(\"Could not find main document part. Are you sure this is a valid .docx file?\");\n        }\n\n        return xmlFileReader({\n            filename: relationshipsFilename(mainDocumentPath),\n            readElement: relationshipsReader.readRelationships,\n            defaultValue: relationshipsReader.defaultValue\n        })(docxFile).then(function(documentRelationships) {\n            function findPartRelatedToMainDocument(name) {\n                return findPartPath({\n                    docxFile: docxFile,\n                    relationships: documentRelationships,\n                    relationshipType: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/\" + name,\n                    basePath: zipfile.splitPath(mainDocumentPath).dirname,\n                    fallbackPath: \"word/\" + name + \".xml\"\n                });\n            }\n\n            return {\n                mainDocument: mainDocumentPath,\n                comments: findPartRelatedToMainDocument(\"comments\"),\n                endnotes: findPartRelatedToMainDocument(\"endnotes\"),\n                footnotes: findPartRelatedToMainDocument(\"footnotes\"),\n                numbering: findPartRelatedToMainDocument(\"numbering\"),\n                styles: findPartRelatedToMainDocument(\"styles\")\n            };\n        });\n    });\n}\n\nfunction findPartPath(options) {\n    var docxFile = options.docxFile;\n    var relationships = options.relationships;\n    var relationshipType = options.relationshipType;\n    var basePath = options.basePath;\n    var fallbackPath = options.fallbackPath;\n\n    var targets = relationships.findTargetsByType(relationshipType);\n    var normalisedTargets = targets.map(function(target) {\n        return stripPrefix(zipfile.joinPath(basePath, target), \"/\");\n    });\n    var validTargets = normalisedTargets.filter(function(target) {\n        return docxFile.exists(target);\n    });\n    if (validTargets.length === 0) {\n        return fallbackPath;\n    } else {\n        return validTargets[0];\n    }\n}\n\nfunction stripPrefix(value, prefix) {\n    if (value.substring(0, prefix.length) === prefix) {\n        return value.substring(prefix.length);\n    } else {\n        return value;\n    }\n}\n\nfunction xmlFileReader(options) {\n    return function(zipFile) {\n        return readXmlFromZipFile(zipFile, options.filename)\n            .then(function(element) {\n                return element ? options.readElement(element) : options.defaultValue;\n            });\n    };\n}\n\nfunction readXmlFileWithBody(filename, options, func) {\n    var readRelationshipsFromZipFile = xmlFileReader({\n        filename: relationshipsFilename(filename),\n        readElement: relationshipsReader.readRelationships,\n        defaultValue: relationshipsReader.defaultValue\n    });\n\n    return readRelationshipsFromZipFile(options.docxFile).then(function(relationships) {\n        var bodyReader = new createBodyReader({\n            relationships: relationships,\n            contentTypes: options.contentTypes,\n            docxFile: options.docxFile,\n            numbering: options.numbering,\n            styles: options.styles,\n            files: options.files\n        });\n        return readXmlFromZipFile(options.docxFile, filename)\n            .then(function(xml) {\n                return func(bodyReader, xml);\n            });\n    });\n}\n\nfunction relationshipsFilename(filename) {\n    var split = zipfile.splitPath(filename);\n    return zipfile.joinPath(split.dirname, \"_rels\", split.basename + \".rels\");\n}\n\nvar readContentTypesFromZipFile = xmlFileReader({\n    filename: \"[Content_Types].xml\",\n    readElement: contentTypesReader.readContentTypesFromXml,\n    defaultValue: contentTypesReader.defaultContentTypes\n});\n\nfunction readNumberingFromZipFile(zipFile, path, styles) {\n    return xmlFileReader({\n        filename: path,\n        readElement: function(element) {\n            return numberingXml.readNumberingXml(element, {styles: styles});\n        },\n        defaultValue: numberingXml.defaultNumbering\n    })(zipFile);\n}\n\nfunction readStylesFromZipFile(zipFile, path) {\n    return xmlFileReader({\n        filename: path,\n        readElement: stylesReader.readStylesXml,\n        defaultValue: stylesReader.defaultStyles\n    })(zipFile);\n}\n\nvar readPackageRelationships = xmlFileReader({\n    filename: \"_rels/.rels\",\n    readElement: relationshipsReader.readRelationships,\n    defaultValue: relationshipsReader.defaultValue\n});\n", "var _ = require(\"underscore\");\n\nvar promises = require(\"../promises\");\nvar xml = require(\"../xml\");\n\nexports.writeStyleMap = writeStyleMap;\nexports.readStyleMap = readStyleMap;\n\n\nvar schema = \"http://schemas.zwobble.org/mammoth/style-map\";\nvar styleMapPath = \"mammoth/style-map\";\nvar styleMapAbsolutePath = \"/\" + styleMapPath;\n\nfunction writeStyleMap(docxFile, styleMap) {\n    docxFile.write(styleMapPath, styleMap);\n    return updateRelationships(docxFile).then(function() {\n        return updateContentTypes(docxFile);\n    });\n}\n\nfunction updateRelationships(docxFile) {\n    var path = \"word/_rels/document.xml.rels\";\n    var relationshipsUri = \"http://schemas.openxmlformats.org/package/2006/relationships\";\n    var relationshipElementName = \"{\" + relationshipsUri + \"}Relationship\";\n    return docxFile.read(path, \"utf8\")\n        .then(xml.readString)\n        .then(function(relationshipsContainer) {\n            var relationships = relationshipsContainer.children;\n            addOrUpdateElement(relationships, relationshipElementName, \"Id\", {\n                \"Id\": \"rMammothStyleMap\",\n                \"Type\": schema,\n                \"Target\": styleMapAbsolutePath\n            });\n            \n            var namespaces = {\"\": relationshipsUri};\n            return docxFile.write(path, xml.writeString(relationshipsContainer, namespaces));\n        });\n}\n\nfunction updateContentTypes(docxFile) {\n    var path = \"[Content_Types].xml\";\n    var contentTypesUri = \"http://schemas.openxmlformats.org/package/2006/content-types\";\n    var overrideName = \"{\" + contentTypesUri + \"}Override\";\n    return docxFile.read(path, \"utf8\")\n        .then(xml.readString)\n        .then(function(typesElement) {\n            var children = typesElement.children;\n            addOrUpdateElement(children, overrideName, \"PartName\", {\n                \"PartName\": styleMapAbsolutePath,\n                \"ContentType\": \"text/prs.mammoth.style-map\"\n            });\n            var namespaces = {\"\": contentTypesUri};\n            return docxFile.write(path, xml.writeString(typesElement, namespaces));\n        });\n}\n\nfunction addOrUpdateElement(elements, name, identifyingAttribute, attributes) {\n    var existingElement = _.find(elements, function(element) {\n        return element.name === name &&\n            element.attributes[identifyingAttribute] === attributes[identifyingAttribute];\n    });\n    if (existingElement) {\n        existingElement.attributes = attributes;\n    } else {\n        elements.push(xml.element(name, attributes));\n    }\n}\n\nfunction readStyleMap(docxFile) {\n    if (docxFile.exists(styleMapPath)) {\n        return docxFile.read(styleMapPath, \"utf8\");\n    } else {\n        return promises.resolve(null);\n    }\n}\n", "var htmlPaths = require(\"../styles/html-paths\");\n\n\nfunction nonFreshElement(tagName, attributes, children) {\n    return elementWithTag(\n        htmlPaths.element(tagName, attributes, {fresh: false}),\n        children);\n}\n\nfunction freshElement(tagName, attributes, children) {\n    var tag = htmlPaths.element(tagName, attributes, {fresh: true});\n    return elementWithTag(tag, children);\n}\n\nfunction elementWithTag(tag, children) {\n    return {\n        type: \"element\",\n        tag: tag,\n        children: children || []\n    };\n}\n\nfunction text(value) {\n    return {\n        type: \"text\",\n        value: value\n    };\n}\n\nvar forceWrite = {\n    type: \"forceWrite\"\n};\n\nexports.freshElement = freshElement;\nexports.nonFreshElement = nonFreshElement;\nexports.elementWithTag = elementWithTag;\nexports.text = text;\nexports.forceWrite = forceWrite;\n\nvar voidTagNames = {\n    \"br\": true,\n    \"hr\": true,\n    \"img\": true,\n    \"input\": true\n};\n\nfunction isVoidElement(node) {\n    return (node.children.length === 0) && voidTagNames[node.tag.tagName];\n}\n\nexports.isVoidElement = isVoidElement;\n", "var _ = require(\"underscore\");\n\nvar ast = require(\"./ast\");\n\nfunction simplify(nodes) {\n    return collapse(removeEmpty(nodes));\n}\n\nfunction collapse(nodes) {\n    var children = [];\n    \n    nodes.map(collapseNode).forEach(function(child) {\n        appendChild(children, child);\n    });\n    return children;\n}\n\nfunction collapseNode(node) {\n    return collapsers[node.type](node);\n}\n\nvar collapsers = {\n    element: collapseElement,\n    text: identity,\n    forceWrite: identity\n};\n\nfunction collapseElement(node) {\n    return ast.elementWithTag(node.tag, collapse(node.children));\n}\n\nfunction identity(value) {\n    return value;\n}\n\nfunction appendChild(children, child) {\n    var lastChild = children[children.length - 1];\n    if (child.type === \"element\" && !child.tag.fresh && lastChild && lastChild.type === \"element\" && child.tag.matchesElement(lastChild.tag)) {\n        if (child.tag.separator) {\n            appendChild(lastChild.children, ast.text(child.tag.separator));\n        }\n        child.children.forEach(function(grandChild) {\n            // Mutation is fine since simplifying elements create a copy of the children.\n            appendChild(lastChild.children, grandChild);\n        });\n    } else {\n        children.push(child);\n    }\n}\n\nfunction removeEmpty(nodes) {\n    return flatMap(nodes, function(node) {\n        return emptiers[node.type](node);\n    });\n}\n\nfunction flatMap(values, func) {\n    return _.flatten(_.map(values, func), true);\n}\n\nvar emptiers = {\n    element: elementEmptier,\n    text: textEmptier,\n    forceWrite: neverEmpty\n};\n\nfunction neverEmpty(node) {\n    return [node];\n}\n\nfunction elementEmptier(element) {\n    var children = removeEmpty(element.children);\n    if (children.length === 0 && !ast.isVoidElement(element)) {\n        return [];\n    } else {\n        return [ast.elementWithTag(element.tag, children)];\n    }\n}\n\nfunction textEmptier(node) {\n    if (node.value.length === 0) {\n        return [];\n    } else {\n        return [node];\n    }\n}\n\nmodule.exports = simplify;\n", "var ast = require(\"./ast\");\n\nexports.freshElement = ast.freshElement;\nexports.nonFreshElement = ast.nonFreshElement;\nexports.elementWithTag = ast.elementWithTag;\nexports.text = ast.text;\nexports.forceWrite = ast.forceWrite;\n\nexports.simplify = require(\"./simplify\");\n\nfunction write(writer, nodes) {\n    nodes.forEach(function(node) {\n        writeNode(writer, node);\n    });\n}\n\nfunction writeNode(writer, node) {\n    toStrings[node.type](writer, node);\n}\n\nvar toStrings = {\n    element: generateElementString,\n    text: generateTextString,\n    forceWrite: function() { }\n};\n\nfunction generateElementString(writer, node) {\n    if (ast.isVoidElement(node)) {\n        writer.selfClosing(node.tag.tagName, node.tag.attributes);\n    } else {\n        writer.open(node.tag.tagName, node.tag.attributes);\n        write(writer, node.children);\n        writer.close(node.tag.tagName);\n    }\n}\n\nfunction generateTextString(writer, node) {\n    writer.text(node.value);\n}\n\nexports.write = write;\n", "var _ = require(\"underscore\");\n\nvar html = require(\"../html\");\n\nexports.topLevelElement = topLevelElement;\nexports.elements = elements;\nexports.element = element;\n\nfunction topLevelElement(tagName, attributes) {\n    return elements([element(tagName, attributes, {fresh: true})]);\n}\n\nfunction elements(elementStyles) {\n    return new HtmlPath(elementStyles.map(function(elementStyle) {\n        if (_.isString(elementStyle)) {\n            return element(elementStyle);\n        } else {\n            return elementStyle;\n        }\n    }));\n}\n\nfunction HtmlPath(elements) {\n    this._elements = elements;\n}\n\nHtmlPath.prototype.wrap = function wrap(children) {\n    var result = children();\n    for (var index = this._elements.length - 1; index >= 0; index--) {\n        result = this._elements[index].wrapNodes(result);\n    }\n    return result;\n};\n\nfunction element(tagName, attributes, options) {\n    options = options || {};\n    return new Element(tagName, attributes, options);\n}\n\nfunction Element(tagName, attributes, options) {\n    var tagNames = {};\n    if (_.isArray(tagName)) {\n        tagName.forEach(function(tagName) {\n            tagNames[tagName] = true;\n        });\n        tagName = tagName[0];\n    } else {\n        tagNames[tagName] = true;\n    }\n    \n    this.tagName = tagName;\n    this.tagNames = tagNames;\n    this.attributes = attributes || {};\n    this.fresh = options.fresh;\n    this.separator = options.separator;\n}\n\nElement.prototype.matchesElement = function(element) {\n    return this.tagNames[element.tagName] && _.isEqual(this.attributes || {}, element.attributes || {});\n};\n\nElement.prototype.wrap = function wrap(generateNodes) {\n    return this.wrapNodes(generateNodes());\n};\n\nElement.prototype.wrapNodes = function wrapNodes(nodes) {\n    return [html.elementWithTag(this, nodes)];\n};\n\nexports.empty = elements([]);\nexports.ignore = {\n    wrap: function() {\n        return [];\n    }\n};\n", "var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar Html = require(\"./html\");\n\nexports.imgElement = imgElement;\n\nfunction imgElement(func) {\n    return function(element, messages) {\n        return promises.when(func(element)).then(function(result) {\n            var attributes = {};\n            if (element.altText) {\n                attributes.alt = element.altText;\n            }\n            _.extend(attributes, result);\n\n            return [Html.freshElement(\"img\", attributes)];\n        });\n    };\n}\n\n// Undocumented, but retained for backwards-compatibility with 0.3.x\nexports.inline = exports.imgElement;\n\nexports.dataUri = imgElement(function(element) {\n    return element.readAsBase64String().then(function(imageBuffer) {\n        return {\n            src: \"data:\" + element.contentType + \";base64,\" + imageBuffer\n        };\n    });\n});\n", "var _ = require(\"underscore\");\n\nexports.writer = writer;\n\nfunction writer(options) {\n    options = options || {};\n    if (options.prettyPrint) {\n        return prettyWriter();\n    } else {\n        return simpleWriter();\n    }\n}\n\n\nvar indentedElements = {\n    div: true,\n    p: true,\n    ul: true,\n    li: true\n};\n\n\nfunction prettyWriter() {\n    var indentationLevel = 0;\n    var indentation = \"  \";\n    var stack = [];\n    var start = true;\n    var inText = false;\n\n    var writer = simpleWriter();\n\n    function open(tagName, attributes) {\n        if (indentedElements[tagName]) {\n            indent();\n        }\n        stack.push(tagName);\n        writer.open(tagName, attributes);\n        if (indentedElements[tagName]) {\n            indentationLevel++;\n        }\n        start = false;\n    }\n\n    function close(tagName) {\n        if (indentedElements[tagName]) {\n            indentationLevel--;\n            indent();\n        }\n        stack.pop();\n        writer.close(tagName);\n    }\n\n    function text(value) {\n        startText();\n        var text = isInPre() ? value : value.replace(\"\\n\", \"\\n\" + indentation);\n        writer.text(text);\n    }\n\n    function selfClosing(tagName, attributes) {\n        indent();\n        writer.selfClosing(tagName, attributes);\n    }\n\n    function insideIndentedElement() {\n        return stack.length === 0 || indentedElements[stack[stack.length - 1]];\n    }\n\n    function startText() {\n        if (!inText) {\n            indent();\n            inText = true;\n        }\n    }\n\n    function indent() {\n        inText = false;\n        if (!start && insideIndentedElement() && !isInPre()) {\n            writer._append(\"\\n\");\n            for (var i = 0; i < indentationLevel; i++) {\n                writer._append(indentation);\n            }\n        }\n    }\n\n    function isInPre() {\n        return _.some(stack, function(tagName) {\n            return tagName === \"pre\";\n        });\n    }\n\n    return {\n        asString: writer.asString,\n        open: open,\n        close: close,\n        text: text,\n        selfClosing: selfClosing\n    };\n}\n\n\nfunction simpleWriter() {\n    var fragments = [];\n\n    function open(tagName, attributes) {\n        var attributeString = generateAttributeString(attributes);\n        fragments.push(\"<\" + tagName + attributeString + \">\");\n    }\n\n    function close(tagName) {\n        fragments.push(\"</\" + tagName + \">\");\n    }\n\n    function selfClosing(tagName, attributes) {\n        var attributeString = generateAttributeString(attributes);\n        fragments.push(\"<\" + tagName + attributeString + \" />\");\n    }\n\n    function generateAttributeString(attributes) {\n        return _.map(attributes, function(value, key) {\n            return \" \" + key + '=\"' + escapeHtmlAttribute(value) + '\"';\n        }).join(\"\");\n    }\n\n    function text(value) {\n        fragments.push(escapeHtmlText(value));\n    }\n\n    function append(html) {\n        fragments.push(html);\n    }\n\n    function asString() {\n        return fragments.join(\"\");\n    }\n\n    return {\n        asString: asString,\n        open: open,\n        close: close,\n        text: text,\n        selfClosing: selfClosing,\n        _append: append\n    };\n}\n\nfunction escapeHtmlText(value) {\n    return value\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;');\n}\n\nfunction escapeHtmlAttribute(value) {\n    return value\n        .replace(/&/g, '&amp;')\n        .replace(/\"/g, '&quot;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;');\n}\n", "var _ = require(\"underscore\");\n\n\nfunction symmetricMarkdownElement(end) {\n    return markdownElement(end, end);\n}\n\nfunction markdownElement(start, end) {\n    return function() {\n        return {start: start, end: end};\n    };\n}\n\nfunction markdownLink(attributes) {\n    var href = attributes.href || \"\";\n    if (href) {\n        return {\n            start: \"[\",\n            end: \"](\" + href + \")\",\n            anchorPosition: \"before\"\n        };\n    } else {\n        return {};\n    }\n}\n\nfunction markdownImage(attributes) {\n    var src = attributes.src || \"\";\n    var altText = attributes.alt || \"\";\n    if (src || altText) {\n        return {start: \"![\" + altText + \"](\" + src + \")\"};\n    } else {\n        return {};\n    }\n}\n\nfunction markdownList(options) {\n    return function(attributes, list) {\n        return {\n            start: list ? \"\\n\" : \"\",\n            end: list ? \"\" : \"\\n\",\n            list: {\n                isOrdered: options.isOrdered,\n                indent: list ? list.indent + 1 : 0,\n                count: 0\n            }\n        };\n    };\n}\n\nfunction markdownListItem(attributes, list, listItem) {\n    list = list || {indent: 0, isOrdered: false, count: 0};\n    list.count++;\n    listItem.hasClosed = false;\n    \n    var bullet = list.isOrdered ? list.count + \".\" : \"-\";\n    var start = repeatString(\"\\t\", list.indent) + bullet + \" \";\n        \n    return {\n        start: start,\n        end: function() {\n            if (!listItem.hasClosed) {\n                listItem.hasClosed = true;\n                return \"\\n\";\n            }\n        }\n    };\n}\n\nvar htmlToMarkdown = {\n    \"p\": markdownElement(\"\", \"\\n\\n\"),\n    \"br\": markdownElement(\"\", \"  \\n\"),\n    \"ul\": markdownList({isOrdered: false}),\n    \"ol\": markdownList({isOrdered: true}),\n    \"li\": markdownListItem,\n    \"strong\": symmetricMarkdownElement(\"__\"),\n    \"em\": symmetricMarkdownElement(\"*\"),\n    \"a\": markdownLink,\n    \"img\": markdownImage\n};\n\n(function() {\n    for (var i = 1; i <= 6; i++) {\n        htmlToMarkdown[\"h\" + i] = markdownElement(repeatString(\"#\", i) + \" \", \"\\n\\n\");\n    }\n})();\n\nfunction repeatString(value, count) {\n    return new Array(count + 1).join(value);\n}\n\nfunction markdownWriter() {\n    var fragments = [];\n    var elementStack = [];\n    var list = null;\n    var listItem = {};\n    \n    function open(tagName, attributes) {\n        attributes = attributes || {};\n        \n        var createElement = htmlToMarkdown[tagName] || function() {\n            return {};\n        };\n        var element = createElement(attributes, list, listItem);\n        elementStack.push({end: element.end, list: list});\n        \n        if (element.list) {\n            list = element.list;\n        }\n        \n        var anchorBeforeStart = element.anchorPosition === \"before\";\n        if (anchorBeforeStart) {\n            writeAnchor(attributes);\n        }\n\n        fragments.push(element.start || \"\");\n        if (!anchorBeforeStart) {\n            writeAnchor(attributes);\n        }\n    }\n    \n    function writeAnchor(attributes) {\n        if (attributes.id) {\n            fragments.push('<a id=\"' + attributes.id + '\"></a>');\n        }\n    }\n    \n    function close(tagName) {\n        var element = elementStack.pop();\n        list = element.list;\n        var end = _.isFunction(element.end) ? element.end() : element.end;\n        fragments.push(end || \"\");\n    }\n    \n    function selfClosing(tagName, attributes) {\n        open(tagName, attributes);\n        close(tagName);\n    }\n    \n    function text(value) {\n        fragments.push(escapeMarkdown(value));\n    }\n    \n    function asString() {\n        return fragments.join(\"\");\n    }\n\n    return {\n        asString: asString,\n        open: open,\n        close: close,\n        text: text,\n        selfClosing: selfClosing\n    };\n}\n\nexports.writer = markdownWriter;\n\nfunction escapeMarkdown(value) {\n    return value\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/([\\`\\*_\\{\\}\\[\\]\\(\\)\\#\\+\\-\\.\\!])/g, '\\\\$1');\n}\n", "var htmlWriter = require(\"./html-writer\");\nvar markdownWriter = require(\"./markdown-writer\");\n\nexports.writer = writer;\n\n\nfunction writer(options) {\n    options = options || {};\n    if (options.outputFormat === \"markdown\") {\n        return markdownWriter.writer();\n    } else {\n        return htmlWriter.writer(options);\n    }\n}\n", "var _ = require(\"underscore\");\n\nvar promises = require(\"./promises\");\nvar documents = require(\"./documents\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar results = require(\"./results\");\nvar images = require(\"./images\");\nvar Html = require(\"./html\");\nvar writers = require(\"./writers\");\n\nexports.DocumentConverter = DocumentConverter;\n\n\nfunction DocumentConverter(options) {\n    return {\n        convertToHtml: function(element) {\n            var comments = _.indexBy(\n                element.type === documents.types.document ? element.comments : [],\n                \"commentId\"\n            );\n            var conversion = new DocumentConversion(options, comments);\n            return conversion.convertToHtml(element);\n        }\n    };\n}\n\nfunction DocumentConversion(options, comments) {\n    var noteNumber = 1;\n\n    var noteReferences = [];\n\n    var referencedComments = [];\n\n    options = _.extend({ignoreEmptyParagraphs: true}, options);\n    var idPrefix = options.idPrefix === undefined ? \"\" : options.idPrefix;\n    var ignoreEmptyParagraphs = options.ignoreEmptyParagraphs;\n\n    var defaultParagraphStyle = htmlPaths.topLevelElement(\"p\");\n\n    var styleMap = options.styleMap || [];\n\n    function convertToHtml(document) {\n        var messages = [];\n\n        var html = elementToHtml(document, messages, {});\n\n        var deferredNodes = [];\n        walkHtml(html, function(node) {\n            if (node.type === \"deferred\") {\n                deferredNodes.push(node);\n            }\n        });\n        var deferredValues = {};\n        return promises.mapSeries(deferredNodes, function(deferred) {\n            return deferred.value().then(function(value) {\n                deferredValues[deferred.id] = value;\n            });\n        }).then(function() {\n            function replaceDeferred(nodes) {\n                return flatMap(nodes, function(node) {\n                    if (node.type === \"deferred\") {\n                        return deferredValues[node.id];\n                    } else if (node.children) {\n                        return [\n                            _.extend({}, node, {\n                                children: replaceDeferred(node.children)\n                            })\n                        ];\n                    } else {\n                        return [node];\n                    }\n                });\n            }\n            var writer = writers.writer({\n                prettyPrint: options.prettyPrint,\n                outputFormat: options.outputFormat\n            });\n            Html.write(writer, Html.simplify(replaceDeferred(html)));\n            return new results.Result(writer.asString(), messages);\n        });\n    }\n\n    function convertElements(elements, messages, options) {\n        return flatMap(elements, function(element) {\n            return elementToHtml(element, messages, options);\n        });\n    }\n\n    function elementToHtml(element, messages, options) {\n        if (!options) {\n            throw new Error(\"options not set\");\n        }\n        var handler = elementConverters[element.type];\n        if (handler) {\n            return handler(element, messages, options);\n        } else {\n            return [];\n        }\n    }\n\n    function convertParagraph(element, messages, options) {\n        return htmlPathForParagraph(element, messages).wrap(function() {\n            var content = convertElements(element.children, messages, options);\n            if (ignoreEmptyParagraphs) {\n                return content;\n            } else {\n                return [Html.forceWrite].concat(content);\n            }\n        });\n    }\n\n    function htmlPathForParagraph(element, messages) {\n        var style = findStyle(element);\n\n        if (style) {\n            return style.to;\n        } else {\n            if (element.styleId) {\n                messages.push(unrecognisedStyleWarning(\"paragraph\", element));\n            }\n            return defaultParagraphStyle;\n        }\n    }\n\n    function convertRun(run, messages, options) {\n        var nodes = function() {\n            return convertElements(run.children, messages, options);\n        };\n        var paths = [];\n        if (run.highlight !== null) {\n            var path = findHtmlPath({type: \"highlight\", color: run.highlight});\n            if (path) {\n                paths.push(path);\n            }\n        }\n        if (run.isSmallCaps) {\n            paths.push(findHtmlPathForRunProperty(\"smallCaps\"));\n        }\n        if (run.isAllCaps) {\n            paths.push(findHtmlPathForRunProperty(\"allCaps\"));\n        }\n        if (run.isStrikethrough) {\n            paths.push(findHtmlPathForRunProperty(\"strikethrough\", \"s\"));\n        }\n        if (run.isUnderline) {\n            paths.push(findHtmlPathForRunProperty(\"underline\"));\n        }\n        if (run.verticalAlignment === documents.verticalAlignment.subscript) {\n            paths.push(htmlPaths.element(\"sub\", {}, {fresh: false}));\n        }\n        if (run.verticalAlignment === documents.verticalAlignment.superscript) {\n            paths.push(htmlPaths.element(\"sup\", {}, {fresh: false}));\n        }\n        if (run.isItalic) {\n            paths.push(findHtmlPathForRunProperty(\"italic\", \"em\"));\n        }\n        if (run.isBold) {\n            paths.push(findHtmlPathForRunProperty(\"bold\", \"strong\"));\n        }\n        var stylePath = htmlPaths.empty;\n        var style = findStyle(run);\n        if (style) {\n            stylePath = style.to;\n        } else if (run.styleId) {\n            messages.push(unrecognisedStyleWarning(\"run\", run));\n        }\n        paths.push(stylePath);\n\n        paths.forEach(function(path) {\n            nodes = path.wrap.bind(path, nodes);\n        });\n\n        return nodes();\n    }\n\n    function findHtmlPathForRunProperty(elementType, defaultTagName) {\n        var path = findHtmlPath({type: elementType});\n        if (path) {\n            return path;\n        } else if (defaultTagName) {\n            return htmlPaths.element(defaultTagName, {}, {fresh: false});\n        } else {\n            return htmlPaths.empty;\n        }\n    }\n\n    function findHtmlPath(element, defaultPath) {\n        var style = findStyle(element);\n        return style ? style.to : defaultPath;\n    }\n\n    function findStyle(element) {\n        for (var i = 0; i < styleMap.length; i++) {\n            if (styleMap[i].from.matches(element)) {\n                return styleMap[i];\n            }\n        }\n    }\n\n    function recoveringConvertImage(convertImage) {\n        return function(image, messages) {\n            return promises.attempt(function() {\n                return convertImage(image, messages);\n            }).caught(function(error) {\n                messages.push(results.error(error));\n                return [];\n            });\n        };\n    }\n\n    function noteHtmlId(note) {\n        return referentHtmlId(note.noteType, note.noteId);\n    }\n\n    function noteRefHtmlId(note) {\n        return referenceHtmlId(note.noteType, note.noteId);\n    }\n\n    function referentHtmlId(referenceType, referenceId) {\n        return htmlId(referenceType + \"-\" + referenceId);\n    }\n\n    function referenceHtmlId(referenceType, referenceId) {\n        return htmlId(referenceType + \"-ref-\" + referenceId);\n    }\n\n    function htmlId(suffix) {\n        return idPrefix + suffix;\n    }\n\n    var defaultTablePath = htmlPaths.elements([\n        htmlPaths.element(\"table\", {}, {fresh: true})\n    ]);\n\n    function convertTable(element, messages, options) {\n        return findHtmlPath(element, defaultTablePath).wrap(function() {\n            return convertTableChildren(element, messages, options);\n        });\n    }\n\n    function convertTableChildren(element, messages, options) {\n        var bodyIndex = _.findIndex(element.children, function(child) {\n            return !child.type === documents.types.tableRow || !child.isHeader;\n        });\n        if (bodyIndex === -1) {\n            bodyIndex = element.children.length;\n        }\n        var children;\n        if (bodyIndex === 0) {\n            children = convertElements(\n                element.children,\n                messages,\n                _.extend({}, options, {isTableHeader: false})\n            );\n        } else {\n            var headRows = convertElements(\n                element.children.slice(0, bodyIndex),\n                messages,\n                _.extend({}, options, {isTableHeader: true})\n            );\n            var bodyRows = convertElements(\n                element.children.slice(bodyIndex),\n                messages,\n                _.extend({}, options, {isTableHeader: false})\n            );\n            children = [\n                Html.freshElement(\"thead\", {}, headRows),\n                Html.freshElement(\"tbody\", {}, bodyRows)\n            ];\n        }\n        return [Html.forceWrite].concat(children);\n    }\n\n    function convertTableRow(element, messages, options) {\n        var children = convertElements(element.children, messages, options);\n        return [\n            Html.freshElement(\"tr\", {}, [Html.forceWrite].concat(children))\n        ];\n    }\n\n    function convertTableCell(element, messages, options) {\n        var tagName = options.isTableHeader ? \"th\" : \"td\";\n        var children = convertElements(element.children, messages, options);\n        var attributes = {};\n        if (element.colSpan !== 1) {\n            attributes.colspan = element.colSpan.toString();\n        }\n        if (element.rowSpan !== 1) {\n            attributes.rowspan = element.rowSpan.toString();\n        }\n\n        return [\n            Html.freshElement(tagName, attributes, [Html.forceWrite].concat(children))\n        ];\n    }\n\n    function convertCommentReference(reference, messages, options) {\n        return findHtmlPath(reference, htmlPaths.ignore).wrap(function() {\n            var comment = comments[reference.commentId];\n            var count = referencedComments.length + 1;\n            var label = \"[\" + commentAuthorLabel(comment) + count + \"]\";\n            referencedComments.push({label: label, comment: comment});\n            // TODO: remove duplication with note references\n            return [\n                Html.freshElement(\"a\", {\n                    href: \"#\" + referentHtmlId(\"comment\", reference.commentId),\n                    id: referenceHtmlId(\"comment\", reference.commentId)\n                }, [Html.text(label)])\n            ];\n        });\n    }\n\n    function convertComment(referencedComment, messages, options) {\n        // TODO: remove duplication with note references\n\n        var label = referencedComment.label;\n        var comment = referencedComment.comment;\n        var body = convertElements(comment.body, messages, options).concat([\n            Html.nonFreshElement(\"p\", {}, [\n                Html.text(\" \"),\n                Html.freshElement(\"a\", {\"href\": \"#\" + referenceHtmlId(\"comment\", comment.commentId)}, [\n                    Html.text(\"\u2191\")\n                ])\n            ])\n        ]);\n\n        return [\n            Html.freshElement(\n                \"dt\",\n                {\"id\": referentHtmlId(\"comment\", comment.commentId)},\n                [Html.text(\"Comment \" + label)]\n            ),\n            Html.freshElement(\"dd\", {}, body)\n        ];\n    }\n\n    function convertBreak(element, messages, options) {\n        return htmlPathForBreak(element).wrap(function() {\n            return [];\n        });\n    }\n\n    function htmlPathForBreak(element) {\n        var style = findStyle(element);\n        if (style) {\n            return style.to;\n        } else if (element.breakType === \"line\") {\n            return htmlPaths.topLevelElement(\"br\");\n        } else {\n            return htmlPaths.empty;\n        }\n    }\n\n    var elementConverters = {\n        \"document\": function(document, messages, options) {\n            var children = convertElements(document.children, messages, options);\n            var notes = noteReferences.map(function(noteReference) {\n                return document.notes.resolve(noteReference);\n            });\n            var notesNodes = convertElements(notes, messages, options);\n            return children.concat([\n                Html.freshElement(\"ol\", {}, notesNodes),\n                Html.freshElement(\"dl\", {}, flatMap(referencedComments, function(referencedComment) {\n                    return convertComment(referencedComment, messages, options);\n                }))\n            ]);\n        },\n        \"paragraph\": convertParagraph,\n        \"run\": convertRun,\n        \"text\": function(element, messages, options) {\n            return [Html.text(element.value)];\n        },\n        \"tab\": function(element, messages, options) {\n            return [Html.text(\"\\t\")];\n        },\n        \"hyperlink\": function(element, messages, options) {\n            var href = element.anchor ? \"#\" + htmlId(element.anchor) : element.href;\n            var attributes = {href: href};\n            if (element.targetFrame != null) {\n                attributes.target = element.targetFrame;\n            }\n\n            var children = convertElements(element.children, messages, options);\n            return [Html.nonFreshElement(\"a\", attributes, children)];\n        },\n        \"checkbox\": function(element) {\n            var attributes = {type: \"checkbox\"};\n            if (element.checked) {\n                attributes[\"checked\"] = \"checked\";\n            }\n            return [Html.freshElement(\"input\", attributes)];\n        },\n        \"bookmarkStart\": function(element, messages, options) {\n            var anchor = Html.freshElement(\"a\", {\n                id: htmlId(element.name)\n            }, [Html.forceWrite]);\n            return [anchor];\n        },\n        \"noteReference\": function(element, messages, options) {\n            noteReferences.push(element);\n            var anchor = Html.freshElement(\"a\", {\n                href: \"#\" + noteHtmlId(element),\n                id: noteRefHtmlId(element)\n            }, [Html.text(\"[\" + (noteNumber++) + \"]\")]);\n\n            return [Html.freshElement(\"sup\", {}, [anchor])];\n        },\n        \"note\": function(element, messages, options) {\n            var children = convertElements(element.body, messages, options);\n            var backLink = Html.elementWithTag(htmlPaths.element(\"p\", {}, {fresh: false}), [\n                Html.text(\" \"),\n                Html.freshElement(\"a\", {href: \"#\" + noteRefHtmlId(element)}, [Html.text(\"\u2191\")])\n            ]);\n            var body = children.concat([backLink]);\n\n            return Html.freshElement(\"li\", {id: noteHtmlId(element)}, body);\n        },\n        \"commentReference\": convertCommentReference,\n        \"comment\": convertComment,\n        \"image\": deferredConversion(recoveringConvertImage(options.convertImage || images.dataUri)),\n        \"table\": convertTable,\n        \"tableRow\": convertTableRow,\n        \"tableCell\": convertTableCell,\n        \"break\": convertBreak\n    };\n    return {\n        convertToHtml: convertToHtml\n    };\n}\n\nvar deferredId = 1;\n\nfunction deferredConversion(func) {\n    return function(element, messages, options) {\n        return [\n            {\n                type: \"deferred\",\n                id: deferredId++,\n                value: function() {\n                    return func(element, messages, options);\n                }\n            }\n        ];\n    };\n}\n\nfunction unrecognisedStyleWarning(type, element) {\n    return results.warning(\n        \"Unrecognised \" + type + \" style: '\" + element.styleName + \"'\" +\n        \" (Style ID: \" + element.styleId + \")\"\n    );\n}\n\nfunction flatMap(values, func) {\n    return _.flatten(values.map(func), true);\n}\n\nfunction walkHtml(nodes, callback) {\n    nodes.forEach(function(node) {\n        callback(node);\n        if (node.children) {\n            walkHtml(node.children, callback);\n        }\n    });\n}\n\nvar commentAuthorLabel = exports.commentAuthorLabel = function commentAuthorLabel(comment) {\n    return comment.authorInitials || \"\";\n};\n", "var documents = require(\"./documents\");\n\nfunction convertElementToRawText(element) {\n    if (element.type === \"text\") {\n        return element.value;\n    } else if (element.type === documents.types.tab) {\n        return \"\\t\";\n    } else {\n        var tail = element.type === \"paragraph\" ? \"\\n\\n\" : \"\";\n        return (element.children || []).map(convertElementToRawText).join(\"\") + tail;\n    }\n}\n\nexports.convertElementToRawText = convertElementToRawText;\n", "var TokenIterator = module.exports = function(tokens, startIndex) {\n    this._tokens = tokens;\n    this._startIndex = startIndex || 0;\n};\n\nTokenIterator.prototype.head = function() {\n    return this._tokens[this._startIndex];\n};\n\nTokenIterator.prototype.tail = function(startIndex) {\n    return new TokenIterator(this._tokens, this._startIndex + 1);\n};\n\nTokenIterator.prototype.toArray = function() {\n    return this._tokens.slice(this._startIndex);\n};\n\nTokenIterator.prototype.end = function() {\n    return this._tokens[this._tokens.length - 1];\n};\n\n// TODO: doesn't need to be a method, can be a separate function,\n// which simplifies implementation of the TokenIterator interface\nTokenIterator.prototype.to = function(end) {\n    var start = this.head().source;\n    var endToken = end.head() || end.end();\n    return start.to(endToken.source);\n};\n", "var TokenIterator = require(\"./TokenIterator\");\n\nexports.Parser = function(options) {\n    var parseTokens = function(parser, tokens) {\n        return parser(new TokenIterator(tokens));\n    };\n    \n    return {\n        parseTokens: parseTokens\n    };\n};\n", "exports.none = Object.create({\n    value: function() {\n        throw new Error('Called value on none');\n    },\n    isNone: function() {\n        return true;\n    },\n    isSome: function() {\n        return false;\n    },\n    map: function() {\n        return exports.none;\n    },\n    flatMap: function() {\n        return exports.none;\n    },\n    filter: function() {\n        return exports.none;\n    },\n    toArray: function() {\n        return [];\n    },\n    orElse: callOrReturn,\n    valueOrElse: callOrReturn\n});\n\nfunction callOrReturn(value) {\n    if (typeof(value) == \"function\") {\n        return value();\n    } else {\n        return value;\n    }\n}\n\nexports.some = function(value) {\n    return new Some(value);\n};\n\nvar Some = function(value) {\n    this._value = value;\n};\n\nSome.prototype.value = function() {\n    return this._value;\n};\n\nSome.prototype.isNone = function() {\n    return false;\n};\n\nSome.prototype.isSome = function() {\n    return true;\n};\n\nSome.prototype.map = function(func) {\n    return new Some(func(this._value));\n};\n\nSome.prototype.flatMap = function(func) {\n    return func(this._value);\n};\n\nSome.prototype.filter = function(predicate) {\n    return predicate(this._value) ? this : exports.none;\n};\n\nSome.prototype.toArray = function() {\n    return [this._value];\n};\n\nSome.prototype.orElse = function(value) {\n    return this;\n};\n\nSome.prototype.valueOrElse = function(value) {\n    return this._value;\n};\n\nexports.isOption = function(value) {\n    return value === exports.none || value instanceof Some;\n};\n\nexports.fromNullable = function(value) {\n    if (value == null) {\n        return exports.none;\n    }\n    return new Some(value);\n}\n", "module.exports = {\n    failure: function(errors, remaining) {\n        if (errors.length < 1) {\n            throw new Error(\"Failure must have errors\");\n        }\n        return new Result({\n            status: \"failure\",\n            remaining: remaining,\n            errors: errors\n        });\n    },\n    error: function(errors, remaining) {\n        if (errors.length < 1) {\n            throw new Error(\"Failure must have errors\");\n        }\n        return new Result({\n            status: \"error\",\n            remaining: remaining,\n            errors: errors\n        });\n    },\n    success: function(value, remaining, source) {\n        return new Result({\n            status: \"success\",\n            value: value,\n            source: source,\n            remaining: remaining,\n            errors: []\n        });\n    },\n    cut: function(remaining) {\n        return new Result({\n            status: \"cut\",\n            remaining: remaining,\n            errors: []\n        });\n    }\n};\n\nvar Result = function(options) {\n    this._value = options.value;\n    this._status = options.status;\n    this._hasValue = options.value !== undefined;\n    this._remaining = options.remaining;\n    this._source = options.source;\n    this._errors = options.errors;\n};\n\nResult.prototype.map = function(func) {\n    if (this._hasValue) {\n        return new Result({\n            value: func(this._value, this._source),\n            status: this._status,\n            remaining: this._remaining,\n            source: this._source,\n            errors: this._errors\n        });\n    } else {\n        return this;\n    }\n};\n\nResult.prototype.changeRemaining = function(remaining) {\n    return new Result({\n        value: this._value,\n        status: this._status,\n        remaining: remaining,\n        source: this._source,\n        errors: this._errors\n    });\n};\n\nResult.prototype.isSuccess = function() {\n    return this._status === \"success\" || this._status === \"cut\";\n};\n\nResult.prototype.isFailure = function() {\n    return this._status === \"failure\";\n};\n\nResult.prototype.isError = function() {\n    return this._status === \"error\";\n};\n\nResult.prototype.isCut = function() {\n    return this._status === \"cut\";\n};\n\nResult.prototype.value = function() {\n    return this._value;\n};\n\nResult.prototype.remaining = function() {\n    return this._remaining;\n};\n\nResult.prototype.source = function() {\n    return this._source;\n};\n\nResult.prototype.errors = function() {\n    return this._errors;\n};\n", "exports.error = function(options) {\n    return new Error(options);\n};\n\nvar Error = function(options) {\n    this.expected = options.expected;\n    this.actual = options.actual;\n    this._location = options.location;\n};\n\nError.prototype.describe = function() {\n    var locationDescription = this._location ? this._location.describe() + \":\\n\" : \"\";\n    return locationDescription + \"Expected \" + this.expected + \"\\nbut got \" + this.actual;\n};\n\nError.prototype.lineNumber = function() {\n    return this._location.lineNumber();\n};\n\nError.prototype.characterNumber = function() {\n    return this._location.characterNumber();\n};\n", "var fromArray = exports.fromArray = function(array) {\n    var index = 0;\n    var hasNext = function() {\n        return index < array.length;\n    };\n    return new LazyIterator({\n        hasNext: hasNext,\n        next: function() {\n            if (!hasNext()) {\n                throw new Error(\"No more elements\");\n            } else {\n                return array[index++];\n            }\n        }\n    });\n};\n\nvar LazyIterator = function(iterator) {\n    this._iterator = iterator;\n};\n\nLazyIterator.prototype.map = function(func) {\n    var iterator = this._iterator;\n    return new LazyIterator({\n        hasNext: function() {\n            return iterator.hasNext();\n        },\n        next: function() {\n            return func(iterator.next());\n        }\n    });\n};\n\nLazyIterator.prototype.filter = function(condition) {\n    var iterator = this._iterator;\n    \n    var moved = false;\n    var hasNext = false;\n    var next;\n    var moveIfNecessary = function() {\n        if (moved) {\n            return;\n        }\n        moved = true;\n        hasNext = false;\n        while (iterator.hasNext() && !hasNext) {\n            next = iterator.next();\n            hasNext = condition(next);\n        }\n    };\n    \n    return new LazyIterator({\n        hasNext: function() {\n            moveIfNecessary();\n            return hasNext;\n        },\n        next: function() {\n            moveIfNecessary();\n            var toReturn = next;\n            moved = false;\n            return toReturn;\n        }\n    });\n};\n\nLazyIterator.prototype.first = function() {\n    var iterator = this._iterator;\n    if (this._iterator.hasNext()) {\n        return iterator.next();\n    } else {\n        return null;\n    }\n};\n\nLazyIterator.prototype.toArray = function() {\n    var result = [];\n    while (this._iterator.hasNext()) {\n        result.push(this._iterator.next());\n    }\n    return result;\n};\n", "var _ = require(\"underscore\");\nvar options = require(\"option\");\nvar results = require(\"./parsing-results\");\nvar errors = require(\"./errors\");\nvar lazyIterators = require(\"./lazy-iterators\");\n\nexports.token = function(tokenType, value) {\n    var matchValue = value !== undefined;\n    return function(input) {\n        var token = input.head();\n        if (token && token.name === tokenType && (!matchValue || token.value === value)) {\n            return results.success(token.value, input.tail(), token.source);\n        } else {\n            var expected = describeToken({name: tokenType, value: value});\n            return describeTokenMismatch(input, expected);\n        }\n    };\n};\n\nexports.tokenOfType = function(tokenType) {\n    return exports.token(tokenType);\n};\n\nexports.firstOf = function(name, parsers) {\n    if (!_.isArray(parsers)) {\n        parsers = Array.prototype.slice.call(arguments, 1);\n    }\n    return function(input) {\n        return lazyIterators\n            .fromArray(parsers)\n            .map(function(parser) {\n                return parser(input);\n            })\n            .filter(function(result) {\n                return result.isSuccess() || result.isError();\n            })\n            .first() || describeTokenMismatch(input, name);\n    };\n};\n\nexports.then = function(parser, func) {\n    return function(input) {\n        var result = parser(input);\n        if (!result.map) {\n            console.log(result);\n        }\n        return result.map(func);\n    };\n};\n\nexports.sequence = function() {\n    var parsers = Array.prototype.slice.call(arguments, 0);\n    var rule = function(input) {\n        var result = _.foldl(parsers, function(memo, parser) {\n            var result = memo.result;\n            var hasCut = memo.hasCut;\n            if (!result.isSuccess()) {\n                return {result: result, hasCut: hasCut};\n            }\n            var subResult = parser(result.remaining());\n            if (subResult.isCut()) {\n                return {result: result, hasCut: true};\n            } else if (subResult.isSuccess()) {\n                var values;\n                if (parser.isCaptured) {\n                    values = result.value().withValue(parser, subResult.value());\n                } else {\n                    values = result.value();\n                }\n                var remaining = subResult.remaining();\n                var source = input.to(remaining);\n                return {\n                    result: results.success(values, remaining, source),\n                    hasCut: hasCut\n                };\n            } else if (hasCut) {\n                return {result: results.error(subResult.errors(), subResult.remaining()), hasCut: hasCut};\n            } else {\n                return {result: subResult, hasCut: hasCut};\n            }\n        }, {result: results.success(new SequenceValues(), input), hasCut: false}).result;\n        var source = input.to(result.remaining());\n        return result.map(function(values) {\n            return values.withValue(exports.sequence.source, source);\n        });\n    };\n    rule.head = function() {\n        var firstCapture = _.find(parsers, isCapturedRule);\n        return exports.then(\n            rule,\n            exports.sequence.extract(firstCapture)\n        );\n    };\n    rule.map = function(func) {\n        return exports.then(\n            rule,\n            function(result) {\n                return func.apply(this, result.toArray());\n            }\n        );\n    };\n    \n    function isCapturedRule(subRule) {\n        return subRule.isCaptured;\n    }\n    \n    return rule;\n};\n\nvar SequenceValues = function(values, valuesArray) {\n    this._values = values || {};\n    this._valuesArray = valuesArray || [];\n};\n\nSequenceValues.prototype.withValue = function(rule, value) {\n    if (rule.captureName && rule.captureName in this._values) {\n        throw new Error(\"Cannot add second value for capture \\\"\" + rule.captureName + \"\\\"\");\n    } else {\n        var newValues = _.clone(this._values);\n        newValues[rule.captureName] = value;\n        var newValuesArray = this._valuesArray.concat([value]);\n        return new SequenceValues(newValues, newValuesArray);\n    }\n};\n\nSequenceValues.prototype.get = function(rule) {\n    if (rule.captureName in this._values) {\n        return this._values[rule.captureName];\n    } else {\n        throw new Error(\"No value for capture \\\"\" + rule.captureName + \"\\\"\");\n    }\n};\n\nSequenceValues.prototype.toArray = function() {\n    return this._valuesArray;\n};\n\nexports.sequence.capture = function(rule, name) {\n    var captureRule = function() {\n        return rule.apply(this, arguments);\n    };\n    captureRule.captureName = name;\n    captureRule.isCaptured = true;\n    return captureRule;\n};\n\nexports.sequence.extract = function(rule) {\n    return function(result) {\n        return result.get(rule);\n    };\n};\n\nexports.sequence.applyValues = function(func) {\n    // TODO: check captureName doesn't conflict with source or other captures\n    var rules = Array.prototype.slice.call(arguments, 1);\n    return function(result) {\n        var values = rules.map(function(rule) {\n            return result.get(rule);\n        });\n        return func.apply(this, values);\n    };\n};\n\nexports.sequence.source = {\n    captureName: \"\u2603source\u2603\"\n};\n\nexports.sequence.cut = function() {\n    return function(input) {\n        return results.cut(input);\n    };\n};\n\nexports.optional = function(rule) {\n    return function(input) {\n        var result = rule(input);\n        if (result.isSuccess()) {\n            return result.map(options.some);\n        } else if (result.isFailure()) {\n            return results.success(options.none, input);\n        } else {\n            return result;\n        }\n    };\n};\n\nexports.zeroOrMoreWithSeparator = function(rule, separator) {\n    return repeatedWithSeparator(rule, separator, false);\n};\n\nexports.oneOrMoreWithSeparator = function(rule, separator) {\n    return repeatedWithSeparator(rule, separator, true);\n};\n\nvar zeroOrMore = exports.zeroOrMore = function(rule) {\n    return function(input) {\n        var values = [];\n        var result;\n        while ((result = rule(input)) && result.isSuccess()) {\n            input = result.remaining();\n            values.push(result.value());\n        }\n        if (result.isError()) {\n            return result;\n        } else {\n            return results.success(values, input);\n        }\n    };\n};\n\nexports.oneOrMore = function(rule) {\n    return exports.oneOrMoreWithSeparator(rule, noOpRule);\n};\n\nfunction noOpRule(input) {\n    return results.success(null, input);\n}\n\nvar repeatedWithSeparator = function(rule, separator, isOneOrMore) {\n    return function(input) {\n        var result = rule(input);\n        if (result.isSuccess()) {\n            var mainRule = exports.sequence.capture(rule, \"main\");\n            var remainingRule = zeroOrMore(exports.then(\n                exports.sequence(separator, mainRule),\n                exports.sequence.extract(mainRule)\n            ));\n            var remainingResult = remainingRule(result.remaining());\n            return results.success([result.value()].concat(remainingResult.value()), remainingResult.remaining());\n        } else if (isOneOrMore || result.isError()) {\n            return result;\n        } else {\n            return results.success([], input);\n        }\n    };\n};\n\nexports.leftAssociative = function(leftRule, rightRule, func) {\n    var rights;\n    if (func) {\n        rights = [{func: func, rule: rightRule}];\n    } else {\n        rights = rightRule;\n    }\n    rights = rights.map(function(right) {\n        return exports.then(right.rule, function(rightValue) {\n            return function(leftValue, source) {\n                return right.func(leftValue, rightValue, source);\n            };\n        });\n    });\n    var repeatedRule = exports.firstOf.apply(null, [\"rules\"].concat(rights));\n    \n    return function(input) {\n        var start = input;\n        var leftResult = leftRule(input);\n        if (!leftResult.isSuccess()) {\n            return leftResult;\n        }\n        var repeatedResult = repeatedRule(leftResult.remaining());\n        while (repeatedResult.isSuccess()) {\n            var remaining = repeatedResult.remaining();\n            var source = start.to(repeatedResult.remaining());\n            var right = repeatedResult.value();\n            leftResult = results.success(\n                right(leftResult.value(), source),\n                remaining,\n                source\n            );\n            repeatedResult = repeatedRule(leftResult.remaining());\n        }\n        if (repeatedResult.isError()) {\n            return repeatedResult;\n        }\n        return leftResult;\n    };\n};\n\nexports.leftAssociative.firstOf = function() {\n    return Array.prototype.slice.call(arguments, 0);\n};\n\nexports.nonConsuming = function(rule) {\n    return function(input) {\n        return rule(input).changeRemaining(input);\n    };\n};\n\nvar describeToken = function(token) {\n    if (token.value) {\n        return token.name + \" \\\"\" + token.value + \"\\\"\";\n    } else {\n        return token.name;\n    }\n};\n\nfunction describeTokenMismatch(input, expected) {\n    var error;\n    var token = input.head();\n    if (token) {\n        error = errors.error({\n            expected: expected,\n            actual: describeToken(token),\n            location: token.source\n        });\n    } else {\n        error = errors.error({\n            expected: expected,\n            actual: \"end of tokens\"\n        });\n    }\n    return results.failure([error], input);\n}\n", "var StringSource = module.exports = function(string, description) {\n    var self = {\n        asString: function() {\n            return string;\n        },\n        range: function(startIndex, endIndex) {\n            return new StringSourceRange(string, description, startIndex, endIndex);\n        }\n    };\n    return self;\n};\n\nvar StringSourceRange = function(string, description, startIndex, endIndex) {\n    this._string = string;\n    this._description = description;\n    this._startIndex = startIndex;\n    this._endIndex = endIndex;\n};\n\nStringSourceRange.prototype.to = function(otherRange) {\n    // TODO: Assert that tokens are the same across both iterators\n    return new StringSourceRange(this._string, this._description, this._startIndex, otherRange._endIndex);\n};\n\nStringSourceRange.prototype.describe = function() {\n    var position = this._position();\n    var description = this._description ? this._description + \"\\n\" : \"\";\n    return description + \"Line number: \" + position.lineNumber + \"\\nCharacter number: \" + position.characterNumber;\n};\n\nStringSourceRange.prototype.lineNumber = function() {\n    return this._position().lineNumber;\n};\n\nStringSourceRange.prototype.characterNumber = function() {\n    return this._position().characterNumber;\n};\n\nStringSourceRange.prototype._position = function() {\n    var self = this;\n    var index = 0;\n    var nextNewLine = function() {\n        return self._string.indexOf(\"\\n\", index);\n    };\n\n    var lineNumber = 1;\n    while (nextNewLine() !== -1 && nextNewLine() < this._startIndex) {\n        index = nextNewLine() + 1;\n        lineNumber += 1;\n    }\n    var characterNumber = this._startIndex - index + 1;\n    return {lineNumber: lineNumber, characterNumber: characterNumber};\n};\n", "module.exports = function(name, value, source) {\n    this.name = name;\n    this.value = value;\n    if (source) {\n        this.source = source;\n    }\n};\n", "var rules = require(\"./rules\");\nvar results = require(\"./parsing-results\");\n\nexports.parser = function(name, prefixRules, infixRuleBuilders) {\n    var self = {\n        rule: rule,\n        leftAssociative: leftAssociative,\n        rightAssociative: rightAssociative\n    };\n    \n    var infixRules = new InfixRules(infixRuleBuilders.map(createInfixRule));\n    var prefixRule = rules.firstOf(name, prefixRules);\n    \n    function createInfixRule(infixRuleBuilder) {\n        return {\n            name: infixRuleBuilder.name,\n            rule: lazyRule(infixRuleBuilder.ruleBuilder.bind(null, self))\n        };\n    }\n    \n    function rule() {\n        return createRule(infixRules);\n    }\n    \n    function leftAssociative(name) {\n        return createRule(infixRules.untilExclusive(name));\n    }\n    \n    function rightAssociative(name) {\n        return createRule(infixRules.untilInclusive(name));\n    }\n    \n    function createRule(infixRules) {\n        return apply.bind(null, infixRules);\n    }\n    \n    function apply(infixRules, tokens) {\n        var leftResult = prefixRule(tokens);\n        if (leftResult.isSuccess()) {\n            return infixRules.apply(leftResult);\n        } else {\n            return leftResult;\n        }\n    }\n    \n    return self;\n};\n\nfunction InfixRules(infixRules) {\n    function untilExclusive(name) {\n        return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name)));\n    }\n    \n    function untilInclusive(name) {\n        return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name) + 1));\n    }\n    \n    function ruleNames() {\n        return infixRules.map(function(rule) {\n            return rule.name;\n        });\n    }\n    \n    function apply(leftResult) {\n        var currentResult;\n        var source;\n        while (true) {\n            currentResult = applyToTokens(leftResult.remaining());\n            if (currentResult.isSuccess()) {\n                source = leftResult.source().to(currentResult.source());\n                leftResult = results.success(\n                    currentResult.value()(leftResult.value(), source),\n                    currentResult.remaining(),\n                    source\n                )\n            } else if (currentResult.isFailure()) {\n                return leftResult;\n            } else {\n                return currentResult;\n            }\n        }\n    }\n    \n    function applyToTokens(tokens) {\n        return rules.firstOf(\"infix\", infixRules.map(function(infix) {\n            return infix.rule;\n        }))(tokens);\n    }\n    \n    return {\n        apply: apply,\n        untilExclusive: untilExclusive,\n        untilInclusive: untilInclusive\n    }\n}\n\nexports.infix = function(name, ruleBuilder) {\n    function map(func) {\n        return exports.infix(name, function(parser) {\n            var rule = ruleBuilder(parser);\n            return function(tokens) {\n                var result = rule(tokens);\n                return result.map(function(right) {\n                    return function(left, source) {\n                        return func(left, right, source);\n                    };\n                });\n            };\n        });\n    }\n    \n    return {\n        name: name,\n        ruleBuilder: ruleBuilder,\n        map: map\n    };\n}\n\n// TODO: move into a sensible place and remove duplication\nvar lazyRule = function(ruleBuilder) {\n    var rule;\n    return function(input) {\n        if (!rule) {\n            rule = ruleBuilder();\n        }\n        return rule(input);\n    };\n};\n", "var Token = require(\"./Token\");\nvar StringSource = require(\"./StringSource\");\n\nexports.RegexTokeniser = RegexTokeniser;\n\nfunction RegexTokeniser(rules) {\n    rules = rules.map(function(rule) {\n        return {\n            name: rule.name,\n            regex: new RegExp(rule.regex.source, \"g\")\n        };\n    });\n    \n    function tokenise(input, description) {\n        var source = new StringSource(input, description);\n        var index = 0;\n        var tokens = [];\n    \n        while (index < input.length) {\n            var result = readNextToken(input, index, source);\n            index = result.endIndex;\n            tokens.push(result.token);\n        }\n        \n        tokens.push(endToken(input, source));\n        return tokens;\n    }\n\n    function readNextToken(string, startIndex, source) {\n        for (var i = 0; i < rules.length; i++) {\n            var regex = rules[i].regex;\n            regex.lastIndex = startIndex;\n            var result = regex.exec(string);\n            \n            if (result) {\n                var endIndex = startIndex + result[0].length;\n                if (result.index === startIndex && endIndex > startIndex) {\n                    var value = result[1];\n                    var token = new Token(\n                        rules[i].name,\n                        value,\n                        source.range(startIndex, endIndex)\n                    );\n                    return {token: token, endIndex: endIndex};\n                }\n            }\n        }\n        var endIndex = startIndex + 1;\n        var token = new Token(\n            \"unrecognisedCharacter\",\n            string.substring(startIndex, endIndex),\n            source.range(startIndex, endIndex)\n        );\n        return {token: token, endIndex: endIndex};\n    }\n    \n    function endToken(input, source) {\n        return new Token(\n            \"end\",\n            null,\n            source.range(input.length, input.length)\n        );\n    }\n    \n    return {\n        tokenise: tokenise\n    }\n}\n\n\n", "exports.Parser = require(\"./lib/parser\").Parser;\nexports.rules = require(\"./lib/rules\");\nexports.errors = require(\"./lib/errors\");\nexports.results = require(\"./lib/parsing-results\");\nexports.StringSource = require(\"./lib/StringSource\");\nexports.Token = require(\"./lib/Token\");\nexports.bottomUp = require(\"./lib/bottom-up\");\nexports.RegexTokeniser = require(\"./lib/regex-tokeniser\").RegexTokeniser;\n\nexports.rule = function(ruleBuilder) {\n    var rule;\n    return function(input) {\n        if (!rule) {\n            rule = ruleBuilder();\n        }\n        return rule(input);\n    };\n};\n", "exports.paragraph = paragraph;\nexports.run = run;\nexports.table = table;\nexports.bold = new Matcher(\"bold\");\nexports.italic = new Matcher(\"italic\");\nexports.underline = new Matcher(\"underline\");\nexports.strikethrough = new Matcher(\"strikethrough\");\nexports.allCaps = new Matcher(\"allCaps\");\nexports.smallCaps = new Matcher(\"smallCaps\");\nexports.highlight = highlight;\nexports.commentReference = new Matcher(\"commentReference\");\nexports.lineBreak = new BreakMatcher({breakType: \"line\"});\nexports.pageBreak = new BreakMatcher({breakType: \"page\"});\nexports.columnBreak = new BreakMatcher({breakType: \"column\"});\nexports.equalTo = equalTo;\nexports.startsWith = startsWith;\n\n\nfunction paragraph(options) {\n    return new Matcher(\"paragraph\", options);\n}\n\nfunction run(options) {\n    return new Matcher(\"run\", options);\n}\n\nfunction table(options) {\n    return new Matcher(\"table\", options);\n}\n\nfunction highlight(options) {\n    return new HighlightMatcher(options);\n}\n\nfunction Matcher(elementType, options) {\n    options = options || {};\n    this._elementType = elementType;\n    this._styleId = options.styleId;\n    this._styleName = options.styleName;\n    if (options.list) {\n        this._listIndex = options.list.levelIndex;\n        this._listIsOrdered = options.list.isOrdered;\n    }\n}\n\nMatcher.prototype.matches = function(element) {\n    return element.type === this._elementType &&\n        (this._styleId === undefined || element.styleId === this._styleId) &&\n        (this._styleName === undefined || (element.styleName && this._styleName.operator(this._styleName.operand, element.styleName))) &&\n        (this._listIndex === undefined || isList(element, this._listIndex, this._listIsOrdered)) &&\n        (this._breakType === undefined || this._breakType === element.breakType);\n};\n\nfunction HighlightMatcher(options) {\n    options = options || {};\n    this._color = options.color;\n}\n\nHighlightMatcher.prototype.matches = function(element) {\n    return element.type === \"highlight\" &&\n        (this._color === undefined || element.color === this._color);\n};\n\nfunction BreakMatcher(options) {\n    options = options || {};\n    this._breakType = options.breakType;\n}\n\nBreakMatcher.prototype.matches = function(element) {\n    return element.type === \"break\" &&\n        (this._breakType === undefined || element.breakType === this._breakType);\n};\n\nfunction isList(element, levelIndex, isOrdered) {\n    return element.numbering &&\n        element.numbering.level == levelIndex &&\n        element.numbering.isOrdered == isOrdered;\n}\n\nfunction equalTo(value) {\n    return {\n        operator: operatorEqualTo,\n        operand: value\n    };\n}\n\nfunction startsWith(value) {\n    return {\n        operator: operatorStartsWith,\n        operand: value\n    };\n}\n\nfunction operatorEqualTo(first, second) {\n    return first.toUpperCase() === second.toUpperCase();\n}\n\nfunction operatorStartsWith(first, second) {\n    return second.toUpperCase().indexOf(first.toUpperCase()) === 0;\n}\n", "var lop = require(\"lop\");\nvar RegexTokeniser = lop.RegexTokeniser;\n\nexports.tokenise = tokenise;\n\nvar stringPrefix = \"'((?:\\\\\\\\.|[^'])*)\";\n\nfunction tokenise(string) {\n    var identifierCharacter = \"(?:[a-zA-Z\\\\-_]|\\\\\\\\.)\";\n    var tokeniser = new RegexTokeniser([\n        {name: \"identifier\", regex: new RegExp(\"(\" + identifierCharacter + \"(?:\" + identifierCharacter + \"|[0-9])*)\")},\n        {name: \"dot\", regex: /\\./},\n        {name: \"colon\", regex: /:/},\n        {name: \"gt\", regex: />/},\n        {name: \"whitespace\", regex: /\\s+/},\n        {name: \"arrow\", regex: /=>/},\n        {name: \"equals\", regex: /=/},\n        {name: \"startsWith\", regex: /\\^=/},\n        {name: \"open-paren\", regex: /\\(/},\n        {name: \"close-paren\", regex: /\\)/},\n        {name: \"open-square-bracket\", regex: /\\[/},\n        {name: \"close-square-bracket\", regex: /\\]/},\n        {name: \"string\", regex: new RegExp(stringPrefix + \"'\")},\n        {name: \"unterminated-string\", regex: new RegExp(stringPrefix)},\n        {name: \"integer\", regex: /([0-9]+)/},\n        {name: \"choice\", regex: /\\|/},\n        {name: \"bang\", regex: /(!)/}\n    ]);\n    return tokeniser.tokenise(string);\n}\n", "var _ = require(\"underscore\");\nvar lop = require(\"lop\");\n\nvar documentMatchers = require(\"./styles/document-matchers\");\nvar htmlPaths = require(\"./styles/html-paths\");\nvar tokenise = require(\"./styles/parser/tokeniser\").tokenise;\nvar results = require(\"./results\");\n\nexports.readHtmlPath = readHtmlPath;\nexports.readDocumentMatcher = readDocumentMatcher;\nexports.readStyle = readStyle;\n\n\nfunction readStyle(string) {\n    return parseString(styleRule, string);\n}\n\nfunction createStyleRule() {\n    return lop.rules.sequence(\n        lop.rules.sequence.capture(documentMatcherRule()),\n        lop.rules.tokenOfType(\"whitespace\"),\n        lop.rules.tokenOfType(\"arrow\"),\n        lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n            lop.rules.tokenOfType(\"whitespace\"),\n            lop.rules.sequence.capture(htmlPathRule())\n        ).head())),\n        lop.rules.tokenOfType(\"end\")\n    ).map(function(documentMatcher, htmlPath) {\n        return {\n            from: documentMatcher,\n            to: htmlPath.valueOrElse(htmlPaths.empty)\n        };\n    });\n}\n\nfunction readDocumentMatcher(string) {\n    return parseString(documentMatcherRule(), string);\n}\n\nfunction documentMatcherRule() {\n    var sequence = lop.rules.sequence;\n\n    var identifierToConstant = function(identifier, constant) {\n        return lop.rules.then(\n            lop.rules.token(\"identifier\", identifier),\n            function() {\n                return constant;\n            }\n        );\n    };\n\n    var paragraphRule = identifierToConstant(\"p\", documentMatchers.paragraph);\n    var runRule = identifierToConstant(\"r\", documentMatchers.run);\n\n    var elementTypeRule = lop.rules.firstOf(\"p or r or table\",\n        paragraphRule,\n        runRule\n    );\n\n    var styleIdRule = lop.rules.sequence(\n        lop.rules.tokenOfType(\"dot\"),\n        lop.rules.sequence.cut(),\n        lop.rules.sequence.capture(identifierRule)\n    ).map(function(styleId) {\n        return {styleId: styleId};\n    });\n\n    var styleNameMatcherRule = lop.rules.firstOf(\"style name matcher\",\n        lop.rules.then(\n            lop.rules.sequence(\n                lop.rules.tokenOfType(\"equals\"),\n                lop.rules.sequence.cut(),\n                lop.rules.sequence.capture(stringRule)\n            ).head(),\n            function(styleName) {\n                return {styleName: documentMatchers.equalTo(styleName)};\n            }\n        ),\n        lop.rules.then(\n            lop.rules.sequence(\n                lop.rules.tokenOfType(\"startsWith\"),\n                lop.rules.sequence.cut(),\n                lop.rules.sequence.capture(stringRule)\n            ).head(),\n            function(styleName) {\n                return {styleName: documentMatchers.startsWith(styleName)};\n            }\n        )\n    );\n\n    var styleNameRule = lop.rules.sequence(\n        lop.rules.tokenOfType(\"open-square-bracket\"),\n        lop.rules.sequence.cut(),\n        lop.rules.token(\"identifier\", \"style-name\"),\n        lop.rules.sequence.capture(styleNameMatcherRule),\n        lop.rules.tokenOfType(\"close-square-bracket\")\n    ).head();\n\n\n    var listTypeRule = lop.rules.firstOf(\"list type\",\n        identifierToConstant(\"ordered-list\", {isOrdered: true}),\n        identifierToConstant(\"unordered-list\", {isOrdered: false})\n    );\n    var listRule = sequence(\n        lop.rules.tokenOfType(\"colon\"),\n        sequence.capture(listTypeRule),\n        sequence.cut(),\n        lop.rules.tokenOfType(\"open-paren\"),\n        sequence.capture(integerRule),\n        lop.rules.tokenOfType(\"close-paren\")\n    ).map(function(listType, levelNumber) {\n        return {\n            list: {\n                isOrdered: listType.isOrdered,\n                levelIndex: levelNumber - 1\n            }\n        };\n    });\n\n    function createMatcherSuffixesRule(rules) {\n        var matcherSuffix = lop.rules.firstOf.apply(\n            lop.rules.firstOf,\n            [\"matcher suffix\"].concat(rules)\n        );\n        var matcherSuffixes = lop.rules.zeroOrMore(matcherSuffix);\n        return lop.rules.then(matcherSuffixes, function(suffixes) {\n            var matcherOptions = {};\n            suffixes.forEach(function(suffix) {\n                _.extend(matcherOptions, suffix);\n            });\n            return matcherOptions;\n        });\n    }\n\n    var paragraphOrRun = sequence(\n        sequence.capture(elementTypeRule),\n        sequence.capture(createMatcherSuffixesRule([\n            styleIdRule,\n            styleNameRule,\n            listRule\n        ]))\n    ).map(function(createMatcher, matcherOptions) {\n        return createMatcher(matcherOptions);\n    });\n\n    var table = sequence(\n        lop.rules.token(\"identifier\", \"table\"),\n        sequence.capture(createMatcherSuffixesRule([\n            styleIdRule,\n            styleNameRule\n        ]))\n    ).map(function(options) {\n        return documentMatchers.table(options);\n    });\n\n    var bold = identifierToConstant(\"b\", documentMatchers.bold);\n    var italic = identifierToConstant(\"i\", documentMatchers.italic);\n    var underline = identifierToConstant(\"u\", documentMatchers.underline);\n    var strikethrough = identifierToConstant(\"strike\", documentMatchers.strikethrough);\n    var allCaps = identifierToConstant(\"all-caps\", documentMatchers.allCaps);\n    var smallCaps = identifierToConstant(\"small-caps\", documentMatchers.smallCaps);\n\n    var highlight = sequence(\n        lop.rules.token(\"identifier\", \"highlight\"),\n        lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence(\n            lop.rules.tokenOfType(\"open-square-bracket\"),\n            lop.rules.sequence.cut(),\n            lop.rules.token(\"identifier\", \"color\"),\n            lop.rules.tokenOfType(\"equals\"),\n            lop.rules.sequence.capture(stringRule),\n            lop.rules.tokenOfType(\"close-square-bracket\")\n        ).head()))\n    ).map(function(color) {\n        return documentMatchers.highlight({\n            color: color.valueOrElse(undefined)\n        });\n    });\n\n    var commentReference = identifierToConstant(\"comment-reference\", documentMatchers.commentReference);\n\n    var breakMatcher = sequence(\n        lop.rules.token(\"identifier\", \"br\"),\n        sequence.cut(),\n        lop.rules.tokenOfType(\"open-square-bracket\"),\n        lop.rules.token(\"identifier\", \"type\"),\n        lop.rules.tokenOfType(\"equals\"),\n        sequence.capture(stringRule),\n        lop.rules.tokenOfType(\"close-square-bracket\")\n    ).map(function(breakType) {\n        switch (breakType) {\n        case \"line\":\n            return documentMatchers.lineBreak;\n        case \"page\":\n            return documentMatchers.pageBreak;\n        case \"column\":\n            return documentMatchers.columnBreak;\n        default:\n            // TODO: handle unknown document matchers\n        }\n    });\n\n    return lop.rules.firstOf(\"element type\",\n        paragraphOrRun,\n        table,\n        bold,\n        italic,\n        underline,\n        strikethrough,\n        allCaps,\n        smallCaps,\n        highlight,\n        commentReference,\n        breakMatcher\n    );\n}\n\nfunction readHtmlPath(string) {\n    return parseString(htmlPathRule(), string);\n}\n\nfunction htmlPathRule() {\n    var capture = lop.rules.sequence.capture;\n    var whitespaceRule = lop.rules.tokenOfType(\"whitespace\");\n    var freshRule = lop.rules.then(\n        lop.rules.optional(lop.rules.sequence(\n            lop.rules.tokenOfType(\"colon\"),\n            lop.rules.token(\"identifier\", \"fresh\")\n        )),\n        function(option) {\n            return option.map(function() {\n                return true;\n            }).valueOrElse(false);\n        }\n    );\n\n    var separatorRule = lop.rules.then(\n        lop.rules.optional(lop.rules.sequence(\n            lop.rules.tokenOfType(\"colon\"),\n            lop.rules.token(\"identifier\", \"separator\"),\n            lop.rules.tokenOfType(\"open-paren\"),\n            capture(stringRule),\n            lop.rules.tokenOfType(\"close-paren\")\n        ).head()),\n        function(option) {\n            return option.valueOrElse(\"\");\n        }\n    );\n\n    var tagNamesRule = lop.rules.oneOrMoreWithSeparator(\n        identifierRule,\n        lop.rules.tokenOfType(\"choice\")\n    );\n\n    var styleElementRule = lop.rules.sequence(\n        capture(tagNamesRule),\n        capture(lop.rules.zeroOrMore(attributeOrClassRule)),\n        capture(freshRule),\n        capture(separatorRule)\n    ).map(function(tagName, attributesList, fresh, separator) {\n        var attributes = {};\n        var options = {};\n        attributesList.forEach(function(attribute) {\n            if (attribute.append && attributes[attribute.name]) {\n                attributes[attribute.name] += \" \" + attribute.value;\n            } else {\n                attributes[attribute.name] = attribute.value;\n            }\n        });\n        if (fresh) {\n            options.fresh = true;\n        }\n        if (separator) {\n            options.separator = separator;\n        }\n        return htmlPaths.element(tagName, attributes, options);\n    });\n\n    return lop.rules.firstOf(\"html path\",\n        lop.rules.then(lop.rules.tokenOfType(\"bang\"), function() {\n            return htmlPaths.ignore;\n        }),\n        lop.rules.then(\n            lop.rules.zeroOrMoreWithSeparator(\n                styleElementRule,\n                lop.rules.sequence(\n                    whitespaceRule,\n                    lop.rules.tokenOfType(\"gt\"),\n                    whitespaceRule\n                )\n            ),\n            htmlPaths.elements\n        )\n    );\n}\n\nvar identifierRule = lop.rules.then(\n    lop.rules.tokenOfType(\"identifier\"),\n    decodeEscapeSequences\n);\nvar integerRule = lop.rules.tokenOfType(\"integer\");\n\nvar stringRule = lop.rules.then(\n    lop.rules.tokenOfType(\"string\"),\n    decodeEscapeSequences\n);\n\nvar escapeSequences = {\n    \"n\": \"\\n\",\n    \"r\": \"\\r\",\n    \"t\": \"\\t\"\n};\n\nfunction decodeEscapeSequences(value) {\n    return value.replace(/\\\\(.)/g, function(match, code) {\n        return escapeSequences[code] || code;\n    });\n}\n\nvar attributeRule = lop.rules.sequence(\n    lop.rules.tokenOfType(\"open-square-bracket\"),\n    lop.rules.sequence.cut(),\n    lop.rules.sequence.capture(identifierRule),\n    lop.rules.tokenOfType(\"equals\"),\n    lop.rules.sequence.capture(stringRule),\n    lop.rules.tokenOfType(\"close-square-bracket\")\n).map(function(name, value) {\n    return {name: name, value: value, append: false};\n});\n\nvar classRule = lop.rules.sequence(\n    lop.rules.tokenOfType(\"dot\"),\n    lop.rules.sequence.cut(),\n    lop.rules.sequence.capture(identifierRule)\n).map(function(className) {\n    return {name: \"class\", value: className, append: true};\n});\n\nvar attributeOrClassRule = lop.rules.firstOf(\n    \"attribute or class\",\n    attributeRule,\n    classRule\n);\n\nfunction parseString(rule, string) {\n    var tokens = tokenise(string);\n    var parser = lop.Parser();\n    var parseResult = parser.parseTokens(rule, tokens);\n    if (parseResult.isSuccess()) {\n        return results.success(parseResult.value());\n    } else {\n        return new results.Result(null, [results.warning(describeFailure(string, parseResult))]);\n    }\n}\n\nfunction describeFailure(input, parseResult) {\n    return \"Did not understand this style mapping, so ignored it: \" + input + \"\\n\" +\n        parseResult.errors().map(describeError).join(\"\\n\");\n}\n\nfunction describeError(error) {\n    return \"Error was at character number \" + error.characterNumber() + \": \" +\n        \"Expected \" + error.expected + \" but got \" + error.actual;\n}\n\nvar styleRule = createStyleRule();\n", "exports.readOptions = readOptions;\n\n\nvar _ = require(\"underscore\");\n\nvar defaultStyleMap = exports._defaultStyleMap = [\n    \"p.Heading1 => h1:fresh\",\n    \"p.Heading2 => h2:fresh\",\n    \"p.Heading3 => h3:fresh\",\n    \"p.Heading4 => h4:fresh\",\n    \"p.Heading5 => h5:fresh\",\n    \"p.Heading6 => h6:fresh\",\n    \"p[style-name='Heading 1'] => h1:fresh\",\n    \"p[style-name='Heading 2'] => h2:fresh\",\n    \"p[style-name='Heading 3'] => h3:fresh\",\n    \"p[style-name='Heading 4'] => h4:fresh\",\n    \"p[style-name='Heading 5'] => h5:fresh\",\n    \"p[style-name='Heading 6'] => h6:fresh\",\n    \"p[style-name='heading 1'] => h1:fresh\",\n    \"p[style-name='heading 2'] => h2:fresh\",\n    \"p[style-name='heading 3'] => h3:fresh\",\n    \"p[style-name='heading 4'] => h4:fresh\",\n    \"p[style-name='heading 5'] => h5:fresh\",\n    \"p[style-name='heading 6'] => h6:fresh\",\n\n    // Apple Pages\n    \"p.Heading => h1:fresh\",\n    \"p[style-name='Heading'] => h1:fresh\",\n\n    \"r[style-name='Strong'] => strong\",\n\n    \"p[style-name='footnote text'] => p:fresh\",\n    \"r[style-name='footnote reference'] =>\",\n    \"p[style-name='endnote text'] => p:fresh\",\n    \"r[style-name='endnote reference'] =>\",\n    \"p[style-name='annotation text'] => p:fresh\",\n    \"r[style-name='annotation reference'] =>\",\n\n    // LibreOffice\n    \"p[style-name='Footnote'] => p:fresh\",\n    \"r[style-name='Footnote anchor'] =>\",\n    \"p[style-name='Endnote'] => p:fresh\",\n    \"r[style-name='Endnote anchor'] =>\",\n\n    \"p:unordered-list(1) => ul > li:fresh\",\n    \"p:unordered-list(2) => ul|ol > li > ul > li:fresh\",\n    \"p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh\",\n    \"p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n    \"p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh\",\n    \"p:ordered-list(1) => ol > li:fresh\",\n    \"p:ordered-list(2) => ul|ol > li > ol > li:fresh\",\n    \"p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh\",\n    \"p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n    \"p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh\",\n\n    \"r[style-name='Hyperlink'] =>\",\n\n    \"p[style-name='Normal'] => p:fresh\",\n\n    // Apple Pages\n    \"p.Body => p:fresh\",\n    \"p[style-name='Body'] => p:fresh\"\n];\n\nvar standardOptions = exports._standardOptions = {\n    externalFileAccess: false,\n    transformDocument: identity,\n    includeDefaultStyleMap: true,\n    includeEmbeddedStyleMap: true\n};\n\nfunction readOptions(options) {\n    options = options || {};\n    return _.extend({}, standardOptions, options, {\n        customStyleMap: readStyleMap(options.styleMap),\n        readStyleMap: function() {\n            var styleMap = this.customStyleMap;\n            if (this.includeEmbeddedStyleMap) {\n                styleMap = styleMap.concat(readStyleMap(this.embeddedStyleMap));\n            }\n            if (this.includeDefaultStyleMap) {\n                styleMap = styleMap.concat(defaultStyleMap);\n            }\n            return styleMap;\n        }\n    });\n}\n\nfunction readStyleMap(styleMap) {\n    if (!styleMap) {\n        return [];\n    } else if (_.isString(styleMap)) {\n        return styleMap.split(\"\\n\")\n            .map(function(line) {\n                return line.trim();\n            })\n            .filter(function(line) {\n                return line !== \"\" && line.charAt(0) !== \"#\";\n            });\n    } else {\n        return styleMap;\n    }\n}\n\nfunction identity(value) {\n    return value;\n}\n", "var fs = require(\"fs\");\n\nvar promises = require(\"./promises\");\nvar zipfile = require(\"./zipfile\");\n\nexports.openZip = openZip;\n\nvar readFile = promises.promisify(fs.readFile);\n\nfunction openZip(options) {\n    if (options.path) {\n        return readFile(options.path).then(zipfile.openArrayBuffer);\n    } else if (options.buffer) {\n        return promises.resolve(zipfile.openArrayBuffer(options.buffer));\n    } else if (options.file) {\n        return promises.resolve(options.file);\n    } else {\n        return promises.reject(new Error(\"Could not find file in options\"));\n    }\n}\n", "var htmlPaths = require(\"./styles/html-paths\");\nvar Html = require(\"./html\");\n\n\nexports.element = element;\n\nfunction element(name) {\n    return function(html) {\n        return Html.elementWithTag(htmlPaths.element(name), [html]);\n    };\n}\n", "var _ = require(\"underscore\");\n\nvar docxReader = require(\"./docx/docx-reader\");\nvar docxStyleMap = require(\"./docx/style-map\");\nvar DocumentConverter = require(\"./document-to-html\").DocumentConverter;\nvar convertElementToRawText = require(\"./raw-text\").convertElementToRawText;\nvar readStyle = require(\"./style-reader\").readStyle;\nvar readOptions = require(\"./options-reader\").readOptions;\nvar unzip = require(\"./unzip\");\nvar Result = require(\"./results\").Result;\n\nexports.convertToHtml = convertToHtml;\nexports.convertToMarkdown = convertToMarkdown;\nexports.convert = convert;\nexports.extractRawText = extractRawText;\nexports.images = require(\"./images\");\nexports.transforms = require(\"./transforms\");\nexports.underline = require(\"./underline\");\nexports.embedStyleMap = embedStyleMap;\nexports.readEmbeddedStyleMap = readEmbeddedStyleMap;\n\nfunction convertToHtml(input, options) {\n    return convert(input, options);\n}\n\nfunction convertToMarkdown(input, options) {\n    var markdownOptions = Object.create(options || {});\n    markdownOptions.outputFormat = \"markdown\";\n    return convert(input, markdownOptions);\n}\n\nfunction convert(input, options) {\n    options = readOptions(options);\n\n    return unzip.openZip(input)\n        .tap(function(docxFile) {\n            return docxStyleMap.readStyleMap(docxFile).then(function(styleMap) {\n                options.embeddedStyleMap = styleMap;\n            });\n        })\n        .then(function(docxFile) {\n            return docxReader.read(docxFile, input, options)\n                .then(function(documentResult) {\n                    return documentResult.map(options.transformDocument);\n                })\n                .then(function(documentResult) {\n                    return convertDocumentToHtml(documentResult, options);\n                });\n        });\n}\n\nfunction readEmbeddedStyleMap(input) {\n    return unzip.openZip(input)\n        .then(docxStyleMap.readStyleMap);\n}\n\nfunction convertDocumentToHtml(documentResult, options) {\n    var styleMapResult = parseStyleMap(options.readStyleMap());\n    var parsedOptions = _.extend({}, options, {\n        styleMap: styleMapResult.value\n    });\n    var documentConverter = new DocumentConverter(parsedOptions);\n\n    return documentResult.flatMapThen(function(document) {\n        return styleMapResult.flatMapThen(function(styleMap) {\n            return documentConverter.convertToHtml(document);\n        });\n    });\n}\n\nfunction parseStyleMap(styleMap) {\n    return Result.combine((styleMap || []).map(readStyle))\n        .map(function(styleMap) {\n            return styleMap.filter(function(styleMapping) {\n                return !!styleMapping;\n            });\n        });\n}\n\n\nfunction extractRawText(input) {\n    return unzip.openZip(input)\n        .then(docxReader.read)\n        .then(function(documentResult) {\n            return documentResult.map(convertElementToRawText);\n        });\n}\n\nfunction embedStyleMap(input, styleMap) {\n    return unzip.openZip(input)\n        .tap(function(docxFile) {\n            return docxStyleMap.writeStyleMap(docxFile, styleMap);\n        })\n        .then(function(docxFile) {\n            return docxFile.toArrayBuffer();\n        })\n        .then(function(arrayBuffer) {\n            return {\n                toArrayBuffer: function() {\n                    return arrayBuffer;\n                },\n                toBuffer: function() {\n                    return Buffer.from(arrayBuffer);\n                }\n            };\n        });\n}\n\nexports.styleMapping = function() {\n    throw new Error('Use a raw string instead of mammoth.styleMapping e.g. \"p[style-name=\\'Title\\'] => h1\" instead of mammoth.styleMapping(\"p[style-name=\\'Title\\'] => h1\")');\n};\n", "function normalizeNewlines(value) {\n    return value.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n}\nfunction normalizeText(value) {\n    return normalizeNewlines(value)\n        .replace(/[ \\t]+\\n/g, \"\\n\")\n        .replace(/[ \\t]{2,}/g, \" \")\n        .replace(/\\s+([,.;:!?])/g, \"$1\")\n        .replace(/\\n{3,}/g, \"\\n\\n\")\n        .trim();\n}\nfunction decodeHtmlEntities(value) {\n    return value\n        .replace(/&nbsp;/gi, \" \")\n        .replace(/&amp;/gi, \"&\")\n        .replace(/&lt;/gi, \"<\")\n        .replace(/&gt;/gi, \">\")\n        .replace(/&quot;/gi, '\"')\n        .replace(/&#39;/gi, \"'\");\n}\nfunction htmlToMarkdown(html) {\n    let output = html;\n    output = output.replace(/<script[\\s\\S]*?<\\/script>/gi, \"\");\n    output = output.replace(/<style[\\s\\S]*?<\\/style>/gi, \"\");\n    output = output.replace(/<h([1-6])[^>]*>([\\s\\S]*?)<\\/h\\1>/gi, (_match, level, content) => {\n        const depth = Number(level);\n        return `${\"#\".repeat(depth)} ${decodeHtmlEntities(content.replace(/<[^>]+>/g, \" \").trim())}\\n\\n`;\n    });\n    output = output.replace(/<(br|hr)\\s*\\/?>/gi, \"\\n\");\n    output = output.replace(/<\\/(p|div|section|article|li|ul|ol|table|tr)>/gi, \"\\n\");\n    output = output.replace(/<(p|div|section|article|li|ul|ol|table|tr|td|th)[^>]*>/gi, \" \");\n    output = output.replace(/<[^>]+>/g, \" \");\n    return normalizeText(decodeHtmlEntities(output));\n}\nfunction parseCsv(text) {\n    const rows = [];\n    let row = [];\n    let field = \"\";\n    let inQuotes = false;\n    for (let index = 0; index < text.length; index += 1) {\n        const char = text[index];\n        if (inQuotes) {\n            if (char === '\"') {\n                if (text[index + 1] === '\"') {\n                    field += '\"';\n                    index += 1;\n                }\n                else {\n                    inQuotes = false;\n                }\n            }\n            else {\n                field += char;\n            }\n            continue;\n        }\n        if (char === '\"') {\n            inQuotes = true;\n        }\n        else if (char === \",\") {\n            row.push(field.trim());\n            field = \"\";\n        }\n        else if (char === \"\\n\" || (char === \"\\r\" && text[index + 1] === \"\\n\")) {\n            row.push(field.trim());\n            if (row.some((value) => value.length > 0)) {\n                rows.push(row);\n            }\n            row = [];\n            field = \"\";\n            if (char === \"\\r\") {\n                index += 1;\n            }\n        }\n        else {\n            field += char;\n        }\n    }\n    row.push(field.trim());\n    if (row.some((value) => value.length > 0)) {\n        rows.push(row);\n    }\n    return rows;\n}\nfunction csvToMarkdown(text) {\n    const rows = parseCsv(text);\n    if (rows.length === 0) {\n        return { markdown: \"\", plainText: \"\" };\n    }\n    if (rows.length === 1) {\n        const single = rows[0].join(\", \");\n        return { markdown: single, plainText: single };\n    }\n    const header = rows[0];\n    const body = rows.slice(1);\n    const table = [\n        `| ${header.join(\" | \")} |`,\n        `| ${header.map(() => \"---\").join(\" | \")} |`,\n        ...body.map((row) => `| ${header.map((_, index) => row[index] ?? \"\").join(\" | \")} |`),\n    ].join(\"\\n\");\n    const plainText = body\n        .map((row) => header.map((title, index) => `${title}: ${row[index] ?? \"\"}`).join(\", \"))\n        .join(\"\\n\");\n    return { markdown: table, plainText };\n}\nfunction buildPages(text) {\n    return [\n        {\n            page: 1,\n            charStart: 0,\n            charEnd: text.length,\n            previewText: text.slice(0, 160),\n        },\n    ];\n}\nfunction buildFallbackSection(markdown, title) {\n    return [\n        {\n            id: \"section-1\",\n            title,\n            depth: 1,\n            path: title ? [title] : [],\n            pageStart: 1,\n            pageEnd: 1,\n            charStart: 0,\n            charEnd: markdown.length,\n        },\n    ];\n}\nfunction deriveSections(markdown) {\n    const headingRegex = /^(#{1,6})\\s+(.+)$/gm;\n    const matches = Array.from(markdown.matchAll(headingRegex));\n    if (matches.length === 0) {\n        return buildFallbackSection(markdown);\n    }\n    const sections = [];\n    const pathStack = [];\n    for (let index = 0; index < matches.length; index += 1) {\n        const match = matches[index];\n        const depth = match[1].length;\n        const title = match[2].trim();\n        const charStart = match.index ?? 0;\n        const charEnd = index + 1 < matches.length ? (matches[index + 1].index ?? markdown.length) : markdown.length;\n        pathStack.splice(depth - 1);\n        pathStack[depth - 1] = title;\n        sections.push({\n            id: `section-${index + 1}`,\n            title,\n            depth,\n            path: pathStack.filter(Boolean),\n            pageStart: 1,\n            pageEnd: 1,\n            charStart,\n            charEnd,\n        });\n    }\n    return sections;\n}\nasync function extractPdf(buffer) {\n    const { PDFParse } = await import(\"pdf-parse\");\n    const parser = new PDFParse({ data: buffer });\n    try {\n        const parsed = await parser.getText();\n        const text = normalizeText(parsed.text ?? \"\");\n        return {\n            markdown: text,\n            text,\n        };\n    }\n    finally {\n        await parser.destroy().catch(() => { });\n    }\n}\nasync function extractDocx(buffer) {\n    const mammoth = (await import(\"mammoth\"));\n    const markdownResult = await mammoth.convertToMarkdown({ buffer });\n    const markdown = normalizeText(markdownResult.value ?? \"\");\n    return {\n        markdown,\n        text: normalizeText(markdown.replace(/^#{1,6}\\s+/gm, \"\")),\n    };\n}\nexport async function extractLocalDocument(input) {\n    const warnings = [];\n    const type = input.mimeType.toLowerCase();\n    let markdown = \"\";\n    let text = \"\";\n    if (type === \"text/html\") {\n        markdown = htmlToMarkdown(input.buffer.toString(\"utf-8\"));\n        text = normalizeText(markdown.replace(/^#{1,6}\\s+/gm, \"\"));\n    }\n    else if (type === \"text/csv\") {\n        const csv = csvToMarkdown(input.buffer.toString(\"utf-8\"));\n        markdown = normalizeText(csv.markdown);\n        text = normalizeText(csv.plainText);\n    }\n    else if (type === \"text/plain\" || type === \"text/markdown\" || type.startsWith(\"text/\")) {\n        markdown = normalizeText(input.buffer.toString(\"utf-8\"));\n        text = markdown;\n    }\n    else if (type === \"application/pdf\") {\n        try {\n            const extracted = await extractPdf(input.buffer);\n            markdown = extracted.markdown;\n            text = extracted.text;\n        }\n        catch (error) {\n            warnings.push(`local pdf extraction unavailable: ${error instanceof Error ? error.message : String(error)}`);\n        }\n    }\n    else if (type === \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\") {\n        try {\n            const extracted = await extractDocx(input.buffer);\n            markdown = extracted.markdown;\n            text = extracted.text;\n        }\n        catch (error) {\n            warnings.push(`local docx extraction unavailable: ${error instanceof Error ? error.message : String(error)}`);\n        }\n    }\n    else {\n        throw new Error(`unsupported local mime type: ${input.mimeType}`);\n    }\n    const normalizedMarkdown = normalizeText(markdown);\n    const normalizedText = normalizeText(text || markdown);\n    return {\n        text: normalizedText,\n        markdown: normalizedMarkdown,\n        pages: buildPages(normalizedText || normalizedMarkdown),\n        sections: deriveSections(normalizedMarkdown || normalizedText),\n        warnings,\n    };\n}\nexport function resolveDocumentSourceKey(input, filename) {\n    return input.filename?.trim() || filename || input.storageId;\n}\n", "import { sql } from \"drizzle-orm\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction buildOwnerScopeClause(ownerUserId) {\n    return ownerUserId == null ? sql `AND owner_user_id IS NULL` : sql `AND owner_user_id = ${ownerUserId}`;\n}\nexport function parsePrivateExternalCorpusAllowlist(value) {\n    return (value ?? \"\")\n        .split(\",\")\n        .map((entry) => entry.trim())\n        .filter(Boolean);\n}\nexport function matchesAccessibleCorpusOwner(viewerUserId, ownerUserId) {\n    return ownerUserId == null || ownerUserId === viewerUserId;\n}\nexport async function loadRagCorpusPolicyByScope(db, params) {\n    const result = await db.execute(sql `\n        SELECT *\n        FROM rag_corpora\n        WHERE corpus = ${params.corpus}\n          AND visibility_scope = ${params.visibility}\n          ${buildOwnerScopeClause(params.ownerUserId)}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function loadAccessibleRagCorpusPolicy(db, params) {\n    const row = await loadRagCorpusPolicyByScope(db, params);\n    if (!row || !matchesAccessibleCorpusOwner(params.viewerUserId, row.owner_user_id)) {\n        return null;\n    }\n    return row;\n}\nexport async function resolveAllowExternalProvidersPolicy(params) {\n    if (params.db) {\n        const row = await loadRagCorpusPolicyByScope(params.db, {\n            corpus: params.corpus,\n            visibility: params.visibility,\n            ownerUserId: params.ownerUserId,\n        });\n        if (row) {\n            return !!row.allow_external_providers;\n        }\n    }\n    if (params.visibility !== \"private\") {\n        return true;\n    }\n    return (params.allowPrivateExternalCorpora ?? []).includes(params.corpus);\n}\n", "import { createHash } from \"crypto\";\nimport { buildDocumentCacheKey } from \"@gencow/core\";\nimport { extractLocalDocument, resolveDocumentSourceKey } from \"./document-convert-local.js\";\nimport { resolveAllowExternalProvidersPolicy } from \"./rag-corpus-policy.js\";\nconst MAX_DOCUMENT_SIZE_BYTES = 50 * 1024 * 1024;\nconst DEFAULT_DOCUMENT_PROXY_PATH = \"/convert\";\nconst SUPPORTED_MIME_TYPES = new Set([\n    \"application/pdf\",\n    \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    \"application/haansofthwp\",\n    \"application/x-hwp\",\n    \"application/vnd.hancom.hwp\",\n    \"application/vnd.hancom.hwpx\",\n    \"application/x-hwpx\",\n    \"application/vnd.hancom.hwpml\",\n    \"application/x-hwpml\",\n    \"text/plain\",\n    \"text/markdown\",\n    \"text/html\",\n    \"text/csv\",\n]);\nconst PLATFORM_AUTO_MIME_TYPES = new Set([\n    \"application/pdf\",\n    \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    \"application/haansofthwp\",\n    \"application/x-hwp\",\n    \"application/vnd.hancom.hwp\",\n    \"application/vnd.hancom.hwpx\",\n    \"application/x-hwpx\",\n    \"application/vnd.hancom.hwpml\",\n    \"application/x-hwpml\",\n]);\nconst PLATFORM_AUTO_EXTENSIONS = new Set([\".pdf\", \".docx\", \".xlsx\", \".hwp\", \".hwpx\", \".hwpml\"]);\nconst documentConvertCache = new Map();\nexport const WORKFLOW_DOCUMENT_SERVICE_FACTORY = Symbol.for(\"gencow.workflow.document.serviceFactory\");\nexport class DocumentConvertRuntimeError extends Error {\n    code;\n    status;\n    constructor(message, options) {\n        super(message);\n        this.name = \"DocumentConvertRuntimeError\";\n        this.code = options.code;\n        this.status = options.status;\n    }\n}\nfunction cloneResult(result) {\n    return {\n        text: result.text,\n        markdown: result.markdown,\n        pages: result.pages.map((page) => ({ ...page })),\n        sections: result.sections.map((section) => ({ ...section, path: [...section.path] })),\n        warnings: [...result.warnings],\n        providerTrace: { ...result.providerTrace },\n    };\n}\nfunction inferMimeTypeFromFilename(fallbackName) {\n    const loweredName = fallbackName.toLowerCase();\n    if (loweredName.endsWith(\".html\") || loweredName.endsWith(\".htm\"))\n        return \"text/html\";\n    if (loweredName.endsWith(\".csv\"))\n        return \"text/csv\";\n    if (loweredName.endsWith(\".md\"))\n        return \"text/markdown\";\n    if (loweredName.endsWith(\".txt\"))\n        return \"text/plain\";\n    if (loweredName.endsWith(\".pdf\"))\n        return \"application/pdf\";\n    if (loweredName.endsWith(\".docx\"))\n        return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n    if (loweredName.endsWith(\".xlsx\"))\n        return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n    if (loweredName.endsWith(\".hwp\"))\n        return \"application/haansofthwp\";\n    if (loweredName.endsWith(\".hwpx\"))\n        return \"application/vnd.hancom.hwpx\";\n    if (loweredName.endsWith(\".hwpml\"))\n        return \"application/vnd.hancom.hwpml\";\n    return \"application/octet-stream\";\n}\nfunction normalizeMimeType(value, fallbackName) {\n    const trimmed = value?.trim().toLowerCase().split(\";\")[0];\n    if (!trimmed || trimmed === \"application/octet-stream\" || trimmed === \"binary/octet-stream\") {\n        return inferMimeTypeFromFilename(fallbackName);\n    }\n    return trimmed;\n}\nfunction resolveOwnerUserId(input, auth) {\n    if (input.visibility !== \"private\") {\n        return input.ownerUserId?.trim() || null;\n    }\n    const user = auth.requireAuth();\n    if (input.ownerUserId && input.ownerUserId !== user.id) {\n        throw new DocumentConvertRuntimeError(\"ownerUserId must match the authenticated workflow owner\", {\n            code: \"DOCUMENT_OWNER_MISMATCH\",\n            status: 403,\n        });\n    }\n    return input.ownerUserId ?? user.id;\n}\nfunction ensureSupportedMimeType(mimeType) {\n    if (SUPPORTED_MIME_TYPES.has(mimeType) || mimeType.startsWith(\"text/\")) {\n        return;\n    }\n    throw new DocumentConvertRuntimeError(`Unsupported document type: ${mimeType}`, {\n        code: \"DOCUMENT_UNSUPPORTED_TYPE\",\n        status: 400,\n    });\n}\nfunction resolveDocumentProxyEndpoint(documentProxyUrl) {\n    const trimmed = documentProxyUrl.replace(/\\/$/, \"\");\n    return trimmed.endsWith(\"/convert\") ? trimmed : `${trimmed}${DEFAULT_DOCUMENT_PROXY_PATH}`;\n}\nfunction buildCacheKey(params) {\n    return buildDocumentCacheKey({\n        appId: params.appName,\n        ownerUserId: params.ownerUserId,\n        corpus: params.corpus,\n        sourceKey: params.sourceKey,\n        checksum: params.checksum,\n        provider: params.provider,\n        artifact: \"convert\",\n    });\n}\nfunction resolveFileExtension(filename) {\n    return filename.toLowerCase().match(/\\.[a-z0-9]+$/)?.[0] ?? \"\";\n}\nfunction isExplicitExternalProvider(input) {\n    const provider = input.provider;\n    return Boolean(provider && provider !== \"auto\" && provider !== \"local_text\");\n}\nfunction shouldPreferPlatformAuto(input, mimeType, filename) {\n    const mode = input.mode ?? \"auto\";\n    const provider = input.provider ?? \"auto\";\n    if (mode !== \"auto\" || provider !== \"auto\")\n        return false;\n    return (PLATFORM_AUTO_MIME_TYPES.has(mimeType) || PLATFORM_AUTO_EXTENSIONS.has(resolveFileExtension(filename)));\n}\nfunction resolveExternalCandidateProviders(input) {\n    const mode = input.mode ?? \"auto\";\n    const requestedProvider = input.provider;\n    if (mode === \"force-ocr\") {\n        if (requestedProvider && requestedProvider !== \"auto\" && requestedProvider !== \"local_text\") {\n            return [requestedProvider];\n        }\n        return [\"opendataloader\", \"openai\", \"gemini\", \"ocr\", \"custom_vlm\"];\n    }\n    if (requestedProvider && requestedProvider !== \"auto\" && requestedProvider !== \"local_text\") {\n        return [requestedProvider];\n    }\n    const providers = [\"kordoc\", \"opendataloader\"];\n    if (mode === \"force-external\" || mode === \"prefer-external\" || input.paidFallback === true) {\n        providers.push(\"gemini\", \"openai\", \"ocr\", \"custom_vlm\");\n    }\n    return providers;\n}\nfunction resolveInitialCacheLookupProviders(input, mimeType, filename) {\n    const mode = input.mode ?? \"auto\";\n    if (mode === \"force-ocr\" &&\n        (!input.provider || input.provider === \"auto\" || input.provider === \"local_text\")) {\n        return [];\n    }\n    if (isExplicitExternalProvider(input)) {\n        return resolveExternalCandidateProviders(input);\n    }\n    if (mode === \"force-external\" || mode === \"force-ocr\") {\n        return resolveExternalCandidateProviders(input);\n    }\n    if (mode === \"prefer-external\") {\n        return [...resolveExternalCandidateProviders(input), \"local_text\"];\n    }\n    if (shouldPreferPlatformAuto(input, mimeType, filename)) {\n        return resolveExternalCandidateProviders(input);\n    }\n    return [\"local_text\"];\n}\nasync function callExternalDocumentProxy(params) {\n    if (!params.documentProxyUrl) {\n        throw new DocumentConvertRuntimeError(\"Document proxy is not configured\", {\n            code: \"DOCUMENT_CONVERT_UNAVAILABLE\",\n            status: 503,\n        });\n    }\n    let response;\n    try {\n        response = await (params.fetchImpl ?? fetch)(resolveDocumentProxyEndpoint(params.documentProxyUrl), {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                ...(params.appToken ? { \"X-App-Token\": params.appToken } : {}),\n            },\n            body: JSON.stringify({\n                appName: params.appName,\n                workflowId: params.workflowId,\n                workflowName: params.workflowName,\n                input: {\n                    ...params.input,\n                    ownerUserId: params.ownerUserId ?? undefined,\n                    filename: params.filename,\n                    mimeType: params.mimeType,\n                },\n                file: {\n                    name: params.filename,\n                    type: params.mimeType,\n                    size: params.buffer.length,\n                    checksum: params.checksum,\n                    base64: params.buffer.toString(\"base64\"),\n                },\n            }),\n        });\n    }\n    catch (error) {\n        throw new DocumentConvertRuntimeError(error instanceof Error ? error.message : \"Document proxy request failed\", {\n            code: \"DOCUMENT_CONVERT_UNAVAILABLE\",\n            status: 503,\n        });\n    }\n    if (!response.ok) {\n        const contentType = response.headers.get(\"content-type\") || \"\";\n        let message = `Document proxy failed with status ${response.status}`;\n        let code = response.status >= 500 ? \"DOCUMENT_CONVERT_UNAVAILABLE\" : \"DOCUMENT_CONVERT_PROXY_FAILED\";\n        if (contentType.includes(\"application/json\")) {\n            const payload = (await response.json().catch(() => null));\n            message = payload?.error?.message?.trim() || payload?.message?.trim() || message;\n            code = payload?.error?.code?.trim() || payload?.code?.trim() || code;\n        }\n        else {\n            const body = await response.text().catch(() => \"\");\n            if (body.trim()) {\n                message = body.trim();\n            }\n        }\n        throw new DocumentConvertRuntimeError(message, {\n            code,\n            status: response.status,\n        });\n    }\n    return (await response.json());\n}\nexport function createDocumentConvertService(options) {\n    return {\n        async convert(input) {\n            if (!options.workflowId) {\n                throw new DocumentConvertRuntimeError(\"document.convert() is only available inside workflow()\", {\n                    code: \"DOCUMENT_CONVERT_WORKFLOW_ONLY\",\n                    status: 400,\n                });\n            }\n            if (!input.corpus?.trim()) {\n                throw new DocumentConvertRuntimeError(\"corpus is required\", {\n                    code: \"DOCUMENT_CORPUS_REQUIRED\",\n                    status: 400,\n                });\n            }\n            const startedAt = (options.now ?? Date.now)();\n            const stored = await options.storage.get(input.storageId);\n            if (!stored) {\n                throw new DocumentConvertRuntimeError(`storageId not found: ${input.storageId}`, {\n                    code: \"DOCUMENT_STORAGE_NOT_FOUND\",\n                    status: 404,\n                });\n            }\n            if (stored.size > MAX_DOCUMENT_SIZE_BYTES) {\n                throw new DocumentConvertRuntimeError(\"File too large for document conversion\", {\n                    code: \"DOCUMENT_TOO_LARGE\",\n                    status: 413,\n                });\n            }\n            const filename = input.filename?.trim() || stored.name;\n            const mimeType = normalizeMimeType(input.mimeType || stored.type, filename);\n            ensureSupportedMimeType(mimeType);\n            const ownerUserId = resolveOwnerUserId(input, options.auth);\n            const checksum = createHash(\"sha256\").update(stored.buffer).digest(\"hex\");\n            const sourceKey = resolveDocumentSourceKey(input, filename);\n            const mode = input.mode ?? \"auto\";\n            const externalAllowed = await (options.resolveExternalPolicy\n                ? options.resolveExternalPolicy({\n                    corpus: input.corpus,\n                    visibility: input.visibility,\n                    ownerUserId,\n                })\n                : resolveAllowExternalProvidersPolicy({\n                    corpus: input.corpus,\n                    visibility: input.visibility,\n                    ownerUserId,\n                    allowPrivateExternalCorpora: options.allowPrivateExternalCorpora,\n                }));\n            for (const cacheProvider of resolveInitialCacheLookupProviders(input, mimeType, filename)) {\n                const cached = documentConvertCache.get(buildCacheKey({\n                    appName: options.appName,\n                    ownerUserId,\n                    corpus: input.corpus,\n                    sourceKey,\n                    checksum,\n                    provider: cacheProvider,\n                }));\n                if (cached) {\n                    return cloneResult(cached);\n                }\n            }\n            const requiresExternal = mode === \"force-external\" || mode === \"force-ocr\" || isExplicitExternalProvider(input);\n            const prefersExternal = mode === \"prefer-external\" || shouldPreferPlatformAuto(input, mimeType, filename);\n            let externalAttemptError = null;\n            if ((requiresExternal || prefersExternal) && !externalAllowed) {\n                if (requiresExternal) {\n                    throw new DocumentConvertRuntimeError(\"external provider is required but denied for this private corpus\", {\n                        code: \"DOCUMENT_EXTERNAL_PROVIDER_REQUIRED\",\n                        status: 422,\n                    });\n                }\n            }\n            if ((requiresExternal || prefersExternal) && externalAllowed) {\n                try {\n                    const externalResult = await callExternalDocumentProxy({\n                        ...options,\n                        input,\n                        filename,\n                        mimeType,\n                        buffer: stored.buffer,\n                        checksum,\n                        ownerUserId,\n                    });\n                    documentConvertCache.set(buildCacheKey({\n                        appName: options.appName,\n                        ownerUserId,\n                        corpus: input.corpus,\n                        sourceKey,\n                        checksum,\n                        provider: externalResult.providerTrace.provider,\n                    }), cloneResult(externalResult));\n                    return externalResult;\n                }\n                catch (error) {\n                    if (requiresExternal) {\n                        throw error;\n                    }\n                    externalAttemptError = error;\n                }\n            }\n            let extracted;\n            try {\n                extracted = await extractLocalDocument({\n                    filename,\n                    mimeType,\n                    buffer: stored.buffer,\n                });\n            }\n            catch (error) {\n                extracted = {\n                    text: \"\",\n                    markdown: \"\",\n                    pages: [],\n                    sections: [],\n                    warnings: [\n                        `local extraction unavailable: ${error instanceof Error ? error.message : String(error)}`,\n                    ],\n                };\n            }\n            if (!extracted.text && !extracted.markdown) {\n                if (mode === \"text-only\" || mode === \"no-external-provider\" || !externalAllowed) {\n                    throw new DocumentConvertRuntimeError(\"local extraction produced no usable text\", {\n                        code: \"DOCUMENT_EXTERNAL_PROVIDER_REQUIRED\",\n                        status: 422,\n                    });\n                }\n                if (externalAttemptError) {\n                    throw externalAttemptError;\n                }\n                for (const cacheProvider of resolveExternalCandidateProviders(input)) {\n                    const cached = documentConvertCache.get(buildCacheKey({\n                        appName: options.appName,\n                        ownerUserId,\n                        corpus: input.corpus,\n                        sourceKey,\n                        checksum,\n                        provider: cacheProvider,\n                    }));\n                    if (cached) {\n                        return cloneResult(cached);\n                    }\n                }\n                const externalResult = await callExternalDocumentProxy({\n                    ...options,\n                    input,\n                    filename,\n                    mimeType,\n                    buffer: stored.buffer,\n                    checksum,\n                    ownerUserId,\n                });\n                documentConvertCache.set(buildCacheKey({\n                    appName: options.appName,\n                    ownerUserId,\n                    corpus: input.corpus,\n                    sourceKey,\n                    checksum,\n                    provider: externalResult.providerTrace.provider,\n                }), cloneResult(externalResult));\n                return externalResult;\n            }\n            const localResult = {\n                text: extracted.text,\n                markdown: extracted.markdown || extracted.text,\n                pages: extracted.pages,\n                sections: extracted.sections,\n                warnings: extracted.warnings,\n                providerTrace: {\n                    provider: \"local_text\",\n                    route: \"local_text\",\n                    external: false,\n                    durationMs: Math.max(0, (options.now ?? Date.now)() - startedAt),\n                    bytes: stored.size,\n                },\n            };\n            documentConvertCache.set(buildCacheKey({\n                appName: options.appName,\n                ownerUserId,\n                corpus: input.corpus,\n                sourceKey,\n                checksum,\n                provider: \"local_text\",\n            }), cloneResult(localResult));\n            return localResult;\n        },\n    };\n}\nexport function createServerServices(params) {\n    const resolveExternalPolicy = ({ corpus, visibility, ownerUserId }) => resolveAllowExternalProvidersPolicy({\n        db: params.db,\n        corpus,\n        visibility,\n        ownerUserId,\n        allowPrivateExternalCorpora: params.allowPrivateExternalCorpora,\n    });\n    return {\n        [WORKFLOW_DOCUMENT_SERVICE_FACTORY]: ({ workflowId, workflowName, auth }) => ({\n            document: createDocumentConvertService({\n                workflowId,\n                workflowName,\n                appName: params.appName,\n                storage: params.storage,\n                auth,\n                appToken: params.appToken,\n                documentProxyUrl: params.documentProxyUrl,\n                allowPrivateExternalCorpora: params.allowPrivateExternalCorpora,\n                resolveExternalPolicy,\n                fetchImpl: params.fetchImpl,\n                now: params.now,\n            }),\n        }),\n    };\n}\nexport function attachWorkflowDocumentServices(services, params) {\n    const factory = services[WORKFLOW_DOCUMENT_SERVICE_FACTORY];\n    if (!factory) {\n        return {\n            ...services,\n            document: createDocumentConvertService({\n                workflowId: params.workflowId,\n                workflowName: params.workflowName,\n                appName: \"unknown-app\",\n                storage: {\n                    get: async () => null,\n                    store: async () => \"\",\n                    storeBuffer: async () => \"\",\n                    getUrl: () => \"\",\n                    getPublicUrl: () => \"\",\n                    createReadGrant: async () => ({ url: \"\", expiresAt: new Date(0).toISOString() }),\n                    getMeta: async () => null,\n                    setVisibility: async () => { },\n                    listMeta: async () => ({ items: [], nextCursor: null }),\n                    delete: async () => { },\n                },\n                auth: params.auth,\n            }),\n        };\n    }\n    return {\n        ...services,\n        ...factory(params),\n    };\n}\n", "export class ProviderRateLimitRetryableError extends Error {\n    providerRateLimited = true;\n    errorCode;\n    retryAfterMs;\n    status;\n    constructor(message, options = {}) {\n        super(message);\n        this.name = \"ProviderRateLimitRetryableError\";\n        this.errorCode = options.errorCode?.trim() || \"provider_rate_limited\";\n        this.retryAfterMs = normalizeRetryAfterMs(options.retryAfterMs);\n        this.status = normalizeStatus(options.status);\n    }\n}\nexport function parseRetryAfterHeaderMs(value, nowMs = Date.now()) {\n    const trimmed = value?.trim();\n    if (!trimmed)\n        return null;\n    const seconds = Number(trimmed);\n    if (Number.isFinite(seconds) && seconds >= 0) {\n        return Math.ceil(seconds * 1000);\n    }\n    const dateMs = Date.parse(trimmed);\n    if (!Number.isFinite(dateMs))\n        return null;\n    return Math.max(0, dateMs - nowMs);\n}\nexport function providerRateLimitRetrySignal(error) {\n    if (error instanceof ProviderRateLimitRetryableError) {\n        return {\n            errorCode: error.errorCode,\n            retryAfterMs: error.retryAfterMs,\n            status: error.status,\n        };\n    }\n    if (!error || typeof error !== \"object\")\n        return null;\n    const record = error;\n    if (record.providerRateLimited !== true)\n        return null;\n    return {\n        errorCode: typeof record.errorCode === \"string\" && record.errorCode.trim() ? record.errorCode : \"provider_rate_limited\",\n        retryAfterMs: normalizeRetryAfterMs(record.retryAfterMs),\n        status: normalizeStatus(record.status),\n    };\n}\nfunction normalizeRetryAfterMs(value) {\n    return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.ceil(value) : null;\n}\nfunction normalizeStatus(value) {\n    return typeof value === \"number\" && Number.isInteger(value) && value >= 100 && value <= 599 ? value : null;\n}\n", "function parseWorkflowDate(value) {\n    if (!value)\n        return null;\n    const ms = value instanceof Date ? value.getTime() : new Date(value).getTime();\n    return Number.isFinite(ms) ? ms : null;\n}\nexport function computeWorkflowTimeoutDecision(workflow, nowMs) {\n    const handlerStartedAtMs = parseWorkflowDate(workflow.handler_started_at);\n    if (handlerStartedAtMs == null)\n        return null;\n    const maxDurationMs = Number(workflow.max_duration_ms);\n    if (nowMs - handlerStartedAtMs <= maxDurationMs)\n        return null;\n    if (workflow.current_step == null) {\n        return {\n            error: `workflow \"${workflow.name}\" exceeded maxDuration of ${workflow.max_duration_ms}ms before first workflow step`,\n            errorCode: \"resume_queue_timeout\",\n            retryable: true,\n        };\n    }\n    return {\n        error: `workflow \"${workflow.name}\" exceeded maxDuration of ${workflow.max_duration_ms}ms`,\n        errorCode: \"workflow_max_duration\",\n        retryable: false,\n    };\n}\n", "const TRANSIENT_DB_CODES = new Set([\n    \"08000\",\n    \"08001\",\n    \"08003\",\n    \"08004\",\n    \"08006\",\n    \"08P01\",\n    \"40001\",\n    \"40P01\",\n    \"53300\",\n    \"55P03\",\n    \"57014\",\n    \"57P01\",\n    \"57P02\",\n    \"57P03\",\n]);\nconst TRANSIENT_DB_MESSAGE_PATTERNS = [\n    \"failed query:\",\n    \"socket connection was closed unexpectedly\",\n    \"unable to connect\",\n    \"connection terminated\",\n    \"connection reset\",\n    \"server closed the connection\",\n    \"server was not ready\",\n    \"client disconnect while server was not ready\",\n    \"econnreset\",\n    \"etimedout\",\n    \"timeout\",\n];\nconst MAX_ERROR_CAUSE_DEPTH = 8;\nexport function collectWorkflowV2ErrorCodes(error, codes = [], seen = new Set(), depth = 0) {\n    if (!error || typeof error !== \"object\" || seen.has(error) || depth > MAX_ERROR_CAUSE_DEPTH)\n        return codes;\n    seen.add(error);\n    const code = error.code;\n    if (typeof code === \"string\" && code)\n        codes.push(code);\n    const cause = error.cause;\n    if (cause && cause !== error)\n        collectWorkflowV2ErrorCodes(cause, codes, seen, depth + 1);\n    return codes;\n}\nexport function collectWorkflowV2ErrorMessages(error, messages = [], seen = new Set(), depth = 0) {\n    if (depth > MAX_ERROR_CAUSE_DEPTH)\n        return messages;\n    if (error instanceof Error) {\n        messages.push(error.message);\n        if (!seen.has(error)) {\n            seen.add(error);\n            if (error.cause && error.cause !== error) {\n                collectWorkflowV2ErrorMessages(error.cause, messages, seen, depth + 1);\n            }\n        }\n        return messages;\n    }\n    if (typeof error === \"string\") {\n        messages.push(error);\n        return messages;\n    }\n    if (error && typeof error === \"object\") {\n        if (seen.has(error))\n            return messages;\n        seen.add(error);\n        const message = error.message;\n        if (typeof message === \"string\")\n            messages.push(message);\n        const cause = error.cause;\n        if (cause && cause !== error)\n            collectWorkflowV2ErrorMessages(cause, messages, seen, depth + 1);\n    }\n    return messages;\n}\nexport function isTransientWorkflowV2DbError(error) {\n    if (collectWorkflowV2ErrorCodes(error).some((code) => TRANSIENT_DB_CODES.has(code)))\n        return true;\n    const message = collectWorkflowV2ErrorMessages(error).join(\"\\n\").toLowerCase();\n    return TRANSIENT_DB_MESSAGE_PATTERNS.some((pattern) => message.includes(pattern));\n}\nfunction sleep(ms) {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n}\nexport async function executeWorkflowV2Query(db, query, options = {}) {\n    const attempts = Math.max(1, options.attempts ?? 3);\n    const baseDelayMs = Math.max(0, options.baseDelayMs ?? 100);\n    let lastError;\n    for (let attempt = 1; attempt <= attempts; attempt += 1) {\n        try {\n            return await db.execute(query);\n        }\n        catch (error) {\n            lastError = error;\n            if (attempt >= attempts || !isTransientWorkflowV2DbError(error)) {\n                throw error;\n            }\n            await sleep(baseDelayMs * 2 ** (attempt - 1));\n        }\n    }\n    throw lastError;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { executeWorkflowV2Query } from \"./workflow-kernel-v2-db.js\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function acquireWorkflowV2CapacityLocks(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        SELECT workflow_name, user_id\n        FROM _gencow_workflow_runs_v2\n        WHERE id = ${options.runId}\n        LIMIT 1\n    `);\n    const target = rowsFromResult(result)[0];\n    if (!target)\n        return;\n    const scopes = [\n        options.globalConcurrency ? \"global\" : null,\n        options.perWorkflowNameConcurrency ? `workflow:${target.workflow_name}` : null,\n        options.perUserConcurrency && target.user_id ? `user:${target.user_id}` : null,\n    ]\n        .filter((scope) => typeof scope === \"string\" && scope.length > 0)\n        .sort();\n    for (const scope of scopes) {\n        await executeWorkflowV2Query(options.db, sql `\n        INSERT INTO _gencow_workflow_capacity_locks_v2 (scope, updated_at)\n        VALUES (${scope}, NOW())\n        ON CONFLICT (scope) DO NOTHING\n      `);\n    }\n    for (const scope of scopes) {\n        await executeWorkflowV2Query(options.db, sql `\n        SELECT scope\n        FROM _gencow_workflow_capacity_locks_v2\n        WHERE scope = ${scope}\n        FOR UPDATE\n      `);\n    }\n}\n", "import { sql } from \"drizzle-orm\";\nexport function workflowV2Jsonb(value) {\n    return workflowV2JsonbFromString(workflowV2JsonString(value));\n}\nexport function workflowV2JsonString(value) {\n    return JSON.stringify(value ?? {}, (_key, current) => typeof current === \"string\" ? sanitizeWorkflowV2JsonString(current) : current);\n}\nexport function workflowV2JsonbFromString(json) {\n    return sql `${json}::text::jsonb`;\n}\nfunction sanitizeWorkflowV2JsonString(value) {\n    return value\n        .replace(/\\u0000/g, \"\")\n        .replace(/[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])/g, \"\")\n        .replace(/(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/g, \"\");\n}\n", "import { sql } from \"drizzle-orm\";\nimport { acquireWorkflowV2CapacityLocks } from \"./workflow-kernel-v2-capacity-locks.js\";\nimport { executeWorkflowV2Query } from \"./workflow-kernel-v2-db.js\";\nimport { workflowV2Jsonb, workflowV2JsonbFromString } from \"./workflow-kernel-v2-json.js\";\nexport const WORKFLOW_V2_SYSTEM_TABLE_NAMES = [\n    \"_gencow_workflow_runs_v2\",\n    \"_gencow_workflow_steps_v2\",\n    \"_gencow_workflow_timers_v2\",\n    \"_gencow_workflow_signals_v2\",\n    \"_gencow_workflow_outbox_v2\",\n    \"_gencow_workflow_capacity_locks_v2\",\n    \"_gencow_workflow_events_v2\",\n];\nexport const WORKFLOW_V2_SYSTEM_SEQUENCE_NAMES = [\n    \"_gencow_workflow_steps_v2_id_seq\",\n    \"_gencow_workflow_events_v2_id_seq\",\n];\nexport const WORKFLOW_V2_SYSTEM_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_runs_v2 (\n        id TEXT PRIMARY KEY,\n        workflow_name TEXT NOT NULL,\n        workflow_version TEXT,\n        status TEXT NOT NULL DEFAULT 'queued',\n        args_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n        user_id TEXT,\n        result_json JSONB,\n        error_json JSONB,\n        error_code TEXT,\n        current_step_key TEXT,\n        priority INTEGER NOT NULL DEFAULT 0,\n        runnable_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        lease_owner TEXT,\n        lease_epoch INTEGER NOT NULL DEFAULT 0,\n        lease_expires_at TIMESTAMPTZ,\n        heartbeat_at TIMESTAMPTZ,\n        attempt_count INTEGER NOT NULL DEFAULT 0,\n        max_attempts INTEGER NOT NULL DEFAULT 3,\n        retry_count INTEGER NOT NULL DEFAULT 0,\n        max_retries INTEGER NOT NULL DEFAULT 3,\n        max_active_duration_ms BIGINT NOT NULL DEFAULT 1800000,\n        active_started_at TIMESTAMPTZ,\n        active_deadline_at TIMESTAMPTZ,\n        lifecycle_deadline_at TIMESTAMPTZ,\n        cancel_requested_at TIMESTAMPTZ,\n        idempotency_key TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        completed_at TIMESTAMPTZ,\n        UNIQUE(idempotency_key)\n    )`,\n    `ALTER TABLE _gencow_workflow_runs_v2 ADD COLUMN IF NOT EXISTS user_id TEXT`,\n    `ALTER TABLE _gencow_workflow_runs_v2 ADD COLUMN IF NOT EXISTS retry_count INTEGER NOT NULL DEFAULT 0`,\n    `ALTER TABLE _gencow_workflow_runs_v2 ADD COLUMN IF NOT EXISTS max_retries INTEGER NOT NULL DEFAULT 3`,\n    `ALTER TABLE _gencow_workflow_runs_v2 ADD COLUMN IF NOT EXISTS max_active_duration_ms BIGINT NOT NULL DEFAULT 1800000`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_runs_v2_claim\n        ON _gencow_workflow_runs_v2 (status, runnable_at, priority DESC, created_at)\n        WHERE completed_at IS NULL`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_runs_v2_lease\n        ON _gencow_workflow_runs_v2 (lease_expires_at)\n        WHERE status = 'running' AND completed_at IS NULL`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_steps_v2 (\n        id BIGSERIAL PRIMARY KEY,\n        run_id TEXT NOT NULL REFERENCES _gencow_workflow_runs_v2(id) ON DELETE CASCADE,\n        step_key TEXT NOT NULL,\n        step_index INTEGER NOT NULL DEFAULT 0,\n        status TEXT NOT NULL DEFAULT 'pending',\n        input_hash TEXT,\n        output_json JSONB,\n        error_json JSONB,\n        error_code TEXT,\n        attempt_count INTEGER NOT NULL DEFAULT 0,\n        max_attempts INTEGER NOT NULL DEFAULT 3,\n        runnable_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        lease_owner TEXT,\n        lease_epoch INTEGER NOT NULL DEFAULT 0,\n        lease_expires_at TIMESTAMPTZ,\n        started_at TIMESTAMPTZ,\n        heartbeat_at TIMESTAMPTZ,\n        completed_at TIMESTAMPTZ,\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        UNIQUE(run_id, step_key)\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_steps_v2_lookup\n        ON _gencow_workflow_steps_v2 (run_id, step_key)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_timers_v2 (\n        id TEXT PRIMARY KEY,\n        run_id TEXT NOT NULL REFERENCES _gencow_workflow_runs_v2(id) ON DELETE CASCADE,\n        kind TEXT NOT NULL,\n        fire_at TIMESTAMPTZ NOT NULL,\n        status TEXT NOT NULL DEFAULT 'pending',\n        dedupe_key TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        UNIQUE(run_id, dedupe_key)\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_timers_v2_due\n        ON _gencow_workflow_timers_v2 (status, fire_at)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_signals_v2 (\n        id TEXT PRIMARY KEY,\n        run_id TEXT NOT NULL REFERENCES _gencow_workflow_runs_v2(id) ON DELETE CASCADE,\n        event_name TEXT NOT NULL,\n        payload_json JSONB,\n        idempotency_key TEXT,\n        received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        consumed_at TIMESTAMPTZ,\n        UNIQUE(run_id, event_name, idempotency_key)\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_signals_v2_wait\n        ON _gencow_workflow_signals_v2 (run_id, event_name, received_at)\n        WHERE consumed_at IS NULL`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_outbox_v2 (\n        id TEXT PRIMARY KEY,\n        run_id TEXT NOT NULL REFERENCES _gencow_workflow_runs_v2(id) ON DELETE CASCADE,\n        kind TEXT NOT NULL,\n        available_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        status TEXT NOT NULL DEFAULT 'pending',\n        attempt_count INTEGER NOT NULL DEFAULT 0,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_outbox_v2_due\n        ON _gencow_workflow_outbox_v2 (status, available_at)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_capacity_locks_v2 (\n        scope TEXT PRIMARY KEY,\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_events_v2 (\n        id BIGSERIAL PRIMARY KEY,\n        run_id TEXT NOT NULL REFERENCES _gencow_workflow_runs_v2(id) ON DELETE CASCADE,\n        event_type TEXT NOT NULL,\n        event_json JSONB,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_events_v2_timeline\n        ON _gencow_workflow_events_v2 (run_id, created_at, id)`,\n];\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction nullableTimestamp(value) {\n    return value == null ? sql `NULL` : sql `${value}::timestamptz`;\n}\nexport async function createWorkflowV2Run(db, input) {\n    const result = await executeWorkflowV2Query(db, sql `\n        INSERT INTO _gencow_workflow_runs_v2 (\n            id,\n            workflow_name,\n            workflow_version,\n            args_json,\n            user_id,\n            priority,\n            runnable_at,\n            max_attempts,\n            retry_count,\n            max_retries,\n            max_active_duration_ms,\n            active_deadline_at,\n            lifecycle_deadline_at,\n            idempotency_key\n        )\n        VALUES (\n            ${input.id},\n            ${input.workflowName},\n            ${input.workflowVersion ?? null},\n            ${workflowV2Jsonb(input.args ?? {})},\n            ${input.userId ?? null},\n            ${input.priority ?? 0},\n            ${input.runnableAt ?? sql `NOW()`},\n            ${input.maxAttempts ?? 3},\n            0,\n            ${input.maxRetries ?? 3},\n            ${input.maxActiveDurationMs ?? 1_800_000},\n            ${nullableTimestamp(input.activeDeadlineAt)},\n            ${nullableTimestamp(input.lifecycleDeadlineAt)},\n            ${input.idempotencyKey ?? null}\n        )\n        RETURNING *\n    `);\n    const row = rowsFromResult(result)[0];\n    if (!row)\n        throw new Error(`failed to create workflow v2 run \"${input.id}\"`);\n    return row;\n}\nexport async function claimNextWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        WITH candidate AS (\n            SELECT id\n            FROM _gencow_workflow_runs_v2\n            WHERE status IN ('queued', 'running')\n              AND runnable_at <= NOW()\n              AND completed_at IS NULL\n              AND cancel_requested_at IS NULL\n              AND (lease_expires_at IS NULL OR lease_expires_at < NOW())\n            ORDER BY priority DESC, runnable_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT 1\n        )\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'running',\n            lease_owner = ${options.workerId},\n            lease_epoch = lease_epoch + 1,\n            lease_expires_at = NOW() + (${options.leaseMs} * INTERVAL '1 millisecond'),\n            heartbeat_at = NOW(),\n            active_started_at = NOW(),\n            active_deadline_at = NOW() + (max_active_duration_ms * INTERVAL '1 millisecond'),\n            attempt_count = attempt_count + 1,\n            error_json = NULL,\n            error_code = NULL,\n            updated_at = NOW()\n        WHERE id = (SELECT id FROM candidate)\n        RETURNING *\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function claimWorkflowV2RunById(options) {\n    const globalConcurrency = positiveCapacityLimit(options.capacityPolicy?.globalConcurrency);\n    const perUserConcurrency = positiveCapacityLimit(options.capacityPolicy?.perUserConcurrency);\n    const perWorkflowNameConcurrency = positiveCapacityLimit(options.capacityPolicy?.perWorkflowNameConcurrency);\n    if ((globalConcurrency || perUserConcurrency || perWorkflowNameConcurrency) &&\n        typeof options.db.transaction === \"function\") {\n        return options.db.transaction(async (tx) => {\n            await acquireWorkflowV2CapacityLocks({\n                db: tx,\n                runId: options.runId,\n                globalConcurrency,\n                perUserConcurrency,\n                perWorkflowNameConcurrency,\n            });\n            return claimWorkflowV2RunByIdOnce({\n                ...options,\n                db: tx,\n                globalConcurrency,\n                perUserConcurrency,\n                perWorkflowNameConcurrency,\n            });\n        });\n    }\n    return claimWorkflowV2RunByIdOnce({\n        ...options,\n        globalConcurrency,\n        perUserConcurrency,\n        perWorkflowNameConcurrency,\n    });\n}\nasync function claimWorkflowV2RunByIdOnce(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'running',\n            lease_owner = ${options.workerId},\n            lease_epoch = lease_epoch + 1,\n            lease_expires_at = NOW() + (${options.leaseMs} * INTERVAL '1 millisecond'),\n            heartbeat_at = NOW(),\n            active_started_at = NOW(),\n            active_deadline_at = NOW() + (max_active_duration_ms * INTERVAL '1 millisecond'),\n            attempt_count = attempt_count + 1,\n            error_json = NULL,\n            error_code = NULL,\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status IN ('queued', 'running')\n          AND runnable_at <= NOW()\n          AND completed_at IS NULL\n          AND cancel_requested_at IS NULL\n          AND (lease_expires_at IS NULL OR lease_expires_at < NOW())\n          AND (\n            ${options.globalConcurrency}::integer IS NULL\n            OR (\n              SELECT COUNT(*)::integer\n              FROM _gencow_workflow_runs_v2 running\n              WHERE running.status = 'running'\n                AND running.completed_at IS NULL\n                AND running.cancel_requested_at IS NULL\n                AND running.lease_expires_at > NOW()\n            ) < ${options.globalConcurrency}::integer\n          )\n          AND (\n            ${options.perWorkflowNameConcurrency}::integer IS NULL\n            OR (\n              SELECT COUNT(*)::integer\n              FROM _gencow_workflow_runs_v2 running\n              WHERE running.status = 'running'\n                AND running.completed_at IS NULL\n                AND running.cancel_requested_at IS NULL\n                AND running.lease_expires_at > NOW()\n                AND running.workflow_name = _gencow_workflow_runs_v2.workflow_name\n            ) < ${options.perWorkflowNameConcurrency}::integer\n          )\n          AND (\n            ${options.perUserConcurrency}::integer IS NULL\n            OR _gencow_workflow_runs_v2.user_id IS NULL\n            OR (\n              SELECT COUNT(*)::integer\n              FROM _gencow_workflow_runs_v2 running\n              WHERE running.status = 'running'\n                AND running.completed_at IS NULL\n                AND running.cancel_requested_at IS NULL\n                AND running.lease_expires_at > NOW()\n                AND running.user_id = _gencow_workflow_runs_v2.user_id\n            ) < ${options.perUserConcurrency}::integer\n          )\n        RETURNING *\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nfunction positiveCapacityLimit(value) {\n    return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? Math.floor(value) : null;\n}\nexport async function getWorkflowV2CapacitySnapshot(db) {\n    const result = await executeWorkflowV2Query(db, sql `\n        SELECT workflow_name, user_id, COUNT(*)::int AS count\n        FROM _gencow_workflow_runs_v2\n        WHERE status = 'running'\n          AND completed_at IS NULL\n          AND cancel_requested_at IS NULL\n          AND lease_expires_at > NOW()\n        GROUP BY workflow_name, user_id\n    `);\n    const rows = rowsFromResult(result);\n    const runningByWorkflowName = {};\n    const runningByUserId = {};\n    let globalRunning = 0;\n    for (const row of rows) {\n        const count = Number(row.count) || 0;\n        runningByWorkflowName[row.workflow_name] = (runningByWorkflowName[row.workflow_name] ?? 0) + count;\n        if (row.user_id) {\n            runningByUserId[row.user_id] = (runningByUserId[row.user_id] ?? 0) + count;\n        }\n        globalRunning += count;\n    }\n    return { globalRunning, runningByUserId, runningByWorkflowName };\n}\nexport async function deferWorkflowV2RunForCapacity(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n      WITH deferred AS (\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'queued',\n            runnable_at = NOW() + (${options.retryAfterMs} * INTERVAL '1 millisecond'),\n            error_json = ${workflowV2Jsonb({ message: \"Workflow capacity deferred\", reason: options.reason })},\n            error_code = ${options.signal},\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'queued'\n          AND completed_at IS NULL\n          AND cancel_requested_at IS NULL\n        RETURNING *\n      ),\n      wake_outbox AS (\n        INSERT INTO _gencow_workflow_outbox_v2 (\n          id,\n          run_id,\n          kind,\n          available_at,\n          status\n        )\n        SELECT\n          'capacity:' || id,\n          id,\n          'wake_capacity',\n          runnable_at,\n          'pending'\n        FROM deferred\n        ON CONFLICT (id) DO UPDATE SET\n          available_at = EXCLUDED.available_at,\n          status = 'pending',\n          updated_at = NOW()\n        RETURNING id\n      )\n      SELECT *\n      FROM deferred\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function heartbeatWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            lease_expires_at = NOW() + (${options.leaseMs} * INTERVAL '1 millisecond'),\n            heartbeat_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND cancel_requested_at IS NULL\n          AND completed_at IS NULL\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function getWorkflowV2Run(db, runId) {\n    const result = await executeWorkflowV2Query(db, sql `\n        SELECT *\n        FROM _gencow_workflow_runs_v2\n        WHERE id = ${runId}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function markWorkflowV2RunCurrentStep(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            current_step_key = ${options.stepKey},\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function completeWorkflowV2Run(options) {\n    const resultJson = options.serializedResultJson == null\n        ? workflowV2Jsonb(options.result ?? null)\n        : workflowV2JsonbFromString(options.serializedResultJson);\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'completed',\n            result_json = ${resultJson},\n            error_json = NULL,\n            error_code = NULL,\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function failWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'failed',\n            error_json = ${workflowV2Jsonb(options.error)},\n            error_code = ${options.errorCode},\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id\n  `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function cancelClaimedWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'cancelled',\n            error_json = ${workflowV2Jsonb(options.error ?? { message: \"Cancelled by user\" })},\n            error_code = 'cancelled',\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function requeueWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n      WITH requeued AS (\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = 'queued',\n            retry_count = ${options.retryCount},\n            error_json = ${workflowV2Jsonb(options.error)},\n            error_code = ${options.errorCode},\n            runnable_at = ${options.runnableAt}::timestamptz,\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            completed_at = NULL,\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id, runnable_at\n      ),\n      wake_outbox AS (\n        INSERT INTO _gencow_workflow_outbox_v2 (\n          id,\n          run_id,\n          kind,\n          available_at,\n          status\n        )\n        SELECT\n          'workflow-retry:' || id || ':' || ${options.retryCount},\n          id,\n          'wake_retry',\n          runnable_at,\n          'pending'\n        FROM requeued\n        ON CONFLICT (id) DO UPDATE SET\n          available_at = EXCLUDED.available_at,\n          status = 'pending',\n          updated_at = NOW()\n        RETURNING id\n      )\n      SELECT id\n      FROM requeued\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function pauseWorkflowV2Run(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            status = ${options.status},\n            current_step_key = ${options.currentStepKey},\n            runnable_at = COALESCE(${nullableTimestamp(options.runnableAt)}, runnable_at),\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            updated_at = NOW()\n        WHERE id = ${options.runId}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n          AND completed_at IS NULL\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function requestCancelWorkflowV2Run(db, runId) {\n    const result = await executeWorkflowV2Query(db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET\n            cancel_requested_at = COALESCE(cancel_requested_at, NOW()),\n            updated_at = NOW()\n        WHERE id = ${runId}\n          AND status NOT IN ('completed', 'failed', 'cancelled')\n          AND completed_at IS NULL\n        RETURNING id\n  `);\n    return rowsFromResult(result).length === 1;\n}\n", "export const WORKFLOW_CHECKPOINT_ERROR_CODE = \"workflow_step_output_too_large\";\nexport const WORKFLOW_RESULT_ERROR_CODE = \"workflow_result_too_large\";\nexport const DEFAULT_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES = 64 * 1024;\nexport const DEFAULT_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES = 256 * 1024;\nexport const WORKFLOW_CHECKPOINT_LIMIT_MODE_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_LIMIT_MODE\";\nexport const WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES\";\nexport const WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES_ENV = \"GENCOW_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES\";\nexport class WorkflowCheckpointPolicyError extends Error {\n    errorCode = WORKFLOW_CHECKPOINT_ERROR_CODE;\n    sizeBytes;\n    hardLimitBytes;\n    workflowName;\n    stepKey;\n    constructor(params) {\n        super(`${WORKFLOW_CHECKPOINT_ERROR_CODE}: Workflow \"${params.workflowName}\" step \"${params.stepKey}\" produced a ${params.sizeBytes} byte checkpoint, exceeding the ${params.hardLimitBytes} byte hard limit. Store large values in an app table/storage object and return only an id/reference/count/checksum summary from the step.`);\n        this.name = \"WorkflowCheckpointPolicyError\";\n        this.sizeBytes = params.sizeBytes;\n        this.hardLimitBytes = params.hardLimitBytes;\n        this.workflowName = params.workflowName;\n        this.stepKey = params.stepKey;\n    }\n}\nexport class WorkflowResultPolicyError extends Error {\n    errorCode = WORKFLOW_RESULT_ERROR_CODE;\n    sizeBytes;\n    hardLimitBytes;\n    workflowName;\n    constructor(params) {\n        super(`${WORKFLOW_RESULT_ERROR_CODE}: Workflow \"${params.workflowName}\" result is ${params.sizeBytes} bytes, exceeding the ${params.hardLimitBytes} byte hard limit. Store large values in an app table/storage object and return only an id/reference/count/checksum summary.`);\n        this.name = \"WorkflowResultPolicyError\";\n        this.sizeBytes = params.sizeBytes;\n        this.hardLimitBytes = params.hardLimitBytes;\n        this.workflowName = params.workflowName;\n    }\n}\nconst BOOT_ENV_SNAPSHOT = {\n    [WORKFLOW_CHECKPOINT_LIMIT_MODE_ENV]: process.env[WORKFLOW_CHECKPOINT_LIMIT_MODE_ENV],\n    [WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES_ENV]: process.env[WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES_ENV],\n    [WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES_ENV]: process.env[WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES_ENV],\n};\nfunction byteLength(value) {\n    return new TextEncoder().encode(value).byteLength;\n}\nfunction normalizeLimit(value, fallback) {\n    if (value == null || value.trim() === \"\")\n        return fallback;\n    const parsed = Number(value);\n    return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;\n}\nfunction normalizeMode(value) {\n    return value === \"platform_enforce\" || value === \"enforce\" ? value : \"observe\";\n}\nexport function resolveWorkflowCheckpointPolicyConfig(env = BOOT_ENV_SNAPSHOT) {\n    const softLimitBytes = normalizeLimit(env[WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES_ENV], DEFAULT_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES);\n    const hardLimitBytes = normalizeLimit(env[WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES_ENV], DEFAULT_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES);\n    return {\n        mode: normalizeMode(env[WORKFLOW_CHECKPOINT_LIMIT_MODE_ENV]),\n        softLimitBytes: Math.min(softLimitBytes, hardLimitBytes),\n        hardLimitBytes,\n    };\n}\nexport function measureWorkflowCheckpoint(serializedValue, limits) {\n    const serializedJson = JSON.stringify(serializedValue);\n    return measureWorkflowCheckpointJson(serializedJson ?? \"null\", limits);\n}\nexport function measureWorkflowCheckpointJson(serializedJson, limits) {\n    const sizeBytes = byteLength(serializedJson);\n    if (sizeBytes > limits.hardLimitBytes) {\n        return { sizeBytes, level: \"hard_limit\", errorCode: WORKFLOW_CHECKPOINT_ERROR_CODE };\n    }\n    if (sizeBytes > limits.softLimitBytes) {\n        return { sizeBytes, level: \"soft_limit\", errorCode: null };\n    }\n    return { sizeBytes, level: \"ok\", errorCode: null };\n}\nexport function isPlatformOwnedWorkflow(workflowName) {\n    return workflowName.startsWith(\"__gencow.\");\n}\nexport function shouldEnforceWorkflowCheckpointLimit(params) {\n    if (params.mode === \"enforce\")\n        return true;\n    if (params.mode === \"platform_enforce\")\n        return isPlatformOwnedWorkflow(params.workflowName);\n    return false;\n}\nexport function createWorkflowCheckpointError(params) {\n    return new WorkflowCheckpointPolicyError({\n        workflowName: params.workflowName,\n        stepKey: params.stepKey,\n        sizeBytes: params.decision.sizeBytes,\n        hardLimitBytes: params.hardLimitBytes,\n    });\n}\nexport function createWorkflowResultError(params) {\n    return new WorkflowResultPolicyError({\n        workflowName: params.workflowName,\n        sizeBytes: params.decision.sizeBytes,\n        hardLimitBytes: params.hardLimitBytes,\n    });\n}\n", "import { sql } from \"drizzle-orm\";\nimport { deserializeWorkflowValue, getWorkflowDef, loadWorkflowSnapshot, parseWorkflowDurationMs, serializeWorkflowValue, } from \"@gencow/core\";\nimport { claimWorkflowEvent, claimWorkflowRun, getWorkflowRow, getWorkflowStep, listRecoverableWorkflows, markWorkflowCompleted, markWorkflowFailed, markWorkflowHandlerStarted, markWorkflowPendingAtStep, requeueWorkflowBeforeFirstStep, markWorkflowSleepStepCompleted, markWorkflowSleepStepPending, markWorkflowWaitStepCompleted, markWorkflowWaitStepFailed, markWorkflowWaitStepPending, requeueWorkflow, } from \"./workflow-runner-state.js\";\nimport { attachWorkflowDocumentServices } from \"./server-document-runtime.js\";\nimport { providerRateLimitRetrySignal } from \"./provider-rate-limit-retry.js\";\nimport { computeWorkflowTimeoutDecision } from \"./workflow-runtime-contract.js\";\nimport { WORKFLOW_V2_SYSTEM_SCHEMA_STATEMENTS, WORKFLOW_V2_SYSTEM_SEQUENCE_NAMES, WORKFLOW_V2_SYSTEM_TABLE_NAMES, } from \"./workflow-kernel-v2-store.js\";\nimport { WorkflowCheckpointPolicyError, WorkflowResultPolicyError, createWorkflowCheckpointError, createWorkflowResultError, measureWorkflowCheckpoint, resolveWorkflowCheckpointPolicyConfig, shouldEnforceWorkflowCheckpointLimit, } from \"./workflow-checkpoint-policy.js\";\nexport const WORKFLOW_RUNNING_STALE_AFTER_MS = 15 * 60 * 1000;\nconst WORKFLOW_SLEEP_STEP_PREFIX = \"sleep\";\nconst WORKFLOW_WAIT_STEP_PREFIX = \"wait\";\nconst WORKFLOW_PARALLEL_STEP_PREFIX = \"parallel\";\nexport const WORKFLOW_SYSTEM_TABLE_NAMES = [\n    \"_gencow_workflows\",\n    \"_gencow_workflow_steps\",\n    \"_gencow_workflow_events\",\n    ...WORKFLOW_V2_SYSTEM_TABLE_NAMES,\n    \"_gencow_job_admission_buckets\",\n];\nexport const WORKFLOW_SYSTEM_SEQUENCE_NAMES = [\n    \"_gencow_workflow_steps_id_seq\",\n    ...WORKFLOW_V2_SYSTEM_SEQUENCE_NAMES,\n];\nexport const WORKFLOW_SYSTEM_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS _gencow_workflows (\n        id TEXT PRIMARY KEY,\n        name TEXT NOT NULL,\n        args JSONB NOT NULL DEFAULT '{}'::jsonb,\n        status TEXT NOT NULL DEFAULT 'pending',\n        current_step TEXT,\n        result JSONB,\n        error TEXT,\n        error_code TEXT,\n        realtime_token TEXT NOT NULL DEFAULT '',\n        retry_count INTEGER NOT NULL DEFAULT 0,\n        max_retries INTEGER NOT NULL DEFAULT 3,\n        max_duration_ms BIGINT NOT NULL DEFAULT 1800000,\n        first_claimed_at TIMESTAMPTZ,\n        handler_started_at TIMESTAMPTZ,\n        last_resume_attempt_at TIMESTAMPTZ,\n        runnable_at TIMESTAMPTZ,\n        started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        completed_at TIMESTAMPTZ,\n        user_id TEXT\n    )`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS realtime_token TEXT NOT NULL DEFAULT ''`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS error_code TEXT`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS first_claimed_at TIMESTAMPTZ`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS handler_started_at TIMESTAMPTZ`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS last_resume_attempt_at TIMESTAMPTZ`,\n    `ALTER TABLE _gencow_workflows ADD COLUMN IF NOT EXISTS runnable_at TIMESTAMPTZ`,\n    `DO $$\n    BEGIN\n        IF EXISTS (\n            SELECT 1\n            FROM information_schema.columns\n            WHERE table_name = '_gencow_workflows'\n              AND column_name = 'app_id'\n        ) THEN\n            EXECUTE 'ALTER TABLE _gencow_workflows ALTER COLUMN app_id DROP NOT NULL';\n        END IF;\n    END $$`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflows_status ON _gencow_workflows (status, started_at DESC)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_steps (\n        id SERIAL PRIMARY KEY,\n        workflow_id TEXT NOT NULL REFERENCES _gencow_workflows(id) ON DELETE CASCADE,\n        step_name TEXT NOT NULL,\n        status TEXT NOT NULL DEFAULT 'pending',\n        output JSONB,\n        error TEXT,\n        started_at TIMESTAMPTZ,\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        completed_at TIMESTAMPTZ,\n        UNIQUE(workflow_id, step_name)\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_steps_lookup ON _gencow_workflow_steps (workflow_id, step_name)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_workflow_events (\n        id TEXT PRIMARY KEY,\n        workflow_id TEXT NOT NULL REFERENCES _gencow_workflows(id) ON DELETE CASCADE,\n        event_name TEXT NOT NULL,\n        payload JSONB,\n        received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        consumed_at TIMESTAMPTZ\n    )`,\n    `ALTER TABLE _gencow_workflow_events ADD COLUMN IF NOT EXISTS received_at TIMESTAMPTZ`,\n    `ALTER TABLE _gencow_workflow_events ADD COLUMN IF NOT EXISTS consumed_at TIMESTAMPTZ`,\n    `DO $$\n    BEGIN\n        IF EXISTS (\n            SELECT 1\n            FROM information_schema.columns\n            WHERE table_name = '_gencow_workflow_events'\n              AND column_name = 'created_at'\n        ) THEN\n            EXECUTE '\n                UPDATE _gencow_workflow_events\n                SET received_at = COALESCE(received_at, created_at)\n                WHERE received_at IS NULL\n            ';\n        END IF;\n    END $$`,\n    `UPDATE _gencow_workflow_events\n    SET received_at = NOW()\n    WHERE received_at IS NULL`,\n    `ALTER TABLE _gencow_workflow_events ALTER COLUMN received_at SET NOT NULL`,\n    `ALTER TABLE _gencow_workflow_events ALTER COLUMN received_at SET DEFAULT NOW()`,\n    `DO $$\n    BEGIN\n        IF EXISTS (\n            SELECT 1\n            FROM information_schema.columns\n            WHERE table_name = '_gencow_workflow_events'\n              AND column_name = 'id'\n              AND data_type <> 'text'\n        ) THEN\n            EXECUTE 'ALTER TABLE _gencow_workflow_events ALTER COLUMN id DROP DEFAULT';\n            EXECUTE 'ALTER TABLE _gencow_workflow_events ALTER COLUMN id TYPE TEXT USING id::text';\n        END IF;\n    END $$`,\n    `ALTER TABLE _gencow_workflow_events ALTER COLUMN id SET DEFAULT gen_random_uuid()::text`,\n    `ALTER TABLE _gencow_workflow_events DROP CONSTRAINT IF EXISTS _gencow_workflow_events_workflow_id_event_name_key`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_workflow_events_lookup ON _gencow_workflow_events (workflow_id, event_name, received_at)`,\n    ...WORKFLOW_V2_SYSTEM_SCHEMA_STATEMENTS,\n    `CREATE TABLE IF NOT EXISTS _gencow_job_admission_buckets (\n        scope TEXT NOT NULL,\n        bucket_start TIMESTAMPTZ NOT NULL,\n        count INTEGER NOT NULL DEFAULT 0,\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        PRIMARY KEY (scope, bucket_start)\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_job_admission_buckets_updated ON _gencow_job_admission_buckets (updated_at)`,\n];\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction parseJsonField(value) {\n    if (typeof value !== \"string\")\n        return value;\n    try {\n        return JSON.parse(value);\n    }\n    catch {\n        return value;\n    }\n}\nfunction parseWorkflowDate(value) {\n    if (!value)\n        return null;\n    const ms = value instanceof Date ? value.getTime() : new Date(value).getTime();\n    return Number.isFinite(ms) ? ms : null;\n}\nfunction errorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nfunction restoreWorkflowAuth(baseAuth, workflowUserId) {\n    if (baseAuth.getUserIdentity()) {\n        return baseAuth;\n    }\n    if (!workflowUserId) {\n        return baseAuth;\n    }\n    const restoredUser = {\n        id: workflowUserId,\n        email: `${workflowUserId}@workflow.local`,\n    };\n    return {\n        getUserIdentity: () => restoredUser,\n        requireAuth: () => restoredUser,\n    };\n}\nfunction formatDurationMs(durationMs) {\n    if (!Number.isFinite(durationMs) || durationMs < 0)\n        return \"0ms\";\n    if (durationMs < 1_000)\n        return `${Math.round(durationMs)}ms`;\n    if (durationMs < 60_000)\n        return `${(durationMs / 1_000).toFixed(1)}s`;\n    return `${Math.round(durationMs / 60_000)}m`;\n}\nfunction writeWorkflowLog(logger, level, message, options) {\n    const prefix = options?.verbose ? \"[workflow:verbose]\" : \"[workflow]\";\n    logger[level](`${prefix} ${message}`);\n}\nfunction writeWorkflowCheckpointPolicyLog(params) {\n    if (params.decision.level === \"ok\")\n        return;\n    writeWorkflowLog(params.logger, params.decision.level === \"hard_limit\" ? \"warn\" : \"log\", `${params.workflowName} step ${params.stepKey} checkpoint ${params.decision.level} (size=${params.decision.sizeBytes}, hardLimit=${params.hardLimitBytes}, mode=${params.mode})`, { verbose: params.decision.level === \"soft_limit\" });\n}\nfunction getWorkflowSleepStepName(index) {\n    return `${WORKFLOW_SLEEP_STEP_PREFIX}#${index}`;\n}\nfunction getWorkflowWaitStepName(eventName, index) {\n    return `${WORKFLOW_WAIT_STEP_PREFIX}:${eventName}#${index}`;\n}\nfunction getWorkflowParallelStepName(groupIndex, branchIndex) {\n    return `${WORKFLOW_PARALLEL_STEP_PREFIX}#${groupIndex}:${branchIndex}`;\n}\nfunction isWorkflowSleepState(value) {\n    return (!!value &&\n        typeof value === \"object\" &&\n        typeof value.wakeAt === \"string\" &&\n        typeof value.durationMs === \"number\");\n}\nfunction isWorkflowWaitState(value) {\n    if (!value || typeof value !== \"object\") {\n        return false;\n    }\n    const waitState = value;\n    return (typeof waitState.eventName === \"string\" &&\n        (waitState.timeoutAt == null || typeof waitState.timeoutAt === \"string\") &&\n        (waitState.timeoutMs == null || typeof waitState.timeoutMs === \"number\"));\n}\nfunction createWorkflowSleepState(nowMs, durationMs) {\n    return {\n        wakeAt: new Date(nowMs + durationMs).toISOString(),\n        durationMs,\n    };\n}\nfunction createWorkflowWaitState(nowMs, eventName, timeout) {\n    if (timeout == null) {\n        return {\n            eventName,\n            timeoutAt: null,\n            timeoutMs: null,\n        };\n    }\n    const timeoutMs = parseWorkflowDurationMs(timeout, \"wf.waitForEvent() timeout\");\n    return {\n        eventName,\n        timeoutAt: new Date(nowMs + timeoutMs).toISOString(),\n        timeoutMs,\n    };\n}\nclass WorkflowSleepSignal extends Error {\n    stepName;\n    nextDelayMs;\n    constructor(stepName, nextDelayMs) {\n        super(`workflow sleep checkpoint scheduled for ${stepName}`);\n        this.name = \"WorkflowSleepSignal\";\n        this.stepName = stepName;\n        this.nextDelayMs = Math.max(0, Math.floor(nextDelayMs));\n    }\n}\nclass WorkflowWaitSignal extends Error {\n    stepName;\n    eventName;\n    nextDelayMs;\n    constructor(stepName, eventName, nextDelayMs = null) {\n        super(`workflow waiting for event \"${eventName}\" at ${stepName}`);\n        this.name = \"WorkflowWaitSignal\";\n        this.stepName = stepName;\n        this.eventName = eventName;\n        this.nextDelayMs = nextDelayMs == null ? null : Math.max(0, Math.floor(nextDelayMs));\n    }\n}\nclass WorkflowTimeoutError extends Error {\n    stepName;\n    eventName;\n    constructor(stepName, eventName, timeoutMs) {\n        super(timeoutMs == null\n            ? `workflow waitForEvent(\"${eventName}\") timed out at ${stepName}`\n            : `workflow waitForEvent(\"${eventName}\") timed out after ${timeoutMs}ms at ${stepName}`);\n        this.name = \"WorkflowTimeoutError\";\n        this.stepName = stepName;\n        this.eventName = eventName;\n    }\n}\nasync function emitWorkflowSnapshot(realtime, db, workflowId, logger) {\n    if (!realtime || typeof realtime.emit !== \"function\")\n        return;\n    try {\n        const snapshot = await loadWorkflowSnapshot(db, workflowId);\n        if (!snapshot)\n            return;\n        realtime.emit(snapshot.realtimeKey, snapshot);\n    }\n    catch (error) {\n        logger.warn(`[workflow] failed to emit realtime snapshot for ${workflowId}: ${errorMessage(error)}`);\n    }\n}\nexport function computeWorkflowRetryDelayMs(nextRetryCount) {\n    return 30_000 * 3 ** Math.max(0, nextRetryCount - 1);\n}\nexport { listRecoverableWorkflows } from \"./workflow-runner-state.js\";\nexport async function requeueRecoverableWorkflowRuns(options) {\n    const allowedNames = new Set(options.workflowNames);\n    if (allowedNames.size === 0)\n        return [];\n    const recoverable = (await listRecoverableWorkflows(options.db)).filter((row) => allowedNames.has(row.name));\n    for (const row of recoverable) {\n        options.scheduleResume(row.name, row.id, row.retryDelayMs);\n    }\n    return recoverable.map(({ id, name }) => ({ id, name }));\n}\nexport async function resumeWorkflowRun(options) {\n    const logger = options.logger ?? console;\n    const now = options.now ?? Date.now;\n    const checkpointPolicyConfig = options.checkpointPolicyConfig ?? resolveWorkflowCheckpointPolicyConfig();\n    const claimed = await claimWorkflowRun(options.db, options.workflowId);\n    if (!claimed) {\n        const existing = await getWorkflowRow(options.db, options.workflowId);\n        if (!existing) {\n            return { status: \"not_found\", workflowId: options.workflowId };\n        }\n        if (existing.status === \"completed\") {\n            return {\n                status: \"completed\",\n                workflowId: existing.id,\n                workflowName: existing.name,\n            };\n        }\n        return {\n            status: \"skipped\",\n            workflowId: existing.id,\n            workflowName: existing.name,\n        };\n    }\n    const workflowDef = getWorkflowDef(claimed.name);\n    if (!workflowDef) {\n        const missingError = `workflow \"${claimed.name}\" is not registered in this runtime`;\n        await markWorkflowFailed(options.db, claimed.id, missingError, claimed.retry_count, \"workflow_definition_missing\");\n        await emitWorkflowSnapshot(options.buildCtx().realtime, options.db, claimed.id, logger);\n        return {\n            status: \"failed\",\n            workflowId: claimed.id,\n            workflowName: claimed.name,\n            retryCount: claimed.retry_count,\n            errorCode: \"workflow_definition_missing\",\n            error: missingError,\n        };\n    }\n    const handlerStartedAt = claimed.handler_started_at ?? new Date(now()).toISOString();\n    if (!claimed.handler_started_at) {\n        await markWorkflowHandlerStarted(options.db, claimed.id, handlerStartedAt);\n    }\n    const handlerStartedAtMs = parseWorkflowDate(handlerStartedAt) ?? now();\n    const timeoutDecision = computeWorkflowTimeoutDecision({ ...claimed, handler_started_at: handlerStartedAt }, now());\n    if (timeoutDecision) {\n        const nextRetry = claimed.retry_count + 1;\n        if (timeoutDecision.retryable && nextRetry <= claimed.max_retries) {\n            const nextDelayMs = computeWorkflowRetryDelayMs(nextRetry);\n            await requeueWorkflowBeforeFirstStep(options.db, claimed.id, nextRetry, timeoutDecision.error, timeoutDecision.errorCode);\n            await emitWorkflowSnapshot(options.buildCtx().realtime, options.db, claimed.id, logger);\n            options.scheduleResume(claimed.id, nextDelayMs);\n            writeWorkflowLog(logger, \"warn\", `${claimed.name} failed before first step \u2014 retry ${nextRetry}/${claimed.max_retries} in ${nextDelayMs}ms (id: ${claimed.id}): ${timeoutDecision.error}`);\n            return {\n                status: \"requeued\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                retryCount: nextRetry,\n                nextDelayMs,\n                errorCode: timeoutDecision.errorCode,\n            };\n        }\n        await markWorkflowFailed(options.db, claimed.id, timeoutDecision.error, timeoutDecision.retryable ? nextRetry : claimed.retry_count, timeoutDecision.errorCode);\n        await emitWorkflowSnapshot(options.buildCtx().realtime, options.db, claimed.id, logger);\n        writeWorkflowLog(logger, \"error\", `${claimed.name} failed maxDuration check (id: ${claimed.id}): ${timeoutDecision.error}`);\n        return {\n            status: \"failed\",\n            workflowId: claimed.id,\n            workflowName: claimed.name,\n            retryCount: timeoutDecision.retryable ? nextRetry : claimed.retry_count,\n            errorCode: timeoutDecision.errorCode,\n            error: timeoutDecision.error,\n        };\n    }\n    const baseCtx = options.buildCtx();\n    const workflowArgs = deserializeWorkflowValue(parseJsonField(claimed.args));\n    await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n    writeWorkflowLog(logger, \"log\", `${claimed.name} resumed (id: ${claimed.id})`);\n    writeWorkflowLog(logger, \"log\", `${claimed.name} resume context (id: ${claimed.id}, retry: ${claimed.retry_count}/${claimed.max_retries}, from: ${claimed.current_step ?? \"start\"})`, { verbose: true });\n    let sleepIndex = 0;\n    let waitIndex = 0;\n    let parallelIndex = 0;\n    const runWorkflowStep = async (stepName, run) => {\n        const existing = await getWorkflowStep(options.db, claimed.id, stepName);\n        if (existing?.status === \"completed\") {\n            writeWorkflowLog(logger, \"log\", `${claimed.name} step ${stepName} checkpoint hit (id: ${claimed.id})`, {\n                verbose: true,\n            });\n            return deserializeWorkflowValue(parseJsonField(existing.output));\n        }\n        const stepStartedAtMs = now();\n        writeWorkflowLog(logger, \"log\", `${claimed.name} step ${stepName} started (id: ${claimed.id})`);\n        await options.db.execute(sql `\n            INSERT INTO _gencow_workflow_steps (\n                workflow_id,\n                step_name,\n                status,\n                output,\n                error,\n                started_at,\n                updated_at,\n                completed_at\n            )\n            VALUES (\n                ${claimed.id},\n                ${stepName},\n                'running',\n                NULL,\n                NULL,\n                NOW(),\n                NOW(),\n                NULL\n            )\n            ON CONFLICT (workflow_id, step_name)\n            DO UPDATE SET\n                status = 'running',\n                output = NULL,\n                error = NULL,\n                started_at = NOW(),\n                updated_at = NOW(),\n                completed_at = NULL\n        `);\n        await options.db.execute(sql `\n            UPDATE _gencow_workflows\n            SET\n                current_step = ${stepName},\n                updated_at = NOW(),\n                error = NULL\n            WHERE id = ${claimed.id}\n        `);\n        await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n        try {\n            const output = await run();\n            const persisted = serializeWorkflowValue(output);\n            const checkpointDecision = measureWorkflowCheckpoint(persisted, checkpointPolicyConfig);\n            writeWorkflowCheckpointPolicyLog({\n                logger,\n                workflowName: claimed.name,\n                stepKey: stepName,\n                decision: checkpointDecision,\n                hardLimitBytes: checkpointPolicyConfig.hardLimitBytes,\n                mode: checkpointPolicyConfig.mode,\n            });\n            if (checkpointDecision.level === \"hard_limit\" &&\n                shouldEnforceWorkflowCheckpointLimit({\n                    mode: checkpointPolicyConfig.mode,\n                    workflowName: claimed.name,\n                })) {\n                throw createWorkflowCheckpointError({\n                    workflowName: claimed.name,\n                    stepKey: stepName,\n                    decision: checkpointDecision,\n                    hardLimitBytes: checkpointPolicyConfig.hardLimitBytes,\n                });\n            }\n            await options.db.execute(sql `\n                UPDATE _gencow_workflow_steps\n                SET\n                    status = 'completed',\n                    output = ${JSON.stringify(persisted)}::jsonb,\n                    error = NULL,\n                    updated_at = NOW(),\n                    completed_at = NOW()\n                WHERE workflow_id = ${claimed.id}\n                  AND step_name = ${stepName}\n            `);\n            await options.db.execute(sql `\n                UPDATE _gencow_workflows\n                SET\n                    current_step = ${stepName},\n                    updated_at = NOW()\n                WHERE id = ${claimed.id}\n            `);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            writeWorkflowLog(logger, \"log\", `${claimed.name} step ${stepName} completed in ${formatDurationMs(now() - stepStartedAtMs)} (id: ${claimed.id})`);\n            return output;\n        }\n        catch (error) {\n            const message = errorMessage(error);\n            await options.db.execute(sql `\n                UPDATE _gencow_workflow_steps\n                SET\n                    status = 'failed',\n                    error = ${message},\n                    updated_at = NOW(),\n                    completed_at = NULL\n                WHERE workflow_id = ${claimed.id}\n                  AND step_name = ${stepName}\n            `);\n            await options.db.execute(sql `\n                UPDATE _gencow_workflows\n                SET\n                    current_step = ${stepName},\n                    error = ${message},\n                    updated_at = NOW()\n                WHERE id = ${claimed.id}\n            `);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            writeWorkflowLog(logger, \"error\", `${claimed.name} step ${stepName} failed after ${formatDurationMs(now() - stepStartedAtMs)} (id: ${claimed.id}): ${message}`);\n            throw error;\n        }\n    };\n    const workflowAuth = restoreWorkflowAuth(baseCtx.auth, claimed.user_id);\n    const workflowCtx = {\n        ...baseCtx,\n        auth: workflowAuth,\n        workflowId: claimed.id,\n        workflowName: claimed.name,\n        services: attachWorkflowDocumentServices(baseCtx.services, {\n            workflowId: claimed.id,\n            workflowName: claimed.name,\n            auth: workflowAuth,\n        }),\n        step: async (stepName, run) => {\n            return runWorkflowStep(stepName, run);\n        },\n        sleep: async (duration) => {\n            const stepName = getWorkflowSleepStepName(++sleepIndex);\n            const existing = await getWorkflowStep(options.db, claimed.id, stepName);\n            if (existing?.status === \"completed\") {\n                return;\n            }\n            const existingSleepState = existing ? deserializeWorkflowValue(parseJsonField(existing.output)) : null;\n            if (existingSleepState != null && !isWorkflowSleepState(existingSleepState)) {\n                throw new Error(`workflow sleep checkpoint \"${stepName}\" is missing wake metadata`);\n            }\n            const sleepState = existingSleepState && isWorkflowSleepState(existingSleepState)\n                ? existingSleepState\n                : createWorkflowSleepState(now(), parseWorkflowDurationMs(duration, \"wf.sleep()\"));\n            const wakeAtMs = parseWorkflowDate(sleepState.wakeAt);\n            if (wakeAtMs == null) {\n                throw new Error(`workflow sleep checkpoint \"${stepName}\" has invalid wakeAt \"${sleepState.wakeAt}\"`);\n            }\n            if (wakeAtMs <= now()) {\n                await markWorkflowSleepStepCompleted(options.db, claimed.id, stepName, sleepState);\n                return;\n            }\n            await markWorkflowSleepStepPending(options.db, claimed.id, stepName, sleepState);\n            throw new WorkflowSleepSignal(stepName, wakeAtMs - now());\n        },\n        waitForEvent: async (eventName, timeout) => {\n            const normalizedEventName = eventName.trim();\n            if (!normalizedEventName) {\n                throw new Error(\"wf.waitForEvent() requires a non-empty event name\");\n            }\n            const stepName = getWorkflowWaitStepName(normalizedEventName, ++waitIndex);\n            const existing = await getWorkflowStep(options.db, claimed.id, stepName);\n            if (existing?.status === \"completed\") {\n                return deserializeWorkflowValue(parseJsonField(existing.output));\n            }\n            const existingWaitState = existing ? deserializeWorkflowValue(parseJsonField(existing.output)) : null;\n            if (existingWaitState != null && !isWorkflowWaitState(existingWaitState)) {\n                throw new Error(`workflow wait checkpoint \"${stepName}\" is missing event metadata`);\n            }\n            const waitState = existingWaitState && isWorkflowWaitState(existingWaitState)\n                ? {\n                    eventName: existingWaitState.eventName,\n                    timeoutAt: existingWaitState.timeoutAt ?? null,\n                    timeoutMs: existingWaitState.timeoutMs ?? null,\n                }\n                : createWorkflowWaitState(now(), normalizedEventName, timeout);\n            const eventRow = await claimWorkflowEvent(options.db, claimed.id, normalizedEventName);\n            if (eventRow) {\n                const payload = deserializeWorkflowValue(parseJsonField(eventRow.payload));\n                await markWorkflowWaitStepCompleted(options.db, claimed.id, stepName, payload);\n                writeWorkflowLog(logger, \"log\", `${claimed.name} consumed event \"${normalizedEventName}\" at ${stepName} (id: ${claimed.id})`, { verbose: true });\n                return payload;\n            }\n            const timeoutAtMs = parseWorkflowDate(waitState.timeoutAt);\n            if (timeoutAtMs != null && timeoutAtMs <= now()) {\n                const timeoutError = new WorkflowTimeoutError(stepName, normalizedEventName, waitState.timeoutMs);\n                await markWorkflowWaitStepFailed(options.db, claimed.id, stepName, timeoutError.message);\n                throw timeoutError;\n            }\n            await markWorkflowWaitStepPending(options.db, claimed.id, stepName, waitState);\n            throw new WorkflowWaitSignal(stepName, normalizedEventName, timeoutAtMs == null ? null : timeoutAtMs - now());\n        },\n        parallel: async (tasks) => {\n            if (tasks.length === 0) {\n                return [];\n            }\n            const groupIndex = ++parallelIndex;\n            const settled = await Promise.allSettled(tasks.map((task, index) => runWorkflowStep(getWorkflowParallelStepName(groupIndex, index + 1), task)));\n            const firstRejected = settled.find((result) => result.status === \"rejected\");\n            if (firstRejected && firstRejected.status === \"rejected\") {\n                throw firstRejected.reason;\n            }\n            return settled.map((result) => {\n                if (result.status !== \"fulfilled\") {\n                    throw new Error(\"workflow parallel branch did not fulfill\");\n                }\n                return result.value;\n            });\n        },\n    };\n    try {\n        const result = await workflowDef.handler(workflowCtx, (workflowArgs ?? {}));\n        const persistedResult = serializeWorkflowValue(result);\n        const resultDecision = measureWorkflowCheckpoint(persistedResult, checkpointPolicyConfig);\n        writeWorkflowCheckpointPolicyLog({\n            logger,\n            workflowName: claimed.name,\n            stepKey: \"$result\",\n            decision: resultDecision,\n            hardLimitBytes: checkpointPolicyConfig.hardLimitBytes,\n            mode: checkpointPolicyConfig.mode,\n        });\n        if (resultDecision.level === \"hard_limit\" &&\n            shouldEnforceWorkflowCheckpointLimit({ mode: checkpointPolicyConfig.mode, workflowName: claimed.name })) {\n            throw createWorkflowResultError({\n                workflowName: claimed.name,\n                decision: resultDecision,\n                hardLimitBytes: checkpointPolicyConfig.hardLimitBytes,\n            });\n        }\n        await markWorkflowCompleted(options.db, claimed.id, result, persistedResult);\n        await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n        writeWorkflowLog(logger, \"log\", `${claimed.name} completed in ${formatDurationMs(now() - handlerStartedAtMs)} (id: ${claimed.id})`);\n        return {\n            status: \"completed\",\n            workflowId: claimed.id,\n            workflowName: claimed.name,\n        };\n    }\n    catch (error) {\n        if (error instanceof WorkflowSleepSignal) {\n            await markWorkflowPendingAtStep(options.db, claimed.id, error.stepName);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            options.scheduleResume(claimed.id, error.nextDelayMs);\n            writeWorkflowLog(logger, \"log\", `${claimed.name} sleeping at ${error.stepName} for ${error.nextDelayMs}ms (id: ${claimed.id})`);\n            return {\n                status: \"sleeping\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                stepName: error.stepName,\n                nextDelayMs: error.nextDelayMs,\n            };\n        }\n        if (error instanceof WorkflowWaitSignal) {\n            await markWorkflowPendingAtStep(options.db, claimed.id, error.stepName);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            if (error.nextDelayMs != null) {\n                options.scheduleResume(claimed.id, error.nextDelayMs);\n            }\n            writeWorkflowLog(logger, \"log\", `${claimed.name} waiting for event \"${error.eventName}\" at ${error.stepName} (id: ${claimed.id})`);\n            return {\n                status: \"waiting\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                stepName: error.stepName,\n                eventName: error.eventName,\n            };\n        }\n        if (error instanceof WorkflowTimeoutError) {\n            await markWorkflowFailed(options.db, claimed.id, error.message, claimed.retry_count);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            writeWorkflowLog(logger, \"error\", `${claimed.name} timed out while waiting for \"${error.eventName}\" (id: ${claimed.id})`);\n            return {\n                status: \"failed\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                retryCount: claimed.retry_count,\n                error: error.message,\n            };\n        }\n        if (error instanceof WorkflowResultPolicyError) {\n            await markWorkflowFailed(options.db, claimed.id, error.message, claimed.retry_count, error.errorCode);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            writeWorkflowLog(logger, \"error\", `${claimed.name} failed result policy (id: ${claimed.id}): ${error.message}`);\n            return {\n                status: \"failed\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                retryCount: claimed.retry_count,\n                error: error.message,\n                errorCode: error.errorCode,\n            };\n        }\n        if (error instanceof WorkflowCheckpointPolicyError) {\n            await markWorkflowFailed(options.db, claimed.id, error.message, claimed.retry_count, error.errorCode);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            writeWorkflowLog(logger, \"error\", `${claimed.name} failed checkpoint policy at ${error.stepKey} (id: ${claimed.id}): ${error.message}`);\n            return {\n                status: \"failed\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                retryCount: claimed.retry_count,\n                error: error.message,\n                errorCode: error.errorCode,\n            };\n        }\n        const message = errorMessage(error);\n        const providerRetry = providerRateLimitRetrySignal(error);\n        const nextRetry = claimed.retry_count + 1;\n        if (nextRetry <= claimed.max_retries) {\n            const nextDelayMs = providerRetry?.retryAfterMs ?? computeWorkflowRetryDelayMs(nextRetry);\n            await requeueWorkflow(options.db, claimed.id, nextRetry, message, providerRetry?.errorCode ?? null, providerRetry ? nextDelayMs : null);\n            await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n            options.scheduleResume(claimed.id, nextDelayMs);\n            writeWorkflowLog(logger, \"warn\", `${claimed.name} failed after ${formatDurationMs(now() - handlerStartedAtMs)} \u2014 retry ${nextRetry}/${claimed.max_retries} in ${nextDelayMs}ms (id: ${claimed.id}): ${message}`);\n            return {\n                status: \"requeued\",\n                workflowId: claimed.id,\n                workflowName: claimed.name,\n                retryCount: nextRetry,\n                nextDelayMs,\n                ...(providerRetry ? { errorCode: providerRetry.errorCode } : {}),\n            };\n        }\n        await markWorkflowFailed(options.db, claimed.id, message, nextRetry, providerRetry?.errorCode ?? null);\n        await emitWorkflowSnapshot(baseCtx.realtime, options.db, claimed.id, logger);\n        writeWorkflowLog(logger, \"error\", `${claimed.name} failed permanently after ${formatDurationMs(now() - handlerStartedAtMs)} (id: ${claimed.id}): ${message}`);\n        return {\n            status: \"failed\",\n            workflowId: claimed.id,\n            workflowName: claimed.name,\n            retryCount: nextRetry,\n            error: message,\n            ...(providerRetry ? { errorCode: providerRetry.errorCode } : {}),\n        };\n    }\n}\n", "export const OAUTH_EXCHANGE_SYSTEM_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS _gencow_oauth_codes (\n    code_hash TEXT PRIMARY KEY,\n    session_token_encrypted TEXT NOT NULL,\n    token_iv TEXT NOT NULL,\n    user_id TEXT NOT NULL,\n    user_email TEXT NOT NULL,\n    user_name TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    used_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_oauth_codes_expires\n    ON _gencow_oauth_codes (expires_at)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_oauth_invite_reservations (\n    token_hash TEXT PRIMARY KEY,\n    invite_code TEXT NOT NULL,\n    provider_id TEXT NOT NULL,\n    status TEXT NOT NULL DEFAULT 'pending',\n    user_id TEXT,\n    user_email TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    completed_at TIMESTAMPTZ,\n    released_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_oauth_invite_reservations_expires\n    ON _gencow_oauth_invite_reservations (status, expires_at)`,\n    `CREATE TABLE IF NOT EXISTS _gencow_oauth_signup_handoffs (\n    token_hash TEXT PRIMARY KEY,\n    provider_id TEXT NOT NULL,\n    status TEXT NOT NULL DEFAULT 'pending',\n    user_id TEXT,\n    user_email TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    completed_at TIMESTAMPTZ,\n    released_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx__gencow_oauth_signup_handoffs_expires\n    ON _gencow_oauth_signup_handoffs (status, expires_at)`,\n];\n", "/** Runtime DDL for platform rag_* tables. Drizzle reference: ./rag-ingest-schema-reference.ts */\nexport const RAG_SYSTEM_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS rag_corpora (\n        id TEXT PRIMARY KEY,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        title TEXT NOT NULL,\n        description TEXT,\n        allow_external_providers BOOLEAN NOT NULL DEFAULT false,\n        retention_days INTEGER,\n        metadata JSONB NOT NULL DEFAULT '{}'::jsonb\n    )`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS idx_rag_corpora_scope ON rag_corpora (corpus, visibility_scope, COALESCE(owner_user_id, ''))`,\n    `CREATE TABLE IF NOT EXISTS rag_sources (\n        id TEXT PRIMARY KEY,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        storage_id TEXT NOT NULL,\n        source_key TEXT NOT NULL,\n        source_title TEXT NOT NULL,\n        mime_type TEXT NOT NULL,\n        byte_size BIGINT NOT NULL,\n        source_checksum TEXT NOT NULL,\n        convert_provider TEXT NOT NULL,\n        convert_status TEXT NOT NULL,\n        markdown TEXT NOT NULL DEFAULT '',\n        text TEXT NOT NULL DEFAULT '',\n        warnings JSONB NOT NULL DEFAULT '[]'::jsonb,\n        metadata JSONB NOT NULL DEFAULT '{}'::jsonb\n    )`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS idx_rag_sources_scope_key ON rag_sources (corpus, visibility_scope, COALESCE(owner_user_id, ''), source_key)`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_sources_checksum ON rag_sources (corpus, source_checksum)`,\n    `CREATE TABLE IF NOT EXISTS rag_sections (\n        id TEXT PRIMARY KEY,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        source_id TEXT NOT NULL,\n        section_index INTEGER NOT NULL,\n        section_path JSONB NOT NULL DEFAULT '[]'::jsonb,\n        title TEXT,\n        depth INTEGER NOT NULL,\n        page_start INTEGER,\n        page_end INTEGER,\n        char_start INTEGER NOT NULL,\n        char_end INTEGER NOT NULL\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_sections_source ON rag_sections (source_id, section_index)`,\n    `CREATE TABLE IF NOT EXISTS rag_chunks (\n        id TEXT PRIMARY KEY,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        source_id TEXT NOT NULL,\n        section_id TEXT,\n        chunk_index INTEGER NOT NULL,\n        chunk_text TEXT NOT NULL,\n        lexical_text TEXT NOT NULL,\n        embedding vector(1536),\n        page_start INTEGER,\n        page_end INTEGER,\n        chunk_checksum TEXT NOT NULL,\n        metadata JSONB NOT NULL DEFAULT '{}'::jsonb\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_chunks_scope ON rag_chunks (corpus, visibility_scope, COALESCE(owner_user_id, ''))`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_chunks_source ON rag_chunks (source_id, chunk_index)`,\n    `CREATE TABLE IF NOT EXISTS rag_ingest_jobs (\n        id TEXT PRIMARY KEY,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        workflow_id TEXT NOT NULL,\n        source_id TEXT NOT NULL,\n        status TEXT NOT NULL,\n        stage TEXT NOT NULL,\n        provider_trace JSONB NOT NULL DEFAULT '{}'::jsonb,\n        metrics JSONB NOT NULL DEFAULT '{}'::jsonb,\n        error TEXT,\n        started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        completed_at TIMESTAMPTZ\n    )`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS idx_rag_ingest_jobs_workflow ON rag_ingest_jobs (workflow_id)`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_ingest_jobs_source ON rag_ingest_jobs (source_id, started_at DESC)`,\n    `CREATE TABLE IF NOT EXISTS rag_operation_metrics (\n        id TEXT PRIMARY KEY,\n        app_id TEXT NOT NULL,\n        corpus TEXT NOT NULL,\n        visibility_scope TEXT NOT NULL,\n        owner_user_id TEXT,\n        operation TEXT NOT NULL,\n        job_id TEXT,\n        workflow_id TEXT,\n        source_id TEXT,\n        metric_name TEXT NOT NULL,\n        metric_value DOUBLE PRECISION NOT NULL,\n        unit TEXT,\n        metadata JSONB NOT NULL DEFAULT '{}'::jsonb,\n        recorded_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_operation_metrics_scope ON rag_operation_metrics (corpus, visibility_scope, COALESCE(owner_user_id, ''), recorded_at DESC)`,\n    `CREATE INDEX IF NOT EXISTS idx_rag_operation_metrics_operation ON rag_operation_metrics (operation, metric_name, recorded_at DESC)`,\n];\n", "export const TEMPLATE_MARKETPLACE_BOOTSTRAP_SQL = [\n    `CREATE TABLE IF NOT EXISTS template_listings (\n    id SERIAL PRIMARY KEY,\n    slug TEXT NOT NULL UNIQUE,\n    owner_user_id TEXT NOT NULL,\n    source_app_id INTEGER,\n    public_preview_app_id INTEGER,\n    current_release_id INTEGER,\n    title TEXT NOT NULL,\n    summary TEXT NOT NULL DEFAULT '',\n    description TEXT NOT NULL DEFAULT '',\n    category TEXT,\n    tags_json TEXT NOT NULL DEFAULT '[]',\n    status TEXT NOT NULL DEFAULT 'draft',\n    visibility_intent TEXT NOT NULL DEFAULT 'private',\n    price_type TEXT NOT NULL DEFAULT 'free',\n    price_cents INTEGER NOT NULL DEFAULT 0,\n    currency TEXT NOT NULL DEFAULT 'USD',\n    license TEXT,\n    rejection_reason TEXT,\n    submitted_at TIMESTAMP,\n    approved_at TIMESTAMP,\n    approved_by TEXT,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE TABLE IF NOT EXISTS template_releases (\n    id SERIAL PRIMARY KEY,\n    template_id INTEGER NOT NULL,\n    version TEXT NOT NULL,\n    bundle_hash TEXT NOT NULL,\n    bundle_storage_key TEXT NOT NULL,\n    source_manifest_json TEXT NOT NULL DEFAULT '{}',\n    preview_app_id INTEGER,\n    preview_frontend_url TEXT,\n    project_kind TEXT NOT NULL DEFAULT 'full_stack',\n    frontend_framework TEXT NOT NULL DEFAULT 'unknown',\n    package_manager TEXT NOT NULL DEFAULT 'unknown',\n    frontend_root TEXT,\n    backend_root TEXT,\n    build_workdir TEXT,\n    build_command TEXT,\n    static_output_dir TEXT,\n    code_size_bytes BIGINT NOT NULL DEFAULT 0,\n    status TEXT NOT NULL DEFAULT 'draft',\n    install_status TEXT NOT NULL DEFAULT 'pending',\n    install_error TEXT,\n    screenshot_status TEXT NOT NULL DEFAULT 'pending',\n    screenshot_error TEXT,\n    preview_screenshots_json TEXT NOT NULL DEFAULT '[]',\n    audit_status TEXT NOT NULL DEFAULT 'pending',\n    audit_summary_json TEXT NOT NULL DEFAULT '{}',\n    created_by TEXT NOT NULL,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    UNIQUE (template_id, version)\n  )`,\n    `ALTER TABLE template_releases\n    ADD COLUMN IF NOT EXISTS screenshot_status TEXT NOT NULL DEFAULT 'pending',\n    ADD COLUMN IF NOT EXISTS screenshot_error TEXT,\n    ADD COLUMN IF NOT EXISTS preview_screenshots_json TEXT NOT NULL DEFAULT '[]'`,\n    `CREATE TABLE IF NOT EXISTS template_entitlements (\n    id SERIAL PRIMARY KEY,\n    template_id INTEGER NOT NULL,\n    user_id TEXT NOT NULL,\n    source TEXT NOT NULL,\n    purchase_id INTEGER,\n    scope TEXT NOT NULL DEFAULT 'approved_releases',\n    granted_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    revoked_at TIMESTAMP,\n    UNIQUE (template_id, user_id)\n  )`,\n    `CREATE TABLE IF NOT EXISTS template_purchases (\n    id SERIAL PRIMARY KEY,\n    template_id INTEGER NOT NULL,\n    buyer_user_id TEXT NOT NULL,\n    seller_user_id TEXT NOT NULL,\n    amount_cents INTEGER NOT NULL,\n    currency TEXT NOT NULL,\n    provider TEXT NOT NULL DEFAULT 'stripe',\n    provider_session_id TEXT,\n    provider_payment_id TEXT,\n    provider_event_id TEXT,\n    status TEXT NOT NULL DEFAULT 'pending',\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    paid_at TIMESTAMP,\n    refunded_at TIMESTAMP\n  )`,\n    `CREATE TABLE IF NOT EXISTS template_events (\n    id SERIAL PRIMARY KEY,\n    template_id INTEGER NOT NULL,\n    release_id INTEGER,\n    user_id TEXT,\n    event_type TEXT NOT NULL,\n    request_fingerprint TEXT,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE TABLE IF NOT EXISTS template_daily_metrics (\n    template_id INTEGER NOT NULL,\n    day TEXT NOT NULL,\n    views INTEGER NOT NULL DEFAULT 0,\n    unique_viewers INTEGER NOT NULL DEFAULT 0,\n    preview_opens INTEGER NOT NULL DEFAULT 0,\n    downloads INTEGER NOT NULL DEFAULT 0,\n    cli_clones INTEGER NOT NULL DEFAULT 0,\n    purchases INTEGER NOT NULL DEFAULT 0,\n    gross_revenue_cents BIGINT NOT NULL DEFAULT 0,\n    refunds INTEGER NOT NULL DEFAULT 0,\n    UNIQUE (template_id, day)\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx_template_listings_owner_status\n    ON template_listings (owner_user_id, status)`,\n    `CREATE INDEX IF NOT EXISTS idx_template_releases_template_status\n    ON template_releases (template_id, status)`,\n    `CREATE INDEX IF NOT EXISTS idx_template_entitlements_user_template\n    ON template_entitlements (user_id, template_id)`,\n    `CREATE INDEX IF NOT EXISTS idx_template_purchases_buyer_status\n    ON template_purchases (buyer_user_id, status)`,\n    `CREATE INDEX IF NOT EXISTS idx_template_events_template_created\n    ON template_events (template_id, created_at)`,\n];\nexport async function ensureTemplateMarketplacePlatformSchema(params) {\n    if (!params.isPlatform)\n        return;\n    for (const statement of TEMPLATE_MARKETPLACE_BOOTSTRAP_SQL) {\n        await params.rawSql(statement);\n    }\n    (params.logger ?? console).log(\"[db] template marketplace tables \u2713\");\n}\n", "export const SERVER_PLATFORM_EMAIL_BOOTSTRAP_SQL = [\n    `CREATE TABLE IF NOT EXISTS platform_email_outbox (\n    id SERIAL PRIMARY KEY,\n    idempotency_key TEXT NOT NULL UNIQUE,\n    template_key TEXT NOT NULL,\n    template_version INTEGER NOT NULL DEFAULT 1,\n    recipient_user_id TEXT,\n    recipient_email TEXT NOT NULL,\n    payload_json TEXT NOT NULL DEFAULT '{}',\n    subject TEXT,\n    status TEXT NOT NULL DEFAULT 'queued',\n    attempt_count INTEGER NOT NULL DEFAULT 0,\n    next_attempt_at TIMESTAMP DEFAULT NOW(),\n    provider TEXT,\n    provider_message_id TEXT,\n    last_error TEXT,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    sent_at TIMESTAMP\n  )`,\n    `UPDATE platform_email_outbox SET status = 'failed' WHERE status = 'retry'`,\n    `DO $$\n  BEGIN\n    IF NOT EXISTS (\n      SELECT 1\n      FROM pg_constraint\n      WHERE conname = 'platform_email_outbox_status_check'\n        AND conrelid = 'platform_email_outbox'::regclass\n    ) THEN\n      ALTER TABLE platform_email_outbox\n        ADD CONSTRAINT platform_email_outbox_status_check\n        CHECK (status IN ('queued', 'sending', 'sent', 'failed', 'dead'))\n        NOT VALID;\n    END IF;\n  END $$`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_outbox_status_next_attempt\n    ON platform_email_outbox (status, next_attempt_at)`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_outbox_recipient_user\n    ON platform_email_outbox (recipient_user_id, created_at)`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_outbox_template_created\n    ON platform_email_outbox (template_key, created_at)`,\n    `CREATE TABLE IF NOT EXISTS platform_email_templates (\n    id SERIAL PRIMARY KEY,\n    key TEXT NOT NULL UNIQUE,\n    display_name TEXT NOT NULL,\n    description TEXT,\n    variable_schema_json TEXT NOT NULL DEFAULT '{}',\n    created_by TEXT NOT NULL,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE TABLE IF NOT EXISTS platform_email_template_versions (\n    id SERIAL PRIMARY KEY,\n    template_id INTEGER NOT NULL,\n    version INTEGER NOT NULL,\n    status TEXT NOT NULL DEFAULT 'draft',\n    layout_key TEXT NOT NULL DEFAULT 'activation',\n    body_format TEXT NOT NULL DEFAULT 'markdown',\n    subject TEXT NOT NULL,\n    markdown_body TEXT NOT NULL,\n    compiled_html TEXT,\n    compiled_text TEXT,\n    created_by TEXT NOT NULL,\n    published_by TEXT,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    published_at TIMESTAMP,\n    UNIQUE (template_id, version)\n  )`,\n    `ALTER TABLE platform_email_template_versions\n    ADD COLUMN IF NOT EXISTS layout_key TEXT NOT NULL DEFAULT 'activation'`,\n    `ALTER TABLE platform_email_template_versions\n    ALTER COLUMN layout_key SET DEFAULT 'activation'`,\n    `ALTER TABLE platform_email_template_versions\n    ADD COLUMN IF NOT EXISTS body_format TEXT NOT NULL DEFAULT 'markdown'`,\n    `ALTER TABLE platform_email_template_versions\n    ALTER COLUMN body_format SET DEFAULT 'markdown'`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_template_versions_template_status\n    ON platform_email_template_versions (template_id, status, version)`,\n    `CREATE TABLE IF NOT EXISTS platform_email_settings (\n    key TEXT PRIMARY KEY,\n    value_json TEXT NOT NULL DEFAULT '{}',\n    updated_by TEXT,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE TABLE IF NOT EXISTS platform_email_audit_log (\n    id SERIAL PRIMARY KEY,\n    actor_user_id TEXT NOT NULL,\n    action TEXT NOT NULL,\n    target_type TEXT NOT NULL,\n    target_id TEXT NOT NULL,\n    metadata_json TEXT NOT NULL DEFAULT '{}',\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_audit_log_actor_created\n    ON platform_email_audit_log (actor_user_id, created_at)`,\n    `CREATE TABLE IF NOT EXISTS platform_email_broadcasts (\n    id SERIAL PRIMARY KEY,\n    created_by TEXT NOT NULL,\n    category TEXT NOT NULL,\n    target_json TEXT NOT NULL,\n    body_format TEXT NOT NULL DEFAULT 'markdown',\n    subject TEXT NOT NULL,\n    body_content TEXT NOT NULL,\n    content_hash TEXT NOT NULL,\n    status TEXT NOT NULL DEFAULT 'previewed',\n    recipient_count INTEGER NOT NULL DEFAULT 0,\n    send_key_hash TEXT,\n    test_sent_at TIMESTAMP,\n    enqueued_at TIMESTAMP,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_broadcasts_created_by_created\n    ON platform_email_broadcasts (created_by, created_at DESC)`,\n    `CREATE TABLE IF NOT EXISTS platform_email_preferences (\n    user_id TEXT NOT NULL,\n    category TEXT NOT NULL,\n    unsubscribed_at TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    PRIMARY KEY (user_id, category)\n  )`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_email_preferences_user_category\n    ON platform_email_preferences (user_id, category)`,\n];\nexport async function ensurePlatformEmailSchema(params) {\n    if (!params.isPlatform)\n        return;\n    const logger = params.logger ?? console;\n    for (const statement of SERVER_PLATFORM_EMAIL_BOOTSTRAP_SQL) {\n        await params.rawSql(statement);\n    }\n    logger.log(\"[db] platform email schema \u2713\");\n}\n", "export const SERVER_PLATFORM_WEBHOOK_BOOTSTRAP_SQL = [\n    `CREATE TABLE IF NOT EXISTS platform_webhook_outbox (\n    id SERIAL PRIMARY KEY,\n    app_id INTEGER,\n    idempotency_key TEXT NOT NULL UNIQUE,\n    event_type TEXT NOT NULL,\n    target_url TEXT NOT NULL,\n    method TEXT NOT NULL DEFAULT 'POST',\n    headers_json TEXT NOT NULL DEFAULT '{}',\n    payload_json TEXT NOT NULL DEFAULT '{}',\n    status TEXT NOT NULL DEFAULT 'queued',\n    attempt_count INTEGER NOT NULL DEFAULT 0,\n    next_attempt_at TIMESTAMP DEFAULT NOW(),\n    provider TEXT,\n    response_status INTEGER,\n    response_body_preview TEXT,\n    last_error TEXT,\n    created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n    sent_at TIMESTAMP\n  )`,\n    `ALTER TABLE platform_webhook_outbox ADD COLUMN IF NOT EXISTS app_id INTEGER`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_webhook_outbox_status_next_attempt\n    ON platform_webhook_outbox (status, next_attempt_at)`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_webhook_outbox_event_created\n    ON platform_webhook_outbox (event_type, created_at)`,\n    `CREATE INDEX IF NOT EXISTS idx_platform_webhook_outbox_app_status\n    ON platform_webhook_outbox (app_id, status)\n    WHERE app_id IS NOT NULL`,\n];\nexport async function ensurePlatformWebhookSchema(params) {\n    if (!params.isPlatform)\n        return;\n    const logger = params.logger ?? console;\n    for (const statement of SERVER_PLATFORM_WEBHOOK_BOOTSTRAP_SQL) {\n        await params.rawSql(statement);\n    }\n    logger.log(\"[db] platform webhook schema \u2713\");\n}\n", "import { createRlsDb } from \"@gencow/core\";\nconst ADMIN_OR_SYSTEM = `_gencow_platform_is_admin_or_system()`;\nconst CURRENT_USER = `_gencow_platform_current_user_id()`;\nconst OWNED_APP = `EXISTS (SELECT 1 FROM apps a WHERE a.id = app_id AND a.user_id = ${CURRENT_USER})`;\nexport const PLATFORM_SYSTEM_RLS_CONTEXT = {\n    currentUserId: \"\",\n    currentUserRole: \"system\",\n    internalSystem: \"true\",\n};\nexport const PLATFORM_RLS_TARGET_TABLES = [\n    {\n        tableName: \"apps\",\n        quotedName: \"apps\",\n        policyName: \"gencow_apps_isolation\",\n        using: `${ADMIN_OR_SYSTEM} OR user_id = ${CURRENT_USER}`,\n    },\n    {\n        tableName: \"env_vars\",\n        quotedName: \"env_vars\",\n        policyName: \"gencow_env_vars_app_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"deployments\",\n        quotedName: \"deployments\",\n        policyName: \"gencow_deployments_app_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"cron_jobs\",\n        quotedName: \"cron_jobs\",\n        policyName: \"gencow_cron_jobs_app_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"credits\",\n        quotedName: \"credits\",\n        policyName: \"gencow_credits_app_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"usage_snapshots\",\n        quotedName: \"usage_snapshots\",\n        policyName: \"gencow_usage_snapshots_app_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"app_deprecated_api_snapshots\",\n        quotedName: \"app_deprecated_api_snapshots\",\n        policyName: \"gencow_app_deprecated_api_snapshots_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"db_backups\",\n        quotedName: \"db_backups\",\n        policyName: \"gencow_db_backups_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR (user_id = ${CURRENT_USER} AND ${OWNED_APP})`,\n    },\n    {\n        tableName: \"cli_tokens\",\n        quotedName: \"cli_tokens\",\n        policyName: \"gencow_cli_tokens_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR user_id = ${CURRENT_USER}`,\n    },\n    {\n        tableName: \"platform_domain_audit_log\",\n        quotedName: \"platform_domain_audit_log\",\n        policyName: \"gencow_platform_domain_audit_admin\",\n        using: `${ADMIN_OR_SYSTEM}`,\n    },\n    {\n        tableName: \"platform_activity_events\",\n        quotedName: \"platform_activity_events\",\n        policyName: \"gencow_platform_activity_events_access\",\n        using: `${ADMIN_OR_SYSTEM} OR actor_user_id = ${CURRENT_USER} OR target_owner_user_id = ${CURRENT_USER} OR ${OWNED_APP}`,\n    },\n    {\n        tableName: \"user_credits\",\n        quotedName: \"user_credits\",\n        policyName: \"gencow_user_credits_owner\",\n        using: `${ADMIN_OR_SYSTEM} OR user_id = ${CURRENT_USER}`,\n    },\n    {\n        tableName: \"user\",\n        quotedName: `\"user\"`,\n        policyName: \"gencow_users_self_or_admin\",\n        using: `${ADMIN_OR_SYSTEM} OR id = ${CURRENT_USER}`,\n    },\n    {\n        tableName: \"session\",\n        quotedName: `\"session\"`,\n        policyName: \"gencow_sessions_self_or_system\",\n        using: `${ADMIN_OR_SYSTEM} OR user_id = ${CURRENT_USER}`,\n    },\n    {\n        tableName: \"account\",\n        quotedName: `\"account\"`,\n        policyName: \"gencow_accounts_self_or_system\",\n        using: `${ADMIN_OR_SYSTEM} OR user_id = ${CURRENT_USER}`,\n    },\n];\nconst PLATFORM_RLS_HELPER_STATEMENTS = [\n    `CREATE OR REPLACE FUNCTION _gencow_platform_current_user_id()\nRETURNS text\nLANGUAGE sql\nSTABLE\nAS $$ SELECT NULLIF(current_setting('app.current_user_id', true), '') $$`,\n    `CREATE OR REPLACE FUNCTION _gencow_platform_is_admin_or_system()\nRETURNS boolean\nLANGUAGE sql\nSTABLE\nAS $$ SELECT COALESCE(current_setting('app.internal_system', true), '') = 'true'\n          OR COALESCE(current_setting('app.current_user_role', true), '') = 'admin' $$`,\n];\nfunction buildPolicyCheck(table) {\n    return table.check ?? table.using;\n}\nexport function buildPlatformRlsStatements(tables = PLATFORM_RLS_TARGET_TABLES) {\n    const statements = [...PLATFORM_RLS_HELPER_STATEMENTS];\n    for (const table of tables) {\n        statements.push(`ALTER TABLE ${table.quotedName} ENABLE ROW LEVEL SECURITY`, `ALTER TABLE ${table.quotedName} FORCE ROW LEVEL SECURITY`, `DROP POLICY IF EXISTS ${table.policyName} ON ${table.quotedName}`, `CREATE POLICY ${table.policyName} ON ${table.quotedName}\n  FOR ALL\n  USING (${table.using})\n  WITH CHECK (${buildPolicyCheck(table)})`);\n    }\n    return statements;\n}\nasync function listExistingPublicTables(rawSql) {\n    const result = await rawSql(`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'`);\n    const rows = Array.isArray(result) ? result : [];\n    return new Set(rows\n        .map((row) => (row && typeof row === \"object\" ? row.table_name : null))\n        .filter((name) => typeof name === \"string\"));\n}\nexport async function ensurePlatformRlsPolicies(params) {\n    if (!params.isPlatform)\n        return;\n    const logger = params.logger ?? console;\n    const existing = await listExistingPublicTables(params.rawSql);\n    const tables = PLATFORM_RLS_TARGET_TABLES.filter((table) => existing.has(table.tableName));\n    const missing = PLATFORM_RLS_TARGET_TABLES.filter((table) => !existing.has(table.tableName));\n    for (const statement of buildPlatformRlsStatements(tables)) {\n        await params.rawSql(statement);\n    }\n    if (missing.length > 0) {\n        logger.warn(`[db] platform RLS skipped missing table(s): ${missing.map((table) => table.tableName).join(\", \")}`);\n    }\n    logger.log(`[db] platform RLS policies ensured for ${tables.length} table(s)`);\n}\nexport function normalizePlatformRlsRole(role) {\n    return typeof role === \"string\" && role.trim() ? role.trim() : undefined;\n}\nexport function buildPlatformRequestRlsContext(params) {\n    if (!params.isPlatform) {\n        return { currentUserId: params.userId };\n    }\n    const role = normalizePlatformRlsRole(params.role);\n    return {\n        currentUserId: params.userId,\n        ...(role ? { currentUserRole: role } : {}),\n        internalSystem: \"false\",\n    };\n}\nexport function createPlatformSystemDb(db, options) {\n    if (!options.isPlatform)\n        return db;\n    return (options.createRlsDbImpl ?? createRlsDb)(db, PLATFORM_SYSTEM_RLS_CONTEXT);\n}\n", "const TIER_PROVIDER_RATE_LIMIT_POLICIES = [\n    {\n        idSuffix: \"openai-ai-chat\",\n        provider: \"openai\",\n        operation: \"ai_chat\",\n        tiers: {\n            free: { rpm: 10, tpm: 20_000, maxConcurrent: 2, queueWaitMs: 3_000 },\n            pro: { rpm: 120, tpm: 300_000, maxConcurrent: 10, queueWaitMs: 10_000 },\n            scale: { rpm: 600, tpm: 1_500_000, maxConcurrent: 50, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-openai-ai-chat\",\n        provider: \"azure_openai\",\n        operation: \"ai_chat\",\n        tiers: {\n            free: { rpm: 10, tpm: 20_000, maxConcurrent: 2, queueWaitMs: 3_000 },\n            pro: { rpm: 120, tpm: 300_000, maxConcurrent: 10, queueWaitMs: 10_000 },\n            scale: { rpm: 600, tpm: 1_500_000, maxConcurrent: 50, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"openai-ai-embed\",\n        provider: \"openai\",\n        operation: \"ai_embed\",\n        tiers: {\n            free: { rpm: 30, tpm: 100_000, maxConcurrent: 2, queueWaitMs: 3_000 },\n            pro: { rpm: 300, tpm: 2_000_000, maxConcurrent: 20, queueWaitMs: 10_000 },\n            scale: { rpm: 1_000, tpm: 10_000_000, maxConcurrent: 50, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-openai-ai-embed\",\n        provider: \"azure_openai\",\n        operation: \"ai_embed\",\n        tiers: {\n            free: { rpm: 30, tpm: 100_000, maxConcurrent: 2, queueWaitMs: 3_000 },\n            pro: { rpm: 300, tpm: 2_000_000, maxConcurrent: 20, queueWaitMs: 10_000 },\n            scale: { rpm: 1_000, tpm: 10_000_000, maxConcurrent: 50, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"openai-ai-image\",\n        provider: \"openai\",\n        operation: \"ai_image\",\n        tiers: {\n            free: { rpm: 2, tpm: null, maxConcurrent: 1, queueWaitMs: 3_000 },\n            pro: { rpm: 20, tpm: null, maxConcurrent: 5, queueWaitMs: 10_000 },\n            scale: { rpm: 100, tpm: null, maxConcurrent: 20, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-openai-ai-image\",\n        provider: \"azure_openai\",\n        operation: \"ai_image\",\n        tiers: {\n            free: { rpm: 2, tpm: null, maxConcurrent: 1, queueWaitMs: 3_000 },\n            pro: { rpm: 20, tpm: null, maxConcurrent: 5, queueWaitMs: 10_000 },\n            scale: { rpm: 100, tpm: null, maxConcurrent: 20, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-openai-ai-speech-to-text\",\n        provider: \"azure_openai\",\n        operation: \"ai_speech_to_text\",\n        tiers: {\n            free: { rpm: 12, tpm: null, maxConcurrent: 2, queueWaitMs: 30_000 },\n            pro: { rpm: 12, tpm: null, maxConcurrent: 2, queueWaitMs: 30_000 },\n            scale: { rpm: 12, tpm: null, maxConcurrent: 2, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-openai-ai-text-to-speech\",\n        provider: \"azure_openai\",\n        operation: \"ai_text_to_speech\",\n        tiers: {\n            free: { rpm: 60, tpm: null, maxConcurrent: 10, queueWaitMs: 10_000 },\n            pro: { rpm: 60, tpm: null, maxConcurrent: 10, queueWaitMs: 10_000 },\n            scale: { rpm: 60, tpm: null, maxConcurrent: 10, queueWaitMs: 10_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-speech-ai-speech-to-text\",\n        provider: \"azure_speech\",\n        operation: \"ai_speech_to_text\",\n        tiers: {\n            free: { rpm: 60, tpm: null, maxConcurrent: 4, queueWaitMs: 30_000 },\n            pro: { rpm: 60, tpm: null, maxConcurrent: 4, queueWaitMs: 30_000 },\n            scale: { rpm: 60, tpm: null, maxConcurrent: 4, queueWaitMs: 30_000 },\n        },\n    },\n    {\n        idSuffix: \"azure-speech-ai-text-to-speech\",\n        provider: \"azure_speech\",\n        operation: \"ai_text_to_speech\",\n        tiers: {\n            free: { rpm: 200, tpm: null, maxConcurrent: 20, queueWaitMs: 10_000 },\n            pro: { rpm: 200, tpm: null, maxConcurrent: 20, queueWaitMs: 10_000 },\n            scale: { rpm: 200, tpm: null, maxConcurrent: 20, queueWaitMs: 10_000 },\n        },\n    },\n    {\n        idSuffix: \"openai-document\",\n        provider: \"openai\",\n        operation: \"document_openai\",\n        tiers: {\n            free: { rpm: 2, tpm: 50_000, maxConcurrent: 1, queueWaitMs: 0 },\n            pro: { rpm: 30, tpm: 500_000, maxConcurrent: 5, queueWaitMs: 0 },\n            scale: { rpm: 150, tpm: 2_000_000, maxConcurrent: 15, queueWaitMs: 0 },\n        },\n    },\n    {\n        idSuffix: \"google-document-gemini\",\n        provider: \"google\",\n        operation: \"document_gemini\",\n        tiers: {\n            free: { rpm: 2, tpm: 50_000, maxConcurrent: 1, queueWaitMs: 0 },\n            pro: { rpm: 30, tpm: 500_000, maxConcurrent: 5, queueWaitMs: 0 },\n            scale: { rpm: 150, tpm: 2_000_000, maxConcurrent: 15, queueWaitMs: 0 },\n        },\n    },\n    {\n        idSuffix: \"google-document-ocr\",\n        provider: \"google\",\n        operation: \"document_ocr\",\n        tiers: {\n            free: { rpm: 2, tpm: 50_000, maxConcurrent: 1, queueWaitMs: 0 },\n            pro: { rpm: 30, tpm: 500_000, maxConcurrent: 5, queueWaitMs: 0 },\n            scale: { rpm: 150, tpm: 2_000_000, maxConcurrent: 15, queueWaitMs: 0 },\n        },\n    },\n];\nfunction planGuardrailFactor(tier) {\n    if (tier === \"free\")\n        return 100;\n    if (tier === \"pro\")\n        return 40;\n    return 25;\n}\nfunction tierPolicyRows() {\n    return TIER_PROVIDER_RATE_LIMIT_POLICIES.flatMap((policy) => Object.entries(policy.tiers).flatMap(([tier, values]) => {\n        const guardrailFactor = planGuardrailFactor(tier);\n        return [\n            {\n                id: `default-${tier}-${policy.idSuffix}`,\n                provider: policy.provider,\n                operation: policy.operation,\n                scopeType: \"plan\",\n                scopeId: tier,\n                rpm: values.rpm * guardrailFactor,\n                tpm: values.tpm == null ? null : values.tpm * guardrailFactor,\n                maxConcurrent: values.maxConcurrent * guardrailFactor,\n                queueWaitMs: 0,\n            },\n            {\n                id: `default-user-${tier}-${policy.idSuffix}`,\n                provider: policy.provider,\n                operation: policy.operation,\n                scopeType: \"plan_user\",\n                scopeId: tier,\n                ...values,\n            },\n            {\n                id: `default-app-${tier}-${policy.idSuffix}`,\n                provider: policy.provider,\n                operation: policy.operation,\n                scopeType: \"plan_app\",\n                scopeId: tier,\n                ...values,\n            },\n        ];\n    }));\n}\nconst DEFAULT_PROVIDER_RATE_LIMIT_POLICIES = [\n    ...tierPolicyRows(),\n    {\n        id: \"default-global-openai-ai-chat\",\n        provider: \"openai\",\n        operation: \"ai_chat\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 30_000,\n        tpm: 100_000_000,\n        maxConcurrent: 3_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-openai-ai-chat\",\n        provider: \"azure_openai\",\n        operation: \"ai_chat\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 30_000,\n        tpm: 100_000_000,\n        maxConcurrent: 3_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-openai-ai-embed\",\n        provider: \"openai\",\n        operation: \"ai_embed\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 50_000,\n        tpm: 200_000_000,\n        maxConcurrent: 3_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-openai-ai-embed\",\n        provider: \"azure_openai\",\n        operation: \"ai_embed\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 50_000,\n        tpm: 200_000_000,\n        maxConcurrent: 3_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-openai-ai-speech-to-text\",\n        provider: \"azure_openai\",\n        operation: \"ai_speech_to_text\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 10_000,\n        tpm: null,\n        maxConcurrent: 1_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-openai-ai-text-to-speech\",\n        provider: \"azure_openai\",\n        operation: \"ai_text_to_speech\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 30_000,\n        tpm: null,\n        maxConcurrent: 3_000,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-speech-ai-speech-to-text\",\n        provider: \"azure_speech\",\n        operation: \"ai_speech_to_text\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 600,\n        tpm: null,\n        maxConcurrent: 20,\n        queueWaitMs: 0,\n    },\n    {\n        id: \"default-global-azure-speech-ai-text-to-speech\",\n        provider: \"azure_speech\",\n        operation: \"ai_text_to_speech\",\n        scopeId: \"*\",\n        scopeType: \"global\",\n        rpm: 12_000,\n        tpm: null,\n        maxConcurrent: 200,\n        queueWaitMs: 0,\n    },\n];\nfunction providerRateLimitPolicyValuesSql() {\n    return DEFAULT_PROVIDER_RATE_LIMIT_POLICIES.map((policy) => {\n        const tpm = policy.tpm == null ? \"NULL\" : String(policy.tpm);\n        const reason = policy.scopeType === \"plan\"\n            ? \"Default plan guardrail provider admission policy\"\n            : `Default ${policy.scopeType} provider admission policy`;\n        return `('${policy.id}', '${policy.provider}', '${policy.operation}', '*', '${policy.scopeType}', '${policy.scopeId}', ${policy.rpm}, NULL, ${tpm}, ${policy.maxConcurrent}, ${policy.queueWaitMs}, TRUE, -100, '${reason}')`;\n    }).join(\",\\n            \");\n}\nfunction defaultOpenAiRouteSeedSql() {\n    return [\n        `\n        INSERT INTO provider_credentials (\n            id, provider, display_name, secret_ref, key_fingerprint, status, scopes_json, created_by\n        )\n        VALUES (\n            'default-openai-env', 'openai', 'Default OpenAI environment key',\n            'env:PLATFORM_OPENAI_KEY', NULL, 'active', '[\"ai_chat\",\"ai_embed\",\"ai_image\"]', 'system:bootstrap'\n        )\n        ON CONFLICT (id) DO NOTHING\n    `,\n        `\n        INSERT INTO provider_deployments (\n            id, provider, logical_model, operation, credential_id, priority, weight, status,\n            fallback_allowed, notes, created_by\n        )\n        VALUES\n            ('default-openai-ai-chat', 'openai', '*', 'ai_chat', 'default-openai-env', -100, 100, 'active', FALSE, 'Default OpenAI env route for chat models', 'system:bootstrap'),\n            ('default-openai-ai-embed', 'openai', '*', 'ai_embed', 'default-openai-env', -100, 100, 'active', FALSE, 'Default OpenAI env route for embedding models', 'system:bootstrap'),\n            ('default-openai-ai-image', 'openai', '*', 'ai_image', 'default-openai-env', -100, 100, 'active', FALSE, 'Default OpenAI env route for image models', 'system:bootstrap')\n        ON CONFLICT (id) DO NOTHING\n    `,\n    ];\n}\nexport async function ensureProviderRateLimitAdmissionSchema(params) {\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_credentials (\n            id TEXT PRIMARY KEY,\n            provider TEXT NOT NULL,\n            display_name TEXT NOT NULL,\n            secret_ref TEXT NOT NULL,\n            key_fingerprint TEXT,\n            status TEXT NOT NULL DEFAULT 'active',\n            scopes_json TEXT NOT NULL DEFAULT '[]',\n            created_by TEXT NOT NULL,\n            rotated_by TEXT,\n            rotated_at TIMESTAMP,\n            expires_at TIMESTAMP,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_deployments (\n            id TEXT PRIMARY KEY,\n            provider TEXT NOT NULL,\n            logical_model TEXT NOT NULL,\n            operation TEXT NOT NULL,\n            credential_id TEXT NOT NULL,\n            endpoint TEXT,\n            azure_resource_name TEXT,\n            azure_deployment_name TEXT,\n            azure_api_version TEXT,\n            azure_region TEXT,\n            azure_subscription_label TEXT,\n            azure_deployment_type TEXT,\n            model_version TEXT,\n            assigned_tpm BIGINT,\n            assigned_rpm INTEGER,\n            priority INTEGER NOT NULL DEFAULT 0,\n            weight INTEGER NOT NULL DEFAULT 100,\n            status TEXT NOT NULL DEFAULT 'active',\n            health_status TEXT NOT NULL DEFAULT 'unknown',\n            health_checked_at TIMESTAMP,\n            preview_expires_at TIMESTAMP,\n            fallback_allowed BOOLEAN NOT NULL DEFAULT false,\n            notes TEXT,\n            created_by TEXT NOT NULL,\n            updated_by TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`ALTER TABLE provider_deployments ADD COLUMN IF NOT EXISTS health_status TEXT NOT NULL DEFAULT 'unknown'`);\n    await params.rawSql(`ALTER TABLE provider_deployments ADD COLUMN IF NOT EXISTS health_checked_at TIMESTAMP`);\n    await params.rawSql(`ALTER TABLE provider_deployments ADD COLUMN IF NOT EXISTS preview_expires_at TIMESTAMP`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_provider_deployments_route ON provider_deployments (operation, logical_model, provider, status, priority DESC)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_routing_policies (\n            id TEXT PRIMARY KEY,\n            operation TEXT NOT NULL,\n            logical_model_pattern TEXT NOT NULL DEFAULT '*',\n            plan_scope TEXT NOT NULL DEFAULT '*',\n            preferred_provider TEXT NOT NULL,\n            fallback_order_json TEXT NOT NULL DEFAULT '[]',\n            require_data_residency BOOLEAN NOT NULL DEFAULT false,\n            enabled BOOLEAN NOT NULL DEFAULT true,\n            priority INTEGER NOT NULL DEFAULT 0,\n            reason TEXT,\n            updated_by TEXT NOT NULL,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_provider_routing_policies_lookup ON provider_routing_policies (operation, enabled, priority DESC)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_rate_limit_policies (\n            id TEXT PRIMARY KEY,\n            provider TEXT NOT NULL,\n            operation TEXT NOT NULL,\n            model_pattern TEXT NOT NULL DEFAULT '*',\n            scope_type TEXT NOT NULL,\n            scope_id TEXT NOT NULL DEFAULT '*',\n            rpm INTEGER,\n            rps INTEGER,\n            tpm BIGINT,\n            max_concurrent INTEGER,\n            queue_wait_ms INTEGER NOT NULL DEFAULT 0,\n            enabled BOOLEAN NOT NULL DEFAULT true,\n            priority INTEGER NOT NULL DEFAULT 0,\n            effective_from TIMESTAMP,\n            expires_at TIMESTAMP,\n            reason TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_provider_rate_limit_policies_lookup ON provider_rate_limit_policies (provider, operation, enabled, priority DESC)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_admin_audit_events (\n            id SERIAL PRIMARY KEY,\n            actor_user_id TEXT NOT NULL,\n            action TEXT NOT NULL,\n            provider TEXT,\n            credential_id TEXT,\n            deployment_id TEXT,\n            reason TEXT,\n            request_id TEXT,\n            metadata_json TEXT NOT NULL DEFAULT '{}',\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`ALTER TABLE provider_admin_audit_events ADD COLUMN IF NOT EXISTS request_id TEXT`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_provider_admin_audit_events_created ON provider_admin_audit_events (created_at DESC)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS provider_admission_metrics (\n            id SERIAL PRIMARY KEY,\n            bucket_start TIMESTAMP NOT NULL,\n            provider TEXT NOT NULL,\n            operation TEXT NOT NULL,\n            model TEXT NOT NULL,\n            plan TEXT NOT NULL,\n            app_id TEXT NOT NULL,\n            provider_route_id TEXT NOT NULL DEFAULT '',\n            deployment_id TEXT NOT NULL DEFAULT '',\n            event_type TEXT NOT NULL,\n            reason_code TEXT NOT NULL DEFAULT '',\n            count BIGINT NOT NULL DEFAULT 0,\n            retry_after_ms_sum BIGINT NOT NULL DEFAULT 0,\n            estimated_tokens_sum BIGINT NOT NULL DEFAULT 0,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`ALTER TABLE provider_deployments ALTER COLUMN assigned_tpm TYPE BIGINT USING assigned_tpm::bigint`);\n    await params.rawSql(`ALTER TABLE provider_rate_limit_policies ALTER COLUMN tpm TYPE BIGINT USING tpm::bigint`);\n    await params.rawSql(`ALTER TABLE provider_admission_metrics ALTER COLUMN count TYPE BIGINT USING count::bigint`);\n    await params.rawSql(`ALTER TABLE provider_admission_metrics ALTER COLUMN retry_after_ms_sum TYPE BIGINT USING retry_after_ms_sum::bigint`);\n    await params.rawSql(`ALTER TABLE provider_admission_metrics ALTER COLUMN estimated_tokens_sum TYPE BIGINT USING estimated_tokens_sum::bigint`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS idx_provider_admission_metrics_bucket ON provider_admission_metrics (bucket_start, provider, operation, model, plan, app_id, provider_route_id, deployment_id, event_type, reason_code)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_provider_admission_metrics_app_recent ON provider_admission_metrics (app_id, bucket_start DESC)`);\n    await params.rawSql(`\n        INSERT INTO provider_rate_limit_policies (\n            id, provider, operation, model_pattern, scope_type, scope_id,\n            rpm, rps, tpm, max_concurrent, queue_wait_ms, enabled, priority, reason\n        )\n        VALUES\n            ${providerRateLimitPolicyValuesSql()}\n        ON CONFLICT (id) DO UPDATE SET\n            provider = EXCLUDED.provider,\n            operation = EXCLUDED.operation,\n            model_pattern = EXCLUDED.model_pattern,\n            scope_type = EXCLUDED.scope_type,\n            scope_id = EXCLUDED.scope_id,\n            rpm = EXCLUDED.rpm,\n            rps = EXCLUDED.rps,\n            tpm = EXCLUDED.tpm,\n            max_concurrent = EXCLUDED.max_concurrent,\n            queue_wait_ms = EXCLUDED.queue_wait_ms,\n            enabled = EXCLUDED.enabled,\n            priority = EXCLUDED.priority,\n            reason = EXCLUDED.reason,\n            updated_at = NOW()\n        WHERE provider_rate_limit_policies.priority = -100\n          AND provider_rate_limit_policies.reason LIKE 'Default % provider admission policy'\n    `);\n    for (const sql of defaultOpenAiRouteSeedSql())\n        await params.rawSql(sql);\n}\n", "const SERVICE_CREDIT_GRANT_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS service_credit_ledger (\n      id SERIAL PRIMARY KEY,\n      user_id TEXT NOT NULL,\n      type TEXT NOT NULL,\n      amount REAL NOT NULL,\n      balance_after REAL NOT NULL,\n      title TEXT NOT NULL,\n      service_type TEXT,\n      provider TEXT,\n      expires_at TIMESTAMP,\n      app_id INTEGER,\n      payment_ref TEXT,\n      remaining REAL,\n      request_id TEXT,\n      metadata TEXT,\n      created_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `ALTER TABLE service_credit_ledger ADD COLUMN IF NOT EXISTS remaining REAL`,\n    `ALTER TABLE service_credit_ledger ADD COLUMN IF NOT EXISTS request_id TEXT`,\n    `ALTER TABLE service_credit_ledger ADD COLUMN IF NOT EXISTS metadata TEXT`,\n    `UPDATE service_credit_ledger\n      SET remaining = 0\n      WHERE remaining IS NOT NULL\n        AND ABS(remaining) <= 0.000001`,\n    `CREATE TABLE IF NOT EXISTS coupons (\n      id SERIAL PRIMARY KEY,\n      code TEXT NOT NULL UNIQUE,\n      title TEXT NOT NULL,\n      credit_amount REAL NOT NULL,\n      credit_expiry_days INTEGER NOT NULL DEFAULT 365,\n      max_redemptions INTEGER,\n      redemption_count INTEGER NOT NULL DEFAULT 0,\n      expires_at TIMESTAMP NOT NULL,\n      status TEXT NOT NULL DEFAULT 'active',\n      redemption_mode TEXT NOT NULL DEFAULT 'manual',\n      system_key TEXT,\n      description TEXT,\n      created_by TEXT NOT NULL,\n      created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n      updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `ALTER TABLE coupons ADD COLUMN IF NOT EXISTS redemption_mode TEXT NOT NULL DEFAULT 'manual'`,\n    `ALTER TABLE coupons ADD COLUMN IF NOT EXISTS system_key TEXT`,\n    `ALTER TABLE coupons ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP NOT NULL DEFAULT NOW()`,\n    `CREATE INDEX IF NOT EXISTS coupons_code_idx ON coupons (code)`,\n    `CREATE INDEX IF NOT EXISTS coupons_status_idx ON coupons (status)`,\n    `CREATE INDEX IF NOT EXISTS coupons_expires_at_idx ON coupons (expires_at)`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS coupons_system_key_idx\n      ON coupons (system_key)\n      WHERE system_key IS NOT NULL`,\n    `CREATE TABLE IF NOT EXISTS coupon_redemptions (\n      id SERIAL PRIMARY KEY,\n      coupon_id INTEGER NOT NULL,\n      user_id TEXT NOT NULL,\n      credit_amount REAL NOT NULL,\n      source TEXT NOT NULL DEFAULT 'manual',\n      idempotency_key TEXT,\n      ledger_entry_id INTEGER,\n      credit_expires_at TIMESTAMP NOT NULL,\n      created_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `ALTER TABLE coupon_redemptions ADD COLUMN IF NOT EXISTS source TEXT NOT NULL DEFAULT 'manual'`,\n    `ALTER TABLE coupon_redemptions ADD COLUMN IF NOT EXISTS idempotency_key TEXT`,\n    `ALTER TABLE coupon_redemptions ADD COLUMN IF NOT EXISTS ledger_entry_id INTEGER`,\n    `DROP INDEX IF EXISTS coupon_redemptions_coupon_user_idx`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS coupon_redemptions_manual_coupon_user_idx\n      ON coupon_redemptions (coupon_id, user_id)\n      WHERE source = 'manual'`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS coupon_redemptions_idempotency_key_idx\n      ON coupon_redemptions (idempotency_key)\n      WHERE idempotency_key IS NOT NULL`,\n    `CREATE INDEX IF NOT EXISTS coupon_redemptions_user_idx ON coupon_redemptions (user_id)`,\n    `CREATE INDEX IF NOT EXISTS coupon_redemptions_coupon_idx ON coupon_redemptions (coupon_id)`,\n    `CREATE TABLE IF NOT EXISTS service_credit_grant_policies (\n      id SERIAL PRIMARY KEY,\n      event_type TEXT NOT NULL,\n      from_plan TEXT,\n      to_plan TEXT,\n      coupon_id INTEGER NOT NULL,\n      enabled BOOLEAN NOT NULL DEFAULT true,\n      once_scope TEXT NOT NULL DEFAULT 'event',\n      grant_timing TEXT NOT NULL DEFAULT 'anchor_open',\n      anchor_day INTEGER NOT NULL DEFAULT 1,\n      timezone TEXT NOT NULL DEFAULT 'Asia/Seoul',\n      credit_expiry_mode TEXT NOT NULL DEFAULT 'coupon_days',\n      expiry_grace_days INTEGER,\n      created_by TEXT NOT NULL,\n      updated_by TEXT NOT NULL,\n      created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n      updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n  )`,\n    `ALTER TABLE service_credit_grant_policies ADD COLUMN IF NOT EXISTS grant_timing TEXT NOT NULL DEFAULT 'anchor_open'`,\n    `ALTER TABLE service_credit_grant_policies ADD COLUMN IF NOT EXISTS anchor_day INTEGER NOT NULL DEFAULT 1`,\n    `ALTER TABLE service_credit_grant_policies ADD COLUMN IF NOT EXISTS timezone TEXT NOT NULL DEFAULT 'Asia/Seoul'`,\n    `ALTER TABLE service_credit_grant_policies ADD COLUMN IF NOT EXISTS credit_expiry_mode TEXT NOT NULL DEFAULT 'coupon_days'`,\n    `ALTER TABLE service_credit_grant_policies ADD COLUMN IF NOT EXISTS expiry_grace_days INTEGER`,\n    `CREATE TABLE IF NOT EXISTS service_credit_grant_runs (\n      id SERIAL PRIMARY KEY,\n      event_type TEXT NOT NULL DEFAULT 'monthly_anchor',\n      period_start TIMESTAMP NOT NULL,\n      period_end TIMESTAMP NOT NULL,\n      status TEXT NOT NULL DEFAULT 'running',\n      dry_run BOOLEAN NOT NULL DEFAULT true,\n      started_at TIMESTAMP DEFAULT NOW() NOT NULL,\n      completed_at TIMESTAMP,\n      processed_count INTEGER NOT NULL DEFAULT 0,\n      granted_count INTEGER NOT NULL DEFAULT 0,\n      skipped_count INTEGER NOT NULL DEFAULT 0,\n      failed_count INTEGER NOT NULL DEFAULT 0,\n      error TEXT\n  )`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS service_credit_grant_policy_event_idx\n      ON service_credit_grant_policies (\n          event_type,\n          COALESCE(from_plan, '__null__'),\n          COALESCE(to_plan, '__null__')\n      )`,\n    `UPDATE coupons\n      SET system_key = 'signup_welcome_5k',\n          redemption_mode = 'system',\n          updated_at = NOW()\n      WHERE code = 'SYS-SIGNUP-WELCOME-5K'\n        AND (system_key IS NULL OR system_key = 'signup_welcome_5k')`,\n    `INSERT INTO coupons (\n      code, title, credit_amount, credit_expiry_days, max_redemptions, expires_at, status,\n      redemption_mode, system_key, description, created_by, updated_at\n  )\n  SELECT\n      'SYS-SIGNUP-WELCOME-5K',\n      'Signup welcome service credits',\n      5000,\n      90,\n      NULL,\n      '2099-12-31',\n      'active',\n      'system',\n      'signup_welcome_5k',\n      'Default signup welcome service credit grant.',\n      'system',\n      NOW()\n  WHERE NOT EXISTS (SELECT 1 FROM coupons WHERE system_key = 'signup_welcome_5k')`,\n    `UPDATE coupons\n      SET title = 'Signup welcome service credits',\n          credit_amount = 5000,\n          credit_expiry_days = 90,\n          redemption_mode = 'system',\n          description = 'Default signup welcome service credit grant.',\n          updated_at = NOW()\n      WHERE system_key = 'signup_welcome_5k'`,\n    `UPDATE coupons\n      SET system_key = 'startup_plan_grant_100k',\n          redemption_mode = 'system',\n          updated_at = NOW()\n      WHERE code = 'SYS-STARTUP-GRANT-100K'\n        AND (system_key IS NULL OR system_key = 'startup_plan_grant_100k')`,\n    `INSERT INTO coupons (\n      code, title, credit_amount, credit_expiry_days, max_redemptions, expires_at, status,\n      redemption_mode, system_key, description, created_by, updated_at\n  )\n  SELECT\n      'SYS-STARTUP-GRANT-100K',\n      'Startup plan service credit grant',\n      100000,\n      365,\n      NULL,\n      '2099-12-31',\n      'active',\n      'system',\n      'startup_plan_grant_100k',\n      'Default one-time service credit grant for Startup plan transitions.',\n      'system',\n      NOW()\n  WHERE NOT EXISTS (SELECT 1 FROM coupons WHERE system_key = 'startup_plan_grant_100k')`,\n    `UPDATE coupons\n      SET title = 'Startup plan service credit grant',\n          credit_amount = 100000,\n          credit_expiry_days = 365,\n          redemption_mode = 'system',\n          description = 'Default one-time service credit grant for Startup plan transitions.',\n          updated_at = NOW()\n      WHERE system_key = 'startup_plan_grant_100k'`,\n    `INSERT INTO service_credit_grant_policies (\n      event_type, from_plan, to_plan, coupon_id, enabled, once_scope, created_by, updated_by\n  )\n  SELECT 'signup', NULL, NULL, c.id, true, 'user', 'system', 'system'\n  FROM coupons c\n  WHERE c.system_key = 'signup_welcome_5k'\n    AND NOT EXISTS (\n        SELECT 1 FROM service_credit_grant_policies p\n        WHERE p.event_type = 'signup' AND p.from_plan IS NULL AND p.to_plan IS NULL\n    )`,\n    `UPDATE service_credit_grant_policies p\n      SET coupon_id = c.id,\n          enabled = true,\n          once_scope = 'user',\n          updated_by = 'system',\n          updated_at = NOW()\n      FROM coupons c\n      WHERE c.system_key = 'signup_welcome_5k'\n        AND p.event_type = 'signup'\n        AND p.from_plan IS NULL\n        AND p.to_plan IS NULL`,\n    `INSERT INTO service_credit_grant_policies (\n      event_type, from_plan, to_plan, coupon_id, enabled, once_scope, created_by, updated_by\n  )\n  SELECT 'plan_change', '*', 'scale', c.id, true, 'user_to_plan', 'system', 'system'\n  FROM coupons c\n  WHERE c.system_key = 'startup_plan_grant_100k'\n    AND NOT EXISTS (\n        SELECT 1 FROM service_credit_grant_policies p\n        WHERE p.event_type = 'plan_change' AND p.from_plan = '*' AND p.to_plan = 'scale'\n    )`,\n    `UPDATE service_credit_grant_policies p\n      SET coupon_id = c.id,\n          enabled = true,\n          once_scope = 'user_to_plan',\n          updated_by = 'system',\n          updated_at = NOW()\n      FROM coupons c\n      WHERE c.system_key = 'startup_plan_grant_100k'\n        AND p.event_type = 'plan_change'\n        AND p.from_plan = '*'\n        AND p.to_plan = 'scale'`,\n    `UPDATE coupons\n      SET system_key = 'hobby_monthly_service_5k',\n          redemption_mode = 'system',\n          updated_at = NOW()\n      WHERE code = 'SYS-HOBBY-MONTHLY-SERVICE-5K'\n        AND (system_key IS NULL OR system_key = 'hobby_monthly_service_5k')`,\n    `INSERT INTO coupons (\n      code, title, credit_amount, credit_expiry_days, max_redemptions, expires_at, status,\n      redemption_mode, system_key, description, created_by, updated_at\n  )\n  SELECT\n      'SYS-HOBBY-MONTHLY-SERVICE-5K',\n      'Hobby monthly service credits',\n      5000,\n      31,\n      NULL,\n      '2099-12-31',\n      'active',\n      'system',\n      'hobby_monthly_service_5k',\n      'Default monthly service credit grant for Hobby/free plans.',\n      'system',\n      NOW()\n  WHERE NOT EXISTS (SELECT 1 FROM coupons WHERE system_key = 'hobby_monthly_service_5k')`,\n    `UPDATE coupons\n      SET title = 'Hobby monthly service credits',\n          credit_amount = 5000,\n          credit_expiry_days = 31,\n          redemption_mode = 'system',\n          description = 'Default monthly service credit grant for Hobby/free plans.',\n          updated_at = NOW()\n      WHERE system_key = 'hobby_monthly_service_5k'`,\n    `INSERT INTO service_credit_grant_policies (\n      event_type, from_plan, to_plan, coupon_id, enabled, once_scope,\n      grant_timing, anchor_day, timezone, credit_expiry_mode, expiry_grace_days,\n      created_by, updated_by\n  )\n  SELECT 'monthly_anchor', NULL, 'free', c.id, true, 'user_period',\n         'anchor_open', 1, 'Asia/Seoul', 'period_end_plus_grace', 7,\n         'system', 'system'\n  FROM coupons c\n  WHERE c.system_key = 'hobby_monthly_service_5k'\n    AND NOT EXISTS (\n        SELECT 1 FROM service_credit_grant_policies p\n        WHERE p.event_type = 'monthly_anchor' AND p.from_plan IS NULL AND p.to_plan = 'free'\n    )`,\n    `UPDATE service_credit_grant_policies p\n      SET coupon_id = c.id,\n          enabled = true,\n          once_scope = 'user_period',\n          grant_timing = 'anchor_open',\n          anchor_day = 1,\n          timezone = 'Asia/Seoul',\n          credit_expiry_mode = 'period_end_plus_grace',\n          expiry_grace_days = 7,\n          updated_by = 'system',\n          updated_at = NOW()\n      FROM coupons c\n      WHERE c.system_key = 'hobby_monthly_service_5k'\n        AND p.event_type = 'monthly_anchor'\n        AND p.from_plan IS NULL\n        AND p.to_plan = 'free'`,\n    `UPDATE coupons\n      SET system_key = 'scale_monthly_service_100k',\n          redemption_mode = 'system',\n          updated_at = NOW()\n      WHERE code = 'SYS-SCALE-MONTHLY-SERVICE-100K'\n        AND (system_key IS NULL OR system_key = 'scale_monthly_service_100k')`,\n    `INSERT INTO coupons (\n      code, title, credit_amount, credit_expiry_days, max_redemptions, expires_at, status,\n      redemption_mode, system_key, description, created_by, updated_at\n  )\n  SELECT\n      'SYS-SCALE-MONTHLY-SERVICE-100K',\n      'Startup monthly service credits',\n      100000,\n      31,\n      NULL,\n      '2099-12-31',\n      'active',\n      'system',\n      'scale_monthly_service_100k',\n      'Default monthly service credit grant for Startup/Scale plans.',\n      'system',\n      NOW()\n  WHERE NOT EXISTS (SELECT 1 FROM coupons WHERE system_key = 'scale_monthly_service_100k')`,\n    `UPDATE coupons\n      SET title = 'Startup monthly service credits',\n          credit_amount = 100000,\n          credit_expiry_days = 31,\n          redemption_mode = 'system',\n          description = 'Default monthly service credit grant for Startup/Scale plans.',\n          updated_at = NOW()\n      WHERE system_key = 'scale_monthly_service_100k'`,\n    `INSERT INTO service_credit_grant_policies (\n      event_type, from_plan, to_plan, coupon_id, enabled, once_scope,\n      grant_timing, anchor_day, timezone, credit_expiry_mode, expiry_grace_days,\n      created_by, updated_by\n  )\n  SELECT 'monthly_anchor', NULL, 'scale', c.id, true, 'user_period',\n         'anchor_open', 1, 'Asia/Seoul', 'period_end_plus_grace', 7,\n         'system', 'system'\n  FROM coupons c\n  WHERE c.system_key = 'scale_monthly_service_100k'\n    AND NOT EXISTS (\n        SELECT 1 FROM service_credit_grant_policies p\n        WHERE p.event_type = 'monthly_anchor' AND p.from_plan IS NULL AND p.to_plan = 'scale'\n    )`,\n    `UPDATE service_credit_grant_policies p\n      SET coupon_id = c.id,\n          enabled = true,\n          once_scope = 'user_period',\n          grant_timing = 'anchor_open',\n          anchor_day = 1,\n          timezone = 'Asia/Seoul',\n          credit_expiry_mode = 'period_end_plus_grace',\n          expiry_grace_days = 7,\n          updated_by = 'system',\n          updated_at = NOW()\n      FROM coupons c\n      WHERE c.system_key = 'scale_monthly_service_100k'\n        AND p.event_type = 'monthly_anchor'\n        AND p.from_plan IS NULL\n        AND p.to_plan = 'scale'`,\n];\nexport async function ensureServiceCreditGrantPolicySchema(params) {\n    for (const statement of SERVICE_CREDIT_GRANT_SCHEMA_STATEMENTS) {\n        await params.rawSql(statement);\n    }\n}\n", "export async function ensureServicePriceMetersSchema(params) {\n    for (const statement of SERVICE_PRICE_METERS_SCHEMA_STATEMENTS) {\n        await params.rawSql(statement);\n    }\n}\nexport const SERVICE_PRICE_METERS_SOURCE_CHECKED_AT = \"2026-07-14 00:00:00\";\nexport const SERVICE_PRICE_METERS_SCHEMA_STATEMENTS = [\n    `\n        CREATE TABLE IF NOT EXISTS service_price_meters (\n            id SERIAL PRIMARY KEY,\n            service_type TEXT NOT NULL,\n            provider TEXT NOT NULL,\n            operation TEXT NOT NULL,\n            logical_model TEXT NOT NULL,\n            meter TEXT NOT NULL,\n            price_profile TEXT NOT NULL DEFAULT 'global',\n            currency TEXT NOT NULL DEFAULT 'USD',\n            unit_label TEXT NOT NULL,\n            credit_per_unit REAL NOT NULL,\n            source TEXT NOT NULL,\n            source_checked_at TIMESTAMP NOT NULL,\n            active BOOLEAN NOT NULL DEFAULT true,\n            sort_order INTEGER NOT NULL DEFAULT 0,\n            notes TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            CONSTRAINT service_price_meters_lookup_unique UNIQUE (\n                provider,\n                operation,\n                logical_model,\n                meter,\n                price_profile,\n                currency\n            )\n        )\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS idx_service_price_meters_lookup\n        ON service_price_meters (provider, operation, logical_model, meter, price_profile, currency)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS idx_service_price_meters_source_checked\n        ON service_price_meters (source_checked_at, active)\n    `,\n    `\n        INSERT INTO service_price_meters (\n            service_type,\n            provider,\n            operation,\n            logical_model,\n            meter,\n            price_profile,\n            currency,\n            unit_label,\n            credit_per_unit,\n            source,\n            source_checked_at,\n            active,\n            sort_order,\n            notes\n        )\n        VALUES\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-transcribe',\n                'audio_seconds',\n                'global',\n                'USD',\n                'second',\n                1,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                0,\n                'Azure OpenAI STT audio input at USD 0.006 per minute; 10000 service credits = USD 1.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-mini-transcribe',\n                'audio_seconds',\n                'global',\n                'USD',\n                'second',\n                0.5,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                10,\n                'Azure OpenAI STT audio input at USD 0.003 per minute; 10000 service credits = USD 1.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-transcribe',\n                'provider_audio_input_tokens',\n                'global',\n                'USD',\n                'audio_token',\n                0.06,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                20,\n                'Azure OpenAI STT audio input at USD 6 per 1M audio tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-mini-transcribe',\n                'provider_audio_input_tokens',\n                'global',\n                'USD',\n                'audio_token',\n                0.03,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                30,\n                'Azure OpenAI STT audio input at USD 3 per 1M audio tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-transcribe',\n                'provider_text_input_tokens',\n                'global',\n                'USD',\n                'text_token',\n                0.025,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                40,\n                'Azure OpenAI STT text input at USD 2.50 per 1M text tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-transcribe',\n                'provider_text_output_tokens',\n                'global',\n                'USD',\n                'text_token',\n                0.1,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                50,\n                'Azure OpenAI STT text output at USD 10 per 1M text tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-mini-transcribe',\n                'provider_text_input_tokens',\n                'global',\n                'USD',\n                'text_token',\n                0.0125,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                60,\n                'Azure OpenAI mini STT text input at USD 1.25 per 1M text tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_speech_to_text',\n                'gpt-4o-mini-transcribe',\n                'provider_text_output_tokens',\n                'global',\n                'USD',\n                'text_token',\n                0.05,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                70,\n                'Azure OpenAI mini STT text output at USD 5 per 1M text tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_text_to_speech',\n                'gpt-4o-mini-tts',\n                'input_characters',\n                'global',\n                'USD',\n                'character',\n                0.006,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                80,\n                'Conservative TTS reserve estimate from USD 0.60 per 1M text tokens, treating 1 character as up to 1 token.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_text_to_speech',\n                'gpt-4o-mini-tts',\n                'provider_text_input_tokens',\n                'global',\n                'USD',\n                'text_token',\n                0.006,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                90,\n                'Azure OpenAI mini TTS text input at USD 0.60 per 1M text tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-openai',\n                'ai_text_to_speech',\n                'gpt-4o-mini-tts',\n                'provider_audio_output_tokens',\n                'global',\n                'USD',\n                'audio_token',\n                0.12,\n                'https://azure.microsoft.com/en-us/pricing/details/azure-openai/',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                100,\n                'Azure OpenAI mini TTS audio output at USD 12 per 1M audio tokens.'\n            ),\n            (\n                'ai_audio',\n                'azure-speech',\n                'ai_speech_to_text',\n                'azure-speech-fast-transcription',\n                'audio_seconds',\n                'global',\n                'USD',\n                'second',\n                1.0,\n                'https://prices.azure.com/api/retail/prices',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                110,\n                'Azure Speech Korea Central Fast Transcription at USD 0.36 per audio hour; 10000 service credits = USD 1. Diarization is not charged as a separate meter without billing evidence.'\n            ),\n            (\n                'ai_audio',\n                'azure-speech',\n                'ai_text_to_speech',\n                'azure-speech-neural-tts',\n                'input_characters',\n                'global',\n                'USD',\n                'character',\n                0.15,\n                'https://prices.azure.com/api/retail/prices',\n                TIMESTAMP '${SERVICE_PRICE_METERS_SOURCE_CHECKED_AT}',\n                true,\n                120,\n                'Azure Speech Korea Central S1 Neural Text To Speech at USD 15 per 1M billable characters.'\n            )\n        ON CONFLICT (provider, operation, logical_model, meter, price_profile, currency) DO UPDATE SET\n            service_type = EXCLUDED.service_type,\n            unit_label = EXCLUDED.unit_label,\n            credit_per_unit = EXCLUDED.credit_per_unit,\n            source = EXCLUDED.source,\n            source_checked_at = EXCLUDED.source_checked_at,\n            active = EXCLUDED.active,\n            sort_order = EXCLUDED.sort_order,\n            notes = EXCLUDED.notes,\n            updated_at = NOW()\n    `,\n];\n", "const STARTUP_MONTHLY_BILLING_PLAN_SEED = {\n    id: \"startup-monthly\",\n    platformPlanId: \"scale\",\n    displayName: \"Startup Monthly\",\n    billingProvider: \"tosspayments\",\n    billingMode: \"monthly_anchor_prepaid_prorated\",\n    currency: \"KRW\",\n    planGroupId: \"startup\",\n    billingInterval: \"month\",\n    billingIntervalMonths: 1,\n    annualDiscountPercent: 0,\n    basePriceMinor: 99000,\n    anchorDay: 1,\n    timezone: \"Asia/Seoul\",\n    serviceIncludedCredits: 100000,\n    serviceOverageCreditLimit: 100000,\n    serviceOverageUnitPriceMinor: 1,\n    active: true,\n    metadata: JSON.stringify({\n        publicPlan: \"startup\",\n        note: \"Admin may override price/cap before live billing enablement.\",\n    }),\n};\nconst STARTUP_ANNUAL_BILLING_PLAN_SEED = {\n    ...STARTUP_MONTHLY_BILLING_PLAN_SEED,\n    id: \"startup-annual\",\n    displayName: \"Startup Annual\",\n    billingInterval: \"year\",\n    billingIntervalMonths: 12,\n    annualDiscountPercent: 20,\n    basePriceMinor: Math.round((STARTUP_MONTHLY_BILLING_PLAN_SEED.basePriceMinor * 12 * 80) / 100),\n    active: false,\n    metadata: JSON.stringify({\n        publicPlan: \"startup\",\n        note: \"Annual pricing is admin-toggleable and hidden until enabled.\",\n    }),\n};\nexport async function ensurePlatformBillingSchema(params) {\n    const logger = params.logger ?? console;\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_plans (\n      id TEXT PRIMARY KEY,\n      platform_plan_id TEXT NOT NULL,\n      display_name TEXT NOT NULL,\n      billing_provider TEXT NOT NULL DEFAULT 'tosspayments',\n      billing_mode TEXT NOT NULL DEFAULT 'monthly_anchor_prepaid_prorated',\n      currency TEXT NOT NULL DEFAULT 'KRW',\n      plan_group_id TEXT NOT NULL DEFAULT 'startup',\n      billing_interval TEXT NOT NULL DEFAULT 'month',\n      billing_interval_months INTEGER NOT NULL DEFAULT 1,\n      annual_discount_percent INTEGER NOT NULL DEFAULT 0,\n      base_price_minor INTEGER NOT NULL,\n      anchor_day INTEGER NOT NULL DEFAULT 1,\n      timezone TEXT NOT NULL DEFAULT 'Asia/Seoul',\n      service_included_credits INTEGER NOT NULL DEFAULT 0,\n      service_overage_credit_limit INTEGER NOT NULL DEFAULT 0,\n      service_overage_unit_price_minor INTEGER NOT NULL DEFAULT 1,\n      active BOOLEAN NOT NULL DEFAULT TRUE,\n      metadata TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_customers (\n      id SERIAL PRIMARY KEY,\n      user_id TEXT NOT NULL,\n      provider TEXT NOT NULL DEFAULT 'tosspayments',\n      customer_key TEXT NOT NULL,\n      email TEXT,\n      name TEXT,\n      status TEXT NOT NULL DEFAULT 'active',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      UNIQUE(user_id, provider),\n      UNIQUE(customer_key)\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_payment_methods (\n      id SERIAL PRIMARY KEY,\n      user_id TEXT NOT NULL,\n      customer_id INTEGER NOT NULL,\n      provider TEXT NOT NULL DEFAULT 'tosspayments',\n      billing_key_sealed TEXT NOT NULL,\n      method_key TEXT,\n      card_company TEXT,\n      card_number_last4 TEXT,\n      owner_type TEXT,\n      is_default BOOLEAN NOT NULL DEFAULT FALSE,\n      status TEXT NOT NULL DEFAULT 'ready',\n      provider_payload_json TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      disabled_at TIMESTAMPTZ,\n      UNIQUE(provider, method_key)\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_checkout_sessions (\n      id TEXT PRIMARY KEY,\n      user_id TEXT NOT NULL,\n      customer_key TEXT NOT NULL,\n      billing_plan_id TEXT NOT NULL,\n      purpose TEXT NOT NULL DEFAULT 'subscription_checkout',\n      status TEXT NOT NULL DEFAULT 'pending',\n      currency TEXT NOT NULL DEFAULT 'KRW',\n      list_amount_minor INTEGER NOT NULL DEFAULT 0,\n      discount_amount_minor INTEGER NOT NULL DEFAULT 0,\n      final_amount_minor INTEGER NOT NULL DEFAULT 0,\n      discount_entitlement_id INTEGER,\n      period_start TIMESTAMPTZ NOT NULL,\n      period_end TIMESTAMPTZ NOT NULL,\n      next_billing_at TIMESTAMPTZ NOT NULL,\n      next_overage_billing_at TIMESTAMPTZ NOT NULL,\n      expires_at TIMESTAMPTZ NOT NULL,\n      processing_started_at TIMESTAMPTZ,\n      subscription_id INTEGER,\n      invoice_id INTEGER,\n      failure_code TEXT,\n      failure_message TEXT,\n      completed_at TIMESTAMPTZ,\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_subscriptions (\n      id SERIAL PRIMARY KEY,\n      user_id TEXT NOT NULL,\n      billing_plan_id TEXT NOT NULL,\n      checkout_session_id TEXT UNIQUE,\n      payment_method_id INTEGER,\n      provider TEXT NOT NULL DEFAULT 'tosspayments',\n      status TEXT NOT NULL DEFAULT 'pending_activation',\n      current_period_start TIMESTAMPTZ,\n      current_period_end TIMESTAMPTZ,\n      next_billing_at TIMESTAMPTZ,\n      next_overage_billing_at TIMESTAMPTZ,\n      cancel_at_period_end BOOLEAN NOT NULL DEFAULT FALSE,\n      canceled_at TIMESTAMPTZ,\n      last_invoice_id INTEGER,\n      overage_enabled BOOLEAN NOT NULL DEFAULT TRUE,\n      overage_credit_limit INTEGER,\n      retry_count INTEGER NOT NULL DEFAULT 0,\n      last_retry_at TIMESTAMPTZ,\n      last_failure_code TEXT,\n      metadata TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_invoices (\n      id SERIAL PRIMARY KEY,\n      subscription_id INTEGER,\n      user_id TEXT NOT NULL,\n      invoice_number TEXT NOT NULL UNIQUE,\n      provider TEXT NOT NULL DEFAULT 'tosspayments',\n      invoice_type TEXT NOT NULL DEFAULT 'subscription_cycle',\n      status TEXT NOT NULL DEFAULT 'draft',\n      currency TEXT NOT NULL DEFAULT 'KRW',\n      subtotal_minor INTEGER NOT NULL DEFAULT 0,\n      tax_minor INTEGER NOT NULL DEFAULT 0,\n      total_minor INTEGER NOT NULL DEFAULT 0,\n      paid_minor INTEGER NOT NULL DEFAULT 0,\n      service_overage_credits INTEGER NOT NULL DEFAULT 0,\n      period_start TIMESTAMPTZ,\n      period_end TIMESTAMPTZ,\n      billing_anchor_at TIMESTAMPTZ,\n      issued_at TIMESTAMPTZ,\n      due_at TIMESTAMPTZ,\n      paid_at TIMESTAMPTZ,\n      effects_applied_at TIMESTAMPTZ,\n      failed_at TIMESTAMPTZ,\n      voided_at TIMESTAMPTZ,\n      provider_payment_key TEXT,\n      idempotency_key TEXT UNIQUE,\n      provider_payload_json TEXT NOT NULL DEFAULT '{}',\n      failure_code TEXT,\n      failure_message TEXT,\n      metadata TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_invoice_lines (\n      id SERIAL PRIMARY KEY,\n      invoice_id INTEGER NOT NULL,\n      line_type TEXT NOT NULL,\n      title TEXT NOT NULL,\n      quantity INTEGER NOT NULL DEFAULT 1,\n      unit_amount_minor INTEGER NOT NULL DEFAULT 0,\n      line_amount_minor INTEGER NOT NULL DEFAULT 0,\n      service_credit_amount INTEGER NOT NULL DEFAULT 0,\n      period_start TIMESTAMPTZ,\n      period_end TIMESTAMPTZ,\n      metadata TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_invoice_usage_breakdowns (\n      id SERIAL PRIMARY KEY,\n      invoice_id INTEGER NOT NULL,\n      invoice_line_id INTEGER NOT NULL,\n      user_id TEXT NOT NULL,\n      app_id INTEGER,\n      app_name_snapshot TEXT,\n      app_display_name_snapshot TEXT,\n      service_type TEXT NOT NULL,\n      provider TEXT NOT NULL,\n      operation TEXT NOT NULL,\n      logical_model TEXT NOT NULL,\n      meter TEXT NOT NULL,\n      unit_label TEXT NOT NULL DEFAULT '',\n      unit_quantity REAL NOT NULL DEFAULT 0,\n      charged_credits REAL NOT NULL DEFAULT 0,\n      covered_credits REAL NOT NULL DEFAULT 0,\n      billable_overage_credits REAL NOT NULL DEFAULT 0,\n      unit_price_minor INTEGER NOT NULL DEFAULT 0,\n      amount_minor INTEGER NOT NULL DEFAULT 0,\n      event_count INTEGER NOT NULL DEFAULT 0,\n      allocation_method TEXT NOT NULL DEFAULT 'legacy_period_bucket',\n      period_start TIMESTAMPTZ,\n      period_end TIMESTAMPTZ,\n      metadata TEXT NOT NULL DEFAULT '{}',\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_attempts (\n      id SERIAL PRIMARY KEY,\n      invoice_id INTEGER,\n      subscription_id INTEGER,\n      payment_method_id INTEGER,\n      attempt_type TEXT NOT NULL,\n      status TEXT NOT NULL DEFAULT 'running',\n      idempotency_key TEXT,\n      provider_response_code TEXT,\n      provider_request_id TEXT,\n      error_message TEXT,\n      started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      completed_at TIMESTAMPTZ\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_webhook_events (\n      id SERIAL PRIMARY KEY,\n      provider TEXT NOT NULL DEFAULT 'tosspayments',\n      event_type TEXT NOT NULL,\n      event_key TEXT NOT NULL,\n      payment_key TEXT,\n      received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n      processed_at TIMESTAMPTZ,\n      status TEXT NOT NULL DEFAULT 'received',\n      payload_json TEXT NOT NULL DEFAULT '{}',\n      error_message TEXT,\n      UNIQUE(provider, event_key)\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_discount_campaigns (\n    id SERIAL PRIMARY KEY, code TEXT NOT NULL UNIQUE, name TEXT NOT NULL,\n    status TEXT NOT NULL DEFAULT 'draft', discount_percent INTEGER NOT NULL CHECK (discount_percent > 0 AND discount_percent < 100),\n    eligibility_type TEXT NOT NULL DEFAULT 'explicit_members', requires_first_paid_conversion BOOLEAN NOT NULL DEFAULT FALSE,\n    qualification_starts_at TIMESTAMP,\n    qualification_ends_at TIMESTAMP, timezone TEXT NOT NULL DEFAULT 'Asia/Seoul',\n    eligible_plan_group_ids TEXT NOT NULL DEFAULT '[]', applies_to TEXT NOT NULL DEFAULT 'subscription_base',\n    duration TEXT NOT NULL DEFAULT 'lifetime', priority INTEGER NOT NULL DEFAULT 0,\n    metadata TEXT NOT NULL DEFAULT '{}', created_by TEXT NOT NULL,\n    created_at TIMESTAMP NOT NULL DEFAULT NOW(), updated_at TIMESTAMP NOT NULL DEFAULT NOW()\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_discount_audience_runs (\n    id SERIAL PRIMARY KEY, campaign_id INTEGER NOT NULL, status TEXT NOT NULL DEFAULT 'previewed',\n    rule_json TEXT NOT NULL DEFAULT '{}', rule_digest TEXT NOT NULL,\n    matched_count INTEGER NOT NULL DEFAULT 0, included_count INTEGER NOT NULL DEFAULT 0,\n    skipped_count INTEGER NOT NULL DEFAULT 0, conflict_count INTEGER NOT NULL DEFAULT 0,\n    preview_expires_at TIMESTAMP NOT NULL, created_by TEXT NOT NULL,\n    created_at TIMESTAMP NOT NULL DEFAULT NOW(), applied_at TIMESTAMP\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_discount_audience_members (\n    id SERIAL PRIMARY KEY, campaign_id INTEGER NOT NULL, user_id TEXT NOT NULL,\n    status TEXT NOT NULL DEFAULT 'included', source TEXT NOT NULL, source_run_id INTEGER,\n    eligibility_snapshot_json TEXT NOT NULL DEFAULT '{}', added_by TEXT NOT NULL,\n    added_at TIMESTAMP NOT NULL DEFAULT NOW(), excluded_by TEXT, excluded_at TIMESTAMP,\n    exclusion_reason TEXT, UNIQUE(campaign_id, user_id)\n  )`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_billing_discount_entitlements (\n    id SERIAL PRIMARY KEY, campaign_id INTEGER NOT NULL, user_id TEXT NOT NULL,\n    subscription_id INTEGER, plan_group_id TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending',\n    discount_percent_snapshot INTEGER NOT NULL CHECK (discount_percent_snapshot > 0 AND discount_percent_snapshot < 100),\n    qualified_invoice_id INTEGER, qualified_at TIMESTAMP, reservation_expires_at TIMESTAMP,\n    source TEXT NOT NULL, idempotency_key TEXT NOT NULL UNIQUE,\n    terminated_at TIMESTAMP, termination_reason TEXT, revoked_at TIMESTAMP,\n    revoked_by TEXT, revoke_reason TEXT, created_at TIMESTAMP NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE(campaign_id, user_id)\n  )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_subscriptions_user_status\n      ON platform_billing_subscriptions (user_id, status, next_billing_at)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_invoices_user_status\n      ON platform_billing_invoices (user_id, status, created_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_invoices_subscription_status\n      ON platform_billing_invoices (subscription_id, status, created_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_invoice_lines_invoice_id\n      ON platform_billing_invoice_lines (invoice_id, id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_invoice_usage_invoice_id\n      ON platform_billing_invoice_usage_breakdowns (invoice_id, invoice_line_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_invoice_usage_user_period\n      ON platform_billing_invoice_usage_breakdowns (user_id, period_start, period_end)`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_billing_invoice_usage_breakdown_bucket_unique\n      ON platform_billing_invoice_usage_breakdowns (\n        invoice_id,\n        invoice_line_id,\n        app_id,\n        service_type,\n        provider,\n        operation,\n        logical_model,\n        meter,\n        unit_label,\n        allocation_method\n      )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_attempts_invoice_started\n      ON platform_billing_attempts (invoice_id, started_at DESC)`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_billing_attempts_idempotency_key_unique\n      ON platform_billing_attempts (idempotency_key)\n      WHERE idempotency_key IS NOT NULL`);\n    await params.rawSql(`ALTER TABLE platform_billing_plans ADD COLUMN IF NOT EXISTS plan_group_id TEXT NOT NULL DEFAULT 'startup'`);\n    await params.rawSql(`ALTER TABLE platform_billing_plans ADD COLUMN IF NOT EXISTS billing_interval TEXT NOT NULL DEFAULT 'month'`);\n    await params.rawSql(`ALTER TABLE platform_billing_plans ADD COLUMN IF NOT EXISTS billing_interval_months INTEGER NOT NULL DEFAULT 1`);\n    await params.rawSql(`ALTER TABLE platform_billing_plans ADD COLUMN IF NOT EXISTS annual_discount_percent INTEGER NOT NULL DEFAULT 0`);\n    await params.rawSql(`ALTER TABLE platform_billing_subscriptions ADD COLUMN IF NOT EXISTS next_overage_billing_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE platform_billing_subscriptions ADD COLUMN IF NOT EXISTS checkout_session_id TEXT`);\n    await params.rawSql(`ALTER TABLE platform_billing_invoices ADD COLUMN IF NOT EXISTS effects_applied_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE platform_billing_discount_campaigns ADD COLUMN IF NOT EXISTS requires_first_paid_conversion BOOLEAN NOT NULL DEFAULT FALSE`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_billing_subscriptions_checkout_session_unique\n    ON platform_billing_subscriptions (checkout_session_id) WHERE checkout_session_id IS NOT NULL`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_billing_subscriptions_one_billable_user_unique\n    ON platform_billing_subscriptions (user_id) WHERE status IN ('pending_activation', 'active', 'past_due')`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_checkout_user_status\n    ON platform_billing_checkout_sessions (user_id, status, expires_at)`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_billing_checkout_one_processing_user_unique\n    ON platform_billing_checkout_sessions (user_id) WHERE status = 'processing'`);\n    await params.rawSql(`INSERT INTO platform_billing_plans (\n      id, platform_plan_id, display_name, billing_provider, billing_mode, currency,\n      plan_group_id, billing_interval, billing_interval_months, annual_discount_percent,\n      base_price_minor, anchor_day, timezone, service_included_credits,\n      service_overage_credit_limit, service_overage_unit_price_minor, active, metadata\n    )\n    VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)\n    ON CONFLICT (id) DO UPDATE SET\n      platform_plan_id = EXCLUDED.platform_plan_id,\n      billing_provider = EXCLUDED.billing_provider,\n      billing_mode = EXCLUDED.billing_mode,\n      currency = EXCLUDED.currency,\n      plan_group_id = EXCLUDED.plan_group_id,\n      billing_interval = EXCLUDED.billing_interval,\n      billing_interval_months = EXCLUDED.billing_interval_months,\n      annual_discount_percent = EXCLUDED.annual_discount_percent,\n      anchor_day = EXCLUDED.anchor_day,\n      timezone = EXCLUDED.timezone,\n      updated_at = NOW()`, [\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.id,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.platformPlanId,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.displayName,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.billingProvider,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.billingMode,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.currency,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.planGroupId,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.billingInterval,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.billingIntervalMonths,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.annualDiscountPercent,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.basePriceMinor,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.anchorDay,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.timezone,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.serviceIncludedCredits,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.serviceOverageCreditLimit,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.serviceOverageUnitPriceMinor,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.active,\n        STARTUP_MONTHLY_BILLING_PLAN_SEED.metadata,\n    ]);\n    await params.rawSql(`INSERT INTO platform_billing_plans (\n      id, platform_plan_id, display_name, billing_provider, billing_mode, currency,\n      plan_group_id, billing_interval, billing_interval_months, annual_discount_percent,\n      base_price_minor, anchor_day, timezone, service_included_credits,\n      service_overage_credit_limit, service_overage_unit_price_minor, active, metadata\n    )\n    VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)\n    ON CONFLICT (id) DO UPDATE SET\n      platform_plan_id = EXCLUDED.platform_plan_id,\n      billing_provider = EXCLUDED.billing_provider,\n      billing_mode = EXCLUDED.billing_mode,\n      currency = EXCLUDED.currency,\n      plan_group_id = EXCLUDED.plan_group_id,\n      billing_interval = EXCLUDED.billing_interval,\n      billing_interval_months = EXCLUDED.billing_interval_months,\n      anchor_day = EXCLUDED.anchor_day,\n      timezone = EXCLUDED.timezone,\n      updated_at = NOW()`, [\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.id,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.platformPlanId,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.displayName,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.billingProvider,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.billingMode,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.currency,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.planGroupId,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.billingInterval,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.billingIntervalMonths,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.annualDiscountPercent,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.basePriceMinor,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.anchorDay,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.timezone,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.serviceIncludedCredits,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.serviceOverageCreditLimit,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.serviceOverageUnitPriceMinor,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.active,\n        STARTUP_ANNUAL_BILLING_PLAN_SEED.metadata,\n    ]);\n    await params.rawSql(`\n    UPDATE platform_billing_plans annual\n    SET\n      base_price_minor = CAST(ROUND(monthly.base_price_minor * annual.billing_interval_months * (100 - annual.annual_discount_percent) / 100.0) AS INTEGER),\n      service_included_credits = monthly.service_included_credits,\n      service_overage_credit_limit = monthly.service_overage_credit_limit,\n      service_overage_unit_price_minor = monthly.service_overage_unit_price_minor,\n      updated_at = NOW()\n    FROM platform_billing_plans monthly\n    WHERE annual.plan_group_id = monthly.plan_group_id\n      AND annual.billing_interval = 'year'\n      AND monthly.billing_interval = 'month'\n  `);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_discount_campaign_status\n    ON platform_billing_discount_campaigns (status, qualification_starts_at, qualification_ends_at)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_discount_audience_user\n    ON platform_billing_discount_audience_members (user_id, campaign_id, status)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_billing_discount_entitlement_user\n    ON platform_billing_discount_entitlements (user_id, status, plan_group_id)`);\n    logger.log(\"[platform-db] billing tables + seed \u2713\");\n}\n", "export async function ensurePlatformAiStreamSessionsSchema(params) {\n    await params.rawSql(`\n        CREATE TABLE IF NOT EXISTS platform_ai_stream_sessions (\n            id SERIAL PRIMARY KEY,\n            request_id TEXT NOT NULL UNIQUE,\n            user_id TEXT NOT NULL,\n            app_id INTEGER,\n            app_name TEXT,\n            model TEXT NOT NULL,\n            auth_type TEXT NOT NULL,\n            state TEXT NOT NULL,\n            reserved_credits REAL NOT NULL,\n            estimated_input_tokens INTEGER NOT NULL,\n            estimated_output_tokens INTEGER NOT NULL,\n            actual_input_tokens INTEGER,\n            actual_output_tokens INTEGER,\n            actual_total_tokens INTEGER,\n            credits_captured REAL,\n            provider_request_id TEXT,\n            reservation_ledger_entry_id INTEGER,\n            settlement_owner TEXT,\n            settlement_attempted_at TIMESTAMPTZ,\n            settled_at TIMESTAMPTZ,\n            last_error_code TEXT,\n            last_error_detail TEXT,\n            started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            ended_at TIMESTAMPTZ,\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n        )\n    `);\n}\n", "export async function ensurePlatformActivityEventsSchema(params) {\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_activity_events (\n            id BIGSERIAL PRIMARY KEY,\n            event_id TEXT NOT NULL UNIQUE,\n            occurred_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            category TEXT NOT NULL,\n            action TEXT NOT NULL,\n            outcome TEXT NOT NULL,\n            severity TEXT NOT NULL DEFAULT 'info',\n            actor_type TEXT NOT NULL,\n            actor_user_id TEXT,\n            actor_role TEXT,\n            actor_session_id_hash TEXT,\n            actor_token_id TEXT,\n            target_type TEXT,\n            target_id TEXT,\n            target_owner_user_id TEXT,\n            app_id INTEGER,\n            app_name TEXT,\n            environment TEXT,\n            deploy_id INTEGER,\n            request_id TEXT,\n            source TEXT NOT NULL,\n            ip_hash TEXT,\n            user_agent_hash TEXT,\n            country TEXT,\n            reason_code TEXT,\n            metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            search_text TEXT NOT NULL DEFAULT '',\n            actor_user_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            target_user_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            app_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            request_context_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            auth_attempt_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            deploy_context_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n            context_status TEXT NOT NULL DEFAULT 'legacy_partial',\n            actor_email TEXT,\n            actor_email_hash TEXT,\n            target_user_email TEXT,\n            target_user_email_hash TEXT,\n            attempted_email TEXT,\n            attempted_email_hash TEXT,\n            owner_email TEXT,\n            owner_email_hash TEXT,\n            app_owner_user_id TEXT,\n            route_path TEXT,\n            http_method TEXT,\n            http_status INTEGER\n        )`);\n    const columnStatements = [\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS actor_user_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS target_user_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS app_snapshot_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS request_context_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS auth_attempt_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS deploy_context_json JSONB NOT NULL DEFAULT '{}'::jsonb`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS context_status TEXT NOT NULL DEFAULT 'legacy_partial'`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS actor_email TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS actor_email_hash TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS target_user_email TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS target_user_email_hash TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS attempted_email TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS attempted_email_hash TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS owner_email TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS owner_email_hash TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS app_owner_user_id TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS route_path TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS http_method TEXT`,\n        `ALTER TABLE platform_activity_events ADD COLUMN IF NOT EXISTS http_status INTEGER`,\n    ];\n    for (const statement of columnStatements)\n        await params.rawSql(statement);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS platform_activity_events_event_id_key ON platform_activity_events (event_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_actor_time ON platform_activity_events (actor_user_id, occurred_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_app_time ON platform_activity_events (app_id, occurred_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_action_time ON platform_activity_events (category, action, outcome, occurred_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_target_time ON platform_activity_events (target_type, target_id, occurred_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_request_id ON platform_activity_events (request_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_metadata ON platform_activity_events USING GIN (metadata_json)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_actor_email ON platform_activity_events (actor_email)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_target_email ON platform_activity_events (target_user_email)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_attempted_email ON platform_activity_events (attempted_email)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_owner_email ON platform_activity_events (owner_email)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_app_owner ON platform_activity_events (app_owner_user_id, occurred_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_route_path ON platform_activity_events (route_path)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_activity_deploy_time ON platform_activity_events (deploy_id, occurred_at DESC)`);\n}\n", "export async function ensureAiAudioJobSchema(params) {\n    for (const statement of AI_AUDIO_JOB_SCHEMA_STATEMENTS) {\n        await params.rawSql(statement);\n    }\n}\nexport const AI_AUDIO_JOB_SCHEMA_STATEMENTS = [\n    `\n        CREATE TABLE IF NOT EXISTS ai_audio_jobs (\n            id TEXT PRIMARY KEY,\n            user_id TEXT NOT NULL,\n            app_id INTEGER,\n            operation TEXT NOT NULL,\n            provider TEXT NOT NULL,\n            model TEXT NOT NULL,\n            model_version TEXT,\n            status TEXT NOT NULL,\n            workflow_id TEXT,\n            idempotency_key TEXT,\n            request_id TEXT,\n            source_storage_id TEXT,\n            output_storage_id TEXT,\n            transcript_storage_id TEXT,\n            provider_route_id TEXT,\n            provider_request_id TEXT,\n            reservation_ledger_id INTEGER,\n            reserved_credits REAL NOT NULL DEFAULT 0,\n            captured_credits REAL NOT NULL DEFAULT 0,\n            estimated_units_json TEXT NOT NULL DEFAULT '{}',\n            actual_units_json TEXT NOT NULL DEFAULT '{}',\n            safe_result_json TEXT NOT NULL DEFAULT '{}',\n            error_code TEXT,\n            error_message_safe TEXT,\n            attempts INTEGER NOT NULL DEFAULT 0,\n            next_attempt_at TIMESTAMP,\n            stage TEXT NOT NULL DEFAULT 'queued',\n            accepted_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            last_progress_at TIMESTAMP,\n            queue_delay_reason TEXT,\n            queue_sla_breached_at TIMESTAMP,\n            worker_claim_id TEXT,\n            worker_claim_expires_at TIMESTAMP,\n            worker_claim_generation INTEGER NOT NULL DEFAULT 0,\n            worker_heartbeat_at TIMESTAMP,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            started_at TIMESTAMP,\n            completed_at TIMESTAMP,\n            canceled_at TIMESTAMP\n        )\n    `,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS worker_claim_id TEXT`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS worker_claim_expires_at TIMESTAMP`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS stage TEXT NOT NULL DEFAULT 'queued'`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS accepted_at TIMESTAMP`,\n    `UPDATE ai_audio_jobs SET accepted_at = created_at WHERE accepted_at IS NULL`,\n    `ALTER TABLE ai_audio_jobs ALTER COLUMN accepted_at SET DEFAULT NOW()`,\n    `ALTER TABLE ai_audio_jobs ALTER COLUMN accepted_at SET NOT NULL`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS last_progress_at TIMESTAMP`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS queue_delay_reason TEXT`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS queue_sla_breached_at TIMESTAMP`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS worker_claim_generation INTEGER NOT NULL DEFAULT 0`,\n    `ALTER TABLE ai_audio_jobs ADD COLUMN IF NOT EXISTS worker_heartbeat_at TIMESTAMP`,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_worker_claim_idx\n        ON ai_audio_jobs (worker_claim_id, worker_claim_expires_at)\n        WHERE worker_claim_id IS NOT NULL\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_owner_created_idx\n        ON ai_audio_jobs (user_id, app_id, created_at DESC)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_status_updated_idx\n        ON ai_audio_jobs (status, updated_at)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_status_next_attempt_idx\n        ON ai_audio_jobs (status, next_attempt_at, updated_at)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_queue_schedule_idx\n        ON ai_audio_jobs (status, operation, next_attempt_at, accepted_at)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_jobs_started_at_idx\n        ON ai_audio_jobs (started_at DESC)\n        WHERE started_at IS NOT NULL\n    `,\n    `\n        CREATE UNIQUE INDEX IF NOT EXISTS ai_audio_jobs_idempotency_key_unique\n        ON ai_audio_jobs (user_id, COALESCE(app_id, -1), operation, idempotency_key)\n        WHERE idempotency_key IS NOT NULL\n    `,\n    `\n        CREATE TABLE IF NOT EXISTS ai_audio_job_chunks (\n            id TEXT PRIMARY KEY,\n            job_id TEXT NOT NULL REFERENCES ai_audio_jobs(id) ON DELETE CASCADE,\n            chunk_index INTEGER NOT NULL,\n            source_time_start_ms INTEGER NOT NULL,\n            source_time_end_ms INTEGER NOT NULL,\n            chunk_storage_id TEXT,\n            transcript_storage_id TEXT,\n            status TEXT NOT NULL,\n            provider_request_id TEXT,\n            attempts INTEGER NOT NULL DEFAULT 0,\n            error_code TEXT,\n            next_attempt_at TIMESTAMP,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )\n    `,\n    `\n        CREATE UNIQUE INDEX IF NOT EXISTS ai_audio_job_chunks_job_index_unique\n        ON ai_audio_job_chunks (job_id, chunk_index)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_job_chunks_status_updated_idx\n        ON ai_audio_job_chunks (status, updated_at)\n    `,\n    `\n        CREATE INDEX IF NOT EXISTS ai_audio_job_chunks_status_next_attempt_idx\n        ON ai_audio_job_chunks (status, next_attempt_at, updated_at)\n    `,\n];\n", "function rowsFromRawResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function assertPlatformAnalyticsSchemaReady(params) {\n    const rows = rowsFromRawResult(await params.rawSql(`SELECT table_name, column_name, is_nullable\n       FROM information_schema.columns\n       WHERE table_name IN (\n        'analytics_sites',\n        'analytics_events_raw',\n        'analytics_daily_visitors',\n        'analytics_daily_sessions'\n       )`));\n    const columns = new Map(rows.map((row) => [`${row.table_name}.${row.column_name}`, row.is_nullable ?? \"\"]));\n    const requireColumn = (table, column) => {\n        if (!columns.has(`${table}.${column}`)) {\n            throw new Error(`analytics schema missing required column: ${table}.${column}`);\n        }\n    };\n    const requireNullable = (table, column) => {\n        requireColumn(table, column);\n        if (columns.get(`${table}.${column}`) !== \"YES\") {\n            throw new Error(`analytics schema column must be nullable: ${table}.${column}`);\n        }\n    };\n    requireColumn(\"analytics_sites\", \"scope\");\n    requireNullable(\"analytics_sites\", \"app_id\");\n    requireNullable(\"analytics_events_raw\", \"app_id\");\n    requireNullable(\"analytics_events_raw\", \"utm_source\");\n    requireNullable(\"analytics_events_raw\", \"utm_medium\");\n    requireNullable(\"analytics_events_raw\", \"utm_campaign\");\n    requireNullable(\"analytics_events_raw\", \"utm_content\");\n    requireNullable(\"analytics_events_raw\", \"utm_term\");\n    requireColumn(\"analytics_daily_visitors\", \"visitor_key\");\n    requireColumn(\"analytics_daily_sessions\", \"session_key\");\n}\nexport async function ensurePlatformAnalyticsSchema(params) {\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_sites (\n        id SERIAL PRIMARY KEY,\n        scope TEXT NOT NULL DEFAULT 'hosted_app',\n        app_id INTEGER,\n        site_key TEXT NOT NULL UNIQUE,\n        backend TEXT NOT NULL DEFAULT 'disabled',\n        enabled BOOLEAN NOT NULL DEFAULT false,\n        primary_domain TEXT,\n        custom_domain TEXT,\n        last_event_at TIMESTAMP,\n        metadata_json TEXT NOT NULL DEFAULT '{}',\n        created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n    )`);\n    await params.rawSql(`ALTER TABLE analytics_sites ADD COLUMN IF NOT EXISTS scope TEXT NOT NULL DEFAULT 'hosted_app'`);\n    await params.rawSql(`ALTER TABLE analytics_sites ALTER COLUMN app_id DROP NOT NULL`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS analytics_sites_app_id_unique ON analytics_sites (app_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_sites_app_updated_idx ON analytics_sites (app_id, updated_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_sites_scope_updated_idx ON analytics_sites (scope, updated_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_sites_enabled_idx ON analytics_sites (enabled)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_events_raw (\n        id SERIAL PRIMARY KEY,\n        site_id INTEGER NOT NULL,\n        app_id INTEGER,\n        schema_version INTEGER NOT NULL DEFAULT 1,\n        event_name TEXT NOT NULL,\n        day DATE NOT NULL,\n        occurred_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        received_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        url TEXT NOT NULL,\n        path TEXT NOT NULL,\n        referrer TEXT,\n        source TEXT NOT NULL DEFAULT 'Direct',\n        utm_source TEXT,\n        utm_medium TEXT,\n        utm_campaign TEXT,\n        utm_content TEXT,\n        utm_term TEXT,\n        country TEXT NOT NULL DEFAULT 'Unknown',\n        device TEXT NOT NULL DEFAULT 'Unknown',\n        browser TEXT NOT NULL DEFAULT 'Unknown',\n        os TEXT NOT NULL DEFAULT 'Unknown',\n        language TEXT,\n        screen_width_bucket TEXT,\n        screen_height_bucket TEXT,\n        deploy_id TEXT,\n        visitor_key TEXT NOT NULL,\n        session_key TEXT NOT NULL,\n        user_agent_hash TEXT,\n        metadata_json TEXT NOT NULL DEFAULT '{}'\n    )`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ALTER COLUMN app_id DROP NOT NULL`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ADD COLUMN IF NOT EXISTS utm_source TEXT`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ADD COLUMN IF NOT EXISTS utm_medium TEXT`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ADD COLUMN IF NOT EXISTS utm_campaign TEXT`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ADD COLUMN IF NOT EXISTS utm_content TEXT`);\n    await params.rawSql(`ALTER TABLE analytics_events_raw ADD COLUMN IF NOT EXISTS utm_term TEXT`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_site_day_idx ON analytics_events_raw (site_id, day)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_site_occurred_idx ON analytics_events_raw (site_id, occurred_at)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_site_received_idx ON analytics_events_raw (site_id, received_at DESC)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_site_visitor_idx ON analytics_events_raw (site_id, day, visitor_key)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_site_session_idx ON analytics_events_raw (site_id, day, session_key)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_utm_source_idx ON analytics_events_raw (site_id, day, utm_source)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_utm_medium_idx ON analytics_events_raw (site_id, day, utm_medium)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_events_utm_campaign_idx ON analytics_events_raw (site_id, day, utm_campaign)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_daily_rollups (\n        site_id INTEGER NOT NULL,\n        day DATE NOT NULL,\n        visitors INTEGER NOT NULL DEFAULT 0,\n        visits INTEGER NOT NULL DEFAULT 0,\n        pageviews INTEGER NOT NULL DEFAULT 0,\n        created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        CONSTRAINT analytics_daily_rollups_site_day_unique UNIQUE (site_id, day)\n    )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_daily_rollups_site_day_idx ON analytics_daily_rollups (site_id, day)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_daily_visitors (\n        site_id INTEGER NOT NULL,\n        day DATE NOT NULL,\n        visitor_key TEXT NOT NULL,\n        created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        CONSTRAINT analytics_daily_visitors_site_day_key_unique UNIQUE (site_id, day, visitor_key)\n    )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_daily_visitors_site_day_idx ON analytics_daily_visitors (site_id, day)`);\n    await params.rawSql(`INSERT INTO analytics_daily_visitors (site_id, day, visitor_key, created_at)\n     SELECT DISTINCT site_id, day, visitor_key, NOW()\n     FROM analytics_events_raw\n     WHERE visitor_key IS NOT NULL\n     ON CONFLICT (site_id, day, visitor_key) DO NOTHING`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_daily_sessions (\n        site_id INTEGER NOT NULL,\n        day DATE NOT NULL,\n        session_key TEXT NOT NULL,\n        created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        CONSTRAINT analytics_daily_sessions_site_day_key_unique UNIQUE (site_id, day, session_key)\n    )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_daily_sessions_site_day_idx ON analytics_daily_sessions (site_id, day)`);\n    await params.rawSql(`INSERT INTO analytics_daily_sessions (site_id, day, session_key, created_at)\n     SELECT DISTINCT site_id, day, session_key, NOW()\n     FROM analytics_events_raw\n     WHERE session_key IS NOT NULL\n     ON CONFLICT (site_id, day, session_key) DO NOTHING`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS analytics_daily_dimension_rollups (\n        site_id INTEGER NOT NULL,\n        day DATE NOT NULL,\n        dimension TEXT NOT NULL,\n        value TEXT NOT NULL,\n        label TEXT NOT NULL,\n        visitors INTEGER NOT NULL DEFAULT 0,\n        visits INTEGER NOT NULL DEFAULT 0,\n        pageviews INTEGER NOT NULL DEFAULT 0,\n        created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n        CONSTRAINT analytics_daily_dimension_site_day_dim_value_unique UNIQUE (site_id, day, dimension, value)\n    )`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS analytics_daily_dimension_site_day_idx ON analytics_daily_dimension_rollups (site_id, day, dimension)`);\n    await assertPlatformAnalyticsSchemaReady(params);\n}\n", "export async function ensurePlatformAccountLifecycleSchema(params) {\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status TEXT NOT NULL DEFAULT 'active'`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status_reason_code TEXT`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status_note TEXT`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status_changed_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status_changed_by TEXT`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS suspended_until TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS deletion_requested_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS deletion_effective_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS deletion_initiator_type TEXT`);\n    await params.rawSql(`ALTER TABLE \"user\" ADD COLUMN IF NOT EXISTS account_status_version INTEGER NOT NULL DEFAULT 0`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_user_account_status ON \"user\" (account_status)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_user_deletion_effective_at ON \"user\" (deletion_effective_at)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_user_suspended_until ON \"user\" (suspended_until)`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS owner_account_hold TEXT`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS owner_account_hold_at TIMESTAMPTZ`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS owner_account_hold_reason TEXT`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_apps_owner_account_hold ON apps (owner_account_hold)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_apps_user_owner_account_hold ON apps (user_id, owner_account_hold)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_account_deletion_jobs (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL,\n            initiator_type TEXT NOT NULL,\n            initiator_user_id TEXT,\n            effective_at TIMESTAMPTZ NOT NULL,\n            status TEXT NOT NULL DEFAULT 'pending',\n            current_stage TEXT NOT NULL DEFAULT 'created',\n            idempotency_key TEXT NOT NULL,\n            attempts INTEGER NOT NULL DEFAULT 0,\n            last_error_code TEXT,\n            completed_at TIMESTAMPTZ,\n            created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n        )`);\n    await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS idx_platform_account_deletion_jobs_idempotency ON platform_account_deletion_jobs (idempotency_key)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_account_deletion_jobs_due ON platform_account_deletion_jobs (status, effective_at)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_account_deletion_jobs_user ON platform_account_deletion_jobs (user_id)`);\n}\n", "const DEPLOYMENT_RUNTIME_SCHEMA_STATEMENTS = [\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_manifest_json TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_manifest_hash TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_channel TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_root TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_lockfile_hash TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS server_entry_sha TEXT`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_status TEXT NOT NULL DEFAULT 'legacy_unknown'`,\n    `ALTER TABLE deployments ADD COLUMN IF NOT EXISTS runtime_migrated_from_deploy_id INTEGER`,\n    `ALTER TABLE deployments ALTER COLUMN runtime_status SET DEFAULT 'legacy_unknown'`,\n    `UPDATE deployments\n    SET runtime_status = 'legacy_unknown'\n    WHERE runtime_manifest_hash IS NULL\n      AND runtime_manifest_json IS NULL\n      AND runtime_status = 'active'`,\n    `CREATE INDEX IF NOT EXISTS idx_deployments_runtime_hash ON deployments (runtime_manifest_hash)`,\n    `CREATE INDEX IF NOT EXISTS idx_deployments_runtime_status ON deployments (runtime_status)`,\n];\nexport async function ensureDeploymentRuntimeMetadataSchema(rawSql) {\n    for (const statement of DEPLOYMENT_RUNTIME_SCHEMA_STATEMENTS) {\n        await rawSql(statement);\n    }\n}\n", "/** Database-enforced final boundary for app creation and ownership transfer. */\nexport async function ensureAppQuotaBoundarySchema(params) {\n    await params.rawSql(`DO $$\n    BEGIN\n      IF NOT EXISTS (\n        SELECT 1 FROM pg_constraint\n         WHERE conname = 'pricing_tiers_max_apps_check'\n           AND conrelid = 'pricing_tiers'::regclass\n      ) THEN\n        ALTER TABLE pricing_tiers\n          ADD CONSTRAINT pricing_tiers_max_apps_check\n          CHECK (max_apps = -1 OR max_apps >= 0);\n      END IF;\n    END\n  $$`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_apps_user_id ON apps (user_id)`);\n    await params.rawSql(`CREATE OR REPLACE FUNCTION gencow_enforce_app_owner_quota()\n    RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\n    DECLARE\n      owner_role TEXT;\n      owner_status TEXT;\n      owner_plan TEXT;\n      owner_max_apps INTEGER;\n      owner_current_apps BIGINT;\n      audit_source TEXT;\n      audit_request_id TEXT;\n    BEGIN\n      IF TG_OP = 'UPDATE' AND NEW.user_id IS NOT DISTINCT FROM OLD.user_id THEN\n        RETURN NEW;\n      END IF;\n\n      SELECT role, account_status\n        INTO owner_role, owner_status\n        FROM \"user\"\n       WHERE id = NEW.user_id\n       FOR UPDATE;\n\n      IF NOT FOUND OR owner_status IS DISTINCT FROM 'active' THEN\n        RAISE EXCEPTION USING ERRCODE = 'P0001', MESSAGE = 'GENCOW_APP_ACCOUNT_INACTIVE';\n      END IF;\n\n      SELECT uc.plan, pt.max_apps\n        INTO owner_plan, owner_max_apps\n        FROM user_credits uc\n        JOIN pricing_tiers pt ON pt.id = uc.plan\n       WHERE uc.user_id = NEW.user_id\n       FOR UPDATE OF uc, pt;\n\n      IF NOT FOUND THEN\n        RAISE EXCEPTION USING ERRCODE = 'P0001', MESSAGE = 'GENCOW_APP_ENTITLEMENT_MISSING';\n      END IF;\n      IF owner_max_apps IS NULL OR owner_max_apps < -1 THEN\n        RAISE EXCEPTION USING ERRCODE = 'P0001', MESSAGE = 'GENCOW_APP_POLICY_INVALID';\n      END IF;\n\n      SELECT COUNT(*) INTO owner_current_apps FROM apps WHERE user_id = NEW.user_id;\n\n      IF owner_role = 'admin' AND owner_status = 'active' THEN\n        audit_source := COALESCE(\n          NULLIF(current_setting('gencow.app_quota_source', true), ''),\n          'database-trigger'\n        );\n        audit_request_id := NULLIF(current_setting('gencow.app_quota_request_id', true), '');\n        INSERT INTO platform_activity_events (\n          event_id, category, action, outcome, severity,\n          actor_type, actor_user_id, actor_role,\n          target_type, target_id, target_owner_user_id,\n          app_id, app_name, request_id, source, reason_code, metadata_json\n        ) VALUES (\n          'app-quota-bypass:' || md5(\n            txid_current()::text || ':' || clock_timestamp()::text || ':' ||\n            COALESCE(NEW.id::text, NEW.name) || ':' || TG_OP\n          ),\n          'app', 'app_quota_bypass', 'success', 'info',\n          'user', NEW.user_id, owner_role,\n          'app', NEW.name, NEW.user_id,\n          NEW.id, NEW.name, audit_request_id, audit_source, 'bypass_active_admin',\n          jsonb_build_object(\n            'quotaDecision', 'bypass_active_admin',\n            'plan', owner_plan,\n            'configuredMaxApps', owner_max_apps,\n            'currentAppsBeforeWrite', owner_current_apps,\n            'operation', TG_OP\n          )\n        );\n        RETURN NEW;\n      END IF;\n\n      IF owner_max_apps <> -1 AND owner_current_apps >= owner_max_apps THEN\n        RAISE EXCEPTION USING ERRCODE = 'P0001', MESSAGE = 'GENCOW_APP_QUOTA_EXCEEDED';\n      END IF;\n      RETURN NEW;\n    END\n    $$`);\n    await params.rawSql(`DROP TRIGGER IF EXISTS apps_owner_quota_guard ON apps`);\n    await params.rawSql(`CREATE TRIGGER apps_owner_quota_guard\n    BEFORE INSERT OR UPDATE OF user_id ON apps\n    FOR EACH ROW EXECUTE FUNCTION gencow_enforce_app_owner_quota()`);\n    await params.rawSql(`CREATE OR REPLACE FUNCTION gencow_audit_pricing_tier_max_apps()\n    RETURNS trigger\n    LANGUAGE plpgsql\n    AS $$\n    DECLARE\n      configured_actor_id TEXT;\n    BEGIN\n      IF NEW.max_apps IS NOT DISTINCT FROM OLD.max_apps THEN\n        RETURN NEW;\n      END IF;\n      configured_actor_id := NULLIF(\n        current_setting('gencow.admin_actor_user_id', true),\n        ''\n      );\n      INSERT INTO platform_activity_events (\n        event_id, category, action, outcome, severity,\n        actor_type, actor_user_id, actor_role,\n        target_type, target_id, source, reason_code, metadata_json\n      ) VALUES (\n        'pricing-tier-max-apps:' || md5(\n          txid_current()::text || ':' || clock_timestamp()::text || ':' || NEW.id\n        ),\n        'admin', 'pricing_tier_max_apps_update', 'success', 'warning',\n        CASE WHEN configured_actor_id IS NULL THEN 'system' ELSE 'user' END,\n        configured_actor_id,\n        CASE WHEN configured_actor_id IS NULL THEN NULL ELSE 'admin' END,\n        'pricing_tier', NEW.id, 'database-trigger', 'runtime_policy_updated',\n        jsonb_build_object('previousMaxApps', OLD.max_apps, 'nextMaxApps', NEW.max_apps)\n      );\n      RETURN NEW;\n    END\n    $$`);\n    await params.rawSql(`DROP TRIGGER IF EXISTS pricing_tiers_max_apps_audit ON pricing_tiers`);\n    await params.rawSql(`CREATE TRIGGER pricing_tiers_max_apps_audit\n    AFTER UPDATE OF max_apps ON pricing_tiers\n    FOR EACH ROW EXECUTE FUNCTION gencow_audit_pricing_tier_max_apps()`);\n}\n", "export const APP_RUNTIME_PREFLIGHT_SCHEMA_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS app_runtime_preflight_state (\n    app_id INTEGER PRIMARY KEY REFERENCES apps(id) ON DELETE CASCADE,\n    deploy_id INTEGER,\n    db_contract_generation TEXT NOT NULL,\n    db_verified_at TIMESTAMPTZ NOT NULL,\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n  )`,\n    `CREATE INDEX IF NOT EXISTS app_runtime_preflight_state_verified_idx\n   ON app_runtime_preflight_state (db_verified_at)`,\n    `REVOKE ALL ON TABLE app_runtime_preflight_state FROM PUBLIC`,\n    `DO $$\n   DECLARE runtime_role TEXT;\n   BEGIN\n     FOR runtime_role IN\n       SELECT rolname FROM pg_roles\n       WHERE rolname IN ('gencow_app_user', 'gencow_system_user', 'gencow_ddl_user')\n     LOOP\n       EXECUTE format('REVOKE ALL ON TABLE app_runtime_preflight_state FROM %I', runtime_role);\n     END LOOP;\n   END $$`,\n];\nexport async function ensureAppRuntimePreflightSchema(params) {\n    for (const statement of APP_RUNTIME_PREFLIGHT_SCHEMA_STATEMENTS) {\n        await params.rawSql(statement);\n    }\n}\n", "export async function ensureUsageAdjustmentsSchema(params) {\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS usage_adjustments (id SERIAL PRIMARY KEY, adjustment_key TEXT NOT NULL UNIQUE, user_id TEXT NOT NULL, app_id INTEGER NOT NULL, period_month TEXT NOT NULL, metric_key TEXT NOT NULL, raw_value REAL, adjusted_value REAL, raw_credits REAL NOT NULL, adjusted_credits REAL NOT NULL, credit_delta REAL NOT NULL, reason_code TEXT NOT NULL, reason TEXT NOT NULL, actor_user_id TEXT NOT NULL, metadata_json TEXT NOT NULL DEFAULT '{}', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW())`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS usage_adjustments_period_app_idx ON usage_adjustments (period_month, app_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS usage_adjustments_user_period_idx ON usage_adjustments (user_id, period_month)`);\n}\n", "const USAGE_SNAPSHOT_COLUMN_STATEMENTS = [\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_bandwidth_bytes BIGINT DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS storage_bandwidth_bytes BIGINT DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_requests INTEGER DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS static_storage_bytes BIGINT DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS image_transform_count INTEGER DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS image_source_bytes BIGINT DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS image_output_bytes BIGINT DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS image_credits REAL DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS memory_rss_mb REAL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS memory_credits REAL DEFAULT 0 NOT NULL`,\n    `ALTER TABLE usage_snapshots ADD COLUMN IF NOT EXISTS realtime_messages BIGINT DEFAULT 0 NOT NULL, ADD COLUMN IF NOT EXISTS realtime_message_bytes_observed BIGINT DEFAULT 0 NOT NULL, ADD COLUMN IF NOT EXISTS realtime_peak_connections INTEGER DEFAULT 0 NOT NULL`,\n];\nconst BACKEND_ROUTE_USAGE_STATEMENTS = [\n    `CREATE TABLE IF NOT EXISTS backend_route_usage_hourly (id SERIAL PRIMARY KEY, app_id INTEGER NOT NULL, period_start TIMESTAMPTZ NOT NULL, route_category TEXT NOT NULL, route_pattern TEXT NOT NULL, status_class TEXT NOT NULL, request_count BIGINT NOT NULL DEFAULT 0, observed_ms BIGINT NOT NULL DEFAULT 0, billable_ms BIGINT NOT NULL DEFAULT 0, capped_requests BIGINT NOT NULL DEFAULT 0, max_observed_ms BIGINT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW())`,\n    `CREATE UNIQUE INDEX IF NOT EXISTS backend_route_usage_hourly_unique ON backend_route_usage_hourly (app_id, period_start, route_category, route_pattern, status_class)`,\n    `CREATE INDEX IF NOT EXISTS backend_route_usage_hourly_app_period_idx ON backend_route_usage_hourly (app_id, period_start DESC)`,\n];\nexport async function ensureUsageMeteringSchema(params) {\n    for (const statement of [...USAGE_SNAPSHOT_COLUMN_STATEMENTS, ...BACKEND_ROUTE_USAGE_STATEMENTS]) {\n        await params.rawSql(statement);\n    }\n}\n", "export async function ensureAppMigrationDiagnosticsSchema(params) {\n    await params.rawSql(`\n    CREATE TABLE IF NOT EXISTS app_migration_diagnostics (\n      id BIGSERIAL PRIMARY KEY,\n      app_id INTEGER NOT NULL REFERENCES apps(id) ON DELETE CASCADE,\n      app_name TEXT NOT NULL,\n      command TEXT NOT NULL,\n      outcome TEXT NOT NULL,\n      payload_json JSONB NOT NULL,\n      created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )\n  `);\n    await params.rawSql(`\n    CREATE UNIQUE INDEX IF NOT EXISTS app_migration_diagnostics_app_id_unique_idx\n    ON app_migration_diagnostics (app_id)\n  `);\n}\n", "export async function ensureAppDeprecatedApiSnapshotsSchema(params) {\n    await params.rawSql(`\n    CREATE TABLE IF NOT EXISTS app_deprecated_api_snapshots (\n      id SERIAL PRIMARY KEY,\n      app_id INTEGER NOT NULL REFERENCES apps(id) ON DELETE CASCADE,\n      deploy_id INTEGER NULL REFERENCES deployments(id) ON DELETE SET NULL,\n      app_name_snapshot TEXT NOT NULL,\n      app_scope TEXT NOT NULL DEFAULT 'tenant',\n      legacy_query_count INTEGER NOT NULL DEFAULT 0,\n      legacy_mutation_count INTEGER NOT NULL DEFAULT 0,\n      legacy_http_action_count INTEGER NOT NULL DEFAULT 0,\n      legacy_crud_count INTEGER NOT NULL DEFAULT 0,\n      legacy_cron_job_count INTEGER NOT NULL DEFAULT 0,\n      cron_registration_mode TEXT NOT NULL DEFAULT 'none',\n      details_json TEXT NOT NULL DEFAULT '{}',\n      detected_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n    )\n  `);\n    await params.rawSql(`\n    CREATE INDEX IF NOT EXISTS app_deprecated_api_snapshots_app_detected_idx\n    ON app_deprecated_api_snapshots (app_id, detected_at DESC)\n  `);\n    await params.rawSql(`\n    CREATE INDEX IF NOT EXISTS app_deprecated_api_snapshots_deploy_idx\n    ON app_deprecated_api_snapshots (deploy_id)\n  `);\n    await params.rawSql(`\n    CREATE INDEX IF NOT EXISTS app_deprecated_api_snapshots_scope_detected_idx\n    ON app_deprecated_api_snapshots (app_scope, detected_at DESC)\n  `);\n    await params.rawSql(`\n    CREATE INDEX IF NOT EXISTS app_deprecated_api_snapshots_cron_mode_detected_idx\n    ON app_deprecated_api_snapshots (cron_registration_mode, detected_at DESC)\n  `);\n}\n", "import { WORKFLOW_SYSTEM_SCHEMA_STATEMENTS } from \"./workflow-runner.js\";\nimport { OAUTH_EXCHANGE_SYSTEM_SCHEMA_STATEMENTS } from \"./auth-oauth-exchange-schema.js\";\nimport { RAG_SYSTEM_SCHEMA_STATEMENTS } from \"./rag-ingest-schema.js\";\nimport { ensureTemplateMarketplacePlatformSchema } from \"./server-template-marketplace-bootstrap.js\";\nimport { ensurePlatformEmailSchema } from \"./server-platform-email-bootstrap.js\";\nimport { ensurePlatformWebhookSchema } from \"./server-platform-webhook-bootstrap.js\";\nimport { ensurePlatformRlsPolicies } from \"./server-platform-rls.js\";\nimport { ensureProviderRateLimitAdmissionSchema } from \"./server-provider-rate-limit-bootstrap.js\";\nimport { ensureServiceCreditGrantPolicySchema } from \"./server-service-credit-grants-bootstrap.js\";\nimport { ensureServicePriceMetersSchema } from \"./server-service-price-meters-bootstrap.js\";\nimport { ensurePlatformBillingSchema } from \"./server-platform-billing-bootstrap.js\";\nimport { ensurePlatformAiStreamSessionsSchema } from \"./server-platform-ai-stream-bootstrap.js\";\nimport { ensurePlatformActivityEventsSchema } from \"./server-platform-activity-bootstrap.js\";\nimport { ensureAiAudioJobSchema } from \"./server-ai-audio-job-bootstrap.js\";\nimport { ensurePlatformAnalyticsSchema } from \"./server-platform-analytics-bootstrap.js\";\nimport { ensurePlatformAccountLifecycleSchema } from \"./server-platform-account-lifecycle-bootstrap.js\";\nimport { ensureDeploymentRuntimeMetadataSchema } from \"./server-deployment-runtime-bootstrap.js\";\nimport { ensureAppQuotaBoundarySchema } from \"./server-app-quota-bootstrap.js\";\nimport { ensureAppRuntimePreflightSchema } from \"./server-platform-runtime-preflight-bootstrap.js\";\nimport { ensureUsageAdjustmentsSchema } from \"./server-usage-adjustments-bootstrap.js\";\nimport { ensureUsageMeteringSchema } from \"./server-usage-metering-bootstrap.js\";\nimport { ensureAppMigrationDiagnosticsSchema } from \"./server-platform-migration-diagnostics-bootstrap.js\";\nimport { ensureAppDeprecatedApiSnapshotsSchema } from \"./server-platform-deprecated-api-snapshots-bootstrap.js\";\nexport { ensurePlatformAiStreamSessionsSchema } from \"./server-platform-ai-stream-bootstrap.js\";\nexport { ensureAiAudioJobSchema } from \"./server-ai-audio-job-bootstrap.js\";\nexport { ensurePlatformActivityEventsSchema } from \"./server-platform-activity-bootstrap.js\";\nexport { ensurePlatformAccountLifecycleSchema } from \"./server-platform-account-lifecycle-bootstrap.js\";\nexport { ensureProviderRateLimitAdmissionSchema } from \"./server-provider-rate-limit-bootstrap.js\";\nexport { ensureServiceCreditGrantPolicySchema } from \"./server-service-credit-grants-bootstrap.js\";\nexport { ensureServicePriceMetersSchema } from \"./server-service-price-meters-bootstrap.js\";\nexport { ensureUsageAdjustmentsSchema } from \"./server-usage-adjustments-bootstrap.js\";\nexport { ensureUsageMeteringSchema } from \"./server-usage-metering-bootstrap.js\";\nexport { ensurePlatformBillingSchema } from \"./server-platform-billing-bootstrap.js\";\nexport { ensureAppMigrationDiagnosticsSchema } from \"./server-platform-migration-diagnostics-bootstrap.js\";\nexport { ensureAppDeprecatedApiSnapshotsSchema } from \"./server-platform-deprecated-api-snapshots-bootstrap.js\";\nconst MARKUP_DEFAULTS = {\n    free: { serviceMarkup: 1.5, platformMarkup: 3.0 },\n    pro: { serviceMarkup: 1.0, platformMarkup: 1.5 },\n    scale: { serviceMarkup: 0.8, platformMarkup: 1.0 },\n};\nconst IMAGE_DEFAULTS = {\n    free: {\n        imageAutoWebp: true,\n        imageAutoMaxWidth: 1920,\n        imageResize: false,\n        imageFormats: [\"webp\"],\n        imageQuality: false,\n        imageCacheMaxMB: 200,\n        imageTransformsPerMonth: 1000,\n    },\n    pro: {\n        imageAutoWebp: true,\n        imageAutoMaxWidth: 3840,\n        imageResize: true,\n        imageFormats: [\"webp\", \"avif\", \"jpeg\", \"png\"],\n        imageQuality: true,\n        imageCacheMaxMB: 1024,\n        imageTransformsPerMonth: 50000,\n    },\n    scale: {\n        imageAutoWebp: true,\n        imageResize: true,\n        imageFormats: [\"webp\", \"avif\", \"jpeg\", \"png\"],\n        imageQuality: true,\n        imageCacheMaxMB: 5120,\n        imageTransformsPerMonth: -1,\n    },\n};\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport function mergeMissingTierFeatureDefaults(rawFeatures, defaults) {\n    let features = {};\n    if (typeof rawFeatures === \"string\" && rawFeatures.trim()) {\n        try {\n            features = JSON.parse(rawFeatures);\n        }\n        catch {\n            features = {};\n        }\n    }\n    else if (rawFeatures && typeof rawFeatures === \"object\") {\n        features = { ...rawFeatures };\n    }\n    let changed = false;\n    for (const [key, value] of Object.entries(defaults)) {\n        if (features[key] !== undefined)\n            continue;\n        features[key] = value;\n        changed = true;\n    }\n    return { changed, features };\n}\nexport function mergePricingTierFeatureOverrides(rawFeatures, overrides) {\n    let features = {};\n    if (typeof rawFeatures === \"string\" && rawFeatures.trim()) {\n        try {\n            features = JSON.parse(rawFeatures);\n        }\n        catch {\n            features = {};\n        }\n    }\n    else if (rawFeatures && typeof rawFeatures === \"object\") {\n        features = { ...rawFeatures };\n    }\n    let changed = false;\n    for (const [key, value] of Object.entries(overrides)) {\n        if (features[key] === value)\n            continue;\n        features[key] = value;\n        changed = true;\n    }\n    return { changed, features };\n}\nexport async function ensureWorkflowSystemSchema(params) {\n    const logger = params.logger ?? console;\n    if (params.isBaas) {\n        logger.log(\"[workflow] system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        return;\n    }\n    try {\n        for (const stmt of WORKFLOW_SYSTEM_SCHEMA_STATEMENTS) {\n            await params.rawSql(stmt);\n        }\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[workflow] Failed to ensure system tables:\", message);\n        throw error;\n    }\n}\nexport async function ensureOAuthExchangeSystemSchema(params) {\n    const logger = params.logger ?? console;\n    if (params.isBaas) {\n        logger.log(\"[auth] OAuth exchange system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        return;\n    }\n    try {\n        for (const stmt of OAUTH_EXCHANGE_SYSTEM_SCHEMA_STATEMENTS) {\n            await params.rawSql(stmt);\n        }\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[auth] Failed to ensure OAuth exchange system table:\", message);\n        throw error;\n    }\n}\nexport async function ensurePlatformNodeSchema(params) {\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_nodes (\n            id TEXT PRIMARY KEY,\n            env TEXT NOT NULL DEFAULT 'prod',\n            region TEXT NOT NULL DEFAULT 'kr',\n            internal_origin TEXT NOT NULL,\n            status TEXT NOT NULL DEFAULT 'active',\n            active_port INTEGER NOT NULL DEFAULT 4100,\n            routing_weight INTEGER NOT NULL DEFAULT 100,\n            max_apps INTEGER NOT NULL DEFAULT 100,\n            max_running INTEGER NOT NULL DEFAULT 900,\n            current_apps INTEGER NOT NULL DEFAULT 0,\n            last_heartbeat_at TIMESTAMPTZ,\n            last_ready_at TIMESTAMPTZ,\n            capabilities_json TEXT NOT NULL DEFAULT '{}',\n            created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n        )`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS node_id TEXT NOT NULL DEFAULT 'node-1'`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS node_assigned_at TIMESTAMPTZ NOT NULL DEFAULT NOW()`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS async_http_route_manifest_json TEXT`);\n    await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS async_http_route_manifest_updated_at TIMESTAMPTZ`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_apps_node_id ON apps (node_id)`);\n    await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_nodes_status_ready ON platform_nodes (status, last_ready_at DESC)`);\n}\nexport async function ensureRagSystemSchema(params) {\n    const logger = params.logger ?? console;\n    if (params.isBaas) {\n        logger.log(\"[rag] system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        return;\n    }\n    try {\n        for (const stmt of RAG_SYSTEM_SCHEMA_STATEMENTS) {\n            await params.rawSql(stmt);\n        }\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[rag] Failed to ensure ingest tables:\", message);\n        throw error;\n    }\n}\nexport async function ensureClosedBetaInviteSeeds(params) {\n    const logger = params.logger ?? console;\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS invite_codes (\n            id SERIAL PRIMARY KEY,\n            code TEXT NOT NULL UNIQUE,\n            max_uses INTEGER NOT NULL DEFAULT 1,\n            used_count INTEGER NOT NULL DEFAULT 0,\n            created_by TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n    await params.rawSql(`INSERT INTO invite_codes (code, max_uses, used_count, created_by)\n            VALUES ('GENCOW-BETA-2', 100, 0, 'system:closed-beta')\n            ON CONFLICT (code) DO UPDATE SET\n              max_uses = GREATEST(invite_codes.max_uses, EXCLUDED.max_uses)`);\n    await params.rawSql(`CREATE TABLE IF NOT EXISTS beta_invite_waves (\n            id SERIAL PRIMARY KEY,\n            wave_key TEXT NOT NULL UNIQUE,\n            label_ko TEXT NOT NULL,\n            label_en TEXT NOT NULL,\n            status TEXT NOT NULL CHECK (status IN ('open', 'closed', 'scheduled')),\n            public_code TEXT,\n            planned_max_uses INTEGER NOT NULL DEFAULT 0,\n            opens_at TIMESTAMPTZ,\n            sort_order INTEGER NOT NULL,\n            is_public BOOLEAN NOT NULL DEFAULT TRUE\n        )`);\n    await params.rawSql(`INSERT INTO beta_invite_waves\n            (wave_key, label_ko, label_en, status, public_code, planned_max_uses, opens_at, sort_order, is_public)\n            VALUES\n              ('wave-1', '1\uCC28 \uCD08\uB300', 'Wave 1', 'closed', 'GENCOW-BETA-1', 50, NULL, 1, TRUE),\n              ('wave-2', '2\uCC28 \uCD08\uB300', 'Wave 2', 'open', 'GENCOW-BETA-2', 100, NULL, 2, TRUE),\n              ('wave-3', '3\uCC28 \uCD08\uB300', 'Wave 3', 'scheduled', NULL, 100, '2026-06-10 01:00:00+09', 3, TRUE)\n            ON CONFLICT (wave_key) DO NOTHING`);\n    logger.log(\"[db] closed beta invite seeds \u2713\");\n}\nasync function mergeTierDefaults(params) {\n    try {\n        const tierRows = await params.rawSql(`SELECT features FROM pricing_tiers WHERE id = $1`, [params.tierId]);\n        const rows = rowsFromResult(tierRows);\n        if (rows.length === 0)\n            return;\n        const { features, changed } = mergeMissingTierFeatureDefaults(rows[0]?.features, params.defaults);\n        if (!changed)\n            return;\n        await params.rawSql(`UPDATE pricing_tiers SET features = $1 WHERE id = $2`, [\n            JSON.stringify(features),\n            params.tierId,\n        ]);\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        params.logger.warn(`[db] ${params.warningLabel} merge warning for tier=${params.tierId}:`, message.slice(0, 100));\n    }\n}\nexport async function ensurePlatformSchemaUpgrade(params) {\n    if (!params.isPlatform)\n        return;\n    const logger = params.logger ?? console;\n    try {\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS display_name TEXT`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS plan TEXT DEFAULT 'free'`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS current_deploy_id INTEGER`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS static_deployed_at TIMESTAMP`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS static_size BIGINT`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS custom_domain TEXT UNIQUE`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS custom_domain_status TEXT`);\n        await ensurePlatformAnalyticsSchema({ rawSql: params.rawSql });\n        await ensurePlatformAiStreamSessionsSchema({ rawSql: params.rawSql });\n        await ensureAiAudioJobSchema({ rawSql: params.rawSql });\n        await ensurePlatformNodeSchema({ rawSql: params.rawSql });\n        await ensurePlatformAccountLifecycleSchema({ rawSql: params.rawSql });\n        await ensureAppRuntimePreflightSchema({ rawSql: params.rawSql });\n        await ensureAppMigrationDiagnosticsSchema({ rawSql: params.rawSql });\n        await ensureAppDeprecatedApiSnapshotsSchema({ rawSql: params.rawSql });\n        await params.rawSql(`ALTER TABLE deployments ADD COLUMN IF NOT EXISTS env TEXT DEFAULT 'dev'`);\n        await ensureDeploymentRuntimeMetadataSchema(params.rawSql);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS db_backups_app_created_id_idx ON db_backups (app_id, created_at DESC, id DESC)`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS status_reason TEXT`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS status_message TEXT`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS status_updated_at TIMESTAMP`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS memory_oom_count INTEGER NOT NULL DEFAULT 0`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS memory_oom_window_started_at TIMESTAMP`);\n        await params.rawSql(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS memory_oom_last_at TIMESTAMP`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS app_runtime_events (\n            id SERIAL PRIMARY KEY,\n            app_id INTEGER NOT NULL,\n            app_name TEXT NOT NULL,\n            kind TEXT NOT NULL,\n            source TEXT NOT NULL,\n            severity TEXT NOT NULL DEFAULT 'info',\n            status_before TEXT,\n            status_after TEXT,\n            exit_code INTEGER,\n            signal TEXT,\n            worker_kind TEXT,\n            worker_id TEXT,\n            pid INTEGER,\n            cgroup_path TEXT,\n            memory_limit_bytes BIGINT,\n            memory_usage_bytes BIGINT,\n            message TEXT,\n            metadata_json TEXT NOT NULL DEFAULT '{}',\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS app_runtime_events_app_kind_created_idx ON app_runtime_events (app_id, kind, created_at DESC)`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS app_runtime_events_app_created_idx ON app_runtime_events (app_id, created_at DESC)`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_domain_audit_log (\n            id SERIAL PRIMARY KEY,\n            actor_user_id TEXT NOT NULL,\n            app_name TEXT NOT NULL,\n            domain TEXT NOT NULL,\n            action TEXT NOT NULL,\n            policy_kind TEXT NOT NULL,\n            metadata_json TEXT NOT NULL DEFAULT '{}',\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_domain_audit_log_actor_created ON platform_domain_audit_log (actor_user_id, created_at DESC)`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_domain_audit_log_domain_created ON platform_domain_audit_log (domain, created_at DESC)`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS cli_tokens (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL,\n            token TEXT NOT NULL UNIQUE,\n            expires_at TIMESTAMP NOT NULL,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`ALTER TABLE cli_tokens ADD COLUMN IF NOT EXISTS type TEXT NOT NULL DEFAULT 'cli'`);\n        await params.rawSql(`ALTER TABLE cli_tokens ADD COLUMN IF NOT EXISTS app_id INTEGER`);\n        await params.rawSql(`ALTER TABLE cli_tokens ADD COLUMN IF NOT EXISTS name TEXT`);\n        await params.rawSql(`ALTER TABLE cli_tokens ADD COLUMN IF NOT EXISTS last_used_at TIMESTAMP`);\n        await params.rawSql(`ALTER TABLE cli_tokens ADD COLUMN IF NOT EXISTS scopes TEXT DEFAULT 'deploy,env'`);\n        await ensureUsageMeteringSchema({ rawSql: params.rawSql });\n        await ensureUsageAdjustmentsSchema({ rawSql: params.rawSql });\n        await ensureProviderRateLimitAdmissionSchema({ rawSql: params.rawSql });\n        await ensurePlatformActivityEventsSchema({ rawSql: params.rawSql });\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS user_credits (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL UNIQUE,\n            plan TEXT NOT NULL DEFAULT 'free',\n            total_credits REAL NOT NULL DEFAULT 20000,\n            used_credits REAL NOT NULL DEFAULT 0,\n            spend_cap_enabled BOOLEAN NOT NULL DEFAULT false,\n            spend_cap_amount REAL,\n            billing_cycle_day INTEGER NOT NULL DEFAULT 1,\n            last_reset_at TIMESTAMP,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS service_credit_ledger (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL,\n            type TEXT NOT NULL,\n            amount REAL NOT NULL,\n            balance_after REAL NOT NULL,\n            title TEXT NOT NULL,\n            service_type TEXT,\n            provider TEXT,\n            expires_at TIMESTAMP,\n            app_id INTEGER,\n            payment_ref TEXT,\n            remaining REAL,\n            request_id TEXT,\n            metadata TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS service_credit_balance (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL UNIQUE,\n            balance REAL NOT NULL DEFAULT 0,\n            total_granted REAL NOT NULL DEFAULT 0,\n            total_used REAL NOT NULL DEFAULT 0,\n            total_expired REAL NOT NULL DEFAULT 0,\n            spend_cap_enabled BOOLEAN NOT NULL DEFAULT false,\n            spend_cap_amount REAL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await ensureServiceCreditGrantPolicySchema({ rawSql: params.rawSql });\n        await ensurePlatformBillingSchema({ rawSql: params.rawSql, logger });\n        await params.rawSql(`ALTER TABLE db_backups ADD COLUMN IF NOT EXISTS retention_policy_version TEXT`);\n        await params.rawSql(`ALTER TABLE db_backups ADD COLUMN IF NOT EXISTS retention_class TEXT`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS db_backups_policy_expiry_idx ON db_backups (status, expires_at, app_id) WHERE status = 'completed'`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS service_pricing (\n            id SERIAL PRIMARY KEY,\n            service_type TEXT NOT NULL,\n            provider TEXT NOT NULL DEFAULT 'default',\n            display_name TEXT NOT NULL,\n            unit_label TEXT NOT NULL DEFAULT '',\n            credit_per_unit REAL NOT NULL,\n            active BOOLEAN NOT NULL DEFAULT true,\n            sort_order INTEGER NOT NULL DEFAULT 0,\n            notes TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            CONSTRAINT service_pricing_type_provider_unique UNIQUE (service_type, provider)\n        )`);\n        await ensureServicePriceMetersSchema({ rawSql: params.rawSql });\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS service_usage_events (\n            id SERIAL PRIMARY KEY,\n            user_id TEXT NOT NULL,\n            app_id INTEGER,\n            service_type TEXT NOT NULL,\n            provider TEXT NOT NULL DEFAULT 'default',\n            unit_quantity REAL NOT NULL,\n            unit_label TEXT NOT NULL DEFAULT '',\n            charged_credits REAL NOT NULL,\n            source_bytes BIGINT NOT NULL DEFAULT 0,\n            output_bytes BIGINT NOT NULL DEFAULT 0,\n            request_id TEXT,\n            metadata TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_service_usage_events_user_created ON service_usage_events (user_id, created_at DESC)`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_service_usage_events_app_created ON service_usage_events (app_id, created_at DESC)`);\n        await params.rawSql(`INSERT INTO service_pricing (service_type, provider, display_name, unit_label, credit_per_unit, active, sort_order, notes)\n            VALUES\n                ('document_convert', 'default', 'Document Convert', 'MB', 1, true, 0, 'Fallback document conversion rate'),\n                ('document_convert', 'kordoc', 'Document Convert \u00B7 kordoc', 'MB', 1, true, 5, NULL),\n                ('document_convert', 'openai', 'Document Convert \u00B7 OpenAI', 'MB', 1, true, 10, NULL),\n                ('document_convert', 'gemini', 'Document Convert \u00B7 Gemini', 'MB', 1, true, 20, NULL),\n                ('document_convert', 'ocr', 'Document Convert \u00B7 OCR', 'MB', 1, true, 30, NULL),\n                ('document_convert', 'custom_vlm', 'Document Convert \u00B7 Custom VLM', 'MB', 1, true, 40, NULL),\n                ('document_convert', 'opendataloader', 'Document Convert \u00B7 OpenDataLoader', 'MB', 1, true, 50, NULL)\n            ON CONFLICT (service_type, provider) DO UPDATE SET\n                display_name = EXCLUDED.display_name,\n                unit_label = EXCLUDED.unit_label,\n                active = EXCLUDED.active,\n                sort_order = EXCLUDED.sort_order,\n                updated_at = NOW()`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS cron_jobs (\n            id SERIAL PRIMARY KEY,\n            app_id INTEGER NOT NULL,\n            name TEXT NOT NULL,\n            schedule TEXT NOT NULL,\n            action TEXT NOT NULL,\n            next_run_at TIMESTAMP NOT NULL,\n            last_run_at TIMESTAMP,\n            last_status TEXT,\n            last_error TEXT,\n            status TEXT NOT NULL DEFAULT 'enabled',\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_cron_jobs_poll ON cron_jobs (status, next_run_at) WHERE status = 'enabled'`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_runtime_state (\n            key TEXT PRIMARY KEY,\n            value TEXT NOT NULL,\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n        )`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS scheduled_jobs (\n            id TEXT PRIMARY KEY,\n            app_id INTEGER NOT NULL,\n            action TEXT NOT NULL,\n            args JSONB DEFAULT '{}',\n            run_at TIMESTAMPTZ NOT NULL,\n            status TEXT NOT NULL DEFAULT 'pending',\n            error TEXT,\n            on_error_action TEXT,\n            retry_count INTEGER NOT NULL DEFAULT 0,\n            max_retries INTEGER NOT NULL DEFAULT 3,\n            dedupe_key TEXT,\n            created_at TIMESTAMPTZ DEFAULT NOW(),\n            updated_at TIMESTAMPTZ DEFAULT NOW()\n        )`);\n        await params.rawSql(`ALTER TABLE scheduled_jobs ADD COLUMN IF NOT EXISTS dedupe_key TEXT`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_poll ON scheduled_jobs (status, run_at) WHERE status = 'pending'`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_app_status ON scheduled_jobs (app_id, status)`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_app_status_run_at ON scheduled_jobs (app_id, status, run_at) WHERE status = 'pending'`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_app_action_status ON scheduled_jobs (app_id, action, status)`);\n        await params.rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS idx_scheduled_jobs_active_dedupe ON scheduled_jobs (app_id, action, dedupe_key) WHERE dedupe_key IS NOT NULL AND status IN ('pending', 'running')`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS platform_job_admission_buckets (\n            scope TEXT NOT NULL,\n            bucket_start TIMESTAMPTZ NOT NULL,\n            count INTEGER NOT NULL DEFAULT 0,\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            PRIMARY KEY (scope, bucket_start)\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_platform_job_admission_buckets_updated ON platform_job_admission_buckets (updated_at)`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS cron_job_runs (\n            id SERIAL PRIMARY KEY,\n            cron_job_id INTEGER NOT NULL,\n            cron_name TEXT NOT NULL,\n            action TEXT NOT NULL,\n            status TEXT NOT NULL,\n            error TEXT,\n            duration_ms INTEGER,\n            started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n            completed_at TIMESTAMPTZ\n        )`);\n        await params.rawSql(`CREATE INDEX IF NOT EXISTS idx_cron_job_runs_lookup ON cron_job_runs (cron_job_id, started_at DESC)`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS pricing_tiers (\n            id TEXT PRIMARY KEY,\n            display_name TEXT NOT NULL,\n            sort_order INTEGER NOT NULL DEFAULT 0,\n            max_apps INTEGER NOT NULL DEFAULT 5,\n            monthly_credits REAL NOT NULL DEFAULT 20000,\n            max_storage_bytes BIGINT NOT NULL DEFAULT 1073741824,\n            features TEXT NOT NULL DEFAULT '{}',\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`INSERT INTO pricing_tiers (id, display_name, sort_order, max_apps, monthly_credits, max_storage_bytes, features)\n            VALUES\n                ('free',  'Hobby', 0,  5,  20000,   1073741824, '{\"autoBackup\":false,\"maxFileSizeBytes\":52428800,\"wsConnections\":1000,\"wsConnectionsPerAppSafety\":500,\"customDomain\":false}'),\n                ('pro',   'Legacy Paid',   10, 10, 100000,  5368709120, '{\"autoBackup\":true,\"autoBackupIntervalHours\":24,\"maxFileSizeBytes\":52428800,\"wsConnections\":10000,\"wsConnectionsPerAppSafety\":5000,\"customDomain\":true}'),\n                ('scale', 'Startup', 20, 30, 500000, 21474836480, '{\"autoBackup\":true,\"autoBackupIntervalHours\":6,\"maxFileSizeBytes\":524288000,\"wsConnections\":100000,\"wsConnectionsPerAppSafety\":25000,\"customDomain\":true}')\n            ON CONFLICT (id) DO NOTHING`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS model_pricing (\n            id SERIAL PRIMARY KEY,\n            model TEXT NOT NULL UNIQUE,\n            type TEXT NOT NULL,\n            provider TEXT NOT NULL DEFAULT 'openai',\n            display_name TEXT NOT NULL,\n            unit_label TEXT NOT NULL DEFAULT '',\n            input_credit_per_token REAL NOT NULL,\n            output_credit_per_token REAL NOT NULL DEFAULT 0,\n            active BOOLEAN NOT NULL DEFAULT true,\n            sort_order INTEGER NOT NULL DEFAULT 0,\n            notes TEXT,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL\n        )`);\n        await params.rawSql(`ALTER TABLE model_pricing ADD COLUMN IF NOT EXISTS unit_label TEXT NOT NULL DEFAULT ''`);\n        await params.rawSql(`CREATE TABLE IF NOT EXISTS ai_model_substitutions (\n            id TEXT PRIMARY KEY,\n            operation TEXT NOT NULL DEFAULT 'ai_chat',\n            requested_model TEXT NOT NULL,\n            effective_model TEXT NOT NULL,\n            reason TEXT NOT NULL,\n            active BOOLEAN NOT NULL DEFAULT true,\n            created_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            updated_at TIMESTAMP DEFAULT NOW() NOT NULL,\n            UNIQUE(operation, requested_model)\n        )`);\n        await params.rawSql(`INSERT INTO model_pricing (model, type, provider, display_name, unit_label, input_credit_per_token, output_credit_per_token, active, sort_order)\n            VALUES\n                ('gpt-5.5',                 'chat',     'openai', 'GPT-5.5',             '1K tok', 50,    300,   false, 0),\n                ('gpt-5.4',                 'chat',     'openai', 'GPT-5.4',             '1K tok', 25,    150,   true, 10),\n                ('gpt-5.4-mini',            'chat',     'openai', 'GPT-5.4 mini',        '1K tok', 7.5,   45,    true, 20),\n                ('gpt-5.4-nano',            'chat',     'openai', 'GPT-5.4 nano',        '1K tok', 2,     12.5,  true, 30),\n                ('gpt-5.3-chat-latest',     'chat',     'openai', 'GPT-5.3 Chat',        '1K tok', 17.5,  140,   false, 40),\n                ('gpt-5.2',                 'chat',     'openai', 'GPT-5.2',             '1K tok', 17.5,  140,   false, 50),\n                ('gpt-5.2-chat-latest',     'chat',     'openai', 'GPT-5.2 Chat',        '1K tok', 17.5,  140,   false, 60),\n                ('gpt-5.1',                 'chat',     'openai', 'GPT-5.1',             '1K tok', 12.5,  100,   false, 70),\n                ('gpt-5',                   'chat',     'openai', 'GPT-5',               '1K tok', 12.5,  100,   false, 80),\n                ('gpt-5-mini',              'chat',     'openai', 'GPT-5 mini',          '1K tok', 2.5,   20,    true, 90),\n                ('gpt-5-nano',              'chat',     'openai', 'GPT-5 nano',          '1K tok', 0.5,   4,     true, 100),\n                ('gpt-4.1',                 'chat',     'openai', 'GPT-4.1',             '1K tok', 20,    80,    false, 110),\n                ('gpt-4.1-mini',            'chat',     'openai', 'GPT-4.1 mini',        '1K tok', 4,     16,    false, 120),\n                ('gpt-4.1-nano',            'chat',     'openai', 'GPT-4.1 nano',        '1K tok', 1,     4,     false, 130),\n                ('gpt-4o',                  'chat',     'openai', 'GPT-4o',              '1K tok', 25,    100,   false, 140),\n                ('gpt-4o-mini',             'chat',     'openai', 'GPT-4o mini',         '1K tok', 1.5,   6,     false, 150),\n                ('gpt-image-2',             'image',    'openai', 'GPT Image 2',         '1K tok', 50,    300,   true, 180),\n                ('gpt-image-1.5',           'image',    'openai', 'GPT Image 1.5',       '1K tok', 50,    320,   true, 190),\n                ('gpt-image-1-mini',        'image',    'openai', 'GPT Image 1 Mini',    '1K tok', 20,    80,    true, 195),\n                ('text-embedding-3-small',  'embed',    'openai', 'Embedding 3 Small',   '1K tok', 0.2,   0,     true, 200),\n                ('text-embedding-3-large',  'embed',    'openai', 'Embedding 3 Large',   '1K tok', 1.3,   0,     true, 210),\n                ('api_calls',               'platform', 'gencow', 'API \uD638\uCD9C',            '1K\uAC74',   10,    0,     true, 300),\n                ('function_ms',             'platform', 'gencow', '\uD568\uC218 \uC2E4\uD589',            'hr',     400,   0,     true, 310),\n                ('realtime_ms',             'platform', 'gencow', '\uB9AC\uC5BC\uD0C0\uC784 \uC811\uC18D(raw)',   '1K\uBD84',   10,    0,     false, 320),\n                ('realtime_messages',       'platform', 'gencow', '\uB9AC\uC5BC\uD0C0\uC784 \uBA54\uC2DC\uC9C0',      '1M\uAC74',   10,    0,     true, 325),\n                ('db_storage_bytes_hr',     'platform', 'gencow', 'DB \uC2A4\uD1A0\uB9AC\uC9C0',          'GB\u00B7\uC6D4',  800,   0,     true, 330),\n                ('file_storage_bytes_hr',   'platform', 'gencow', '\uD30C\uC77C \uC2A4\uD1A0\uB9AC\uC9C0',        'GB\u00B7\uC6D4',  230,   0,     true, 340),\n                ('bandwidth_bytes',         'platform', 'gencow', 'DB \uB300\uC5ED\uD3ED',            'GB',     900,   0,     true, 350),\n                ('static_storage_bytes_hr', 'platform', 'gencow', 'Static \uC2A4\uD1A0\uB9AC\uC9C0',      'GB\u00B7\uC6D4',  0.1,   0,     true, 360),\n                ('static_bandwidth_bytes',  'platform', 'gencow', 'Static \uB300\uC5ED\uD3ED',        'GB',     0.5,   0,     true, 370),\n                ('static_requests',         'platform', 'gencow', 'Static \uC694\uCCAD',          '1M\uAC74',   10,    0,     true, 380),\n                ('memory_mb_hr',            'platform', 'gencow', '\uBA54\uBAA8\uB9AC \uC0AC\uC6A9',          'GB\u00B7hr',  300,   0,     true, 390),\n                ('image_transforms',        'platform', 'gencow', 'Image Transform',      '1K\uAC74',   50,    0,     true, 400),\n                ('image_source_bytes',      'platform', 'gencow', 'Image \uC6D0\uBCF8 \uCC98\uB9AC',      'GB',     20,    0,     true, 410),\n                ('image_output_bytes',      'platform', 'gencow', 'Image \uACB0\uACFC \uCE90\uC2DC',      'GB',     10,    0,     true, 420)\n            ON CONFLICT (model) DO UPDATE SET\n                display_name = EXCLUDED.display_name,\n                unit_label = EXCLUDED.unit_label,\n                input_credit_per_token = EXCLUDED.input_credit_per_token,\n                output_credit_per_token = EXCLUDED.output_credit_per_token,\n                sort_order = EXCLUDED.sort_order`);\n        await params.rawSql(`UPDATE model_pricing\n            SET active = false,\n                display_name = '\uB9AC\uC5BC\uD0C0\uC784 \uC811\uC18D(raw)'\n            WHERE model = 'realtime_ms'\n              AND type = 'platform'`);\n        await params.rawSql(`INSERT INTO ai_model_substitutions (\n            id, operation, requested_model, effective_model, reason, active\n        ) VALUES\n            ('sub_gpt_5_5_to_gpt_5_4', 'ai_chat', 'gpt-5.5', 'gpt-5.4', 'azure_quota_policy', true),\n            ('sub_gpt_4o_mini_to_gpt_5_mini', 'ai_chat', 'gpt-4o-mini', 'gpt-5-mini', 'deprecated_model', true)\n        ON CONFLICT (operation, requested_model) DO UPDATE SET\n            effective_model = EXCLUDED.effective_model,\n            reason = EXCLUDED.reason,\n            active = EXCLUDED.active,\n            updated_at = NOW()`);\n        for (const [tierId, defaults] of Object.entries(MARKUP_DEFAULTS)) {\n            await mergeTierDefaults({\n                rawSql: params.rawSql,\n                tierId,\n                defaults,\n                warningLabel: \"markup\",\n                logger,\n            });\n        }\n        for (const [tierId, defaults] of Object.entries(IMAGE_DEFAULTS)) {\n            await mergeTierDefaults({\n                rawSql: params.rawSql,\n                tierId,\n                defaults,\n                warningLabel: \"image features\",\n                logger,\n            });\n        }\n        await ensureAppQuotaBoundarySchema({ rawSql: params.rawSql });\n        await ensureTemplateMarketplacePlatformSchema({\n            rawSql: params.rawSql,\n            isPlatform: params.isPlatform,\n            logger,\n        });\n        await ensurePlatformEmailSchema({\n            rawSql: params.rawSql,\n            isPlatform: params.isPlatform,\n            logger,\n        });\n        await ensurePlatformWebhookSchema({\n            rawSql: params.rawSql,\n            isPlatform: params.isPlatform,\n            logger,\n        });\n        await ensureClosedBetaInviteSeeds({\n            rawSql: params.rawSql,\n            logger,\n        });\n        logger.log(\"[db] schema upgrade \u2713\");\n    }\n    catch (error) {\n        logger.warn(\"[db] schema upgrade warning:\", error instanceof Error ? error.message : String(error));\n        if (params.strict)\n            throw error;\n    }\n    await ensurePlatformRlsPolicies({\n        rawSql: params.rawSql,\n        isPlatform: params.isPlatform,\n        logger,\n    });\n}\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\n/**\n * Is this value defined and not null?\n * @private\n */\nconst defined = (val) => typeof val !== 'undefined' && val !== null;\n\n/**\n * Is this value an object?\n * @private\n */\nconst object = (val) => typeof val === 'object';\n\n/**\n * Is this value a plain object?\n * @private\n */\nconst plainObject = (val) => Object.prototype.toString.call(val) === '[object Object]';\n\n/**\n * Is this value a function?\n * @private\n */\nconst fn = (val) => typeof val === 'function';\n\n/**\n * Is this value a boolean?\n * @private\n */\nconst bool = (val) => typeof val === 'boolean';\n\n/**\n * Is this value a Buffer object?\n * @private\n */\nconst buffer = (val) => val instanceof Buffer;\n\n/**\n * Is this value a typed array object?. E.g. Uint8Array or Uint8ClampedArray?\n * @private\n */\nconst typedArray = (val) => {\n  if (defined(val)) {\n    switch (val.constructor) {\n      case Uint8Array:\n      case Uint8ClampedArray:\n      case Int8Array:\n      case Uint16Array:\n      case Int16Array:\n      case Uint32Array:\n      case Int32Array:\n      case Float32Array:\n      case Float64Array:\n        return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Is this value an ArrayBuffer object?\n * @private\n */\nconst arrayBuffer = (val) => val instanceof ArrayBuffer;\n\n/**\n * Is this value a non-empty string?\n * @private\n */\nconst string = (val) => typeof val === 'string' && val.length > 0;\n\n/**\n * Is this value a real number?\n * @private\n */\nconst number = (val) => typeof val === 'number' && !Number.isNaN(val);\n\n/**\n * Is this value an integer?\n * @private\n */\nconst integer = (val) => Number.isInteger(val);\n\n/**\n * Is this value within an inclusive given range?\n * @private\n */\nconst inRange = (val, min, max) => val >= min && val <= max;\n\n/**\n * Is this value within the elements of an array?\n * @private\n */\nconst inArray = (val, list) => list.includes(val);\n\n/**\n * Create an Error with a message relating to an invalid parameter.\n *\n * @param {string} name - parameter name.\n * @param {string} expected - description of the type/value/range expected.\n * @param {*} actual - the value received.\n * @returns {Error} Containing the formatted message.\n * @private\n */\nconst invalidParameterError = (name, expected, actual) => new Error(\n    `Expected ${expected} for ${name} but received ${actual} of type ${typeof actual}`\n  );\n\n/**\n * Ensures an Error from C++ contains a JS stack.\n *\n * @param {Error} native - Error with message from C++.\n * @param {Error} context - Error with stack from JS.\n * @returns {Error} Error with message and stack.\n * @private\n */\nconst nativeError = (native, context) => {\n  context.message = native.message;\n  return context;\n};\n\nmodule.exports = {\n  defined,\n  object,\n  plainObject,\n  fn,\n  bool,\n  buffer,\n  typedArray,\n  arrayBuffer,\n  string,\n  number,\n  integer,\n  inRange,\n  inArray,\n  invalidParameterError,\n  nativeError\n};\n", "// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst isLinux = () => process.platform === 'linux';\n\nlet report = null;\nconst getReport = () => {\n  if (!report) {\n    /* istanbul ignore next */\n    if (isLinux() && process.report) {\n      const orig = process.report.excludeNetwork;\n      process.report.excludeNetwork = true;\n      report = process.report.getReport();\n      process.report.excludeNetwork = orig;\n    } else {\n      report = {};\n    }\n  }\n  return report;\n};\n\nmodule.exports = { isLinux, getReport };\n", "// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst fs = require('fs');\n\nconst LDD_PATH = '/usr/bin/ldd';\nconst SELF_PATH = '/proc/self/exe';\nconst MAX_LENGTH = 2048;\n\n/**\n * Read the content of a file synchronous\n *\n * @param {string} path\n * @returns {Buffer}\n */\nconst readFileSync = (path) => {\n  const fd = fs.openSync(path, 'r');\n  const buffer = Buffer.alloc(MAX_LENGTH);\n  const bytesRead = fs.readSync(fd, buffer, 0, MAX_LENGTH, 0);\n  fs.close(fd, () => {});\n  return buffer.subarray(0, bytesRead);\n};\n\n/**\n * Read the content of a file\n *\n * @param {string} path\n * @returns {Promise<Buffer>}\n */\nconst readFile = (path) => new Promise((resolve, reject) => {\n  fs.open(path, 'r', (err, fd) => {\n    if (err) {\n      reject(err);\n    } else {\n      const buffer = Buffer.alloc(MAX_LENGTH);\n      fs.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => {\n        resolve(buffer.subarray(0, bytesRead));\n        fs.close(fd, () => {});\n      });\n    }\n  });\n});\n\nmodule.exports = {\n  LDD_PATH,\n  SELF_PATH,\n  readFileSync,\n  readFile\n};\n", "// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst interpreterPath = (elf) => {\n  if (elf.length < 64) {\n    return null;\n  }\n  if (elf.readUInt32BE(0) !== 0x7F454C46) {\n    // Unexpected magic bytes\n    return null;\n  }\n  if (elf.readUInt8(4) !== 2) {\n    // Not a 64-bit ELF\n    return null;\n  }\n  if (elf.readUInt8(5) !== 1) {\n    // Not little-endian\n    return null;\n  }\n  const offset = elf.readUInt32LE(32);\n  const size = elf.readUInt16LE(54);\n  const count = elf.readUInt16LE(56);\n  for (let i = 0; i < count; i++) {\n    const headerOffset = offset + (i * size);\n    const type = elf.readUInt32LE(headerOffset);\n    if (type === 3) {\n      const fileOffset = elf.readUInt32LE(headerOffset + 8);\n      const fileSize = elf.readUInt32LE(headerOffset + 32);\n      return elf.subarray(fileOffset, fileOffset + fileSize).toString().replace(/\\0.*$/g, '');\n    }\n  }\n  return null;\n};\n\nmodule.exports = {\n  interpreterPath\n};\n", "// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst childProcess = require('child_process');\nconst { isLinux, getReport } = require('./process');\nconst { LDD_PATH, SELF_PATH, readFile, readFileSync } = require('./filesystem');\nconst { interpreterPath } = require('./elf');\n\nlet cachedFamilyInterpreter;\nlet cachedFamilyFilesystem;\nlet cachedVersionFilesystem;\n\nconst command = 'getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true';\nlet commandOut = '';\n\nconst safeCommand = () => {\n  if (!commandOut) {\n    return new Promise((resolve) => {\n      childProcess.exec(command, (err, out) => {\n        commandOut = err ? ' ' : out;\n        resolve(commandOut);\n      });\n    });\n  }\n  return commandOut;\n};\n\nconst safeCommandSync = () => {\n  if (!commandOut) {\n    try {\n      commandOut = childProcess.execSync(command, { encoding: 'utf8' });\n    } catch (_err) {\n      commandOut = ' ';\n    }\n  }\n  return commandOut;\n};\n\n/**\n * A String constant containing the value `glibc`.\n * @type {string}\n * @public\n */\nconst GLIBC = 'glibc';\n\n/**\n * A Regexp constant to get the GLIBC Version.\n * @type {string}\n */\nconst RE_GLIBC_VERSION = /LIBC[a-z0-9 \\-).]*?(\\d+\\.\\d+)/i;\n\n/**\n * A String constant containing the value `musl`.\n * @type {string}\n * @public\n */\nconst MUSL = 'musl';\n\nconst isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-');\n\nconst familyFromReport = () => {\n  const report = getReport();\n  if (report.header && report.header.glibcVersionRuntime) {\n    return GLIBC;\n  }\n  if (Array.isArray(report.sharedObjects)) {\n    if (report.sharedObjects.some(isFileMusl)) {\n      return MUSL;\n    }\n  }\n  return null;\n};\n\nconst familyFromCommand = (out) => {\n  const [getconf, ldd1] = out.split(/[\\r\\n]+/);\n  if (getconf && getconf.includes(GLIBC)) {\n    return GLIBC;\n  }\n  if (ldd1 && ldd1.includes(MUSL)) {\n    return MUSL;\n  }\n  return null;\n};\n\nconst familyFromInterpreterPath = (path) => {\n  if (path) {\n    if (path.includes('/ld-musl-')) {\n      return MUSL;\n    } else if (path.includes('/ld-linux-')) {\n      return GLIBC;\n    }\n  }\n  return null;\n};\n\nconst getFamilyFromLddContent = (content) => {\n  content = content.toString();\n  if (content.includes('musl')) {\n    return MUSL;\n  }\n  if (content.includes('GNU C Library')) {\n    return GLIBC;\n  }\n  return null;\n};\n\nconst familyFromFilesystem = async () => {\n  if (cachedFamilyFilesystem !== undefined) {\n    return cachedFamilyFilesystem;\n  }\n  cachedFamilyFilesystem = null;\n  try {\n    const lddContent = await readFile(LDD_PATH);\n    cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n  } catch (e) {}\n  return cachedFamilyFilesystem;\n};\n\nconst familyFromFilesystemSync = () => {\n  if (cachedFamilyFilesystem !== undefined) {\n    return cachedFamilyFilesystem;\n  }\n  cachedFamilyFilesystem = null;\n  try {\n    const lddContent = readFileSync(LDD_PATH);\n    cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n  } catch (e) {}\n  return cachedFamilyFilesystem;\n};\n\nconst familyFromInterpreter = async () => {\n  if (cachedFamilyInterpreter !== undefined) {\n    return cachedFamilyInterpreter;\n  }\n  cachedFamilyInterpreter = null;\n  try {\n    const selfContent = await readFile(SELF_PATH);\n    const path = interpreterPath(selfContent);\n    cachedFamilyInterpreter = familyFromInterpreterPath(path);\n  } catch (e) {}\n  return cachedFamilyInterpreter;\n};\n\nconst familyFromInterpreterSync = () => {\n  if (cachedFamilyInterpreter !== undefined) {\n    return cachedFamilyInterpreter;\n  }\n  cachedFamilyInterpreter = null;\n  try {\n    const selfContent = readFileSync(SELF_PATH);\n    const path = interpreterPath(selfContent);\n    cachedFamilyInterpreter = familyFromInterpreterPath(path);\n  } catch (e) {}\n  return cachedFamilyInterpreter;\n};\n\n/**\n * Resolves with the libc family when it can be determined, `null` otherwise.\n * @returns {Promise<?string>}\n */\nconst family = async () => {\n  let family = null;\n  if (isLinux()) {\n    family = await familyFromInterpreter();\n    if (!family) {\n      family = await familyFromFilesystem();\n      if (!family) {\n        family = familyFromReport();\n      }\n      if (!family) {\n        const out = await safeCommand();\n        family = familyFromCommand(out);\n      }\n    }\n  }\n  return family;\n};\n\n/**\n * Returns the libc family when it can be determined, `null` otherwise.\n * @returns {?string}\n */\nconst familySync = () => {\n  let family = null;\n  if (isLinux()) {\n    family = familyFromInterpreterSync();\n    if (!family) {\n      family = familyFromFilesystemSync();\n      if (!family) {\n        family = familyFromReport();\n      }\n      if (!family) {\n        const out = safeCommandSync();\n        family = familyFromCommand(out);\n      }\n    }\n  }\n  return family;\n};\n\n/**\n * Resolves `true` only when the platform is Linux and the libc family is not `glibc`.\n * @returns {Promise<boolean>}\n */\nconst isNonGlibcLinux = async () => isLinux() && await family() !== GLIBC;\n\n/**\n * Returns `true` only when the platform is Linux and the libc family is not `glibc`.\n * @returns {boolean}\n */\nconst isNonGlibcLinuxSync = () => isLinux() && familySync() !== GLIBC;\n\nconst versionFromFilesystem = async () => {\n  if (cachedVersionFilesystem !== undefined) {\n    return cachedVersionFilesystem;\n  }\n  cachedVersionFilesystem = null;\n  try {\n    const lddContent = await readFile(LDD_PATH);\n    const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n    if (versionMatch) {\n      cachedVersionFilesystem = versionMatch[1];\n    }\n  } catch (e) {}\n  return cachedVersionFilesystem;\n};\n\nconst versionFromFilesystemSync = () => {\n  if (cachedVersionFilesystem !== undefined) {\n    return cachedVersionFilesystem;\n  }\n  cachedVersionFilesystem = null;\n  try {\n    const lddContent = readFileSync(LDD_PATH);\n    const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n    if (versionMatch) {\n      cachedVersionFilesystem = versionMatch[1];\n    }\n  } catch (e) {}\n  return cachedVersionFilesystem;\n};\n\nconst versionFromReport = () => {\n  const report = getReport();\n  if (report.header && report.header.glibcVersionRuntime) {\n    return report.header.glibcVersionRuntime;\n  }\n  return null;\n};\n\nconst versionSuffix = (s) => s.trim().split(/\\s+/)[1];\n\nconst versionFromCommand = (out) => {\n  const [getconf, ldd1, ldd2] = out.split(/[\\r\\n]+/);\n  if (getconf && getconf.includes(GLIBC)) {\n    return versionSuffix(getconf);\n  }\n  if (ldd1 && ldd2 && ldd1.includes(MUSL)) {\n    return versionSuffix(ldd2);\n  }\n  return null;\n};\n\n/**\n * Resolves with the libc version when it can be determined, `null` otherwise.\n * @returns {Promise<?string>}\n */\nconst version = async () => {\n  let version = null;\n  if (isLinux()) {\n    version = await versionFromFilesystem();\n    if (!version) {\n      version = versionFromReport();\n    }\n    if (!version) {\n      const out = await safeCommand();\n      version = versionFromCommand(out);\n    }\n  }\n  return version;\n};\n\n/**\n * Returns the libc version when it can be determined, `null` otherwise.\n * @returns {?string}\n */\nconst versionSync = () => {\n  let version = null;\n  if (isLinux()) {\n    version = versionFromFilesystemSync();\n    if (!version) {\n      version = versionFromReport();\n    }\n    if (!version) {\n      const out = safeCommandSync();\n      version = versionFromCommand(out);\n    }\n  }\n  return version;\n};\n\nmodule.exports = {\n  GLIBC,\n  MUSL,\n  family,\n  familySync,\n  isNonGlibcLinux,\n  isNonGlibcLinuxSync,\n  version,\n  versionSync\n};\n", "'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n", "{\n  \"name\": \"sharp\",\n  \"description\": \"High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images\",\n  \"version\": \"0.34.5\",\n  \"author\": \"Lovell Fuller <npm@lovell.info>\",\n  \"homepage\": \"https://sharp.pixelplumbing.com\",\n  \"contributors\": [\n    \"Pierre Inglebert <pierre.inglebert@gmail.com>\",\n    \"Jonathan Ong <jonathanrichardong@gmail.com>\",\n    \"Chanon Sajjamanochai <chanon.s@gmail.com>\",\n    \"Juliano Julio <julianojulio@gmail.com>\",\n    \"Daniel Gasienica <daniel@gasienica.ch>\",\n    \"Julian Walker <julian@fiftythree.com>\",\n    \"Amit Pitaru <pitaru.amit@gmail.com>\",\n    \"Brandon Aaron <hello.brandon@aaron.sh>\",\n    \"Andreas Lind <andreas@one.com>\",\n    \"Maurus Cuelenaere <mcuelenaere@gmail.com>\",\n    \"Linus Unneb\u00E4ck <linus@folkdatorn.se>\",\n    \"Victor Mateevitsi <mvictoras@gmail.com>\",\n    \"Alaric Holloway <alaric.holloway@gmail.com>\",\n    \"Bernhard K. Weisshuhn <bkw@codingforce.com>\",\n    \"Chris Riley <criley@primedia.com>\",\n    \"David Carley <dacarley@gmail.com>\",\n    \"John Tobin <john@limelightmobileinc.com>\",\n    \"Kenton Gray <kentongray@gmail.com>\",\n    \"Felix B\u00FCnemann <Felix.Buenemann@gmail.com>\",\n    \"Samy Al Zahrani <samyalzahrany@gmail.com>\",\n    \"Chintan Thakkar <lemnisk8@gmail.com>\",\n    \"F. Orlando Galashan <frulo@gmx.de>\",\n    \"Kleis Auke Wolthuizen <info@kleisauke.nl>\",\n    \"Matt Hirsch <mhirsch@media.mit.edu>\",\n    \"Matthias Thoemmes <thoemmes@gmail.com>\",\n    \"Patrick Paskaris <patrick@paskaris.gr>\",\n    \"J\u00E9r\u00E9my Lal <kapouer@melix.org>\",\n    \"Rahul Nanwani <r.nanwani@gmail.com>\",\n    \"Alice Monday <alice0meta@gmail.com>\",\n    \"Kristo Jorgenson <kristo.jorgenson@gmail.com>\",\n    \"YvesBos <yves_bos@outlook.com>\",\n    \"Guy Maliar <guy@tailorbrands.com>\",\n    \"Nicolas Coden <nicolas@ncoden.fr>\",\n    \"Matt Parrish <matt.r.parrish@gmail.com>\",\n    \"Marcel Bretschneider <marcel.bretschneider@gmail.com>\",\n    \"Matthew McEachen <matthew+github@mceachen.org>\",\n    \"Jarda Kot\u011B\u0161ovec <jarda.kotesovec@gmail.com>\",\n    \"Kenric D'Souza <kenric.dsouza@gmail.com>\",\n    \"Oleh Aleinyk <oleg.aleynik@gmail.com>\",\n    \"Marcel Bretschneider <marcel.bretschneider@gmail.com>\",\n    \"Andrea Bianco <andrea.bianco@unibas.ch>\",\n    \"Rik Heywood <rik@rik.org>\",\n    \"Thomas Parisot <hi@oncletom.io>\",\n    \"Nathan Graves <nathanrgraves+github@gmail.com>\",\n    \"Tom Lokhorst <tom@lokhorst.eu>\",\n    \"Espen Hovlandsdal <espen@hovlandsdal.com>\",\n    \"Sylvain Dumont <sylvain.dumont35@gmail.com>\",\n    \"Alun Davies <alun.owain.davies@googlemail.com>\",\n    \"Aidan Hoolachan <ajhoolachan21@gmail.com>\",\n    \"Axel Eirola <axel.eirola@iki.fi>\",\n    \"Freezy <freezy@xbmc.org>\",\n    \"Daiz <taneli.vatanen@gmail.com>\",\n    \"Julian Aubourg <j@ubourg.net>\",\n    \"Keith Belovay <keith@picthrive.com>\",\n    \"Michael B. Klein <mbklein@gmail.com>\",\n    \"Jordan Prudhomme <jordan@raboland.fr>\",\n    \"Ilya Ovdin <iovdin@gmail.com>\",\n    \"Andargor <andargor@yahoo.com>\",\n    \"Paul Neave <paul.neave@gmail.com>\",\n    \"Brendan Kennedy <brenwken@gmail.com>\",\n    \"Brychan Bennett-Odlum <git@brychan.io>\",\n    \"Edward Silverton <e.silverton@gmail.com>\",\n    \"Roman Malieiev <aromaleev@gmail.com>\",\n    \"Tomas Szabo <tomas.szabo@deftomat.com>\",\n    \"Robert O'Rourke <robert@o-rourke.org>\",\n    \"Guillermo Alfonso Varela Chouci\u00F1o <guillevch@gmail.com>\",\n    \"Christian Flintrup <chr@gigahost.dk>\",\n    \"Manan Jadhav <manan@motionden.com>\",\n    \"Leon Radley <leon@radley.se>\",\n    \"alza54 <alza54@thiocod.in>\",\n    \"Jacob Smith <jacob@frende.me>\",\n    \"Michael Nutt <michael@nutt.im>\",\n    \"Brad Parham <baparham@gmail.com>\",\n    \"Taneli Vatanen <taneli.vatanen@gmail.com>\",\n    \"Joris Dugu\u00E9 <zaruike10@gmail.com>\",\n    \"Chris Banks <christopher.bradley.banks@gmail.com>\",\n    \"Ompal Singh <ompal.hitm09@gmail.com>\",\n    \"Brodan <christopher.hranj@gmail.com>\",\n    \"Ankur Parihar <ankur.github@gmail.com>\",\n    \"Brahim Ait elhaj <brahima@gmail.com>\",\n    \"Mart Jansink <m.jansink@gmail.com>\",\n    \"Lachlan Newman <lachnewman007@gmail.com>\",\n    \"Dennis Beatty <dennis@dcbeatty.com>\",\n    \"Ingvar Stepanyan <me@rreverser.com>\",\n    \"Don Denton <don@happycollision.com>\"\n  ],\n  \"scripts\": {\n    \"build\": \"node install/build.js\",\n    \"install\": \"node install/check.js || npm run build\",\n    \"clean\": \"rm -rf src/build/ .nyc_output/ coverage/ test/fixtures/output.*\",\n    \"test\": \"npm run lint && npm run test-unit\",\n    \"lint\": \"npm run lint-cpp && npm run lint-js && npm run lint-types\",\n    \"lint-cpp\": \"cpplint --quiet src/*.h src/*.cc\",\n    \"lint-js\": \"biome lint\",\n    \"lint-types\": \"tsd --files ./test/types/sharp.test-d.ts\",\n    \"test-leak\": \"./test/leak/leak.sh\",\n    \"test-unit\": \"node --experimental-test-coverage test/unit.mjs\",\n    \"package-from-local-build\": \"node npm/from-local-build.js\",\n    \"package-release-notes\": \"node npm/release-notes.js\",\n    \"docs-build\": \"node docs/build.mjs\",\n    \"docs-serve\": \"cd docs && npm start\",\n    \"docs-publish\": \"cd docs && npm run build && npx firebase-tools deploy --project pixelplumbing --only hosting:pixelplumbing-sharp\"\n  },\n  \"type\": \"commonjs\",\n  \"main\": \"lib/index.js\",\n  \"types\": \"lib/index.d.ts\",\n  \"files\": [\n    \"install\",\n    \"lib\",\n    \"src/*.{cc,h,gyp}\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/lovell/sharp.git\"\n  },\n  \"keywords\": [\n    \"jpeg\",\n    \"png\",\n    \"webp\",\n    \"avif\",\n    \"tiff\",\n    \"gif\",\n    \"svg\",\n    \"jp2\",\n    \"dzi\",\n    \"image\",\n    \"resize\",\n    \"thumbnail\",\n    \"crop\",\n    \"embed\",\n    \"libvips\",\n    \"vips\"\n  ],\n  \"dependencies\": {\n    \"@img/colour\": \"^1.0.0\",\n    \"detect-libc\": \"^2.1.2\",\n    \"semver\": \"^7.7.3\"\n  },\n  \"optionalDependencies\": {\n    \"@img/sharp-darwin-arm64\": \"0.34.5\",\n    \"@img/sharp-darwin-x64\": \"0.34.5\",\n    \"@img/sharp-libvips-darwin-arm64\": \"1.2.4\",\n    \"@img/sharp-libvips-darwin-x64\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-arm\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-arm64\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-ppc64\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-riscv64\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-s390x\": \"1.2.4\",\n    \"@img/sharp-libvips-linux-x64\": \"1.2.4\",\n    \"@img/sharp-libvips-linuxmusl-arm64\": \"1.2.4\",\n    \"@img/sharp-libvips-linuxmusl-x64\": \"1.2.4\",\n    \"@img/sharp-linux-arm\": \"0.34.5\",\n    \"@img/sharp-linux-arm64\": \"0.34.5\",\n    \"@img/sharp-linux-ppc64\": \"0.34.5\",\n    \"@img/sharp-linux-riscv64\": \"0.34.5\",\n    \"@img/sharp-linux-s390x\": \"0.34.5\",\n    \"@img/sharp-linux-x64\": \"0.34.5\",\n    \"@img/sharp-linuxmusl-arm64\": \"0.34.5\",\n    \"@img/sharp-linuxmusl-x64\": \"0.34.5\",\n    \"@img/sharp-wasm32\": \"0.34.5\",\n    \"@img/sharp-win32-arm64\": \"0.34.5\",\n    \"@img/sharp-win32-ia32\": \"0.34.5\",\n    \"@img/sharp-win32-x64\": \"0.34.5\"\n  },\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"^2.3.4\",\n    \"@cpplint/cli\": \"^0.1.0\",\n    \"@emnapi/runtime\": \"^1.7.0\",\n    \"@img/sharp-libvips-dev\": \"1.2.4\",\n    \"@img/sharp-libvips-dev-wasm32\": \"1.2.4\",\n    \"@img/sharp-libvips-win32-arm64\": \"1.2.4\",\n    \"@img/sharp-libvips-win32-ia32\": \"1.2.4\",\n    \"@img/sharp-libvips-win32-x64\": \"1.2.4\",\n    \"@types/node\": \"*\",\n    \"emnapi\": \"^1.7.0\",\n    \"exif-reader\": \"^2.0.2\",\n    \"extract-zip\": \"^2.0.1\",\n    \"icc\": \"^3.0.0\",\n    \"jsdoc-to-markdown\": \"^9.1.3\",\n    \"node-addon-api\": \"^8.5.0\",\n    \"node-gyp\": \"^11.5.0\",\n    \"tar-fs\": \"^3.1.1\",\n    \"tsd\": \"^0.33.0\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"engines\": {\n    \"node\": \"^18.17.0 || ^20.3.0 || >=21.0.0\"\n  },\n  \"config\": {\n    \"libvips\": \">=8.17.3\"\n  },\n  \"funding\": {\n    \"url\": \"https://opencollective.com/libvips\"\n  }\n}\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst { spawnSync } = require('node:child_process');\nconst { createHash } = require('node:crypto');\nconst semverCoerce = require('semver/functions/coerce');\nconst semverGreaterThanOrEqualTo = require('semver/functions/gte');\nconst semverSatisfies = require('semver/functions/satisfies');\nconst detectLibc = require('detect-libc');\n\nconst { config, engines, optionalDependencies } = require('../package.json');\n\n/* node:coverage ignore next */\nconst minimumLibvipsVersionLabelled = process.env.npm_package_config_libvips || config.libvips;\nconst minimumLibvipsVersion = semverCoerce(minimumLibvipsVersionLabelled).version;\n\nconst prebuiltPlatforms = [\n  'darwin-arm64', 'darwin-x64',\n  'linux-arm', 'linux-arm64', 'linux-ppc64', 'linux-riscv64', 'linux-s390x', 'linux-x64',\n  'linuxmusl-arm64', 'linuxmusl-x64',\n  'win32-arm64', 'win32-ia32', 'win32-x64'\n];\n\nconst spawnSyncOptions = {\n  encoding: 'utf8',\n  shell: true\n};\n\nconst log = (item) => {\n  if (item instanceof Error) {\n    console.error(`sharp: Installation error: ${item.message}`);\n  } else {\n    console.log(`sharp: ${item}`);\n  }\n};\n\n/* node:coverage ignore next */\nconst runtimeLibc = () => detectLibc.isNonGlibcLinuxSync() ? detectLibc.familySync() : '';\n\nconst runtimePlatformArch = () => `${process.platform}${runtimeLibc()}-${process.arch}`;\n\nconst buildPlatformArch = () => {\n  /* node:coverage ignore next 3 */\n  if (isEmscripten()) {\n    return 'wasm32';\n  }\n  const { npm_config_arch, npm_config_platform, npm_config_libc } = process.env;\n  const libc = typeof npm_config_libc === 'string' ? npm_config_libc : runtimeLibc();\n  return `${npm_config_platform || process.platform}${libc}-${npm_config_arch || process.arch}`;\n};\n\nconst buildSharpLibvipsIncludeDir = () => {\n  try {\n    return require(`@img/sharp-libvips-dev-${buildPlatformArch()}/include`);\n  } catch {\n    /* node:coverage ignore next 5 */\n    try {\n      return require('@img/sharp-libvips-dev/include');\n    } catch {}\n  }\n  return '';\n};\n\nconst buildSharpLibvipsCPlusPlusDir = () => {\n  /* node:coverage ignore next 4 */\n  try {\n    return require('@img/sharp-libvips-dev/cplusplus');\n  } catch {}\n  return '';\n};\n\nconst buildSharpLibvipsLibDir = () => {\n  try {\n    return require(`@img/sharp-libvips-dev-${buildPlatformArch()}/lib`);\n  } catch {\n    /* node:coverage ignore next 5 */\n    try {\n      return require(`@img/sharp-libvips-${buildPlatformArch()}/lib`);\n    } catch {}\n  }\n  return '';\n};\n\n/* node:coverage disable */\n\nconst isUnsupportedNodeRuntime = () => {\n  if (process.release?.name === 'node' && process.versions) {\n    if (!semverSatisfies(process.versions.node, engines.node)) {\n      return { found: process.versions.node, expected: engines.node };\n    }\n  }\n};\n\nconst isEmscripten = () => {\n  const { CC } = process.env;\n  return Boolean(CC?.endsWith('/emcc'));\n};\n\nconst isRosetta = () => {\n  if (process.platform === 'darwin' && process.arch === 'x64') {\n    const translated = spawnSync('sysctl sysctl.proc_translated', spawnSyncOptions).stdout;\n    return (translated || '').trim() === 'sysctl.proc_translated: 1';\n  }\n  return false;\n};\n\n/* node:coverage enable */\n\nconst sha512 = (s) => createHash('sha512').update(s).digest('hex');\n\nconst yarnLocator = () => {\n  try {\n    const identHash = sha512(`imgsharp-libvips-${buildPlatformArch()}`);\n    const npmVersion = semverCoerce(optionalDependencies[`@img/sharp-libvips-${buildPlatformArch()}`], {\n      includePrerelease: true\n    }).version;\n    return sha512(`${identHash}npm:${npmVersion}`).slice(0, 10);\n  } catch {}\n  return '';\n};\n\n/* node:coverage disable */\n\nconst spawnRebuild = () =>\n  spawnSync(`node-gyp rebuild --directory=src ${isEmscripten() ? '--nodedir=emscripten' : ''}`, {\n    ...spawnSyncOptions,\n    stdio: 'inherit'\n  }).status;\n\nconst globalLibvipsVersion = () => {\n  if (process.platform !== 'win32') {\n    const globalLibvipsVersion = spawnSync('pkg-config --modversion vips-cpp', {\n      ...spawnSyncOptions,\n      env: {\n        ...process.env,\n        PKG_CONFIG_PATH: pkgConfigPath()\n      }\n    }).stdout;\n    return (globalLibvipsVersion || '').trim();\n  } else {\n    return '';\n  }\n};\n\n/* node:coverage enable */\n\nconst pkgConfigPath = () => {\n  if (process.platform !== 'win32') {\n    /* node:coverage ignore next 4 */\n    const brewPkgConfigPath = spawnSync(\n      'which brew >/dev/null 2>&1 && brew environment --plain | grep PKG_CONFIG_LIBDIR | cut -d\" \" -f2',\n      spawnSyncOptions\n    ).stdout || '';\n    return [\n      brewPkgConfigPath.trim(),\n      process.env.PKG_CONFIG_PATH,\n      '/usr/local/lib/pkgconfig',\n      '/usr/lib/pkgconfig',\n      '/usr/local/libdata/pkgconfig',\n      '/usr/libdata/pkgconfig'\n    ].filter(Boolean).join(':');\n  } else {\n    return '';\n  }\n};\n\nconst skipSearch = (status, reason, logger) => {\n  if (logger) {\n    logger(`Detected ${reason}, skipping search for globally-installed libvips`);\n  }\n  return status;\n};\n\nconst useGlobalLibvips = (logger) => {\n  if (Boolean(process.env.SHARP_IGNORE_GLOBAL_LIBVIPS) === true) {\n    return skipSearch(false, 'SHARP_IGNORE_GLOBAL_LIBVIPS', logger);\n  }\n  if (Boolean(process.env.SHARP_FORCE_GLOBAL_LIBVIPS) === true) {\n    return skipSearch(true, 'SHARP_FORCE_GLOBAL_LIBVIPS', logger);\n  }\n  /* node:coverage ignore next 3 */\n  if (isRosetta()) {\n    return skipSearch(false, 'Rosetta', logger);\n  }\n  const globalVipsVersion = globalLibvipsVersion();\n  /* node:coverage ignore next */\n  return !!globalVipsVersion && semverGreaterThanOrEqualTo(globalVipsVersion, minimumLibvipsVersion);\n};\n\nmodule.exports = {\n  minimumLibvipsVersion,\n  prebuiltPlatforms,\n  buildPlatformArch,\n  buildSharpLibvipsIncludeDir,\n  buildSharpLibvipsCPlusPlusDir,\n  buildSharpLibvipsLibDir,\n  isUnsupportedNodeRuntime,\n  runtimePlatformArch,\n  log,\n  yarnLocator,\n  spawnRebuild,\n  globalLibvipsVersion,\n  pkgConfigPath,\n  useGlobalLibvips\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\n// Inspects the runtime environment and exports the relevant sharp.node binary\n\nconst { familySync, versionSync } = require('detect-libc');\n\nconst { runtimePlatformArch, isUnsupportedNodeRuntime, prebuiltPlatforms, minimumLibvipsVersion } = require('./libvips');\nconst runtimePlatform = runtimePlatformArch();\n\nconst paths = [\n  `../src/build/Release/sharp-${runtimePlatform}.node`,\n  '../src/build/Release/sharp-wasm32.node',\n  `@img/sharp-${runtimePlatform}/sharp.node`,\n  '@img/sharp-wasm32/sharp.node'\n];\n\n/* node:coverage disable */\n\nlet path, sharp;\nconst errors = [];\nfor (path of paths) {\n  try {\n    sharp = require(path);\n    break;\n  } catch (err) {\n    errors.push(err);\n  }\n}\n\nif (sharp && path.startsWith('@img/sharp-linux-x64') && !sharp._isUsingX64V2()) {\n  const err = new Error('Prebuilt binaries for linux-x64 require v2 microarchitecture');\n  err.code = 'Unsupported CPU';\n  errors.push(err);\n  sharp = null;\n}\n\nif (sharp) {\n  module.exports = sharp;\n} else {\n  const [isLinux, isMacOs, isWindows] = ['linux', 'darwin', 'win32'].map(os => runtimePlatform.startsWith(os));\n\n  const help = [`Could not load the \"sharp\" module using the ${runtimePlatform} runtime`];\n  errors.forEach(err => {\n    if (err.code !== 'MODULE_NOT_FOUND') {\n      help.push(`${err.code}: ${err.message}`);\n    }\n  });\n  const messages = errors.map(err => err.message).join(' ');\n  help.push('Possible solutions:');\n  // Common error messages\n  if (isUnsupportedNodeRuntime()) {\n    const { found, expected } = isUnsupportedNodeRuntime();\n    help.push(\n      '- Please upgrade Node.js:',\n      `    Found ${found}`,\n      `    Requires ${expected}`\n    );\n  } else if (prebuiltPlatforms.includes(runtimePlatform)) {\n    const [os, cpu] = runtimePlatform.split('-');\n    const libc = os.endsWith('musl') ? ' --libc=musl' : '';\n    help.push(\n      '- Ensure optional dependencies can be installed:',\n      '    npm install --include=optional sharp',\n      '- Ensure your package manager supports multi-platform installation:',\n      '    See https://sharp.pixelplumbing.com/install#cross-platform',\n      '- Add platform-specific dependencies:',\n      `    npm install --os=${os.replace('musl', '')}${libc} --cpu=${cpu} sharp`\n    );\n  } else {\n    help.push(\n      `- Manually install libvips >= ${minimumLibvipsVersion}`,\n      '- Add experimental WebAssembly-based dependencies:',\n      '    npm install --cpu=wasm32 sharp',\n      '    npm install @img/sharp-wasm32'\n    );\n  }\n  if (isLinux && /(symbol not found|CXXABI_)/i.test(messages)) {\n    try {\n      const { config } = require(`@img/sharp-libvips-${runtimePlatform}/package`);\n      const libcFound = `${familySync()} ${versionSync()}`;\n      const libcRequires = `${config.musl ? 'musl' : 'glibc'} ${config.musl || config.glibc}`;\n      help.push(\n        '- Update your OS:',\n        `    Found ${libcFound}`,\n        `    Requires ${libcRequires}`\n      );\n    } catch (_errEngines) {}\n  }\n  if (isLinux && /\\/snap\\/core[0-9]{2}/.test(messages)) {\n    help.push(\n      '- Remove the Node.js Snap, which does not support native modules',\n      '    snap remove node'\n    );\n  }\n  if (isMacOs && /Incompatible library version/.test(messages)) {\n    help.push(\n      '- Update Homebrew:',\n      '    brew update && brew upgrade vips'\n    );\n  }\n  if (errors.some(err => err.code === 'ERR_DLOPEN_DISABLED')) {\n    help.push('- Run Node.js without using the --no-addons flag');\n  }\n  // Link to installation docs\n  if (isWindows && /The specified procedure could not be found/.test(messages)) {\n    help.push(\n      '- Using the canvas package on Windows?',\n      '    See https://sharp.pixelplumbing.com/install#canvas-and-windows',\n      '- Check for outdated versions of sharp in the dependency tree:',\n      '    npm ls sharp'\n    );\n  }\n  help.push(\n    '- Consult the installation documentation:',\n    '    See https://sharp.pixelplumbing.com/install'\n  );\n  throw new Error(help.join('\\n'));\n}\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst util = require('node:util');\nconst stream = require('node:stream');\nconst is = require('./is');\n\nrequire('./sharp');\n\n// Use NODE_DEBUG=sharp to enable libvips warnings\nconst debuglog = util.debuglog('sharp');\n\nconst queueListener = (queueLength) => {\n  Sharp.queue.emit('change', queueLength);\n};\n\n/**\n * Constructor factory to create an instance of `sharp`, to which further methods are chained.\n *\n * JPEG, PNG, WebP, GIF, AVIF or TIFF format image data can be streamed out from this object.\n * When using Stream based output, derived attributes are available from the `info` event.\n *\n * Non-critical problems encountered during processing are emitted as `warning` events.\n *\n * Implements the [stream.Duplex](http://nodejs.org/api/stream.html#stream_class_stream_duplex) class.\n *\n * When loading more than one page/frame of an animated image,\n * these are combined as a vertically-stacked \"toilet roll\" image\n * where the overall height is the `pageHeight` multiplied by the number of `pages`.\n *\n * @constructs Sharp\n *\n * @emits Sharp#info\n * @emits Sharp#warning\n *\n * @example\n * sharp('input.jpg')\n *   .resize(300, 200)\n *   .toFile('output.jpg', function(err) {\n *     // output.jpg is a 300 pixels wide and 200 pixels high image\n *     // containing a scaled and cropped version of input.jpg\n *   });\n *\n * @example\n * // Read image data from remote URL,\n * // resize to 300 pixels wide,\n * // emit an 'info' event with calculated dimensions\n * // and finally write image data to writableStream\n * const { body } = fetch('https://...');\n * const readableStream = Readable.fromWeb(body);\n * const transformer = sharp()\n *   .resize(300)\n *   .on('info', ({ height }) => {\n *     console.log(`Image height is ${height}`);\n *   });\n * readableStream.pipe(transformer).pipe(writableStream);\n *\n * @example\n * // Create a blank 300x200 PNG image of semi-translucent red pixels\n * sharp({\n *   create: {\n *     width: 300,\n *     height: 200,\n *     channels: 4,\n *     background: { r: 255, g: 0, b: 0, alpha: 0.5 }\n *   }\n * })\n * .png()\n * .toBuffer()\n * .then( ... );\n *\n * @example\n * // Convert an animated GIF to an animated WebP\n * await sharp('in.gif', { animated: true }).toFile('out.webp');\n *\n * @example\n * // Read a raw array of pixels and save it to a png\n * const input = Uint8Array.from([255, 255, 255, 0, 0, 0]); // or Uint8ClampedArray\n * const image = sharp(input, {\n *   // because the input does not contain its dimensions or how many channels it has\n *   // we need to specify it in the constructor options\n *   raw: {\n *     width: 2,\n *     height: 1,\n *     channels: 3\n *   }\n * });\n * await image.toFile('my-two-pixels.png');\n *\n * @example\n * // Generate RGB Gaussian noise\n * await sharp({\n *   create: {\n *     width: 300,\n *     height: 200,\n *     channels: 3,\n *     noise: {\n *       type: 'gaussian',\n *       mean: 128,\n *       sigma: 30\n *     }\n *  }\n * }).toFile('noise.png');\n *\n * @example\n * // Generate an image from text\n * await sharp({\n *   text: {\n *     text: 'Hello, world!',\n *     width: 400, // max width\n *     height: 300 // max height\n *   }\n * }).toFile('text_bw.png');\n *\n * @example\n * // Generate an rgba image from text using pango markup and font\n * await sharp({\n *   text: {\n *     text: '<span foreground=\"red\">Red!</span><span background=\"cyan\">blue</span>',\n *     font: 'sans',\n *     rgba: true,\n *     dpi: 300\n *   }\n * }).toFile('text_rgba.png');\n *\n * @example\n * // Join four input images as a 2x2 grid with a 4 pixel gutter\n * const data = await sharp(\n *  [image1, image2, image3, image4],\n *  { join: { across: 2, shim: 4 } }\n * ).toBuffer();\n *\n * @example\n * // Generate a two-frame animated image from emoji\n * const images = ['\uD83D\uDE00', '\uD83D\uDE1B'].map(text => ({\n *   text: { text, width: 64, height: 64, channels: 4, rgba: true }\n * }));\n * await sharp(images, { join: { animated: true } }).toFile('out.gif');\n *\n * @param {(Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|string|Array)} [input] - if present, can be\n *  a Buffer / ArrayBuffer / Uint8Array / Uint8ClampedArray containing JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image data, or\n *  a TypedArray containing raw pixel image data, or\n *  a String containing the filesystem path to an JPEG, PNG, WebP, AVIF, GIF, SVG or TIFF image file.\n *  An array of inputs can be provided, and these will be joined together.\n *  JPEG, PNG, WebP, AVIF, GIF, SVG, TIFF or raw pixel image data can be streamed into the object when not present.\n * @param {Object} [options] - if present, is an Object with optional attributes.\n * @param {string} [options.failOn='warning'] - When to abort processing of invalid pixel data, one of (in order of sensitivity, least to most): 'none', 'truncated', 'error', 'warning'. Higher levels imply lower levels. Invalid metadata will always abort.\n * @param {number|boolean} [options.limitInputPixels=268402689] - Do not process input images where the number of pixels\n *  (width x height) exceeds this limit. Assumes image dimensions contained in the input metadata can be trusted.\n *  An integral Number of pixels, zero or false to remove limit, true to use default limit of 268402689 (0x3FFF x 0x3FFF).\n * @param {boolean} [options.unlimited=false] - Set this to `true` to remove safety features that help prevent memory exhaustion (JPEG, PNG, SVG, HEIF).\n * @param {boolean} [options.autoOrient=false] - Set this to `true` to rotate/flip the image to match EXIF `Orientation`, if any.\n * @param {boolean} [options.sequentialRead=true] - Set this to `false` to use random access rather than sequential read. Some operations will do this automatically.\n * @param {number} [options.density=72] - number representing the DPI for vector images in the range 1 to 100000.\n * @param {number} [options.ignoreIcc=false] - should the embedded ICC profile, if any, be ignored.\n * @param {number} [options.pages=1] - Number of pages to extract for multi-page input (GIF, WebP, TIFF), use -1 for all pages.\n * @param {number} [options.page=0] - Page number to start extracting from for multi-page input (GIF, WebP, TIFF), zero based.\n * @param {boolean} [options.animated=false] - Set to `true` to read all frames/pages of an animated image (GIF, WebP, TIFF), equivalent of setting `pages` to `-1`.\n * @param {Object} [options.raw] - describes raw pixel input image data. See `raw()` for pixel ordering.\n * @param {number} [options.raw.width] - integral number of pixels wide.\n * @param {number} [options.raw.height] - integral number of pixels high.\n * @param {number} [options.raw.channels] - integral number of channels, between 1 and 4.\n * @param {boolean} [options.raw.premultiplied] - specifies that the raw input has already been premultiplied, set to `true`\n *  to avoid sharp premultiplying the image. (optional, default `false`)\n * @param {number} [options.raw.pageHeight] - The pixel height of each page/frame for animated images, must be an integral factor of `raw.height`.\n * @param {Object} [options.create] - describes a new image to be created.\n * @param {number} [options.create.width] - integral number of pixels wide.\n * @param {number} [options.create.height] - integral number of pixels high.\n * @param {number} [options.create.channels] - integral number of channels, either 3 (RGB) or 4 (RGBA).\n * @param {string|Object} [options.create.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @param {number} [options.create.pageHeight] - The pixel height of each page/frame for animated images, must be an integral factor of `create.height`.\n * @param {Object} [options.create.noise] - describes a noise to be created.\n * @param {string} [options.create.noise.type] - type of generated noise, currently only `gaussian` is supported.\n * @param {number} [options.create.noise.mean=128] - Mean value of pixels in the generated noise.\n * @param {number} [options.create.noise.sigma=30] - Standard deviation of pixel values in the generated noise.\n * @param {Object} [options.text] - describes a new text image to be created.\n * @param {string} [options.text.text] - text to render as a UTF-8 string. It can contain Pango markup, for example `<i>Le</i>Monde`.\n * @param {string} [options.text.font] - font name to render with.\n * @param {string} [options.text.fontfile] - absolute filesystem path to a font file that can be used by `font`.\n * @param {number} [options.text.width=0] - Integral number of pixels to word-wrap at. Lines of text wider than this will be broken at word boundaries.\n * @param {number} [options.text.height=0] - Maximum integral number of pixels high. When defined, `dpi` will be ignored and the text will automatically fit the pixel resolution defined by `width` and `height`. Will be ignored if `width` is not specified or set to 0.\n * @param {string} [options.text.align='left'] - Alignment style for multi-line text (`'left'`, `'centre'`, `'center'`, `'right'`).\n * @param {boolean} [options.text.justify=false] - set this to true to apply justification to the text.\n * @param {number} [options.text.dpi=72] - the resolution (size) at which to render the text. Does not take effect if `height` is specified.\n * @param {boolean} [options.text.rgba=false] - set this to true to enable RGBA output. This is useful for colour emoji rendering, or support for pango markup features like `<span foreground=\"red\">Red!</span>`.\n * @param {number} [options.text.spacing=0] - text line height in points. Will use the font line height if none is specified.\n * @param {string} [options.text.wrap='word'] - word wrapping style when width is provided, one of: 'word', 'char', 'word-char' (prefer word, fallback to char) or 'none'.\n * @param {Object} [options.join] - describes how an array of input images should be joined.\n * @param {number} [options.join.across=1] - number of images to join horizontally.\n * @param {boolean} [options.join.animated=false] - set this to `true` to join the images as an animated image.\n * @param {number} [options.join.shim=0] - number of pixels to insert between joined images.\n * @param {string|Object} [options.join.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @param {string} [options.join.halign='left'] - horizontal alignment style for images joined horizontally (`'left'`, `'centre'`, `'center'`, `'right'`).\n * @param {string} [options.join.valign='top'] - vertical alignment style for images joined vertically (`'top'`, `'centre'`, `'center'`, `'bottom'`).\n * @param {Object} [options.tiff] - Describes TIFF specific options.\n * @param {number} [options.tiff.subifd=-1] - Sub Image File Directory to extract for OME-TIFF, defaults to main image.\n * @param {Object} [options.svg] - Describes SVG specific options.\n * @param {string} [options.svg.stylesheet] - Custom CSS for SVG input, applied with a User Origin during the CSS cascade.\n * @param {boolean} [options.svg.highBitdepth=false] - Set to `true` to render SVG input at 32-bits per channel (128-bit) instead of 8-bits per channel (32-bit) RGBA.\n * @param {Object} [options.pdf] - Describes PDF specific options. Requires the use of a globally-installed libvips compiled with support for PDFium, Poppler, ImageMagick or GraphicsMagick.\n * @param {string|Object} [options.pdf.background] - Background colour to use when PDF is partially transparent. Parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @param {Object} [options.openSlide] - Describes OpenSlide specific options. Requires the use of a globally-installed libvips compiled with support for OpenSlide.\n * @param {number} [options.openSlide.level=0] - Level to extract from a multi-level input, zero based.\n * @param {Object} [options.jp2] - Describes JPEG 2000 specific options. Requires the use of a globally-installed libvips compiled with support for OpenJPEG.\n * @param {boolean} [options.jp2.oneshot=false] - Set to `true` to decode tiled JPEG 2000 images in a single operation, improving compatibility.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nconst Sharp = function (input, options) {\n  // biome-ignore lint/complexity/noArguments: constructor factory\n  if (arguments.length === 1 && !is.defined(input)) {\n    throw new Error('Invalid input');\n  }\n  if (!(this instanceof Sharp)) {\n    return new Sharp(input, options);\n  }\n  stream.Duplex.call(this);\n  this.options = {\n    // resize options\n    topOffsetPre: -1,\n    leftOffsetPre: -1,\n    widthPre: -1,\n    heightPre: -1,\n    topOffsetPost: -1,\n    leftOffsetPost: -1,\n    widthPost: -1,\n    heightPost: -1,\n    width: -1,\n    height: -1,\n    canvas: 'crop',\n    position: 0,\n    resizeBackground: [0, 0, 0, 255],\n    angle: 0,\n    rotationAngle: 0,\n    rotationBackground: [0, 0, 0, 255],\n    rotateBefore: false,\n    orientBefore: false,\n    flip: false,\n    flop: false,\n    extendTop: 0,\n    extendBottom: 0,\n    extendLeft: 0,\n    extendRight: 0,\n    extendBackground: [0, 0, 0, 255],\n    extendWith: 'background',\n    withoutEnlargement: false,\n    withoutReduction: false,\n    affineMatrix: [],\n    affineBackground: [0, 0, 0, 255],\n    affineIdx: 0,\n    affineIdy: 0,\n    affineOdx: 0,\n    affineOdy: 0,\n    affineInterpolator: this.constructor.interpolators.bilinear,\n    kernel: 'lanczos3',\n    fastShrinkOnLoad: true,\n    // operations\n    tint: [-1, 0, 0, 0],\n    flatten: false,\n    flattenBackground: [0, 0, 0],\n    unflatten: false,\n    negate: false,\n    negateAlpha: true,\n    medianSize: 0,\n    blurSigma: 0,\n    precision: 'integer',\n    minAmpl: 0.2,\n    sharpenSigma: 0,\n    sharpenM1: 1,\n    sharpenM2: 2,\n    sharpenX1: 2,\n    sharpenY2: 10,\n    sharpenY3: 20,\n    threshold: 0,\n    thresholdGrayscale: true,\n    trimBackground: [],\n    trimThreshold: -1,\n    trimLineArt: false,\n    dilateWidth: 0,\n    erodeWidth: 0,\n    gamma: 0,\n    gammaOut: 0,\n    greyscale: false,\n    normalise: false,\n    normaliseLower: 1,\n    normaliseUpper: 99,\n    claheWidth: 0,\n    claheHeight: 0,\n    claheMaxSlope: 3,\n    brightness: 1,\n    saturation: 1,\n    hue: 0,\n    lightness: 0,\n    booleanBufferIn: null,\n    booleanFileIn: '',\n    joinChannelIn: [],\n    extractChannel: -1,\n    removeAlpha: false,\n    ensureAlpha: -1,\n    colourspace: 'srgb',\n    colourspacePipeline: 'last',\n    composite: [],\n    // output\n    fileOut: '',\n    formatOut: 'input',\n    streamOut: false,\n    keepMetadata: 0,\n    withMetadataOrientation: -1,\n    withMetadataDensity: 0,\n    withIccProfile: '',\n    withExif: {},\n    withExifMerge: true,\n    withXmp: '',\n    resolveWithObject: false,\n    loop: -1,\n    delay: [],\n    // output format\n    jpegQuality: 80,\n    jpegProgressive: false,\n    jpegChromaSubsampling: '4:2:0',\n    jpegTrellisQuantisation: false,\n    jpegOvershootDeringing: false,\n    jpegOptimiseScans: false,\n    jpegOptimiseCoding: true,\n    jpegQuantisationTable: 0,\n    pngProgressive: false,\n    pngCompressionLevel: 6,\n    pngAdaptiveFiltering: false,\n    pngPalette: false,\n    pngQuality: 100,\n    pngEffort: 7,\n    pngBitdepth: 8,\n    pngDither: 1,\n    jp2Quality: 80,\n    jp2TileHeight: 512,\n    jp2TileWidth: 512,\n    jp2Lossless: false,\n    jp2ChromaSubsampling: '4:4:4',\n    webpQuality: 80,\n    webpAlphaQuality: 100,\n    webpLossless: false,\n    webpNearLossless: false,\n    webpSmartSubsample: false,\n    webpSmartDeblock: false,\n    webpPreset: 'default',\n    webpEffort: 4,\n    webpMinSize: false,\n    webpMixed: false,\n    gifBitdepth: 8,\n    gifEffort: 7,\n    gifDither: 1,\n    gifInterFrameMaxError: 0,\n    gifInterPaletteMaxError: 3,\n    gifKeepDuplicateFrames: false,\n    gifReuse: true,\n    gifProgressive: false,\n    tiffQuality: 80,\n    tiffCompression: 'jpeg',\n    tiffBigtiff: false,\n    tiffPredictor: 'horizontal',\n    tiffPyramid: false,\n    tiffMiniswhite: false,\n    tiffBitdepth: 8,\n    tiffTile: false,\n    tiffTileHeight: 256,\n    tiffTileWidth: 256,\n    tiffXres: 1.0,\n    tiffYres: 1.0,\n    tiffResolutionUnit: 'inch',\n    heifQuality: 50,\n    heifLossless: false,\n    heifCompression: 'av1',\n    heifEffort: 4,\n    heifChromaSubsampling: '4:4:4',\n    heifBitdepth: 8,\n    jxlDistance: 1,\n    jxlDecodingTier: 0,\n    jxlEffort: 7,\n    jxlLossless: false,\n    rawDepth: 'uchar',\n    tileSize: 256,\n    tileOverlap: 0,\n    tileContainer: 'fs',\n    tileLayout: 'dz',\n    tileFormat: 'last',\n    tileDepth: 'last',\n    tileAngle: 0,\n    tileSkipBlanks: -1,\n    tileBackground: [255, 255, 255, 255],\n    tileCentre: false,\n    tileId: 'https://example.com/iiif',\n    tileBasename: '',\n    timeoutSeconds: 0,\n    linearA: [],\n    linearB: [],\n    pdfBackground: [255, 255, 255, 255],\n    // Function to notify of libvips warnings\n    debuglog: warning => {\n      this.emit('warning', warning);\n      debuglog(warning);\n    },\n    // Function to notify of queue length changes\n    queueListener\n  };\n  this.options.input = this._createInputDescriptor(input, options, { allowStream: true });\n  return this;\n};\nObject.setPrototypeOf(Sharp.prototype, stream.Duplex.prototype);\nObject.setPrototypeOf(Sharp, stream.Duplex);\n\n/**\n * Take a \"snapshot\" of the Sharp instance, returning a new instance.\n * Cloned instances inherit the input of their parent instance.\n * This allows multiple output Streams and therefore multiple processing pipelines to share a single input Stream.\n *\n * @example\n * const pipeline = sharp().rotate();\n * pipeline.clone().resize(800, 600).pipe(firstWritableStream);\n * pipeline.clone().extract({ left: 20, top: 20, width: 100, height: 100 }).pipe(secondWritableStream);\n * readableStream.pipe(pipeline);\n * // firstWritableStream receives auto-rotated, resized readableStream\n * // secondWritableStream receives auto-rotated, extracted region of readableStream\n *\n * @example\n * // Create a pipeline that will download an image, resize it and format it to different files\n * // Using Promises to know when the pipeline is complete\n * const fs = require(\"fs\");\n * const got = require(\"got\");\n * const sharpStream = sharp({ failOn: 'none' });\n *\n * const promises = [];\n *\n * promises.push(\n *   sharpStream\n *     .clone()\n *     .jpeg({ quality: 100 })\n *     .toFile(\"originalFile.jpg\")\n * );\n *\n * promises.push(\n *   sharpStream\n *     .clone()\n *     .resize({ width: 500 })\n *     .jpeg({ quality: 80 })\n *     .toFile(\"optimized-500.jpg\")\n * );\n *\n * promises.push(\n *   sharpStream\n *     .clone()\n *     .resize({ width: 500 })\n *     .webp({ quality: 80 })\n *     .toFile(\"optimized-500.webp\")\n * );\n *\n * // https://github.com/sindresorhus/got/blob/main/documentation/3-streams.md\n * got.stream(\"https://www.example.com/some-file.jpg\").pipe(sharpStream);\n *\n * Promise.all(promises)\n *   .then(res => { console.log(\"Done!\", res); })\n *   .catch(err => {\n *     console.error(\"Error processing files, let's clean it up\", err);\n *     try {\n *       fs.unlinkSync(\"originalFile.jpg\");\n *       fs.unlinkSync(\"optimized-500.jpg\");\n *       fs.unlinkSync(\"optimized-500.webp\");\n *     } catch (e) {}\n *   });\n *\n * @returns {Sharp}\n */\nfunction clone () {\n  // Clone existing options\n  const clone = this.constructor.call();\n  const { debuglog, queueListener, ...options } = this.options;\n  clone.options = structuredClone(options);\n  clone.options.debuglog = debuglog;\n  clone.options.queueListener = queueListener;\n  // Pass 'finish' event to clone for Stream-based input\n  if (this._isStreamInput()) {\n    this.on('finish', () => {\n      // Clone inherits input data\n      this._flattenBufferIn();\n      clone.options.input.buffer = this.options.input.buffer;\n      clone.emit('finish');\n    });\n  }\n  return clone;\n}\nObject.assign(Sharp.prototype, { clone });\n\n/**\n * Export constructor.\n * @module Sharp\n * @private\n */\nmodule.exports = Sharp;\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst is = require('./is');\nconst sharp = require('./sharp');\n\n/**\n * Justification alignment\n * @member\n * @private\n */\nconst align = {\n  left: 'low',\n  top: 'low',\n  low: 'low',\n  center: 'centre',\n  centre: 'centre',\n  right: 'high',\n  bottom: 'high',\n  high: 'high'\n};\n\nconst inputStreamParameters = [\n  // Limits and error handling\n  'failOn', 'limitInputPixels', 'unlimited',\n  // Format-generic\n  'animated', 'autoOrient', 'density', 'ignoreIcc', 'page', 'pages', 'sequentialRead',\n  // Format-specific\n  'jp2', 'openSlide', 'pdf', 'raw', 'svg', 'tiff',\n  // Deprecated\n  'failOnError', 'openSlideLevel', 'pdfBackground', 'tiffSubifd'\n];\n\n/**\n * Extract input options, if any, from an object.\n * @private\n */\nfunction _inputOptionsFromObject (obj) {\n  const params = inputStreamParameters\n    .filter(p => is.defined(obj[p]))\n    .map(p => ([p, obj[p]]));\n  return params.length\n    ? Object.fromEntries(params)\n    : undefined;\n}\n\n/**\n * Create Object containing input and input-related options.\n * @private\n */\nfunction _createInputDescriptor (input, inputOptions, containerOptions) {\n  const inputDescriptor = {\n    autoOrient: false,\n    failOn: 'warning',\n    limitInputPixels: 0x3FFF ** 2,\n    ignoreIcc: false,\n    unlimited: false,\n    sequentialRead: true\n  };\n  if (is.string(input)) {\n    // filesystem\n    inputDescriptor.file = input;\n  } else if (is.buffer(input)) {\n    // Buffer\n    if (input.length === 0) {\n      throw Error('Input Buffer is empty');\n    }\n    inputDescriptor.buffer = input;\n  } else if (is.arrayBuffer(input)) {\n    if (input.byteLength === 0) {\n      throw Error('Input bit Array is empty');\n    }\n    inputDescriptor.buffer = Buffer.from(input, 0, input.byteLength);\n  } else if (is.typedArray(input)) {\n    if (input.length === 0) {\n      throw Error('Input Bit Array is empty');\n    }\n    inputDescriptor.buffer = Buffer.from(input.buffer, input.byteOffset, input.byteLength);\n  } else if (is.plainObject(input) && !is.defined(inputOptions)) {\n    // Plain Object descriptor, e.g. create\n    inputOptions = input;\n    if (_inputOptionsFromObject(inputOptions)) {\n      // Stream with options\n      inputDescriptor.buffer = [];\n    }\n  } else if (!is.defined(input) && !is.defined(inputOptions) && is.object(containerOptions) && containerOptions.allowStream) {\n    // Stream without options\n    inputDescriptor.buffer = [];\n  } else if (Array.isArray(input)) {\n    if (input.length > 1) {\n      // Join images together\n      if (!this.options.joining) {\n        this.options.joining = true;\n        this.options.join = input.map(i => this._createInputDescriptor(i));\n      } else {\n        throw new Error('Recursive join is unsupported');\n      }\n    } else {\n      throw new Error('Expected at least two images to join');\n    }\n  } else {\n    throw new Error(`Unsupported input '${input}' of type ${typeof input}${\n      is.defined(inputOptions) ? ` when also providing options of type ${typeof inputOptions}` : ''\n    }`);\n  }\n  if (is.object(inputOptions)) {\n    // Deprecated: failOnError\n    if (is.defined(inputOptions.failOnError)) {\n      if (is.bool(inputOptions.failOnError)) {\n        inputDescriptor.failOn = inputOptions.failOnError ? 'warning' : 'none';\n      } else {\n        throw is.invalidParameterError('failOnError', 'boolean', inputOptions.failOnError);\n      }\n    }\n    // failOn\n    if (is.defined(inputOptions.failOn)) {\n      if (is.string(inputOptions.failOn) && is.inArray(inputOptions.failOn, ['none', 'truncated', 'error', 'warning'])) {\n        inputDescriptor.failOn = inputOptions.failOn;\n      } else {\n        throw is.invalidParameterError('failOn', 'one of: none, truncated, error, warning', inputOptions.failOn);\n      }\n    }\n    // autoOrient\n    if (is.defined(inputOptions.autoOrient)) {\n      if (is.bool(inputOptions.autoOrient)) {\n        inputDescriptor.autoOrient = inputOptions.autoOrient;\n      } else {\n        throw is.invalidParameterError('autoOrient', 'boolean', inputOptions.autoOrient);\n      }\n    }\n    // Density\n    if (is.defined(inputOptions.density)) {\n      if (is.inRange(inputOptions.density, 1, 100000)) {\n        inputDescriptor.density = inputOptions.density;\n      } else {\n        throw is.invalidParameterError('density', 'number between 1 and 100000', inputOptions.density);\n      }\n    }\n    // Ignore embeddded ICC profile\n    if (is.defined(inputOptions.ignoreIcc)) {\n      if (is.bool(inputOptions.ignoreIcc)) {\n        inputDescriptor.ignoreIcc = inputOptions.ignoreIcc;\n      } else {\n        throw is.invalidParameterError('ignoreIcc', 'boolean', inputOptions.ignoreIcc);\n      }\n    }\n    // limitInputPixels\n    if (is.defined(inputOptions.limitInputPixels)) {\n      if (is.bool(inputOptions.limitInputPixels)) {\n        inputDescriptor.limitInputPixels = inputOptions.limitInputPixels\n          ? 0x3FFF ** 2\n          : 0;\n      } else if (is.integer(inputOptions.limitInputPixels) && is.inRange(inputOptions.limitInputPixels, 0, Number.MAX_SAFE_INTEGER)) {\n        inputDescriptor.limitInputPixels = inputOptions.limitInputPixels;\n      } else {\n        throw is.invalidParameterError('limitInputPixels', 'positive integer', inputOptions.limitInputPixels);\n      }\n    }\n    // unlimited\n    if (is.defined(inputOptions.unlimited)) {\n      if (is.bool(inputOptions.unlimited)) {\n        inputDescriptor.unlimited = inputOptions.unlimited;\n      } else {\n        throw is.invalidParameterError('unlimited', 'boolean', inputOptions.unlimited);\n      }\n    }\n    // sequentialRead\n    if (is.defined(inputOptions.sequentialRead)) {\n      if (is.bool(inputOptions.sequentialRead)) {\n        inputDescriptor.sequentialRead = inputOptions.sequentialRead;\n      } else {\n        throw is.invalidParameterError('sequentialRead', 'boolean', inputOptions.sequentialRead);\n      }\n    }\n    // Raw pixel input\n    if (is.defined(inputOptions.raw)) {\n      if (\n        is.object(inputOptions.raw) &&\n        is.integer(inputOptions.raw.width) && inputOptions.raw.width > 0 &&\n        is.integer(inputOptions.raw.height) && inputOptions.raw.height > 0 &&\n        is.integer(inputOptions.raw.channels) && is.inRange(inputOptions.raw.channels, 1, 4)\n      ) {\n        inputDescriptor.rawWidth = inputOptions.raw.width;\n        inputDescriptor.rawHeight = inputOptions.raw.height;\n        inputDescriptor.rawChannels = inputOptions.raw.channels;\n        switch (input.constructor) {\n          case Uint8Array:\n          case Uint8ClampedArray:\n            inputDescriptor.rawDepth = 'uchar';\n            break;\n          case Int8Array:\n            inputDescriptor.rawDepth = 'char';\n            break;\n          case Uint16Array:\n            inputDescriptor.rawDepth = 'ushort';\n            break;\n          case Int16Array:\n            inputDescriptor.rawDepth = 'short';\n            break;\n          case Uint32Array:\n            inputDescriptor.rawDepth = 'uint';\n            break;\n          case Int32Array:\n            inputDescriptor.rawDepth = 'int';\n            break;\n          case Float32Array:\n            inputDescriptor.rawDepth = 'float';\n            break;\n          case Float64Array:\n            inputDescriptor.rawDepth = 'double';\n            break;\n          default:\n            inputDescriptor.rawDepth = 'uchar';\n            break;\n        }\n      } else {\n        throw new Error('Expected width, height and channels for raw pixel input');\n      }\n      inputDescriptor.rawPremultiplied = false;\n      if (is.defined(inputOptions.raw.premultiplied)) {\n        if (is.bool(inputOptions.raw.premultiplied)) {\n          inputDescriptor.rawPremultiplied = inputOptions.raw.premultiplied;\n        } else {\n          throw is.invalidParameterError('raw.premultiplied', 'boolean', inputOptions.raw.premultiplied);\n        }\n      }\n      inputDescriptor.rawPageHeight = 0;\n      if (is.defined(inputOptions.raw.pageHeight)) {\n        if (is.integer(inputOptions.raw.pageHeight) && inputOptions.raw.pageHeight > 0 && inputOptions.raw.pageHeight <= inputOptions.raw.height) {\n          if (inputOptions.raw.height % inputOptions.raw.pageHeight !== 0) {\n            throw new Error(`Expected raw.height ${inputOptions.raw.height} to be a multiple of raw.pageHeight ${inputOptions.raw.pageHeight}`);\n          }\n          inputDescriptor.rawPageHeight = inputOptions.raw.pageHeight;\n        } else {\n          throw is.invalidParameterError('raw.pageHeight', 'positive integer', inputOptions.raw.pageHeight);\n        }\n      }\n    }\n    // Multi-page input (GIF, TIFF, PDF)\n    if (is.defined(inputOptions.animated)) {\n      if (is.bool(inputOptions.animated)) {\n        inputDescriptor.pages = inputOptions.animated ? -1 : 1;\n      } else {\n        throw is.invalidParameterError('animated', 'boolean', inputOptions.animated);\n      }\n    }\n    if (is.defined(inputOptions.pages)) {\n      if (is.integer(inputOptions.pages) && is.inRange(inputOptions.pages, -1, 100000)) {\n        inputDescriptor.pages = inputOptions.pages;\n      } else {\n        throw is.invalidParameterError('pages', 'integer between -1 and 100000', inputOptions.pages);\n      }\n    }\n    if (is.defined(inputOptions.page)) {\n      if (is.integer(inputOptions.page) && is.inRange(inputOptions.page, 0, 100000)) {\n        inputDescriptor.page = inputOptions.page;\n      } else {\n        throw is.invalidParameterError('page', 'integer between 0 and 100000', inputOptions.page);\n      }\n    }\n    // OpenSlide specific options\n    if (is.object(inputOptions.openSlide) && is.defined(inputOptions.openSlide.level)) {\n      if (is.integer(inputOptions.openSlide.level) && is.inRange(inputOptions.openSlide.level, 0, 256)) {\n        inputDescriptor.openSlideLevel = inputOptions.openSlide.level;\n      } else {\n        throw is.invalidParameterError('openSlide.level', 'integer between 0 and 256', inputOptions.openSlide.level);\n      }\n    } else if (is.defined(inputOptions.level)) {\n      // Deprecated\n      if (is.integer(inputOptions.level) && is.inRange(inputOptions.level, 0, 256)) {\n        inputDescriptor.openSlideLevel = inputOptions.level;\n      } else {\n        throw is.invalidParameterError('level', 'integer between 0 and 256', inputOptions.level);\n      }\n    }\n    // TIFF specific options\n    if (is.object(inputOptions.tiff) && is.defined(inputOptions.tiff.subifd)) {\n      if (is.integer(inputOptions.tiff.subifd) && is.inRange(inputOptions.tiff.subifd, -1, 100000)) {\n        inputDescriptor.tiffSubifd = inputOptions.tiff.subifd;\n      } else {\n        throw is.invalidParameterError('tiff.subifd', 'integer between -1 and 100000', inputOptions.tiff.subifd);\n      }\n    } else if (is.defined(inputOptions.subifd)) {\n      // Deprecated\n      if (is.integer(inputOptions.subifd) && is.inRange(inputOptions.subifd, -1, 100000)) {\n        inputDescriptor.tiffSubifd = inputOptions.subifd;\n      } else {\n        throw is.invalidParameterError('subifd', 'integer between -1 and 100000', inputOptions.subifd);\n      }\n    }\n    // SVG specific options\n    if (is.object(inputOptions.svg)) {\n      if (is.defined(inputOptions.svg.stylesheet)) {\n        if (is.string(inputOptions.svg.stylesheet)) {\n          inputDescriptor.svgStylesheet = inputOptions.svg.stylesheet;\n        } else {\n          throw is.invalidParameterError('svg.stylesheet', 'string', inputOptions.svg.stylesheet);\n        }\n      }\n      if (is.defined(inputOptions.svg.highBitdepth)) {\n        if (is.bool(inputOptions.svg.highBitdepth)) {\n          inputDescriptor.svgHighBitdepth = inputOptions.svg.highBitdepth;\n        } else {\n          throw is.invalidParameterError('svg.highBitdepth', 'boolean', inputOptions.svg.highBitdepth);\n        }\n      }\n    }\n    // PDF specific options\n    if (is.object(inputOptions.pdf) && is.defined(inputOptions.pdf.background)) {\n      inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdf.background);\n    } else if (is.defined(inputOptions.pdfBackground)) {\n      // Deprecated\n      inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdfBackground);\n    }\n    // JPEG 2000 specific options\n    if (is.object(inputOptions.jp2) && is.defined(inputOptions.jp2.oneshot)) {\n      if (is.bool(inputOptions.jp2.oneshot)) {\n        inputDescriptor.jp2Oneshot = inputOptions.jp2.oneshot;\n      } else {\n        throw is.invalidParameterError('jp2.oneshot', 'boolean', inputOptions.jp2.oneshot);\n      }\n    }\n    // Create new image\n    if (is.defined(inputOptions.create)) {\n      if (\n        is.object(inputOptions.create) &&\n        is.integer(inputOptions.create.width) && inputOptions.create.width > 0 &&\n        is.integer(inputOptions.create.height) && inputOptions.create.height > 0 &&\n        is.integer(inputOptions.create.channels)\n      ) {\n        inputDescriptor.createWidth = inputOptions.create.width;\n        inputDescriptor.createHeight = inputOptions.create.height;\n        inputDescriptor.createChannels = inputOptions.create.channels;\n        inputDescriptor.createPageHeight = 0;\n        if (is.defined(inputOptions.create.pageHeight)) {\n          if (is.integer(inputOptions.create.pageHeight) && inputOptions.create.pageHeight > 0 && inputOptions.create.pageHeight <= inputOptions.create.height) {\n            if (inputOptions.create.height % inputOptions.create.pageHeight !== 0) {\n              throw new Error(`Expected create.height ${inputOptions.create.height} to be a multiple of create.pageHeight ${inputOptions.create.pageHeight}`);\n            }\n            inputDescriptor.createPageHeight = inputOptions.create.pageHeight;\n          } else {\n            throw is.invalidParameterError('create.pageHeight', 'positive integer', inputOptions.create.pageHeight);\n          }\n        }\n        // Noise\n        if (is.defined(inputOptions.create.noise)) {\n          if (!is.object(inputOptions.create.noise)) {\n            throw new Error('Expected noise to be an object');\n          }\n          if (inputOptions.create.noise.type !== 'gaussian') {\n            throw new Error('Only gaussian noise is supported at the moment');\n          }\n          inputDescriptor.createNoiseType = inputOptions.create.noise.type;\n          if (!is.inRange(inputOptions.create.channels, 1, 4)) {\n            throw is.invalidParameterError('create.channels', 'number between 1 and 4', inputOptions.create.channels);\n          }\n          inputDescriptor.createNoiseMean = 128;\n          if (is.defined(inputOptions.create.noise.mean)) {\n            if (is.number(inputOptions.create.noise.mean) && is.inRange(inputOptions.create.noise.mean, 0, 10000)) {\n              inputDescriptor.createNoiseMean = inputOptions.create.noise.mean;\n            } else {\n              throw is.invalidParameterError('create.noise.mean', 'number between 0 and 10000', inputOptions.create.noise.mean);\n            }\n          }\n          inputDescriptor.createNoiseSigma = 30;\n          if (is.defined(inputOptions.create.noise.sigma)) {\n            if (is.number(inputOptions.create.noise.sigma) && is.inRange(inputOptions.create.noise.sigma, 0, 10000)) {\n              inputDescriptor.createNoiseSigma = inputOptions.create.noise.sigma;\n            } else {\n              throw is.invalidParameterError('create.noise.sigma', 'number between 0 and 10000', inputOptions.create.noise.sigma);\n            }\n          }\n        } else if (is.defined(inputOptions.create.background)) {\n          if (!is.inRange(inputOptions.create.channels, 3, 4)) {\n            throw is.invalidParameterError('create.channels', 'number between 3 and 4', inputOptions.create.channels);\n          }\n          inputDescriptor.createBackground = this._getBackgroundColourOption(inputOptions.create.background);\n        } else {\n          throw new Error('Expected valid noise or background to create a new input image');\n        }\n        delete inputDescriptor.buffer;\n      } else {\n        throw new Error('Expected valid width, height and channels to create a new input image');\n      }\n    }\n    // Create a new image with text\n    if (is.defined(inputOptions.text)) {\n      if (is.object(inputOptions.text) && is.string(inputOptions.text.text)) {\n        inputDescriptor.textValue = inputOptions.text.text;\n        if (is.defined(inputOptions.text.height) && is.defined(inputOptions.text.dpi)) {\n          throw new Error('Expected only one of dpi or height');\n        }\n        if (is.defined(inputOptions.text.font)) {\n          if (is.string(inputOptions.text.font)) {\n            inputDescriptor.textFont = inputOptions.text.font;\n          } else {\n            throw is.invalidParameterError('text.font', 'string', inputOptions.text.font);\n          }\n        }\n        if (is.defined(inputOptions.text.fontfile)) {\n          if (is.string(inputOptions.text.fontfile)) {\n            inputDescriptor.textFontfile = inputOptions.text.fontfile;\n          } else {\n            throw is.invalidParameterError('text.fontfile', 'string', inputOptions.text.fontfile);\n          }\n        }\n        if (is.defined(inputOptions.text.width)) {\n          if (is.integer(inputOptions.text.width) && inputOptions.text.width > 0) {\n            inputDescriptor.textWidth = inputOptions.text.width;\n          } else {\n            throw is.invalidParameterError('text.width', 'positive integer', inputOptions.text.width);\n          }\n        }\n        if (is.defined(inputOptions.text.height)) {\n          if (is.integer(inputOptions.text.height) && inputOptions.text.height > 0) {\n            inputDescriptor.textHeight = inputOptions.text.height;\n          } else {\n            throw is.invalidParameterError('text.height', 'positive integer', inputOptions.text.height);\n          }\n        }\n        if (is.defined(inputOptions.text.align)) {\n          if (is.string(inputOptions.text.align) && is.string(this.constructor.align[inputOptions.text.align])) {\n            inputDescriptor.textAlign = this.constructor.align[inputOptions.text.align];\n          } else {\n            throw is.invalidParameterError('text.align', 'valid alignment', inputOptions.text.align);\n          }\n        }\n        if (is.defined(inputOptions.text.justify)) {\n          if (is.bool(inputOptions.text.justify)) {\n            inputDescriptor.textJustify = inputOptions.text.justify;\n          } else {\n            throw is.invalidParameterError('text.justify', 'boolean', inputOptions.text.justify);\n          }\n        }\n        if (is.defined(inputOptions.text.dpi)) {\n          if (is.integer(inputOptions.text.dpi) && is.inRange(inputOptions.text.dpi, 1, 1000000)) {\n            inputDescriptor.textDpi = inputOptions.text.dpi;\n          } else {\n            throw is.invalidParameterError('text.dpi', 'integer between 1 and 1000000', inputOptions.text.dpi);\n          }\n        }\n        if (is.defined(inputOptions.text.rgba)) {\n          if (is.bool(inputOptions.text.rgba)) {\n            inputDescriptor.textRgba = inputOptions.text.rgba;\n          } else {\n            throw is.invalidParameterError('text.rgba', 'bool', inputOptions.text.rgba);\n          }\n        }\n        if (is.defined(inputOptions.text.spacing)) {\n          if (is.integer(inputOptions.text.spacing) && is.inRange(inputOptions.text.spacing, -1000000, 1000000)) {\n            inputDescriptor.textSpacing = inputOptions.text.spacing;\n          } else {\n            throw is.invalidParameterError('text.spacing', 'integer between -1000000 and 1000000', inputOptions.text.spacing);\n          }\n        }\n        if (is.defined(inputOptions.text.wrap)) {\n          if (is.string(inputOptions.text.wrap) && is.inArray(inputOptions.text.wrap, ['word', 'char', 'word-char', 'none'])) {\n            inputDescriptor.textWrap = inputOptions.text.wrap;\n          } else {\n            throw is.invalidParameterError('text.wrap', 'one of: word, char, word-char, none', inputOptions.text.wrap);\n          }\n        }\n        delete inputDescriptor.buffer;\n      } else {\n        throw new Error('Expected a valid string to create an image with text.');\n      }\n    }\n    // Join images together\n    if (is.defined(inputOptions.join)) {\n      if (is.defined(this.options.join)) {\n        if (is.defined(inputOptions.join.animated)) {\n          if (is.bool(inputOptions.join.animated)) {\n            inputDescriptor.joinAnimated = inputOptions.join.animated;\n          } else {\n            throw is.invalidParameterError('join.animated', 'boolean', inputOptions.join.animated);\n          }\n        }\n        if (is.defined(inputOptions.join.across)) {\n          if (is.integer(inputOptions.join.across) && is.inRange(inputOptions.join.across, 1, 1000000)) {\n            inputDescriptor.joinAcross = inputOptions.join.across;\n          } else {\n            throw is.invalidParameterError('join.across', 'integer between 1 and 100000', inputOptions.join.across);\n          }\n        }\n        if (is.defined(inputOptions.join.shim)) {\n          if (is.integer(inputOptions.join.shim) && is.inRange(inputOptions.join.shim, 0, 1000000)) {\n            inputDescriptor.joinShim = inputOptions.join.shim;\n          } else {\n            throw is.invalidParameterError('join.shim', 'integer between 0 and 100000', inputOptions.join.shim);\n          }\n        }\n        if (is.defined(inputOptions.join.background)) {\n          inputDescriptor.joinBackground = this._getBackgroundColourOption(inputOptions.join.background);\n        }\n        if (is.defined(inputOptions.join.halign)) {\n          if (is.string(inputOptions.join.halign) && is.string(this.constructor.align[inputOptions.join.halign])) {\n            inputDescriptor.joinHalign = this.constructor.align[inputOptions.join.halign];\n          } else {\n            throw is.invalidParameterError('join.halign', 'valid alignment', inputOptions.join.halign);\n          }\n        }\n        if (is.defined(inputOptions.join.valign)) {\n          if (is.string(inputOptions.join.valign) && is.string(this.constructor.align[inputOptions.join.valign])) {\n            inputDescriptor.joinValign = this.constructor.align[inputOptions.join.valign];\n          } else {\n            throw is.invalidParameterError('join.valign', 'valid alignment', inputOptions.join.valign);\n          }\n        }\n      } else {\n        throw new Error('Expected input to be an array of images to join');\n      }\n    }\n  } else if (is.defined(inputOptions)) {\n    throw new Error(`Invalid input options ${inputOptions}`);\n  }\n  return inputDescriptor;\n}\n\n/**\n * Handle incoming Buffer chunk on Writable Stream.\n * @private\n * @param {Buffer} chunk\n * @param {string} encoding - unused\n * @param {Function} callback\n */\nfunction _write (chunk, _encoding, callback) {\n  if (Array.isArray(this.options.input.buffer)) {\n    if (is.buffer(chunk)) {\n      if (this.options.input.buffer.length === 0) {\n        this.on('finish', () => {\n          this.streamInFinished = true;\n        });\n      }\n      this.options.input.buffer.push(chunk);\n      callback();\n    } else {\n      callback(new Error('Non-Buffer data on Writable Stream'));\n    }\n  } else {\n    callback(new Error('Unexpected data on Writable Stream'));\n  }\n}\n\n/**\n * Flattens the array of chunks accumulated in input.buffer.\n * @private\n */\nfunction _flattenBufferIn () {\n  if (this._isStreamInput()) {\n    this.options.input.buffer = Buffer.concat(this.options.input.buffer);\n  }\n}\n\n/**\n * Are we expecting Stream-based input?\n * @private\n * @returns {boolean}\n */\nfunction _isStreamInput () {\n  return Array.isArray(this.options.input.buffer);\n}\n\n/**\n * Fast access to (uncached) image metadata without decoding any compressed pixel data.\n *\n * This is read from the header of the input image.\n * It does not take into consideration any operations to be applied to the output image,\n * such as resize or rotate.\n *\n * Dimensions in the response will respect the `page` and `pages` properties of the\n * {@link /api-constructor/ constructor parameters}.\n *\n * A `Promise` is returned when `callback` is not provided.\n *\n * - `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg`\n * - `size`: Total size of image in bytes, for Stream and Buffer input only\n * - `width`: Number of pixels wide (EXIF orientation is not taken into consideration, see example below)\n * - `height`: Number of pixels high (EXIF orientation is not taken into consideration, see example below)\n * - `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://www.libvips.org/API/current/enum.Interpretation.html)\n * - `channels`: Number of bands e.g. `3` for sRGB, `4` for CMYK\n * - `depth`: Name of pixel depth format e.g. `uchar`, `char`, `ushort`, `float` [...](https://www.libvips.org/API/current/enum.BandFormat.html)\n * - `density`: Number of pixels per inch (DPI), if present\n * - `chromaSubsampling`: String containing JPEG chroma subsampling, `4:2:0` or `4:4:4` for RGB, `4:2:0:4` or `4:4:4:4` for CMYK\n * - `isProgressive`: Boolean indicating whether the image is interlaced using a progressive scan\n * - `isPalette`: Boolean indicating whether the image is palette-based (GIF, PNG).\n * - `bitsPerSample`: Number of bits per sample for each channel (GIF, PNG, HEIF).\n * - `pages`: Number of pages/frames contained within the image, with support for TIFF, HEIF, PDF, animated GIF and animated WebP\n * - `pageHeight`: Number of pixels high each page in a multi-page image will be.\n * - `loop`: Number of times to loop an animated image, zero refers to a continuous loop.\n * - `delay`: Delay in ms between each page in an animated image, provided as an array of integers.\n * - `pagePrimary`: Number of the primary page in a HEIF image\n * - `levels`: Details of each level in a multi-level image provided as an array of objects, requires libvips compiled with support for OpenSlide\n * - `subifds`: Number of Sub Image File Directories in an OME-TIFF image\n * - `background`: Default background colour, if present, for PNG (bKGD) and GIF images\n * - `compression`: The encoder used to compress an HEIF file, `av1` (AVIF) or `hevc` (HEIC)\n * - `resolutionUnit`: The unit of resolution (density), either `inch` or `cm`, if present\n * - `hasProfile`: Boolean indicating the presence of an embedded ICC profile\n * - `hasAlpha`: Boolean indicating the presence of an alpha transparency channel\n * - `orientation`: Number value of the EXIF Orientation header, if present\n * - `exif`: Buffer containing raw EXIF data, if present\n * - `icc`: Buffer containing raw [ICC](https://www.npmjs.com/package/icc) profile data, if present\n * - `iptc`: Buffer containing raw IPTC data, if present\n * - `xmp`: Buffer containing raw XMP data, if present\n * - `xmpAsString`: String containing XMP data, if valid UTF-8.\n * - `tifftagPhotoshop`: Buffer containing raw TIFFTAG_PHOTOSHOP data, if present\n * - `formatMagick`: String containing format for images loaded via *magick\n * - `comments`: Array of keyword/text pairs representing PNG text blocks, if present.\n *\n * @example\n * const metadata = await sharp(input).metadata();\n *\n * @example\n * const image = sharp(inputJpg);\n * image\n *   .metadata()\n *   .then(function(metadata) {\n *     return image\n *       .resize(Math.round(metadata.width / 2))\n *       .webp()\n *       .toBuffer();\n *   })\n *   .then(function(data) {\n *     // data contains a WebP image half the width and height of the original JPEG\n *   });\n *\n * @example\n * // Get dimensions taking EXIF Orientation into account.\n * const { autoOrient } = await sharp(input).metadata();\n * const { width, height } = autoOrient;\n *\n * @param {Function} [callback] - called with the arguments `(err, metadata)`\n * @returns {Promise<Object>|Sharp}\n */\nfunction metadata (callback) {\n  const stack = Error();\n  if (is.fn(callback)) {\n    if (this._isStreamInput()) {\n      this.on('finish', () => {\n        this._flattenBufferIn();\n        sharp.metadata(this.options, (err, metadata) => {\n          if (err) {\n            callback(is.nativeError(err, stack));\n          } else {\n            callback(null, metadata);\n          }\n        });\n      });\n    } else {\n      sharp.metadata(this.options, (err, metadata) => {\n        if (err) {\n          callback(is.nativeError(err, stack));\n        } else {\n          callback(null, metadata);\n        }\n      });\n    }\n    return this;\n  } else {\n    if (this._isStreamInput()) {\n      return new Promise((resolve, reject) => {\n        const finished = () => {\n          this._flattenBufferIn();\n          sharp.metadata(this.options, (err, metadata) => {\n            if (err) {\n              reject(is.nativeError(err, stack));\n            } else {\n              resolve(metadata);\n            }\n          });\n        };\n        if (this.writableFinished) {\n          finished();\n        } else {\n          this.once('finish', finished);\n        }\n      });\n    } else {\n      return new Promise((resolve, reject) => {\n        sharp.metadata(this.options, (err, metadata) => {\n          if (err) {\n            reject(is.nativeError(err, stack));\n          } else {\n            resolve(metadata);\n          }\n        });\n      });\n    }\n  }\n}\n\n/**\n * Access to pixel-derived image statistics for every channel in the image.\n * A `Promise` is returned when `callback` is not provided.\n *\n * - `channels`: Array of channel statistics for each channel in the image. Each channel statistic contains\n *     - `min` (minimum value in the channel)\n *     - `max` (maximum value in the channel)\n *     - `sum` (sum of all values in a channel)\n *     - `squaresSum` (sum of squared values in a channel)\n *     - `mean` (mean of the values in a channel)\n *     - `stdev` (standard deviation for the values in a channel)\n *     - `minX` (x-coordinate of one of the pixel where the minimum lies)\n *     - `minY` (y-coordinate of one of the pixel where the minimum lies)\n *     - `maxX` (x-coordinate of one of the pixel where the maximum lies)\n *     - `maxY` (y-coordinate of one of the pixel where the maximum lies)\n * - `isOpaque`: Is the image fully opaque? Will be `true` if the image has no alpha channel or if every pixel is fully opaque.\n * - `entropy`: Histogram-based estimation of greyscale entropy, discarding alpha channel if any.\n * - `sharpness`: Estimation of greyscale sharpness based on the standard deviation of a Laplacian convolution, discarding alpha channel if any.\n * - `dominant`: Object containing most dominant sRGB colour based on a 4096-bin 3D histogram.\n *\n * **Note**: Statistics are derived from the original input image. Any operations performed on the image must first be\n * written to a buffer in order to run `stats` on the result (see third example).\n *\n * @example\n * const image = sharp(inputJpg);\n * image\n *   .stats()\n *   .then(function(stats) {\n *      // stats contains the channel-wise statistics array and the isOpaque value\n *   });\n *\n * @example\n * const { entropy, sharpness, dominant } = await sharp(input).stats();\n * const { r, g, b } = dominant;\n *\n * @example\n * const image = sharp(input);\n * // store intermediate result\n * const part = await image.extract(region).toBuffer();\n * // create new instance to obtain statistics of extracted region\n * const stats = await sharp(part).stats();\n *\n * @param {Function} [callback] - called with the arguments `(err, stats)`\n * @returns {Promise<Object>}\n */\nfunction stats (callback) {\n  const stack = Error();\n  if (is.fn(callback)) {\n    if (this._isStreamInput()) {\n      this.on('finish', () => {\n        this._flattenBufferIn();\n        sharp.stats(this.options, (err, stats) => {\n          if (err) {\n            callback(is.nativeError(err, stack));\n          } else {\n            callback(null, stats);\n          }\n        });\n      });\n    } else {\n      sharp.stats(this.options, (err, stats) => {\n        if (err) {\n          callback(is.nativeError(err, stack));\n        } else {\n          callback(null, stats);\n        }\n      });\n    }\n    return this;\n  } else {\n    if (this._isStreamInput()) {\n      return new Promise((resolve, reject) => {\n        this.on('finish', function () {\n          this._flattenBufferIn();\n          sharp.stats(this.options, (err, stats) => {\n            if (err) {\n              reject(is.nativeError(err, stack));\n            } else {\n              resolve(stats);\n            }\n          });\n        });\n      });\n    } else {\n      return new Promise((resolve, reject) => {\n        sharp.stats(this.options, (err, stats) => {\n          if (err) {\n            reject(is.nativeError(err, stack));\n          } else {\n            resolve(stats);\n          }\n        });\n      });\n    }\n  }\n}\n\n/**\n * Decorate the Sharp prototype with input-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    // Private\n    _inputOptionsFromObject,\n    _createInputDescriptor,\n    _write,\n    _flattenBufferIn,\n    _isStreamInput,\n    // Public\n    metadata,\n    stats\n  });\n  // Class attributes\n  Sharp.align = align;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst is = require('./is');\n\n/**\n * Weighting to apply when using contain/cover fit.\n * @member\n * @private\n */\nconst gravity = {\n  center: 0,\n  centre: 0,\n  north: 1,\n  east: 2,\n  south: 3,\n  west: 4,\n  northeast: 5,\n  southeast: 6,\n  southwest: 7,\n  northwest: 8\n};\n\n/**\n * Position to apply when using contain/cover fit.\n * @member\n * @private\n */\nconst position = {\n  top: 1,\n  right: 2,\n  bottom: 3,\n  left: 4,\n  'right top': 5,\n  'right bottom': 6,\n  'left bottom': 7,\n  'left top': 8\n};\n\n/**\n * How to extend the image.\n * @member\n * @private\n */\nconst extendWith = {\n  background: 'background',\n  copy: 'copy',\n  repeat: 'repeat',\n  mirror: 'mirror'\n};\n\n/**\n * Strategies for automagic cover behaviour.\n * @member\n * @private\n */\nconst strategy = {\n  entropy: 16,\n  attention: 17\n};\n\n/**\n * Reduction kernels.\n * @member\n * @private\n */\nconst kernel = {\n  nearest: 'nearest',\n  linear: 'linear',\n  cubic: 'cubic',\n  mitchell: 'mitchell',\n  lanczos2: 'lanczos2',\n  lanczos3: 'lanczos3',\n  mks2013: 'mks2013',\n  mks2021: 'mks2021'\n};\n\n/**\n * Methods by which an image can be resized to fit the provided dimensions.\n * @member\n * @private\n */\nconst fit = {\n  contain: 'contain',\n  cover: 'cover',\n  fill: 'fill',\n  inside: 'inside',\n  outside: 'outside'\n};\n\n/**\n * Map external fit property to internal canvas property.\n * @member\n * @private\n */\nconst mapFitToCanvas = {\n  contain: 'embed',\n  cover: 'crop',\n  fill: 'ignore_aspect',\n  inside: 'max',\n  outside: 'min'\n};\n\n/**\n * @private\n */\nfunction isRotationExpected (options) {\n  return (options.angle % 360) !== 0 || options.rotationAngle !== 0;\n}\n\n/**\n * @private\n */\nfunction isResizeExpected (options) {\n  return options.width !== -1 || options.height !== -1;\n}\n\n/**\n * Resize image to `width`, `height` or `width x height`.\n *\n * When both a `width` and `height` are provided, the possible methods by which the image should **fit** these are:\n * - `cover`: (default) Preserving aspect ratio, attempt to ensure the image covers both provided dimensions by cropping/clipping to fit.\n * - `contain`: Preserving aspect ratio, contain within both provided dimensions using \"letterboxing\" where necessary.\n * - `fill`: Ignore the aspect ratio of the input and stretch to both provided dimensions.\n * - `inside`: Preserving aspect ratio, resize the image to be as large as possible while ensuring its dimensions are less than or equal to both those specified.\n * - `outside`: Preserving aspect ratio, resize the image to be as small as possible while ensuring its dimensions are greater than or equal to both those specified.\n *\n * Some of these values are based on the [object-fit](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) CSS property.\n *\n * <img alt=\"Examples of various values for the fit property when resizing\" width=\"100%\" style=\"aspect-ratio: 998/243\" src=\"/api-resize-fit.svg\">\n *\n * When using a **fit** of `cover` or `contain`, the default **position** is `centre`. Other options are:\n * - `sharp.position`: `top`, `right top`, `right`, `right bottom`, `bottom`, `left bottom`, `left`, `left top`.\n * - `sharp.gravity`: `north`, `northeast`, `east`, `southeast`, `south`, `southwest`, `west`, `northwest`, `center` or `centre`.\n * - `sharp.strategy`: `cover` only, dynamically crop using either the `entropy` or `attention` strategy.\n *\n * Some of these values are based on the [object-position](https://developer.mozilla.org/en-US/docs/Web/CSS/object-position) CSS property.\n *\n * The strategy-based approach initially resizes so one dimension is at its target length\n * then repeatedly ranks edge regions, discarding the edge with the lowest score based on the selected strategy.\n * - `entropy`: focus on the region with the highest [Shannon entropy](https://en.wikipedia.org/wiki/Entropy_%28information_theory%29).\n * - `attention`: focus on the region with the highest luminance frequency, colour saturation and presence of skin tones.\n *\n * Possible downsizing kernels are:\n * - `nearest`: Use [nearest neighbour interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation).\n * - `linear`: Use a [triangle filter](https://en.wikipedia.org/wiki/Triangular_function).\n * - `cubic`: Use a [Catmull-Rom spline](https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline).\n * - `mitchell`: Use a [Mitchell-Netravali spline](https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf).\n * - `lanczos2`: Use a [Lanczos kernel](https://en.wikipedia.org/wiki/Lanczos_resampling#Lanczos_kernel) with `a=2`.\n * - `lanczos3`: Use a Lanczos kernel with `a=3` (the default).\n * - `mks2013`: Use a [Magic Kernel Sharp](https://johncostella.com/magic/mks.pdf) 2013 kernel, as adopted by Facebook.\n * - `mks2021`: Use a Magic Kernel Sharp 2021 kernel, with more accurate (reduced) sharpening than the 2013 version.\n *\n * When upsampling, these kernels map to `nearest`, `linear` and `cubic` interpolators.\n * Downsampling kernels without a matching upsampling interpolator map to `cubic`.\n *\n * Only one resize can occur per pipeline.\n * Previous calls to `resize` in the same pipeline will be ignored.\n *\n * @example\n * sharp(input)\n *   .resize({ width: 100 })\n *   .toBuffer()\n *   .then(data => {\n *     // 100 pixels wide, auto-scaled height\n *   });\n *\n * @example\n * sharp(input)\n *   .resize({ height: 100 })\n *   .toBuffer()\n *   .then(data => {\n *     // 100 pixels high, auto-scaled width\n *   });\n *\n * @example\n * sharp(input)\n *   .resize(200, 300, {\n *     kernel: sharp.kernel.nearest,\n *     fit: 'contain',\n *     position: 'right top',\n *     background: { r: 255, g: 255, b: 255, alpha: 0.5 }\n *   })\n *   .toFile('output.png')\n *   .then(() => {\n *     // output.png is a 200 pixels wide and 300 pixels high image\n *     // containing a nearest-neighbour scaled version\n *     // contained within the north-east corner of a semi-transparent white canvas\n *   });\n *\n * @example\n * const transformer = sharp()\n *   .resize({\n *     width: 200,\n *     height: 200,\n *     fit: sharp.fit.cover,\n *     position: sharp.strategy.entropy\n *   });\n * // Read image data from readableStream\n * // Write 200px square auto-cropped image data to writableStream\n * readableStream\n *   .pipe(transformer)\n *   .pipe(writableStream);\n *\n * @example\n * sharp(input)\n *   .resize(200, 200, {\n *     fit: sharp.fit.inside,\n *     withoutEnlargement: true\n *   })\n *   .toFormat('jpeg')\n *   .toBuffer()\n *   .then(function(outputBuffer) {\n *     // outputBuffer contains JPEG image data\n *     // no wider and no higher than 200 pixels\n *     // and no larger than the input image\n *   });\n *\n * @example\n * sharp(input)\n *   .resize(200, 200, {\n *     fit: sharp.fit.outside,\n *     withoutReduction: true\n *   })\n *   .toFormat('jpeg')\n *   .toBuffer()\n *   .then(function(outputBuffer) {\n *     // outputBuffer contains JPEG image data\n *     // of at least 200 pixels wide and 200 pixels high while maintaining aspect ratio\n *     // and no smaller than the input image\n *   });\n *\n * @example\n * const scaleByHalf = await sharp(input)\n *   .metadata()\n *   .then(({ width }) => sharp(input)\n *     .resize(Math.round(width * 0.5))\n *     .toBuffer()\n *   );\n *\n * @param {number} [width] - How many pixels wide the resultant image should be. Use `null` or `undefined` to auto-scale the width to match the height.\n * @param {number} [height] - How many pixels high the resultant image should be. Use `null` or `undefined` to auto-scale the height to match the width.\n * @param {Object} [options]\n * @param {number} [options.width] - An alternative means of specifying `width`. If both are present this takes priority.\n * @param {number} [options.height] - An alternative means of specifying `height`. If both are present this takes priority.\n * @param {String} [options.fit='cover'] - How the image should be resized/cropped to fit the target dimension(s), one of `cover`, `contain`, `fill`, `inside` or `outside`.\n * @param {String} [options.position='centre'] - A position, gravity or strategy to use when `fit` is `cover` or `contain`.\n * @param {String|Object} [options.background={r: 0, g: 0, b: 0, alpha: 1}] - background colour when `fit` is `contain`, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black without transparency.\n * @param {String} [options.kernel='lanczos3'] - The kernel to use for image reduction and the inferred interpolator to use for upsampling. Use the `fastShrinkOnLoad` option to control kernel vs shrink-on-load.\n * @param {Boolean} [options.withoutEnlargement=false] - Do not scale up if the width *or* height are already less than the target dimensions, equivalent to GraphicsMagick's `>` geometry option. This may result in output dimensions smaller than the target dimensions.\n * @param {Boolean} [options.withoutReduction=false] - Do not scale down if the width *or* height are already greater than the target dimensions, equivalent to GraphicsMagick's `<` geometry option. This may still result in a crop to reach the target dimensions.\n * @param {Boolean} [options.fastShrinkOnLoad=true] - Take greater advantage of the JPEG and WebP shrink-on-load feature, which can lead to a slight moir\u00E9 pattern or round-down of an auto-scaled dimension.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction resize (widthOrOptions, height, options) {\n  if (isResizeExpected(this.options)) {\n    this.options.debuglog('ignoring previous resize options');\n  }\n  if (this.options.widthPost !== -1) {\n    this.options.debuglog('operation order will be: extract, resize, extract');\n  }\n  if (is.defined(widthOrOptions)) {\n    if (is.object(widthOrOptions) && !is.defined(options)) {\n      options = widthOrOptions;\n    } else if (is.integer(widthOrOptions) && widthOrOptions > 0) {\n      this.options.width = widthOrOptions;\n    } else {\n      throw is.invalidParameterError('width', 'positive integer', widthOrOptions);\n    }\n  } else {\n    this.options.width = -1;\n  }\n  if (is.defined(height)) {\n    if (is.integer(height) && height > 0) {\n      this.options.height = height;\n    } else {\n      throw is.invalidParameterError('height', 'positive integer', height);\n    }\n  } else {\n    this.options.height = -1;\n  }\n  if (is.object(options)) {\n    // Width\n    if (is.defined(options.width)) {\n      if (is.integer(options.width) && options.width > 0) {\n        this.options.width = options.width;\n      } else {\n        throw is.invalidParameterError('width', 'positive integer', options.width);\n      }\n    }\n    // Height\n    if (is.defined(options.height)) {\n      if (is.integer(options.height) && options.height > 0) {\n        this.options.height = options.height;\n      } else {\n        throw is.invalidParameterError('height', 'positive integer', options.height);\n      }\n    }\n    // Fit\n    if (is.defined(options.fit)) {\n      const canvas = mapFitToCanvas[options.fit];\n      if (is.string(canvas)) {\n        this.options.canvas = canvas;\n      } else {\n        throw is.invalidParameterError('fit', 'valid fit', options.fit);\n      }\n    }\n    // Position\n    if (is.defined(options.position)) {\n      const pos = is.integer(options.position)\n        ? options.position\n        : strategy[options.position] || position[options.position] || gravity[options.position];\n      if (is.integer(pos) && (is.inRange(pos, 0, 8) || is.inRange(pos, 16, 17))) {\n        this.options.position = pos;\n      } else {\n        throw is.invalidParameterError('position', 'valid position/gravity/strategy', options.position);\n      }\n    }\n    // Background\n    this._setBackgroundColourOption('resizeBackground', options.background);\n    // Kernel\n    if (is.defined(options.kernel)) {\n      if (is.string(kernel[options.kernel])) {\n        this.options.kernel = kernel[options.kernel];\n      } else {\n        throw is.invalidParameterError('kernel', 'valid kernel name', options.kernel);\n      }\n    }\n    // Without enlargement\n    if (is.defined(options.withoutEnlargement)) {\n      this._setBooleanOption('withoutEnlargement', options.withoutEnlargement);\n    }\n    // Without reduction\n    if (is.defined(options.withoutReduction)) {\n      this._setBooleanOption('withoutReduction', options.withoutReduction);\n    }\n    // Shrink on load\n    if (is.defined(options.fastShrinkOnLoad)) {\n      this._setBooleanOption('fastShrinkOnLoad', options.fastShrinkOnLoad);\n    }\n  }\n  if (isRotationExpected(this.options) && isResizeExpected(this.options)) {\n    this.options.rotateBefore = true;\n  }\n  return this;\n}\n\n/**\n * Extend / pad / extrude one or more edges of the image with either\n * the provided background colour or pixels derived from the image.\n * This operation will always occur after resizing and extraction, if any.\n *\n * @example\n * // Resize to 140 pixels wide, then add 10 transparent pixels\n * // to the top, left and right edges and 20 to the bottom edge\n * sharp(input)\n *   .resize(140)\n *   .extend({\n *     top: 10,\n *     bottom: 20,\n *     left: 10,\n *     right: 10,\n *     background: { r: 0, g: 0, b: 0, alpha: 0 }\n *   })\n *   ...\n *\n* @example\n * // Add a row of 10 red pixels to the bottom\n * sharp(input)\n *   .extend({\n *     bottom: 10,\n *     background: 'red'\n *   })\n *   ...\n *\n * @example\n * // Extrude image by 8 pixels to the right, mirroring existing right hand edge\n * sharp(input)\n *   .extend({\n *     right: 8,\n *     background: 'mirror'\n *   })\n *   ...\n *\n * @param {(number|Object)} extend - single pixel count to add to all edges or an Object with per-edge counts\n * @param {number} [extend.top=0]\n * @param {number} [extend.left=0]\n * @param {number} [extend.bottom=0]\n * @param {number} [extend.right=0]\n * @param {String} [extend.extendWith='background'] - populate new pixels using this method, one of: background, copy, repeat, mirror.\n * @param {String|Object} [extend.background={r: 0, g: 0, b: 0, alpha: 1}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black without transparency.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n*/\nfunction extend (extend) {\n  if (is.integer(extend) && extend > 0) {\n    this.options.extendTop = extend;\n    this.options.extendBottom = extend;\n    this.options.extendLeft = extend;\n    this.options.extendRight = extend;\n  } else if (is.object(extend)) {\n    if (is.defined(extend.top)) {\n      if (is.integer(extend.top) && extend.top >= 0) {\n        this.options.extendTop = extend.top;\n      } else {\n        throw is.invalidParameterError('top', 'positive integer', extend.top);\n      }\n    }\n    if (is.defined(extend.bottom)) {\n      if (is.integer(extend.bottom) && extend.bottom >= 0) {\n        this.options.extendBottom = extend.bottom;\n      } else {\n        throw is.invalidParameterError('bottom', 'positive integer', extend.bottom);\n      }\n    }\n    if (is.defined(extend.left)) {\n      if (is.integer(extend.left) && extend.left >= 0) {\n        this.options.extendLeft = extend.left;\n      } else {\n        throw is.invalidParameterError('left', 'positive integer', extend.left);\n      }\n    }\n    if (is.defined(extend.right)) {\n      if (is.integer(extend.right) && extend.right >= 0) {\n        this.options.extendRight = extend.right;\n      } else {\n        throw is.invalidParameterError('right', 'positive integer', extend.right);\n      }\n    }\n    this._setBackgroundColourOption('extendBackground', extend.background);\n    if (is.defined(extend.extendWith)) {\n      if (is.string(extendWith[extend.extendWith])) {\n        this.options.extendWith = extendWith[extend.extendWith];\n      } else {\n        throw is.invalidParameterError('extendWith', 'one of: background, copy, repeat, mirror', extend.extendWith);\n      }\n    }\n  } else {\n    throw is.invalidParameterError('extend', 'integer or object', extend);\n  }\n  return this;\n}\n\n/**\n * Extract/crop a region of the image.\n *\n * - Use `extract` before `resize` for pre-resize extraction.\n * - Use `extract` after `resize` for post-resize extraction.\n * - Use `extract` twice and `resize` once for extract-then-resize-then-extract in a fixed operation order.\n *\n * @example\n * sharp(input)\n *   .extract({ left: left, top: top, width: width, height: height })\n *   .toFile(output, function(err) {\n *     // Extract a region of the input image, saving in the same format.\n *   });\n * @example\n * sharp(input)\n *   .extract({ left: leftOffsetPre, top: topOffsetPre, width: widthPre, height: heightPre })\n *   .resize(width, height)\n *   .extract({ left: leftOffsetPost, top: topOffsetPost, width: widthPost, height: heightPost })\n *   .toFile(output, function(err) {\n *     // Extract a region, resize, then extract from the resized image\n *   });\n *\n * @param {Object} options - describes the region to extract using integral pixel values\n * @param {number} options.left - zero-indexed offset from left edge\n * @param {number} options.top - zero-indexed offset from top edge\n * @param {number} options.width - width of region to extract\n * @param {number} options.height - height of region to extract\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction extract (options) {\n  const suffix = isResizeExpected(this.options) || this.options.widthPre !== -1 ? 'Post' : 'Pre';\n  if (this.options[`width${suffix}`] !== -1) {\n    this.options.debuglog('ignoring previous extract options');\n  }\n  ['left', 'top', 'width', 'height'].forEach(function (name) {\n    const value = options[name];\n    if (is.integer(value) && value >= 0) {\n      this.options[name + (name === 'left' || name === 'top' ? 'Offset' : '') + suffix] = value;\n    } else {\n      throw is.invalidParameterError(name, 'integer', value);\n    }\n  }, this);\n  // Ensure existing rotation occurs before pre-resize extraction\n  if (isRotationExpected(this.options) && !isResizeExpected(this.options)) {\n    if (this.options.widthPre === -1 || this.options.widthPost === -1) {\n      this.options.rotateBefore = true;\n    }\n  }\n  if (this.options.input.autoOrient) {\n    this.options.orientBefore = true;\n  }\n  return this;\n}\n\n/**\n * Trim pixels from all edges that contain values similar to the given background colour, which defaults to that of the top-left pixel.\n *\n * Images with an alpha channel will use the combined bounding box of alpha and non-alpha channels.\n *\n * If the result of this operation would trim an image to nothing then no change is made.\n *\n * The `info` response Object will contain `trimOffsetLeft` and `trimOffsetTop` properties.\n *\n * @example\n * // Trim pixels with a colour similar to that of the top-left pixel.\n * await sharp(input)\n *   .trim()\n *   .toFile(output);\n *\n * @example\n * // Trim pixels with the exact same colour as that of the top-left pixel.\n * await sharp(input)\n *   .trim({\n *     threshold: 0\n *   })\n *   .toFile(output);\n *\n * @example\n * // Assume input is line art and trim only pixels with a similar colour to red.\n * const output = await sharp(input)\n *   .trim({\n *     background: \"#FF0000\",\n *     lineArt: true\n *   })\n *   .toBuffer();\n *\n * @example\n * // Trim all \"yellow-ish\" pixels, being more lenient with the higher threshold.\n * const output = await sharp(input)\n *   .trim({\n *     background: \"yellow\",\n *     threshold: 42,\n *   })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {string|Object} [options.background='top-left pixel'] - Background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to that of the top-left pixel.\n * @param {number} [options.threshold=10] - Allowed difference from the above colour, a positive number.\n * @param {boolean} [options.lineArt=false] - Does the input more closely resemble line art (e.g. vector) rather than being photographic?\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction trim (options) {\n  this.options.trimThreshold = 10;\n  if (is.defined(options)) {\n    if (is.object(options)) {\n      if (is.defined(options.background)) {\n        this._setBackgroundColourOption('trimBackground', options.background);\n      }\n      if (is.defined(options.threshold)) {\n        if (is.number(options.threshold) && options.threshold >= 0) {\n          this.options.trimThreshold = options.threshold;\n        } else {\n          throw is.invalidParameterError('threshold', 'positive number', options.threshold);\n        }\n      }\n      if (is.defined(options.lineArt)) {\n        this._setBooleanOption('trimLineArt', options.lineArt);\n      }\n    } else {\n      throw is.invalidParameterError('trim', 'object', options);\n    }\n  }\n  if (isRotationExpected(this.options)) {\n    this.options.rotateBefore = true;\n  }\n  return this;\n}\n\n/**\n * Decorate the Sharp prototype with resize-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    resize,\n    extend,\n    extract,\n    trim\n  });\n  // Class attributes\n  Sharp.gravity = gravity;\n  Sharp.strategy = strategy;\n  Sharp.kernel = kernel;\n  Sharp.fit = fit;\n  Sharp.position = position;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst is = require('./is');\n\n/**\n * Blend modes.\n * @member\n * @private\n */\nconst blend = {\n  clear: 'clear',\n  source: 'source',\n  over: 'over',\n  in: 'in',\n  out: 'out',\n  atop: 'atop',\n  dest: 'dest',\n  'dest-over': 'dest-over',\n  'dest-in': 'dest-in',\n  'dest-out': 'dest-out',\n  'dest-atop': 'dest-atop',\n  xor: 'xor',\n  add: 'add',\n  saturate: 'saturate',\n  multiply: 'multiply',\n  screen: 'screen',\n  overlay: 'overlay',\n  darken: 'darken',\n  lighten: 'lighten',\n  'colour-dodge': 'colour-dodge',\n  'color-dodge': 'colour-dodge',\n  'colour-burn': 'colour-burn',\n  'color-burn': 'colour-burn',\n  'hard-light': 'hard-light',\n  'soft-light': 'soft-light',\n  difference: 'difference',\n  exclusion: 'exclusion'\n};\n\n/**\n * Composite image(s) over the processed (resized, extracted etc.) image.\n *\n * The images to composite must be the same size or smaller than the processed image.\n * If both `top` and `left` options are provided, they take precedence over `gravity`.\n *\n * Other operations in the same processing pipeline (e.g. resize, rotate, flip,\n * flop, extract) will always be applied to the input image before composition.\n *\n * The `blend` option can be one of `clear`, `source`, `over`, `in`, `out`, `atop`,\n * `dest`, `dest-over`, `dest-in`, `dest-out`, `dest-atop`,\n * `xor`, `add`, `saturate`, `multiply`, `screen`, `overlay`, `darken`, `lighten`,\n * `colour-dodge`, `color-dodge`, `colour-burn`,`color-burn`,\n * `hard-light`, `soft-light`, `difference`, `exclusion`.\n *\n * More information about blend modes can be found at\n * https://www.libvips.org/API/current/enum.BlendMode.html\n * and https://www.cairographics.org/operators/\n *\n * @since 0.22.0\n *\n * @example\n * await sharp(background)\n *   .composite([\n *     { input: layer1, gravity: 'northwest' },\n *     { input: layer2, gravity: 'southeast' },\n *   ])\n *   .toFile('combined.png');\n *\n * @example\n * const output = await sharp('input.gif', { animated: true })\n *   .composite([\n *     { input: 'overlay.png', tile: true, blend: 'saturate' }\n *   ])\n *   .toBuffer();\n *\n * @example\n * sharp('input.png')\n *   .rotate(180)\n *   .resize(300)\n *   .flatten( { background: '#ff6600' } )\n *   .composite([{ input: 'overlay.png', gravity: 'southeast' }])\n *   .sharpen()\n *   .withMetadata()\n *   .webp( { quality: 90 } )\n *   .toBuffer()\n *   .then(function(outputBuffer) {\n *     // outputBuffer contains upside down, 300px wide, alpha channel flattened\n *     // onto orange background, composited with overlay.png with SE gravity,\n *     // sharpened, with metadata, 90% quality WebP image data. Phew!\n *   });\n *\n * @param {Object[]} images - Ordered list of images to composite\n * @param {Buffer|String} [images[].input] - Buffer containing image data, String containing the path to an image file, or Create object (see below)\n * @param {Object} [images[].input.create] - describes a blank overlay to be created.\n * @param {Number} [images[].input.create.width]\n * @param {Number} [images[].input.create.height]\n * @param {Number} [images[].input.create.channels] - 3-4\n * @param {String|Object} [images[].input.create.background] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @param {Object} [images[].input.text] - describes a new text image to be created.\n * @param {string} [images[].input.text.text] - text to render as a UTF-8 string. It can contain Pango markup, for example `<i>Le</i>Monde`.\n * @param {string} [images[].input.text.font] - font name to render with.\n * @param {string} [images[].input.text.fontfile] - absolute filesystem path to a font file that can be used by `font`.\n * @param {number} [images[].input.text.width=0] - integral number of pixels to word-wrap at. Lines of text wider than this will be broken at word boundaries.\n * @param {number} [images[].input.text.height=0] - integral number of pixels high. When defined, `dpi` will be ignored and the text will automatically fit the pixel resolution defined by `width` and `height`. Will be ignored if `width` is not specified or set to 0.\n * @param {string} [images[].input.text.align='left'] - text alignment (`'left'`, `'centre'`, `'center'`, `'right'`).\n * @param {boolean} [images[].input.text.justify=false] - set this to true to apply justification to the text.\n * @param {number} [images[].input.text.dpi=72] - the resolution (size) at which to render the text. Does not take effect if `height` is specified.\n * @param {boolean} [images[].input.text.rgba=false] - set this to true to enable RGBA output. This is useful for colour emoji rendering, or support for Pango markup features like `<span foreground=\"red\">Red!</span>`.\n * @param {number} [images[].input.text.spacing=0] - text line height in points. Will use the font line height if none is specified.\n * @param {Boolean} [images[].autoOrient=false] - set to true to use EXIF orientation data, if present, to orient the image.\n * @param {String} [images[].blend='over'] - how to blend this image with the image below.\n * @param {String} [images[].gravity='centre'] - gravity at which to place the overlay.\n * @param {Number} [images[].top] - the pixel offset from the top edge.\n * @param {Number} [images[].left] - the pixel offset from the left edge.\n * @param {Boolean} [images[].tile=false] - set to true to repeat the overlay image across the entire image with the given `gravity`.\n * @param {Boolean} [images[].premultiplied=false] - set to true to avoid premultiplying the image below. Equivalent to the `--premultiplied` vips option.\n * @param {Number} [images[].density=72] - number representing the DPI for vector overlay image.\n * @param {Object} [images[].raw] - describes overlay when using raw pixel data.\n * @param {Number} [images[].raw.width]\n * @param {Number} [images[].raw.height]\n * @param {Number} [images[].raw.channels]\n * @param {boolean} [images[].animated=false] - Set to `true` to read all frames/pages of an animated image.\n * @param {string} [images[].failOn='warning'] - @see {@link /api-constructor/ constructor parameters}\n * @param {number|boolean} [images[].limitInputPixels=268402689] - @see {@link /api-constructor/ constructor parameters}\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction composite (images) {\n  if (!Array.isArray(images)) {\n    throw is.invalidParameterError('images to composite', 'array', images);\n  }\n  this.options.composite = images.map(image => {\n    if (!is.object(image)) {\n      throw is.invalidParameterError('image to composite', 'object', image);\n    }\n    const inputOptions = this._inputOptionsFromObject(image);\n    const composite = {\n      input: this._createInputDescriptor(image.input, inputOptions, { allowStream: false }),\n      blend: 'over',\n      tile: false,\n      left: 0,\n      top: 0,\n      hasOffset: false,\n      gravity: 0,\n      premultiplied: false\n    };\n    if (is.defined(image.blend)) {\n      if (is.string(blend[image.blend])) {\n        composite.blend = blend[image.blend];\n      } else {\n        throw is.invalidParameterError('blend', 'valid blend name', image.blend);\n      }\n    }\n    if (is.defined(image.tile)) {\n      if (is.bool(image.tile)) {\n        composite.tile = image.tile;\n      } else {\n        throw is.invalidParameterError('tile', 'boolean', image.tile);\n      }\n    }\n    if (is.defined(image.left)) {\n      if (is.integer(image.left)) {\n        composite.left = image.left;\n      } else {\n        throw is.invalidParameterError('left', 'integer', image.left);\n      }\n    }\n    if (is.defined(image.top)) {\n      if (is.integer(image.top)) {\n        composite.top = image.top;\n      } else {\n        throw is.invalidParameterError('top', 'integer', image.top);\n      }\n    }\n    if (is.defined(image.top) !== is.defined(image.left)) {\n      throw new Error('Expected both left and top to be set');\n    } else {\n      composite.hasOffset = is.integer(image.top) && is.integer(image.left);\n    }\n    if (is.defined(image.gravity)) {\n      if (is.integer(image.gravity) && is.inRange(image.gravity, 0, 8)) {\n        composite.gravity = image.gravity;\n      } else if (is.string(image.gravity) && is.integer(this.constructor.gravity[image.gravity])) {\n        composite.gravity = this.constructor.gravity[image.gravity];\n      } else {\n        throw is.invalidParameterError('gravity', 'valid gravity', image.gravity);\n      }\n    }\n    if (is.defined(image.premultiplied)) {\n      if (is.bool(image.premultiplied)) {\n        composite.premultiplied = image.premultiplied;\n      } else {\n        throw is.invalidParameterError('premultiplied', 'boolean', image.premultiplied);\n      }\n    }\n    return composite;\n  });\n  return this;\n}\n\n/**\n * Decorate the Sharp prototype with composite-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Sharp.prototype.composite = composite;\n  Sharp.blend = blend;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst is = require('./is');\n\n/**\n * How accurate an operation should be.\n * @member\n * @private\n */\nconst vipsPrecision = {\n  integer: 'integer',\n  float: 'float',\n  approximate: 'approximate'\n};\n\n/**\n * Rotate the output image.\n *\n * The provided angle is converted to a valid positive degree rotation.\n * For example, `-450` will produce a 270 degree rotation.\n *\n * When rotating by an angle other than a multiple of 90,\n * the background colour can be provided with the `background` option.\n *\n * For backwards compatibility, if no angle is provided, `.autoOrient()` will be called.\n *\n * Only one rotation can occur per pipeline (aside from an initial call without\n * arguments to orient via EXIF data). Previous calls to `rotate` in the same\n * pipeline will be ignored.\n *\n * Multi-page images can only be rotated by 180 degrees.\n *\n * Method order is important when rotating, resizing and/or extracting regions,\n * for example `.rotate(x).extract(y)` will produce a different result to `.extract(y).rotate(x)`.\n *\n * @example\n * const rotateThenResize = await sharp(input)\n *   .rotate(90)\n *   .resize({ width: 16, height: 8, fit: 'fill' })\n *   .toBuffer();\n * const resizeThenRotate = await sharp(input)\n *   .resize({ width: 16, height: 8, fit: 'fill' })\n *   .rotate(90)\n *   .toBuffer();\n *\n * @param {number} [angle=auto] angle of rotation.\n * @param {Object} [options] - if present, is an Object with optional attributes.\n * @param {string|Object} [options.background=\"#000000\"] parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction rotate (angle, options) {\n  if (!is.defined(angle)) {\n    return this.autoOrient();\n  }\n  if (this.options.angle || this.options.rotationAngle) {\n    this.options.debuglog('ignoring previous rotate options');\n    this.options.angle = 0;\n    this.options.rotationAngle = 0;\n  }\n  if (is.integer(angle) && !(angle % 90)) {\n    this.options.angle = angle;\n  } else if (is.number(angle)) {\n    this.options.rotationAngle = angle;\n    if (is.object(options) && options.background) {\n      this._setBackgroundColourOption('rotationBackground', options.background);\n    }\n  } else {\n    throw is.invalidParameterError('angle', 'numeric', angle);\n  }\n  return this;\n}\n\n/**\n * Auto-orient based on the EXIF `Orientation` tag, then remove the tag.\n * Mirroring is supported and may infer the use of a flip operation.\n *\n * Previous or subsequent use of `rotate(angle)` and either `flip()` or `flop()`\n * will logically occur after auto-orientation, regardless of call order.\n *\n * @example\n * const output = await sharp(input).autoOrient().toBuffer();\n *\n * @example\n * const pipeline = sharp()\n *   .autoOrient()\n *   .resize(null, 200)\n *   .toBuffer(function (err, outputBuffer, info) {\n *     // outputBuffer contains 200px high JPEG image data,\n *     // auto-oriented using EXIF Orientation tag\n *     // info.width and info.height contain the dimensions of the resized image\n *   });\n * readableStream.pipe(pipeline);\n *\n * @returns {Sharp}\n */\nfunction autoOrient () {\n  this.options.input.autoOrient = true;\n  return this;\n}\n\n/**\n * Mirror the image vertically (up-down) about the x-axis.\n * This always occurs before rotation, if any.\n *\n * This operation does not work correctly with multi-page images.\n *\n * @example\n * const output = await sharp(input).flip().toBuffer();\n *\n * @param {Boolean} [flip=true]\n * @returns {Sharp}\n */\nfunction flip (flip) {\n  this.options.flip = is.bool(flip) ? flip : true;\n  return this;\n}\n\n/**\n * Mirror the image horizontally (left-right) about the y-axis.\n * This always occurs before rotation, if any.\n *\n * @example\n * const output = await sharp(input).flop().toBuffer();\n *\n * @param {Boolean} [flop=true]\n * @returns {Sharp}\n */\nfunction flop (flop) {\n  this.options.flop = is.bool(flop) ? flop : true;\n  return this;\n}\n\n/**\n * Perform an affine transform on an image. This operation will always occur after resizing, extraction and rotation, if any.\n *\n * You must provide an array of length 4 or a 2x2 affine transformation matrix.\n * By default, new pixels are filled with a black background. You can provide a background colour with the `background` option.\n * A particular interpolator may also be specified. Set the `interpolator` option to an attribute of the `sharp.interpolators` Object e.g. `sharp.interpolators.nohalo`.\n *\n * In the case of a 2x2 matrix, the transform is:\n * - X = `matrix[0, 0]` \\* (x + `idx`) + `matrix[0, 1]` \\* (y + `idy`) + `odx`\n * - Y = `matrix[1, 0]` \\* (x + `idx`) + `matrix[1, 1]` \\* (y + `idy`) + `ody`\n *\n * where:\n * - x and y are the coordinates in input image.\n * - X and Y are the coordinates in output image.\n * - (0,0) is the upper left corner.\n *\n * @since 0.27.0\n *\n * @example\n * const pipeline = sharp()\n *   .affine([[1, 0.3], [0.1, 0.7]], {\n *      background: 'white',\n *      interpolator: sharp.interpolators.nohalo\n *   })\n *   .toBuffer((err, outputBuffer, info) => {\n *      // outputBuffer contains the transformed image\n *      // info.width and info.height contain the new dimensions\n *   });\n *\n * inputStream\n *   .pipe(pipeline);\n *\n * @param {Array<Array<number>>|Array<number>} matrix - affine transformation matrix\n * @param {Object} [options] - if present, is an Object with optional attributes.\n * @param {String|Object} [options.background=\"#000000\"] - parsed by the [color](https://www.npmjs.org/package/color) module to extract values for red, green, blue and alpha.\n * @param {Number} [options.idx=0] - input horizontal offset\n * @param {Number} [options.idy=0] - input vertical offset\n * @param {Number} [options.odx=0] - output horizontal offset\n * @param {Number} [options.ody=0] - output vertical offset\n * @param {String} [options.interpolator=sharp.interpolators.bicubic] - interpolator\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction affine (matrix, options) {\n  const flatMatrix = [].concat(...matrix);\n  if (flatMatrix.length === 4 && flatMatrix.every(is.number)) {\n    this.options.affineMatrix = flatMatrix;\n  } else {\n    throw is.invalidParameterError('matrix', '1x4 or 2x2 array', matrix);\n  }\n\n  if (is.defined(options)) {\n    if (is.object(options)) {\n      this._setBackgroundColourOption('affineBackground', options.background);\n      if (is.defined(options.idx)) {\n        if (is.number(options.idx)) {\n          this.options.affineIdx = options.idx;\n        } else {\n          throw is.invalidParameterError('options.idx', 'number', options.idx);\n        }\n      }\n      if (is.defined(options.idy)) {\n        if (is.number(options.idy)) {\n          this.options.affineIdy = options.idy;\n        } else {\n          throw is.invalidParameterError('options.idy', 'number', options.idy);\n        }\n      }\n      if (is.defined(options.odx)) {\n        if (is.number(options.odx)) {\n          this.options.affineOdx = options.odx;\n        } else {\n          throw is.invalidParameterError('options.odx', 'number', options.odx);\n        }\n      }\n      if (is.defined(options.ody)) {\n        if (is.number(options.ody)) {\n          this.options.affineOdy = options.ody;\n        } else {\n          throw is.invalidParameterError('options.ody', 'number', options.ody);\n        }\n      }\n      if (is.defined(options.interpolator)) {\n        if (is.inArray(options.interpolator, Object.values(this.constructor.interpolators))) {\n          this.options.affineInterpolator = options.interpolator;\n        } else {\n          throw is.invalidParameterError('options.interpolator', 'valid interpolator name', options.interpolator);\n        }\n      }\n    } else {\n      throw is.invalidParameterError('options', 'object', options);\n    }\n  }\n\n  return this;\n}\n\n/**\n * Sharpen the image.\n *\n * When used without parameters, performs a fast, mild sharpen of the output image.\n *\n * When a `sigma` is provided, performs a slower, more accurate sharpen of the L channel in the LAB colour space.\n * Fine-grained control over the level of sharpening in \"flat\" (m1) and \"jagged\" (m2) areas is available.\n *\n * See {@link https://www.libvips.org/API/current/method.Image.sharpen.html libvips sharpen} operation.\n *\n * @example\n * const data = await sharp(input).sharpen().toBuffer();\n *\n * @example\n * const data = await sharp(input).sharpen({ sigma: 2 }).toBuffer();\n *\n * @example\n * const data = await sharp(input)\n *   .sharpen({\n *     sigma: 2,\n *     m1: 0,\n *     m2: 3,\n *     x1: 3,\n *     y2: 15,\n *     y3: 15,\n *   })\n *   .toBuffer();\n *\n * @param {Object|number} [options] - if present, is an Object with attributes\n * @param {number} [options.sigma] - the sigma of the Gaussian mask, where `sigma = 1 + radius / 2`, between 0.000001 and 10\n * @param {number} [options.m1=1.0] - the level of sharpening to apply to \"flat\" areas, between 0 and 1000000\n * @param {number} [options.m2=2.0] - the level of sharpening to apply to \"jagged\" areas, between 0 and 1000000\n * @param {number} [options.x1=2.0] - threshold between \"flat\" and \"jagged\", between 0 and 1000000\n * @param {number} [options.y2=10.0] - maximum amount of brightening, between 0 and 1000000\n * @param {number} [options.y3=20.0] - maximum amount of darkening, between 0 and 1000000\n * @param {number} [flat] - (deprecated) see `options.m1`.\n * @param {number} [jagged] - (deprecated) see `options.m2`.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction sharpen (options, flat, jagged) {\n  if (!is.defined(options)) {\n    // No arguments: default to mild sharpen\n    this.options.sharpenSigma = -1;\n  } else if (is.bool(options)) {\n    // Deprecated boolean argument: apply mild sharpen?\n    this.options.sharpenSigma = options ? -1 : 0;\n  } else if (is.number(options) && is.inRange(options, 0.01, 10000)) {\n    // Deprecated numeric argument: specific sigma\n    this.options.sharpenSigma = options;\n    // Deprecated control over flat areas\n    if (is.defined(flat)) {\n      if (is.number(flat) && is.inRange(flat, 0, 10000)) {\n        this.options.sharpenM1 = flat;\n      } else {\n        throw is.invalidParameterError('flat', 'number between 0 and 10000', flat);\n      }\n    }\n    // Deprecated control over jagged areas\n    if (is.defined(jagged)) {\n      if (is.number(jagged) && is.inRange(jagged, 0, 10000)) {\n        this.options.sharpenM2 = jagged;\n      } else {\n        throw is.invalidParameterError('jagged', 'number between 0 and 10000', jagged);\n      }\n    }\n  } else if (is.plainObject(options)) {\n    if (is.number(options.sigma) && is.inRange(options.sigma, 0.000001, 10)) {\n      this.options.sharpenSigma = options.sigma;\n    } else {\n      throw is.invalidParameterError('options.sigma', 'number between 0.000001 and 10', options.sigma);\n    }\n    if (is.defined(options.m1)) {\n      if (is.number(options.m1) && is.inRange(options.m1, 0, 1000000)) {\n        this.options.sharpenM1 = options.m1;\n      } else {\n        throw is.invalidParameterError('options.m1', 'number between 0 and 1000000', options.m1);\n      }\n    }\n    if (is.defined(options.m2)) {\n      if (is.number(options.m2) && is.inRange(options.m2, 0, 1000000)) {\n        this.options.sharpenM2 = options.m2;\n      } else {\n        throw is.invalidParameterError('options.m2', 'number between 0 and 1000000', options.m2);\n      }\n    }\n    if (is.defined(options.x1)) {\n      if (is.number(options.x1) && is.inRange(options.x1, 0, 1000000)) {\n        this.options.sharpenX1 = options.x1;\n      } else {\n        throw is.invalidParameterError('options.x1', 'number between 0 and 1000000', options.x1);\n      }\n    }\n    if (is.defined(options.y2)) {\n      if (is.number(options.y2) && is.inRange(options.y2, 0, 1000000)) {\n        this.options.sharpenY2 = options.y2;\n      } else {\n        throw is.invalidParameterError('options.y2', 'number between 0 and 1000000', options.y2);\n      }\n    }\n    if (is.defined(options.y3)) {\n      if (is.number(options.y3) && is.inRange(options.y3, 0, 1000000)) {\n        this.options.sharpenY3 = options.y3;\n      } else {\n        throw is.invalidParameterError('options.y3', 'number between 0 and 1000000', options.y3);\n      }\n    }\n  } else {\n    throw is.invalidParameterError('sigma', 'number between 0.01 and 10000', options);\n  }\n  return this;\n}\n\n/**\n * Apply median filter.\n * When used without parameters the default window is 3x3.\n *\n * @example\n * const output = await sharp(input).median().toBuffer();\n *\n * @example\n * const output = await sharp(input).median(5).toBuffer();\n *\n * @param {number} [size=3] square mask size: size x size\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction median (size) {\n  if (!is.defined(size)) {\n    // No arguments: default to 3x3\n    this.options.medianSize = 3;\n  } else if (is.integer(size) && is.inRange(size, 1, 1000)) {\n    // Numeric argument: specific sigma\n    this.options.medianSize = size;\n  } else {\n    throw is.invalidParameterError('size', 'integer between 1 and 1000', size);\n  }\n  return this;\n}\n\n/**\n * Blur the image.\n *\n * When used without parameters, performs a fast 3x3 box blur (equivalent to a box linear filter).\n *\n * When a `sigma` is provided, performs a slower, more accurate Gaussian blur.\n *\n * @example\n * const boxBlurred = await sharp(input)\n *   .blur()\n *   .toBuffer();\n *\n * @example\n * const gaussianBlurred = await sharp(input)\n *   .blur(5)\n *   .toBuffer();\n *\n * @param {Object|number|Boolean} [options]\n * @param {number} [options.sigma] a value between 0.3 and 1000 representing the sigma of the Gaussian mask, where `sigma = 1 + radius / 2`.\n * @param {string} [options.precision='integer'] How accurate the operation should be, one of: integer, float, approximate.\n * @param {number} [options.minAmplitude=0.2] A value between 0.001 and 1. A smaller value will generate a larger, more accurate mask.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction blur (options) {\n  let sigma;\n  if (is.number(options)) {\n    sigma = options;\n  } else if (is.plainObject(options)) {\n    if (!is.number(options.sigma)) {\n      throw is.invalidParameterError('options.sigma', 'number between 0.3 and 1000', sigma);\n    }\n    sigma = options.sigma;\n    if ('precision' in options) {\n      if (is.string(vipsPrecision[options.precision])) {\n        this.options.precision = vipsPrecision[options.precision];\n      } else {\n        throw is.invalidParameterError('precision', 'one of: integer, float, approximate', options.precision);\n      }\n    }\n    if ('minAmplitude' in options) {\n      if (is.number(options.minAmplitude) && is.inRange(options.minAmplitude, 0.001, 1)) {\n        this.options.minAmpl = options.minAmplitude;\n      } else {\n        throw is.invalidParameterError('minAmplitude', 'number between 0.001 and 1', options.minAmplitude);\n      }\n    }\n  }\n\n  if (!is.defined(options)) {\n    // No arguments: default to mild blur\n    this.options.blurSigma = -1;\n  } else if (is.bool(options)) {\n    // Boolean argument: apply mild blur?\n    this.options.blurSigma = options ? -1 : 0;\n  } else if (is.number(sigma) && is.inRange(sigma, 0.3, 1000)) {\n    // Numeric argument: specific sigma\n    this.options.blurSigma = sigma;\n  } else {\n    throw is.invalidParameterError('sigma', 'number between 0.3 and 1000', sigma);\n  }\n\n  return this;\n}\n\n/**\n * Expand foreground objects using the dilate morphological operator.\n *\n * @example\n * const output = await sharp(input)\n *   .dilate()\n *   .toBuffer();\n *\n * @param {Number} [width=1] dilation width in pixels.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction dilate (width) {\n  if (!is.defined(width)) {\n    this.options.dilateWidth = 1;\n  } else if (is.integer(width) && width > 0) {\n    this.options.dilateWidth = width;\n  } else {\n    throw is.invalidParameterError('dilate', 'positive integer', dilate);\n  }\n  return this;\n}\n\n/**\n * Shrink foreground objects using the erode morphological operator.\n *\n * @example\n * const output = await sharp(input)\n *   .erode()\n *   .toBuffer();\n *\n * @param {Number} [width=1] erosion width in pixels.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction erode (width) {\n  if (!is.defined(width)) {\n    this.options.erodeWidth = 1;\n  } else if (is.integer(width) && width > 0) {\n    this.options.erodeWidth = width;\n  } else {\n    throw is.invalidParameterError('erode', 'positive integer', erode);\n  }\n  return this;\n}\n\n/**\n * Merge alpha transparency channel, if any, with a background, then remove the alpha channel.\n *\n * See also {@link /api-channel#removealpha removeAlpha}.\n *\n * @example\n * await sharp(rgbaInput)\n *   .flatten({ background: '#F0A703' })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {string|Object} [options.background={r: 0, g: 0, b: 0}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to black.\n * @returns {Sharp}\n */\nfunction flatten (options) {\n  this.options.flatten = is.bool(options) ? options : true;\n  if (is.object(options)) {\n    this._setBackgroundColourOption('flattenBackground', options.background);\n  }\n  return this;\n}\n\n/**\n * Ensure the image has an alpha channel\n * with all white pixel values made fully transparent.\n *\n * Existing alpha channel values for non-white pixels remain unchanged.\n *\n * This feature is experimental and the API may change.\n *\n * @since 0.32.1\n *\n * @example\n * await sharp(rgbInput)\n *   .unflatten()\n *   .toBuffer();\n *\n * @example\n * await sharp(rgbInput)\n *   .threshold(128, { grayscale: false }) // converter bright pixels to white\n *   .unflatten()\n *   .toBuffer();\n */\nfunction unflatten () {\n  this.options.unflatten = true;\n  return this;\n}\n\n/**\n * Apply a gamma correction by reducing the encoding (darken) pre-resize at a factor of `1/gamma`\n * then increasing the encoding (brighten) post-resize at a factor of `gamma`.\n * This can improve the perceived brightness of a resized image in non-linear colour spaces.\n * JPEG and WebP input images will not take advantage of the shrink-on-load performance optimisation\n * when applying a gamma correction.\n *\n * Supply a second argument to use a different output gamma value, otherwise the first value is used in both cases.\n *\n * @param {number} [gamma=2.2] value between 1.0 and 3.0.\n * @param {number} [gammaOut] value between 1.0 and 3.0. (optional, defaults to same as `gamma`)\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction gamma (gamma, gammaOut) {\n  if (!is.defined(gamma)) {\n    // Default gamma correction of 2.2 (sRGB)\n    this.options.gamma = 2.2;\n  } else if (is.number(gamma) && is.inRange(gamma, 1, 3)) {\n    this.options.gamma = gamma;\n  } else {\n    throw is.invalidParameterError('gamma', 'number between 1.0 and 3.0', gamma);\n  }\n  if (!is.defined(gammaOut)) {\n    // Default gamma correction for output is same as input\n    this.options.gammaOut = this.options.gamma;\n  } else if (is.number(gammaOut) && is.inRange(gammaOut, 1, 3)) {\n    this.options.gammaOut = gammaOut;\n  } else {\n    throw is.invalidParameterError('gammaOut', 'number between 1.0 and 3.0', gammaOut);\n  }\n  return this;\n}\n\n/**\n * Produce the \"negative\" of the image.\n *\n * @example\n * const output = await sharp(input)\n *   .negate()\n *   .toBuffer();\n *\n * @example\n * const output = await sharp(input)\n *   .negate({ alpha: false })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {Boolean} [options.alpha=true] Whether or not to negate any alpha channel\n * @returns {Sharp}\n */\nfunction negate (options) {\n  this.options.negate = is.bool(options) ? options : true;\n  if (is.plainObject(options) && 'alpha' in options) {\n    if (!is.bool(options.alpha)) {\n      throw is.invalidParameterError('alpha', 'should be boolean value', options.alpha);\n    } else {\n      this.options.negateAlpha = options.alpha;\n    }\n  }\n  return this;\n}\n\n/**\n * Enhance output image contrast by stretching its luminance to cover a full dynamic range.\n *\n * Uses a histogram-based approach, taking a default range of 1% to 99% to reduce sensitivity to noise at the extremes.\n *\n * Luminance values below the `lower` percentile will be underexposed by clipping to zero.\n * Luminance values above the `upper` percentile will be overexposed by clipping to the max pixel value.\n *\n * @example\n * const output = await sharp(input)\n *   .normalise()\n *   .toBuffer();\n *\n * @example\n * const output = await sharp(input)\n *   .normalise({ lower: 0, upper: 100 })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {number} [options.lower=1] - Percentile below which luminance values will be underexposed.\n * @param {number} [options.upper=99] - Percentile above which luminance values will be overexposed.\n * @returns {Sharp}\n */\nfunction normalise (options) {\n  if (is.plainObject(options)) {\n    if (is.defined(options.lower)) {\n      if (is.number(options.lower) && is.inRange(options.lower, 0, 99)) {\n        this.options.normaliseLower = options.lower;\n      } else {\n        throw is.invalidParameterError('lower', 'number between 0 and 99', options.lower);\n      }\n    }\n    if (is.defined(options.upper)) {\n      if (is.number(options.upper) && is.inRange(options.upper, 1, 100)) {\n        this.options.normaliseUpper = options.upper;\n      } else {\n        throw is.invalidParameterError('upper', 'number between 1 and 100', options.upper);\n      }\n    }\n  }\n  if (this.options.normaliseLower >= this.options.normaliseUpper) {\n    throw is.invalidParameterError('range', 'lower to be less than upper',\n      `${this.options.normaliseLower} >= ${this.options.normaliseUpper}`);\n  }\n  this.options.normalise = true;\n  return this;\n}\n\n/**\n * Alternative spelling of normalise.\n *\n * @example\n * const output = await sharp(input)\n *   .normalize()\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {number} [options.lower=1] - Percentile below which luminance values will be underexposed.\n * @param {number} [options.upper=99] - Percentile above which luminance values will be overexposed.\n * @returns {Sharp}\n */\nfunction normalize (options) {\n  return this.normalise(options);\n}\n\n/**\n * Perform contrast limiting adaptive histogram equalization\n * {@link https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE CLAHE}.\n *\n * This will, in general, enhance the clarity of the image by bringing out darker details.\n *\n * @since 0.28.3\n *\n * @example\n * const output = await sharp(input)\n *   .clahe({\n *     width: 3,\n *     height: 3,\n *   })\n *   .toBuffer();\n *\n * @param {Object} options\n * @param {number} options.width - Integral width of the search window, in pixels.\n * @param {number} options.height - Integral height of the search window, in pixels.\n * @param {number} [options.maxSlope=3] - Integral level of brightening, between 0 and 100, where 0 disables contrast limiting.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction clahe (options) {\n  if (is.plainObject(options)) {\n    if (is.integer(options.width) && options.width > 0) {\n      this.options.claheWidth = options.width;\n    } else {\n      throw is.invalidParameterError('width', 'integer greater than zero', options.width);\n    }\n    if (is.integer(options.height) && options.height > 0) {\n      this.options.claheHeight = options.height;\n    } else {\n      throw is.invalidParameterError('height', 'integer greater than zero', options.height);\n    }\n    if (is.defined(options.maxSlope)) {\n      if (is.integer(options.maxSlope) && is.inRange(options.maxSlope, 0, 100)) {\n        this.options.claheMaxSlope = options.maxSlope;\n      } else {\n        throw is.invalidParameterError('maxSlope', 'integer between 0 and 100', options.maxSlope);\n      }\n    }\n  } else {\n    throw is.invalidParameterError('options', 'plain object', options);\n  }\n  return this;\n}\n\n/**\n * Convolve the image with the specified kernel.\n *\n * @example\n * sharp(input)\n *   .convolve({\n *     width: 3,\n *     height: 3,\n *     kernel: [-1, 0, 1, -2, 0, 2, -1, 0, 1]\n *   })\n *   .raw()\n *   .toBuffer(function(err, data, info) {\n *     // data contains the raw pixel data representing the convolution\n *     // of the input image with the horizontal Sobel operator\n *   });\n *\n * @param {Object} kernel\n * @param {number} kernel.width - width of the kernel in pixels.\n * @param {number} kernel.height - height of the kernel in pixels.\n * @param {Array<number>} kernel.kernel - Array of length `width*height` containing the kernel values.\n * @param {number} [kernel.scale=sum] - the scale of the kernel in pixels.\n * @param {number} [kernel.offset=0] - the offset of the kernel in pixels.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction convolve (kernel) {\n  if (!is.object(kernel) || !Array.isArray(kernel.kernel) ||\n      !is.integer(kernel.width) || !is.integer(kernel.height) ||\n      !is.inRange(kernel.width, 3, 1001) || !is.inRange(kernel.height, 3, 1001) ||\n      kernel.height * kernel.width !== kernel.kernel.length\n  ) {\n    // must pass in a kernel\n    throw new Error('Invalid convolution kernel');\n  }\n  // Default scale is sum of kernel values\n  if (!is.integer(kernel.scale)) {\n    kernel.scale = kernel.kernel.reduce((a, b) => a + b, 0);\n  }\n  // Clip scale to a minimum value of 1\n  if (kernel.scale < 1) {\n    kernel.scale = 1;\n  }\n  if (!is.integer(kernel.offset)) {\n    kernel.offset = 0;\n  }\n  this.options.convKernel = kernel;\n  return this;\n}\n\n/**\n * Any pixel value greater than or equal to the threshold value will be set to 255, otherwise it will be set to 0.\n * @param {number} [threshold=128] - a value in the range 0-255 representing the level at which the threshold will be applied.\n * @param {Object} [options]\n * @param {Boolean} [options.greyscale=true] - convert to single channel greyscale.\n * @param {Boolean} [options.grayscale=true] - alternative spelling for greyscale.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction threshold (threshold, options) {\n  if (!is.defined(threshold)) {\n    this.options.threshold = 128;\n  } else if (is.bool(threshold)) {\n    this.options.threshold = threshold ? 128 : 0;\n  } else if (is.integer(threshold) && is.inRange(threshold, 0, 255)) {\n    this.options.threshold = threshold;\n  } else {\n    throw is.invalidParameterError('threshold', 'integer between 0 and 255', threshold);\n  }\n  if (!is.object(options) || options.greyscale === true || options.grayscale === true) {\n    this.options.thresholdGrayscale = true;\n  } else {\n    this.options.thresholdGrayscale = false;\n  }\n  return this;\n}\n\n/**\n * Perform a bitwise boolean operation with operand image.\n *\n * This operation creates an output image where each pixel is the result of\n * the selected bitwise boolean `operation` between the corresponding pixels of the input images.\n *\n * @param {Buffer|string} operand - Buffer containing image data or string containing the path to an image file.\n * @param {string} operator - one of `and`, `or` or `eor` to perform that bitwise operation, like the C logic operators `&`, `|` and `^` respectively.\n * @param {Object} [options]\n * @param {Object} [options.raw] - describes operand when using raw pixel data.\n * @param {number} [options.raw.width]\n * @param {number} [options.raw.height]\n * @param {number} [options.raw.channels]\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction boolean (operand, operator, options) {\n  this.options.boolean = this._createInputDescriptor(operand, options);\n  if (is.string(operator) && is.inArray(operator, ['and', 'or', 'eor'])) {\n    this.options.booleanOp = operator;\n  } else {\n    throw is.invalidParameterError('operator', 'one of: and, or, eor', operator);\n  }\n  return this;\n}\n\n/**\n * Apply the linear formula `a` * input + `b` to the image to adjust image levels.\n *\n * When a single number is provided, it will be used for all image channels.\n * When an array of numbers is provided, the array length must match the number of channels.\n *\n * @example\n * await sharp(input)\n *   .linear(0.5, 2)\n *   .toBuffer();\n *\n * @example\n * await sharp(rgbInput)\n *   .linear(\n *     [0.25, 0.5, 0.75],\n *     [150, 100, 50]\n *   )\n *   .toBuffer();\n *\n * @param {(number|number[])} [a=[]] multiplier\n * @param {(number|number[])} [b=[]] offset\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction linear (a, b) {\n  if (!is.defined(a) && is.number(b)) {\n    a = 1.0;\n  } else if (is.number(a) && !is.defined(b)) {\n    b = 0.0;\n  }\n  if (!is.defined(a)) {\n    this.options.linearA = [];\n  } else if (is.number(a)) {\n    this.options.linearA = [a];\n  } else if (Array.isArray(a) && a.length && a.every(is.number)) {\n    this.options.linearA = a;\n  } else {\n    throw is.invalidParameterError('a', 'number or array of numbers', a);\n  }\n  if (!is.defined(b)) {\n    this.options.linearB = [];\n  } else if (is.number(b)) {\n    this.options.linearB = [b];\n  } else if (Array.isArray(b) && b.length && b.every(is.number)) {\n    this.options.linearB = b;\n  } else {\n    throw is.invalidParameterError('b', 'number or array of numbers', b);\n  }\n  if (this.options.linearA.length !== this.options.linearB.length) {\n    throw new Error('Expected a and b to be arrays of the same length');\n  }\n  return this;\n}\n\n/**\n * Recombine the image with the specified matrix.\n *\n * @since 0.21.1\n *\n * @example\n * sharp(input)\n *   .recomb([\n *    [0.3588, 0.7044, 0.1368],\n *    [0.2990, 0.5870, 0.1140],\n *    [0.2392, 0.4696, 0.0912],\n *   ])\n *   .raw()\n *   .toBuffer(function(err, data, info) {\n *     // data contains the raw pixel data after applying the matrix\n *     // With this example input, a sepia filter has been applied\n *   });\n *\n * @param {Array<Array<number>>} inputMatrix - 3x3 or 4x4 Recombination matrix\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction recomb (inputMatrix) {\n  if (!Array.isArray(inputMatrix)) {\n    throw is.invalidParameterError('inputMatrix', 'array', inputMatrix);\n  }\n  if (inputMatrix.length !== 3 && inputMatrix.length !== 4) {\n    throw is.invalidParameterError('inputMatrix', '3x3 or 4x4 array', inputMatrix.length);\n  }\n  const recombMatrix = inputMatrix.flat().map(Number);\n  if (recombMatrix.length !== 9 && recombMatrix.length !== 16) {\n    throw is.invalidParameterError('inputMatrix', 'cardinality of 9 or 16', recombMatrix.length);\n  }\n  this.options.recombMatrix = recombMatrix;\n  return this;\n}\n\n/**\n * Transforms the image using brightness, saturation, hue rotation, and lightness.\n * Brightness and lightness both operate on luminance, with the difference being that\n * brightness is multiplicative whereas lightness is additive.\n *\n * @since 0.22.1\n *\n * @example\n * // increase brightness by a factor of 2\n * const output = await sharp(input)\n *   .modulate({\n *     brightness: 2\n *   })\n *   .toBuffer();\n *\n * @example\n * // hue-rotate by 180 degrees\n * const output = await sharp(input)\n *   .modulate({\n *     hue: 180\n *   })\n *   .toBuffer();\n *\n * @example\n * // increase lightness by +50\n * const output = await sharp(input)\n *   .modulate({\n *     lightness: 50\n *   })\n *   .toBuffer();\n *\n * @example\n * // decrease brightness and saturation while also hue-rotating by 90 degrees\n * const output = await sharp(input)\n *   .modulate({\n *     brightness: 0.5,\n *     saturation: 0.5,\n *     hue: 90,\n *   })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {number} [options.brightness] Brightness multiplier\n * @param {number} [options.saturation] Saturation multiplier\n * @param {number} [options.hue] Degrees for hue rotation\n * @param {number} [options.lightness] Lightness addend\n * @returns {Sharp}\n */\nfunction modulate (options) {\n  if (!is.plainObject(options)) {\n    throw is.invalidParameterError('options', 'plain object', options);\n  }\n  if ('brightness' in options) {\n    if (is.number(options.brightness) && options.brightness >= 0) {\n      this.options.brightness = options.brightness;\n    } else {\n      throw is.invalidParameterError('brightness', 'number above zero', options.brightness);\n    }\n  }\n  if ('saturation' in options) {\n    if (is.number(options.saturation) && options.saturation >= 0) {\n      this.options.saturation = options.saturation;\n    } else {\n      throw is.invalidParameterError('saturation', 'number above zero', options.saturation);\n    }\n  }\n  if ('hue' in options) {\n    if (is.integer(options.hue)) {\n      this.options.hue = options.hue % 360;\n    } else {\n      throw is.invalidParameterError('hue', 'number', options.hue);\n    }\n  }\n  if ('lightness' in options) {\n    if (is.number(options.lightness)) {\n      this.options.lightness = options.lightness;\n    } else {\n      throw is.invalidParameterError('lightness', 'number', options.lightness);\n    }\n  }\n  return this;\n}\n\n/**\n * Decorate the Sharp prototype with operation-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    autoOrient,\n    rotate,\n    flip,\n    flop,\n    affine,\n    sharpen,\n    erode,\n    dilate,\n    median,\n    blur,\n    flatten,\n    unflatten,\n    gamma,\n    negate,\n    normalise,\n    normalize,\n    clahe,\n    convolve,\n    threshold,\n    boolean,\n    linear,\n    recomb,\n    modulate\n  });\n};\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// node_modules/color/index.js\nvar index_exports = {};\n__export(index_exports, {\n  default: () => index_default\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// node_modules/color-name/index.js\nvar colors = {\n  aliceblue: [240, 248, 255],\n  antiquewhite: [250, 235, 215],\n  aqua: [0, 255, 255],\n  aquamarine: [127, 255, 212],\n  azure: [240, 255, 255],\n  beige: [245, 245, 220],\n  bisque: [255, 228, 196],\n  black: [0, 0, 0],\n  blanchedalmond: [255, 235, 205],\n  blue: [0, 0, 255],\n  blueviolet: [138, 43, 226],\n  brown: [165, 42, 42],\n  burlywood: [222, 184, 135],\n  cadetblue: [95, 158, 160],\n  chartreuse: [127, 255, 0],\n  chocolate: [210, 105, 30],\n  coral: [255, 127, 80],\n  cornflowerblue: [100, 149, 237],\n  cornsilk: [255, 248, 220],\n  crimson: [220, 20, 60],\n  cyan: [0, 255, 255],\n  darkblue: [0, 0, 139],\n  darkcyan: [0, 139, 139],\n  darkgoldenrod: [184, 134, 11],\n  darkgray: [169, 169, 169],\n  darkgreen: [0, 100, 0],\n  darkgrey: [169, 169, 169],\n  darkkhaki: [189, 183, 107],\n  darkmagenta: [139, 0, 139],\n  darkolivegreen: [85, 107, 47],\n  darkorange: [255, 140, 0],\n  darkorchid: [153, 50, 204],\n  darkred: [139, 0, 0],\n  darksalmon: [233, 150, 122],\n  darkseagreen: [143, 188, 143],\n  darkslateblue: [72, 61, 139],\n  darkslategray: [47, 79, 79],\n  darkslategrey: [47, 79, 79],\n  darkturquoise: [0, 206, 209],\n  darkviolet: [148, 0, 211],\n  deeppink: [255, 20, 147],\n  deepskyblue: [0, 191, 255],\n  dimgray: [105, 105, 105],\n  dimgrey: [105, 105, 105],\n  dodgerblue: [30, 144, 255],\n  firebrick: [178, 34, 34],\n  floralwhite: [255, 250, 240],\n  forestgreen: [34, 139, 34],\n  fuchsia: [255, 0, 255],\n  gainsboro: [220, 220, 220],\n  ghostwhite: [248, 248, 255],\n  gold: [255, 215, 0],\n  goldenrod: [218, 165, 32],\n  gray: [128, 128, 128],\n  green: [0, 128, 0],\n  greenyellow: [173, 255, 47],\n  grey: [128, 128, 128],\n  honeydew: [240, 255, 240],\n  hotpink: [255, 105, 180],\n  indianred: [205, 92, 92],\n  indigo: [75, 0, 130],\n  ivory: [255, 255, 240],\n  khaki: [240, 230, 140],\n  lavender: [230, 230, 250],\n  lavenderblush: [255, 240, 245],\n  lawngreen: [124, 252, 0],\n  lemonchiffon: [255, 250, 205],\n  lightblue: [173, 216, 230],\n  lightcoral: [240, 128, 128],\n  lightcyan: [224, 255, 255],\n  lightgoldenrodyellow: [250, 250, 210],\n  lightgray: [211, 211, 211],\n  lightgreen: [144, 238, 144],\n  lightgrey: [211, 211, 211],\n  lightpink: [255, 182, 193],\n  lightsalmon: [255, 160, 122],\n  lightseagreen: [32, 178, 170],\n  lightskyblue: [135, 206, 250],\n  lightslategray: [119, 136, 153],\n  lightslategrey: [119, 136, 153],\n  lightsteelblue: [176, 196, 222],\n  lightyellow: [255, 255, 224],\n  lime: [0, 255, 0],\n  limegreen: [50, 205, 50],\n  linen: [250, 240, 230],\n  magenta: [255, 0, 255],\n  maroon: [128, 0, 0],\n  mediumaquamarine: [102, 205, 170],\n  mediumblue: [0, 0, 205],\n  mediumorchid: [186, 85, 211],\n  mediumpurple: [147, 112, 219],\n  mediumseagreen: [60, 179, 113],\n  mediumslateblue: [123, 104, 238],\n  mediumspringgreen: [0, 250, 154],\n  mediumturquoise: [72, 209, 204],\n  mediumvioletred: [199, 21, 133],\n  midnightblue: [25, 25, 112],\n  mintcream: [245, 255, 250],\n  mistyrose: [255, 228, 225],\n  moccasin: [255, 228, 181],\n  navajowhite: [255, 222, 173],\n  navy: [0, 0, 128],\n  oldlace: [253, 245, 230],\n  olive: [128, 128, 0],\n  olivedrab: [107, 142, 35],\n  orange: [255, 165, 0],\n  orangered: [255, 69, 0],\n  orchid: [218, 112, 214],\n  palegoldenrod: [238, 232, 170],\n  palegreen: [152, 251, 152],\n  paleturquoise: [175, 238, 238],\n  palevioletred: [219, 112, 147],\n  papayawhip: [255, 239, 213],\n  peachpuff: [255, 218, 185],\n  peru: [205, 133, 63],\n  pink: [255, 192, 203],\n  plum: [221, 160, 221],\n  powderblue: [176, 224, 230],\n  purple: [128, 0, 128],\n  rebeccapurple: [102, 51, 153],\n  red: [255, 0, 0],\n  rosybrown: [188, 143, 143],\n  royalblue: [65, 105, 225],\n  saddlebrown: [139, 69, 19],\n  salmon: [250, 128, 114],\n  sandybrown: [244, 164, 96],\n  seagreen: [46, 139, 87],\n  seashell: [255, 245, 238],\n  sienna: [160, 82, 45],\n  silver: [192, 192, 192],\n  skyblue: [135, 206, 235],\n  slateblue: [106, 90, 205],\n  slategray: [112, 128, 144],\n  slategrey: [112, 128, 144],\n  snow: [255, 250, 250],\n  springgreen: [0, 255, 127],\n  steelblue: [70, 130, 180],\n  tan: [210, 180, 140],\n  teal: [0, 128, 128],\n  thistle: [216, 191, 216],\n  tomato: [255, 99, 71],\n  turquoise: [64, 224, 208],\n  violet: [238, 130, 238],\n  wheat: [245, 222, 179],\n  white: [255, 255, 255],\n  whitesmoke: [245, 245, 245],\n  yellow: [255, 255, 0],\n  yellowgreen: [154, 205, 50]\n};\nfor (const key in colors) Object.freeze(colors[key]);\nvar color_name_default = Object.freeze(colors);\n\n// node_modules/color-string/index.js\nvar reverseNames = /* @__PURE__ */ Object.create(null);\nfor (const name in color_name_default) {\n  if (Object.hasOwn(color_name_default, name)) {\n    reverseNames[color_name_default[name]] = name;\n  }\n}\nvar cs = {\n  to: {},\n  get: {}\n};\ncs.get = function(string) {\n  const prefix = string.slice(0, 3).toLowerCase();\n  let value;\n  let model;\n  switch (prefix) {\n    case \"hsl\": {\n      value = cs.get.hsl(string);\n      model = \"hsl\";\n      break;\n    }\n    case \"hwb\": {\n      value = cs.get.hwb(string);\n      model = \"hwb\";\n      break;\n    }\n    default: {\n      value = cs.get.rgb(string);\n      model = \"rgb\";\n      break;\n    }\n  }\n  if (!value) {\n    return null;\n  }\n  return { model, value };\n};\ncs.get.rgb = function(string) {\n  if (!string) {\n    return null;\n  }\n  const abbr = /^#([a-f\\d]{3,4})$/i;\n  const hex = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i;\n  const rgba = /^rgba?\\(\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)\\s*(?:[\\s,|/]\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(%?)\\s*)?\\)$/i;\n  const per = /^rgba?\\(\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/i;\n  const keyword = /^(\\w+)$/;\n  let rgb = [0, 0, 0, 1];\n  let match;\n  let i;\n  let hexAlpha;\n  if (match = string.match(hex)) {\n    hexAlpha = match[2];\n    match = match[1];\n    for (i = 0; i < 3; i++) {\n      const i2 = i * 2;\n      rgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16);\n    }\n    if (hexAlpha) {\n      rgb[3] = Number.parseInt(hexAlpha, 16) / 255;\n    }\n  } else if (match = string.match(abbr)) {\n    match = match[1];\n    hexAlpha = match[3];\n    for (i = 0; i < 3; i++) {\n      rgb[i] = Number.parseInt(match[i] + match[i], 16);\n    }\n    if (hexAlpha) {\n      rgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255;\n    }\n  } else if (match = string.match(rgba)) {\n    for (i = 0; i < 3; i++) {\n      rgb[i] = Number.parseFloat(match[i + 1]);\n    }\n    if (match[4]) {\n      rgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n    }\n  } else if (match = string.match(per)) {\n    for (i = 0; i < 3; i++) {\n      rgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55);\n    }\n    if (match[4]) {\n      rgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n    }\n  } else if (match = string.toLowerCase().match(keyword)) {\n    if (match[1] === \"transparent\") {\n      return [0, 0, 0, 0];\n    }\n    if (!Object.hasOwn(color_name_default, match[1])) {\n      return null;\n    }\n    rgb = color_name_default[match[1]].slice();\n    rgb[3] = 1;\n    return rgb;\n  } else {\n    return null;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] = clamp(rgb[i], 0, 255);\n  }\n  rgb[3] = clamp(rgb[3], 0, 1);\n  return rgb;\n};\ncs.get.hsl = function(string) {\n  if (!string) {\n    return null;\n  }\n  const hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n  const match = string.match(hsl);\n  if (match) {\n    const alpha = Number.parseFloat(match[4]);\n    const h = (Number.parseFloat(match[1]) % 360 + 360) % 360;\n    const s = clamp(Number.parseFloat(match[2]), 0, 100);\n    const l = clamp(Number.parseFloat(match[3]), 0, 100);\n    const a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n    return [h, s, l, a];\n  }\n  return null;\n};\ncs.get.hwb = function(string) {\n  if (!string) {\n    return null;\n  }\n  const hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n  const match = string.match(hwb);\n  if (match) {\n    const alpha = Number.parseFloat(match[4]);\n    const h = (Number.parseFloat(match[1]) % 360 + 360) % 360;\n    const w = clamp(Number.parseFloat(match[2]), 0, 100);\n    const b = clamp(Number.parseFloat(match[3]), 0, 100);\n    const a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n    return [h, w, b, a];\n  }\n  return null;\n};\ncs.to.hex = function(...rgba) {\n  return \"#\" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? hexDouble(Math.round(rgba[3] * 255)) : \"\");\n};\ncs.to.rgb = function(...rgba) {\n  return rgba.length < 4 || rgba[3] === 1 ? \"rgb(\" + Math.round(rgba[0]) + \", \" + Math.round(rgba[1]) + \", \" + Math.round(rgba[2]) + \")\" : \"rgba(\" + Math.round(rgba[0]) + \", \" + Math.round(rgba[1]) + \", \" + Math.round(rgba[2]) + \", \" + rgba[3] + \")\";\n};\ncs.to.rgb.percent = function(...rgba) {\n  const r = Math.round(rgba[0] / 255 * 100);\n  const g = Math.round(rgba[1] / 255 * 100);\n  const b = Math.round(rgba[2] / 255 * 100);\n  return rgba.length < 4 || rgba[3] === 1 ? \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\" : \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + rgba[3] + \")\";\n};\ncs.to.hsl = function(...hsla) {\n  return hsla.length < 4 || hsla[3] === 1 ? \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\" : \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + hsla[3] + \")\";\n};\ncs.to.hwb = function(...hwba) {\n  let a = \"\";\n  if (hwba.length >= 4 && hwba[3] !== 1) {\n    a = \", \" + hwba[3];\n  }\n  return \"hwb(\" + hwba[0] + \", \" + hwba[1] + \"%, \" + hwba[2] + \"%\" + a + \")\";\n};\ncs.to.keyword = function(...rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n};\nfunction clamp(number_, min, max) {\n  return Math.min(Math.max(min, number_), max);\n}\nfunction hexDouble(number_) {\n  const string_ = Math.round(number_).toString(16).toUpperCase();\n  return string_.length < 2 ? \"0\" + string_ : string_;\n}\nvar color_string_default = cs;\n\n// node_modules/color-convert/conversions.js\nvar reverseKeywords = {};\nfor (const key of Object.keys(color_name_default)) {\n  reverseKeywords[color_name_default[key]] = key;\n}\nvar convert = {\n  rgb: { channels: 3, labels: \"rgb\" },\n  hsl: { channels: 3, labels: \"hsl\" },\n  hsv: { channels: 3, labels: \"hsv\" },\n  hwb: { channels: 3, labels: \"hwb\" },\n  cmyk: { channels: 4, labels: \"cmyk\" },\n  xyz: { channels: 3, labels: \"xyz\" },\n  lab: { channels: 3, labels: \"lab\" },\n  oklab: { channels: 3, labels: [\"okl\", \"oka\", \"okb\"] },\n  lch: { channels: 3, labels: \"lch\" },\n  oklch: { channels: 3, labels: [\"okl\", \"okc\", \"okh\"] },\n  hex: { channels: 1, labels: [\"hex\"] },\n  keyword: { channels: 1, labels: [\"keyword\"] },\n  ansi16: { channels: 1, labels: [\"ansi16\"] },\n  ansi256: { channels: 1, labels: [\"ansi256\"] },\n  hcg: { channels: 3, labels: [\"h\", \"c\", \"g\"] },\n  apple: { channels: 3, labels: [\"r16\", \"g16\", \"b16\"] },\n  gray: { channels: 1, labels: [\"gray\"] }\n};\nvar conversions_default = convert;\nvar LAB_FT = (6 / 29) ** 3;\nfunction srgbNonlinearTransform(c) {\n  const cc = c > 31308e-7 ? 1.055 * c ** (1 / 2.4) - 0.055 : c * 12.92;\n  return Math.min(Math.max(0, cc), 1);\n}\nfunction srgbNonlinearTransformInv(c) {\n  return c > 0.04045 ? ((c + 0.055) / 1.055) ** 2.4 : c / 12.92;\n}\nfor (const model of Object.keys(convert)) {\n  if (!(\"channels\" in convert[model])) {\n    throw new Error(\"missing channels property: \" + model);\n  }\n  if (!(\"labels\" in convert[model])) {\n    throw new Error(\"missing channel labels property: \" + model);\n  }\n  if (convert[model].labels.length !== convert[model].channels) {\n    throw new Error(\"channel and label counts mismatch: \" + model);\n  }\n  const { channels, labels } = convert[model];\n  delete convert[model].channels;\n  delete convert[model].labels;\n  Object.defineProperty(convert[model], \"channels\", { value: channels });\n  Object.defineProperty(convert[model], \"labels\", { value: labels });\n}\nconvert.rgb.hsl = function(rgb) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const min = Math.min(r, g, b);\n  const max = Math.max(r, g, b);\n  const delta = max - min;\n  let h;\n  let s;\n  switch (max) {\n    case min: {\n      h = 0;\n      break;\n    }\n    case r: {\n      h = (g - b) / delta;\n      break;\n    }\n    case g: {\n      h = 2 + (b - r) / delta;\n      break;\n    }\n    case b: {\n      h = 4 + (r - g) / delta;\n      break;\n    }\n  }\n  h = Math.min(h * 60, 360);\n  if (h < 0) {\n    h += 360;\n  }\n  const l = (min + max) / 2;\n  if (max === min) {\n    s = 0;\n  } else if (l <= 0.5) {\n    s = delta / (max + min);\n  } else {\n    s = delta / (2 - max - min);\n  }\n  return [h, s * 100, l * 100];\n};\nconvert.rgb.hsv = function(rgb) {\n  let rdif;\n  let gdif;\n  let bdif;\n  let h;\n  let s;\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const v = Math.max(r, g, b);\n  const diff = v - Math.min(r, g, b);\n  const diffc = function(c) {\n    return (v - c) / 6 / diff + 1 / 2;\n  };\n  if (diff === 0) {\n    h = 0;\n    s = 0;\n  } else {\n    s = diff / v;\n    rdif = diffc(r);\n    gdif = diffc(g);\n    bdif = diffc(b);\n    switch (v) {\n      case r: {\n        h = bdif - gdif;\n        break;\n      }\n      case g: {\n        h = 1 / 3 + rdif - bdif;\n        break;\n      }\n      case b: {\n        h = 2 / 3 + gdif - rdif;\n        break;\n      }\n    }\n    if (h < 0) {\n      h += 1;\n    } else if (h > 1) {\n      h -= 1;\n    }\n  }\n  return [\n    h * 360,\n    s * 100,\n    v * 100\n  ];\n};\nconvert.rgb.hwb = function(rgb) {\n  const r = rgb[0];\n  const g = rgb[1];\n  let b = rgb[2];\n  const h = convert.rgb.hsl(rgb)[0];\n  const w = 1 / 255 * Math.min(r, Math.min(g, b));\n  b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n  return [h, w * 100, b * 100];\n};\nconvert.rgb.oklab = function(rgb) {\n  const r = srgbNonlinearTransformInv(rgb[0] / 255);\n  const g = srgbNonlinearTransformInv(rgb[1] / 255);\n  const b = srgbNonlinearTransformInv(rgb[2] / 255);\n  const lp = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n  const mp = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n  const sp = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n  const l = 0.2104542553 * lp + 0.793617785 * mp - 0.0040720468 * sp;\n  const aa = 1.9779984951 * lp - 2.428592205 * mp + 0.4505937099 * sp;\n  const bb = 0.0259040371 * lp + 0.7827717662 * mp - 0.808675766 * sp;\n  return [l * 100, aa * 100, bb * 100];\n};\nconvert.rgb.cmyk = function(rgb) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const k = Math.min(1 - r, 1 - g, 1 - b);\n  const c = (1 - r - k) / (1 - k) || 0;\n  const m = (1 - g - k) / (1 - k) || 0;\n  const y = (1 - b - k) / (1 - k) || 0;\n  return [c * 100, m * 100, y * 100, k * 100];\n};\nfunction comparativeDistance(x, y) {\n  return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2;\n}\nconvert.rgb.keyword = function(rgb) {\n  const reversed = reverseKeywords[rgb];\n  if (reversed) {\n    return reversed;\n  }\n  let currentClosestDistance = Number.POSITIVE_INFINITY;\n  let currentClosestKeyword;\n  for (const keyword of Object.keys(color_name_default)) {\n    const value = color_name_default[keyword];\n    const distance = comparativeDistance(rgb, value);\n    if (distance < currentClosestDistance) {\n      currentClosestDistance = distance;\n      currentClosestKeyword = keyword;\n    }\n  }\n  return currentClosestKeyword;\n};\nconvert.keyword.rgb = function(keyword) {\n  return [...color_name_default[keyword]];\n};\nconvert.rgb.xyz = function(rgb) {\n  const r = srgbNonlinearTransformInv(rgb[0] / 255);\n  const g = srgbNonlinearTransformInv(rgb[1] / 255);\n  const b = srgbNonlinearTransformInv(rgb[2] / 255);\n  const x = r * 0.4124564 + g * 0.3575761 + b * 0.1804375;\n  const y = r * 0.2126729 + g * 0.7151522 + b * 0.072175;\n  const z = r * 0.0193339 + g * 0.119192 + b * 0.9503041;\n  return [x * 100, y * 100, z * 100];\n};\nconvert.rgb.lab = function(rgb) {\n  const xyz = convert.rgb.xyz(rgb);\n  let x = xyz[0];\n  let y = xyz[1];\n  let z = xyz[2];\n  x /= 95.047;\n  y /= 100;\n  z /= 108.883;\n  x = x > LAB_FT ? x ** (1 / 3) : 7.787 * x + 16 / 116;\n  y = y > LAB_FT ? y ** (1 / 3) : 7.787 * y + 16 / 116;\n  z = z > LAB_FT ? z ** (1 / 3) : 7.787 * z + 16 / 116;\n  const l = 116 * y - 16;\n  const a = 500 * (x - y);\n  const b = 200 * (y - z);\n  return [l, a, b];\n};\nconvert.hsl.rgb = function(hsl) {\n  const h = hsl[0] / 360;\n  const s = hsl[1] / 100;\n  const l = hsl[2] / 100;\n  let t3;\n  let value;\n  if (s === 0) {\n    value = l * 255;\n    return [value, value, value];\n  }\n  const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n  const t1 = 2 * l - t2;\n  const rgb = [0, 0, 0];\n  for (let i = 0; i < 3; i++) {\n    t3 = h + 1 / 3 * -(i - 1);\n    if (t3 < 0) {\n      t3++;\n    }\n    if (t3 > 1) {\n      t3--;\n    }\n    if (6 * t3 < 1) {\n      value = t1 + (t2 - t1) * 6 * t3;\n    } else if (2 * t3 < 1) {\n      value = t2;\n    } else if (3 * t3 < 2) {\n      value = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n    } else {\n      value = t1;\n    }\n    rgb[i] = value * 255;\n  }\n  return rgb;\n};\nconvert.hsl.hsv = function(hsl) {\n  const h = hsl[0];\n  let s = hsl[1] / 100;\n  let l = hsl[2] / 100;\n  let smin = s;\n  const lmin = Math.max(l, 0.01);\n  l *= 2;\n  s *= l <= 1 ? l : 2 - l;\n  smin *= lmin <= 1 ? lmin : 2 - lmin;\n  const v = (l + s) / 2;\n  const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s);\n  return [h, sv * 100, v * 100];\n};\nconvert.hsv.rgb = function(hsv) {\n  const h = hsv[0] / 60;\n  const s = hsv[1] / 100;\n  let v = hsv[2] / 100;\n  const hi = Math.floor(h) % 6;\n  const f = h - Math.floor(h);\n  const p = 255 * v * (1 - s);\n  const q = 255 * v * (1 - s * f);\n  const t = 255 * v * (1 - s * (1 - f));\n  v *= 255;\n  switch (hi) {\n    case 0: {\n      return [v, t, p];\n    }\n    case 1: {\n      return [q, v, p];\n    }\n    case 2: {\n      return [p, v, t];\n    }\n    case 3: {\n      return [p, q, v];\n    }\n    case 4: {\n      return [t, p, v];\n    }\n    case 5: {\n      return [v, p, q];\n    }\n  }\n};\nconvert.hsv.hsl = function(hsv) {\n  const h = hsv[0];\n  const s = hsv[1] / 100;\n  const v = hsv[2] / 100;\n  const vmin = Math.max(v, 0.01);\n  let sl;\n  let l;\n  l = (2 - s) * v;\n  const lmin = (2 - s) * vmin;\n  sl = s * vmin;\n  sl /= lmin <= 1 ? lmin : 2 - lmin;\n  sl = sl || 0;\n  l /= 2;\n  return [h, sl * 100, l * 100];\n};\nconvert.hwb.rgb = function(hwb) {\n  const h = hwb[0] / 360;\n  let wh = hwb[1] / 100;\n  let bl = hwb[2] / 100;\n  const ratio = wh + bl;\n  let f;\n  if (ratio > 1) {\n    wh /= ratio;\n    bl /= ratio;\n  }\n  const i = Math.floor(6 * h);\n  const v = 1 - bl;\n  f = 6 * h - i;\n  if ((i & 1) !== 0) {\n    f = 1 - f;\n  }\n  const n = wh + f * (v - wh);\n  let r;\n  let g;\n  let b;\n  switch (i) {\n    default:\n    case 6:\n    case 0: {\n      r = v;\n      g = n;\n      b = wh;\n      break;\n    }\n    case 1: {\n      r = n;\n      g = v;\n      b = wh;\n      break;\n    }\n    case 2: {\n      r = wh;\n      g = v;\n      b = n;\n      break;\n    }\n    case 3: {\n      r = wh;\n      g = n;\n      b = v;\n      break;\n    }\n    case 4: {\n      r = n;\n      g = wh;\n      b = v;\n      break;\n    }\n    case 5: {\n      r = v;\n      g = wh;\n      b = n;\n      break;\n    }\n  }\n  return [r * 255, g * 255, b * 255];\n};\nconvert.cmyk.rgb = function(cmyk) {\n  const c = cmyk[0] / 100;\n  const m = cmyk[1] / 100;\n  const y = cmyk[2] / 100;\n  const k = cmyk[3] / 100;\n  const r = 1 - Math.min(1, c * (1 - k) + k);\n  const g = 1 - Math.min(1, m * (1 - k) + k);\n  const b = 1 - Math.min(1, y * (1 - k) + k);\n  return [r * 255, g * 255, b * 255];\n};\nconvert.xyz.rgb = function(xyz) {\n  const x = xyz[0] / 100;\n  const y = xyz[1] / 100;\n  const z = xyz[2] / 100;\n  let r;\n  let g;\n  let b;\n  r = x * 3.2404542 + y * -1.5371385 + z * -0.4985314;\n  g = x * -0.969266 + y * 1.8760108 + z * 0.041556;\n  b = x * 0.0556434 + y * -0.2040259 + z * 1.0572252;\n  r = srgbNonlinearTransform(r);\n  g = srgbNonlinearTransform(g);\n  b = srgbNonlinearTransform(b);\n  return [r * 255, g * 255, b * 255];\n};\nconvert.xyz.lab = function(xyz) {\n  let x = xyz[0];\n  let y = xyz[1];\n  let z = xyz[2];\n  x /= 95.047;\n  y /= 100;\n  z /= 108.883;\n  x = x > LAB_FT ? x ** (1 / 3) : 7.787 * x + 16 / 116;\n  y = y > LAB_FT ? y ** (1 / 3) : 7.787 * y + 16 / 116;\n  z = z > LAB_FT ? z ** (1 / 3) : 7.787 * z + 16 / 116;\n  const l = 116 * y - 16;\n  const a = 500 * (x - y);\n  const b = 200 * (y - z);\n  return [l, a, b];\n};\nconvert.xyz.oklab = function(xyz) {\n  const x = xyz[0] / 100;\n  const y = xyz[1] / 100;\n  const z = xyz[2] / 100;\n  const lp = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);\n  const mp = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);\n  const sp = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.633851707 * z);\n  const l = 0.2104542553 * lp + 0.793617785 * mp - 0.0040720468 * sp;\n  const a = 1.9779984951 * lp - 2.428592205 * mp + 0.4505937099 * sp;\n  const b = 0.0259040371 * lp + 0.7827717662 * mp - 0.808675766 * sp;\n  return [l * 100, a * 100, b * 100];\n};\nconvert.oklab.oklch = function(oklab) {\n  return convert.lab.lch(oklab);\n};\nconvert.oklab.xyz = function(oklab) {\n  const ll = oklab[0] / 100;\n  const a = oklab[1] / 100;\n  const b = oklab[2] / 100;\n  const l = (0.999999998 * ll + 0.396337792 * a + 0.215803758 * b) ** 3;\n  const m = (1.000000008 * ll - 0.105561342 * a - 0.063854175 * b) ** 3;\n  const s = (1.000000055 * ll - 0.089484182 * a - 1.291485538 * b) ** 3;\n  const x = 1.227013851 * l - 0.55779998 * m + 0.281256149 * s;\n  const y = -0.040580178 * l + 1.11225687 * m - 0.071676679 * s;\n  const z = -0.076381285 * l - 0.421481978 * m + 1.58616322 * s;\n  return [x * 100, y * 100, z * 100];\n};\nconvert.oklab.rgb = function(oklab) {\n  const ll = oklab[0] / 100;\n  const aa = oklab[1] / 100;\n  const bb = oklab[2] / 100;\n  const l = (ll + 0.3963377774 * aa + 0.2158037573 * bb) ** 3;\n  const m = (ll - 0.1055613458 * aa - 0.0638541728 * bb) ** 3;\n  const s = (ll - 0.0894841775 * aa - 1.291485548 * bb) ** 3;\n  const r = srgbNonlinearTransform(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s);\n  const g = srgbNonlinearTransform(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s);\n  const b = srgbNonlinearTransform(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s);\n  return [r * 255, g * 255, b * 255];\n};\nconvert.oklch.oklab = function(oklch) {\n  return convert.lch.lab(oklch);\n};\nconvert.lab.xyz = function(lab) {\n  const l = lab[0];\n  const a = lab[1];\n  const b = lab[2];\n  let x;\n  let y;\n  let z;\n  y = (l + 16) / 116;\n  x = a / 500 + y;\n  z = y - b / 200;\n  const y2 = y ** 3;\n  const x2 = x ** 3;\n  const z2 = z ** 3;\n  y = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787;\n  x = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787;\n  z = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787;\n  x *= 95.047;\n  y *= 100;\n  z *= 108.883;\n  return [x, y, z];\n};\nconvert.lab.lch = function(lab) {\n  const l = lab[0];\n  const a = lab[1];\n  const b = lab[2];\n  let h;\n  const hr = Math.atan2(b, a);\n  h = hr * 360 / 2 / Math.PI;\n  if (h < 0) {\n    h += 360;\n  }\n  const c = Math.sqrt(a * a + b * b);\n  return [l, c, h];\n};\nconvert.lch.lab = function(lch) {\n  const l = lch[0];\n  const c = lch[1];\n  const h = lch[2];\n  const hr = h / 360 * 2 * Math.PI;\n  const a = c * Math.cos(hr);\n  const b = c * Math.sin(hr);\n  return [l, a, b];\n};\nconvert.rgb.ansi16 = function(args, saturation = null) {\n  const [r, g, b] = args;\n  let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation;\n  value = Math.round(value / 50);\n  if (value === 0) {\n    return 30;\n  }\n  let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255));\n  if (value === 2) {\n    ansi += 60;\n  }\n  return ansi;\n};\nconvert.hsv.ansi16 = function(args) {\n  return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\nconvert.rgb.ansi256 = function(args) {\n  const r = args[0];\n  const g = args[1];\n  const b = args[2];\n  if (r >> 4 === g >> 4 && g >> 4 === b >> 4) {\n    if (r < 8) {\n      return 16;\n    }\n    if (r > 248) {\n      return 231;\n    }\n    return Math.round((r - 8) / 247 * 24) + 232;\n  }\n  const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);\n  return ansi;\n};\nconvert.ansi16.rgb = function(args) {\n  args = args[0];\n  let color = args % 10;\n  if (color === 0 || color === 7) {\n    if (args > 50) {\n      color += 3.5;\n    }\n    color = color / 10.5 * 255;\n    return [color, color, color];\n  }\n  const mult = (Math.trunc(args > 50) + 1) * 0.5;\n  const r = (color & 1) * mult * 255;\n  const g = (color >> 1 & 1) * mult * 255;\n  const b = (color >> 2 & 1) * mult * 255;\n  return [r, g, b];\n};\nconvert.ansi256.rgb = function(args) {\n  args = args[0];\n  if (args >= 232) {\n    const c = (args - 232) * 10 + 8;\n    return [c, c, c];\n  }\n  args -= 16;\n  let rem;\n  const r = Math.floor(args / 36) / 5 * 255;\n  const g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n  const b = rem % 6 / 5 * 255;\n  return [r, g, b];\n};\nconvert.rgb.hex = function(args) {\n  const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255);\n  const string = integer.toString(16).toUpperCase();\n  return \"000000\".slice(string.length) + string;\n};\nconvert.hex.rgb = function(args) {\n  const match = args.toString(16).match(/[a-f\\d]{6}|[a-f\\d]{3}/i);\n  if (!match) {\n    return [0, 0, 0];\n  }\n  let colorString = match[0];\n  if (match[0].length === 3) {\n    colorString = [...colorString].map((char) => char + char).join(\"\");\n  }\n  const integer = Number.parseInt(colorString, 16);\n  const r = integer >> 16 & 255;\n  const g = integer >> 8 & 255;\n  const b = integer & 255;\n  return [r, g, b];\n};\nconvert.rgb.hcg = function(rgb) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const max = Math.max(Math.max(r, g), b);\n  const min = Math.min(Math.min(r, g), b);\n  const chroma = max - min;\n  let hue;\n  const grayscale = chroma < 1 ? min / (1 - chroma) : 0;\n  if (chroma <= 0) {\n    hue = 0;\n  } else if (max === r) {\n    hue = (g - b) / chroma % 6;\n  } else if (max === g) {\n    hue = 2 + (b - r) / chroma;\n  } else {\n    hue = 4 + (r - g) / chroma;\n  }\n  hue /= 6;\n  hue %= 1;\n  return [hue * 360, chroma * 100, grayscale * 100];\n};\nconvert.hsl.hcg = function(hsl) {\n  const s = hsl[1] / 100;\n  const l = hsl[2] / 100;\n  const c = l < 0.5 ? 2 * s * l : 2 * s * (1 - l);\n  let f = 0;\n  if (c < 1) {\n    f = (l - 0.5 * c) / (1 - c);\n  }\n  return [hsl[0], c * 100, f * 100];\n};\nconvert.hsv.hcg = function(hsv) {\n  const s = hsv[1] / 100;\n  const v = hsv[2] / 100;\n  const c = s * v;\n  let f = 0;\n  if (c < 1) {\n    f = (v - c) / (1 - c);\n  }\n  return [hsv[0], c * 100, f * 100];\n};\nconvert.hcg.rgb = function(hcg) {\n  const h = hcg[0] / 360;\n  const c = hcg[1] / 100;\n  const g = hcg[2] / 100;\n  if (c === 0) {\n    return [g * 255, g * 255, g * 255];\n  }\n  const pure = [0, 0, 0];\n  const hi = h % 1 * 6;\n  const v = hi % 1;\n  const w = 1 - v;\n  let mg = 0;\n  switch (Math.floor(hi)) {\n    case 0: {\n      pure[0] = 1;\n      pure[1] = v;\n      pure[2] = 0;\n      break;\n    }\n    case 1: {\n      pure[0] = w;\n      pure[1] = 1;\n      pure[2] = 0;\n      break;\n    }\n    case 2: {\n      pure[0] = 0;\n      pure[1] = 1;\n      pure[2] = v;\n      break;\n    }\n    case 3: {\n      pure[0] = 0;\n      pure[1] = w;\n      pure[2] = 1;\n      break;\n    }\n    case 4: {\n      pure[0] = v;\n      pure[1] = 0;\n      pure[2] = 1;\n      break;\n    }\n    default: {\n      pure[0] = 1;\n      pure[1] = 0;\n      pure[2] = w;\n    }\n  }\n  mg = (1 - c) * g;\n  return [\n    (c * pure[0] + mg) * 255,\n    (c * pure[1] + mg) * 255,\n    (c * pure[2] + mg) * 255\n  ];\n};\nconvert.hcg.hsv = function(hcg) {\n  const c = hcg[1] / 100;\n  const g = hcg[2] / 100;\n  const v = c + g * (1 - c);\n  let f = 0;\n  if (v > 0) {\n    f = c / v;\n  }\n  return [hcg[0], f * 100, v * 100];\n};\nconvert.hcg.hsl = function(hcg) {\n  const c = hcg[1] / 100;\n  const g = hcg[2] / 100;\n  const l = g * (1 - c) + 0.5 * c;\n  let s = 0;\n  if (l > 0 && l < 0.5) {\n    s = c / (2 * l);\n  } else if (l >= 0.5 && l < 1) {\n    s = c / (2 * (1 - l));\n  }\n  return [hcg[0], s * 100, l * 100];\n};\nconvert.hcg.hwb = function(hcg) {\n  const c = hcg[1] / 100;\n  const g = hcg[2] / 100;\n  const v = c + g * (1 - c);\n  return [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\nconvert.hwb.hcg = function(hwb) {\n  const w = hwb[1] / 100;\n  const b = hwb[2] / 100;\n  const v = 1 - b;\n  const c = v - w;\n  let g = 0;\n  if (c < 1) {\n    g = (v - c) / (1 - c);\n  }\n  return [hwb[0], c * 100, g * 100];\n};\nconvert.apple.rgb = function(apple) {\n  return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255];\n};\nconvert.rgb.apple = function(rgb) {\n  return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535];\n};\nconvert.gray.rgb = function(args) {\n  return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\nconvert.gray.hsl = function(args) {\n  return [0, 0, args[0]];\n};\nconvert.gray.hsv = convert.gray.hsl;\nconvert.gray.hwb = function(gray) {\n  return [0, 100, gray[0]];\n};\nconvert.gray.cmyk = function(gray) {\n  return [0, 0, 0, gray[0]];\n};\nconvert.gray.lab = function(gray) {\n  return [gray[0], 0, 0];\n};\nconvert.gray.hex = function(gray) {\n  const value = Math.round(gray[0] / 100 * 255) & 255;\n  const integer = (value << 16) + (value << 8) + value;\n  const string = integer.toString(16).toUpperCase();\n  return \"000000\".slice(string.length) + string;\n};\nconvert.rgb.gray = function(rgb) {\n  const value = (rgb[0] + rgb[1] + rgb[2]) / 3;\n  return [value / 255 * 100];\n};\n\n// node_modules/color-convert/route.js\nfunction buildGraph() {\n  const graph = {};\n  const models2 = Object.keys(conversions_default);\n  for (let { length } = models2, i = 0; i < length; i++) {\n    graph[models2[i]] = {\n      // http://jsperf.com/1-vs-infinity\n      // micro-opt, but this is simple.\n      distance: -1,\n      parent: null\n    };\n  }\n  return graph;\n}\nfunction deriveBFS(fromModel) {\n  const graph = buildGraph();\n  const queue = [fromModel];\n  graph[fromModel].distance = 0;\n  while (queue.length > 0) {\n    const current = queue.pop();\n    const adjacents = Object.keys(conversions_default[current]);\n    for (let { length } = adjacents, i = 0; i < length; i++) {\n      const adjacent = adjacents[i];\n      const node = graph[adjacent];\n      if (node.distance === -1) {\n        node.distance = graph[current].distance + 1;\n        node.parent = current;\n        queue.unshift(adjacent);\n      }\n    }\n  }\n  return graph;\n}\nfunction link(from, to) {\n  return function(args) {\n    return to(from(args));\n  };\n}\nfunction wrapConversion(toModel, graph) {\n  const path = [graph[toModel].parent, toModel];\n  let fn = conversions_default[graph[toModel].parent][toModel];\n  let cur = graph[toModel].parent;\n  while (graph[cur].parent) {\n    path.unshift(graph[cur].parent);\n    fn = link(conversions_default[graph[cur].parent][cur], fn);\n    cur = graph[cur].parent;\n  }\n  fn.conversion = path;\n  return fn;\n}\nfunction route(fromModel) {\n  const graph = deriveBFS(fromModel);\n  const conversion = {};\n  const models2 = Object.keys(graph);\n  for (let { length } = models2, i = 0; i < length; i++) {\n    const toModel = models2[i];\n    const node = graph[toModel];\n    if (node.parent === null) {\n      continue;\n    }\n    conversion[toModel] = wrapConversion(toModel, graph);\n  }\n  return conversion;\n}\nvar route_default = route;\n\n// node_modules/color-convert/index.js\nvar convert2 = {};\nvar models = Object.keys(conversions_default);\nfunction wrapRaw(fn) {\n  const wrappedFn = function(...args) {\n    const arg0 = args[0];\n    if (arg0 === void 0 || arg0 === null) {\n      return arg0;\n    }\n    if (arg0.length > 1) {\n      args = arg0;\n    }\n    return fn(args);\n  };\n  if (\"conversion\" in fn) {\n    wrappedFn.conversion = fn.conversion;\n  }\n  return wrappedFn;\n}\nfunction wrapRounded(fn) {\n  const wrappedFn = function(...args) {\n    const arg0 = args[0];\n    if (arg0 === void 0 || arg0 === null) {\n      return arg0;\n    }\n    if (arg0.length > 1) {\n      args = arg0;\n    }\n    const result = fn(args);\n    if (typeof result === \"object\") {\n      for (let { length } = result, i = 0; i < length; i++) {\n        result[i] = Math.round(result[i]);\n      }\n    }\n    return result;\n  };\n  if (\"conversion\" in fn) {\n    wrappedFn.conversion = fn.conversion;\n  }\n  return wrappedFn;\n}\nfor (const fromModel of models) {\n  convert2[fromModel] = {};\n  Object.defineProperty(convert2[fromModel], \"channels\", { value: conversions_default[fromModel].channels });\n  Object.defineProperty(convert2[fromModel], \"labels\", { value: conversions_default[fromModel].labels });\n  const routes = route_default(fromModel);\n  const routeModels = Object.keys(routes);\n  for (const toModel of routeModels) {\n    const fn = routes[toModel];\n    convert2[fromModel][toModel] = wrapRounded(fn);\n    convert2[fromModel][toModel].raw = wrapRaw(fn);\n  }\n}\nvar color_convert_default = convert2;\n\n// node_modules/color/index.js\nvar skippedModels = [\n  // To be honest, I don't really feel like keyword belongs in color convert, but eh.\n  \"keyword\",\n  // Gray conflicts with some method names, and has its own method defined.\n  \"gray\",\n  // Shouldn't really be in color-convert either...\n  \"hex\"\n];\nvar hashedModelKeys = {};\nfor (const model of Object.keys(color_convert_default)) {\n  hashedModelKeys[[...color_convert_default[model].labels].sort().join(\"\")] = model;\n}\nvar limiters = {};\nfunction Color(object, model) {\n  if (!(this instanceof Color)) {\n    return new Color(object, model);\n  }\n  if (model && model in skippedModels) {\n    model = null;\n  }\n  if (model && !(model in color_convert_default)) {\n    throw new Error(\"Unknown model: \" + model);\n  }\n  let i;\n  let channels;\n  if (object == null) {\n    this.model = \"rgb\";\n    this.color = [0, 0, 0];\n    this.valpha = 1;\n  } else if (object instanceof Color) {\n    this.model = object.model;\n    this.color = [...object.color];\n    this.valpha = object.valpha;\n  } else if (typeof object === \"string\") {\n    const result = color_string_default.get(object);\n    if (result === null) {\n      throw new Error(\"Unable to parse color from string: \" + object);\n    }\n    this.model = result.model;\n    channels = color_convert_default[this.model].channels;\n    this.color = result.value.slice(0, channels);\n    this.valpha = typeof result.value[channels] === \"number\" ? result.value[channels] : 1;\n  } else if (object.length > 0) {\n    this.model = model || \"rgb\";\n    channels = color_convert_default[this.model].channels;\n    const newArray = Array.prototype.slice.call(object, 0, channels);\n    this.color = zeroArray(newArray, channels);\n    this.valpha = typeof object[channels] === \"number\" ? object[channels] : 1;\n  } else if (typeof object === \"number\") {\n    this.model = \"rgb\";\n    this.color = [\n      object >> 16 & 255,\n      object >> 8 & 255,\n      object & 255\n    ];\n    this.valpha = 1;\n  } else {\n    this.valpha = 1;\n    const keys = Object.keys(object);\n    if (\"alpha\" in object) {\n      keys.splice(keys.indexOf(\"alpha\"), 1);\n      this.valpha = typeof object.alpha === \"number\" ? object.alpha : 0;\n    }\n    const hashedKeys = keys.sort().join(\"\");\n    if (!(hashedKeys in hashedModelKeys)) {\n      throw new Error(\"Unable to parse color from object: \" + JSON.stringify(object));\n    }\n    this.model = hashedModelKeys[hashedKeys];\n    const { labels } = color_convert_default[this.model];\n    const color = [];\n    for (i = 0; i < labels.length; i++) {\n      color.push(object[labels[i]]);\n    }\n    this.color = zeroArray(color);\n  }\n  if (limiters[this.model]) {\n    channels = color_convert_default[this.model].channels;\n    for (i = 0; i < channels; i++) {\n      const limit = limiters[this.model][i];\n      if (limit) {\n        this.color[i] = limit(this.color[i]);\n      }\n    }\n  }\n  this.valpha = Math.max(0, Math.min(1, this.valpha));\n  if (Object.freeze) {\n    Object.freeze(this);\n  }\n}\nColor.prototype = {\n  toString() {\n    return this.string();\n  },\n  toJSON() {\n    return this[this.model]();\n  },\n  string(places) {\n    let self = this.model in color_string_default.to ? this : this.rgb();\n    self = self.round(typeof places === \"number\" ? places : 1);\n    const arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n    return color_string_default.to[self.model](...arguments_);\n  },\n  percentString(places) {\n    const self = this.rgb().round(typeof places === \"number\" ? places : 1);\n    const arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n    return color_string_default.to.rgb.percent(...arguments_);\n  },\n  array() {\n    return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n  },\n  object() {\n    const result = {};\n    const { channels } = color_convert_default[this.model];\n    const { labels } = color_convert_default[this.model];\n    for (let i = 0; i < channels; i++) {\n      result[labels[i]] = this.color[i];\n    }\n    if (this.valpha !== 1) {\n      result.alpha = this.valpha;\n    }\n    return result;\n  },\n  unitArray() {\n    const rgb = this.rgb().color;\n    rgb[0] /= 255;\n    rgb[1] /= 255;\n    rgb[2] /= 255;\n    if (this.valpha !== 1) {\n      rgb.push(this.valpha);\n    }\n    return rgb;\n  },\n  unitObject() {\n    const rgb = this.rgb().object();\n    rgb.r /= 255;\n    rgb.g /= 255;\n    rgb.b /= 255;\n    if (this.valpha !== 1) {\n      rgb.alpha = this.valpha;\n    }\n    return rgb;\n  },\n  round(places) {\n    places = Math.max(places || 0, 0);\n    return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n  },\n  alpha(value) {\n    if (value !== void 0) {\n      return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n    }\n    return this.valpha;\n  },\n  // Rgb\n  red: getset(\"rgb\", 0, maxfn(255)),\n  green: getset(\"rgb\", 1, maxfn(255)),\n  blue: getset(\"rgb\", 2, maxfn(255)),\n  hue: getset([\"hsl\", \"hsv\", \"hsl\", \"hwb\", \"hcg\"], 0, (value) => (value % 360 + 360) % 360),\n  saturationl: getset(\"hsl\", 1, maxfn(100)),\n  lightness: getset(\"hsl\", 2, maxfn(100)),\n  saturationv: getset(\"hsv\", 1, maxfn(100)),\n  value: getset(\"hsv\", 2, maxfn(100)),\n  chroma: getset(\"hcg\", 1, maxfn(100)),\n  gray: getset(\"hcg\", 2, maxfn(100)),\n  white: getset(\"hwb\", 1, maxfn(100)),\n  wblack: getset(\"hwb\", 2, maxfn(100)),\n  cyan: getset(\"cmyk\", 0, maxfn(100)),\n  magenta: getset(\"cmyk\", 1, maxfn(100)),\n  yellow: getset(\"cmyk\", 2, maxfn(100)),\n  black: getset(\"cmyk\", 3, maxfn(100)),\n  x: getset(\"xyz\", 0, maxfn(95.047)),\n  y: getset(\"xyz\", 1, maxfn(100)),\n  z: getset(\"xyz\", 2, maxfn(108.833)),\n  l: getset(\"lab\", 0, maxfn(100)),\n  a: getset(\"lab\", 1),\n  b: getset(\"lab\", 2),\n  keyword(value) {\n    if (value !== void 0) {\n      return new Color(value);\n    }\n    return color_convert_default[this.model].keyword(this.color);\n  },\n  hex(value) {\n    if (value !== void 0) {\n      return new Color(value);\n    }\n    return color_string_default.to.hex(...this.rgb().round().color);\n  },\n  hexa(value) {\n    if (value !== void 0) {\n      return new Color(value);\n    }\n    const rgbArray = this.rgb().round().color;\n    let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n    if (alphaHex.length === 1) {\n      alphaHex = \"0\" + alphaHex;\n    }\n    return color_string_default.to.hex(...rgbArray) + alphaHex;\n  },\n  rgbNumber() {\n    const rgb = this.rgb().color;\n    return (rgb[0] & 255) << 16 | (rgb[1] & 255) << 8 | rgb[2] & 255;\n  },\n  luminosity() {\n    const rgb = this.rgb().color;\n    const lum = [];\n    for (const [i, element] of rgb.entries()) {\n      const chan = element / 255;\n      lum[i] = chan <= 0.04045 ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n    }\n    return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n  },\n  contrast(color2) {\n    const lum1 = this.luminosity();\n    const lum2 = color2.luminosity();\n    if (lum1 > lum2) {\n      return (lum1 + 0.05) / (lum2 + 0.05);\n    }\n    return (lum2 + 0.05) / (lum1 + 0.05);\n  },\n  level(color2) {\n    const contrastRatio = this.contrast(color2);\n    if (contrastRatio >= 7) {\n      return \"AAA\";\n    }\n    return contrastRatio >= 4.5 ? \"AA\" : \"\";\n  },\n  isDark() {\n    const rgb = this.rgb().color;\n    const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 1e4;\n    return yiq < 128;\n  },\n  isLight() {\n    return !this.isDark();\n  },\n  negate() {\n    const rgb = this.rgb();\n    for (let i = 0; i < 3; i++) {\n      rgb.color[i] = 255 - rgb.color[i];\n    }\n    return rgb;\n  },\n  lighten(ratio) {\n    const hsl = this.hsl();\n    hsl.color[2] += hsl.color[2] * ratio;\n    return hsl;\n  },\n  darken(ratio) {\n    const hsl = this.hsl();\n    hsl.color[2] -= hsl.color[2] * ratio;\n    return hsl;\n  },\n  saturate(ratio) {\n    const hsl = this.hsl();\n    hsl.color[1] += hsl.color[1] * ratio;\n    return hsl;\n  },\n  desaturate(ratio) {\n    const hsl = this.hsl();\n    hsl.color[1] -= hsl.color[1] * ratio;\n    return hsl;\n  },\n  whiten(ratio) {\n    const hwb = this.hwb();\n    hwb.color[1] += hwb.color[1] * ratio;\n    return hwb;\n  },\n  blacken(ratio) {\n    const hwb = this.hwb();\n    hwb.color[2] += hwb.color[2] * ratio;\n    return hwb;\n  },\n  grayscale() {\n    const rgb = this.rgb().color;\n    const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n    return Color.rgb(value, value, value);\n  },\n  fade(ratio) {\n    return this.alpha(this.valpha - this.valpha * ratio);\n  },\n  opaquer(ratio) {\n    return this.alpha(this.valpha + this.valpha * ratio);\n  },\n  rotate(degrees) {\n    const hsl = this.hsl();\n    let hue = hsl.color[0];\n    hue = (hue + degrees) % 360;\n    hue = hue < 0 ? 360 + hue : hue;\n    hsl.color[0] = hue;\n    return hsl;\n  },\n  mix(mixinColor, weight) {\n    if (!mixinColor || !mixinColor.rgb) {\n      throw new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n    }\n    const color1 = mixinColor.rgb();\n    const color2 = this.rgb();\n    const p = weight === void 0 ? 0.5 : weight;\n    const w = 2 * p - 1;\n    const a = color1.alpha() - color2.alpha();\n    const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;\n    const w2 = 1 - w1;\n    return Color.rgb(\n      w1 * color1.red() + w2 * color2.red(),\n      w1 * color1.green() + w2 * color2.green(),\n      w1 * color1.blue() + w2 * color2.blue(),\n      color1.alpha() * p + color2.alpha() * (1 - p)\n    );\n  }\n};\nfor (const model of Object.keys(color_convert_default)) {\n  if (skippedModels.includes(model)) {\n    continue;\n  }\n  const { channels } = color_convert_default[model];\n  Color.prototype[model] = function(...arguments_) {\n    if (this.model === model) {\n      return new Color(this);\n    }\n    if (arguments_.length > 0) {\n      return new Color(arguments_, model);\n    }\n    return new Color([...assertArray(color_convert_default[this.model][model].raw(this.color)), this.valpha], model);\n  };\n  Color[model] = function(...arguments_) {\n    let color = arguments_[0];\n    if (typeof color === \"number\") {\n      color = zeroArray(arguments_, channels);\n    }\n    return new Color(color, model);\n  };\n}\nfunction roundTo(number, places) {\n  return Number(number.toFixed(places));\n}\nfunction roundToPlace(places) {\n  return function(number) {\n    return roundTo(number, places);\n  };\n}\nfunction getset(model, channel, modifier) {\n  model = Array.isArray(model) ? model : [model];\n  for (const m of model) {\n    (limiters[m] ||= [])[channel] = modifier;\n  }\n  model = model[0];\n  return function(value) {\n    let result;\n    if (value !== void 0) {\n      if (modifier) {\n        value = modifier(value);\n      }\n      result = this[model]();\n      result.color[channel] = value;\n      return result;\n    }\n    result = this[model]().color[channel];\n    if (modifier) {\n      result = modifier(result);\n    }\n    return result;\n  };\n}\nfunction maxfn(max) {\n  return function(v) {\n    return Math.max(0, Math.min(max, v));\n  };\n}\nfunction assertArray(value) {\n  return Array.isArray(value) ? value : [value];\n}\nfunction zeroArray(array, length) {\n  for (let i = 0; i < length; i++) {\n    if (typeof array[i] !== \"number\") {\n      array[i] = 0;\n    }\n  }\n  return array;\n}\nvar index_default = Color;\n", "module.exports = require(\"./color.cjs\").default;\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst color = require('@img/colour');\nconst is = require('./is');\n\n/**\n * Colourspaces.\n * @private\n */\nconst colourspace = {\n  multiband: 'multiband',\n  'b-w': 'b-w',\n  bw: 'b-w',\n  cmyk: 'cmyk',\n  srgb: 'srgb'\n};\n\n/**\n * Tint the image using the provided colour.\n * An alpha channel may be present and will be unchanged by the operation.\n *\n * @example\n * const output = await sharp(input)\n *   .tint({ r: 255, g: 240, b: 16 })\n *   .toBuffer();\n *\n * @param {string|Object} tint - Parsed by the [color](https://www.npmjs.org/package/color) module.\n * @returns {Sharp}\n * @throws {Error} Invalid parameter\n */\nfunction tint (tint) {\n  this._setBackgroundColourOption('tint', tint);\n  return this;\n}\n\n/**\n * Convert to 8-bit greyscale; 256 shades of grey.\n * This is a linear operation. If the input image is in a non-linear colour space such as sRGB, use `gamma()` with `greyscale()` for the best results.\n * By default the output image will be web-friendly sRGB and contain three (identical) colour channels.\n * This may be overridden by other sharp operations such as `toColourspace('b-w')`,\n * which will produce an output image containing one colour channel.\n * An alpha channel may be present, and will be unchanged by the operation.\n *\n * @example\n * const output = await sharp(input).greyscale().toBuffer();\n *\n * @param {Boolean} [greyscale=true]\n * @returns {Sharp}\n */\nfunction greyscale (greyscale) {\n  this.options.greyscale = is.bool(greyscale) ? greyscale : true;\n  return this;\n}\n\n/**\n * Alternative spelling of `greyscale`.\n * @param {Boolean} [grayscale=true]\n * @returns {Sharp}\n */\nfunction grayscale (grayscale) {\n  return this.greyscale(grayscale);\n}\n\n/**\n * Set the pipeline colourspace.\n *\n * The input image will be converted to the provided colourspace at the start of the pipeline.\n * All operations will use this colourspace before converting to the output colourspace,\n * as defined by {@link #tocolourspace toColourspace}.\n *\n * @since 0.29.0\n *\n * @example\n * // Run pipeline in 16 bits per channel RGB while converting final result to 8 bits per channel sRGB.\n * await sharp(input)\n *  .pipelineColourspace('rgb16')\n *  .toColourspace('srgb')\n *  .toFile('16bpc-pipeline-to-8bpc-output.png')\n *\n * @param {string} [colourspace] - pipeline colourspace e.g. `rgb16`, `scrgb`, `lab`, `grey16` [...](https://www.libvips.org/API/current/enum.Interpretation.html)\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction pipelineColourspace (colourspace) {\n  if (!is.string(colourspace)) {\n    throw is.invalidParameterError('colourspace', 'string', colourspace);\n  }\n  this.options.colourspacePipeline = colourspace;\n  return this;\n}\n\n/**\n * Alternative spelling of `pipelineColourspace`.\n * @param {string} [colorspace] - pipeline colorspace.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction pipelineColorspace (colorspace) {\n  return this.pipelineColourspace(colorspace);\n}\n\n/**\n * Set the output colourspace.\n * By default output image will be web-friendly sRGB, with additional channels interpreted as alpha channels.\n *\n * @example\n * // Output 16 bits per pixel RGB\n * await sharp(input)\n *  .toColourspace('rgb16')\n *  .toFile('16-bpp.png')\n *\n * @param {string} [colourspace] - output colourspace e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://www.libvips.org/API/current/enum.Interpretation.html)\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction toColourspace (colourspace) {\n  if (!is.string(colourspace)) {\n    throw is.invalidParameterError('colourspace', 'string', colourspace);\n  }\n  this.options.colourspace = colourspace;\n  return this;\n}\n\n/**\n * Alternative spelling of `toColourspace`.\n * @param {string} [colorspace] - output colorspace.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction toColorspace (colorspace) {\n  return this.toColourspace(colorspace);\n}\n\n/**\n * Create a RGBA colour array from a given value.\n * @private\n * @param {string|Object} value\n * @throws {Error} Invalid value\n */\nfunction _getBackgroundColourOption (value) {\n  if (\n    is.object(value) ||\n    (is.string(value) && value.length >= 3 && value.length <= 200)\n  ) {\n    const colour = color(value);\n    return [\n      colour.red(),\n      colour.green(),\n      colour.blue(),\n      Math.round(colour.alpha() * 255)\n    ];\n  } else {\n    throw is.invalidParameterError('background', 'object or string', value);\n  }\n}\n\n/**\n * Update a colour attribute of the this.options Object.\n * @private\n * @param {string} key\n * @param {string|Object} value\n * @throws {Error} Invalid value\n */\nfunction _setBackgroundColourOption (key, value) {\n  if (is.defined(value)) {\n    this.options[key] = _getBackgroundColourOption(value);\n  }\n}\n\n/**\n * Decorate the Sharp prototype with colour-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    // Public\n    tint,\n    greyscale,\n    grayscale,\n    pipelineColourspace,\n    pipelineColorspace,\n    toColourspace,\n    toColorspace,\n    // Private\n    _getBackgroundColourOption,\n    _setBackgroundColourOption\n  });\n  // Class attributes\n  Sharp.colourspace = colourspace;\n  Sharp.colorspace = colourspace;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst is = require('./is');\n\n/**\n * Boolean operations for bandbool.\n * @private\n */\nconst bool = {\n  and: 'and',\n  or: 'or',\n  eor: 'eor'\n};\n\n/**\n * Remove alpha channels, if any. This is a no-op if the image does not have an alpha channel.\n *\n * See also {@link /api-operation/#flatten flatten}.\n *\n * @example\n * sharp('rgba.png')\n *   .removeAlpha()\n *   .toFile('rgb.png', function(err, info) {\n *     // rgb.png is a 3 channel image without an alpha channel\n *   });\n *\n * @returns {Sharp}\n */\nfunction removeAlpha () {\n  this.options.removeAlpha = true;\n  return this;\n}\n\n/**\n * Ensure the output image has an alpha transparency channel.\n * If missing, the added alpha channel will have the specified\n * transparency level, defaulting to fully-opaque (1).\n * This is a no-op if the image already has an alpha channel.\n *\n * @since 0.21.2\n *\n * @example\n * // rgba.png will be a 4 channel image with a fully-opaque alpha channel\n * await sharp('rgb.jpg')\n *   .ensureAlpha()\n *   .toFile('rgba.png')\n *\n * @example\n * // rgba is a 4 channel image with a fully-transparent alpha channel\n * const rgba = await sharp(rgb)\n *   .ensureAlpha(0)\n *   .toBuffer();\n *\n * @param {number} [alpha=1] - alpha transparency level (0=fully-transparent, 1=fully-opaque)\n * @returns {Sharp}\n * @throws {Error} Invalid alpha transparency level\n */\nfunction ensureAlpha (alpha) {\n  if (is.defined(alpha)) {\n    if (is.number(alpha) && is.inRange(alpha, 0, 1)) {\n      this.options.ensureAlpha = alpha;\n    } else {\n      throw is.invalidParameterError('alpha', 'number between 0 and 1', alpha);\n    }\n  } else {\n    this.options.ensureAlpha = 1;\n  }\n  return this;\n}\n\n/**\n * Extract a single channel from a multi-channel image.\n *\n * The output colourspace will be either `b-w` (8-bit) or `grey16` (16-bit).\n *\n * @example\n * // green.jpg is a greyscale image containing the green channel of the input\n * await sharp(input)\n *   .extractChannel('green')\n *   .toFile('green.jpg');\n *\n * @example\n * // red1 is the red value of the first pixel, red2 the second pixel etc.\n * const [red1, red2, ...] = await sharp(input)\n *   .extractChannel(0)\n *   .raw()\n *   .toBuffer();\n *\n * @param {number|string} channel - zero-indexed channel/band number to extract, or `red`, `green`, `blue` or `alpha`.\n * @returns {Sharp}\n * @throws {Error} Invalid channel\n */\nfunction extractChannel (channel) {\n  const channelMap = { red: 0, green: 1, blue: 2, alpha: 3 };\n  if (Object.keys(channelMap).includes(channel)) {\n    channel = channelMap[channel];\n  }\n  if (is.integer(channel) && is.inRange(channel, 0, 4)) {\n    this.options.extractChannel = channel;\n  } else {\n    throw is.invalidParameterError('channel', 'integer or one of: red, green, blue, alpha', channel);\n  }\n  return this;\n}\n\n/**\n * Join one or more channels to the image.\n * The meaning of the added channels depends on the output colourspace, set with `toColourspace()`.\n * By default the output image will be web-friendly sRGB, with additional channels interpreted as alpha channels.\n * Channel ordering follows vips convention:\n * - sRGB: 0: Red, 1: Green, 2: Blue, 3: Alpha.\n * - CMYK: 0: Magenta, 1: Cyan, 2: Yellow, 3: Black, 4: Alpha.\n *\n * Buffers may be any of the image formats supported by sharp.\n * For raw pixel input, the `options` object should contain a `raw` attribute, which follows the format of the attribute of the same name in the `sharp()` constructor.\n *\n * @param {Array<string|Buffer>|string|Buffer} images - one or more images (file paths, Buffers).\n * @param {Object} options - image options, see `sharp()` constructor.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction joinChannel (images, options) {\n  if (Array.isArray(images)) {\n    images.forEach(function (image) {\n      this.options.joinChannelIn.push(this._createInputDescriptor(image, options));\n    }, this);\n  } else {\n    this.options.joinChannelIn.push(this._createInputDescriptor(images, options));\n  }\n  return this;\n}\n\n/**\n * Perform a bitwise boolean operation on all input image channels (bands) to produce a single channel output image.\n *\n * @example\n * sharp('3-channel-rgb-input.png')\n *   .bandbool(sharp.bool.and)\n *   .toFile('1-channel-output.png', function (err, info) {\n *     // The output will be a single channel image where each pixel `P = R & G & B`.\n *     // If `I(1,1) = [247, 170, 14] = [0b11110111, 0b10101010, 0b00001111]`\n *     // then `O(1,1) = 0b11110111 & 0b10101010 & 0b00001111 = 0b00000010 = 2`.\n *   });\n *\n * @param {string} boolOp - one of `and`, `or` or `eor` to perform that bitwise operation, like the C logic operators `&`, `|` and `^` respectively.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction bandbool (boolOp) {\n  if (is.string(boolOp) && is.inArray(boolOp, ['and', 'or', 'eor'])) {\n    this.options.bandBoolOp = boolOp;\n  } else {\n    throw is.invalidParameterError('boolOp', 'one of: and, or, eor', boolOp);\n  }\n  return this;\n}\n\n/**\n * Decorate the Sharp prototype with channel-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    // Public instance functions\n    removeAlpha,\n    ensureAlpha,\n    extractChannel,\n    joinChannel,\n    bandbool\n  });\n  // Class attributes\n  Sharp.bool = bool;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst path = require('node:path');\nconst is = require('./is');\nconst sharp = require('./sharp');\n\nconst formats = new Map([\n  ['heic', 'heif'],\n  ['heif', 'heif'],\n  ['avif', 'avif'],\n  ['jpeg', 'jpeg'],\n  ['jpg', 'jpeg'],\n  ['jpe', 'jpeg'],\n  ['tile', 'tile'],\n  ['dz', 'tile'],\n  ['png', 'png'],\n  ['raw', 'raw'],\n  ['tiff', 'tiff'],\n  ['tif', 'tiff'],\n  ['webp', 'webp'],\n  ['gif', 'gif'],\n  ['jp2', 'jp2'],\n  ['jpx', 'jp2'],\n  ['j2k', 'jp2'],\n  ['j2c', 'jp2'],\n  ['jxl', 'jxl']\n]);\n\nconst jp2Regex = /\\.(jp[2x]|j2[kc])$/i;\n\nconst errJp2Save = () => new Error('JP2 output requires libvips with support for OpenJPEG');\n\nconst bitdepthFromColourCount = (colours) => 1 << 31 - Math.clz32(Math.ceil(Math.log2(colours)));\n\n/**\n * Write output image data to a file.\n *\n * If an explicit output format is not selected, it will be inferred from the extension,\n * with JPEG, PNG, WebP, AVIF, TIFF, GIF, DZI, and libvips' V format supported.\n * Note that raw pixel data is only supported for buffer output.\n *\n * By default all metadata will be removed, which includes EXIF-based orientation.\n * See {@link #withmetadata withMetadata} for control over this.\n *\n * The caller is responsible for ensuring directory structures and permissions exist.\n *\n * A `Promise` is returned when `callback` is not provided.\n *\n * @example\n * sharp(input)\n *   .toFile('output.png', (err, info) => { ... });\n *\n * @example\n * sharp(input)\n *   .toFile('output.png')\n *   .then(info => { ... })\n *   .catch(err => { ... });\n *\n * @param {string} fileOut - the path to write the image data to.\n * @param {Function} [callback] - called on completion with two arguments `(err, info)`.\n * `info` contains the output image `format`, `size` (bytes), `width`, `height`,\n * `channels` and `premultiplied` (indicating if premultiplication was used).\n * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.\n * When using the attention crop strategy also contains `attentionX` and `attentionY`, the focal point of the cropped region.\n * Animated output will also contain `pageHeight` and `pages`.\n * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text.\n * @returns {Promise<Object>} - when no callback is provided\n * @throws {Error} Invalid parameters\n */\nfunction toFile (fileOut, callback) {\n  let err;\n  if (!is.string(fileOut)) {\n    err = new Error('Missing output file path');\n  } else if (is.string(this.options.input.file) && path.resolve(this.options.input.file) === path.resolve(fileOut)) {\n    err = new Error('Cannot use same file for input and output');\n  } else if (jp2Regex.test(path.extname(fileOut)) && !this.constructor.format.jp2k.output.file) {\n    err = errJp2Save();\n  }\n  if (err) {\n    if (is.fn(callback)) {\n      callback(err);\n    } else {\n      return Promise.reject(err);\n    }\n  } else {\n    this.options.fileOut = fileOut;\n    const stack = Error();\n    return this._pipeline(callback, stack);\n  }\n  return this;\n}\n\n/**\n * Write output to a Buffer.\n * JPEG, PNG, WebP, AVIF, TIFF, GIF and raw pixel data output are supported.\n *\n * Use {@link #toformat toFormat} or one of the format-specific functions such as {@link #jpeg jpeg}, {@link #png png} etc. to set the output format.\n *\n * If no explicit format is set, the output format will match the input image, except SVG input which becomes PNG output.\n *\n * By default all metadata will be removed, which includes EXIF-based orientation.\n * See {@link #withmetadata withMetadata} for control over this.\n *\n * `callback`, if present, gets three arguments `(err, data, info)` where:\n * - `err` is an error, if any.\n * - `data` is the output image data.\n * - `info` contains the output image `format`, `size` (bytes), `width`, `height`,\n * `channels` and `premultiplied` (indicating if premultiplication was used).\n * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.\n * Animated output will also contain `pageHeight` and `pages`.\n * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text.\n *\n * A `Promise` is returned when `callback` is not provided.\n *\n * @example\n * sharp(input)\n *   .toBuffer((err, data, info) => { ... });\n *\n * @example\n * sharp(input)\n *   .toBuffer()\n *   .then(data => { ... })\n *   .catch(err => { ... });\n *\n * @example\n * sharp(input)\n *   .png()\n *   .toBuffer({ resolveWithObject: true })\n *   .then(({ data, info }) => { ... })\n *   .catch(err => { ... });\n *\n * @example\n * const { data, info } = await sharp('my-image.jpg')\n *   // output the raw pixels\n *   .raw()\n *   .toBuffer({ resolveWithObject: true });\n *\n * // create a more type safe way to work with the raw pixel data\n * // this will not copy the data, instead it will change `data`s underlying ArrayBuffer\n * // so `data` and `pixelArray` point to the same memory location\n * const pixelArray = new Uint8ClampedArray(data.buffer);\n *\n * // When you are done changing the pixelArray, sharp takes the `pixelArray` as an input\n * const { width, height, channels } = info;\n * await sharp(pixelArray, { raw: { width, height, channels } })\n *   .toFile('my-changed-image.jpg');\n *\n * @param {Object} [options]\n * @param {boolean} [options.resolveWithObject] Resolve the Promise with an Object containing `data` and `info` properties instead of resolving only with `data`.\n * @param {Function} [callback]\n * @returns {Promise<Buffer>} - when no callback is provided\n */\nfunction toBuffer (options, callback) {\n  if (is.object(options)) {\n    this._setBooleanOption('resolveWithObject', options.resolveWithObject);\n  } else if (this.options.resolveWithObject) {\n    this.options.resolveWithObject = false;\n  }\n  this.options.fileOut = '';\n  const stack = Error();\n  return this._pipeline(is.fn(options) ? options : callback, stack);\n}\n\n/**\n * Keep all EXIF metadata from the input image in the output image.\n *\n * EXIF metadata is unsupported for TIFF output.\n *\n * @since 0.33.0\n *\n * @example\n * const outputWithExif = await sharp(inputWithExif)\n *   .keepExif()\n *   .toBuffer();\n *\n * @returns {Sharp}\n */\nfunction keepExif () {\n  this.options.keepMetadata |= 0b00001;\n  return this;\n}\n\n/**\n * Set EXIF metadata in the output image, ignoring any EXIF in the input image.\n *\n * @since 0.33.0\n *\n * @example\n * const dataWithExif = await sharp(input)\n *   .withExif({\n *     IFD0: {\n *       Copyright: 'The National Gallery'\n *     },\n *     IFD3: {\n *       GPSLatitudeRef: 'N',\n *       GPSLatitude: '51/1 30/1 3230/100',\n *       GPSLongitudeRef: 'W',\n *       GPSLongitude: '0/1 7/1 4366/100'\n *     }\n *   })\n *   .toBuffer();\n *\n * @param {Object<string, Object<string, string>>} exif Object keyed by IFD0, IFD1 etc. of key/value string pairs to write as EXIF data.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction withExif (exif) {\n  if (is.object(exif)) {\n    for (const [ifd, entries] of Object.entries(exif)) {\n      if (is.object(entries)) {\n        for (const [k, v] of Object.entries(entries)) {\n          if (is.string(v)) {\n            this.options.withExif[`exif-${ifd.toLowerCase()}-${k}`] = v;\n          } else {\n            throw is.invalidParameterError(`${ifd}.${k}`, 'string', v);\n          }\n        }\n      } else {\n        throw is.invalidParameterError(ifd, 'object', entries);\n      }\n    }\n  } else {\n    throw is.invalidParameterError('exif', 'object', exif);\n  }\n  this.options.withExifMerge = false;\n  return this.keepExif();\n}\n\n/**\n * Update EXIF metadata from the input image in the output image.\n *\n * @since 0.33.0\n *\n * @example\n * const dataWithMergedExif = await sharp(inputWithExif)\n *   .withExifMerge({\n *     IFD0: {\n *       Copyright: 'The National Gallery'\n *     }\n *   })\n *   .toBuffer();\n *\n * @param {Object<string, Object<string, string>>} exif Object keyed by IFD0, IFD1 etc. of key/value string pairs to write as EXIF data.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction withExifMerge (exif) {\n  this.withExif(exif);\n  this.options.withExifMerge = true;\n  return this;\n}\n\n/**\n * Keep ICC profile from the input image in the output image.\n *\n * When input and output colour spaces differ, use with {@link /api-colour/#tocolourspace toColourspace} and optionally {@link /api-colour/#pipelinecolourspace pipelineColourspace}.\n *\n * @since 0.33.0\n *\n * @example\n * const outputWithIccProfile = await sharp(inputWithIccProfile)\n *   .keepIccProfile()\n *   .toBuffer();\n *\n * @example\n * const cmykOutputWithIccProfile = await sharp(cmykInputWithIccProfile)\n *   .pipelineColourspace('cmyk')\n *   .toColourspace('cmyk')\n *   .keepIccProfile()\n *   .toBuffer();\n *\n * @returns {Sharp}\n */\nfunction keepIccProfile () {\n  this.options.keepMetadata |= 0b01000;\n  return this;\n}\n\n/**\n * Transform using an ICC profile and attach to the output image.\n *\n * This can either be an absolute filesystem path or\n * built-in profile name (`srgb`, `p3`, `cmyk`).\n *\n * @since 0.33.0\n *\n * @example\n * const outputWithP3 = await sharp(input)\n *   .withIccProfile('p3')\n *   .toBuffer();\n *\n * @param {string} icc - Absolute filesystem path to output ICC profile or built-in profile name (srgb, p3, cmyk).\n * @param {Object} [options]\n * @param {number} [options.attach=true] Should the ICC profile be included in the output image metadata?\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction withIccProfile (icc, options) {\n  if (is.string(icc)) {\n    this.options.withIccProfile = icc;\n  } else {\n    throw is.invalidParameterError('icc', 'string', icc);\n  }\n  this.keepIccProfile();\n  if (is.object(options)) {\n    if (is.defined(options.attach)) {\n      if (is.bool(options.attach)) {\n        if (!options.attach) {\n          this.options.keepMetadata &= ~0b01000;\n        }\n      } else {\n        throw is.invalidParameterError('attach', 'boolean', options.attach);\n      }\n    }\n  }\n  return this;\n}\n\n/**\n * Keep XMP metadata from the input image in the output image.\n *\n * @since 0.34.3\n *\n * @example\n * const outputWithXmp = await sharp(inputWithXmp)\n *   .keepXmp()\n *   .toBuffer();\n *\n * @returns {Sharp}\n */\nfunction keepXmp () {\n  this.options.keepMetadata |= 0b00010;\n  return this;\n}\n\n/**\n * Set XMP metadata in the output image.\n *\n * Supported by PNG, JPEG, WebP, and TIFF output.\n *\n * @since 0.34.3\n *\n * @example\n * const xmpString = `\n *   <?xml version=\"1.0\"?>\n *   <x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n *     <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n *       <rdf:Description rdf:about=\"\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n *         <dc:creator><rdf:Seq><rdf:li>John Doe</rdf:li></rdf:Seq></dc:creator>\n *       </rdf:Description>\n *     </rdf:RDF>\n *   </x:xmpmeta>`;\n *\n * const data = await sharp(input)\n *   .withXmp(xmpString)\n *   .toBuffer();\n *\n * @param {string} xmp String containing XMP metadata to be embedded in the output image.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction withXmp (xmp) {\n  if (is.string(xmp) && xmp.length > 0) {\n    this.options.withXmp = xmp;\n    this.options.keepMetadata |= 0b00010;\n  } else {\n    throw is.invalidParameterError('xmp', 'non-empty string', xmp);\n  }\n  return this;\n}\n\n/**\n * Keep all metadata (EXIF, ICC, XMP, IPTC) from the input image in the output image.\n *\n * The default behaviour, when `keepMetadata` is not used, is to convert to the device-independent\n * sRGB colour space and strip all metadata, including the removal of any ICC profile.\n *\n * @since 0.33.0\n *\n * @example\n * const outputWithMetadata = await sharp(inputWithMetadata)\n *   .keepMetadata()\n *   .toBuffer();\n *\n * @returns {Sharp}\n */\nfunction keepMetadata () {\n  this.options.keepMetadata = 0b11111;\n  return this;\n}\n\n/**\n * Keep most metadata (EXIF, XMP, IPTC) from the input image in the output image.\n *\n * This will also convert to and add a web-friendly sRGB ICC profile if appropriate.\n *\n * Allows orientation and density to be set or updated.\n *\n * @example\n * const outputSrgbWithMetadata = await sharp(inputRgbWithMetadata)\n *   .withMetadata()\n *   .toBuffer();\n *\n * @example\n * // Set output metadata to 96 DPI\n * const data = await sharp(input)\n *   .withMetadata({ density: 96 })\n *   .toBuffer();\n *\n * @param {Object} [options]\n * @param {number} [options.orientation] Used to update the EXIF `Orientation` tag, integer between 1 and 8.\n * @param {number} [options.density] Number of pixels per inch (DPI).\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction withMetadata (options) {\n  this.keepMetadata();\n  this.withIccProfile('srgb');\n  if (is.object(options)) {\n    if (is.defined(options.orientation)) {\n      if (is.integer(options.orientation) && is.inRange(options.orientation, 1, 8)) {\n        this.options.withMetadataOrientation = options.orientation;\n      } else {\n        throw is.invalidParameterError('orientation', 'integer between 1 and 8', options.orientation);\n      }\n    }\n    if (is.defined(options.density)) {\n      if (is.number(options.density) && options.density > 0) {\n        this.options.withMetadataDensity = options.density;\n      } else {\n        throw is.invalidParameterError('density', 'positive number', options.density);\n      }\n    }\n    if (is.defined(options.icc)) {\n      this.withIccProfile(options.icc);\n    }\n    if (is.defined(options.exif)) {\n      this.withExifMerge(options.exif);\n    }\n  }\n  return this;\n}\n\n/**\n * Force output to a given format.\n *\n * @example\n * // Convert any input to PNG output\n * const data = await sharp(input)\n *   .toFormat('png')\n *   .toBuffer();\n *\n * @param {(string|Object)} format - as a string or an Object with an 'id' attribute\n * @param {Object} options - output options\n * @returns {Sharp}\n * @throws {Error} unsupported format or options\n */\nfunction toFormat (format, options) {\n  const actualFormat = formats.get((is.object(format) && is.string(format.id) ? format.id : format).toLowerCase());\n  if (!actualFormat) {\n    throw is.invalidParameterError('format', `one of: ${[...formats.keys()].join(', ')}`, format);\n  }\n  return this[actualFormat](options);\n}\n\n/**\n * Use these JPEG options for output image.\n *\n * @example\n * // Convert any input to very high quality JPEG output\n * const data = await sharp(input)\n *   .jpeg({\n *     quality: 100,\n *     chromaSubsampling: '4:4:4'\n *   })\n *   .toBuffer();\n *\n * @example\n * // Use mozjpeg to reduce output JPEG file size (slower)\n * const data = await sharp(input)\n *   .jpeg({ mozjpeg: true })\n *   .toBuffer();\n *\n * @param {Object} [options] - output options\n * @param {number} [options.quality=80] - quality, integer 1-100\n * @param {boolean} [options.progressive=false] - use progressive (interlace) scan\n * @param {string} [options.chromaSubsampling='4:2:0'] - set to '4:4:4' to prevent chroma subsampling otherwise defaults to '4:2:0' chroma subsampling\n * @param {boolean} [options.optimiseCoding=true] - optimise Huffman coding tables\n * @param {boolean} [options.optimizeCoding=true] - alternative spelling of optimiseCoding\n * @param {boolean} [options.mozjpeg=false] - use mozjpeg defaults, equivalent to `{ trellisQuantisation: true, overshootDeringing: true, optimiseScans: true, quantisationTable: 3 }`\n * @param {boolean} [options.trellisQuantisation=false] - apply trellis quantisation\n * @param {boolean} [options.overshootDeringing=false] - apply overshoot deringing\n * @param {boolean} [options.optimiseScans=false] - optimise progressive scans, forces progressive\n * @param {boolean} [options.optimizeScans=false] - alternative spelling of optimiseScans\n * @param {number} [options.quantisationTable=0] - quantization table to use, integer 0-8\n * @param {number} [options.quantizationTable=0] - alternative spelling of quantisationTable\n * @param {boolean} [options.force=true] - force JPEG output, otherwise attempt to use input format\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction jpeg (options) {\n  if (is.object(options)) {\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        this.options.jpegQuality = options.quality;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    }\n    if (is.defined(options.progressive)) {\n      this._setBooleanOption('jpegProgressive', options.progressive);\n    }\n    if (is.defined(options.chromaSubsampling)) {\n      if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {\n        this.options.jpegChromaSubsampling = options.chromaSubsampling;\n      } else {\n        throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);\n      }\n    }\n    const optimiseCoding = is.bool(options.optimizeCoding) ? options.optimizeCoding : options.optimiseCoding;\n    if (is.defined(optimiseCoding)) {\n      this._setBooleanOption('jpegOptimiseCoding', optimiseCoding);\n    }\n    if (is.defined(options.mozjpeg)) {\n      if (is.bool(options.mozjpeg)) {\n        if (options.mozjpeg) {\n          this.options.jpegTrellisQuantisation = true;\n          this.options.jpegOvershootDeringing = true;\n          this.options.jpegOptimiseScans = true;\n          this.options.jpegProgressive = true;\n          this.options.jpegQuantisationTable = 3;\n        }\n      } else {\n        throw is.invalidParameterError('mozjpeg', 'boolean', options.mozjpeg);\n      }\n    }\n    const trellisQuantisation = is.bool(options.trellisQuantization) ? options.trellisQuantization : options.trellisQuantisation;\n    if (is.defined(trellisQuantisation)) {\n      this._setBooleanOption('jpegTrellisQuantisation', trellisQuantisation);\n    }\n    if (is.defined(options.overshootDeringing)) {\n      this._setBooleanOption('jpegOvershootDeringing', options.overshootDeringing);\n    }\n    const optimiseScans = is.bool(options.optimizeScans) ? options.optimizeScans : options.optimiseScans;\n    if (is.defined(optimiseScans)) {\n      this._setBooleanOption('jpegOptimiseScans', optimiseScans);\n      if (optimiseScans) {\n        this.options.jpegProgressive = true;\n      }\n    }\n    const quantisationTable = is.number(options.quantizationTable) ? options.quantizationTable : options.quantisationTable;\n    if (is.defined(quantisationTable)) {\n      if (is.integer(quantisationTable) && is.inRange(quantisationTable, 0, 8)) {\n        this.options.jpegQuantisationTable = quantisationTable;\n      } else {\n        throw is.invalidParameterError('quantisationTable', 'integer between 0 and 8', quantisationTable);\n      }\n    }\n  }\n  return this._updateFormatOut('jpeg', options);\n}\n\n/**\n * Use these PNG options for output image.\n *\n * By default, PNG output is full colour at 8 bits per pixel.\n *\n * Indexed PNG input at 1, 2 or 4 bits per pixel is converted to 8 bits per pixel.\n * Set `palette` to `true` for slower, indexed PNG output.\n *\n * For 16 bits per pixel output, convert to `rgb16` via\n * {@link /api-colour/#tocolourspace toColourspace}.\n *\n * @example\n * // Convert any input to full colour PNG output\n * const data = await sharp(input)\n *   .png()\n *   .toBuffer();\n *\n * @example\n * // Convert any input to indexed PNG output (slower)\n * const data = await sharp(input)\n *   .png({ palette: true })\n *   .toBuffer();\n *\n * @example\n * // Output 16 bits per pixel RGB(A)\n * const data = await sharp(input)\n *  .toColourspace('rgb16')\n *  .png()\n *  .toBuffer();\n *\n * @param {Object} [options]\n * @param {boolean} [options.progressive=false] - use progressive (interlace) scan\n * @param {number} [options.compressionLevel=6] - zlib compression level, 0 (fastest, largest) to 9 (slowest, smallest)\n * @param {boolean} [options.adaptiveFiltering=false] - use adaptive row filtering\n * @param {boolean} [options.palette=false] - quantise to a palette-based image with alpha transparency support\n * @param {number} [options.quality=100] - use the lowest number of colours needed to achieve given quality, sets `palette` to `true`\n * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 10 (slowest), sets `palette` to `true`\n * @param {number} [options.colours=256] - maximum number of palette entries, sets `palette` to `true`\n * @param {number} [options.colors=256] - alternative spelling of `options.colours`, sets `palette` to `true`\n * @param {number} [options.dither=1.0] - level of Floyd-Steinberg error diffusion, sets `palette` to `true`\n * @param {boolean} [options.force=true] - force PNG output, otherwise attempt to use input format\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction png (options) {\n  if (is.object(options)) {\n    if (is.defined(options.progressive)) {\n      this._setBooleanOption('pngProgressive', options.progressive);\n    }\n    if (is.defined(options.compressionLevel)) {\n      if (is.integer(options.compressionLevel) && is.inRange(options.compressionLevel, 0, 9)) {\n        this.options.pngCompressionLevel = options.compressionLevel;\n      } else {\n        throw is.invalidParameterError('compressionLevel', 'integer between 0 and 9', options.compressionLevel);\n      }\n    }\n    if (is.defined(options.adaptiveFiltering)) {\n      this._setBooleanOption('pngAdaptiveFiltering', options.adaptiveFiltering);\n    }\n    const colours = options.colours || options.colors;\n    if (is.defined(colours)) {\n      if (is.integer(colours) && is.inRange(colours, 2, 256)) {\n        this.options.pngBitdepth = bitdepthFromColourCount(colours);\n      } else {\n        throw is.invalidParameterError('colours', 'integer between 2 and 256', colours);\n      }\n    }\n    if (is.defined(options.palette)) {\n      this._setBooleanOption('pngPalette', options.palette);\n    } else if ([options.quality, options.effort, options.colours, options.colors, options.dither].some(is.defined)) {\n      this._setBooleanOption('pngPalette', true);\n    }\n    if (this.options.pngPalette) {\n      if (is.defined(options.quality)) {\n        if (is.integer(options.quality) && is.inRange(options.quality, 0, 100)) {\n          this.options.pngQuality = options.quality;\n        } else {\n          throw is.invalidParameterError('quality', 'integer between 0 and 100', options.quality);\n        }\n      }\n      if (is.defined(options.effort)) {\n        if (is.integer(options.effort) && is.inRange(options.effort, 1, 10)) {\n          this.options.pngEffort = options.effort;\n        } else {\n          throw is.invalidParameterError('effort', 'integer between 1 and 10', options.effort);\n        }\n      }\n      if (is.defined(options.dither)) {\n        if (is.number(options.dither) && is.inRange(options.dither, 0, 1)) {\n          this.options.pngDither = options.dither;\n        } else {\n          throw is.invalidParameterError('dither', 'number between 0.0 and 1.0', options.dither);\n        }\n      }\n    }\n  }\n  return this._updateFormatOut('png', options);\n}\n\n/**\n * Use these WebP options for output image.\n *\n * @example\n * // Convert any input to lossless WebP output\n * const data = await sharp(input)\n *   .webp({ lossless: true })\n *   .toBuffer();\n *\n * @example\n * // Optimise the file size of an animated WebP\n * const outputWebp = await sharp(inputWebp, { animated: true })\n *   .webp({ effort: 6 })\n *   .toBuffer();\n *\n * @param {Object} [options] - output options\n * @param {number} [options.quality=80] - quality, integer 1-100\n * @param {number} [options.alphaQuality=100] - quality of alpha layer, integer 0-100\n * @param {boolean} [options.lossless=false] - use lossless compression mode\n * @param {boolean} [options.nearLossless=false] - use near_lossless compression mode\n * @param {boolean} [options.smartSubsample=false] - use high quality chroma subsampling\n * @param {boolean} [options.smartDeblock=false] - auto-adjust the deblocking filter, can improve low contrast edges (slow)\n * @param {string} [options.preset='default'] - named preset for preprocessing/filtering, one of: default, photo, picture, drawing, icon, text\n * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 6 (slowest)\n * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation\n * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds)\n * @param {boolean} [options.minSize=false] - prevent use of animation key frames to minimise file size (slow)\n * @param {boolean} [options.mixed=false] - allow mixture of lossy and lossless animation frames (slow)\n * @param {boolean} [options.force=true] - force WebP output, otherwise attempt to use input format\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction webp (options) {\n  if (is.object(options)) {\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        this.options.webpQuality = options.quality;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    }\n    if (is.defined(options.alphaQuality)) {\n      if (is.integer(options.alphaQuality) && is.inRange(options.alphaQuality, 0, 100)) {\n        this.options.webpAlphaQuality = options.alphaQuality;\n      } else {\n        throw is.invalidParameterError('alphaQuality', 'integer between 0 and 100', options.alphaQuality);\n      }\n    }\n    if (is.defined(options.lossless)) {\n      this._setBooleanOption('webpLossless', options.lossless);\n    }\n    if (is.defined(options.nearLossless)) {\n      this._setBooleanOption('webpNearLossless', options.nearLossless);\n    }\n    if (is.defined(options.smartSubsample)) {\n      this._setBooleanOption('webpSmartSubsample', options.smartSubsample);\n    }\n    if (is.defined(options.smartDeblock)) {\n      this._setBooleanOption('webpSmartDeblock', options.smartDeblock);\n    }\n    if (is.defined(options.preset)) {\n      if (is.string(options.preset) && is.inArray(options.preset, ['default', 'photo', 'picture', 'drawing', 'icon', 'text'])) {\n        this.options.webpPreset = options.preset;\n      } else {\n        throw is.invalidParameterError('preset', 'one of: default, photo, picture, drawing, icon, text', options.preset);\n      }\n    }\n    if (is.defined(options.effort)) {\n      if (is.integer(options.effort) && is.inRange(options.effort, 0, 6)) {\n        this.options.webpEffort = options.effort;\n      } else {\n        throw is.invalidParameterError('effort', 'integer between 0 and 6', options.effort);\n      }\n    }\n    if (is.defined(options.minSize)) {\n      this._setBooleanOption('webpMinSize', options.minSize);\n    }\n    if (is.defined(options.mixed)) {\n      this._setBooleanOption('webpMixed', options.mixed);\n    }\n  }\n  trySetAnimationOptions(options, this.options);\n  return this._updateFormatOut('webp', options);\n}\n\n/**\n * Use these GIF options for the output image.\n *\n * The first entry in the palette is reserved for transparency.\n *\n * The palette of the input image will be re-used if possible.\n *\n * @since 0.30.0\n *\n * @example\n * // Convert PNG to GIF\n * await sharp(pngBuffer)\n *   .gif()\n *   .toBuffer();\n *\n * @example\n * // Convert animated WebP to animated GIF\n * await sharp('animated.webp', { animated: true })\n *   .toFile('animated.gif');\n *\n * @example\n * // Create a 128x128, cropped, non-dithered, animated thumbnail of an animated GIF\n * const out = await sharp('in.gif', { animated: true })\n *   .resize({ width: 128, height: 128 })\n *   .gif({ dither: 0 })\n *   .toBuffer();\n *\n * @example\n * // Lossy file size reduction of animated GIF\n * await sharp('in.gif', { animated: true })\n *   .gif({ interFrameMaxError: 8 })\n *   .toFile('optim.gif');\n *\n * @param {Object} [options] - output options\n * @param {boolean} [options.reuse=true] - re-use existing palette, otherwise generate new (slow)\n * @param {boolean} [options.progressive=false] - use progressive (interlace) scan\n * @param {number} [options.colours=256] - maximum number of palette entries, including transparency, between 2 and 256\n * @param {number} [options.colors=256] - alternative spelling of `options.colours`\n * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 10 (slowest)\n * @param {number} [options.dither=1.0] - level of Floyd-Steinberg error diffusion, between 0 (least) and 1 (most)\n * @param {number} [options.interFrameMaxError=0] - maximum inter-frame error for transparency, between 0 (lossless) and 32\n * @param {number} [options.interPaletteMaxError=3] - maximum inter-palette error for palette reuse, between 0 and 256\n * @param {boolean} [options.keepDuplicateFrames=false] - keep duplicate frames in the output instead of combining them\n * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation\n * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds)\n * @param {boolean} [options.force=true] - force GIF output, otherwise attempt to use input format\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction gif (options) {\n  if (is.object(options)) {\n    if (is.defined(options.reuse)) {\n      this._setBooleanOption('gifReuse', options.reuse);\n    }\n    if (is.defined(options.progressive)) {\n      this._setBooleanOption('gifProgressive', options.progressive);\n    }\n    const colours = options.colours || options.colors;\n    if (is.defined(colours)) {\n      if (is.integer(colours) && is.inRange(colours, 2, 256)) {\n        this.options.gifBitdepth = bitdepthFromColourCount(colours);\n      } else {\n        throw is.invalidParameterError('colours', 'integer between 2 and 256', colours);\n      }\n    }\n    if (is.defined(options.effort)) {\n      if (is.number(options.effort) && is.inRange(options.effort, 1, 10)) {\n        this.options.gifEffort = options.effort;\n      } else {\n        throw is.invalidParameterError('effort', 'integer between 1 and 10', options.effort);\n      }\n    }\n    if (is.defined(options.dither)) {\n      if (is.number(options.dither) && is.inRange(options.dither, 0, 1)) {\n        this.options.gifDither = options.dither;\n      } else {\n        throw is.invalidParameterError('dither', 'number between 0.0 and 1.0', options.dither);\n      }\n    }\n    if (is.defined(options.interFrameMaxError)) {\n      if (is.number(options.interFrameMaxError) && is.inRange(options.interFrameMaxError, 0, 32)) {\n        this.options.gifInterFrameMaxError = options.interFrameMaxError;\n      } else {\n        throw is.invalidParameterError('interFrameMaxError', 'number between 0.0 and 32.0', options.interFrameMaxError);\n      }\n    }\n    if (is.defined(options.interPaletteMaxError)) {\n      if (is.number(options.interPaletteMaxError) && is.inRange(options.interPaletteMaxError, 0, 256)) {\n        this.options.gifInterPaletteMaxError = options.interPaletteMaxError;\n      } else {\n        throw is.invalidParameterError('interPaletteMaxError', 'number between 0.0 and 256.0', options.interPaletteMaxError);\n      }\n    }\n    if (is.defined(options.keepDuplicateFrames)) {\n      if (is.bool(options.keepDuplicateFrames)) {\n        this._setBooleanOption('gifKeepDuplicateFrames', options.keepDuplicateFrames);\n      } else {\n        throw is.invalidParameterError('keepDuplicateFrames', 'boolean', options.keepDuplicateFrames);\n      }\n    }\n  }\n  trySetAnimationOptions(options, this.options);\n  return this._updateFormatOut('gif', options);\n}\n\n/**\n * Use these JP2 options for output image.\n *\n * Requires libvips compiled with support for OpenJPEG.\n * The prebuilt binaries do not include this - see\n * {@link /install#custom-libvips installing a custom libvips}.\n *\n * @example\n * // Convert any input to lossless JP2 output\n * const data = await sharp(input)\n *   .jp2({ lossless: true })\n *   .toBuffer();\n *\n * @example\n * // Convert any input to very high quality JP2 output\n * const data = await sharp(input)\n *   .jp2({\n *     quality: 100,\n *     chromaSubsampling: '4:4:4'\n *   })\n *   .toBuffer();\n *\n * @since 0.29.1\n *\n * @param {Object} [options] - output options\n * @param {number} [options.quality=80] - quality, integer 1-100\n * @param {boolean} [options.lossless=false] - use lossless compression mode\n * @param {number} [options.tileWidth=512] - horizontal tile size\n * @param {number} [options.tileHeight=512] - vertical tile size\n * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction jp2 (options) {\n  /* node:coverage ignore next 41 */\n  if (!this.constructor.format.jp2k.output.buffer) {\n    throw errJp2Save();\n  }\n  if (is.object(options)) {\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        this.options.jp2Quality = options.quality;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    }\n    if (is.defined(options.lossless)) {\n      if (is.bool(options.lossless)) {\n        this.options.jp2Lossless = options.lossless;\n      } else {\n        throw is.invalidParameterError('lossless', 'boolean', options.lossless);\n      }\n    }\n    if (is.defined(options.tileWidth)) {\n      if (is.integer(options.tileWidth) && is.inRange(options.tileWidth, 1, 32768)) {\n        this.options.jp2TileWidth = options.tileWidth;\n      } else {\n        throw is.invalidParameterError('tileWidth', 'integer between 1 and 32768', options.tileWidth);\n      }\n    }\n    if (is.defined(options.tileHeight)) {\n      if (is.integer(options.tileHeight) && is.inRange(options.tileHeight, 1, 32768)) {\n        this.options.jp2TileHeight = options.tileHeight;\n      } else {\n        throw is.invalidParameterError('tileHeight', 'integer between 1 and 32768', options.tileHeight);\n      }\n    }\n    if (is.defined(options.chromaSubsampling)) {\n      if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {\n        this.options.jp2ChromaSubsampling = options.chromaSubsampling;\n      } else {\n        throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);\n      }\n    }\n  }\n  return this._updateFormatOut('jp2', options);\n}\n\n/**\n * Set animation options if available.\n * @private\n *\n * @param {Object} [source] - output options\n * @param {number} [source.loop=0] - number of animation iterations, use 0 for infinite animation\n * @param {number[]} [source.delay] - list of delays between animation frames (in milliseconds)\n * @param {Object} [target] - target object for valid options\n * @throws {Error} Invalid options\n */\nfunction trySetAnimationOptions (source, target) {\n  if (is.object(source) && is.defined(source.loop)) {\n    if (is.integer(source.loop) && is.inRange(source.loop, 0, 65535)) {\n      target.loop = source.loop;\n    } else {\n      throw is.invalidParameterError('loop', 'integer between 0 and 65535', source.loop);\n    }\n  }\n  if (is.object(source) && is.defined(source.delay)) {\n    // We allow singular values as well\n    if (is.integer(source.delay) && is.inRange(source.delay, 0, 65535)) {\n      target.delay = [source.delay];\n    } else if (\n      Array.isArray(source.delay) &&\n      source.delay.every(is.integer) &&\n      source.delay.every(v => is.inRange(v, 0, 65535))) {\n      target.delay = source.delay;\n    } else {\n      throw is.invalidParameterError('delay', 'integer or an array of integers between 0 and 65535', source.delay);\n    }\n  }\n}\n\n/**\n * Use these TIFF options for output image.\n *\n * The `density` can be set in pixels/inch via {@link #withmetadata withMetadata}\n * instead of providing `xres` and `yres` in pixels/mm.\n *\n * @example\n * // Convert SVG input to LZW-compressed, 1 bit per pixel TIFF output\n * sharp('input.svg')\n *   .tiff({\n *     compression: 'lzw',\n *     bitdepth: 1\n *   })\n *   .toFile('1-bpp-output.tiff')\n *   .then(info => { ... });\n *\n * @param {Object} [options] - output options\n * @param {number} [options.quality=80] - quality, integer 1-100\n * @param {boolean} [options.force=true] - force TIFF output, otherwise attempt to use input format\n * @param {string} [options.compression='jpeg'] - compression options: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k\n * @param {boolean} [options.bigtiff=false] - use BigTIFF variant (has no effect when compression is none)\n * @param {string} [options.predictor='horizontal'] - compression predictor options: none, horizontal, float\n * @param {boolean} [options.pyramid=false] - write an image pyramid\n * @param {boolean} [options.tile=false] - write a tiled tiff\n * @param {number} [options.tileWidth=256] - horizontal tile size\n * @param {number} [options.tileHeight=256] - vertical tile size\n * @param {number} [options.xres=1.0] - horizontal resolution in pixels/mm\n * @param {number} [options.yres=1.0] - vertical resolution in pixels/mm\n * @param {string} [options.resolutionUnit='inch'] - resolution unit options: inch, cm\n * @param {number} [options.bitdepth=8] - reduce bitdepth to 1, 2 or 4 bit\n * @param {boolean} [options.miniswhite=false] - write 1-bit images as miniswhite\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction tiff (options) {\n  if (is.object(options)) {\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        this.options.tiffQuality = options.quality;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    }\n    if (is.defined(options.bitdepth)) {\n      if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [1, 2, 4, 8])) {\n        this.options.tiffBitdepth = options.bitdepth;\n      } else {\n        throw is.invalidParameterError('bitdepth', '1, 2, 4 or 8', options.bitdepth);\n      }\n    }\n    // tiling\n    if (is.defined(options.tile)) {\n      this._setBooleanOption('tiffTile', options.tile);\n    }\n    if (is.defined(options.tileWidth)) {\n      if (is.integer(options.tileWidth) && options.tileWidth > 0) {\n        this.options.tiffTileWidth = options.tileWidth;\n      } else {\n        throw is.invalidParameterError('tileWidth', 'integer greater than zero', options.tileWidth);\n      }\n    }\n    if (is.defined(options.tileHeight)) {\n      if (is.integer(options.tileHeight) && options.tileHeight > 0) {\n        this.options.tiffTileHeight = options.tileHeight;\n      } else {\n        throw is.invalidParameterError('tileHeight', 'integer greater than zero', options.tileHeight);\n      }\n    }\n    // miniswhite\n    if (is.defined(options.miniswhite)) {\n      this._setBooleanOption('tiffMiniswhite', options.miniswhite);\n    }\n    // pyramid\n    if (is.defined(options.pyramid)) {\n      this._setBooleanOption('tiffPyramid', options.pyramid);\n    }\n    // resolution\n    if (is.defined(options.xres)) {\n      if (is.number(options.xres) && options.xres > 0) {\n        this.options.tiffXres = options.xres;\n      } else {\n        throw is.invalidParameterError('xres', 'number greater than zero', options.xres);\n      }\n    }\n    if (is.defined(options.yres)) {\n      if (is.number(options.yres) && options.yres > 0) {\n        this.options.tiffYres = options.yres;\n      } else {\n        throw is.invalidParameterError('yres', 'number greater than zero', options.yres);\n      }\n    }\n    // compression\n    if (is.defined(options.compression)) {\n      if (is.string(options.compression) && is.inArray(options.compression, ['none', 'jpeg', 'deflate', 'packbits', 'ccittfax4', 'lzw', 'webp', 'zstd', 'jp2k'])) {\n        this.options.tiffCompression = options.compression;\n      } else {\n        throw is.invalidParameterError('compression', 'one of: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k', options.compression);\n      }\n    }\n    // bigtiff\n    if (is.defined(options.bigtiff)) {\n      this._setBooleanOption('tiffBigtiff', options.bigtiff);\n    }\n    // predictor\n    if (is.defined(options.predictor)) {\n      if (is.string(options.predictor) && is.inArray(options.predictor, ['none', 'horizontal', 'float'])) {\n        this.options.tiffPredictor = options.predictor;\n      } else {\n        throw is.invalidParameterError('predictor', 'one of: none, horizontal, float', options.predictor);\n      }\n    }\n    // resolutionUnit\n    if (is.defined(options.resolutionUnit)) {\n      if (is.string(options.resolutionUnit) && is.inArray(options.resolutionUnit, ['inch', 'cm'])) {\n        this.options.tiffResolutionUnit = options.resolutionUnit;\n      } else {\n        throw is.invalidParameterError('resolutionUnit', 'one of: inch, cm', options.resolutionUnit);\n      }\n    }\n  }\n  return this._updateFormatOut('tiff', options);\n}\n\n/**\n * Use these AVIF options for output image.\n *\n * AVIF image sequences are not supported.\n * Prebuilt binaries support a bitdepth of 8 only.\n *\n * This feature is experimental on the Windows ARM64 platform\n * and requires a CPU with ARM64v8.4 or later.\n *\n * @example\n * const data = await sharp(input)\n *   .avif({ effort: 2 })\n *   .toBuffer();\n *\n * @example\n * const data = await sharp(input)\n *   .avif({ lossless: true })\n *   .toBuffer();\n *\n * @since 0.27.0\n *\n * @param {Object} [options] - output options\n * @param {number} [options.quality=50] - quality, integer 1-100\n * @param {boolean} [options.lossless=false] - use lossless compression\n * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)\n * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling\n * @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction avif (options) {\n  return this.heif({ ...options, compression: 'av1' });\n}\n\n/**\n * Use these HEIF options for output image.\n *\n * Support for patent-encumbered HEIC images using `hevc` compression requires the use of a\n * globally-installed libvips compiled with support for libheif, libde265 and x265.\n *\n * @example\n * const data = await sharp(input)\n *   .heif({ compression: 'hevc' })\n *   .toBuffer();\n *\n * @since 0.23.0\n *\n * @param {Object} options - output options\n * @param {string} options.compression - compression format: av1, hevc\n * @param {number} [options.quality=50] - quality, integer 1-100\n * @param {boolean} [options.lossless=false] - use lossless compression\n * @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)\n * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling\n * @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction heif (options) {\n  if (is.object(options)) {\n    if (is.string(options.compression) && is.inArray(options.compression, ['av1', 'hevc'])) {\n      this.options.heifCompression = options.compression;\n    } else {\n      throw is.invalidParameterError('compression', 'one of: av1, hevc', options.compression);\n    }\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        this.options.heifQuality = options.quality;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    }\n    if (is.defined(options.lossless)) {\n      if (is.bool(options.lossless)) {\n        this.options.heifLossless = options.lossless;\n      } else {\n        throw is.invalidParameterError('lossless', 'boolean', options.lossless);\n      }\n    }\n    if (is.defined(options.effort)) {\n      if (is.integer(options.effort) && is.inRange(options.effort, 0, 9)) {\n        this.options.heifEffort = options.effort;\n      } else {\n        throw is.invalidParameterError('effort', 'integer between 0 and 9', options.effort);\n      }\n    }\n    if (is.defined(options.chromaSubsampling)) {\n      if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {\n        this.options.heifChromaSubsampling = options.chromaSubsampling;\n      } else {\n        throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);\n      }\n    }\n    if (is.defined(options.bitdepth)) {\n      if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [8, 10, 12])) {\n        if (options.bitdepth !== 8 && this.constructor.versions.heif) {\n          throw is.invalidParameterError('bitdepth when using prebuilt binaries', 8, options.bitdepth);\n        }\n        this.options.heifBitdepth = options.bitdepth;\n      } else {\n        throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth);\n      }\n    }\n  } else {\n    throw is.invalidParameterError('options', 'Object', options);\n  }\n  return this._updateFormatOut('heif', options);\n}\n\n/**\n * Use these JPEG-XL (JXL) options for output image.\n *\n * This feature is experimental, please do not use in production systems.\n *\n * Requires libvips compiled with support for libjxl.\n * The prebuilt binaries do not include this - see\n * {@link /install/#custom-libvips installing a custom libvips}.\n *\n * @since 0.31.3\n *\n * @param {Object} [options] - output options\n * @param {number} [options.distance=1.0] - maximum encoding error, between 0 (highest quality) and 15 (lowest quality)\n * @param {number} [options.quality] - calculate `distance` based on JPEG-like quality, between 1 and 100, overrides distance if specified\n * @param {number} [options.decodingTier=0] - target decode speed tier, between 0 (highest quality) and 4 (lowest quality)\n * @param {boolean} [options.lossless=false] - use lossless compression\n * @param {number} [options.effort=7] - CPU effort, between 1 (fastest) and 9 (slowest)\n * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation\n * @param {number|number[]} [options.delay] - delay(s) between animation frames (in milliseconds)\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction jxl (options) {\n  if (is.object(options)) {\n    if (is.defined(options.quality)) {\n      if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {\n        // https://github.com/libjxl/libjxl/blob/0aeea7f180bafd6893c1db8072dcb67d2aa5b03d/tools/cjxl_main.cc#L640-L644\n        this.options.jxlDistance = options.quality >= 30\n          ? 0.1 + (100 - options.quality) * 0.09\n          : 53 / 3000 * options.quality * options.quality - 23 / 20 * options.quality + 25;\n      } else {\n        throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);\n      }\n    } else if (is.defined(options.distance)) {\n      if (is.number(options.distance) && is.inRange(options.distance, 0, 15)) {\n        this.options.jxlDistance = options.distance;\n      } else {\n        throw is.invalidParameterError('distance', 'number between 0.0 and 15.0', options.distance);\n      }\n    }\n    if (is.defined(options.decodingTier)) {\n      if (is.integer(options.decodingTier) && is.inRange(options.decodingTier, 0, 4)) {\n        this.options.jxlDecodingTier = options.decodingTier;\n      } else {\n        throw is.invalidParameterError('decodingTier', 'integer between 0 and 4', options.decodingTier);\n      }\n    }\n    if (is.defined(options.lossless)) {\n      if (is.bool(options.lossless)) {\n        this.options.jxlLossless = options.lossless;\n      } else {\n        throw is.invalidParameterError('lossless', 'boolean', options.lossless);\n      }\n    }\n    if (is.defined(options.effort)) {\n      if (is.integer(options.effort) && is.inRange(options.effort, 1, 9)) {\n        this.options.jxlEffort = options.effort;\n      } else {\n        throw is.invalidParameterError('effort', 'integer between 1 and 9', options.effort);\n      }\n    }\n  }\n  trySetAnimationOptions(options, this.options);\n  return this._updateFormatOut('jxl', options);\n}\n\n/**\n * Force output to be raw, uncompressed pixel data.\n * Pixel ordering is left-to-right, top-to-bottom, without padding.\n * Channel ordering will be RGB or RGBA for non-greyscale colourspaces.\n *\n * @example\n * // Extract raw, unsigned 8-bit RGB pixel data from JPEG input\n * const { data, info } = await sharp('input.jpg')\n *   .raw()\n *   .toBuffer({ resolveWithObject: true });\n *\n * @example\n * // Extract alpha channel as raw, unsigned 16-bit pixel data from PNG input\n * const data = await sharp('input.png')\n *   .ensureAlpha()\n *   .extractChannel(3)\n *   .toColourspace('b-w')\n *   .raw({ depth: 'ushort' })\n *   .toBuffer();\n *\n * @param {Object} [options] - output options\n * @param {string} [options.depth='uchar'] - bit depth, one of: char, uchar (default), short, ushort, int, uint, float, complex, double, dpcomplex\n * @returns {Sharp}\n * @throws {Error} Invalid options\n */\nfunction raw (options) {\n  if (is.object(options)) {\n    if (is.defined(options.depth)) {\n      if (is.string(options.depth) && is.inArray(options.depth,\n        ['char', 'uchar', 'short', 'ushort', 'int', 'uint', 'float', 'complex', 'double', 'dpcomplex']\n      )) {\n        this.options.rawDepth = options.depth;\n      } else {\n        throw is.invalidParameterError('depth', 'one of: char, uchar, short, ushort, int, uint, float, complex, double, dpcomplex', options.depth);\n      }\n    }\n  }\n  return this._updateFormatOut('raw');\n}\n\n/**\n * Use tile-based deep zoom (image pyramid) output.\n *\n * Set the format and options for tile images via the `toFormat`, `jpeg`, `png` or `webp` functions.\n * Use a `.zip` or `.szi` file extension with `toFile` to write to a compressed archive file format.\n *\n * The container will be set to `zip` when the output is a Buffer or Stream, otherwise it will default to `fs`.\n *\n * @example\n *  sharp('input.tiff')\n *   .png()\n *   .tile({\n *     size: 512\n *   })\n *   .toFile('output.dz', function(err, info) {\n *     // output.dzi is the Deep Zoom XML definition\n *     // output_files contains 512x512 tiles grouped by zoom level\n *   });\n *\n * @example\n * const zipFileWithTiles = await sharp(input)\n *   .tile({ basename: \"tiles\" })\n *   .toBuffer();\n *\n * @example\n * const iiififier = sharp().tile({ layout: \"iiif\" });\n * readableStream\n *   .pipe(iiififier)\n *   .pipe(writeableStream);\n *\n * @param {Object} [options]\n * @param {number} [options.size=256] tile size in pixels, a value between 1 and 8192.\n * @param {number} [options.overlap=0] tile overlap in pixels, a value between 0 and 8192.\n * @param {number} [options.angle=0] tile angle of rotation, must be a multiple of 90.\n * @param {string|Object} [options.background={r: 255, g: 255, b: 255, alpha: 1}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to white without transparency.\n * @param {string} [options.depth] how deep to make the pyramid, possible values are `onepixel`, `onetile` or `one`, default based on layout.\n * @param {number} [options.skipBlanks=-1] Threshold to skip tile generation. Range is 0-255 for 8-bit images, 0-65535 for 16-bit images. Default is 5 for `google` layout, -1 (no skip) otherwise.\n * @param {string} [options.container='fs'] tile container, with value `fs` (filesystem) or `zip` (compressed file).\n * @param {string} [options.layout='dz'] filesystem layout, possible values are `dz`, `iiif`, `iiif3`, `zoomify` or `google`.\n * @param {boolean} [options.centre=false] centre image in tile.\n * @param {boolean} [options.center=false] alternative spelling of centre.\n * @param {string} [options.id='https://example.com/iiif'] when `layout` is `iiif`/`iiif3`, sets the `@id`/`id` attribute of `info.json`\n * @param {string} [options.basename] the name of the directory within the zip file when container is `zip`.\n * @returns {Sharp}\n * @throws {Error} Invalid parameters\n */\nfunction tile (options) {\n  if (is.object(options)) {\n    // Size of square tiles, in pixels\n    if (is.defined(options.size)) {\n      if (is.integer(options.size) && is.inRange(options.size, 1, 8192)) {\n        this.options.tileSize = options.size;\n      } else {\n        throw is.invalidParameterError('size', 'integer between 1 and 8192', options.size);\n      }\n    }\n    // Overlap of tiles, in pixels\n    if (is.defined(options.overlap)) {\n      if (is.integer(options.overlap) && is.inRange(options.overlap, 0, 8192)) {\n        if (options.overlap > this.options.tileSize) {\n          throw is.invalidParameterError('overlap', `<= size (${this.options.tileSize})`, options.overlap);\n        }\n        this.options.tileOverlap = options.overlap;\n      } else {\n        throw is.invalidParameterError('overlap', 'integer between 0 and 8192', options.overlap);\n      }\n    }\n    // Container\n    if (is.defined(options.container)) {\n      if (is.string(options.container) && is.inArray(options.container, ['fs', 'zip'])) {\n        this.options.tileContainer = options.container;\n      } else {\n        throw is.invalidParameterError('container', 'one of: fs, zip', options.container);\n      }\n    }\n    // Layout\n    if (is.defined(options.layout)) {\n      if (is.string(options.layout) && is.inArray(options.layout, ['dz', 'google', 'iiif', 'iiif3', 'zoomify'])) {\n        this.options.tileLayout = options.layout;\n      } else {\n        throw is.invalidParameterError('layout', 'one of: dz, google, iiif, iiif3, zoomify', options.layout);\n      }\n    }\n    // Angle of rotation,\n    if (is.defined(options.angle)) {\n      if (is.integer(options.angle) && !(options.angle % 90)) {\n        this.options.tileAngle = options.angle;\n      } else {\n        throw is.invalidParameterError('angle', 'positive/negative multiple of 90', options.angle);\n      }\n    }\n    // Background colour\n    this._setBackgroundColourOption('tileBackground', options.background);\n    // Depth of tiles\n    if (is.defined(options.depth)) {\n      if (is.string(options.depth) && is.inArray(options.depth, ['onepixel', 'onetile', 'one'])) {\n        this.options.tileDepth = options.depth;\n      } else {\n        throw is.invalidParameterError('depth', 'one of: onepixel, onetile, one', options.depth);\n      }\n    }\n    // Threshold to skip blank tiles\n    if (is.defined(options.skipBlanks)) {\n      if (is.integer(options.skipBlanks) && is.inRange(options.skipBlanks, -1, 65535)) {\n        this.options.tileSkipBlanks = options.skipBlanks;\n      } else {\n        throw is.invalidParameterError('skipBlanks', 'integer between -1 and 255/65535', options.skipBlanks);\n      }\n    } else if (is.defined(options.layout) && options.layout === 'google') {\n      this.options.tileSkipBlanks = 5;\n    }\n    // Center image in tile\n    const centre = is.bool(options.center) ? options.center : options.centre;\n    if (is.defined(centre)) {\n      this._setBooleanOption('tileCentre', centre);\n    }\n    // @id attribute for IIIF layout\n    if (is.defined(options.id)) {\n      if (is.string(options.id)) {\n        this.options.tileId = options.id;\n      } else {\n        throw is.invalidParameterError('id', 'string', options.id);\n      }\n    }\n    // Basename for zip container\n    if (is.defined(options.basename)) {\n      if (is.string(options.basename)) {\n        this.options.tileBasename = options.basename;\n      } else {\n        throw is.invalidParameterError('basename', 'string', options.basename);\n      }\n    }\n  }\n  // Format\n  if (is.inArray(this.options.formatOut, ['jpeg', 'png', 'webp'])) {\n    this.options.tileFormat = this.options.formatOut;\n  } else if (this.options.formatOut !== 'input') {\n    throw is.invalidParameterError('format', 'one of: jpeg, png, webp', this.options.formatOut);\n  }\n  return this._updateFormatOut('dz');\n}\n\n/**\n * Set a timeout for processing, in seconds.\n * Use a value of zero to continue processing indefinitely, the default behaviour.\n *\n * The clock starts when libvips opens an input image for processing.\n * Time spent waiting for a libuv thread to become available is not included.\n *\n * @example\n * // Ensure processing takes no longer than 3 seconds\n * try {\n *   const data = await sharp(input)\n *     .blur(1000)\n *     .timeout({ seconds: 3 })\n *     .toBuffer();\n * } catch (err) {\n *   if (err.message.includes('timeout')) { ... }\n * }\n *\n * @since 0.29.2\n *\n * @param {Object} options\n * @param {number} options.seconds - Number of seconds after which processing will be stopped\n * @returns {Sharp}\n */\nfunction timeout (options) {\n  if (!is.plainObject(options)) {\n    throw is.invalidParameterError('options', 'object', options);\n  }\n  if (is.integer(options.seconds) && is.inRange(options.seconds, 0, 3600)) {\n    this.options.timeoutSeconds = options.seconds;\n  } else {\n    throw is.invalidParameterError('seconds', 'integer between 0 and 3600', options.seconds);\n  }\n  return this;\n}\n\n/**\n * Update the output format unless options.force is false,\n * in which case revert to input format.\n * @private\n * @param {string} formatOut\n * @param {Object} [options]\n * @param {boolean} [options.force=true] - force output format, otherwise attempt to use input format\n * @returns {Sharp}\n */\nfunction _updateFormatOut (formatOut, options) {\n  if (!(is.object(options) && options.force === false)) {\n    this.options.formatOut = formatOut;\n  }\n  return this;\n}\n\n/**\n * Update a boolean attribute of the this.options Object.\n * @private\n * @param {string} key\n * @param {boolean} val\n * @throws {Error} Invalid key\n */\nfunction _setBooleanOption (key, val) {\n  if (is.bool(val)) {\n    this.options[key] = val;\n  } else {\n    throw is.invalidParameterError(key, 'boolean', val);\n  }\n}\n\n/**\n * Called by a WriteableStream to notify us it is ready for data.\n * @private\n */\nfunction _read () {\n  if (!this.options.streamOut) {\n    this.options.streamOut = true;\n    const stack = Error();\n    this._pipeline(undefined, stack);\n  }\n}\n\n/**\n * Invoke the C++ image processing pipeline\n * Supports callback, stream and promise variants\n * @private\n */\nfunction _pipeline (callback, stack) {\n  if (typeof callback === 'function') {\n    // output=file/buffer\n    if (this._isStreamInput()) {\n      // output=file/buffer, input=stream\n      this.on('finish', () => {\n        this._flattenBufferIn();\n        sharp.pipeline(this.options, (err, data, info) => {\n          if (err) {\n            callback(is.nativeError(err, stack));\n          } else {\n            callback(null, data, info);\n          }\n        });\n      });\n    } else {\n      // output=file/buffer, input=file/buffer\n      sharp.pipeline(this.options, (err, data, info) => {\n        if (err) {\n          callback(is.nativeError(err, stack));\n        } else {\n          callback(null, data, info);\n        }\n      });\n    }\n    return this;\n  } else if (this.options.streamOut) {\n    // output=stream\n    if (this._isStreamInput()) {\n      // output=stream, input=stream\n      this.once('finish', () => {\n        this._flattenBufferIn();\n        sharp.pipeline(this.options, (err, data, info) => {\n          if (err) {\n            this.emit('error', is.nativeError(err, stack));\n          } else {\n            this.emit('info', info);\n            this.push(data);\n          }\n          this.push(null);\n          this.on('end', () => this.emit('close'));\n        });\n      });\n      if (this.streamInFinished) {\n        this.emit('finish');\n      }\n    } else {\n      // output=stream, input=file/buffer\n      sharp.pipeline(this.options, (err, data, info) => {\n        if (err) {\n          this.emit('error', is.nativeError(err, stack));\n        } else {\n          this.emit('info', info);\n          this.push(data);\n        }\n        this.push(null);\n        this.on('end', () => this.emit('close'));\n      });\n    }\n    return this;\n  } else {\n    // output=promise\n    if (this._isStreamInput()) {\n      // output=promise, input=stream\n      return new Promise((resolve, reject) => {\n        this.once('finish', () => {\n          this._flattenBufferIn();\n          sharp.pipeline(this.options, (err, data, info) => {\n            if (err) {\n              reject(is.nativeError(err, stack));\n            } else {\n              if (this.options.resolveWithObject) {\n                resolve({ data, info });\n              } else {\n                resolve(data);\n              }\n            }\n          });\n        });\n      });\n    } else {\n      // output=promise, input=file/buffer\n      return new Promise((resolve, reject) => {\n        sharp.pipeline(this.options, (err, data, info) => {\n          if (err) {\n            reject(is.nativeError(err, stack));\n          } else {\n            if (this.options.resolveWithObject) {\n              resolve({ data, info });\n            } else {\n              resolve(data);\n            }\n          }\n        });\n      });\n    }\n  }\n}\n\n/**\n * Decorate the Sharp prototype with output-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Object.assign(Sharp.prototype, {\n    // Public\n    toFile,\n    toBuffer,\n    keepExif,\n    withExif,\n    withExifMerge,\n    keepIccProfile,\n    withIccProfile,\n    keepXmp,\n    withXmp,\n    keepMetadata,\n    withMetadata,\n    toFormat,\n    jpeg,\n    jp2,\n    png,\n    webp,\n    tiff,\n    avif,\n    heif,\n    jxl,\n    gif,\n    raw,\n    tile,\n    timeout,\n    // Private\n    _updateFormatOut,\n    _setBooleanOption,\n    _read,\n    _pipeline\n  });\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst events = require('node:events');\nconst detectLibc = require('detect-libc');\n\nconst is = require('./is');\nconst { runtimePlatformArch } = require('./libvips');\nconst sharp = require('./sharp');\n\nconst runtimePlatform = runtimePlatformArch();\nconst libvipsVersion = sharp.libvipsVersion();\n\n/**\n * An Object containing nested boolean values representing the available input and output formats/methods.\n * @member\n * @example\n * console.log(sharp.format);\n * @returns {Object}\n */\nconst format = sharp.format();\nformat.heif.output.alias = ['avif', 'heic'];\nformat.jpeg.output.alias = ['jpe', 'jpg'];\nformat.tiff.output.alias = ['tif'];\nformat.jp2k.output.alias = ['j2c', 'j2k', 'jp2', 'jpx'];\n\n/**\n * An Object containing the available interpolators and their proper values\n * @readonly\n * @enum {string}\n */\nconst interpolators = {\n  /** [Nearest neighbour interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation). Suitable for image enlargement only. */\n  nearest: 'nearest',\n  /** [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation). Faster than bicubic but with less smooth results. */\n  bilinear: 'bilinear',\n  /** [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation) (the default). */\n  bicubic: 'bicubic',\n  /** [LBB interpolation](https://github.com/libvips/libvips/blob/master/libvips/resample/lbb.cpp#L100). Prevents some \"[acutance](http://en.wikipedia.org/wiki/Acutance)\" but typically reduces performance by a factor of 2. */\n  locallyBoundedBicubic: 'lbb',\n  /** [Nohalo interpolation](http://eprints.soton.ac.uk/268086/). Prevents acutance but typically reduces performance by a factor of 3. */\n  nohalo: 'nohalo',\n  /** [VSQBS interpolation](https://github.com/libvips/libvips/blob/master/libvips/resample/vsqbs.cpp#L48). Prevents \"staircasing\" when enlarging. */\n  vertexSplitQuadraticBasisSpline: 'vsqbs'\n};\n\n/**\n * An Object containing the version numbers of sharp, libvips\n * and (when using prebuilt binaries) its dependencies.\n *\n * @member\n * @example\n * console.log(sharp.versions);\n */\nlet versions = {\n  vips: libvipsVersion.semver\n};\n/* node:coverage ignore next 15 */\nif (!libvipsVersion.isGlobal) {\n  if (!libvipsVersion.isWasm) {\n    try {\n      versions = require(`@img/sharp-${runtimePlatform}/versions`);\n    } catch (_) {\n      try {\n        versions = require(`@img/sharp-libvips-${runtimePlatform}/versions`);\n      } catch (_) {}\n    }\n  } else {\n    try {\n      versions = require('@img/sharp-wasm32/versions');\n    } catch (_) {}\n  }\n}\nversions.sharp = require('../package.json').version;\n\n/* node:coverage ignore next 5 */\nif (versions.heif && format.heif) {\n  // Prebuilt binaries provide AV1\n  format.heif.input.fileSuffix = ['.avif'];\n  format.heif.output.alias = ['avif'];\n}\n\n/**\n * Gets or, when options are provided, sets the limits of _libvips'_ operation cache.\n * Existing entries in the cache will be trimmed after any change in limits.\n * This method always returns cache statistics,\n * useful for determining how much working memory is required for a particular task.\n *\n * @example\n * const stats = sharp.cache();\n * @example\n * sharp.cache( { items: 200 } );\n * sharp.cache( { files: 0 } );\n * sharp.cache(false);\n *\n * @param {Object|boolean} [options=true] - Object with the following attributes, or boolean where true uses default cache settings and false removes all caching\n * @param {number} [options.memory=50] - is the maximum memory in MB to use for this cache\n * @param {number} [options.files=20] - is the maximum number of files to hold open\n * @param {number} [options.items=100] - is the maximum number of operations to cache\n * @returns {Object}\n */\nfunction cache (options) {\n  if (is.bool(options)) {\n    if (options) {\n      // Default cache settings of 50MB, 20 files, 100 items\n      return sharp.cache(50, 20, 100);\n    } else {\n      return sharp.cache(0, 0, 0);\n    }\n  } else if (is.object(options)) {\n    return sharp.cache(options.memory, options.files, options.items);\n  } else {\n    return sharp.cache();\n  }\n}\ncache(true);\n\n/**\n * Gets or, when a concurrency is provided, sets\n * the maximum number of threads _libvips_ should use to process _each image_.\n * These are from a thread pool managed by glib,\n * which helps avoid the overhead of creating new threads.\n *\n * This method always returns the current concurrency.\n *\n * The default value is the number of CPU cores,\n * except when using glibc-based Linux without jemalloc,\n * where the default is `1` to help reduce memory fragmentation.\n *\n * A value of `0` will reset this to the number of CPU cores.\n *\n * Some image format libraries spawn additional threads,\n * e.g. libaom manages its own 4 threads when encoding AVIF images,\n * and these are independent of the value set here.\n *\n * :::note\n * Further {@link /performance/ control over performance} is available.\n * :::\n *\n * @example\n * const threads = sharp.concurrency(); // 4\n * sharp.concurrency(2); // 2\n * sharp.concurrency(0); // 4\n *\n * @param {number} [concurrency]\n * @returns {number} concurrency\n */\nfunction concurrency (concurrency) {\n  return sharp.concurrency(is.integer(concurrency) ? concurrency : null);\n}\n/* node:coverage ignore next 7 */\nif (detectLibc.familySync() === detectLibc.GLIBC && !sharp._isUsingJemalloc()) {\n  // Reduce default concurrency to 1 when using glibc memory allocator\n  sharp.concurrency(1);\n} else if (detectLibc.familySync() === detectLibc.MUSL && sharp.concurrency() === 1024) {\n  // Reduce default concurrency when musl thread over-subscription detected\n  sharp.concurrency(require('node:os').availableParallelism());\n}\n\n/**\n * An EventEmitter that emits a `change` event when a task is either:\n * - queued, waiting for _libuv_ to provide a worker thread\n * - complete\n * @member\n * @example\n * sharp.queue.on('change', function(queueLength) {\n *   console.log('Queue contains ' + queueLength + ' task(s)');\n * });\n */\nconst queue = new events.EventEmitter();\n\n/**\n * Provides access to internal task counters.\n * - queue is the number of tasks this module has queued waiting for _libuv_ to provide a worker thread from its pool.\n * - process is the number of resize tasks currently being processed.\n *\n * @example\n * const counters = sharp.counters(); // { queue: 2, process: 4 }\n *\n * @returns {Object}\n */\nfunction counters () {\n  return sharp.counters();\n}\n\n/**\n * Get and set use of SIMD vector unit instructions.\n * Requires libvips to have been compiled with highway support.\n *\n * Improves the performance of `resize`, `blur` and `sharpen` operations\n * by taking advantage of the SIMD vector unit of the CPU, e.g. Intel SSE and ARM NEON.\n *\n * @example\n * const simd = sharp.simd();\n * // simd is `true` if the runtime use of highway is currently enabled\n * @example\n * const simd = sharp.simd(false);\n * // prevent libvips from using highway at runtime\n *\n * @param {boolean} [simd=true]\n * @returns {boolean}\n */\nfunction simd (simd) {\n  return sharp.simd(is.bool(simd) ? simd : null);\n}\n\n/**\n * Block libvips operations at runtime.\n *\n * This is in addition to the `VIPS_BLOCK_UNTRUSTED` environment variable,\n * which when set will block all \"untrusted\" operations.\n *\n * @since 0.32.4\n *\n * @example <caption>Block all TIFF input.</caption>\n * sharp.block({\n *   operation: ['VipsForeignLoadTiff']\n * });\n *\n * @param {Object} options\n * @param {Array<string>} options.operation - List of libvips low-level operation names to block.\n */\nfunction block (options) {\n  if (is.object(options)) {\n    if (Array.isArray(options.operation) && options.operation.every(is.string)) {\n      sharp.block(options.operation, true);\n    } else {\n      throw is.invalidParameterError('operation', 'Array<string>', options.operation);\n    }\n  } else {\n    throw is.invalidParameterError('options', 'object', options);\n  }\n}\n\n/**\n * Unblock libvips operations at runtime.\n *\n * This is useful for defining a list of allowed operations.\n *\n * @since 0.32.4\n *\n * @example <caption>Block all input except WebP from the filesystem.</caption>\n * sharp.block({\n *   operation: ['VipsForeignLoad']\n * });\n * sharp.unblock({\n *   operation: ['VipsForeignLoadWebpFile']\n * });\n *\n * @example <caption>Block all input except JPEG and PNG from a Buffer or Stream.</caption>\n * sharp.block({\n *   operation: ['VipsForeignLoad']\n * });\n * sharp.unblock({\n *   operation: ['VipsForeignLoadJpegBuffer', 'VipsForeignLoadPngBuffer']\n * });\n *\n * @param {Object} options\n * @param {Array<string>} options.operation - List of libvips low-level operation names to unblock.\n */\nfunction unblock (options) {\n  if (is.object(options)) {\n    if (Array.isArray(options.operation) && options.operation.every(is.string)) {\n      sharp.block(options.operation, false);\n    } else {\n      throw is.invalidParameterError('operation', 'Array<string>', options.operation);\n    }\n  } else {\n    throw is.invalidParameterError('options', 'object', options);\n  }\n}\n\n/**\n * Decorate the Sharp class with utility-related functions.\n * @module Sharp\n * @private\n */\nmodule.exports = (Sharp) => {\n  Sharp.cache = cache;\n  Sharp.concurrency = concurrency;\n  Sharp.counters = counters;\n  Sharp.simd = simd;\n  Sharp.format = format;\n  Sharp.interpolators = interpolators;\n  Sharp.versions = versions;\n  Sharp.queue = queue;\n  Sharp.block = block;\n  Sharp.unblock = unblock;\n};\n", "/*!\n  Copyright 2013 Lovell Fuller and others.\n  SPDX-License-Identifier: Apache-2.0\n*/\n\nconst Sharp = require('./constructor');\nrequire('./input')(Sharp);\nrequire('./resize')(Sharp);\nrequire('./composite')(Sharp);\nrequire('./operation')(Sharp);\nrequire('./colour')(Sharp);\nrequire('./channel')(Sharp);\nrequire('./output')(Sharp);\nrequire('./utility')(Sharp);\n\nmodule.exports = Sharp;\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "export function createSingleFlightWake(run, options = {}) {\n    let running = null;\n    let trailingWakeRequested = false;\n    async function runLoop() {\n        let lastResult;\n        for (;;) {\n            trailingWakeRequested = false;\n            lastResult = await run();\n            if (!trailingWakeRequested)\n                return lastResult;\n        }\n    }\n    return () => {\n        if (running) {\n            trailingWakeRequested = true;\n            options.onCoalesced?.();\n            return running;\n        }\n        running = runLoop().finally(() => {\n            running = null;\n            trailingWakeRequested = false;\n        });\n        return running;\n    };\n}\n", "export const GENCOW_PLATFORM_WAKE_CHANNEL = \"gencow_platform_wake_v1\";\nexport const GENCOW_APP_WAKE_CHANNEL = \"gencow_app_wake_v1\";\nexport const LEGACY_REALTIME_OUTBOX_WAKE_CHANNEL = \"gencow_realtime_outbox\";\nexport const WAKE_SIGNAL_KINDS = [\n    \"realtime\",\n    \"scheduler\",\n    \"workflow\",\n    \"rag_ingest\",\n    \"email\",\n    \"webhook\",\n];\nexport const WAKE_SIGNAL_NOTIFY_SQL = \"SELECT pg_notify($1, $2)\";\nconst WAKE_SIGNAL_KIND_SET = new Set(WAKE_SIGNAL_KINDS);\nconst CHANNEL_PATTERN = /^[A-Za-z0-9_.:-]+$/;\nconst MAX_NOTIFY_PAYLOAD_BYTES = 7_900;\nconst encoder = new TextEncoder();\nfunction byteLength(value) {\n    return encoder.encode(value).length;\n}\nfunction isObject(value) {\n    return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nexport function isWakeSignalKind(value) {\n    return typeof value === \"string\" && WAKE_SIGNAL_KIND_SET.has(value);\n}\nexport function normalizeWakeSignalChannel(channel, fallback) {\n    const value = channel ?? fallback;\n    if (!CHANNEL_PATTERN.test(value) || byteLength(value) > 63) {\n        throw new Error(\"PostgreSQL wake channel must be 1-63 bytes of [A-Za-z0-9_.:-]\");\n    }\n    return value;\n}\nexport function buildWakeSignalPayload(kind) {\n    const payload = JSON.stringify({ kind });\n    if (byteLength(payload) > MAX_NOTIFY_PAYLOAD_BYTES) {\n        throw new Error(\"PostgreSQL wake payload exceeds NOTIFY payload limit\");\n    }\n    return payload;\n}\nexport function buildWakeNotifySql(params) {\n    return {\n        query: WAKE_SIGNAL_NOTIFY_SQL,\n        params: [\n            normalizeWakeSignalChannel(params.channel, params.defaultChannel ?? GENCOW_APP_WAKE_CHANNEL),\n            buildWakeSignalPayload(params.kind),\n        ],\n    };\n}\nexport function parseWakeSignalPayload(payloadText) {\n    let payload;\n    try {\n        payload = JSON.parse(payloadText || \"{}\");\n    }\n    catch {\n        return { kind: \"unknown\", legacyAppName: null, malformed: true };\n    }\n    if (!isObject(payload)) {\n        return { kind: \"unknown\", legacyAppName: null, malformed: false };\n    }\n    if (\"kind\" in payload) {\n        return {\n            kind: isWakeSignalKind(payload.kind) ? payload.kind : \"unknown\",\n            legacyAppName: null,\n            malformed: false,\n        };\n    }\n    const legacyAppName = typeof payload.appName === \"string\" ? payload.appName : null;\n    if (legacyAppName || typeof payload.eventCount === \"number\") {\n        return { kind: \"realtime\", legacyAppName, malformed: false };\n    }\n    return { kind: \"unknown\", legacyAppName: null, malformed: false };\n}\n", "function rowsFromUnknown(result) {\n    if (Array.isArray(result))\n        return result;\n    return (result?.rows ?? []);\n}\nfunction errorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nfunction nowIso() {\n    return new Date().toISOString();\n}\nfunction incrementCounter(counters, kind) {\n    counters[kind] = (counters[kind] ?? 0) + 1;\n}\nasync function readNotificationQueueUsage(rawSql) {\n    if (!rawSql)\n        return { usage: null, error: null };\n    try {\n        const rows = rowsFromUnknown(await rawSql(`SELECT pg_notification_queue_usage() AS queue_usage`));\n        const rawValue = rows[0]?.queue_usage ?? rows[0]?.pg_notification_queue_usage;\n        const usage = typeof rawValue === \"number\" ? rawValue : Number(rawValue);\n        return { usage: Number.isFinite(usage) ? usage : null, error: null };\n    }\n    catch (error) {\n        return { usage: null, error: errorMessage(error).slice(0, 160) };\n    }\n}\nexport function createDisabledWakeSignalDiagnostics(reason = \"disabled\") {\n    return {\n        channel: null,\n        listenerStatus: \"disabled\",\n        allowedKinds: [],\n        receivedTotal: {},\n        malformedTotal: 0,\n        filteredTotal: 0,\n        handlerFailuresTotal: 0,\n        listenReadyTotal: 0,\n        reconnectTotal: 0,\n        lastReceivedAt: null,\n        lastListenAt: null,\n        lastErrorAt: null,\n        lastError: reason,\n        notificationQueueUsage: null,\n        notificationQueueUsageError: null,\n    };\n}\nexport function createWakeSignalDiagnostics(params) {\n    let listenerStatus = params.initialStatus ?? \"idle\";\n    let allowedKinds = [];\n    const receivedTotal = {};\n    let malformedTotal = 0;\n    let filteredTotal = 0;\n    let handlerFailuresTotal = 0;\n    let listenReadyTotal = 0;\n    let reconnectTotal = 0;\n    let lastReceivedAt = null;\n    let lastListenAt = null;\n    let lastErrorAt = null;\n    let lastError = null;\n    return {\n        setAllowedKinds(kinds) {\n            allowedKinds = [...new Set([...allowedKinds, ...kinds])];\n        },\n        markConnecting() {\n            listenerStatus = \"connecting\";\n            lastError = null;\n            lastErrorAt = null;\n        },\n        markListening() {\n            listenerStatus = \"listening\";\n            listenReadyTotal += 1;\n            if (listenReadyTotal > 1)\n                reconnectTotal += 1;\n            lastListenAt = nowIso();\n            lastError = null;\n            lastErrorAt = null;\n        },\n        markClosed() {\n            listenerStatus = \"closed\";\n        },\n        markError(error) {\n            listenerStatus = \"error\";\n            lastError = errorMessage(error).slice(0, 160);\n            lastErrorAt = nowIso();\n        },\n        recordReceived(kind, malformed) {\n            incrementCounter(receivedTotal, kind);\n            if (malformed)\n                malformedTotal += 1;\n            lastReceivedAt = nowIso();\n        },\n        recordFiltered() {\n            filteredTotal += 1;\n        },\n        recordHandlerFailure(error) {\n            handlerFailuresTotal += 1;\n            lastError = errorMessage(error).slice(0, 160);\n            lastErrorAt = nowIso();\n        },\n        async getSnapshot() {\n            const queueUsage = await readNotificationQueueUsage(params.rawSql);\n            return {\n                channel: params.channel,\n                listenerStatus,\n                allowedKinds,\n                receivedTotal: { ...receivedTotal },\n                malformedTotal,\n                filteredTotal,\n                handlerFailuresTotal,\n                listenReadyTotal,\n                reconnectTotal,\n                lastReceivedAt,\n                lastListenAt,\n                lastErrorAt,\n                lastError,\n                notificationQueueUsage: queueUsage.usage,\n                notificationQueueUsageError: queueUsage.error,\n            };\n        },\n    };\n}\n", "function maybeParseJson(value) {\n    if (typeof value !== \"string\")\n        return value;\n    try {\n        return JSON.parse(value);\n    }\n    catch {\n        return value;\n    }\n}\nexport function extractWorkflowResumeArgs(payload) {\n    const normalized = maybeParseJson(payload);\n    const candidates = [\n        normalized,\n        normalized?.args,\n        normalized?.value,\n        normalized?.args?.value,\n    ].map(maybeParseJson);\n    for (const candidate of candidates) {\n        if (!candidate || typeof candidate !== \"object\")\n            continue;\n        const workflowId = candidate.workflowId;\n        if (typeof workflowId === \"string\" && workflowId.length > 0) {\n            return { workflowId };\n        }\n    }\n    return {};\n}\nexport function getWorkflowResumeDeliveryJobId(workflowId) {\n    return `workflow:v2:${workflowId}`;\n}\n", "import { GENCOW_APP_WAKE_CHANNEL, buildWakeNotifySql, normalizeWakeSignalChannel, parseWakeSignalPayload, } from \"./wake-signal-types\";\nimport { createWakeSignalDiagnostics, } from \"./wake-signal-diagnostics\";\nexport function createPostgresWakeSignalListenerSource(client) {\n    return {\n        async listen(channel, handler, onListen) {\n            const unsubscribe = await client.listen(channel, (payload) => {\n                void handler(payload);\n            }, onListen);\n            if (typeof unsubscribe === \"function\")\n                return unsubscribe;\n            return () => unsubscribe.unlisten();\n        },\n    };\n}\nexport function createPostgresWakeSignalBus(params) {\n    const defaultChannel = params.defaultChannel ?? GENCOW_APP_WAKE_CHANNEL;\n    const channel = normalizeWakeSignalChannel(params.channel, defaultChannel);\n    const diagnostics = createWakeSignalDiagnostics({\n        channel,\n        rawSql: params.rawSql,\n    });\n    let activeListenRegistrations = 0;\n    let channelListenReady = false;\n    return {\n        async notify(kind) {\n            const statement = buildWakeNotifySql({ kind, channel, defaultChannel });\n            await params.rawSql(statement.query, statement.params);\n        },\n        async listen(kinds, handler, options) {\n            if (!params.source) {\n                throw new Error(\"PostgreSQL wake signal listener source is required\");\n            }\n            const allowedKinds = new Set(kinds);\n            diagnostics.setAllowedKinds(kinds);\n            if (!channelListenReady && activeListenRegistrations === 0)\n                diagnostics.markConnecting();\n            activeListenRegistrations += 1;\n            let listenReady = false;\n            let initialListenReady = null;\n            const runListenReadyCallback = async () => {\n                try {\n                    await options?.onListen?.();\n                }\n                catch (error) {\n                    diagnostics.recordHandlerFailure(error);\n                    const message = error instanceof Error ? error.message : String(error);\n                    params.logger?.warn(`[wake-signal] listen-ready callback failed: ${message.slice(0, 160)}`);\n                }\n            };\n            const markListenReady = () => {\n                const wasListenReady = listenReady;\n                listenReady = true;\n                if (!channelListenReady || wasListenReady) {\n                    diagnostics.markListening();\n                    channelListenReady = true;\n                }\n                const callbackRun = runListenReadyCallback();\n                initialListenReady ??= callbackRun;\n            };\n            let unsubscribe;\n            try {\n                unsubscribe = await params.source.listen(channel, async (payloadText) => {\n                    const signal = parseWakeSignalPayload(payloadText);\n                    diagnostics.recordReceived(signal.kind, signal.malformed);\n                    if (signal.kind !== \"unknown\" && !allowedKinds.has(signal.kind)) {\n                        diagnostics.recordFiltered();\n                        return;\n                    }\n                    try {\n                        await handler(signal);\n                    }\n                    catch (error) {\n                        diagnostics.recordHandlerFailure(error);\n                        const message = error instanceof Error ? error.message : String(error);\n                        params.logger?.warn(`[wake-signal] handler failed: ${message.slice(0, 160)}`);\n                    }\n                }, markListenReady);\n            }\n            catch (error) {\n                activeListenRegistrations = Math.max(0, activeListenRegistrations - 1);\n                if (activeListenRegistrations === 0)\n                    channelListenReady = false;\n                diagnostics.markError(error);\n                throw error;\n            }\n            if (!listenReady)\n                markListenReady();\n            await initialListenReady;\n            return async () => {\n                await unsubscribe();\n                activeListenRegistrations = Math.max(0, activeListenRegistrations - 1);\n                if (activeListenRegistrations === 0) {\n                    channelListenReady = false;\n                    diagnostics.markClosed();\n                }\n            };\n        },\n        getDiagnostics() {\n            return diagnostics.getSnapshot();\n        },\n    };\n}\n", "import { createPostgresWakeSignalBus, createPostgresWakeSignalListenerSource, } from \"./postgres-wake-signal-bus\";\nimport { GENCOW_PLATFORM_WAKE_CHANNEL } from \"./wake-signal-types\";\nfunction isEnabled(value) {\n    return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\nfunction normalizeUrlParam(value) {\n    return (value ?? \"\").trim().toLowerCase();\n}\nfunction isTransactionPoolingUrl(databaseUrl) {\n    const url = new URL(databaseUrl);\n    const pgbouncer = normalizeUrlParam(url.searchParams.get(\"pgbouncer\"));\n    const poolMode = normalizeUrlParam(url.searchParams.get(\"pool_mode\"));\n    const options = normalizeUrlParam(url.searchParams.get(\"options\"));\n    return (pgbouncer === \"true\" ||\n        poolMode === \"transaction\" ||\n        /\\bpool_mode\\s*=\\s*transaction\\b/.test(options));\n}\nexport function assertPostgresWakeSignalListenerUrl(databaseUrl) {\n    try {\n        if (!isTransactionPoolingUrl(databaseUrl))\n            return;\n    }\n    catch {\n        throw new Error(\"GENCOW_WAKE_SIGNAL_DATABASE_URL must be a valid PostgreSQL listener URL\");\n    }\n    throw new Error(\"GENCOW_WAKE_SIGNAL_DATABASE_URL must use direct PostgreSQL or session-pooling PgBouncer; transaction-pooling PgBouncer cannot LISTEN\");\n}\nexport function resolvePostgresWakeSignalRuntimeConfig(env = process.env) {\n    if (!isEnabled(env.GENCOW_WAKE_SIGNAL_ENABLED)) {\n        return { enabled: false, reason: \"disabled\" };\n    }\n    const databaseUrl = env.GENCOW_WAKE_SIGNAL_DATABASE_URL?.trim();\n    if (!databaseUrl) {\n        return { enabled: false, reason: \"database_url_missing\" };\n    }\n    assertPostgresWakeSignalListenerUrl(databaseUrl);\n    return { enabled: true, databaseUrl };\n}\nasync function loadPostgresFactory() {\n    const mod = (await import(\"postgres\"));\n    return mod.default;\n}\nexport async function createPostgresWakeSignalRuntime(params) {\n    const config = resolvePostgresWakeSignalRuntimeConfig(params.env);\n    if (!config.enabled) {\n        if (config.reason === \"database_url_missing\") {\n            params.logger?.warn(\"[wake-signal] GENCOW_WAKE_SIGNAL_ENABLED is on but listener URL is missing\");\n        }\n        return null;\n    }\n    const postgresFactory = params.postgresFactory ?? (await loadPostgresFactory());\n    const client = postgresFactory(config.databaseUrl, {\n        max: 1,\n        idle_timeout: 0,\n        max_lifetime: 0,\n    });\n    const bus = createPostgresWakeSignalBus({\n        rawSql: params.rawSql,\n        source: createPostgresWakeSignalListenerSource(client),\n        channel: params.channel,\n        defaultChannel: params.defaultChannel ?? GENCOW_PLATFORM_WAKE_CHANNEL,\n        logger: params.logger,\n    });\n    params.logger?.log(\"[wake-signal] PostgreSQL listener runtime enabled\");\n    return {\n        bus,\n        getDiagnostics: () => bus.getDiagnostics(),\n        close: () => client.end({ timeout: 5 }),\n    };\n}\n", "const DEFAULT_OFFICIAL_DOMAIN = \"gencow.com\";\nfunction stripTrailingDots(host) {\n    return host.replace(/\\.+$/, \"\");\n}\nfunction isValidPortLiteral(port) {\n    if (!/^\\d{1,5}$/.test(port))\n        return false;\n    const parsed = Number(port);\n    return Number.isInteger(parsed) && parsed >= 0 && parsed <= 65535;\n}\nexport function normalizePlatformProxyHost(hostHeader) {\n    const raw = (hostHeader ?? \"\").trim().toLowerCase();\n    if (!raw)\n        return \"\";\n    if (raw.startsWith(\"[\")) {\n        const bracketEnd = raw.indexOf(\"]\");\n        if (bracketEnd < 0)\n            return raw;\n        const address = raw.slice(1, bracketEnd);\n        const suffix = raw.slice(bracketEnd + 1);\n        if (suffix && (!suffix.startsWith(\":\") || !isValidPortLiteral(suffix.slice(1))))\n            return raw;\n        return address;\n    }\n    const colonIndex = raw.lastIndexOf(\":\");\n    if (colonIndex > -1 && raw.indexOf(\":\") === colonIndex) {\n        const hostname = raw.slice(0, colonIndex);\n        const port = raw.slice(colonIndex + 1);\n        if (isValidPortLiteral(port))\n            return stripTrailingDots(hostname);\n    }\n    return stripTrailingDots(raw);\n}\nexport function isPlatformProxyBypassHost(hostHeader, platformDomain) {\n    const host = normalizePlatformProxyHost(hostHeader);\n    const platformDomainHost = normalizePlatformProxyHost(platformDomain);\n    return (!host ||\n        host === platformDomainHost ||\n        host === `www.${platformDomainHost}` ||\n        host === \"localhost\" ||\n        host === \"127.0.0.1\" ||\n        host === \"::1\" ||\n        host === \"0:0:0:0:0:0:0:1\" ||\n        /^127(?:\\.\\d{1,3}){3}$/.test(host));\n}\nexport function shouldRouteThroughPlatformAppProxy(hostHeader, platformDomain) {\n    const host = normalizePlatformProxyHost(hostHeader);\n    return !!host && !isPlatformProxyBypassHost(host, platformDomain);\n}\nexport function createCustomDomainResolver(params) {\n    const cacheTtlMs = params.cacheTtlMs ?? 5 * 60 * 1000;\n    const negativeCacheTtlMs = params.negativeCacheTtlMs ?? 60 * 1000;\n    const domainCache = new Map();\n    return {\n        async resolveCustomDomain(host) {\n            const normalizedHost = normalizePlatformProxyHost(host);\n            if (!normalizedHost)\n                return null;\n            const cacheResolution = (resolution, ttlMs) => {\n                domainCache.set(normalizedHost, { resolution, expiresAt: Date.now() + ttlMs });\n                return resolution;\n            };\n            const cached = domainCache.get(normalizedHost);\n            if (cached && cached.expiresAt > Date.now())\n                return cached.resolution;\n            const direct = await params.findActiveDomainApp(normalizedHost);\n            if (direct)\n                return cacheResolution({ kind: \"direct\", appName: direct, hostname: normalizedHost }, cacheTtlMs);\n            if (normalizedHost.startsWith(\"www.\")) {\n                const bare = normalizedHost.slice(4);\n                if (isOfficialDomainOrSubdomainHost(bare, params.officialDomain ?? DEFAULT_OFFICIAL_DOMAIN)) {\n                    return cacheResolution(null, negativeCacheTtlMs);\n                }\n                const bareMatch = await params.findActiveDomainApp(bare);\n                if (bareMatch) {\n                    return cacheResolution({ kind: \"www_fallback_to_bare\", appName: bareMatch, hostname: normalizedHost, bareHostname: bare }, cacheTtlMs);\n                }\n            }\n            return cacheResolution(null, negativeCacheTtlMs);\n        },\n        invalidateDomainCache(domain) {\n            const normalizedDomain = normalizePlatformProxyHost(domain);\n            if (!normalizedDomain)\n                return;\n            domainCache.delete(normalizedDomain);\n            if (normalizedDomain.startsWith(\"www.\")) {\n                const bareDomain = normalizedDomain.slice(4);\n                domainCache.delete(bareDomain);\n                domainCache.delete(`www.${bareDomain}`);\n                return;\n            }\n            domainCache.delete(`www.${normalizedDomain}`);\n        },\n    };\n}\nfunction isOfficialDomainOrSubdomainHost(host, officialDomain) {\n    const normalizedHost = host.toLowerCase().trim();\n    const normalizedOfficialDomain = officialDomain.toLowerCase().trim();\n    return normalizedHost === normalizedOfficialDomain || normalizedHost.endsWith(`.${normalizedOfficialDomain}`);\n}\n", "import { resolve } from \"path\";\nconst PLATFORM_STORAGE_BRIDGE_ENV_KEYS = [\n    \"GENCOW_STORAGE_BACKEND\",\n    \"GENCOW_STORAGE_LEGACY_LOCAL_FALLBACK\",\n    \"GENCOW_PLATFORM_STORAGE_DIRECT_SERVE\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_ACCOUNT_NAME\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CONTAINER\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_ENDPOINT\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_PREFIX\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_AUTH\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_ID\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_TENANT_ID\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_SECRET\",\n    \"GENCOW_PLATFORM_STORAGE_AZURE_DIRECT_UPLOAD\",\n];\nexport function capturePlatformStorageBridgeEnv(env) {\n    return Object.fromEntries(PLATFORM_STORAGE_BRIDGE_ENV_KEYS.flatMap((key) => env[key] === undefined ? [] : [[key, env[key]]]));\n}\nexport function capturePlatformMediaWorkerStorageAuthSecret(env) {\n    return env.PLATFORM_INTERNAL_SECRET?.trim() || env.BETTER_AUTH_SECRET?.trim() || undefined;\n}\nexport function composePlatformStorageBridgeEnv(runtimeEnv, capturedStorageEnv) {\n    return { ...runtimeEnv, ...capturedStorageEnv };\n}\nexport async function registerMediaWorkerStorageBridgeForRuntime(params, logger = console, importImpl = (path) => import(path)) {\n    const mod = await importImpl(resolve(params.functionsPath, \"../src/media-worker-storage-runtime.ts\"));\n    mod.registerPlatformMediaWorkerStorageBridge({\n        app: params.app,\n        db: params.db,\n        env: params.platformStorageBridgeEnv\n            ? composePlatformStorageBridgeEnv(process.env, params.platformStorageBridgeEnv)\n            : process.env,\n        tokenSecret: params.platformMediaWorkerStorageAuthSecret,\n        logger,\n    });\n}\n", "import { resolve } from \"path\";\nimport { resolvePlatformCapacityPreset } from \"@gencow/core\";\nconst PLATFORM_MAINTENANCE_TOKEN_HEADER = \"X-Platform-Maintenance-Token\";\nfunction parsePositiveInt(value) {\n    if (!value || value.trim() === \"\")\n        return null;\n    const parsed = Number(value);\n    return Number.isInteger(parsed) && parsed > 0 ? parsed : null;\n}\nfunction normalizeNodeId(value) {\n    const normalized = value?.trim();\n    return normalized ? normalized : null;\n}\nfunction readPlatformMaintenanceToken(env) {\n    return env.GENCOW_MAINTENANCE_TOKEN || env.PLATFORM_INTERNAL_SECRET || env.BETTER_AUTH_SECRET || \"\";\n}\nfunction buildPlatformMaintenanceRequest(maintenanceToken) {\n    return maintenanceToken\n        ? { method: \"POST\", headers: { [PLATFORM_MAINTENANCE_TOKEN_HEADER]: maintenanceToken } }\n        : { method: \"POST\" };\n}\nfunction formatIntervalMs(ms) {\n    if (ms % (60 * 60 * 1000) === 0)\n        return `${ms / (60 * 60 * 1000)}h`;\n    if (ms % (60 * 1000) === 0)\n        return `${ms / (60 * 1000)}m`;\n    return `${ms}ms`;\n}\nexport function createPlatformMaintenanceTokenResolver(startupEnv = process.env) {\n    const startupToken = readPlatformMaintenanceToken(startupEnv);\n    return (env = startupEnv) => readPlatformMaintenanceToken(env) || (env === startupEnv ? startupToken : \"\");\n}\nconst resolvePlatformMaintenanceToken = createPlatformMaintenanceTokenResolver(process.env);\nexport function loadSleepMaintenanceConfig(params) {\n    const env = params.env ?? process.env;\n    const preset = resolvePlatformCapacityPreset(env);\n    return {\n        maxSleepPerCycle: params.maxSleepPerCycle ?? parsePositiveInt(env.GENCOW_SLEEP_MAX_PER_CYCLE) ?? preset.sleepMaxPerCycle,\n        sleepTimeoutMinutes: params.sleepTimeoutMinutes ??\n            parsePositiveInt(env.GENCOW_SLEEP_TIMEOUT_MINUTES) ??\n            preset.sleepTimeoutMinutes,\n        evictionThresholdMB: parsePositiveInt(env.EVICTION_THRESHOLD_MB) ?? preset.evictionThresholdMB,\n    };\n}\nfunction readAvailableRamMB(snapshot) {\n    if (!snapshot || typeof snapshot !== \"object\")\n        return Infinity;\n    const availableRamMB = snapshot.availableRamMB;\n    return typeof availableRamMB === \"number\" ? availableRamMB : Infinity;\n}\nexport function isMemoryPressure(availableRamMB, evictionThresholdMB) {\n    return evictionThresholdMB !== null && availableRamMB < evictionThresholdMB;\n}\nfunction buildSleepCandidates(params) {\n    const ghostCandidates = [];\n    const idleCandidates = [];\n    for (const [appName] of params.metaMap) {\n        const dbInfo = params.dbStatusMap.get(appName);\n        if (!dbInfo)\n            continue;\n        if (!dbInfo.hasBackend)\n            continue;\n        if (dbInfo?.parentAppId != null)\n            continue;\n        const dbNodeId = normalizeNodeId(dbInfo.nodeId);\n        if (params.currentNodeId && dbNodeId && dbNodeId !== params.currentNodeId)\n            continue;\n        const lastAccess = params.getLastAccess(appName) || 0;\n        if (dbInfo?.status === \"idle\") {\n            if (params.getAppPort(appName)) {\n                ghostCandidates.push({ appName, reason: \"ghost_idle\", lastAccess });\n            }\n            continue;\n        }\n        if (params.canSleep(appName)) {\n            idleCandidates.push({ appName, reason: \"idle_timeout\", lastAccess });\n        }\n    }\n    if (params.memoryPressure) {\n        idleCandidates.sort((a, b) => a.lastAccess - b.lastAccess);\n    }\n    return [...ghostCandidates, ...idleCandidates];\n}\nexport function registerUsageSnapshotCron(params) {\n    const logger = params.logger ?? console;\n    const fetchImpl = params.fetchImpl ?? fetch;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const usageCronIntervalMs = params.usageCronIntervalMs ?? 60 * 60 * 1000;\n    const initialDelayMs = params.initialDelayMs ?? 10_000;\n    const snapshotUrl = `http://localhost:${params.platformPort}/internal/usage/snapshot`;\n    const maintenanceToken = params.maintenanceToken ?? resolvePlatformMaintenanceToken(params.env ?? process.env);\n    const snapshotRequest = buildPlatformMaintenanceRequest(maintenanceToken);\n    setIntervalImpl(async () => {\n        try {\n            const res = await fetchImpl(snapshotUrl, snapshotRequest);\n            if (res.ok) {\n                const result = (await res.json());\n                logger.log(`[usage-cron] Storage snapshot \u2713`, result);\n            }\n            else {\n                logger.warn(`[usage-cron] Snapshot failed: ${res.status}`);\n            }\n        }\n        catch (e) {\n            logger.warn(`[usage-cron] Snapshot error:`, e instanceof Error ? e.message : String(e));\n        }\n    }, usageCronIntervalMs);\n    setTimeoutImpl(async () => {\n        try {\n            await fetchImpl(snapshotUrl, snapshotRequest);\n            logger.log(`[usage-cron] Initial snapshot \u2713`);\n        }\n        catch {\n            /* server not ready yet */\n        }\n    }, initialDelayMs);\n    logger.log(`[platform] Usage cron registered (every 1h, first in 10s)`);\n}\nexport function registerBillingMaintenanceCrons(params) {\n    const env = params.env ?? process.env;\n    if (env.GENCOW_BILLING_MAINTENANCE_CRONS === \"false\")\n        return;\n    const logger = params.logger ?? console;\n    const fetchImpl = params.fetchImpl ?? fetch;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const closeoutIntervalMs = params.closeoutIntervalMs ?? parsePositiveInt(env.GENCOW_BILLING_CLOSEOUT_INTERVAL_MS) ?? 60 * 60 * 1000;\n    const retryIntervalMs = params.retryIntervalMs ?? parsePositiveInt(env.GENCOW_BILLING_RETRY_INTERVAL_MS) ?? 6 * 60 * 60 * 1000;\n    const initialDelayMs = params.initialDelayMs ?? 30_000;\n    const maintenanceToken = params.maintenanceToken ?? resolvePlatformMaintenanceToken(env);\n    const request = buildPlatformMaintenanceRequest(maintenanceToken);\n    const closeoutUrl = `http://localhost:${params.platformPort}/internal/billing/closeout`;\n    const retryUrl = `http://localhost:${params.platformPort}/internal/billing/retry-past-due`;\n    const run = async (label, url) => {\n        try {\n            const res = await fetchImpl(url, request);\n            if (res.ok) {\n                const result = (await res.json().catch(() => ({})));\n                logger.log(`[billing-cron] ${label} \u2713`, result);\n            }\n            else {\n                logger.warn(`[billing-cron] ${label} failed: ${res.status}`);\n            }\n        }\n        catch (e) {\n            logger.warn(`[billing-cron] ${label} error:`, e instanceof Error ? e.message : String(e));\n        }\n    };\n    setIntervalImpl(() => run(\"closeout\", closeoutUrl), closeoutIntervalMs);\n    setIntervalImpl(() => run(\"retry-past-due\", retryUrl), retryIntervalMs);\n    setTimeoutImpl(() => run(\"closeout\", closeoutUrl), initialDelayMs);\n    setTimeoutImpl(() => run(\"retry-past-due\", retryUrl), initialDelayMs + 5_000);\n    logger.log(`[platform] Billing maintenance crons registered (closeout ${formatIntervalMs(closeoutIntervalMs)}, retry ${formatIntervalMs(retryIntervalMs)})`);\n}\nexport function registerPlatformSleepChecker(params) {\n    const logger = params.logger ?? console;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const sleepCheckIntervalMs = params.sleepCheckIntervalMs ?? 5 * 60 * 1000;\n    const currentNodeId = normalizeNodeId(params.currentNodeId ?? params.env?.GENCOW_NODE_ID);\n    const config = loadSleepMaintenanceConfig({\n        env: params.env,\n        maxSleepPerCycle: params.maxSleepPerCycle,\n        sleepTimeoutMinutes: params.sleepTimeoutMinutes,\n    });\n    const importProvisioner = params.importProvisioner ?? ((path) => import(path));\n    setIntervalImpl(async () => {\n        let sleepCount = 0;\n        try {\n            const provisioner = await importProvisioner(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n            const metaMap = provisioner.getAppMeta();\n            const availableRamMB = readAvailableRamMB(provisioner.getWakeCapacitySnapshot?.());\n            const memoryPressure = isMemoryPressure(availableRamMB, config.evictionThresholdMB);\n            const allApps = await params.fetchAppStatuses();\n            const dbStatusMap = new Map(allApps.map((app) => [\n                app.name,\n                { status: app.status, hasBackend: app.hasBackend, parentAppId: app.parentAppId, nodeId: app.nodeId },\n            ]));\n            const candidates = buildSleepCandidates({\n                metaMap,\n                dbStatusMap,\n                currentNodeId,\n                getAppPort: provisioner.getAppPort,\n                getLastAccess: provisioner.getLastAccess,\n                canSleep: provisioner.canSleep,\n                memoryPressure,\n            });\n            for (const candidate of candidates.slice(0, config.maxSleepPerCycle)) {\n                const idleMin = Math.floor((Date.now() - candidate.lastAccess) / 60_000);\n                try {\n                    await provisioner.sleepApp(candidate.appName);\n                    if (candidate.reason === \"ghost_idle\") {\n                        logger.log(`[sleep] SWEEP: ${candidate.appName} is \"idle\" in DB but active in memory \u2014 slept \u2713`);\n                    }\n                    else if (memoryPressure) {\n                        logger.log(`[sleep] ${candidate.appName}: memory pressure ${availableRamMB}/${config.evictionThresholdMB}MB, idle ${idleMin}m \u2014 evicting \u2713`);\n                    }\n                    else {\n                        logger.log(`[sleep] ${candidate.appName}: idle ${idleMin}m \u2014 sleeping \u2713`);\n                    }\n                    sleepCount += 1;\n                }\n                catch (e) {\n                    logger.error(`[sleep] Failed to sleep ${candidate.appName}:`, e);\n                }\n            }\n            if (sleepCount > 0) {\n                logger.log(`[sleep] ${sleepCount} app(s) put to sleep this cycle`);\n            }\n        }\n        catch (e) {\n            logger.error(`[sleep] Sleep checker error:`, e);\n        }\n    }, sleepCheckIntervalMs);\n    logger.log(`[platform] Sleep checker registered (every 5min, max ${config.maxSleepPerCycle}/cycle, timeout ${config.sleepTimeoutMinutes}min)`);\n}\n", "function rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction positiveInt(value) {\n    const parsed = Number(value);\n    if (!Number.isFinite(parsed) || parsed <= 0)\n        return undefined;\n    return Math.floor(parsed);\n}\nexport function parseRealtimeConnectionLimit(rawFeatures) {\n    let features = {};\n    if (typeof rawFeatures === \"string\" && rawFeatures.trim()) {\n        try {\n            features = JSON.parse(rawFeatures);\n        }\n        catch {\n            return undefined;\n        }\n    }\n    else if (rawFeatures && typeof rawFeatures === \"object\") {\n        features = rawFeatures;\n    }\n    return positiveInt(features.wsConnectionsPerAppSafety) ?? positiveInt(features.wsConnectionsPerApp) ?? positiveInt(features.wsConnections);\n}\nexport async function resolveRealtimeConnectionLimit(params) {\n    try {\n        const result = await params.rawSql(`SELECT pt.features\n       FROM apps a\n       LEFT JOIN user_credits uc ON uc.user_id = a.user_id\n       LEFT JOIN pricing_tiers pt ON pt.id = COALESCE(uc.plan, a.plan, 'free')\n       WHERE a.name = $1\n       LIMIT 1`, [params.appName]);\n        const rows = rowsFromResult(result);\n        return parseRealtimeConnectionLimit(rows[0]?.features);\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        params.logger?.warn(`[ws-gateway] failed to resolve realtime limit for ${params.appName}:`, message.slice(0, 100));\n        return undefined;\n    }\n}\n", "/**\n * packages/server/src/ws-gateway.ts\n *\n * Re-export from platform/src/ws-gateway.ts \u2014 \uB2E8\uC77C \uC18C\uC2A4 \uC720\uC9C0.\n *\n * \u26A0\uFE0F \uC2E4\uC81C \uAD6C\uD604\uC740 packages/platform/src/ws-gateway.ts \uC5D0\uB9CC \uC874\uC7AC.\n *     \uC218\uC815 \uC2DC \uBC18\uB4DC\uC2DC platform \uCABD\uC744 \uC218\uC815\uD560 \uAC83.\n *\n * NOTE: Bun \uB7F0\uD0C0\uC784\uC5D0\uC11C \uC9C1\uC811 \uC2E4\uD589\uB418\uBBC0\uB85C .ts \uD655\uC7A5\uC790 \uC0AC\uC6A9.\n *       tsconfig rootDir \uC81C\uC57D\uC774 \uC788\uC5B4 \uC0C1\uB300 \uACBD\uB85C re-export \uB300\uC2E0\n *       \uB7F0\uD0C0\uC784 dynamic import\uB85C \uC6B0\uD68C. (\uBE4C\uB4DC \uB300\uC0C1 \uC544\uB2D8)\n */\nimport { resolve, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst platformWsGateway = resolve(__dirname, \"../../platform/src/ws-gateway.ts\");\n// \uB7F0\uD0C0\uC784 import (Bun\uC5D0\uC11C .ts \uC9C1\uC811 \uC2E4\uD589)\nconst mod = await import(platformWsGateway);\nexport const handleOpen = mod.handleOpen;\nexport const handleMessage = mod.handleMessage;\nexport const handleClose = mod.handleClose;\nexport const notifyEmit = mod.notifyEmit;\nexport const notifyInvalidate = mod.notifyInvalidate;\nexport const notifyQueryInvalidate = mod.notifyQueryInvalidate;\nexport const notifyQueryRevoke = mod.notifyQueryRevoke;\nexport const notifyChannelPublish = mod.notifyChannelPublish;\nexport const notifyChannelInvalidate = mod.notifyChannelInvalidate;\nexport const notifyChannelRevoke = mod.notifyChannelRevoke;\nexport const getConnectionCount = mod.getConnectionCount;\nexport const getStats = mod.getStats;\nexport const getGatewayLimits = mod.getGatewayLimits;\nexport const consumeRealtimeNotifyRateLimit = mod.consumeRealtimeNotifyRateLimit;\nexport const consumeGatewayRealtimeTicket = mod.consumeGatewayRealtimeTicket;\nexport const isLocalInternalHost = mod.isLocalInternalHost;\nexport const authorizeRealtimeNotifyRequest = mod.authorizeRealtimeNotifyRequest;\nexport const resetGatewayForTests = mod.resetGatewayForTests;\nexport const startHeartbeat = mod.startHeartbeat;\n", "import { dirname, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst platformNodeRoutingMetrics = resolve(__dirname, \"../../platform/src/node-routing-metrics.ts\");\nconst mod = await import(platformNodeRoutingMetrics);\nconst storageDirectMetrics = await import(resolve(__dirname, \"../../platform/src/storage-direct-metrics.ts\"));\nexport const recordNodeRouteMetric = mod.recordNodeRouteMetric;\nexport function getNodeRouteMetricsSnapshot(limit = 50) {\n    return {\n        ...mod.getNodeRouteMetricsSnapshot(limit),\n        storageDirect: storageDirectMetrics.getStorageDirectMetricsSnapshot(),\n    };\n}\nexport function resetNodeRouteMetricsForTests() {\n    mod.resetNodeRouteMetricsForTests();\n    storageDirectMetrics.resetStorageDirectMetricsForTests();\n}\n", "import { extname, isAbsolute, relative, resolve } from \"path\";\nconst STATIC_IMMUTABLE_EXTENSIONS = new Set([\n    \".avif\",\n    \".br\",\n    \".css\",\n    \".csv\",\n    \".eot\",\n    \".gif\",\n    \".gz\",\n    \".ico\",\n    \".jpeg\",\n    \".jpg\",\n    \".js\",\n    \".json\",\n    \".m4a\",\n    \".map\",\n    \".mjs\",\n    \".mov\",\n    \".mp3\",\n    \".mp4\",\n    \".ogg\",\n    \".pdf\",\n    \".png\",\n    \".svg\",\n    \".tsv\",\n    \".ttf\",\n    \".txt\",\n    \".wasm\",\n    \".wav\",\n    \".webm\",\n    \".webmanifest\",\n    \".webp\",\n    \".woff\",\n    \".woff2\",\n    \".xml\",\n    \".zip\",\n]);\nconst STATIC_DOCUMENT_EXTENSIONS = new Set([\".htm\", \".html\"]);\nconst STATIC_NO_FALLBACK_EXTENSIONS = new Set([\n    ...STATIC_DOCUMENT_EXTENSIONS,\n    ...STATIC_IMMUTABLE_EXTENSIONS,\n]);\nexport function isStaticAssetRoute(pathname) {\n    const normalizedPath = pathname || \"/\";\n    return normalizedPath === \"/assets\" || normalizedPath.startsWith(\"/assets/\");\n}\nexport function isStaticReservedRuntimeRoute(pathname) {\n    const normalized = pathname || \"/\";\n    return (/^\\/(api|platform|internal|ws)(\\/|$)/.test(normalized) ||\n        normalized === \"/_gencow/analytics.js\" ||\n        normalized === \"/_gencow/analytics/event\");\n}\nfunction getLeafExtension(pathname) {\n    const leafName = (pathname || \"/\").split(\"/\").filter(Boolean).at(-1) ?? \"\";\n    return extname(leafName).toLowerCase();\n}\nexport function hasKnownStaticFileExtension(pathname) {\n    const extension = getLeafExtension(pathname);\n    return extension !== \"\" && STATIC_NO_FALLBACK_EXTENSIONS.has(extension);\n}\nexport function shouldUseStaticIndexFallbackForMissingPath(pathname) {\n    if (isStaticReservedRuntimeRoute(pathname))\n        return false;\n    if (isStaticAssetRoute(pathname))\n        return false;\n    return !hasKnownStaticFileExtension(pathname);\n}\nexport function isResolvedPathInsideDirectory(rootDir, resolvedPath) {\n    const relativePath = relative(resolve(rootDir), resolvedPath);\n    return (relativePath === \"\" || (!!relativePath && !relativePath.startsWith(\"..\") && !isAbsolute(relativePath)));\n}\nexport function getStaticFileCacheControl(filePath) {\n    const extension = extname(filePath).toLowerCase();\n    if (STATIC_DOCUMENT_EXTENSIONS.has(extension))\n        return \"no-cache\";\n    if (STATIC_IMMUTABLE_EXTENSIONS.has(extension))\n        return \"public, max-age=31536000, immutable\";\n    return \"no-cache\";\n}\nfunction toStaticRequestPath(pathname) {\n    if (!pathname || pathname === \"/\")\n        return \"index.html\";\n    return pathname.replace(/^\\/+/, \"\");\n}\nasync function fileExists(path, exists) {\n    return Boolean(await exists(path));\n}\nexport async function resolveStaticFileRequest(params) {\n    const staticRoot = resolve(params.staticDir);\n    const requestedPath = toStaticRequestPath(params.pathname);\n    const exactPath = resolve(staticRoot, requestedPath);\n    if (!isResolvedPathInsideDirectory(staticRoot, exactPath)) {\n        return { kind: \"forbidden\" };\n    }\n    if (isStaticReservedRuntimeRoute(params.pathname)) {\n        return { kind: \"not_found\" };\n    }\n    if (await fileExists(exactPath, params.exists)) {\n        return { kind: \"file\", filePath: exactPath, cacheControl: getStaticFileCacheControl(exactPath) };\n    }\n    const canUseDocumentCandidates = !isStaticAssetRoute(params.pathname) && !hasKnownStaticFileExtension(params.pathname);\n    if (canUseDocumentCandidates) {\n        const htmlPath = resolve(`${exactPath}.html`);\n        if (isResolvedPathInsideDirectory(staticRoot, htmlPath) && (await fileExists(htmlPath, params.exists))) {\n            return { kind: \"file\", filePath: htmlPath, cacheControl: getStaticFileCacheControl(htmlPath) };\n        }\n    }\n    if (canUseDocumentCandidates) {\n        const directoryIndexPath = resolve(exactPath, \"index.html\");\n        if (isResolvedPathInsideDirectory(staticRoot, directoryIndexPath) &&\n            (await fileExists(directoryIndexPath, params.exists))) {\n            return {\n                kind: \"file\",\n                filePath: directoryIndexPath,\n                cacheControl: getStaticFileCacheControl(directoryIndexPath),\n            };\n        }\n    }\n    if (!shouldUseStaticIndexFallbackForMissingPath(params.pathname)) {\n        return { kind: \"not_found\" };\n    }\n    const spaIndexPath = resolve(staticRoot, \"index.html\");\n    if (await fileExists(spaIndexPath, params.exists)) {\n        return { kind: \"file\", filePath: spaIndexPath, cacheControl: getStaticFileCacheControl(spaIndexPath) };\n    }\n    return { kind: \"not_found\" };\n}\n", "import { extname, join } from \"path\";\nimport { brotliCompressSync, gzipSync } from \"zlib\";\nimport { stat } from \"fs/promises\";\nimport { resolveStaticFileRequest } from \"./static-file-routing\";\nconst compressibleStaticExtensions = new Set([\n    \".css\",\n    \".csv\",\n    \".htm\",\n    \".html\",\n    \".js\",\n    \".json\",\n    \".mjs\",\n    \".svg\",\n    \".txt\",\n    \".wasm\",\n    \".webmanifest\",\n    \".xml\",\n]);\nconst encodedFileCache = new Map();\nconst encodedFileCacheTtlMs = 10 * 60 * 1000;\nconst encodedFileCacheMaxEntries = 240;\nfunction injectHtmlHeadTag(html, tag, skipMarker) {\n    if (!tag || html.includes(skipMarker))\n        return html;\n    const headClose = /<\\/head\\s*>/i;\n    if (headClose.test(html))\n        return html.replace(headClose, `  ${tag}\\n</head>`);\n    const htmlOpen = /<html(\\s[^>]*)?>/i;\n    if (htmlOpen.test(html))\n        return html.replace(htmlOpen, (match) => `${match}\\n<head>\\n  ${tag}\\n</head>`);\n    return `${tag}\\n${html}`;\n}\nfunction acceptsEncoding(value, encoding) {\n    const tokens = value\n        .toLowerCase()\n        .split(\",\")\n        .map((part) => part.trim());\n    return tokens.some((token) => {\n        if (!token.startsWith(encoding))\n            return false;\n        const q = token.match(/;\\s*q=([0-9.]+)/)?.[1];\n        return q === undefined || Number(q) > 0;\n    });\n}\nfunction requestHeader(c, name) {\n    const direct = c?.req?.header?.(name);\n    if (typeof direct === \"string\")\n        return direct;\n    const fromHeaders = c?.req?.headers?.get?.(name);\n    return typeof fromHeaders === \"string\" ? fromHeaders : \"\";\n}\nfunction preferredStaticEncoding(acceptEncoding, filePath) {\n    if (!compressibleStaticExtensions.has(extname(filePath).toLowerCase()))\n        return null;\n    if (acceptsEncoding(acceptEncoding, \"br\"))\n        return \"br\";\n    if (acceptsEncoding(acceptEncoding, \"gzip\"))\n        return \"gzip\";\n    return null;\n}\nfunction pruneEncodedFileCache(now = Date.now()) {\n    for (const [key, value] of encodedFileCache) {\n        if (now - value.createdAt > encodedFileCacheTtlMs)\n            encodedFileCache.delete(key);\n    }\n    while (encodedFileCache.size > encodedFileCacheMaxEntries) {\n        const oldest = encodedFileCache.keys().next().value;\n        if (!oldest)\n            break;\n        encodedFileCache.delete(oldest);\n    }\n}\nasync function encodedStaticFile(filePath, encoding, originalSize) {\n    const stats = await stat(filePath).catch(() => null);\n    const cacheKey = `${filePath}:${stats?.mtimeMs ?? 0}:${originalSize}:${encoding}`;\n    pruneEncodedFileCache();\n    const cached = encodedFileCache.get(cacheKey);\n    if (cached)\n        return cached.body;\n    const input = Buffer.from(await Bun.file(filePath).arrayBuffer());\n    const output = encoding === \"br\" ? brotliCompressSync(input) : gzipSync(input);\n    if (output.byteLength >= input.byteLength)\n        return null;\n    encodedFileCache.set(cacheKey, { body: output, createdAt: Date.now() });\n    return output;\n}\nfunction encodeStaticBuffer(input, encoding) {\n    if (!encoding || input.byteLength <= 0)\n        return { body: input, encoding: null };\n    const output = encoding === \"br\" ? brotliCompressSync(input) : gzipSync(input);\n    if (output.byteLength >= input.byteLength)\n        return { body: input, encoding: null };\n    return { body: output, encoding };\n}\nfunction bufferToBlob(buffer) {\n    const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n    return new Blob([arrayBuffer]);\n}\nexport async function serveStaticFile(params) {\n    const staticDir = join(params.dataDir, \"static\");\n    const resolution = await resolveStaticFileRequest({\n        staticDir,\n        pathname: params.pathname,\n        exists: async (path) => await Bun.file(path).exists(),\n    });\n    if (resolution.kind === \"forbidden\")\n        return params.c.json({ error: \"Forbidden\" }, 403);\n    if (resolution.kind === \"not_found\") {\n        return params.c.json({ error: `Static file not found: ${params.pathname}` }, 404);\n    }\n    const file = Bun.file(resolution.filePath);\n    const fileSize = file.size;\n    const requestMethod = String(params.c?.req?.method ?? \"\").toUpperCase();\n    const encoding = preferredStaticEncoding(requestHeader(params.c, \"Accept-Encoding\"), resolution.filePath);\n    const isHtml = [\".html\", \".htm\"].includes(extname(resolution.filePath).toLowerCase());\n    const shouldInjectHtml = Boolean(params.htmlHeadInjection && isHtml);\n    let responseBody;\n    let responseBytes = fileSize;\n    let responseEncoding = null;\n    if (shouldInjectHtml) {\n        const originalHtml = await file.text();\n        const html = injectHtmlHeadTag(originalHtml, params.htmlHeadInjection ?? \"\", params.htmlHeadInjectionSkipMarker ?? params.htmlHeadInjection ?? \"\");\n        const encoded = encodeStaticBuffer(Buffer.from(html), encoding);\n        responseBody = bufferToBlob(encoded.body);\n        responseBytes = encoded.body.byteLength;\n        responseEncoding = encoded.encoding;\n    }\n    else {\n        const encodedBody = encoding && Number.isSafeInteger(fileSize) && fileSize > 0\n            ? await encodedStaticFile(resolution.filePath, encoding, fileSize)\n            : null;\n        responseBody = encodedBody ? bufferToBlob(encodedBody) : file;\n        responseBytes = encodedBody?.byteLength ?? fileSize;\n        responseEncoding = encodedBody ? encoding : null;\n    }\n    if (requestMethod !== \"HEAD\" && Number.isSafeInteger(responseBytes) && responseBytes > 0) {\n        params.recordBytes?.(responseBytes);\n    }\n    const headers = new Headers({ \"Cache-Control\": resolution.cacheControl });\n    if (responseEncoding) {\n        headers.set(\"Content-Encoding\", responseEncoding);\n        headers.set(\"Vary\", \"Accept-Encoding\");\n    }\n    if (file.type)\n        headers.set(\"Content-Type\", file.type);\n    if (Number.isSafeInteger(responseBytes) && responseBytes >= 0) {\n        headers.set(\"Content-Length\", String(responseBytes));\n    }\n    return new Response(requestMethod === \"HEAD\" ? null : responseBody, {\n        headers,\n    });\n}\n", "export function normalizeOwnerAccountHold(hold) {\n    if (hold === \"account_suspended\" || hold === \"account_deletion_pending\" || hold === \"account_deleted\") {\n        return hold;\n    }\n    return null;\n}\nexport function buildOwnerAccountHoldResponse(appRow) {\n    const hold = normalizeOwnerAccountHold(appRow.ownerAccountHold);\n    if (!hold)\n        return null;\n    const message = hold === \"account_suspended\"\n        ? \"App is locked because the owner account is suspended.\"\n        : hold === \"account_deletion_pending\"\n            ? \"App is locked because the owner account is pending deletion.\"\n            : \"App is locked because the owner account is deleted.\";\n    return {\n        status: 423,\n        body: {\n            error: message,\n            code: \"APP_OWNER_ACCOUNT_HELD\",\n            ownerAccountHold: hold,\n            ...(appRow.ownerAccountHoldReason ? { reason: appRow.ownerAccountHoldReason } : {}),\n        },\n    };\n}\n", "import { resolve } from \"path\";\nconst STORAGE_PATH_REGEX = /^\\/api\\/storage\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i;\nexport function shouldServePlatformStorageDirect(env = process.env) {\n    return env.GENCOW_PLATFORM_STORAGE_DIRECT_SERVE === \"1\";\n}\nexport function classifyPlatformStorageDirectRequest(input) {\n    const match = input.url.pathname.match(STORAGE_PATH_REGEX);\n    if (!match)\n        return { kind: \"fallback\", reason: \"path\" };\n    const method = input.method.toUpperCase();\n    if (method !== \"GET\" && method !== \"HEAD\") {\n        return { kind: \"fallback\", reason: \"method\" };\n    }\n    if (input.url.searchParams.has(\"grant\")) {\n        return { kind: \"fallback\", reason: \"grant\" };\n    }\n    if (!shouldServePlatformStorageDirect(input.env)) {\n        return { kind: \"fallback\", reason: \"disabled\" };\n    }\n    return { kind: \"candidate\", storageId: match[1] };\n}\nfunction resolveStorageBackend(env) {\n    if (env.GENCOW_STORAGE_BACKEND === \"azure_blob\")\n        return \"azure_blob\";\n    if (!env.GENCOW_STORAGE_BACKEND || env.GENCOW_STORAGE_BACKEND === \"local-filesystem\") {\n        return \"local-filesystem\";\n    }\n    return \"unknown\";\n}\nexport async function tryServePlatformStorageDirect(params) {\n    const backend = resolveStorageBackend(params.env);\n    if (params.classification.kind === \"fallback\") {\n        if (params.classification.reason !== \"path\") {\n            params.recordMetric?.({\n                outcome: \"fallback\",\n                reason: params.classification.reason,\n                backend,\n            });\n        }\n        return params.classification;\n    }\n    try {\n        const serveStorage = params.loadServeStorage\n            ? await params.loadServeStorage()\n            : (await import(resolve(params.functionsPath, \"../src/serve-platform-storage.ts\")))\n                .servePlatformStorage;\n        let directError = null;\n        let servedRepresentation = null;\n        const response = await serveStorage(params.appName, params.c, {\n            rawQuery: params.rawSql,\n            appRawQuery: params.appRawSql\n                ? (query, queryParams) => params.appRawSql(params.appName, query, queryParams)\n                : undefined,\n            dataDir: params.dataDir,\n            env: params.env,\n            recordBytes: params.addStorageBandwidthMetric\n                ? (bytes) => params.addStorageBandwidthMetric?.(params.appName, bytes)\n                : undefined,\n            onDirectError: (reason) => {\n                directError = reason;\n            },\n            onRepresentation: (representation) => {\n                servedRepresentation = representation;\n            },\n        });\n        if (!response) {\n            if (directError) {\n                params.logger?.warn(`[platform-storage-direct] ${params.appName}: ${directError} direct serve failed; using app ACL path`);\n                params.recordMetric?.({ outcome: \"error\", reason: directError, backend });\n                return { kind: \"fallback\", reason: directError };\n            }\n            params.recordMetric?.({\n                outcome: \"fallback\",\n                reason: \"visibility_or_missing\",\n                backend,\n            });\n            return { kind: \"fallback\", reason: \"visibility_or_missing\" };\n        }\n        params.recordMetric?.({\n            outcome: \"hit\",\n            backend,\n            ...(servedRepresentation ? { transformed: servedRepresentation === \"transform\" } : {}),\n        });\n        return { kind: \"hit\", response };\n    }\n    catch {\n        params.logger?.warn(`[platform-storage-direct] ${params.appName}: provider/catalog direct serve failed; using app ACL path`);\n        params.recordMetric?.({ outcome: \"error\", reason: \"provider_error\", backend });\n        return { kind: \"fallback\", reason: \"provider_error\" };\n    }\n}\n", "export const SERVER_NODE_ROUTE_RETRY_AFTER_SEC = 5;\nconst PLATFORM_CONTROL_PLANE_APP_NAME_REGEX = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;\nconst NODE_PROXY_CONTROL_PLANE_APP_HEADER = \"X-Gencow-Control-Plane-App\";\nfunction normalizeControlPlaneAppName(value) {\n    const appName = value?.trim() ?? \"\";\n    return PLATFORM_CONTROL_PLANE_APP_NAME_REGEX.test(appName) ? appName : null;\n}\nexport function resolvePlatformControlPlaneAppNameFromPath(originalPath) {\n    let url;\n    try {\n        url = new URL(`http://gencow.internal${originalPath}`);\n    }\n    catch {\n        return null;\n    }\n    const match = url.pathname.match(/^\\/platform\\/apps\\/([^/]+)\\/(?:deploy|deploy-static|create-prod)$/);\n    if (!match?.[1])\n        return null;\n    let appName;\n    try {\n        appName = decodeURIComponent(match[1]);\n    }\n    catch {\n        return null;\n    }\n    return normalizeControlPlaneAppName(appName);\n}\nexport function resolvePlatformControlPlaneAppNameFromProxyHeaders(originalPath, headers) {\n    let url;\n    try {\n        url = new URL(`http://gencow.internal${originalPath}`);\n    }\n    catch {\n        return null;\n    }\n    const headerAppName = normalizeControlPlaneAppName(headers.get(NODE_PROXY_CONTROL_PLANE_APP_HEADER));\n    if (url.pathname === \"/api/mutation\" && !url.search)\n        return headerAppName;\n    const adminProxyMatch = url.pathname.match(/^\\/_proxy\\/([^/]+)\\/(.+)$/);\n    if (!adminProxyMatch?.[1] || !adminProxyMatch[2] || !headerAppName || url.hash)\n        return null;\n    let pathAppName;\n    try {\n        pathAppName = decodeURIComponent(adminProxyMatch[1]);\n    }\n    catch {\n        return null;\n    }\n    const normalizedPathAppName = normalizeControlPlaneAppName(pathAppName);\n    return normalizedPathAppName === headerAppName ? headerAppName : null;\n}\nfunction parseIpv4(host) {\n    const parts = host.split(\".\");\n    if (parts.length !== 4)\n        return null;\n    const octets = parts.map((part) => {\n        if (!/^\\d+$/.test(part))\n            return NaN;\n        const value = Number(part);\n        return Number.isInteger(value) && value >= 0 && value <= 255 ? value : NaN;\n    });\n    return octets.every((value) => Number.isInteger(value)) ? octets : null;\n}\nfunction isAllowedPrivateIpv4(octets) {\n    const [a, b] = octets;\n    if (a === 10)\n        return true;\n    if (a === 172 && b >= 16 && b <= 31)\n        return true;\n    if (a === 192 && b === 168)\n        return true;\n    if (a === 100 && b >= 64 && b <= 127)\n        return true;\n    return false;\n}\nexport function normalizeServerPlatformNodeInternalOrigin(rawOrigin) {\n    let url;\n    try {\n        url = new URL(rawOrigin);\n    }\n    catch {\n        return null;\n    }\n    if (url.protocol !== \"http:\" || url.username || url.password)\n        return null;\n    if (url.pathname !== \"/\" || url.search || url.hash || !url.port)\n        return null;\n    const octets = parseIpv4(url.hostname);\n    if (!octets || !isAllowedPrivateIpv4(octets))\n        return null;\n    return `http://${url.hostname}:${url.port}`;\n}\nexport function buildServerPlatformNodeRouteRecord(row) {\n    const internalOrigin = normalizeServerPlatformNodeInternalOrigin(row.internalOrigin);\n    if (!internalOrigin)\n        return null;\n    return {\n        id: row.id,\n        status: row.status,\n        internalOrigin,\n        lastHeartbeatAt: row.lastHeartbeatAt,\n    };\n}\nexport function resolveServerAppNodeRouteTarget(params) {\n    if (!params.app) {\n        return { kind: \"unavailable\", reason: \"not_found\" };\n    }\n    const currentNodeId = params.currentNodeId?.trim() || null;\n    const appName = params.app.name || params.appName;\n    const appNodeId = params.app.nodeId?.trim() || currentNodeId;\n    if (!currentNodeId || !appNodeId || appNodeId === currentNodeId) {\n        return { kind: \"local\", appName, port: params.localPort ?? params.app.port };\n    }\n    const homeNode = params.homeNode;\n    if (!homeNode ||\n        (homeNode.status !== \"active\" && homeNode.status !== \"draining\") ||\n        isServerPlatformNodeHeartbeatStale(homeNode.lastHeartbeatAt, params.nowMs, params.staleAfterMs)) {\n        return { kind: \"unavailable\", reason: \"node_offline\" };\n    }\n    return {\n        kind: \"remote_node\",\n        appName,\n        nodeId: homeNode.id,\n        origin: homeNode.internalOrigin,\n    };\n}\nexport function isServerPlatformNodeHeartbeatStale(lastHeartbeatAt, nowMs = Date.now(), staleAfterMs = 60_000) {\n    if (!lastHeartbeatAt || staleAfterMs <= 0)\n        return false;\n    const heartbeatMs = lastHeartbeatAt instanceof Date ? lastHeartbeatAt.getTime() : Date.parse(lastHeartbeatAt);\n    if (!Number.isFinite(heartbeatMs))\n        return true;\n    return nowMs - heartbeatMs > staleAfterMs;\n}\nexport function buildHomeNodeUnavailableBody(reason) {\n    return {\n        error: \"\uC571\uC774 \uBC30\uC815\uB41C \uC11C\uBC84\uAC00 \uD604\uC7AC \uC694\uCCAD\uC744 \uCC98\uB9AC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\",\n        code: \"APP_HOME_NODE_UNAVAILABLE\",\n        status: reason,\n    };\n}\nexport async function maybeProxyRemoteServerAppRequest(params) {\n    const currentNodeId = params.currentNodeId?.trim() || null;\n    if (params.upgradeHeader === \"websocket\" ||\n        !currentNodeId ||\n        !params.loadAppRouteNode ||\n        !params.proxyRemoteNodeRequest) {\n        return null;\n    }\n    const appNodeId = params.appRow.nodeId?.trim() || currentNodeId;\n    let homeNode = null;\n    if (appNodeId !== currentNodeId) {\n        try {\n            homeNode = await params.loadAppRouteNode(appNodeId);\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger.warn(`[platform] ${params.appName}: failed to load home node ${appNodeId}: ${message}`);\n        }\n    }\n    const routeTarget = resolveServerAppNodeRouteTarget({\n        appName: params.appName,\n        currentNodeId,\n        app: params.appRow,\n        homeNode,\n        localPort: params.getLivePort(params.appName) ?? null,\n    });\n    if (routeTarget.kind === \"remote_node\") {\n        const replayPlan = await params.createProxyRequestReplayPlan(params.c.req.raw);\n        if (params.recordRuntimeAccess !== false) {\n            try {\n                params.markLastAccess(params.appName);\n            }\n            catch {\n                /* ignore */\n            }\n        }\n        try {\n            return await params.proxyRemoteNodeRequest({\n                c: params.c,\n                host: params.host,\n                appName: params.appName,\n                nodeId: routeTarget.nodeId,\n                origin: routeTarget.origin,\n                body: replayPlan.initialBody,\n            });\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger.error(`[platform] ${params.appName}: remote node proxy failed to ${routeTarget.nodeId}: ${message}`);\n            return params.c.json(params.buildTransientProxyFailureBody(), 502);\n        }\n    }\n    if (routeTarget.kind === \"unavailable\") {\n        if (routeTarget.reason === \"not_found\") {\n            return params.c.json({ error: `App \"${params.appName}\" not found` }, 404);\n        }\n        params.c.header(\"Retry-After\", String(SERVER_NODE_ROUTE_RETRY_AFTER_SEC));\n        return params.c.json(buildHomeNodeUnavailableBody(routeTarget.reason), 503);\n    }\n    return null;\n}\nexport async function maybeUpgradeRemoteServerAppWebSocket(params) {\n    const currentNodeId = params.currentNodeId?.trim() || null;\n    if (params.upgradeHeader !== \"websocket\" ||\n        !currentNodeId ||\n        !params.loadAppRouteNode ||\n        !params.proxyRemoteNodeWebSocket) {\n        return null;\n    }\n    const appNodeId = params.appRow.nodeId?.trim() || currentNodeId;\n    let homeNode = null;\n    if (appNodeId !== currentNodeId) {\n        try {\n            homeNode = await params.loadAppRouteNode(appNodeId);\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger.warn(`[platform] ${params.appName}: failed to load home node ${appNodeId}: ${message}`);\n        }\n    }\n    const routeTarget = resolveServerAppNodeRouteTarget({\n        appName: params.appName,\n        currentNodeId,\n        app: params.appRow,\n        homeNode,\n        localPort: params.getLivePort(params.appName) ?? null,\n    });\n    if (routeTarget.kind === \"remote_node\") {\n        return params.proxyRemoteNodeWebSocket({\n            c: params.c,\n            host: params.host,\n            appName: params.appName,\n            nodeId: routeTarget.nodeId,\n            origin: routeTarget.origin,\n        });\n    }\n    if (routeTarget.kind === \"unavailable\") {\n        if (routeTarget.reason === \"not_found\") {\n            return params.c.json({ error: `App \"${params.appName}\" not found` }, 404);\n        }\n        params.c.header(\"Retry-After\", String(SERVER_NODE_ROUTE_RETRY_AFTER_SEC));\n        return params.c.json(buildHomeNodeUnavailableBody(routeTarget.reason), 503);\n    }\n    return null;\n}\nexport function isSignedNodeProxyRequestPath(pathname, headers) {\n    return pathname.startsWith(\"/internal/node-proxy/\") && headers.get(\"X-Gencow-Node-Proxy\") === \"v1\";\n}\nfunction sanitizeNodeProxyLoopbackHeaders(headers) {\n    const sanitized = new Headers();\n    for (const [key, value] of headers.entries()) {\n        const normalized = key.toLowerCase();\n        if (normalized.startsWith(\"x-gencow-node-\") ||\n            normalized === \"x-internal-token\" ||\n            normalized === \"x-cron-token\") {\n            continue;\n        }\n        sanitized.append(key, value);\n    }\n    return sanitized;\n}\nfunction shouldPreserveControlPlaneNodeProxyHeaders(originalPath, headers) {\n    return (resolvePlatformControlPlaneAppNameFromProxyHeaders(originalPath, headers) !== null &&\n        headers.get(\"X-Gencow-Node-Proxy\") === \"v1\");\n}\nexport function createServerNodeProxyLoopbackRequest(params) {\n    const headers = shouldPreserveControlPlaneNodeProxyHeaders(params.originalPath, params.c.req.raw.headers)\n        ? new Headers(params.c.req.raw.headers)\n        : sanitizeNodeProxyLoopbackHeaders(params.c.req.raw.headers);\n    headers.set(\"Host\", params.originalHost);\n    const init = {\n        method: params.c.req.method,\n        headers,\n        body: params.body,\n        redirect: \"manual\",\n    };\n    if (params.body && params.c.req.method !== \"GET\" && params.c.req.method !== \"HEAD\") {\n        init.duplex = \"half\";\n    }\n    return new Request(`http://${params.originalHost}${params.originalPath}`, init);\n}\n", "import { resolve } from \"path\";\nimport { resolveRealtimeConnectionLimit } from \"./server-realtime-connection-limit.js\";\nimport { consumeGatewayRealtimeTicket } from \"./ws-gateway.js\";\nimport { recordNodeRouteMetric } from \"./server-node-routing-metrics.js\";\nimport { serveStaticFile } from \"./server-platform-static-file.js\";\nimport { createCustomDomainResolver, isPlatformProxyBypassHost, normalizePlatformProxyHost, } from \"./server-platform-app-proxy-domain.js\";\nimport { buildOwnerAccountHoldResponse } from \"./server-app-account-hold.js\";\nimport { classifyPlatformStorageDirectRequest, tryServePlatformStorageDirect, } from \"./server-platform-storage-direct.js\";\nimport { isSignedNodeProxyRequestPath, maybeProxyRemoteServerAppRequest, maybeUpgradeRemoteServerAppWebSocket, } from \"./server-platform-node-routing.js\";\nexport { shouldUseStaticIndexFallbackForMissingPath } from \"./static-file-routing\";\nexport { createCustomDomainResolver, normalizePlatformProxyHost, } from \"./server-platform-app-proxy-domain.js\";\nexport { parseRealtimeConnectionLimit, resolveRealtimeConnectionLimit, } from \"./server-realtime-connection-limit.js\";\nexport { shouldServePlatformStorageDirect } from \"./server-platform-storage-direct.js\";\nconst INTERNAL_DOMAIN_VERIFY_PATH = \"/internal/domain/verify\";\nconst HOSTED_ANALYTICS_SCRIPT_PATH = \"/_gencow/analytics.js\";\nfunction escapeHtmlAttribute(value) {\n    return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\nfunction buildHostedAnalyticsScriptTag(appRow) {\n    const deploy = appRow.currentDeployId === null || appRow.currentDeployId === undefined\n        ? \"\"\n        : String(appRow.currentDeployId);\n    const deployAttr = deploy ? ` data-deploy=\"${escapeHtmlAttribute(deploy)}\"` : \"\";\n    return `<script defer src=\"${HOSTED_ANALYTICS_SCRIPT_PATH}\" data-site=\"app:${escapeHtmlAttribute(String(appRow.id))}\"${deployAttr}></script>`;\n}\nexport function buildRuntimeUnavailableBody(result) {\n    return {\n        error: result.error,\n        code: result.code,\n        status: result.status,\n        ...(result.hint ? { hint: result.hint } : {}),\n    };\n}\nexport function buildRecoveredRetryBody() {\n    return {\n        error: \"\uC571 \uB7F0\uD0C0\uC784\uC744 \uBCF5\uAD6C\uD588\uC2B5\uB2C8\uB2E4. \uC694\uCCAD\uC744 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694.\",\n        code: \"APP_RECOVERED_RETRY\",\n        hint: \"\uB300\uC6A9\uB7C9 \uB610\uB294 \uC2A4\uD2B8\uB9AC\uBC0D \uC694\uCCAD\uC740 \uC790\uB3D9 \uC7AC\uC2DC\uB3C4\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\n    };\n}\nexport function isPublicAppBackendRoute(pathname) {\n    return /^\\/(api|platform|internal|ws)\\b/.test(pathname);\n}\nexport function isDeniedPublicAppSystemPath(pathname) {\n    return /^\\/(_admin|_dashboard)\\b/.test(pathname);\n}\nexport function buildTransientProxyFailureBody() {\n    return {\n        error: \"\uC571 \uB7F0\uD0C0\uC784 \uC751\uB2F5\uC774 \uC77C\uC2DC\uC801\uC73C\uB85C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC694\uCCAD\uC744 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694.\",\n        code: \"APP_PROXY_TRANSIENT_FAILURE\",\n        hint: \"\uB7F0\uD0C0\uC784 \uD504\uB85C\uC138\uC2A4\uB294 \uC0B4\uC544 \uC788\uC73C\uBBC0\uB85C \uD50C\uB7AB\uD3FC\uC774 \uC571\uC744 crashed \uC0C1\uD0DC\uB85C \uC804\uD658\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.\",\n    };\n}\nfunction buildNoBackendRuntimeBody(appName) {\n    return {\n        error: `App \"${appName}\" has no backend runtime`,\n        code: \"APP_NO_BACKEND\",\n        status: \"no_backend\",\n        hint: \"\uC774 \uC571\uC5D0\uB294 \uC2E4\uD589\uD560 backend runtime\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uC815\uC801 \uBC30\uD3EC \uB610\uB294 backend \uC7AC\uBC30\uD3EC \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uC138\uC694.\",\n    };\n}\nexport function buildUnknownCustomDomainBody(host) {\n    return {\n        error: `Domain ${host} is not registered or active`,\n        code: \"CUSTOM_DOMAIN_NOT_FOUND\",\n    };\n}\nasync function probeAppPort(port) {\n    try {\n        const probeRes = await fetch(`http://127.0.0.1:${port}/health/ready`, {\n            method: \"GET\",\n            signal: AbortSignal.timeout(2000),\n        });\n        return probeRes.ok;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isLocalPeerAddress(address) {\n    return (address === \"127.0.0.1\" ||\n        address === \"::1\" ||\n        address === \"0:0:0:0:0:0:0:1\" ||\n        address.startsWith(\"::ffff:127.\"));\n}\nexport function resolveForwardedClientIp(headers, peerAddress) {\n    const peer = peerAddress?.trim() || \"\";\n    if (peer && !isLocalPeerAddress(peer))\n        return peer;\n    const realIp = headers.get(\"x-real-ip\")?.trim();\n    if (realIp)\n        return realIp;\n    const forwardedChain = (headers.get(\"x-forwarded-for\") || \"\")\n        .split(\",\")\n        .map((part) => part.trim())\n        .filter(Boolean);\n    return forwardedChain.at(-1) || peer || null;\n}\nexport function normalizeProxyForwardedHeaders(headers, clientIp) {\n    headers.delete(\"cf-connecting-ip\");\n    headers.delete(\"x-real-ip\");\n    headers.delete(\"x-forwarded-for\");\n    if (!clientIp)\n        return;\n    headers.set(\"X-Real-IP\", clientIp);\n    headers.set(\"X-Forwarded-For\", clientIp);\n}\nasync function proxyAppRequest(params) {\n    const targetUrl = `http://127.0.0.1:${params.port}${params.url.pathname}${params.url.search}`;\n    const headers = new Headers(params.c.req.raw.headers);\n    const peerAddress = params.c.env?.ip && typeof params.c.env.ip.address === \"string\" ? params.c.env.ip.address : null;\n    normalizeProxyForwardedHeaders(headers, resolveForwardedClientIp(headers, peerAddress));\n    headers.set(\"X-Forwarded-Host\", params.host);\n    headers.set(\"X-Forwarded-Proto\", \"https\");\n    const proxyRes = await fetch(targetUrl, {\n        method: params.c.req.method,\n        headers,\n        body: params.requestBody,\n        // OAuth authorization redirects must be returned to the browser, not followed\n        // by the platform proxy. based on this RFC 6749 section 4.1.2:\n        // https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2\n        redirect: \"manual\",\n        ...(params.requestBody !== undefined ? { duplex: \"half\" } : {}),\n    });\n    return new Response(proxyRes.body, {\n        status: proxyRes.status,\n        headers: proxyRes.headers,\n    });\n}\nasync function maybeServeHostedAnalytics(params) {\n    if (!params.pathname.startsWith(\"/_gencow/analytics\"))\n        return null;\n    const analytics = await import(resolve(params.functionsPath, \"analytics-hosted.ts\"));\n    return await analytics.serveHostedAnalyticsRequest({\n        c: params.c,\n        app: params.appRow,\n        host: params.host,\n        rawSql: params.rawSql,\n        analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n        logger: params.logger,\n    });\n}\nexport async function proxyToBackendWithRecovery(params) {\n    if (params.appRow.status === \"memory_exceeded\") {\n        const unavailable = params.buildAppRuntimeUnavailableResult(params.appRow.name, params.appRow.status, params.appRow.statusReason);\n        return params.c.json(buildRuntimeUnavailableBody(unavailable), unavailable.httpStatus);\n    }\n    const replayPlan = await params.createProxyRequestReplayPlan(params.c.req.raw);\n    const mappedPort = params.getLivePort(params.appRow.name);\n    const proxyRequest = params.proxyAppRequestImpl ?? proxyAppRequest;\n    let attemptedFastPath = false;\n    const requestLabel = `${params.c.req.method ?? params.c.req.raw.method} ${params.url.pathname}`;\n    if (mappedPort) {\n        attemptedFastPath = true;\n        try {\n            return await proxyRequest({\n                c: params.c,\n                host: params.host,\n                appName: params.appRow.name,\n                port: mappedPort,\n                url: params.url,\n                requestBody: replayPlan.initialBody,\n                addProxyMetric: params.addProxyMetric,\n            });\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger.warn(`[platform] ${params.appRow.name}: fast-path proxy failed on :${mappedPort} ${requestLabel}: ${message}`);\n        }\n    }\n    let runtime;\n    try {\n        runtime = await params.ensureAppRuntimeReady(params.appRow, {\n            getPort: params.getLivePort,\n            setPort: params.setAppPort,\n            removePortIfEquals: params.removeAppPortIfEquals,\n            resolveRuntimePort: params.resolveLiveRuntimePort,\n            hasRuntimeProcess: params.hasLiveRuntimeProcess,\n            reapRuntimeExits: params.reapRuntimeExits,\n            probePort: async (_appName, port) => probeAppPort(port),\n            wakeApp: params.wakeApp,\n            provisionApp: params.provisionApp,\n            setAppMeta: params.setAppMeta,\n            markAccess: params.markLastAccess,\n            logger: params.logger,\n        }, { stalePort: mappedPort ?? null, currentNodeId: params.currentNodeId });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        params.logger.error(`[platform] ${params.appRow.name}: runtime recovery failed: ${message}`);\n        params.removeAppPort(params.appRow.name);\n        await params.markAppAsCrashed(params.appRow.name).catch((markError) => {\n            params.logger.warn(`[platform] ${params.appRow.name}: failed to mark crashed after recovery error: ${markError}`);\n        });\n        const unavailable = params.buildAppRuntimeUnavailableResult(params.appRow.name, \"crashed\");\n        return params.c.json(buildRuntimeUnavailableBody(unavailable), unavailable.httpStatus);\n    }\n    if (runtime.kind === \"unavailable\") {\n        if (runtime.retryAfterSec) {\n            params.c.header(\"Retry-After\", String(runtime.retryAfterSec));\n        }\n        return params.c.json(buildRuntimeUnavailableBody(runtime), runtime.httpStatus);\n    }\n    if (attemptedFastPath && !replayPlan.canReplayAfterFailure) {\n        params.logger.warn(`[platform] ${params.appRow.name}: runtime recovered but request body is not replayable`);\n        return params.c.json(buildRecoveredRetryBody(), 503);\n    }\n    const retryBody = attemptedFastPath ? replayPlan.replayBody : replayPlan.initialBody;\n    try {\n        return await proxyRequest({\n            c: params.c,\n            host: params.host,\n            appName: params.appRow.name,\n            port: runtime.port,\n            url: params.url,\n            requestBody: retryBody,\n            addProxyMetric: params.addProxyMetric,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        params.logger.error(`[platform] ${params.appRow.name}: retry proxy failed on :${runtime.port} ${requestLabel}: ${message}`);\n        return params.c.json(buildTransientProxyFailureBody(), 502);\n    }\n}\nexport function registerPlatformAppProxy(params) {\n    const logger = params.logger ?? console;\n    const platformDomainHost = normalizePlatformProxyHost(params.platformDomain);\n    const { resolveCustomDomain, invalidateDomainCache } = createCustomDomainResolver({\n        findActiveDomainApp: params.findActiveDomainApp,\n    });\n    globalThis.__invalidateDomainCache = invalidateDomainCache;\n    params.app.use(\"*\", async (c, next) => {\n        const requestPath = c.req.path ?? new URL(c.req.url).pathname;\n        if (requestPath === INTERNAL_DOMAIN_VERIFY_PATH) {\n            return next();\n        }\n        if (isSignedNodeProxyRequestPath(requestPath, c.req.raw.headers)) {\n            return next();\n        }\n        const host = normalizePlatformProxyHost(c.req.header(\"host\"));\n        if (isPlatformProxyBypassHost(host, platformDomainHost)) {\n            return next();\n        }\n        const match = host.match(params.subdomainRegex);\n        let appName = match?.[1] || null;\n        if (!appName) {\n            const customDomainResolution = await resolveCustomDomain(host);\n            if (customDomainResolution?.kind === \"www_fallback_to_bare\") {\n                const url = new URL(c.req.url);\n                return c.redirect(`https://${customDomainResolution.bareHostname}${url.pathname}${url.search}`, 301);\n            }\n            appName = customDomainResolution?.appName ?? null;\n        }\n        if (!appName) {\n            return c.json(buildUnknownCustomDomainBody(host), 404);\n        }\n        try {\n            const appRow = await params.findAppRow(appName);\n            if (!appRow) {\n                return c.json({ error: `App \"${appName}\" not found` }, 404);\n            }\n            const url = new URL(c.req.url);\n            const pathname = url.pathname;\n            if (isDeniedPublicAppSystemPath(pathname)) {\n                return c.json({ error: \"Not found\" }, 404);\n            }\n            const ownerHoldResponse = buildOwnerAccountHoldResponse(appRow);\n            if (ownerHoldResponse) {\n                return c.json(ownerHoldResponse.body, ownerHoldResponse.status);\n            }\n            const analyticsRes = await maybeServeHostedAnalytics({\n                pathname,\n                appRow,\n                host,\n                c,\n                functionsPath: params.functionsPath,\n                rawSql: params.rawSql,\n                analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n                logger,\n            });\n            if (analyticsRes) {\n                return analyticsRes;\n            }\n            const upgradeHeader = (c.req.header(\"upgrade\") || \"\").toLowerCase();\n            const hasBackend = appRow.hasBackend;\n            const hasStatic = !!appRow.staticDeployedAt;\n            const platformStorageEnv = params.platformStorageEnv ?? process.env;\n            const storageDirectClassification = classifyPlatformStorageDirectRequest({\n                method: c.req.method ?? c.req.raw.method,\n                url,\n                env: platformStorageEnv,\n            });\n            if (!hasBackend && (upgradeHeader === \"websocket\" || isPublicAppBackendRoute(pathname))) {\n                return c.json(buildNoBackendRuntimeBody(appName), 503);\n            }\n            const remoteWsResponse = await maybeUpgradeRemoteServerAppWebSocket({\n                c,\n                host,\n                appName,\n                appRow,\n                currentNodeId: params.currentNodeId,\n                upgradeHeader,\n                getLivePort: params.getLivePort,\n                loadAppRouteNode: params.loadAppRouteNode,\n                proxyRemoteNodeWebSocket: params.proxyRemoteNodeWebSocket,\n                logger,\n            });\n            if (remoteWsResponse) {\n                return remoteWsResponse;\n            }\n            const remoteNodeResponse = await maybeProxyRemoteServerAppRequest({\n                c,\n                host,\n                appName,\n                appRow,\n                currentNodeId: params.currentNodeId,\n                upgradeHeader,\n                getLivePort: params.getLivePort,\n                loadAppRouteNode: params.loadAppRouteNode,\n                createProxyRequestReplayPlan: params.createProxyRequestReplayPlan,\n                markLastAccess: params.markLastAccess,\n                recordRuntimeAccess: storageDirectClassification.kind !== \"candidate\",\n                proxyRemoteNodeRequest: params.proxyRemoteNodeRequest,\n                buildTransientProxyFailureBody,\n                logger,\n            });\n            if (remoteNodeResponse) {\n                return remoteNodeResponse;\n            }\n            if (!hasBackend) {\n                if (hasStatic) {\n                    return (recordNodeRouteMetric({ protocol: \"http\", kind: \"local\", appName }),\n                        await serveStaticFile({\n                            c,\n                            dataDir: appRow.dataDir,\n                            pathname,\n                            appName,\n                            recordBytes: (bytes) => params.addProxyMetric(appName, bytes),\n                            htmlHeadInjection: buildHostedAnalyticsScriptTag(appRow),\n                            htmlHeadInjectionSkipMarker: HOSTED_ANALYTICS_SCRIPT_PATH,\n                        }));\n                }\n                return c.json(buildNoBackendRuntimeBody(appName), 503);\n            }\n            if (upgradeHeader === \"websocket\" && params.getBunServer()) {\n                const appInternalToken = params.generateInternalToken(appRow.id, appRow.name);\n                const ticketAuth = consumeGatewayRealtimeTicket({\n                    ticket: url.searchParams.get(\"ticket\"),\n                    appName: appRow.name,\n                    secret: appInternalToken,\n                });\n                if (!ticketAuth.ok) {\n                    return new Response(\"Invalid realtime ticket\", { status: ticketAuth.status });\n                }\n                const connectionLimit = await resolveRealtimeConnectionLimit({\n                    appName,\n                    rawSql: params.rawSql,\n                    logger,\n                });\n                const upgraded = params.getBunServer().upgrade(c.req.raw, {\n                    data: {\n                        gatewayAppName: appName,\n                        appName,\n                        appPort: params.getLivePort(appName) || appRow.port,\n                        pathname,\n                        connectionLimit,\n                        appInternalToken,\n                        authMode: ticketAuth.authMode,\n                        userId: ticketAuth.authMode === \"authenticated\" ? ticketAuth.userId : undefined,\n                        sessionId: ticketAuth.authMode === \"authenticated\" ? ticketAuth.sessionId : null,\n                        authExpiresAt: ticketAuth.authMode === \"authenticated\" ? ticketAuth.expiresAt : undefined,\n                        crudRealtimeMode: ticketAuth.authMode === \"authenticated\"\n                            ? (ticketAuth.realtime?.crudRealtimeMode ?? \"legacy\")\n                            : undefined,\n                    },\n                });\n                if (upgraded)\n                    return (recordNodeRouteMetric({ protocol: \"ws\", kind: \"local\", appName }),\n                        new Response(null, { status: 101 }));\n                return c.json({ error: \"WebSocket upgrade failed\" }, 500);\n            }\n            const storageDirectResult = await tryServePlatformStorageDirect({\n                classification: storageDirectClassification,\n                appName,\n                dataDir: appRow.dataDir,\n                c,\n                url,\n                functionsPath: params.functionsPath,\n                rawSql: params.rawSql,\n                appRawSql: params.appRawSql,\n                env: platformStorageEnv,\n                addStorageBandwidthMetric: params.addStorageBandwidthMetric,\n                recordMetric: params.recordStorageDirectMetric,\n                logger,\n                loadServeStorage: params.loadServePlatformStorage,\n            });\n            if (storageDirectResult.kind === \"hit\") {\n                recordNodeRouteMetric({ protocol: \"http\", kind: \"local\", appName });\n                return storageDirectResult.response;\n            }\n            try {\n                params.markLastAccess(appName);\n            }\n            catch {\n                /* ignore */\n            }\n            if (hasStatic && hasBackend) {\n                const isApiRoute = isPublicAppBackendRoute(pathname);\n                if (isApiRoute) {\n                    recordNodeRouteMetric({ protocol: \"http\", kind: \"local\", appName });\n                    return await proxyToBackendWithRecovery({\n                        c,\n                        host,\n                        url,\n                        appRow,\n                        currentNodeId: params.currentNodeId,\n                        logger,\n                        createProxyRequestReplayPlan: params.createProxyRequestReplayPlan,\n                        buildAppRuntimeUnavailableResult: params.buildAppRuntimeUnavailableResult,\n                        ensureAppRuntimeReady: params.ensureAppRuntimeReady,\n                        getLivePort: params.getLivePort,\n                        setAppPort: params.setAppPort,\n                        removeAppPort: params.removeAppPort,\n                        removeAppPortIfEquals: params.removeAppPortIfEquals,\n                        wakeApp: params.wakeApp,\n                        provisionApp: params.provisionApp,\n                        setAppMeta: params.setAppMeta,\n                        markLastAccess: params.markLastAccess,\n                        hasLiveRuntimeProcess: params.hasLiveRuntimeProcess,\n                        resolveLiveRuntimePort: params.resolveLiveRuntimePort,\n                        reapRuntimeExits: params.reapRuntimeExits,\n                        markAppAsCrashed: params.markAppAsCrashed,\n                        addProxyMetric: params.addProxyMetric,\n                    });\n                }\n                return (recordNodeRouteMetric({ protocol: \"http\", kind: \"local\", appName }),\n                    await serveStaticFile({\n                        c,\n                        dataDir: appRow.dataDir,\n                        pathname,\n                        appName,\n                        recordBytes: (bytes) => params.addProxyMetric(appName, bytes),\n                        htmlHeadInjection: buildHostedAnalyticsScriptTag(appRow),\n                        htmlHeadInjectionSkipMarker: HOSTED_ANALYTICS_SCRIPT_PATH,\n                    }));\n            }\n            if (hasBackend) {\n                recordNodeRouteMetric({ protocol: \"http\", kind: \"local\", appName });\n                return await proxyToBackendWithRecovery({\n                    c,\n                    host,\n                    url,\n                    appRow,\n                    currentNodeId: params.currentNodeId,\n                    logger,\n                    createProxyRequestReplayPlan: params.createProxyRequestReplayPlan,\n                    buildAppRuntimeUnavailableResult: params.buildAppRuntimeUnavailableResult,\n                    ensureAppRuntimeReady: params.ensureAppRuntimeReady,\n                    getLivePort: params.getLivePort,\n                    setAppPort: params.setAppPort,\n                    removeAppPort: params.removeAppPort,\n                    removeAppPortIfEquals: params.removeAppPortIfEquals,\n                    wakeApp: params.wakeApp,\n                    provisionApp: params.provisionApp,\n                    setAppMeta: params.setAppMeta,\n                    markLastAccess: params.markLastAccess,\n                    hasLiveRuntimeProcess: params.hasLiveRuntimeProcess,\n                    resolveLiveRuntimePort: params.resolveLiveRuntimePort,\n                    reapRuntimeExits: params.reapRuntimeExits,\n                    markAppAsCrashed: params.markAppAsCrashed,\n                    addProxyMetric: params.addProxyMetric,\n                });\n            }\n            return c.json({ error: `App \"${appName}\" is ${appRow.status}` }, 503);\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            logger.error(`[platform] proxy error for ${appName}: ${message}`);\n            return c.json({ error: \"\uC571 \uC11C\uBC84\uC5D0 \uC5F0\uACB0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\", code: \"APP_UNREACHABLE\" }, 502);\n        }\n    });\n}\n", "const DB_CONNECTION_ERROR_PATTERNS = [\n    \"password authentication failed\",\n    \"connection refused\",\n    \"ECONNREFUSED\",\n    \"connect ETIMEDOUT\",\n    \"no pg_hba.conf entry\",\n    \"could not connect\",\n    \"Connection terminated\",\n    \"server closed the connection unexpectedly\",\n    \"the database system is starting up\",\n    \"the database system is shutting down\",\n];\nconst DB_CONNECTION_ERROR_REGEX = new RegExp(DB_CONNECTION_ERROR_PATTERNS.map((pattern) => pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"|\"), \"i\");\nconst MAX_ERROR_CAUSE_DEPTH = 8;\nfunction collectErrorMessages(error, messages = [], seen = new Set(), depth = 0) {\n    if (depth > MAX_ERROR_CAUSE_DEPTH)\n        return messages;\n    if (error instanceof Error) {\n        messages.push(error.message);\n        const record = error;\n        if (typeof record.code === \"string\")\n            messages.push(record.code);\n        if (typeof record.errno === \"string\")\n            messages.push(record.errno);\n        if (!seen.has(error)) {\n            seen.add(error);\n            if (error.cause && error.cause !== error)\n                collectErrorMessages(error.cause, messages, seen, depth + 1);\n        }\n        return messages;\n    }\n    if (typeof error === \"string\") {\n        messages.push(error);\n        return messages;\n    }\n    if (error && typeof error === \"object\") {\n        if (seen.has(error))\n            return messages;\n        seen.add(error);\n        const message = error.message;\n        if (typeof message === \"string\")\n            messages.push(message);\n        const code = error.code;\n        const errno = error.errno;\n        if (typeof code === \"string\")\n            messages.push(code);\n        if (typeof errno === \"string\")\n            messages.push(errno);\n        const cause = error.cause;\n        if (cause && cause !== error)\n            collectErrorMessages(cause, messages, seen, depth + 1);\n    }\n    return messages;\n}\nexport function describeDbConnectionError(error) {\n    return collectErrorMessages(error).filter(Boolean).join(\"\\n\");\n}\nexport function isDbConnectionError(error) {\n    return DB_CONNECTION_ERROR_REGEX.test(describeDbConnectionError(error));\n}\n", "export function classifyNameOnlyRunnerOwnership(isAlive) {\n    return isAlive ? \"ambiguous\" : \"absent\";\n}\nfunction hasCompleteRuntimeIdentity(identity) {\n    return Boolean(identity?.nodeId.trim() && identity.processIdentity.trim() && identity.sourceGenerationRef.trim());\n}\nfunction validatePendingStopIntent(input) {\n    const intent = input.pendingStopIntent;\n    if (!intent)\n        return null;\n    if (intent.consumedAtEpochMs !== null)\n        return \"stop_intent_consumed\";\n    if (!Number.isFinite(input.observedAtEpochMs) ||\n        !Number.isFinite(intent.expiresAtEpochMs) ||\n        intent.expiresAtEpochMs <= input.observedAtEpochMs) {\n        return \"stop_intent_expired\";\n    }\n    if (!hasCompleteRuntimeIdentity(input.runtimeIdentity) ||\n        input.currentDeploymentId === null ||\n        !input.deployContract ||\n        input.deployContract.deploymentId !== input.currentDeploymentId ||\n        intent.appId !== input.appId ||\n        intent.deploymentId !== input.currentDeploymentId ||\n        intent.nodeId !== input.runtimeIdentity.nodeId ||\n        intent.processIdentity !== input.runtimeIdentity.processIdentity ||\n        intent.sourceGenerationRef !== input.runtimeIdentity.sourceGenerationRef) {\n        return \"stop_intent_scope_mismatch\";\n    }\n    return null;\n}\n/**\n * Side-effect-free runtime decision table. Callers must establish exact process\n * ownership before passing `processOwnership=\"exact\"`.\n */\nexport function decideRuntimeReconciliation(input) {\n    if (input.processOwnership === \"foreign\") {\n        return { decision: \"quarantine\", reason: \"runtime_ownership_foreign\" };\n    }\n    if (input.processOwnership === \"ambiguous\") {\n        return { decision: \"quarantine\", reason: \"runtime_ownership_ambiguous\" };\n    }\n    if (input.processOwnership === \"absent\" && input.runtimeObservation !== \"absent\") {\n        return { decision: \"quarantine\", reason: \"process_snapshot_inconsistent\" };\n    }\n    if (input.processOwnership === \"exact\" && input.runtimeObservation === \"absent\") {\n        return { decision: \"quarantine\", reason: \"process_snapshot_inconsistent\" };\n    }\n    if (input.pendingStopIntent) {\n        if (input.processOwnership !== \"exact\") {\n            return { decision: \"no_op\", reason: \"state_consistent\" };\n        }\n        const invalidStopIntentReason = validatePendingStopIntent(input);\n        return invalidStopIntentReason\n            ? { decision: \"preserve_conflict\", reason: invalidStopIntentReason }\n            : { decision: \"stop_expected\", reason: \"expected_stop_intent\" };\n    }\n    if (input.processOwnership === \"exact\") {\n        if (input.currentDeploymentId === null) {\n            return { decision: \"preserve_conflict\", reason: \"runtime_without_current_deployment\" };\n        }\n        if (!input.deployContract) {\n            return { decision: \"preserve_conflict\", reason: \"deployment_contract_missing\" };\n        }\n        if (input.deployContract.deploymentId !== input.currentDeploymentId) {\n            return { decision: \"preserve_conflict\", reason: \"deployment_contract_mismatch\" };\n        }\n        if (input.deployContract.declaredRuntime === \"none\") {\n            if (!hasCompleteRuntimeIdentity(input.runtimeIdentity)) {\n                return { decision: \"preserve_conflict\", reason: \"runtime_identity_missing\" };\n            }\n            return { decision: \"stop_expected\", reason: \"runtime_not_declared\" };\n        }\n        if (input.deployContract.callableBackend !== null &&\n            input.deployContract.callableBackend !== input.hasBackendProjection) {\n            return { decision: \"preserve_conflict\", reason: \"capability_projection_mismatch\" };\n        }\n        if (input.runtimeObservation === \"healthy\") {\n            return { decision: \"adopt\", reason: \"current_runtime_healthy\" };\n        }\n        if (input.runtimeObservation === \"unhealthy\") {\n            return { decision: \"restore\", reason: \"current_runtime_unhealthy\" };\n        }\n        return { decision: \"preserve_conflict\", reason: \"runtime_observation_unknown\" };\n    }\n    if (!input.deployContract || input.currentDeploymentId === null) {\n        return { decision: \"no_op\", reason: \"runtime_not_required\" };\n    }\n    if (input.deployContract.deploymentId !== input.currentDeploymentId) {\n        return { decision: \"preserve_conflict\", reason: \"deployment_contract_mismatch\" };\n    }\n    if (input.deployContract.declaredRuntime === \"server\" &&\n        [\"running\", \"failed\", \"crashed\"].includes(input.appStatus)) {\n        return { decision: \"restore\", reason: \"current_runtime_absent\" };\n    }\n    return { decision: \"no_op\", reason: \"runtime_not_required\" };\n}\n", "import { resolve } from \"path\";\nimport { DEFAULT_WAKE_RETRY_AFTER_SEC, isWakeAppDeferredResult, } from \"@gencow/core\";\nimport { describeDbConnectionError, isDbConnectionError } from \"./server-db-connection-check.js\";\nimport { classifyNameOnlyRunnerOwnership, decideRuntimeReconciliation, } from \"./runtime-reconciliation-policy.js\";\nexport class AutoRecoveryWakeDeferredError extends Error {\n    status;\n    retryAfterSec;\n    constructor(result) {\n        super(`Auto-recovery wake deferred (${result.status})`);\n        this.name = \"AutoRecoveryWakeDeferredError\";\n        this.status = result.status;\n        this.retryAfterSec = result.retryAfterSec || DEFAULT_WAKE_RETRY_AFTER_SEC;\n    }\n}\nfunction isAutoRecoveryWakeDeferredError(error) {\n    return error instanceof AutoRecoveryWakeDeferredError;\n}\nexport function createCapacityAwareRestoreApp(params) {\n    return async (appName, port, dataDir, appDbId) => {\n        params.setAppMeta(appName, { port, dataDir, appDbId });\n        const result = await params.wakeApp(appName);\n        if (result.ok)\n            return;\n        if (isWakeAppDeferredResult(result)) {\n            throw new AutoRecoveryWakeDeferredError(result);\n        }\n        throw new Error(result.error);\n    };\n}\nconst AUTO_RECOVERY_BATCH_SIZE = 10;\nconst AUTO_RECOVERY_BATCH_DELAY_MS = 1000;\nconst AUTO_RECOVERY_MAX_DB_RETRIES = 3;\nfunction filterRehydratableWarmPoolAssignments(assignments) {\n    return assignments.filter((assignment) => assignment.role === \"active\");\n}\nexport function getAutoRecoveryRetryDelay(attempt) {\n    return Math.pow(2, attempt) * 1000;\n}\nexport function buildNodeScopedAppCondition(params) {\n    const currentNodeId = params.currentNodeId?.trim();\n    if (!currentNodeId || !params.appsTable.nodeId || !params.andOp) {\n        return params.baseCondition;\n    }\n    return params.andOp(params.baseCondition, params.eqOp(params.appsTable.nodeId, currentNodeId));\n}\nexport async function detectRuntimeHasBackend(params) {\n    const fetchImpl = params.fetchImpl ?? fetch;\n    const timeoutMs = params.timeoutMs ?? 2000;\n    try {\n        const res = await fetchImpl(`http://127.0.0.1:${params.port}/health/ready`, {\n            signal: AbortSignal.timeout(timeoutMs),\n        });\n        if (!res.ok)\n            return null;\n        const body = (await res.json());\n        const totalFns = (body.queries || 0) + (body.mutations || 0);\n        return totalFns > 0;\n    }\n    catch {\n        return null;\n    }\n}\nasync function setAppStatus(params) {\n    await params.db\n        .update(params.appsTable)\n        .set({ status: params.status, statusUpdatedAt: new Date() })\n        .where(params.eqOp(params.appsTable.name, params.appName));\n}\nfunction resolveMemoryOomPolicy(env = process.env) {\n    const threshold = Number(env.GENCOW_APP_MEMORY_OOM_THRESHOLD);\n    const windowMinutes = Number(env.GENCOW_APP_MEMORY_OOM_WINDOW_MINUTES);\n    return {\n        threshold: Number.isInteger(threshold) && threshold > 0 ? threshold : 5,\n        windowMinutes: Number.isInteger(windowMinutes) && windowMinutes > 0 ? windowMinutes : 360,\n    };\n}\nasync function recordAutoRecoveryMemoryOom(params) {\n    const policy = resolveMemoryOomPolicy();\n    const now = new Date();\n    const rows = (await params.db\n        .select({\n        name: params.appsTable.name,\n        status: params.appsTable.status,\n        memoryOomCount: params.appsTable.memoryOomCount,\n        memoryOomWindowStartedAt: params.appsTable.memoryOomWindowStartedAt,\n    })\n        .from(params.appsTable)\n        .where(params.eqOp(params.appsTable.name, params.appName)));\n    const row = rows[0];\n    if (!row)\n        return { blocked: false, count: 0, threshold: policy.threshold };\n    const startedAt = row.memoryOomWindowStartedAt ? new Date(row.memoryOomWindowStartedAt) : null;\n    const inWindow = startedAt instanceof Date &&\n        !Number.isNaN(startedAt.getTime()) &&\n        now.getTime() - startedAt.getTime() <= policy.windowMinutes * 60 * 1000;\n    const count = inWindow ? Number(row.memoryOomCount ?? 0) + 1 : 1;\n    const windowStartedAt = inWindow ? startedAt : now;\n    const blocked = count >= policy.threshold;\n    const patch = {\n        memoryOomCount: count,\n        memoryOomWindowStartedAt: windowStartedAt,\n        memoryOomLastAt: now,\n        statusUpdatedAt: now,\n    };\n    if (blocked) {\n        patch.status = \"memory_exceeded\";\n        patch.statusReason = \"memory_oom_threshold\";\n        patch.statusMessage = `\uC571\uC774 \uCD5C\uADFC ${policy.windowMinutes / 60}\uC2DC\uAC04 \uB3D9\uC548 \uBA54\uBAA8\uB9AC \uC81C\uD55C \uCD08\uACFC ${policy.threshold}\uD68C\uC5D0 \uB3C4\uB2EC\uD574 \uC790\uB3D9 \uC911\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`;\n    }\n    await params.db\n        .update(params.appsTable)\n        .set(patch)\n        .where(params.eqOp(params.appsTable.name, params.appName));\n    if (blocked) {\n        params.logger.warn(`[platform] ${params.appName}: memory_exceeded (${count}/${policy.threshold})`);\n    }\n    return { blocked, count, threshold: policy.threshold };\n}\nasync function rehydrateWarmPoolAssignments(params) {\n    const warmAssignments = filterRehydratableWarmPoolAssignments(params.assignments);\n    const rehydratedApps = new Set();\n    if (warmAssignments.length === 0) {\n        return rehydratedApps;\n    }\n    const rows = (await params.db\n        .select({\n        id: params.appsTable.id,\n        name: params.appsTable.name,\n        port: params.appsTable.port,\n        dataDir: params.appsTable.dataDir,\n        status: params.appsTable.status,\n        hasBackend: params.appsTable.hasBackend,\n        staticDeployedAt: params.appsTable.staticDeployedAt,\n    })\n        .from(params.appsTable)\n        .where(buildNodeScopedAppCondition({\n        baseCondition: params.inArrayOp(params.appsTable.name, warmAssignments.map((assignment) => assignment.appName)),\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        andOp: params.andOp,\n        currentNodeId: params.currentNodeId,\n    })));\n    const rowMap = new Map(rows.map((row) => [row.name, row]));\n    for (const assignment of warmAssignments) {\n        const row = rowMap.get(assignment.appName);\n        if (!row) {\n            params.logger.warn(`[platform] warm-pool assignment without DB row: ${assignment.appName}`);\n            continue;\n        }\n        if (!row.hasBackend) {\n            params.logger.warn(`[platform] ${assignment.appName}: runtime_capability_conflict \u2014 preserving warm-pool assignment for operator review`);\n            continue;\n        }\n        const runtimeHasBackend = await detectRuntimeHasBackend({\n            port: assignment.port,\n            fetchImpl: params.fetchImpl,\n        });\n        if (row.staticDeployedAt && runtimeHasBackend === false) {\n            params.logger.warn(`[platform] ${assignment.appName}: runtime_capability_conflict \u2014 preserving 0-function warm-pool runtime for operator review`);\n            continue;\n        }\n        params.setAppPort(assignment.appName, assignment.port);\n        params.setAppMeta(assignment.appName, {\n            port: assignment.port,\n            dataDir: assignment.dataDir,\n            appDbId: row.id,\n        });\n        params.markAccess(assignment.appName);\n        rehydratedApps.add(assignment.appName);\n        if (row.status === \"failed\") {\n            await setAppStatus({\n                db: params.db,\n                appsTable: params.appsTable,\n                eqOp: params.eqOp,\n                appName: assignment.appName,\n                status: \"running\",\n            });\n        }\n        params.logger.log(`[platform] warm-pool rehydrated: ${assignment.appName} on :${assignment.port}`);\n    }\n    return rehydratedApps;\n}\nexport async function restoreTargetApps(params) {\n    const delayImpl = params.delayImpl ?? ((ms) => new Promise((resolveDelay) => setTimeout(resolveDelay, ms)));\n    if (params.targetApps.length === 0) {\n        return;\n    }\n    params.logger.log(`[platform] Restoring ${params.targetApps.length} app(s) in batches of 10...`);\n    let totalFailed = 0;\n    let totalDeferred = 0;\n    for (let i = 0; i < params.targetApps.length; i += AUTO_RECOVERY_BATCH_SIZE) {\n        const batch = params.targetApps.slice(i, i + AUTO_RECOVERY_BATCH_SIZE);\n        const results = await Promise.allSettled(batch.map(async (row) => {\n            if (!row.hasBackend) {\n                const alive = await params.runner.isAlive(row.name);\n                const healthy = alive ? await params.runner.isHealthy(row.name, row.port) : false;\n                const result = decideRuntimeReconciliation({\n                    appId: row.id,\n                    appStatus: row.status,\n                    currentDeploymentId: row.currentDeploymentId ?? null,\n                    deployContract: null,\n                    hasBackendProjection: false,\n                    processOwnership: classifyNameOnlyRunnerOwnership(alive),\n                    runtimeObservation: alive ? (healthy ? \"healthy\" : \"unhealthy\") : \"absent\",\n                });\n                if (result.decision === \"preserve_conflict\" || result.decision === \"quarantine\") {\n                    params.logger.warn(`[platform] ${row.name}: ${result.decision} (${result.reason}) \u2014 preserving runtime for operator review`);\n                }\n                params.logger.log(`[platform] ${row.name}: hasBackend=false \u2014 startup decision=${result.decision}`);\n                return;\n            }\n            if (row.status === \"failed\") {\n                params.logger.log(`[platform] ${row.name}: failed (infra error) \u2014 auto-restoring`);\n                if (await params.runner.isAlive(row.name)) {\n                    params.logger.log(`[platform] ${row.name}: failed but process still alive \u2014 killing before restore`);\n                    await params.runner.stop(row.name);\n                }\n            }\n            else if (await params.runner.isAlive(row.name)) {\n                const healthy = await params.runner.isHealthy(row.name, row.port);\n                if (healthy) {\n                    params.logger.log(`[platform] \u2713 ${row.name} still alive and healthy \u2014 skipping`);\n                    params.setAppPort(row.name, row.port);\n                    params.setAppMeta(row.name, { port: row.port, dataDir: row.dataDir, appDbId: row.id });\n                    params.markAccess(row.name);\n                    return;\n                }\n                params.logger.log(`[platform] ${row.name} alive but unhealthy \u2014 restarting`);\n            }\n            await params.restoreApp(row.name, row.port, row.dataDir, row.id);\n            if (row.status === \"failed\") {\n                await setAppStatus({\n                    db: params.db,\n                    appsTable: params.appsTable,\n                    eqOp: params.eqOp,\n                    appName: row.name,\n                    status: \"running\",\n                });\n            }\n            params.markAccess(row.name);\n            params.logger.log(`[platform] \u2713 Restored: ${row.name} on :${row.port}`);\n        }));\n        const failed = results.filter((result) => result.status === \"rejected\");\n        totalFailed += failed.length;\n        for (const failedResult of failed) {\n            const reason = failedResult.reason;\n            const message = reason?.message || failedResult;\n            if (isAutoRecoveryWakeDeferredError(reason)) {\n                params.logger.warn(`[platform] Restore deferred: ${message}`);\n            }\n            else {\n                params.logger.error(`[platform] \u2717 Restore failed:`, message);\n            }\n        }\n        if (failed.length > 0) {\n            const failedIndices = results\n                .map((result, index) => (result.status === \"rejected\" ? index : -1))\n                .filter((index) => index >= 0);\n            for (const index of failedIndices) {\n                const failedApp = batch[index];\n                if (!failedApp)\n                    continue;\n                const rejected = results[index];\n                const errorMessage = describeDbConnectionError(rejected.reason) || String(rejected.reason);\n                if (isAutoRecoveryWakeDeferredError(rejected.reason)) {\n                    totalDeferred += 1;\n                    params.setAppMeta(failedApp.name, {\n                        port: failedApp.port,\n                        dataDir: failedApp.dataDir,\n                        appDbId: failedApp.id,\n                    });\n                    try {\n                        await setAppStatus({\n                            db: params.db,\n                            appsTable: params.appsTable,\n                            eqOp: params.eqOp,\n                            appName: failedApp.name,\n                            status: \"idle\",\n                        });\n                        params.logger.warn(`[platform] ${failedApp.name}: capacity-limited restore deferred \u2192 \"idle\"`);\n                    }\n                    catch {\n                        /* noop */\n                    }\n                }\n                else if (isDbConnectionError(rejected.reason)) {\n                    params.logger.warn(`[platform] ${failedApp.name}: DB connection error \u2014 retrying with backoff`);\n                    let retrySuccess = false;\n                    for (let attempt = 1; attempt <= AUTO_RECOVERY_MAX_DB_RETRIES; attempt++) {\n                        const delay = getAutoRecoveryRetryDelay(attempt);\n                        params.logger.log(`[platform] ${failedApp.name}: DB retry ${attempt}/${AUTO_RECOVERY_MAX_DB_RETRIES} in ${delay}ms...`);\n                        await delayImpl(delay);\n                        try {\n                            await params.restoreApp(failedApp.name, failedApp.port, failedApp.dataDir, failedApp.id);\n                            if (failedApp.status === \"failed\") {\n                                await setAppStatus({\n                                    db: params.db,\n                                    appsTable: params.appsTable,\n                                    eqOp: params.eqOp,\n                                    appName: failedApp.name,\n                                    status: \"running\",\n                                });\n                            }\n                            params.markAccess(failedApp.name);\n                            retrySuccess = true;\n                            totalFailed -= 1;\n                            params.logger.log(`[platform] ${failedApp.name}: restore succeeded on retry ${attempt} \u2713`);\n                            break;\n                        }\n                        catch (retryError) {\n                            const retryMessage = retryError instanceof Error ? retryError.message : String(retryError);\n                            params.logger.warn(`[platform] ${failedApp.name}: retry ${attempt}/${AUTO_RECOVERY_MAX_DB_RETRIES} failed: ${retryMessage.slice(0, 100)}`);\n                        }\n                    }\n                    if (!retrySuccess) {\n                        params.logger.error(`[platform] ${failedApp.name}: all DB retry attempts exhausted \u2014 setting to \"idle\"`);\n                        params.setAppMeta(failedApp.name, {\n                            port: failedApp.port,\n                            dataDir: failedApp.dataDir,\n                            appDbId: failedApp.id,\n                        });\n                        try {\n                            await setAppStatus({\n                                db: params.db,\n                                appsTable: params.appsTable,\n                                eqOp: params.eqOp,\n                                appName: failedApp.name,\n                                status: \"idle\",\n                            });\n                            params.logger.log(`[platform] ${failedApp.name}: DB connection error \u2192 \"idle\" (will auto-restore on next request)`);\n                        }\n                        catch {\n                            /* noop */\n                        }\n                    }\n                }\n                else {\n                    try {\n                        await setAppStatus({\n                            db: params.db,\n                            appsTable: params.appsTable,\n                            eqOp: params.eqOp,\n                            appName: failedApp.name,\n                            status: \"failed\",\n                        });\n                        params.logger.log(`[platform] ${failedApp.name}: auto-recovery failed \u2192 DB status corrected to \"failed\"`);\n                    }\n                    catch {\n                        /* noop */\n                    }\n                }\n            }\n        }\n        if (i + AUTO_RECOVERY_BATCH_SIZE < params.targetApps.length) {\n            await delayImpl(AUTO_RECOVERY_BATCH_DELAY_MS);\n        }\n    }\n    const restored = params.targetApps.length - totalFailed;\n    params.logger.log(`[platform] Auto-recovery complete: ${restored}/${params.targetApps.length} restored, ${totalDeferred} deferred \u2713`);\n}\nasync function registerIdleAppsForWake(params) {\n    const idleApps = (await params.db\n        .select({\n        id: params.appsTable.id,\n        name: params.appsTable.name,\n        port: params.appsTable.port,\n        dataDir: params.appsTable.dataDir,\n    })\n        .from(params.appsTable)\n        .where(buildNodeScopedAppCondition({\n        baseCondition: params.eqOp(params.appsTable.status, \"idle\"),\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        andOp: params.andOp,\n        currentNodeId: params.currentNodeId,\n    })));\n    for (const row of idleApps) {\n        params.setAppMeta(row.name, { port: row.port, dataDir: row.dataDir, appDbId: row.id });\n    }\n    if (idleApps.length > 0) {\n        params.logger.log(`[platform] Registered ${idleApps.length} idle app(s) into memory for future wake \u2713`);\n    }\n    return idleApps;\n}\nasync function syncBootTimeCronJobs(params) {\n    const allAppsForCronSync = [...params.targetApps, ...params.idleApps];\n    if (allAppsForCronSync.length === 0) {\n        return;\n    }\n    let cronSyncCount = 0;\n    for (const row of allAppsForCronSync) {\n        try {\n            await params.syncCronJobs(row.id, row.name, row.dataDir);\n            cronSyncCount += 1;\n        }\n        catch (error) {\n            params.logger.warn(`[cron] ${row.name}: boot-time cron sync failed:`, error instanceof Error ? error.message : String(error));\n        }\n    }\n    if (cronSyncCount > 0) {\n        params.logger.log(`[platform] Boot-time cron sync complete for ${cronSyncCount}/${allAppsForCronSync.length} app(s) \u2713`);\n    }\n}\nexport async function bootstrapPlatformAutoRecovery(params) {\n    const logger = params.logger ?? console;\n    const importProvisioner = params.importProvisioner ?? ((path) => import(path));\n    const provisioner = await importProvisioner(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n    const { wakeApp, setOnCrashCallback, setOnMemoryOomCallback, setOnSleepCallback, setOnWakeCallback, initRunner, getRunner, setAppPort, listWarmPoolAssignedApps, unloadWarmPoolApp, reapWarmPoolStale, ensureRbacRoles, setLastAccess: markAccess, setAppMeta, syncCronJobs, } = provisioner;\n    const restoreApp = createCapacityAwareRestoreApp({ wakeApp, setAppMeta });\n    await initRunner();\n    await ensureRbacRoles();\n    setOnCrashCallback(async (appName) => {\n        try {\n            await setAppStatus({\n                db: params.db,\n                appsTable: params.appsTable,\n                eqOp: params.eqOp,\n                appName,\n                status: \"crashed\",\n            });\n            logger.log(`[platform] app \"${appName}\" marked as crashed in DB`);\n        }\n        catch (error) {\n            logger.error(`[platform] failed to mark \"${appName}\" as crashed:`, error);\n        }\n    });\n    setOnMemoryOomCallback?.(async (appName) => {\n        const result = await recordAutoRecoveryMemoryOom({\n            db: params.db,\n            appsTable: params.appsTable,\n            eqOp: params.eqOp,\n            appName,\n            logger,\n        });\n        return { blocked: result.blocked };\n    });\n    setOnSleepCallback(async (appName) => {\n        try {\n            await setAppStatus({\n                db: params.db,\n                appsTable: params.appsTable,\n                eqOp: params.eqOp,\n                appName,\n                status: \"idle\",\n            });\n            logger.log(`[platform] ${appName} DB status \u2192 idle \u2713`);\n        }\n        catch (error) {\n            logger.error(`[platform] Failed to set ${appName} to idle:`, error);\n        }\n    });\n    setOnWakeCallback(async (appName) => {\n        try {\n            await setAppStatus({\n                db: params.db,\n                appsTable: params.appsTable,\n                eqOp: params.eqOp,\n                appName,\n                status: \"running\",\n            });\n            logger.log(`[platform] ${appName} DB status \u2192 running \u2713`);\n        }\n        catch (error) {\n            logger.error(`[platform] Failed to set ${appName} to running:`, error);\n        }\n    });\n    try {\n        await reapWarmPoolStale();\n    }\n    catch (error) {\n        logger.warn(`[platform] warm-pool stale reap failed on boot:`, error instanceof Error ? error.message : String(error));\n    }\n    const rehydratedApps = await rehydrateWarmPoolAssignments({\n        db: params.db,\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        andOp: params.andOp,\n        inArrayOp: params.inArrayOp,\n        currentNodeId: params.currentNodeId,\n        assignments: await listWarmPoolAssignedApps(),\n        setAppPort,\n        setAppMeta,\n        markAccess,\n        unloadWarmPoolApp,\n        fetchImpl: params.fetchImpl,\n        logger,\n    });\n    const targetApps = (await params.db\n        .select({\n        id: params.appsTable.id,\n        name: params.appsTable.name,\n        port: params.appsTable.port,\n        dataDir: params.appsTable.dataDir,\n        status: params.appsTable.status,\n        hasBackend: params.appsTable.hasBackend,\n        ...(params.appsTable.currentDeployId\n            ? { currentDeploymentId: params.appsTable.currentDeployId }\n            : {}),\n    })\n        .from(params.appsTable)\n        .where(buildNodeScopedAppCondition({\n        baseCondition: params.inArrayOp(params.appsTable.status, [\"running\", \"failed\"]),\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        andOp: params.andOp,\n        currentNodeId: params.currentNodeId,\n    }))).filter((row) => !rehydratedApps.has(row.name));\n    await restoreTargetApps({\n        db: params.db,\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        targetApps,\n        restoreApp,\n        runner: getRunner(),\n        setAppPort,\n        setAppMeta,\n        markAccess,\n        delayImpl: params.delayImpl,\n        logger,\n    });\n    const idleApps = await registerIdleAppsForWake({\n        db: params.db,\n        appsTable: params.appsTable,\n        eqOp: params.eqOp,\n        andOp: params.andOp,\n        currentNodeId: params.currentNodeId,\n        setAppMeta,\n        logger,\n    });\n    await syncBootTimeCronJobs({\n        targetApps,\n        idleApps,\n        syncCronJobs,\n        logger,\n    });\n}\n", "export const ACTIVE_PLATFORM_PORT_STATE_KEY = \"active_platform_port\";\nfunction rowsFromUnknown(result) {\n    if (Array.isArray(result))\n        return result;\n    return (result?.rows ?? []);\n}\nexport function normalizePlatformPort(port) {\n    if (port == null)\n        return null;\n    const normalized = String(port).trim();\n    return normalized.length > 0 ? normalized : null;\n}\nexport function getCurrentPlatformPort(env) {\n    const source = env ?? process.env;\n    return normalizePlatformPort(source.PORT);\n}\nexport function normalizePlatformNodeId(nodeId) {\n    if (nodeId == null)\n        return null;\n    const normalized = String(nodeId).trim();\n    return normalized.length > 0 ? normalized : null;\n}\nexport function getCurrentPlatformNodeId(env) {\n    const source = env ?? process.env;\n    return normalizePlatformNodeId(source.GENCOW_NODE_ID);\n}\nexport async function ensurePlatformRuntimeStateTable(rawSql) {\n    await rawSql(`CREATE TABLE IF NOT EXISTS platform_runtime_state (\n            key TEXT PRIMARY KEY,\n            value TEXT NOT NULL,\n            updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n        )`);\n}\nexport async function setActivePlatformPort(rawSql, port) {\n    const normalizedPort = normalizePlatformPort(port);\n    if (!normalizedPort)\n        throw new Error(\"active platform port is required\");\n    await ensurePlatformRuntimeStateTable(rawSql);\n    await rawSql(`INSERT INTO platform_runtime_state (key, value, updated_at)\n         VALUES ($1, $2, NOW())\n         ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW()`, [ACTIVE_PLATFORM_PORT_STATE_KEY, normalizedPort]);\n}\nexport async function getActivePlatformPort(rawSql) {\n    const rows = rowsFromUnknown(await rawSql(`SELECT value FROM platform_runtime_state WHERE key = $1 LIMIT 1`, [\n        ACTIVE_PLATFORM_PORT_STATE_KEY,\n    ]));\n    return normalizePlatformPort(rows[0]?.value);\n}\nexport async function getNodeActivePlatformPort(rawSql, nodeId) {\n    const rows = rowsFromUnknown(await rawSql(`SELECT active_port FROM platform_nodes WHERE id = $1 LIMIT 1`, [nodeId]));\n    return normalizePlatformPort(rows[0]?.active_port);\n}\nexport async function getPlatformSlotActivity(params) {\n    const currentPort = normalizePlatformPort(params.currentPort ?? getCurrentPlatformPort(params.env));\n    const nodeId = normalizePlatformNodeId(params.nodeId ?? getCurrentPlatformNodeId(params.env));\n    try {\n        let activePort = null;\n        if (nodeId) {\n            try {\n                activePort = await getNodeActivePlatformPort(params.rawSql, nodeId);\n            }\n            catch {\n                activePort = null;\n            }\n        }\n        activePort ??= await getActivePlatformPort(params.rawSql);\n        if (!currentPort || !activePort) {\n            return { active: true, currentPort, activePort, reason: \"unconfigured\" };\n        }\n        if (currentPort === activePort) {\n            return { active: true, currentPort, activePort, reason: \"active\" };\n        }\n        return { active: false, currentPort, activePort, reason: \"inactive\" };\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        params.logger?.warn(`[platform] active-slot check failed; treating current slot as active: ${message}`);\n        return { active: true, currentPort, activePort: null, reason: \"check_failed\" };\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronField = void 0;\n/**\n * Represents a field within a cron expression.\n * This is a base class and should not be instantiated directly.\n * @class CronField\n */\nclass CronField {\n    #hasLastChar = false;\n    #hasQuestionMarkChar = false;\n    #wildcard = false;\n    #values = [];\n    options = { rawValue: '' };\n    /**\n     * Returns the minimum value allowed for this field.\n     */\n    /* istanbul ignore next */ static get min() {\n        /* istanbul ignore next */\n        throw new Error('min must be overridden');\n    }\n    /**\n     * Returns the maximum value allowed for this field.\n     */\n    /* istanbul ignore next */ static get max() {\n        /* istanbul ignore next */\n        throw new Error('max must be overridden');\n    }\n    /**\n     * Returns the allowed characters for this field.\n     */\n    /* istanbul ignore next */ static get chars() {\n        /* istanbul ignore next - this is overridden */\n        return Object.freeze([]);\n    }\n    /**\n     * Returns the regular expression used to validate this field.\n     */\n    static get validChars() {\n        return /^[?,*\\dH/-]+$|^.*H\\(\\d+-\\d+\\)\\/\\d+.*$|^.*H\\(\\d+-\\d+\\).*$|^.*H\\/\\d+.*$/;\n    }\n    /**\n     * Returns the constraints for this field.\n     */\n    static get constraints() {\n        return { min: this.min, max: this.max, chars: this.chars, validChars: this.validChars };\n    }\n    /**\n     * CronField constructor. Initializes the field with the provided values.\n     * @param {number[] | string[]} values - Values for this field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     * @throws {TypeError} if the constructor is called directly\n     * @throws {Error} if validation fails\n     */\n    constructor(values, options = { rawValue: '' }) {\n        if (!Array.isArray(values)) {\n            throw new Error(`${this.constructor.name} Validation error, values is not an array`);\n        }\n        if (!(values.length > 0)) {\n            throw new Error(`${this.constructor.name} Validation error, values contains no values`);\n        }\n        /* istanbul ignore next */\n        this.options = {\n            ...options,\n            rawValue: options.rawValue ?? '',\n        };\n        this.#values = values.sort(CronField.sorter);\n        this.#wildcard = this.options.wildcard !== undefined ? this.options.wildcard : this.#isWildcardValue();\n        this.#hasLastChar = this.options.rawValue.includes('L') || values.includes('L');\n        this.#hasQuestionMarkChar = this.options.rawValue.includes('?') || values.includes('?');\n    }\n    /**\n     * Returns the minimum value allowed for this field.\n     * @returns {number}\n     */\n    get min() {\n        // return the static value from the child class\n        return this.constructor.min;\n    }\n    /**\n     * Returns the maximum value allowed for this field.\n     * @returns {number}\n     */\n    get max() {\n        // return the static value from the child class\n        return this.constructor.max;\n    }\n    /**\n     * Returns an array of allowed special characters for this field.\n     * @returns {string[]}\n     */\n    get chars() {\n        // return the frozen static value from the child class\n        return this.constructor.chars;\n    }\n    /**\n     * Indicates whether this field has a \"last\" character.\n     * @returns {boolean}\n     */\n    get hasLastChar() {\n        return this.#hasLastChar;\n    }\n    /**\n     * Indicates whether this field has a \"question mark\" character.\n     * @returns {boolean}\n     */\n    get hasQuestionMarkChar() {\n        return this.#hasQuestionMarkChar;\n    }\n    /**\n     * Indicates whether this field is a wildcard.\n     * @returns {boolean}\n     */\n    get isWildcard() {\n        return this.#wildcard;\n    }\n    /**\n     * Returns an array of allowed values for this field.\n     * @returns {CronFieldType}\n     */\n    get values() {\n        return this.#values;\n    }\n    /**\n     * Helper function to sort values in ascending order.\n     * @param {number | string} a - First value to compare\n     * @param {number | string} b - Second value to compare\n     * @returns {number} - A negative, zero, or positive value, depending on the sort order\n     */\n    static sorter(a, b) {\n        const aIsNumber = typeof a === 'number';\n        const bIsNumber = typeof b === 'number';\n        if (aIsNumber && bIsNumber)\n            return a - b;\n        if (!aIsNumber && !bIsNumber)\n            return a.localeCompare(b);\n        return aIsNumber ? /* istanbul ignore next - A will always be a number until L-2 is supported */ -1 : 1;\n    }\n    /**\n     * Find the next (or previous when `reverse` is true) numeric value in a sorted list.\n     * Returns null if there's no value strictly after/before the current one.\n     *\n     * @param values - Sorted numeric values\n     * @param currentValue - Current value to compare against\n     * @param reverse - When true, search in reverse for previous smaller value\n     */\n    static findNearestValueInList(values, currentValue, reverse = false) {\n        if (reverse) {\n            for (let i = values.length - 1; i >= 0; i--) {\n                if (values[i] < currentValue)\n                    return values[i];\n            }\n            return null;\n        }\n        for (let i = 0; i < values.length; i++) {\n            if (values[i] > currentValue)\n                return values[i];\n        }\n        return null;\n    }\n    /**\n     * Instance helper that operates on this field's numeric `values`.\n     *\n     * @param currentValue - Current value to compare against\n     * @param reverse - When true, search in reverse for previous smaller value\n     */\n    findNearestValue(currentValue, reverse = false) {\n        return this.constructor.findNearestValueInList(this.values, currentValue, reverse);\n    }\n    /**\n     * Serializes the field to an object.\n     * @returns {SerializedCronField}\n     */\n    serialize() {\n        return {\n            wildcard: this.#wildcard,\n            values: this.#values,\n        };\n    }\n    /**\n     * Validates the field values against the allowed range and special characters.\n     * @throws {Error} if validation fails\n     */\n    validate() {\n        let badValue;\n        const charsString = this.chars.length > 0 ? ` or chars ${this.chars.join('')}` : '';\n        const charTest = (value) => (char) => new RegExp(`^\\\\d{0,2}${char}$`).test(value);\n        const rangeTest = (value) => {\n            badValue = value;\n            return typeof value === 'number' ? value >= this.min && value <= this.max : this.chars.some(charTest(value));\n        };\n        const isValidRange = this.#values.every(rangeTest);\n        if (!isValidRange) {\n            throw new Error(`${this.constructor.name} Validation error, got value ${badValue} expected range ${this.min}-${this.max}${charsString}`);\n        }\n        // check for duplicate value in this.#values array\n        const duplicate = this.#values.find((value, index) => this.#values.indexOf(value) !== index);\n        if (duplicate) {\n            throw new Error(`${this.constructor.name} Validation error, duplicate values found: ${duplicate}`);\n        }\n    }\n    /**\n     * Determines if the field is a wildcard based on the values.\n     * When options.rawValue is not empty, it checks if the raw value is a wildcard, otherwise it checks if all values in the range are included.\n     * @returns {boolean}\n     */\n    #isWildcardValue() {\n        if (this.options.rawValue.length > 0) {\n            return ['*', '?'].includes(this.options.rawValue);\n        }\n        return Array.from({ length: this.max - this.min + 1 }, (_, i) => i + this.min).every((value) => this.#values.includes(value));\n    }\n}\nexports.CronField = CronField;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronDayOfMonth = void 0;\nconst CronField_1 = require(\"./CronField\");\nconst MIN_DAY = 1;\nconst MAX_DAY = 31;\nconst DAY_CHARS = Object.freeze(['L']);\n/**\n * Represents the \"day of the month\" field within a cron expression.\n * @class CronDayOfMonth\n * @extends CronField\n */\nclass CronDayOfMonth extends CronField_1.CronField {\n    static get min() {\n        return MIN_DAY;\n    }\n    static get max() {\n        return MAX_DAY;\n    }\n    static get chars() {\n        return DAY_CHARS;\n    }\n    static get validChars() {\n        return /^[?,*\\dLH/-]+$|^.*H\\(\\d+-\\d+\\)\\/\\d+.*$|^.*H\\(\\d+-\\d+\\).*$|^.*H\\/\\d+.*$/;\n    }\n    /**\n     * CronDayOfMonth constructor. Initializes the \"day of the month\" field with the provided values.\n     * @param {DayOfMonthRange[]} values - Values for the \"day of the month\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     * @throws {Error} if validation fails\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"day of the month\" field.\n     * @returns {DayOfMonthRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n}\nexports.CronDayOfMonth = CronDayOfMonth;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronDayOfWeek = void 0;\nconst CronField_1 = require(\"./CronField\");\nconst MIN_DAY = 0;\nconst MAX_DAY = 7;\nconst DAY_CHARS = Object.freeze(['L']);\n/**\n * Represents the \"day of the week\" field within a cron expression.\n * @class CronDayOfTheWeek\n * @extends CronField\n */\nclass CronDayOfWeek extends CronField_1.CronField {\n    static get min() {\n        return MIN_DAY;\n    }\n    static get max() {\n        return MAX_DAY;\n    }\n    static get chars() {\n        return DAY_CHARS;\n    }\n    static get validChars() {\n        return /^[?,*\\dLH#/-]+$|^.*H\\(\\d+-\\d+\\)\\/\\d+.*$|^.*H\\(\\d+-\\d+\\).*$|^.*H\\/\\d+.*$/;\n    }\n    /**\n     * CronDayOfTheWeek constructor. Initializes the \"day of the week\" field with the provided values.\n     * @param {DayOfWeekRange[]} values - Values for the \"day of the week\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"day of the week\" field.\n     * @returns {DayOfWeekRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n    /**\n     * Returns the nth day of the week if specified in the cron expression.\n     * This is used for the '#' character in the cron expression.\n     * @returns {number} The nth day of the week (1-5) or 0 if not specified.\n     */\n    get nthDay() {\n        return this.options.nthDayOfWeek ?? 0;\n    }\n}\nexports.CronDayOfWeek = CronDayOfWeek;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronHour = void 0;\nconst CronField_1 = require(\"./CronField\");\nconst MIN_HOUR = 0;\nconst MAX_HOUR = 23;\nconst HOUR_CHARS = Object.freeze([]);\n/**\n * Represents the \"hour\" field within a cron expression.\n * @class CronHour\n * @extends CronField\n */\nclass CronHour extends CronField_1.CronField {\n    static get min() {\n        return MIN_HOUR;\n    }\n    static get max() {\n        return MAX_HOUR;\n    }\n    static get chars() {\n        return HOUR_CHARS;\n    }\n    /**\n     * CronHour constructor. Initializes the \"hour\" field with the provided values.\n     * @param {HourRange[]} values - Values for the \"hour\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"hour\" field.\n     * @returns {HourRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n}\nexports.CronHour = CronHour;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronMinute = void 0;\nconst CronField_1 = require(\"./CronField\");\nconst MIN_MINUTE = 0;\nconst MAX_MINUTE = 59;\nconst MINUTE_CHARS = Object.freeze([]);\n/**\n * Represents the \"second\" field within a cron expression.\n * @class CronSecond\n * @extends CronField\n */\nclass CronMinute extends CronField_1.CronField {\n    static get min() {\n        return MIN_MINUTE;\n    }\n    static get max() {\n        return MAX_MINUTE;\n    }\n    static get chars() {\n        return MINUTE_CHARS;\n    }\n    /**\n     * CronSecond constructor. Initializes the \"second\" field with the provided values.\n     * @param {SixtyRange[]} values - Values for the \"second\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"second\" field.\n     * @returns {SixtyRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n}\nexports.CronMinute = CronMinute;\n", "// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n", "/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n,\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n", "import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The IANA name of this zone.\n   * Defaults to `name` if not overwritten by a subclass.\n   * @abstract\n   * @type {string}\n   */\n  get ianaName() {\n    return this.name;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get isUniversal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n", "import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new SystemZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"system\";\n  }\n\n  /** @override **/\n  get name() {\n    return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"system\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n", "import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n  let dtf = dtfCache.get(zoneName);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zoneName,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      era: \"short\",\n    });\n    dtfCache.set(zoneName, dtf);\n  }\n  return dtf;\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  era: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (type === \"era\") {\n      filled[pos] = value;\n    } else if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    let zone = ianaZoneCache.get(name);\n    if (zone === undefined) {\n      ianaZoneCache.set(name, (zone = new IANAZone(name)));\n    }\n    return zone;\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache.clear();\n    dtfCache.clear();\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return this.isValidZone(s);\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    if (!zone) {\n      return false;\n    }\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /**\n   * The type of zone. `iana` for all instances of `IANAZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"iana\";\n  }\n\n  /**\n   * The name of this zone (i.e. the IANA zone name).\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.zoneName;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns false for all IANA zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return false;\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    if (!this.valid) return NaN;\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n      ? partsOffset(dtf, date)\n      : hackyOffset(dtf, date);\n\n    if (adOrBc === \"BC\") {\n      year = -Math.abs(year) + 1;\n    }\n\n    // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n    const adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0,\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.valid;\n  }\n}\n", "import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlLFCache[key];\n  if (!dtf) {\n    dtf = new Intl.ListFormat(locString, opts);\n    intlLFCache[key] = dtf;\n  }\n  return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache.get(key);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache.set(key, dtf);\n  }\n  return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache.set(key, inf);\n  }\n  return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache.set(key, inf);\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n    return sysLocaleCache;\n  }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n  let opts = intlResolvedOptionsCache.get(locString);\n  if (opts === undefined) {\n    opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n    intlResolvedOptionsCache.set(locString, opts);\n  }\n  return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n  let data = weekInfoCache.get(locString);\n  if (!data) {\n    const locale = new Intl.Locale(locString);\n    // browsers currently implement this as a property, but spec says it should be a getter function\n    data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n    // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n    if (!(\"minimalDays\" in data)) {\n      data = { ...fallbackWeekSettings, ...data };\n    }\n    weekInfoCache.set(locString, data);\n  }\n  return data;\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  // private subtags and unicode subtags have ordering requirements,\n  // and we're not properly parsing this, so just strip out the\n  // private ones if they exist.\n  const xIndex = localeStr.indexOf(\"-x-\");\n  if (xIndex !== -1) {\n    localeStr = localeStr.substring(0, xIndex);\n  }\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    let selectedStr;\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n      selectedStr = localeStr;\n    } catch (e) {\n      const smaller = localeStr.substring(0, uIndex);\n      options = getCachedDTF(smaller).resolvedOptions();\n      selectedStr = smaller;\n    }\n\n    const { numberingSystem, calendar } = options;\n    return [selectedStr, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    if (!localeStr.includes(\"-u-\")) {\n      localeStr += \"-u\";\n    }\n\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2009, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n  const mode = loc.listingMode();\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    const { padTo, floor, ...otherOpts } = opts;\n\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = { useGrouping: false, ...opts };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n    this.originalZone = undefined;\n\n    let z = undefined;\n    if (this.opts.timeZone) {\n      // Don't apply any workarounds if a timeZone is explicitly provided in opts\n      this.dt = dt;\n    } else if (dt.zone.type === \"fixed\") {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n        // we manually apply the offset and substitute the zone as needed.\n        z = \"UTC\";\n        this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n        this.originalZone = dt.zone;\n      }\n    } else if (dt.zone.type === \"system\") {\n      this.dt = dt;\n    } else if (dt.zone.type === \"iana\") {\n      this.dt = dt;\n      z = dt.zone.name;\n    } else {\n      // Custom zones can have any offset / offsetName so we just manually\n      // apply the offset and substitute the zone as needed.\n      z = \"UTC\";\n      this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n      this.originalZone = dt.zone;\n    }\n\n    const intlOpts = { ...this.opts };\n    intlOpts.timeZone = intlOpts.timeZone || z;\n    this.dtf = getCachedDTF(intl, intlOpts);\n  }\n\n  format() {\n    if (this.originalZone) {\n      // If we have to substitute in the actual zone name, we have to use\n      // formatToParts so that the timezone can be replaced.\n      return this.formatToParts()\n        .map(({ value }) => value)\n        .join(\"\");\n    }\n    return this.dtf.format(this.dt.toJSDate());\n  }\n\n  formatToParts() {\n    const parts = this.dtf.formatToParts(this.dt.toJSDate());\n    if (this.originalZone) {\n      return parts.map((part) => {\n        if (part.type === \"timeZoneName\") {\n          const offsetName = this.originalZone.offsetName(this.dt.ts, {\n            locale: this.dt.locale,\n            format: this.opts.timeZoneName,\n          });\n          return {\n            ...part,\n            value: offsetName,\n          };\n        } else {\n          return part;\n        }\n      });\n    }\n    return parts;\n  }\n\n  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = { style: \"long\", ...opts };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\nconst fallbackWeekSettings = {\n  firstDay: 1,\n  minimalDays: 4,\n  weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(\n      opts.locale,\n      opts.numberingSystem,\n      opts.outputCalendar,\n      opts.weekSettings,\n      opts.defaultToEN\n    );\n  }\n\n  static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale;\n    // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n    const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n    const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n    const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache.clear();\n    intlNumCache.clear();\n    intlRelCache.clear();\n    intlResolvedOptionsCache.clear();\n    weekInfoCache.clear();\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n  }\n\n  constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.weekSettings = weekSettings;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness =\n      (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n      (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        validateWeekSettings(alts.weekSettings) || this.weekSettings,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: true });\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: false });\n  }\n\n  months(length, format = false) {\n    return listStuff(this, length, English.months, () => {\n      // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n      // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n      // As such, just use format() instead of formatToParts() and take the whole string\n      const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n      format &= !monthSpecialCase;\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        const mapper = !monthSpecialCase\n          ? (dt) => this.extract(dt, intl, \"month\")\n          : (dt) => this.dtFormatter(dt, intl).format();\n        this.monthsCache[formatStr][length] = mapMonths(mapper);\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false) {\n    return listStuff(this, length, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems() {\n    return listStuff(\n      this,\n      undefined,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            (dt) => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length) {\n    return listStuff(this, length, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find((m) => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n    );\n  }\n\n  getWeekSettings() {\n    if (this.weekSettings) {\n      return this.weekSettings;\n    } else if (!hasLocaleWeekInfo()) {\n      return fallbackWeekSettings;\n    } else {\n      return getCachedWeekInfo(this.locale);\n    }\n  }\n\n  getStartOfWeek() {\n    return this.getWeekSettings().firstDay;\n  }\n\n  getMinDaysInFirstWeek() {\n    return this.getWeekSettings().minimalDays;\n  }\n\n  getWeekendDays() {\n    return this.getWeekSettings().weekend;\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n\n  toString() {\n    return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n  }\n}\n", "import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /**\n   * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"fixed\";\n  }\n\n  /**\n   * The name of this zone.\n   * All fixed zones' names always start with \"UTC\" (plus optional offset)\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  /**\n   * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n   *\n   * @override\n   * @type {string}\n   */\n  get ianaName() {\n    if (this.fixed === 0) {\n      return \"Etc/UTC\";\n    } else {\n      return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n    }\n  }\n\n  /**\n   * Returns the offset's common name at the specified timestamp.\n   *\n   * For fixed offset zones this equals to the zone name.\n   * @override\n   */\n  offsetName() {\n    return this.name;\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns true for all fixed offset zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return true;\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   *\n   * For fixed offset zones, this is constant and does not depend on a timestamp.\n   * @override\n   * @return {number}\n   */\n  offset() {\n    return this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is valid:\n   * All fixed offset zones are valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return true;\n  }\n}\n", "import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n", "/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"default\") return defaultZone;\n    else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n", "const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n  digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  const ns = numberingSystem || \"latn\";\n\n  let appendCache = digitRegexCache.get(ns);\n  if (appendCache === undefined) {\n    appendCache = new Map();\n    digitRegexCache.set(ns, appendCache);\n  }\n  let regex = appendCache.get(append);\n  if (regex === undefined) {\n    regex = new RegExp(`${numberingSystems[ns]}${append}`);\n    appendCache.set(append, regex);\n  }\n\n  return regex;\n}\n", "import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n  defaultZone = \"system\",\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  twoDigitCutoffYear = 60,\n  throwOnInvalid,\n  defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * Use the value \"system\" to reset this value to the system's time zone.\n   * @type {string}\n   */\n  static set defaultZone(zone) {\n    defaultZone = zone;\n  }\n\n  /**\n   * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n   * The default value is the system's time zone (the one set on the machine that runs this code).\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return normalizeZone(defaultZone, SystemZone.instance);\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * @typedef {Object} WeekSettings\n   * @property {number} firstDay\n   * @property {number} minimalDays\n   * @property {number[]} weekend\n   */\n\n  /**\n   * @return {WeekSettings|null}\n   */\n  static get defaultWeekSettings() {\n    return defaultWeekSettings;\n  }\n\n  /**\n   * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n   * how many days are required in the first week of a year.\n   * Does not affect existing instances.\n   *\n   * @param {WeekSettings|null} weekSettings\n   */\n  static set defaultWeekSettings(weekSettings) {\n    defaultWeekSettings = validateWeekSettings(weekSettings);\n  }\n\n  /**\n   * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   */\n  static get twoDigitCutoffYear() {\n    return twoDigitCutoffYear;\n  }\n\n  /**\n   * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n   * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n   * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n   * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n   * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n   */\n  static set twoDigitCutoffYear(cutoffYear) {\n    twoDigitCutoffYear = cutoffYear % 100;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n    DateTime.resetCache();\n    resetDigitRegexCache();\n  }\n}\n", "export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n", "import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger,\n  isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nexport function dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  const js = d.getUTCDay();\n\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex((i) => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n  return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n  let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n  } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData;\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n  const hasLocaleWeekData =\n    !isUndefined(obj.localWeekday) ||\n    !isUndefined(obj.localWeekNumber) ||\n    !isUndefined(obj.localWeekYear);\n  if (hasLocaleWeekData) {\n    const hasIsoWeekData =\n      !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n    if (hasIsoWeekData) {\n      throw new ConflictingSpecificationError(\n        \"Cannot mix locale-based week fields with ISO-based week fields\"\n      );\n    }\n    if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n    if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n    if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n    delete obj.localWeekday;\n    delete obj.localWeekNumber;\n    delete obj.localWeekYear;\n    return {\n      minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n      startOfWeek: loc.getStartOfWeek(),\n    };\n  } else {\n    return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n  }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(\n      obj.weekNumber,\n      1,\n      weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n    ),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.weekNumber);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n", "/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport function hasLocaleWeekInfo() {\n  try {\n    return (\n      typeof Intl !== \"undefined\" &&\n      !!Intl.Locale &&\n      (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n    );\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n  if (settings == null) {\n    return null;\n  } else if (typeof settings !== \"object\") {\n    throw new InvalidArgumentError(\"Week settings must be an object\");\n  } else {\n    if (\n      !integerBetween(settings.firstDay, 1, 7) ||\n      !integerBetween(settings.minimalDays, 1, 7) ||\n      !Array.isArray(settings.weekend) ||\n      settings.weekend.some((v) => !integerBetween(v, 1, 7))\n    ) {\n      throw new InvalidArgumentError(\"Invalid week settings\");\n    }\n    return {\n      firstDay: settings.firstDay,\n      minimalDays: settings.minimalDays,\n      weekend: Array.from(settings.weekend),\n    };\n  }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const isNeg = input < 0;\n  let padded;\n  if (isNeg) {\n    padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n  } else {\n    padded = (\"\" + input).padStart(n, \"0\");\n  }\n  return padded;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n  const factor = 10 ** digits;\n  switch (rounding) {\n    case \"expand\":\n      return number > 0\n        ? Math.ceil(number * factor) / factor\n        : Math.floor(number * factor) / factor;\n    case \"trunc\":\n      return Math.trunc(number * factor) / factor;\n    case \"round\":\n      return Math.round(number * factor) / factor;\n    case \"floor\":\n      return Math.floor(number * factor) / factor;\n    case \"ceil\":\n      return Math.ceil(number * factor) / factor;\n    default:\n      throw new RangeError(`Value rounding ${rounding} is out of range`);\n  }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n    // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n    // the calculations done by Date.UTC are using year 2000 - which is incorrect\n    d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n  }\n  return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n  const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n  return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n  const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n  return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hourCycle: \"h23\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n  const parsed = new Intl.DateTimeFormat(locale, modified)\n    .formatToParts(date)\n    .find((m) => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n", "import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nexport const monthsShort = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"],\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n      ? units[unit][0]\n      : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hourCycle\",\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n", "import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    // white-space is always considered a literal in user-provided formats\n    // the \" \" token has a special meaning (see unitForToken)\n\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        // turn '' into a literal signal quote instead of just skipping the empty literal\n        if (currentFull.length > 0 || bracketed) {\n          splits.push({\n            literal: bracketed || /^\\s+$/.test(currentFull),\n            val: currentFull === \"\" ? \"'\" : currentFull,\n          });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  dtFormatter(dt, opts = {}) {\n    return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n  }\n\n  formatDateTime(dt, opts) {\n    return this.dtFormatter(dt, opts).format();\n  }\n\n  formatDateTimeParts(dt, opts) {\n    return this.dtFormatter(dt, opts).formatToParts();\n  }\n\n  formatInterval(interval, opts) {\n    const df = this.dtFormatter(interval.start, opts);\n    return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n  }\n\n  resolvedOptions(dt, opts) {\n    return this.dtFormatter(dt, opts).resolvedOptions();\n  }\n\n  num(n, p = 0, signDisplay = undefined) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = { ...this.opts };\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n    if (signDisplay) {\n      opts.signDisplay = signDisplay;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = (opts) => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = (token) => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = (length) =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = (token) => {\n        // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // fractional seconds\n          case \"uu\":\n            return this.num(Math.floor(dt.millisecond / 10), 2);\n          case \"uuu\":\n            return this.num(Math.floor(dt.millisecond / 100));\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"n\":\n            return this.num(dt.localWeekNumber);\n          case \"nn\":\n            return this.num(dt.localWeekNumber, 2);\n          case \"ii\":\n            return this.num(dt.localWeekYear.toString().slice(-2), 2);\n          case \"iiii\":\n            return this.num(dt.localWeekYear, 4);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n    const tokenToField = (token) => {\n        switch (token[0]) {\n          case \"S\":\n            return \"milliseconds\";\n          case \"s\":\n            return \"seconds\";\n          case \"m\":\n            return \"minutes\";\n          case \"h\":\n            return \"hours\";\n          case \"d\":\n            return \"days\";\n          case \"w\":\n            return \"weeks\";\n          case \"M\":\n            return \"months\";\n          case \"y\":\n            return \"years\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur, info) => (token) => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          const inversionFactor =\n            info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n          let signDisplay;\n          if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n            signDisplay = \"never\";\n          } else if (this.opts.signMode === \"all\") {\n            signDisplay = \"always\";\n          } else {\n            // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n            signDisplay = \"auto\";\n          }\n          return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n      durationInfo = {\n        isNegativeDuration: collapsed < 0,\n        // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n        // in order\n        largestUnit: Object.keys(collapsed.values)[0],\n      };\n    return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n  }\n}\n", "import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  isUndefined,\n  parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return (m) =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n  `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1),\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3]),\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n  /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n    match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseFloating(yearStr)),\n      months: maybeNegate(parseFloating(monthStr)),\n      weeks: maybeNegate(parseFloating(weekStr)),\n      days: maybeNegate(parseFloating(dayStr)),\n      hours: maybeNegate(parseFloating(hourStr)),\n      minutes: maybeNegate(parseFloating(minuteStr)),\n      seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n    },\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr),\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n  /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr,\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  rfc850 =\n    /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  ascii =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n", "import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000,\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000,\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 },\n  },\n  casualMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000,\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000,\n    },\n\n    ...lowOrderMatrix,\n  },\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: (daysInYearAccurate * 24) / 4,\n      minutes: (daysInYearAccurate * 24 * 60) / 4,\n      seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n      milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n    },\n    ...lowOrderMatrix,\n  };\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n    matrix: alts.matrix || dur.matrix,\n  };\n  return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n  let sum = vals.milliseconds ?? 0;\n  for (const unit of reverseUnits.slice(1)) {\n    if (vals[unit]) {\n      sum += vals[unit] * matrix[unit][\"milliseconds\"];\n    }\n  }\n  return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  // the logic below assumes the overall value of the duration is positive\n  // if this is not the case, factor is used to make it so\n  const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n  orderedUnits.reduceRight((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const previousVal = vals[previous] * factor;\n        const conv = matrix[current][previous];\n\n        // if (previousVal < 0):\n        // lower order unit is negative (e.g. { years: 2, days: -2 })\n        // normalize this by reducing the higher order unit by the appropriate amount\n        // and increasing the lower order unit\n        // this can never make the higher order unit negative, because this function only operates\n        // on positive durations, so the amount of time represented by the lower order unit cannot\n        // be larger than the higher order unit\n        // else:\n        // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n        // in this case we attempt to convert as much as possible from the lower order unit into\n        // the higher order one\n        //\n        // Math.floor takes care of both of these cases, rounding away from 0\n        // if previousVal < 0 it makes the absolute value larger\n        // if previousVal >= it makes the absolute value smaller\n        const rollUp = Math.floor(previousVal / conv);\n        vals[current] += rollUp * factor;\n        vals[previous] -= rollUp * conv * factor;\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n\n  // try to convert any decimals into smaller units if possible\n  // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n  orderedUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const fraction = vals[previous] % 1;\n        vals[previous] -= fraction;\n        vals[current] += fraction * matrix[previous][current];\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n  const newVals = {};\n  for (const [key, value] of Object.entries(vals)) {\n    if (value !== 0) {\n      newVals[key] = value;\n    }\n  }\n  return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See  {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    let matrix = accurate ? accurateMatrix : casualMatrix;\n\n    if (config.matrix) {\n      matrix = config.matrix;\n    }\n\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = matrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject({ milliseconds: count }, opts);\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {Object} [opts=[]] - options for creating this Duration\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the custom conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj, opts = {}) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit),\n      loc: Locale.fromObject(opts),\n      conversionAccuracy: opts.conversionAccuracy,\n      matrix: opts.matrix,\n    });\n  }\n\n  /**\n   * Create a Duration from DurationLike.\n   *\n   * @param {Object | number | Duration} durationLike\n   * One of:\n   * - object with keys like 'years' and 'hours'.\n   * - number representing milliseconds\n   * - Duration instance\n   * @return {Duration}\n   */\n  static fromDurationLike(durationLike) {\n    if (isNumber(durationLike)) {\n      return Duration.fromMillis(durationLike);\n    } else if (Duration.isDuration(durationLike)) {\n      return durationLike;\n    } else if (typeof durationLike === \"object\") {\n      return Duration.fromObject(durationLike);\n    } else {\n      throw new InvalidArgumentError(\n        `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n      );\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the preset conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\",\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `w` for weeks\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * Tokens can be escaped by wrapping with single quotes.\n   * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = {\n      ...opts,\n      floor: opts.round !== false && opts.floor !== false,\n    };\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a string representation of a Duration with all units included.\n   * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n   * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n   * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n   * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n   * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n   * ```\n   */\n  toHuman(opts = {}) {\n    if (!this.isValid) return INVALID;\n\n    const showZeros = opts.showZeros !== false;\n\n    const l = orderedUnits\n      .map((unit) => {\n        const val = this.values[unit];\n        if (isUndefined(val) || (val === 0 && !showZeros)) {\n          return null;\n        }\n        return this.loc\n          .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n          .format(val);\n      })\n      .filter((n) => n);\n\n    return this.loc\n      .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n      .format(l);\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject() {\n    if (!this.isValid) return {};\n    return { ...this.values };\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n      includeOffset: false,\n    };\n\n    const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n    return dateTime.toISOTime(opts);\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a string representation of this Duration appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Duration { values: ${JSON.stringify(this.values)} }`;\n    } else {\n      return `Duration { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    if (!this.isValid) return NaN;\n\n    return durationToMillis(this.matrix, this.values);\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem });\n    const opts = { loc, matrix, conversionAccuracy };\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * Assuming the overall value of the Duration is positive, this means:\n   * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n   * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n   *   the overall value would be negative, see third example)\n   * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n   *\n   * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Rescale units to its largest representation\n   * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n   * @return {Duration}\n   */\n  rescale() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map((u) => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        // only keep the integer part for now in the hopes of putting any decimal part\n        // into a smaller unit later\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    normalizeValues(this.matrix, built);\n    return clone(this, { values: built }, true);\n  }\n\n  /**\n   * Shift this Duration to all available units.\n   * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n   * @return {Duration}\n   */\n  shiftToAll() {\n    if (!this.isValid) return this;\n    return this.shiftTo(\n      \"years\",\n      \"months\",\n      \"weeks\",\n      \"days\",\n      \"hours\",\n      \"minutes\",\n      \"seconds\",\n      \"milliseconds\"\n    );\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Removes all units with values equal to 0 from this Duration.\n   * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n   * @return {Duration}\n   */\n  removeZeros() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.values);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n", "import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd,\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval. This is the first instant which is not part of the interval\n   * (Interval is half-open).\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns the last DateTime included in the interval (since end is not part of the interval)\n   * @type {DateTime}\n   */\n  get lastDateTime() {\n    return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n   * @return {number}\n   */\n  count(unit = \"milliseconds\", opts) {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit, opts);\n    let end;\n    if (opts?.useLocaleWeeks) {\n      end = this.end.reconfigure({ locale: start.locale });\n    } else {\n      end = this.end;\n    }\n    end = end.startOf(unit, opts);\n    return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...DateTime} dateTimes - the unit of time to count.\n   * @return {Array}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter((d) => this.contains(d))\n        .sort((a, b) => a.toMillis() - b.toMillis()),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {Array}\n   */\n  splitBy(duration) {\n    const dur = Duration.fromDurationLike(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits((x) => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {Array}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into an equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n   * and ending with the latest.\n   *\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals\n      .sort((a, b) => a.s - b.s)\n      .reduce(\n        ([sofar, current], item) => {\n          if (!current) {\n            return [sofar, item];\n          } else if (current.overlaps(item) || current.abutsStart(item)) {\n            return [sofar, current.union(item)];\n          } else {\n            return [sofar.concat([current]), item];\n          }\n        },\n        [[], null]\n      );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map((i) => [\n        { time: i.s, type: \"s\" },\n        { time: i.e, type: \"e\" },\n      ]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {Array}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map((i) => this.intersection(i))\n      .filter((i) => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n    } else {\n      return `Interval { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns a localized string representing this Interval. Accepts the same options as the\n   * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n   * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n   * is browser-specific, but in general it will return an appropriate representation of the\n   * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n   * specified.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n   * Intl.DateTimeFormat constructor options.\n   * @param {Object} opts - Options to override the configuration of the start DateTime.\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format\n   * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n   * formatting tool.\n   * @param {string} dateFormat - The format string. This string formats the start and end time.\n   * See {@link DateTime#toFormat} for details.\n   * @param {Object} opts - Options.\n   * @param {string} [opts.separator =  ' – '] - A separator to place between the start and end\n   * representations.\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n", "import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n    return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone#isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Get the weekday on which the week starts according to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n   */\n  static getStartOfWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getStartOfWeek();\n  }\n\n  /**\n   * Get the minimum number of days necessary in a week before it is considered part of the next year according\n   * to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number}\n   */\n  static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n  }\n\n  /**\n   * Get the weekdays, which are considered the weekend according to the given locale\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n   */\n  static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n    // copy the array, because we cache it internally\n    return (locObj || Locale.create(locale)).getWeekendDays().slice();\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {Array}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link Info#months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {Array}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {Array}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link Info#weekdays}\n   * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {Array}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {Array}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {Array}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `relative`: whether this environment supports relative time formatting\n   * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n   * @example Info.features() //=> { relative: false, localeWeek: true }\n   * @return {Object}\n   */\n  static features() {\n    return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n  }\n}\n", "import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      },\n    ],\n    [\"days\", dayDiff],\n  ];\n\n  const results = {};\n  const earlier = cursor;\n  let lowestOrder, highWater;\n\n  /* This loop tries to diff using larger units first.\n     If we overshoot, we backtrack and try the next smaller unit.\n     \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n     as we use smaller and smaller units.\n     highWater keeps track of where we would be if we added one more of the smallest unit,\n     this is used later to potentially convert any difference smaller than the smallest higher order unit\n     into a fraction of that smallest higher order unit\n  */\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      results[unit] = differ(cursor, later);\n      highWater = earlier.plus(results);\n\n      if (highWater > later) {\n        // we overshot the end point, backtrack cursor by 1\n        results[unit]--;\n        cursor = earlier.plus(results);\n\n        // if we are still overshooting now, we need to backtrack again\n        // this happens in certain situations when diffing times in different zones,\n        // because this calculation ignores time zones\n        if (cursor > later) {\n          // keep the \"overshot by 1\" around as highWater\n          highWater = cursor;\n          // backtrack cursor by 1\n          results[unit]--;\n          cursor = earlier.plus(results);\n        }\n      } else {\n        cursor = highWater;\n      }\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(results, opts);\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n", "import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = (t) => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\"), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\"), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        case \"uu\":\n          return simple(oneOrTwo);\n        case \"uuu\":\n          return intUnit(one);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n        // in this case we accept any non-newline white-space\n        case \" \":\n          return simple(/[^\\S\\n\\r]/);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP,\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\",\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\",\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\",\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\",\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour12: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\",\n  },\n  hour24: {\n    numeric: \"H\",\n    \"2-digit\": \"HH\",\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\",\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\",\n  },\n  timeZoneName: {\n    long: \"ZZZZZ\",\n    short: \"ZZZ\",\n  },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    const isSpace = /^\\s+$/.test(value);\n    return {\n      literal: !isSpace,\n      val: isSpace ? \" \" : value,\n    };\n  }\n\n  const style = formatOpts[type];\n\n  // The user might have explicitly specified hour12 or hourCycle\n  // if so, respect their decision\n  // if not, refer back to the resolvedOpts, which are based on the locale\n  let actualType = type;\n  if (type === \"hour\") {\n    if (formatOpts.hour12 != null) {\n      actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n    } else if (formatOpts.hourCycle != null) {\n      if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n        actualType = \"hour12\";\n      } else {\n        actualType = \"hour24\";\n      }\n    } else {\n      // tokens only differentiate between 24 hours or not,\n      // so we do not need to check hourCycle here, which is less supported anyways\n      actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n    }\n  }\n  let val = partTypeStyleToTokenVal[actualType];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val,\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = (token) => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n  const tokens = formatOptsToTokens(formatOpts, locale);\n\n  if (tokens == null || tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n  constructor(locale, format) {\n    this.locale = locale;\n    this.format = format;\n    this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n    this.units = this.tokens.map((t) => unitForToken(t, locale));\n    this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n    if (!this.disqualifyingUnit) {\n      const [regexString, handlers] = buildRegex(this.units);\n      this.regex = RegExp(regexString, \"i\");\n      this.handlers = handlers;\n    }\n  }\n\n  explainFromTokens(input) {\n    if (!this.isValid) {\n      return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n    } else {\n      const [rawMatches, matches] = match(input, this.regex, this.handlers),\n        [result, zone, specificOffset] = matches\n          ? dateTimeFromMatches(matches)\n          : [null, null, undefined];\n      if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n        throw new ConflictingSpecificationError(\n          \"Can't include meridiem when specifying 24-hour format\"\n        );\n      }\n      return {\n        input,\n        tokens: this.tokens,\n        regex: this.regex,\n        rawMatches,\n        matches,\n        result,\n        zone,\n        specificOffset,\n      };\n    }\n  }\n\n  get isValid() {\n    return !this.disqualifyingUnit;\n  }\n\n  get invalidReason() {\n    return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n  }\n}\n\nexport function explainFromTokens(locale, input, format) {\n  const parser = new TokenParser(locale, format);\n  return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n  if (!formatOpts) {\n    return null;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const df = formatter.dtFormatter(getDummyDateTime());\n  const parts = df.formatToParts();\n  const resolvedOpts = df.resolvedOptions();\n  return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n", "import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS,\n  padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n  parseFromTokens,\n  explainFromTokens,\n  formatOptsToTokens,\n  expandMacroTokens,\n  TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData,\n  usesLocalWeekValues,\n  isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n  if (dt.localWeekData === null) {\n    dt.localWeekData = gregorianToWeek(\n      dt.c,\n      dt.loc.getMinDaysInFirstWeek(),\n      dt.loc.getStartOfWeek()\n    );\n  }\n  return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid,\n  };\n  return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds(),\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = {\n      ...inst.c,\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7,\n    },\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds,\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n  const { setZone, zone } = opts;\n  if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(parsed, {\n        ...opts,\n        zone: interpretationZone,\n        specificOffset,\n      });\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true,\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\nfunction toISODate(o, extended, precision) {\n  const longFormat = o.c.year > 9999 || o.c.year < 0;\n  let c = \"\";\n  if (longFormat && o.c.year >= 0) c += \"+\";\n  c += padStart(o.c.year, longFormat ? 6 : 4);\n  if (precision === \"year\") return c;\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n    c += \"-\";\n  } else {\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n  }\n  c += padStart(o.c.day);\n  return c;\n}\n\nfunction toISOTime(\n  o,\n  extended,\n  suppressSeconds,\n  suppressMilliseconds,\n  includeOffset,\n  extendedZone,\n  precision\n) {\n  let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n    c = \"\";\n  switch (precision) {\n    case \"day\":\n    case \"month\":\n    case \"year\":\n      break;\n    default:\n      c += padStart(o.c.hour);\n      if (precision === \"hour\") break;\n      if (extended) {\n        c += \":\";\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += \":\";\n          c += padStart(o.c.second);\n        }\n      } else {\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += padStart(o.c.second);\n        }\n      }\n      if (precision === \"second\") break;\n      if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n        c += \".\";\n        c += padStart(o.c.millisecond, 3);\n      }\n  }\n\n  if (includeOffset) {\n    if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n      c += \"Z\";\n    } else if (o.o < 0) {\n      c += \"-\";\n      c += padStart(Math.trunc(-o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(-o.o % 60));\n    } else {\n      c += \"+\";\n      c += padStart(Math.trunc(o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(o.o % 60));\n    }\n  }\n\n  if (extendedZone) {\n    c += \"[\" + o.zone.ianaName + \"]\";\n  }\n  return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\",\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\",\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n  switch (unit.toLowerCase()) {\n    case \"localweekday\":\n    case \"localweekdays\":\n      return \"localWeekday\";\n    case \"localweeknumber\":\n    case \"localweeknumbers\":\n      return \"localWeekNumber\";\n    case \"localweekyear\":\n    case \"localweekyears\":\n      return \"localWeekYear\";\n    default:\n      return normalizeUnit(unit);\n  }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n  if (zoneOffsetTs === undefined) {\n    zoneOffsetTs = Settings.now();\n  }\n\n  // Do not cache anything but IANA zones, because it is not safe to do so.\n  // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n  if (zone.type !== \"iana\") {\n    return zone.offset(zoneOffsetTs);\n  }\n  const zoneName = zone.name;\n  let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n  if (offsetGuess === undefined) {\n    offsetGuess = zone.offset(zoneOffsetTs);\n    zoneOffsetGuessCache.set(zoneName, offsetGuess);\n  }\n  return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n  const zone = normalizeZone(opts.zone, Settings.defaultZone);\n  if (!zone.isValid) {\n    return DateTime.invalid(unsupportedZone(zone));\n  }\n\n  const loc = Locale.fromObject(opts);\n\n  let ts, o;\n\n  // assume we have the higher-order units\n  if (!isUndefined(obj.year)) {\n    for (const u of orderedUnits) {\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    const offsetProvis = guessOffsetForZone(zone);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = Settings.now();\n  }\n\n  return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = (unit) => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n  let opts = {},\n    args;\n  if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n    opts = argList[argList.length - 1];\n    args = Array.from(argList).slice(0, argList.length - 1);\n  } else {\n    args = Array.from(argList);\n  }\n  return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        // If an offset has been passed and we have not been called from\n        // clone(), we can trust it and avoid the offset calculation.\n        const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.localWeekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                                  //~> now\n   * @example DateTime.local({ zone: \"America/New_York\" })      //~> now, in US east coast time\n   * @example DateTime.local(2017)                              //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                           //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12, { locale: \"fr\" })     //~> 2017-03-12T00:00:00, with a French locale\n   * @example DateTime.local(2017, 3, 12, 5)                    //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" })   //~> 2017-03-12T05:00:00, in UTC\n   * @example DateTime.local(2017, 3, 12, 5, 45)                //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)            //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765)       //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.utc()                                              //~> now\n   * @example DateTime.utc(2017)                                          //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                                       //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                                   //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)                                //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)                            //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" })          //~> 2017-03-12T05:45:00Z with a French locale\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)                        //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n   * @return {DateTime}\n   */\n  static utc() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n\n    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options),\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.localWeekYear - a week year, according to the locale\n   * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n   * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {Object} opts - options for creating this DateTime\n   * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n   * @return {DateTime}\n   */\n  static fromObject(obj, opts = {}) {\n    obj = obj || {};\n    const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const loc = Locale.fromObject(opts);\n    const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset)\n        ? opts.specificOffset\n        : zoneToUse.offset(tsNow),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? hasInvalidOrdinalData(normalized)\n        : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? ordinalToGregorian(normalized)\n        : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc,\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    if (!inst.isValid) {\n      return DateTime.invalid(inst.invalid);\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      }),\n      [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is an instance of DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  /**\n   * Produce the format string for a set of options\n   * @param formatOpts\n   * @param localeOpts\n   * @returns {string}\n   */\n  static parseFormatForOpts(formatOpts, localeOpts = {}) {\n    const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n    return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n  }\n\n  /**\n   * Produce the the fully expanded format token for the locale\n   * Does NOT quote characters, so quoted tokens will not round trip correctly\n   * @param fmt\n   * @param localeOpts\n   * @returns {string}\n   */\n  static expandFormat(fmt, localeOpts = {}) {\n    const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n    return expanded.map((t) => t.val).join(\"\");\n  }\n\n  static resetCache() {\n    zoneOffsetTs = undefined;\n    zoneOffsetGuessCache.clear();\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Returns true if this date is on a weekend according to the locale, false otherwise\n   * @returns {boolean}\n   */\n  get isWeekend() {\n    return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n  }\n\n  /**\n   * Get the day of the week according to the locale.\n   * 1 is the first day of the week and 7 is the last day of the week.\n   * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n   * @returns {number}\n   */\n  get localWeekday() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n   * because the week can start on different days of the week (see localWeekday) and because a different number of days\n   * is required for a week to count as the first week of a year.\n   * @returns {number}\n   */\n  get localWeekNumber() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n   * differently, see localWeekNumber.\n   * @returns {number}\n   */\n  get localWeekYear() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.isUniversal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1, day: 1 }).offset ||\n        this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n   * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n   * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n   * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n   * @returns {DateTime[]}\n   */\n  getPossibleOffsets() {\n    if (!this.isValid || this.isOffsetFixed) {\n      return [this];\n    }\n    const dayMs = 86400000;\n    const minuteMs = 60000;\n    const localTS = objToLocalTS(this.c);\n    const oEarlier = this.zone.offset(localTS - dayMs);\n    const oLater = this.zone.offset(localTS + dayMs);\n\n    const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n    const o2 = this.zone.offset(localTS - oLater * minuteMs);\n    if (o1 === o2) {\n      return [this];\n    }\n    const ts1 = localTS - o1 * minuteMs;\n    const ts2 = localTS - o2 * minuteMs;\n    const c1 = tsToObj(ts1, o1);\n    const c2 = tsToObj(ts2, o2);\n    if (\n      c1.hour === c2.hour &&\n      c1.minute === c2.minute &&\n      c1.second === c2.second &&\n      c1.millisecond === c2.millisecond\n    ) {\n      return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n    }\n    return [this];\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's local week year\n   * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n   * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n   * @type {number}\n   */\n  get weeksInLocalWeekYear() {\n    return this.isValid\n      ? weeksInWeekYear(\n          this.localWeekYear,\n          this.loc.getMinDaysInFirstWeek(),\n          this.loc.getStartOfWeek()\n        )\n      : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOptions(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link DateTime#setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n   *\n   * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n   * They cannot be mixed with ISO-week units like `weekday`.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n    const settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(\n        { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n        minDaysInFirstWeek,\n        startOfWeek\n      );\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n    } else {\n      mixed = { ...this.toObject(), ...normalized };\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link DateTime#plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit, { useLocaleWeeks = false } = {}) {\n    if (!this.isValid) return this;\n\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      if (useLocaleWeeks) {\n        const startOfWeek = this.loc.getStartOfWeek();\n        const { weekday } = this;\n        if (weekday < startOfWeek) {\n          o.weekNumber = this.weekNumber - 1;\n        }\n        o.weekday = startOfWeek;\n      } else {\n        o.weekday = 1;\n      }\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit, opts) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit, opts)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n   * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n   * @return {string|null}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    const ext = format === \"extended\";\n\n    let c = toISODate(this, ext, precision);\n    if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n    c += toISOTime(\n      this,\n      ext,\n      suppressSeconds,\n      suppressMilliseconds,\n      includeOffset,\n      extendedZone,\n      precision\n    );\n    return c;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n   * @return {string|null}\n   */\n  toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, format === \"extended\", normalizeUnit(precision));\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    extendedZone = false,\n    format = \"extended\",\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n    return (\n      c +\n      toISOTime(\n        this,\n        format === \"extended\",\n        suppressSeconds,\n        suppressMilliseconds,\n        includeOffset,\n        extendedZone,\n        precision\n      )\n    );\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string|null}\n   */\n  toSQLDate() {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\n\n    if (includeZone || includeOffset) {\n      if (includeOffsetSpace) {\n        fmt += \" \";\n      }\n      if (includeZone) {\n        fmt += \"z\";\n      } else if (includeOffset) {\n        fmt += \"ZZ\";\n      }\n    }\n\n    return toTechFormat(this, fmt, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n    } else {\n      return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (as a whole number) of this DateTime.\n   * @return {number}\n   */\n  toUnixInteger() {\n    return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = { ...this.c };\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\"created by diffing an invalid DateTime\");\n    }\n\n    const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link DateTime#diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval|DateTime}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit, opts) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return (\n      adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n    );\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(base, this.plus(padding), {\n      ...options,\n      numeric: \"always\",\n      units,\n      unit,\n    });\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n      ...options,\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true,\n    });\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  /**\n   * Build a parser for `fmt` using the given locale. This parser can be passed\n   * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n   * can be used to optimize cases where many dates need to be parsed in a\n   * specific format.\n   *\n   * @param {String} fmt - the format the string is expected to be in (see\n   * description)\n   * @param {Object} options - options used to set locale and numberingSystem\n   * for parser\n   * @returns {TokenParser} - opaque object to be used\n   */\n  static buildFormatParser(fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return new TokenParser(localeToUse, fmt);\n  }\n\n  /**\n   * Create a DateTime from an input string and format parser.\n   *\n   * The format parser must have been created with the same locale as this call.\n   *\n   * @param {String} text - the string to parse\n   * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n   * @param {Object} opts - options taken by fromFormat()\n   * @returns {DateTime}\n   */\n  static fromFormatParser(text, formatParser, opts = {}) {\n    if (isUndefined(text) || isUndefined(formatParser)) {\n      throw new InvalidArgumentError(\n        \"fromFormatParser requires an input string and a format parser\"\n      );\n    }\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n\n    if (!localeToUse.equals(formatParser.locale)) {\n      throw new InvalidArgumentError(\n        `fromFormatParser called with a locale of ${localeToUse}, ` +\n          `but the format parser was created for ${formatParser.locale}`\n      );\n    }\n\n    const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n    if (invalidReason) {\n      return DateTime.invalid(invalidReason);\n    } else {\n      return parseDataToDateTime(\n        result,\n        zone,\n        opts,\n        `format ${formatParser.format}`,\n        text,\n        specificOffset\n      );\n    }\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link DateTime#toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n", "import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n  VERSION,\n  DateTime,\n  Duration,\n  Interval,\n  Info,\n  Zone,\n  FixedOffsetZone,\n  IANAZone,\n  InvalidZone,\n  SystemZone,\n  Settings,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronDate = exports.DAYS_IN_MONTH = exports.DateMathOp = exports.TimeUnit = void 0;\nconst luxon_1 = require(\"luxon\");\nvar TimeUnit;\n(function (TimeUnit) {\n    TimeUnit[\"Second\"] = \"Second\";\n    TimeUnit[\"Minute\"] = \"Minute\";\n    TimeUnit[\"Hour\"] = \"Hour\";\n    TimeUnit[\"Day\"] = \"Day\";\n    TimeUnit[\"Month\"] = \"Month\";\n    TimeUnit[\"Year\"] = \"Year\";\n})(TimeUnit || (exports.TimeUnit = TimeUnit = {}));\nvar DateMathOp;\n(function (DateMathOp) {\n    DateMathOp[\"Add\"] = \"Add\";\n    DateMathOp[\"Subtract\"] = \"Subtract\";\n})(DateMathOp || (exports.DateMathOp = DateMathOp = {}));\nexports.DAYS_IN_MONTH = Object.freeze([31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]);\n/**\n * CronDate class that wraps the Luxon DateTime object to provide\n * a consistent API for working with dates and times in the context of cron.\n */\nclass CronDate {\n    #date;\n    #dstStart = null;\n    #dstEnd = null;\n    /**\n     * Maps the verb to the appropriate method\n     */\n    #verbMap = {\n        add: {\n            [TimeUnit.Year]: this.addYear.bind(this),\n            [TimeUnit.Month]: this.addMonth.bind(this),\n            [TimeUnit.Day]: this.addDay.bind(this),\n            [TimeUnit.Hour]: this.addHour.bind(this),\n            [TimeUnit.Minute]: this.addMinute.bind(this),\n            [TimeUnit.Second]: this.addSecond.bind(this),\n        },\n        subtract: {\n            [TimeUnit.Year]: this.subtractYear.bind(this),\n            [TimeUnit.Month]: this.subtractMonth.bind(this),\n            [TimeUnit.Day]: this.subtractDay.bind(this),\n            [TimeUnit.Hour]: this.subtractHour.bind(this),\n            [TimeUnit.Minute]: this.subtractMinute.bind(this),\n            [TimeUnit.Second]: this.subtractSecond.bind(this),\n        },\n    };\n    /**\n     * Constructs a new CronDate instance.\n     * @param {CronDate | Date | number | string} [timestamp] - The timestamp to initialize the CronDate with.\n     * @param {string} [tz] - The timezone to use for the CronDate.\n     */\n    constructor(timestamp, tz) {\n        const dateOpts = { zone: tz };\n        // Initialize the internal DateTime object based on the type of timestamp provided.\n        if (!timestamp) {\n            this.#date = luxon_1.DateTime.local();\n        }\n        else if (timestamp instanceof CronDate) {\n            this.#date = timestamp.#date;\n            this.#dstStart = timestamp.#dstStart;\n            this.#dstEnd = timestamp.#dstEnd;\n        }\n        else if (timestamp instanceof Date) {\n            this.#date = luxon_1.DateTime.fromJSDate(timestamp, dateOpts);\n        }\n        else if (typeof timestamp === 'number') {\n            this.#date = luxon_1.DateTime.fromMillis(timestamp, dateOpts);\n        }\n        else {\n            this.#date = luxon_1.DateTime.fromISO(timestamp, dateOpts);\n            this.#date.isValid || (this.#date = luxon_1.DateTime.fromRFC2822(timestamp, dateOpts));\n            this.#date.isValid || (this.#date = luxon_1.DateTime.fromSQL(timestamp, dateOpts));\n            this.#date.isValid || (this.#date = luxon_1.DateTime.fromFormat(timestamp, 'EEE, d MMM yyyy HH:mm:ss', dateOpts));\n        }\n        // Check for valid DateTime and throw an error if not valid.\n        if (!this.#date.isValid) {\n            throw new Error(`CronDate: unhandled timestamp: ${timestamp}`);\n        }\n        // Set the timezone if it is provided and different from the current zone.\n        if (tz && tz !== this.#date.zoneName) {\n            this.#date = this.#date.setZone(tz);\n        }\n    }\n    /**\n     * Determines if the given year is a leap year.\n     * @param {number} year - The year to check\n     * @returns {boolean} - True if the year is a leap year, false otherwise\n     * @private\n     */\n    static #isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n    /**\n     * Returns daylight savings start time.\n     * @returns {number | null}\n     */\n    get dstStart() {\n        return this.#dstStart;\n    }\n    /**\n     * Sets daylight savings start time.\n     * @param {number | null} value\n     */\n    set dstStart(value) {\n        this.#dstStart = value;\n    }\n    /**\n     * Returns daylight savings end time.\n     * @returns {number | null}\n     */\n    get dstEnd() {\n        return this.#dstEnd;\n    }\n    /**\n     * Sets daylight savings end time.\n     * @param {number | null} value\n     */\n    set dstEnd(value) {\n        this.#dstEnd = value;\n    }\n    /**\n     * Adds one year to the current CronDate.\n     */\n    addYear() {\n        this.#date = this.#date.plus({ years: 1 });\n    }\n    /**\n     * Adds one month to the current CronDate.\n     */\n    addMonth() {\n        this.#date = this.#date.plus({ months: 1 }).startOf('month');\n    }\n    /**\n     * Adds one day to the current CronDate.\n     */\n    addDay() {\n        this.#date = this.#date.plus({ days: 1 }).startOf('day');\n    }\n    /**\n     * Adds one hour to the current CronDate.\n     */\n    addHour() {\n        this.#date = this.#date.plus({ hours: 1 }).startOf('hour');\n    }\n    /**\n     * Adds one minute to the current CronDate.\n     */\n    addMinute() {\n        this.#date = this.#date.plus({ minutes: 1 }).startOf('minute');\n    }\n    /**\n     * Adds one second to the current CronDate.\n     */\n    addSecond() {\n        this.#date = this.#date.plus({ seconds: 1 });\n    }\n    /**\n     * Subtracts one year from the current CronDate.\n     */\n    subtractYear() {\n        this.#date = this.#date.minus({ years: 1 });\n    }\n    /**\n     * Subtracts one month from the current CronDate.\n     * If the month is 1, it will subtract one year instead.\n     */\n    subtractMonth() {\n        this.#date = this.#date.minus({ months: 1 }).endOf('month').startOf('second');\n    }\n    /**\n     * Subtracts one day from the current CronDate.\n     * If the day is 1, it will subtract one month instead.\n     */\n    subtractDay() {\n        this.#date = this.#date.minus({ days: 1 }).endOf('day').startOf('second');\n    }\n    /**\n     * Subtracts one hour from the current CronDate.\n     * If the hour is 0, it will subtract one day instead.\n     */\n    subtractHour() {\n        this.#date = this.#date.minus({ hours: 1 }).endOf('hour').startOf('second');\n    }\n    /**\n     * Subtracts one minute from the current CronDate.\n     * If the minute is 0, it will subtract one hour instead.\n     */\n    subtractMinute() {\n        this.#date = this.#date.minus({ minutes: 1 }).endOf('minute').startOf('second');\n    }\n    /**\n     * Subtracts one second from the current CronDate.\n     * If the second is 0, it will subtract one minute instead.\n     */\n    subtractSecond() {\n        this.#date = this.#date.minus({ seconds: 1 });\n    }\n    /**\n     * Adds a unit of time to the current CronDate.\n     * @param {TimeUnit} unit\n     */\n    addUnit(unit) {\n        this.#verbMap.add[unit]();\n    }\n    /**\n     * Subtracts a unit of time from the current CronDate.\n     * @param {TimeUnit} unit\n     */\n    subtractUnit(unit) {\n        this.#verbMap.subtract[unit]();\n    }\n    /**\n     * Handles a math operation.\n     * @param {DateMathOp} verb - {'add' | 'subtract'}\n     * @param {TimeUnit} unit - {'year' | 'month' | 'day' | 'hour' | 'minute' | 'second'}\n     */\n    invokeDateOperation(verb, unit) {\n        if (verb === DateMathOp.Add) {\n            this.addUnit(unit);\n            return;\n        }\n        if (verb === DateMathOp.Subtract) {\n            this.subtractUnit(unit);\n            return;\n        }\n        /* istanbul ignore next - this would only happen if an end user call the handleMathOp with an invalid verb */\n        throw new Error(`Invalid verb: ${verb}`);\n    }\n    /**\n     * Returns the day.\n     * @returns {number}\n     */\n    getDate() {\n        return this.#date.day;\n    }\n    /**\n     * Returns the year.\n     * @returns {number}\n     */\n    getFullYear() {\n        return this.#date.year;\n    }\n    /**\n     * Returns the day of the week.\n     * @returns {number}\n     */\n    getDay() {\n        const weekday = this.#date.weekday;\n        return weekday === 7 ? 0 : weekday;\n    }\n    /**\n     * Returns the month.\n     * @returns {number}\n     */\n    getMonth() {\n        return this.#date.month - 1;\n    }\n    /**\n     * Returns the hour.\n     * @returns {number}\n     */\n    getHours() {\n        return this.#date.hour;\n    }\n    /**\n     * Returns the minutes.\n     * @returns {number}\n     */\n    getMinutes() {\n        return this.#date.minute;\n    }\n    /**\n     * Returns the seconds.\n     * @returns {number}\n     */\n    getSeconds() {\n        return this.#date.second;\n    }\n    /**\n     * Returns the milliseconds.\n     * @returns {number}\n     */\n    getMilliseconds() {\n        return this.#date.millisecond;\n    }\n    /**\n     * Returns the timezone offset from UTC in minutes (e.g. UTC+2 => 120).\n     * Useful for detecting DST transition days.\n     *\n     * @returns {number} UTC offset in minutes\n     */\n    getUTCOffset() {\n        return this.#date.offset;\n    }\n    /**\n     * Sets the time to the start of the day (00:00:00.000) in the current timezone.\n     */\n    setStartOfDay() {\n        this.#date = this.#date.startOf('day');\n    }\n    /**\n     * Sets the time to the end of the day (23:59:59.999) in the current timezone.\n     */\n    setEndOfDay() {\n        this.#date = this.#date.endOf('day');\n    }\n    /**\n     * Returns the time.\n     * @returns {number}\n     */\n    getTime() {\n        return this.#date.valueOf();\n    }\n    /**\n     * Returns the UTC day.\n     * @returns {number}\n     */\n    getUTCDate() {\n        return this.#getUTC().day;\n    }\n    /**\n     * Returns the UTC year.\n     * @returns {number}\n     */\n    getUTCFullYear() {\n        return this.#getUTC().year;\n    }\n    /**\n     * Returns the UTC day of the week.\n     * @returns {number}\n     */\n    getUTCDay() {\n        const weekday = this.#getUTC().weekday;\n        return weekday === 7 ? 0 : weekday;\n    }\n    /**\n     * Returns the UTC month.\n     * @returns {number}\n     */\n    getUTCMonth() {\n        return this.#getUTC().month - 1;\n    }\n    /**\n     * Returns the UTC hour.\n     * @returns {number}\n     */\n    getUTCHours() {\n        return this.#getUTC().hour;\n    }\n    /**\n     * Returns the UTC minutes.\n     * @returns {number}\n     */\n    getUTCMinutes() {\n        return this.#getUTC().minute;\n    }\n    /**\n     * Returns the UTC seconds.\n     * @returns {number}\n     */\n    getUTCSeconds() {\n        return this.#getUTC().second;\n    }\n    /**\n     * Returns the UTC milliseconds.\n     * @returns {string | null}\n     */\n    toISOString() {\n        return this.#date.toUTC().toISO();\n    }\n    /**\n     * Returns the date as a JSON string.\n     * @returns {string | null}\n     */\n    toJSON() {\n        return this.#date.toJSON();\n    }\n    /**\n     * Sets the day.\n     * @param d\n     */\n    setDate(d) {\n        this.#date = this.#date.set({ day: d });\n    }\n    /**\n     * Sets the year.\n     * @param y\n     */\n    setFullYear(y) {\n        this.#date = this.#date.set({ year: y });\n    }\n    /**\n     * Sets the day of the week.\n     * @param d\n     */\n    setDay(d) {\n        this.#date = this.#date.set({ weekday: d });\n    }\n    /**\n     * Sets the month.\n     * @param m\n     */\n    setMonth(m) {\n        this.#date = this.#date.set({ month: m + 1 });\n    }\n    /**\n     * Sets the hour.\n     * @param h\n     */\n    setHours(h) {\n        this.#date = this.#date.set({ hour: h });\n    }\n    /**\n     * Sets the minutes.\n     * @param m\n     */\n    setMinutes(m) {\n        this.#date = this.#date.set({ minute: m });\n    }\n    /**\n     * Sets the seconds.\n     * @param s\n     */\n    setSeconds(s) {\n        this.#date = this.#date.set({ second: s });\n    }\n    /**\n     * Sets the milliseconds.\n     * @param s\n     */\n    setMilliseconds(s) {\n        this.#date = this.#date.set({ millisecond: s });\n    }\n    /**\n     * Returns the date as a string.\n     * @returns {string}\n     */\n    toString() {\n        return this.toDate().toString();\n    }\n    /**\n     * Returns the date as a Date object.\n     * @returns {Date}\n     */\n    toDate() {\n        return this.#date.toJSDate();\n    }\n    /**\n     * Returns true if the day is the last day of the month.\n     * @returns {boolean}\n     */\n    isLastDayOfMonth() {\n        const { day, month } = this.#date;\n        // Special handling for February in leap years\n        if (month === 2) {\n            const isLeap = CronDate.#isLeapYear(this.#date.year);\n            return day === exports.DAYS_IN_MONTH[month - 1] - (isLeap ? 0 : 1);\n        }\n        // For other months, check against the static map\n        return day === exports.DAYS_IN_MONTH[month - 1];\n    }\n    /**\n     * Returns true if the day is the last weekday of the month.\n     * @returns {boolean}\n     */\n    isLastWeekdayOfMonth() {\n        const { day, month } = this.#date;\n        // Get the last day of the current month\n        let lastDay;\n        if (month === 2) {\n            // Special handling for February\n            lastDay = exports.DAYS_IN_MONTH[month - 1] - (CronDate.#isLeapYear(this.#date.year) ? 0 : 1);\n        }\n        else {\n            lastDay = exports.DAYS_IN_MONTH[month - 1];\n        }\n        // Check if the current day is within 7 days of the end of the month\n        return day > lastDay - 7;\n    }\n    /**\n     * Primarily for internal use.\n     * @param {DateMathOp} op - The operation to perform.\n     * @param {TimeUnit} unit - The unit of time to use.\n     * @param {number} [hoursLength] - The length of the hours. Required when unit is not month or day.\n     */\n    applyDateOperation(op, unit, hoursLength) {\n        if (unit === TimeUnit.Month || unit === TimeUnit.Day) {\n            this.invokeDateOperation(op, unit);\n            return;\n        }\n        const previousHour = this.getHours();\n        this.invokeDateOperation(op, unit);\n        const currentHour = this.getHours();\n        const diff = currentHour - previousHour;\n        if (diff === 2) {\n            if (hoursLength !== 24) {\n                this.dstStart = currentHour;\n            }\n        }\n        else if (diff === 0 && this.getMinutes() === 0 && this.getSeconds() === 0) {\n            if (hoursLength !== 24) {\n                this.dstEnd = currentHour;\n            }\n        }\n    }\n    /**\n     * Returns the UTC date.\n     * @private\n     * @returns {DateTime}\n     */\n    #getUTC() {\n        return this.#date.toUTC();\n    }\n}\nexports.CronDate = CronDate;\nexports.default = CronDate;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronMonth = void 0;\nconst CronDate_1 = require(\"../CronDate\");\nconst CronField_1 = require(\"./CronField\");\nconst MIN_MONTH = 1;\nconst MAX_MONTH = 12;\nconst MONTH_CHARS = Object.freeze([]);\n/**\n * Represents the \"day of the month\" field within a cron expression.\n * @class CronDayOfMonth\n * @extends CronField\n */\nclass CronMonth extends CronField_1.CronField {\n    static get min() {\n        return MIN_MONTH;\n    }\n    static get max() {\n        return MAX_MONTH;\n    }\n    static get chars() {\n        return MONTH_CHARS;\n    }\n    static get daysInMonth() {\n        return CronDate_1.DAYS_IN_MONTH;\n    }\n    /**\n     * CronDayOfMonth constructor. Initializes the \"day of the month\" field with the provided values.\n     * @param {MonthRange[]} values - Values for the \"day of the month\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"day of the month\" field.\n     * @returns {MonthRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n}\nexports.CronMonth = CronMonth;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronSecond = void 0;\nconst CronField_1 = require(\"./CronField\");\nconst MIN_SECOND = 0;\nconst MAX_SECOND = 59;\nconst SECOND_CHARS = Object.freeze([]);\n/**\n * Represents the \"second\" field within a cron expression.\n * @class CronSecond\n * @extends CronField\n */\nclass CronSecond extends CronField_1.CronField {\n    static get min() {\n        return MIN_SECOND;\n    }\n    static get max() {\n        return MAX_SECOND;\n    }\n    static get chars() {\n        return SECOND_CHARS;\n    }\n    /**\n     * CronSecond constructor. Initializes the \"second\" field with the provided values.\n     * @param {SixtyRange[]} values - Values for the \"second\" field\n     * @param {CronFieldOptions} [options] - Options provided by the parser\n     */\n    constructor(values, options) {\n        super(values, options);\n        this.validate();\n    }\n    /**\n     * Returns an array of allowed values for the \"second\" field.\n     * @returns {SixtyRange[]}\n     */\n    get values() {\n        return super.values;\n    }\n}\nexports.CronSecond = CronSecond;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./CronDayOfMonth\"), exports);\n__exportStar(require(\"./CronDayOfWeek\"), exports);\n__exportStar(require(\"./CronField\"), exports);\n__exportStar(require(\"./CronHour\"), exports);\n__exportStar(require(\"./CronMinute\"), exports);\n__exportStar(require(\"./CronMonth\"), exports);\n__exportStar(require(\"./CronSecond\"), exports);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronFieldCollection = void 0;\nconst fields_1 = require(\"./fields\");\n/**\n * Represents a complete set of cron fields.\n * @class CronFieldCollection\n */\nclass CronFieldCollection {\n    #second;\n    #minute;\n    #hour;\n    #dayOfMonth;\n    #month;\n    #dayOfWeek;\n    /**\n     * Creates a new CronFieldCollection instance by partially overriding fields from an existing one.\n     * @param {CronFieldCollection} base - The base CronFieldCollection to copy fields from\n     * @param {CronFieldOverride} fields - The fields to override, can be CronField instances or raw values\n     * @returns {CronFieldCollection} A new CronFieldCollection instance\n     * @example\n     * const base = new CronFieldCollection({\n     *   second: new CronSecond([0]),\n     *   minute: new CronMinute([0]),\n     *   hour: new CronHour([12]),\n     *   dayOfMonth: new CronDayOfMonth([1]),\n     *   month: new CronMonth([1]),\n     *   dayOfWeek: new CronDayOfWeek([1])\n     * });\n     *\n     * // Using CronField instances\n     * const modified1 = CronFieldCollection.from(base, {\n     *   hour: new CronHour([15]),\n     *   minute: new CronMinute([30])\n     * });\n     *\n     * // Using raw values\n     * const modified2 = CronFieldCollection.from(base, {\n     *   hour: [15],        // Will create new CronHour\n     *   minute: [30]       // Will create new CronMinute\n     * });\n     */\n    static from(base, fields) {\n        return new CronFieldCollection({\n            second: this.resolveField(fields_1.CronSecond, base.second, fields.second),\n            minute: this.resolveField(fields_1.CronMinute, base.minute, fields.minute),\n            hour: this.resolveField(fields_1.CronHour, base.hour, fields.hour),\n            dayOfMonth: this.resolveField(fields_1.CronDayOfMonth, base.dayOfMonth, fields.dayOfMonth),\n            month: this.resolveField(fields_1.CronMonth, base.month, fields.month),\n            dayOfWeek: this.resolveField(fields_1.CronDayOfWeek, base.dayOfWeek, fields.dayOfWeek),\n        });\n    }\n    /**\n     * Resolves a field value, either using the provided CronField instance or creating a new one from raw values.\n     * @param constructor - The constructor for creating new field instances\n     * @param baseField - The base field to use if no override is provided\n     * @param fieldValue - The override value, either a CronField instance or raw values\n     * @returns The resolved CronField instance\n     * @private\n     */\n    static resolveField(constructor, baseField, fieldValue) {\n        if (!fieldValue) {\n            return baseField;\n        }\n        if (fieldValue instanceof fields_1.CronField) {\n            return fieldValue;\n        }\n        return new constructor(fieldValue);\n    }\n    /**\n     * CronFieldCollection constructor. Initializes the cron fields with the provided values.\n     * @param {CronFields} param0 - The cron fields values\n     * @throws {Error} if validation fails\n     * @example\n     * const cronFields = new CronFieldCollection({\n     *   second: new CronSecond([0]),\n     *   minute: new CronMinute([0, 30]),\n     *   hour: new CronHour([9]),\n     *   dayOfMonth: new CronDayOfMonth([15]),\n     *   month: new CronMonth([1]),\n     *   dayOfWeek: new CronDayOfTheWeek([1, 2, 3, 4, 5]),\n     * })\n     *\n     * console.log(cronFields.second.values); // [0]\n     * console.log(cronFields.minute.values); // [0, 30]\n     * console.log(cronFields.hour.values); // [9]\n     * console.log(cronFields.dayOfMonth.values); // [15]\n     * console.log(cronFields.month.values); // [1]\n     * console.log(cronFields.dayOfWeek.values); // [1, 2, 3, 4, 5]\n     */\n    constructor({ second, minute, hour, dayOfMonth, month, dayOfWeek }) {\n        if (!second) {\n            throw new Error('Validation error, Field second is missing');\n        }\n        if (!minute) {\n            throw new Error('Validation error, Field minute is missing');\n        }\n        if (!hour) {\n            throw new Error('Validation error, Field hour is missing');\n        }\n        if (!dayOfMonth) {\n            throw new Error('Validation error, Field dayOfMonth is missing');\n        }\n        if (!month) {\n            throw new Error('Validation error, Field month is missing');\n        }\n        if (!dayOfWeek) {\n            throw new Error('Validation error, Field dayOfWeek is missing');\n        }\n        if (month.values.length === 1 && !dayOfMonth.hasLastChar) {\n            if (!(parseInt(dayOfMonth.values[0], 10) <= fields_1.CronMonth.daysInMonth[month.values[0] - 1])) {\n                throw new Error('Invalid explicit day of month definition');\n            }\n        }\n        this.#second = second;\n        this.#minute = minute;\n        this.#hour = hour;\n        this.#month = month;\n        this.#dayOfWeek = dayOfWeek;\n        this.#dayOfMonth = dayOfMonth;\n    }\n    /**\n     * Returns the second field.\n     * @returns {CronSecond}\n     */\n    get second() {\n        return this.#second;\n    }\n    /**\n     * Returns the minute field.\n     * @returns {CronMinute}\n     */\n    get minute() {\n        return this.#minute;\n    }\n    /**\n     * Returns the hour field.\n     * @returns {CronHour}\n     */\n    get hour() {\n        return this.#hour;\n    }\n    /**\n     * Returns the day of the month field.\n     * @returns {CronDayOfMonth}\n     */\n    get dayOfMonth() {\n        return this.#dayOfMonth;\n    }\n    /**\n     * Returns the month field.\n     * @returns {CronMonth}\n     */\n    get month() {\n        return this.#month;\n    }\n    /**\n     * Returns the day of the week field.\n     * @returns {CronDayOfWeek}\n     */\n    get dayOfWeek() {\n        return this.#dayOfWeek;\n    }\n    /**\n     * Returns a string representation of the cron fields.\n     * @param {(number | CronChars)[]} input - The cron fields values\n     * @static\n     * @returns {FieldRange[]} - The compacted cron fields\n     */\n    static compactField(input) {\n        if (input.length === 0) {\n            return [];\n        }\n        // Initialize the output array and current IFieldRange\n        const output = [];\n        let current = undefined;\n        input.forEach((item, i, arr) => {\n            // If the current FieldRange is undefined, create a new one with the current item as the start.\n            if (current === undefined) {\n                current = { start: item, count: 1 };\n                return;\n            }\n            // Cache the previous and next items in the array.\n            const prevItem = arr[i - 1] || current.start;\n            const nextItem = arr[i + 1];\n            // If the current item is 'L' or 'W', push the current FieldRange to the output and\n            // create a new FieldRange with the current item as the start.\n            // 'L' and 'W' characters are special cases that need to be handled separately.\n            if (item === 'L' || item === 'W') {\n                output.push(current);\n                output.push({ start: item, count: 1 });\n                current = undefined;\n                return;\n            }\n            // If the current step is undefined and there is a next item, update the current IFieldRange.\n            // This block checks if the current step needs to be updated and does so if needed.\n            if (current.step === undefined && nextItem !== undefined) {\n                const step = item - prevItem;\n                const nextStep = nextItem - item;\n                // If the current step is less or equal to the next step, update the current FieldRange to include the current item.\n                if (step <= nextStep) {\n                    current = { ...current, count: 2, end: item, step };\n                    return;\n                }\n                current.step = 1;\n            }\n            // If the difference between the current item and the current end is equal to the current step,\n            // update the current IFieldRange's count and end.\n            // This block checks if the current item is part of the current range and updates the range accordingly.\n            if (item - (current.end ?? 0) === current.step) {\n                current.count++;\n                current.end = item;\n            }\n            else {\n                // If the count is 1, push a new FieldRange with the current start.\n                // This handles the case where the current range has only one element.\n                if (current.count === 1) {\n                    // If the count is 2, push two separate IFieldRanges, one for each element.\n                    output.push({ start: current.start, count: 1 });\n                }\n                else if (current.count === 2) {\n                    output.push({ start: current.start, count: 1 });\n                    // current.end can never be undefined here but typescript doesn't know that\n                    // this is why we ?? it and then ignore the prevItem in the coverage\n                    output.push({\n                        start: current.end ?? /* istanbul ignore next - see above */ prevItem,\n                        count: 1,\n                    });\n                }\n                else {\n                    // Otherwise, push the current FieldRange to the output.\n                    output.push(current);\n                }\n                // Reset the current FieldRange with the current item as the start.\n                current = { start: item, count: 1 };\n            }\n        });\n        // Push the final IFieldRange, if any, to the output array.\n        if (current) {\n            output.push(current);\n        }\n        return output;\n    }\n    /**\n     * Handles a single range.\n     * @param {CronField} field - The cron field to stringify\n     * @param {FieldRange} range {start: number, end: number, step: number, count: number} The range to handle.\n     * @param {number} max The maximum value for the field.\n     * @returns {string | null} The stringified range or null if it cannot be stringified.\n     * @private\n     */\n    static #handleSingleRange(field, range, max) {\n        const step = range.step;\n        if (!step) {\n            return null;\n        }\n        if (step === 1 && range.start === field.min && range.end && range.end >= max) {\n            return field.hasQuestionMarkChar ? '?' : '*';\n        }\n        if (step !== 1 && range.start === field.min && range.end && range.end >= max - step + 1) {\n            return `*/${step}`;\n        }\n        return null;\n    }\n    /**\n     * Handles multiple ranges.\n     * @param {FieldRange} range {start: number, end: number, step: number, count: number} The range to handle.\n     * @param {number} max The maximum value for the field.\n     * @returns {string} The stringified range.\n     * @private\n     */\n    static #handleMultipleRanges(range, max) {\n        const step = range.step;\n        if (step === 1) {\n            return `${range.start}-${range.end}`;\n        }\n        const multiplier = range.start === 0 ? range.count - 1 : range.count;\n        /* istanbul ignore if */\n        if (!step) {\n            throw new Error('Unexpected range step');\n        }\n        /* istanbul ignore if */\n        if (!range.end) {\n            throw new Error('Unexpected range end');\n        }\n        if (step * multiplier > range.end) {\n            const mapFn = (_, index) => {\n                /* istanbul ignore if */\n                if (typeof range.start !== 'number') {\n                    throw new Error('Unexpected range start');\n                }\n                return index % step === 0 ? range.start + index : null;\n            };\n            /* istanbul ignore if */\n            if (typeof range.start !== 'number') {\n                throw new Error('Unexpected range start');\n            }\n            const seed = { length: range.end - range.start + 1 };\n            return Array.from(seed, mapFn)\n                .filter((value) => value !== null)\n                .join(',');\n        }\n        return range.end === max - step + 1 ? `${range.start}/${step}` : `${range.start}-${range.end}/${step}`;\n    }\n    /**\n     * Returns a string representation of the cron fields.\n     * @param {CronField} field - The cron field to stringify\n     * @static\n     * @returns {string} - The stringified cron field\n     */\n    stringifyField(field) {\n        let max = field.max;\n        let values = field.values;\n        if (field instanceof fields_1.CronDayOfWeek) {\n            max = 6;\n            const dayOfWeek = this.#dayOfWeek.values;\n            values = dayOfWeek[dayOfWeek.length - 1] === 7 ? dayOfWeek.slice(0, -1) : dayOfWeek;\n        }\n        if (field instanceof fields_1.CronDayOfMonth) {\n            max = this.#month.values.length === 1 ? fields_1.CronMonth.daysInMonth[this.#month.values[0] - 1] : field.max;\n        }\n        const ranges = CronFieldCollection.compactField(values);\n        if (ranges.length === 1) {\n            const singleRangeResult = CronFieldCollection.#handleSingleRange(field, ranges[0], max);\n            if (singleRangeResult) {\n                return singleRangeResult;\n            }\n        }\n        return ranges\n            .map((range) => {\n            const value = range.count === 1 ? range.start.toString() : CronFieldCollection.#handleMultipleRanges(range, max);\n            if (field instanceof fields_1.CronDayOfWeek && field.nthDay > 0) {\n                return `${value}#${field.nthDay}`;\n            }\n            return value;\n        })\n            .join(',');\n    }\n    /**\n     * Returns a string representation of the cron field values.\n     * @param {boolean} includeSeconds - Whether to include seconds in the output\n     * @returns {string} The formatted cron string\n     */\n    stringify(includeSeconds = false) {\n        const arr = [];\n        if (includeSeconds) {\n            arr.push(this.stringifyField(this.#second)); // second\n        }\n        arr.push(this.stringifyField(this.#minute), // minute\n        this.stringifyField(this.#hour), // hour\n        this.stringifyField(this.#dayOfMonth), // dayOfMonth\n        this.stringifyField(this.#month), // month\n        this.stringifyField(this.#dayOfWeek));\n        return arr.join(' ');\n    }\n    /**\n     * Returns a serialized representation of the cron fields values.\n     * @returns {SerializedCronFields} An object containing the cron field values\n     */\n    serialize() {\n        return {\n            second: this.#second.serialize(),\n            minute: this.#minute.serialize(),\n            hour: this.#hour.serialize(),\n            dayOfMonth: this.#dayOfMonth.serialize(),\n            month: this.#month.serialize(),\n            dayOfWeek: this.#dayOfWeek.serialize(),\n        };\n    }\n}\nexports.CronFieldCollection = CronFieldCollection;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronExpression = exports.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE = exports.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE = void 0;\nconst CronDate_1 = require(\"./CronDate\");\n/**\n * Error message for when the current date is outside the specified time span.\n */\nexports.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE = 'Out of the time span range';\n/**\n * Error message for when the loop limit is exceeded during iteration.\n */\nexports.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE = 'Invalid expression, loop limit exceeded';\n/**\n * Cron iteration loop safety limit\n */\nconst LOOP_LIMIT = 10000;\n/**\n * Class representing a Cron expression.\n */\nclass CronExpression {\n    #options;\n    #tz;\n    #currentDate;\n    #startDate;\n    #endDate;\n    #fields;\n    #dstTransitionDayKey = null;\n    #isDstTransitionDay = false;\n    /**\n     * Creates a new CronExpression instance.\n     *\n     * @param {CronFieldCollection} fields - Cron fields.\n     * @param {CronExpressionOptions} options - Parser options.\n     */\n    constructor(fields, options) {\n        this.#options = options;\n        this.#tz = options.tz;\n        this.#startDate = options.startDate ? new CronDate_1.CronDate(options.startDate, this.#tz) : null;\n        this.#endDate = options.endDate ? new CronDate_1.CronDate(options.endDate, this.#tz) : null;\n        let currentDateValue = options.currentDate ?? options.startDate;\n        if (currentDateValue) {\n            const tempCurrentDate = new CronDate_1.CronDate(currentDateValue, this.#tz);\n            if (this.#startDate && tempCurrentDate.getTime() < this.#startDate.getTime()) {\n                currentDateValue = this.#startDate;\n            }\n            else if (this.#endDate && tempCurrentDate.getTime() > this.#endDate.getTime()) {\n                currentDateValue = this.#endDate;\n            }\n        }\n        this.#currentDate = new CronDate_1.CronDate(currentDateValue, this.#tz);\n        this.#fields = fields;\n    }\n    /**\n     * Getter for the cron fields.\n     *\n     * @returns {CronFieldCollection} Cron fields.\n     */\n    get fields() {\n        return this.#fields;\n    }\n    /**\n     * Converts cron fields back to a CronExpression instance.\n     *\n     * @public\n     * @param {Record<string, number[]>} fields - The input cron fields object.\n     * @param {CronExpressionOptions} [options] - Optional parsing options.\n     * @returns {CronExpression} - A new CronExpression instance.\n     */\n    static fieldsToExpression(fields, options) {\n        return new CronExpression(fields, options || {});\n    }\n    /**\n     * Checks if the given value matches any element in the sequence.\n     *\n     * @param {number} value - The value to be matched.\n     * @param {number[]} sequence - The sequence to be checked against.\n     * @returns {boolean} - True if the value matches an element in the sequence; otherwise, false.\n     * @memberof CronExpression\n     * @private\n     */\n    static #matchSchedule(value, sequence) {\n        return sequence.some((element) => element === value);\n    }\n    /**\n     * Returns the minimum or maximum value from the given array of numbers.\n     *\n     * @param {number[]} values - An array of numbers.\n     * @param {boolean} reverse - If true, returns the maximum value; otherwise, returns the minimum value.\n     * @returns {number} - The minimum or maximum value.\n     */\n    #getMinOrMax(values, reverse) {\n        return values[reverse ? values.length - 1 : 0];\n    }\n    /**\n     * Checks whether the given date falls on a DST transition day in its timezone.\n     *\n     * This is used to disable certain \u201Cdirect set\u201D fast paths on DST days, because setting the hour\n     * directly may land on a non-existent or repeated local time. We cache the result per calendar day\n     * to keep iteration overhead low.\n     *\n     * @param {CronDate} currentDate - Date to check (in the cron timezone)\n     * @returns {boolean} True when the day has a DST transition\n     * @private\n     */\n    #checkDstTransition(currentDate) {\n        // Cache per calendar day (in the cron date's timezone) to avoid repeated work inside the iteration loop.\n        const key = `${currentDate.getFullYear()}-${currentDate.getMonth() + 1}-${currentDate.getDate()}`;\n        if (this.#dstTransitionDayKey === key) {\n            return this.#isDstTransitionDay;\n        }\n        const startOfDay = new CronDate_1.CronDate(currentDate);\n        startOfDay.setStartOfDay();\n        const endOfDay = new CronDate_1.CronDate(currentDate);\n        endOfDay.setEndOfDay();\n        this.#dstTransitionDayKey = key;\n        this.#isDstTransitionDay = startOfDay.getUTCOffset() !== endOfDay.getUTCOffset();\n        return this.#isDstTransitionDay;\n    }\n    /**\n     * Moves the date to the next/previous allowed second value. If there is no remaining allowed second\n     * within the current minute, rolls to the next/previous minute and resets seconds to the min/max allowed.\n     *\n     * @param {CronDate} currentDate - Mutable date being iterated\n     * @param {DateMathOp} dateMathVerb - Add/Subtract depending on direction\n     * @param {boolean} reverse - When true, iterating backwards\n     * @private\n     */\n    #moveToNextSecond(currentDate, dateMathVerb, reverse) {\n        const seconds = this.#fields.second.values;\n        const currentSecond = currentDate.getSeconds();\n        const nextSecond = this.#fields.second.findNearestValue(currentSecond, reverse);\n        if (nextSecond !== null) {\n            currentDate.setSeconds(nextSecond);\n            return;\n        }\n        // Roll over to the next/previous minute and start from the min/max allowed second.\n        currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Minute, this.#fields.hour.values.length);\n        currentDate.setSeconds(this.#getMinOrMax(seconds, reverse));\n    }\n    /**\n     * Moves the date to the next/previous allowed minute value and resets seconds to the min/max allowed.\n     * If there is no remaining allowed minute within the current hour, rolls to the next/previous hour and\n     * resets minutes/seconds to their extrema.\n     *\n     * @param {CronDate} currentDate - Mutable date being iterated\n     * @param {DateMathOp} dateMathVerb - Add/Subtract depending on direction\n     * @param {boolean} reverse - When true, iterating backwards\n     * @private\n     */\n    #moveToNextMinute(currentDate, dateMathVerb, reverse) {\n        const minutes = this.#fields.minute.values;\n        const seconds = this.#fields.second.values;\n        const currentMinute = currentDate.getMinutes();\n        const nextMinute = this.#fields.minute.findNearestValue(currentMinute, reverse);\n        if (nextMinute !== null) {\n            currentDate.setMinutes(nextMinute);\n            currentDate.setSeconds(this.#getMinOrMax(seconds, reverse));\n            return;\n        }\n        // Roll over to the next/previous hour and start from the min/max allowed minute/second.\n        currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Hour, this.#fields.hour.values.length);\n        currentDate.setMinutes(this.#getMinOrMax(minutes, reverse));\n        currentDate.setSeconds(this.#getMinOrMax(seconds, reverse));\n    }\n    /**\n     * Determines if the current date matches the last specified weekday of the month.\n     *\n     * @param {Array<(number|string)>} expressions - An array of expressions containing weekdays and \"L\" for the last weekday.\n     * @param {CronDate} currentDate - The current date object.\n     * @returns {boolean} - True if the current date matches the last specified weekday of the month; otherwise, false.\n     * @memberof CronExpression\n     * @private\n     */\n    static #isLastWeekdayOfMonthMatch(expressions, currentDate) {\n        const isLastWeekdayOfMonth = currentDate.isLastWeekdayOfMonth();\n        return expressions.some((expression) => {\n            // The first character represents the weekday\n            const weekday = parseInt(expression.toString().charAt(0), 10) % 7;\n            if (Number.isNaN(weekday)) {\n                throw new Error(`Invalid last weekday of the month expression: ${expression}`);\n            }\n            // Check if the current date matches the last specified weekday of the month\n            return currentDate.getDay() === weekday && isLastWeekdayOfMonth;\n        });\n    }\n    /**\n     * Find the next scheduled date based on the cron expression.\n     * @returns {CronDate} - The next scheduled date or an ES6 compatible iterator object.\n     * @memberof CronExpression\n     * @public\n     */\n    next() {\n        return this.#findSchedule();\n    }\n    /**\n     * Find the previous scheduled date based on the cron expression.\n     * @returns {CronDate} - The previous scheduled date or an ES6 compatible iterator object.\n     * @memberof CronExpression\n     * @public\n     */\n    prev() {\n        return this.#findSchedule(true);\n    }\n    /**\n     * Check if there is a next scheduled date based on the current date and cron expression.\n     * @returns {boolean} - Returns true if there is a next scheduled date, false otherwise.\n     * @memberof CronExpression\n     * @public\n     */\n    hasNext() {\n        const current = this.#currentDate;\n        try {\n            this.#findSchedule();\n            return true;\n        }\n        catch {\n            return false;\n        }\n        finally {\n            this.#currentDate = current;\n        }\n    }\n    /**\n     * Check if there is a previous scheduled date based on the current date and cron expression.\n     * @returns {boolean} - Returns true if there is a previous scheduled date, false otherwise.\n     * @memberof CronExpression\n     * @public\n     */\n    hasPrev() {\n        const current = this.#currentDate;\n        try {\n            this.#findSchedule(true);\n            return true;\n        }\n        catch {\n            return false;\n        }\n        finally {\n            this.#currentDate = current;\n        }\n    }\n    /**\n     * Iterate over a specified number of steps and optionally execute a callback function for each step.\n     * @param {number} steps - The number of steps to iterate. Positive value iterates forward, negative value iterates backward.\n     * @returns {CronDate[]} - An array of iterator fields or CronDate objects.\n     * @memberof CronExpression\n     * @public\n     */\n    take(limit) {\n        const items = [];\n        if (limit >= 0) {\n            for (let i = 0; i < limit; i++) {\n                try {\n                    items.push(this.next());\n                }\n                catch {\n                    return items;\n                }\n            }\n        }\n        else {\n            for (let i = 0; i > limit; i--) {\n                try {\n                    items.push(this.prev());\n                }\n                catch {\n                    return items;\n                }\n            }\n        }\n        return items;\n    }\n    /**\n     * Reset the iterators current date to a new date or the initial date.\n     * @param {Date | CronDate} [newDate] - Optional new date to reset to. If not provided, it will reset to the initial date.\n     * @memberof CronExpression\n     * @public\n     */\n    reset(newDate) {\n        this.#currentDate = new CronDate_1.CronDate(newDate || this.#options.currentDate);\n    }\n    /**\n     * Generate a string representation of the cron expression.\n     * @param {boolean} [includeSeconds=false] - Whether to include the seconds field in the string representation.\n     * @returns {string} - The string representation of the cron expression.\n     * @memberof CronExpression\n     * @public\n     */\n    stringify(includeSeconds = false) {\n        return this.#fields.stringify(includeSeconds);\n    }\n    /**\n     * Check if the cron expression includes the given date\n     * @param {Date|CronDate} date\n     * @returns {boolean}\n     */\n    includesDate(date) {\n        const { second, minute, hour, month } = this.#fields;\n        const dt = new CronDate_1.CronDate(date, this.#tz);\n        // Check basic time fields first\n        if (!second.values.includes(dt.getSeconds()) ||\n            !minute.values.includes(dt.getMinutes()) ||\n            !hour.values.includes(dt.getHours()) ||\n            !month.values.includes((dt.getMonth() + 1))) {\n            return false;\n        }\n        // Check day of month and day of week using the same logic as #findSchedule\n        if (!this.#matchDayOfMonth(dt)) {\n            return false;\n        }\n        // Check nth day of week if specified\n        if (this.#fields.dayOfWeek.nthDay > 0) {\n            const weekInMonth = Math.ceil(dt.getDate() / 7);\n            if (weekInMonth !== this.#fields.dayOfWeek.nthDay) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Returns the string representation of the cron expression.\n     * @returns {CronDate} - The next schedule date.\n     */\n    toString() {\n        /* istanbul ignore next - should be impossible under normal use to trigger the or branch */\n        return this.#options.expression || this.stringify(true);\n    }\n    /**\n     * Determines if the given date matches the cron expression's day of month and day of week fields.\n     *\n     * The function checks the following rules:\n     * Rule 1: If both \"day of month\" and \"day of week\" are restricted (not wildcard), then one or both must match the current day.\n     * Rule 2: If \"day of month\" is restricted and \"day of week\" is not restricted, then \"day of month\" must match the current day.\n     * Rule 3: If \"day of month\" is a wildcard, \"day of week\" is not a wildcard, and \"day of week\" matches the current day, then the match is accepted.\n     * If none of the rules match, the match is rejected.\n     *\n     * @param {CronDate} currentDate - The current date to be evaluated against the cron expression.\n     * @returns {boolean} Returns true if the current date matches the cron expression's day of month and day of week fields, otherwise false.\n     * @memberof CronExpression\n     * @private\n     */\n    #matchDayOfMonth(currentDate) {\n        // Check if day of month and day of week fields are wildcards or restricted (not wildcard).\n        const isDayOfMonthWildcardMatch = this.#fields.dayOfMonth.isWildcard;\n        const isRestrictedDayOfMonth = !isDayOfMonthWildcardMatch;\n        const isDayOfWeekWildcardMatch = this.#fields.dayOfWeek.isWildcard;\n        const isRestrictedDayOfWeek = !isDayOfWeekWildcardMatch;\n        // Calculate if the current date matches the day of month and day of week fields.\n        const matchedDOM = CronExpression.#matchSchedule(currentDate.getDate(), this.#fields.dayOfMonth.values) ||\n            (this.#fields.dayOfMonth.hasLastChar && currentDate.isLastDayOfMonth());\n        const matchedDOW = CronExpression.#matchSchedule(currentDate.getDay(), this.#fields.dayOfWeek.values) ||\n            (this.#fields.dayOfWeek.hasLastChar &&\n                CronExpression.#isLastWeekdayOfMonthMatch(this.#fields.dayOfWeek.values, currentDate));\n        // Rule 1: Both \"day of month\" and \"day of week\" are restricted; one or both must match the current day.\n        if (isRestrictedDayOfMonth && isRestrictedDayOfWeek && (matchedDOM || matchedDOW)) {\n            return true;\n        }\n        // Rule 2: \"day of month\" restricted and \"day of week\" not restricted; \"day of month\" must match the current day.\n        if (matchedDOM && !isRestrictedDayOfWeek) {\n            return true;\n        }\n        // Rule 3: \"day of month\" is a wildcard, \"day of week\" is not a wildcard, and \"day of week\" matches the current day.\n        if (isDayOfMonthWildcardMatch && !isDayOfWeekWildcardMatch && matchedDOW) {\n            return true;\n        }\n        // If none of the rules match, the match is rejected.\n        return false;\n    }\n    /**\n     * Determines if the current hour matches the cron expression.\n     *\n     * @param {CronDate} currentDate - The current date object.\n     * @param {DateMathOp} dateMathVerb - The date math operation enumeration value.\n     * @param {boolean} reverse - A flag indicating whether the matching should be done in reverse order.\n     * @returns {boolean} - True if the current hour matches the cron expression; otherwise, false.\n     */\n    #matchHour(currentDate, dateMathVerb, reverse) {\n        const hourValues = this.#fields.hour.values;\n        const hours = hourValues;\n        const currentHour = currentDate.getHours();\n        const isMatch = CronExpression.#matchSchedule(currentHour, hourValues);\n        const isDstStart = currentDate.dstStart === currentHour;\n        const isDstEnd = currentDate.dstEnd === currentHour;\n        // DST start: if the scheduled hour is skipped (e.g. 03:00 doesn't exist),\n        // accept the next existing hour when it corresponds to the skipped one.\n        if (isDstStart) {\n            if (CronExpression.#matchSchedule(currentHour - 1, hourValues)) {\n                return true;\n            }\n            currentDate.invokeDateOperation(dateMathVerb, CronDate_1.TimeUnit.Hour);\n            return false;\n        }\n        // DST end: avoid returning the repeated hour twice when searching forward.\n        if (isDstEnd && !reverse) {\n            currentDate.dstEnd = null;\n            currentDate.applyDateOperation(CronDate_1.DateMathOp.Add, CronDate_1.TimeUnit.Hour, hours.length);\n            return false;\n        }\n        if (isMatch) {\n            return true;\n        }\n        // Normal mismatch: if there's no remaining matching hour in this day, jump a whole day first\n        // to avoid scanning hour-by-hour across the day boundary.\n        currentDate.dstStart = null;\n        const nextHour = this.#fields.hour.findNearestValue(currentHour, reverse);\n        if (nextHour === null) {\n            currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Day, hours.length);\n            return false;\n        }\n        // Fast path: jump directly to the next/previous matching hour and reset lower units.\n        //\n        // On DST transition days, setting the hour directly can land on a non-existent/repeated local time,\n        // which breaks the existing DST handling that relies on `applyDateOperation()` to set `dstStart/dstEnd`.\n        // For those days, fall back to stepping hour-by-hour to preserve correctness.\n        if (this.#checkDstTransition(currentDate)) {\n            const steps = reverse ? currentHour - nextHour : nextHour - currentHour;\n            for (let i = 0; i < steps; i++) {\n                currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Hour, hours.length);\n            }\n        }\n        else {\n            currentDate.setHours(nextHour);\n        }\n        currentDate.setMinutes(this.#getMinOrMax(this.#fields.minute.values, reverse));\n        currentDate.setSeconds(this.#getMinOrMax(this.#fields.second.values, reverse));\n        return false;\n    }\n    /**\n     * Validates the current date against the start and end dates of the cron expression.\n     * If the current date is outside the specified time span, an error is thrown.\n     *\n     * @param currentDate {CronDate} - The current date to validate.\n     * @throws {Error} If the current date is outside the specified time span.\n     * @private\n     */\n    #validateTimeSpan(currentDate) {\n        if (!this.#startDate && !this.#endDate) {\n            return;\n        }\n        const currentTime = currentDate.getTime();\n        if (this.#startDate && currentTime < this.#startDate.getTime()) {\n            throw new Error(exports.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE);\n        }\n        if (this.#endDate && currentTime > this.#endDate.getTime()) {\n            throw new Error(exports.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE);\n        }\n    }\n    /**\n     * Finds the next or previous schedule based on the cron expression.\n     *\n     * @param {boolean} [reverse=false] - If true, finds the previous schedule; otherwise, finds the next schedule.\n     * @returns {CronDate} - The next or previous schedule date.\n     * @private\n     */\n    #findSchedule(reverse = false) {\n        const dateMathVerb = reverse ? CronDate_1.DateMathOp.Subtract : CronDate_1.DateMathOp.Add;\n        const currentDate = new CronDate_1.CronDate(this.#currentDate);\n        const startTimestamp = currentDate.getTime();\n        let stepCount = 0;\n        while (++stepCount < LOOP_LIMIT) {\n            this.#validateTimeSpan(currentDate);\n            if (!this.#matchDayOfMonth(currentDate)) {\n                currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Day, this.#fields.hour.values.length);\n                continue;\n            }\n            if (!(this.#fields.dayOfWeek.nthDay <= 0 || Math.ceil(currentDate.getDate() / 7) === this.#fields.dayOfWeek.nthDay)) {\n                currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Day, this.#fields.hour.values.length);\n                continue;\n            }\n            if (!CronExpression.#matchSchedule(currentDate.getMonth() + 1, this.#fields.month.values)) {\n                currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Month, this.#fields.hour.values.length);\n                continue;\n            }\n            if (!this.#matchHour(currentDate, dateMathVerb, reverse)) {\n                continue;\n            }\n            if (!CronExpression.#matchSchedule(currentDate.getMinutes(), this.#fields.minute.values)) {\n                this.#moveToNextMinute(currentDate, dateMathVerb, reverse);\n                continue;\n            }\n            if (!CronExpression.#matchSchedule(currentDate.getSeconds(), this.#fields.second.values)) {\n                this.#moveToNextSecond(currentDate, dateMathVerb, reverse);\n                continue;\n            }\n            if (startTimestamp === currentDate.getTime()) {\n                if (dateMathVerb === 'Add' || currentDate.getMilliseconds() === 0) {\n                    currentDate.applyDateOperation(dateMathVerb, CronDate_1.TimeUnit.Second, this.#fields.hour.values.length);\n                }\n                continue;\n            }\n            break;\n        }\n        /* istanbul ignore next - should be impossible under normal use to trigger the branch */\n        if (stepCount > LOOP_LIMIT) {\n            throw new Error(exports.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE);\n        }\n        if (currentDate.getMilliseconds() !== 0) {\n            currentDate.setMilliseconds(0);\n        }\n        this.#currentDate = currentDate;\n        return currentDate;\n    }\n    /**\n     * Returns an iterator for iterating through future CronDate instances\n     *\n     * @name Symbol.iterator\n     * @memberof CronExpression\n     * @returns {Iterator<CronDate>} An iterator object for CronExpression that returns CronDate values.\n     */\n    [Symbol.iterator]() {\n        return {\n            next: () => {\n                const schedule = this.#findSchedule();\n                return { value: schedule, done: !this.hasNext() };\n            },\n        };\n    }\n}\nexports.CronExpression = CronExpression;\nexports.default = CronExpression;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.seededRandom = seededRandom;\n/**\n * Computes a numeric hash from a given string\n * @param {string} str A value to hash\n * @returns {number} A numeric hash computed from the given value\n */\nfunction xfnv1a(str) {\n    let h = 2166136261 >>> 0;\n    for (let i = 0; i < str.length; i++) {\n        h ^= str.charCodeAt(i);\n        h = Math.imul(h, 16777619);\n    }\n    return () => h >>> 0;\n}\n/**\n * Initialize a new PRNG using a given seed\n * @param {number} seed The seed used to initialize the PRNG\n * @returns {PRNG} A random number generator\n */\nfunction mulberry32(seed) {\n    return () => {\n        let t = (seed += 0x6d2b79f5);\n        t = Math.imul(t ^ (t >>> 15), t | 1);\n        t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n        return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n    };\n}\n/**\n * Generates a PRNG using a given seed. When not provided, the seed is randomly generated\n * @param {string} str A string to derive the seed from\n * @returns {PRNG} A random number generator correctly seeded\n */\nfunction seededRandom(str) {\n    const seed = str ? xfnv1a(str)() : Math.floor(Math.random() * 10_000_000_000);\n    return mulberry32(seed);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronExpressionParser = exports.DayOfWeek = exports.Months = exports.CronUnit = exports.PredefinedExpressions = void 0;\nconst CronFieldCollection_1 = require(\"./CronFieldCollection\");\nconst CronExpression_1 = require(\"./CronExpression\");\nconst random_1 = require(\"./utils/random\");\nconst fields_1 = require(\"./fields\");\nvar PredefinedExpressions;\n(function (PredefinedExpressions) {\n    PredefinedExpressions[\"@yearly\"] = \"0 0 0 1 1 *\";\n    PredefinedExpressions[\"@annually\"] = \"0 0 0 1 1 *\";\n    PredefinedExpressions[\"@monthly\"] = \"0 0 0 1 * *\";\n    PredefinedExpressions[\"@weekly\"] = \"0 0 0 * * 0\";\n    PredefinedExpressions[\"@daily\"] = \"0 0 0 * * *\";\n    PredefinedExpressions[\"@hourly\"] = \"0 0 * * * *\";\n    PredefinedExpressions[\"@minutely\"] = \"0 * * * * *\";\n    PredefinedExpressions[\"@secondly\"] = \"* * * * * *\";\n    PredefinedExpressions[\"@weekdays\"] = \"0 0 0 * * 1-5\";\n    PredefinedExpressions[\"@weekends\"] = \"0 0 0 * * 0,6\";\n})(PredefinedExpressions || (exports.PredefinedExpressions = PredefinedExpressions = {}));\nvar CronUnit;\n(function (CronUnit) {\n    CronUnit[\"Second\"] = \"Second\";\n    CronUnit[\"Minute\"] = \"Minute\";\n    CronUnit[\"Hour\"] = \"Hour\";\n    CronUnit[\"DayOfMonth\"] = \"DayOfMonth\";\n    CronUnit[\"Month\"] = \"Month\";\n    CronUnit[\"DayOfWeek\"] = \"DayOfWeek\";\n})(CronUnit || (exports.CronUnit = CronUnit = {}));\n// these need to be lowercase for the parser to work\nvar Months;\n(function (Months) {\n    Months[Months[\"jan\"] = 1] = \"jan\";\n    Months[Months[\"feb\"] = 2] = \"feb\";\n    Months[Months[\"mar\"] = 3] = \"mar\";\n    Months[Months[\"apr\"] = 4] = \"apr\";\n    Months[Months[\"may\"] = 5] = \"may\";\n    Months[Months[\"jun\"] = 6] = \"jun\";\n    Months[Months[\"jul\"] = 7] = \"jul\";\n    Months[Months[\"aug\"] = 8] = \"aug\";\n    Months[Months[\"sep\"] = 9] = \"sep\";\n    Months[Months[\"oct\"] = 10] = \"oct\";\n    Months[Months[\"nov\"] = 11] = \"nov\";\n    Months[Months[\"dec\"] = 12] = \"dec\";\n})(Months || (exports.Months = Months = {}));\n// these need to be lowercase for the parser to work\nvar DayOfWeek;\n(function (DayOfWeek) {\n    DayOfWeek[DayOfWeek[\"sun\"] = 0] = \"sun\";\n    DayOfWeek[DayOfWeek[\"mon\"] = 1] = \"mon\";\n    DayOfWeek[DayOfWeek[\"tue\"] = 2] = \"tue\";\n    DayOfWeek[DayOfWeek[\"wed\"] = 3] = \"wed\";\n    DayOfWeek[DayOfWeek[\"thu\"] = 4] = \"thu\";\n    DayOfWeek[DayOfWeek[\"fri\"] = 5] = \"fri\";\n    DayOfWeek[DayOfWeek[\"sat\"] = 6] = \"sat\";\n})(DayOfWeek || (exports.DayOfWeek = DayOfWeek = {}));\n/**\n * Static class that parses a cron expression and returns a CronExpression object.\n * @static\n * @class CronExpressionParser\n */\nclass CronExpressionParser {\n    /**\n     * Parses a cron expression and returns a CronExpression object.\n     * @param {string} expression - The cron expression to parse.\n     * @param {CronExpressionOptions} [options={}] - The options to use when parsing the expression.\n     * @param {boolean} [options.strict=false] - If true, will throw an error if the expression contains both dayOfMonth and dayOfWeek.\n     * @param {CronDate} [options.currentDate=new CronDate(undefined, 'UTC')] - The date to use when calculating the next/previous occurrence.\n     *\n     * @returns {CronExpression} A CronExpression object.\n     */\n    static parse(expression, options = {}) {\n        const { strict = false, hashSeed } = options;\n        const rand = (0, random_1.seededRandom)(hashSeed);\n        expression = PredefinedExpressions[expression] || expression;\n        const rawFields = CronExpressionParser.#getRawFields(expression, strict);\n        if (!(rawFields.dayOfMonth === '*' || rawFields.dayOfWeek === '*' || !strict)) {\n            throw new Error('Cannot use both dayOfMonth and dayOfWeek together in strict mode!');\n        }\n        const second = CronExpressionParser.#parseField(CronUnit.Second, rawFields.second, fields_1.CronSecond.constraints, rand);\n        const minute = CronExpressionParser.#parseField(CronUnit.Minute, rawFields.minute, fields_1.CronMinute.constraints, rand);\n        const hour = CronExpressionParser.#parseField(CronUnit.Hour, rawFields.hour, fields_1.CronHour.constraints, rand);\n        const month = CronExpressionParser.#parseField(CronUnit.Month, rawFields.month, fields_1.CronMonth.constraints, rand);\n        const dayOfMonth = CronExpressionParser.#parseField(CronUnit.DayOfMonth, rawFields.dayOfMonth, fields_1.CronDayOfMonth.constraints, rand);\n        const { dayOfWeek: _dayOfWeek, nthDayOfWeek } = CronExpressionParser.#parseNthDay(rawFields.dayOfWeek);\n        const dayOfWeek = CronExpressionParser.#parseField(CronUnit.DayOfWeek, _dayOfWeek, fields_1.CronDayOfWeek.constraints, rand);\n        const fields = new CronFieldCollection_1.CronFieldCollection({\n            second: new fields_1.CronSecond(second, { rawValue: rawFields.second }),\n            minute: new fields_1.CronMinute(minute, { rawValue: rawFields.minute }),\n            hour: new fields_1.CronHour(hour, { rawValue: rawFields.hour }),\n            dayOfMonth: new fields_1.CronDayOfMonth(dayOfMonth, { rawValue: rawFields.dayOfMonth }),\n            month: new fields_1.CronMonth(month, { rawValue: rawFields.month }),\n            dayOfWeek: new fields_1.CronDayOfWeek(dayOfWeek, { rawValue: rawFields.dayOfWeek, nthDayOfWeek }),\n        });\n        return new CronExpression_1.CronExpression(fields, { ...options, expression });\n    }\n    /**\n     * Get the raw fields from a cron expression.\n     * @param {string} expression - The cron expression to parse.\n     * @param {boolean} strict - If true, will throw an error if the expression contains both dayOfMonth and dayOfWeek.\n     * @private\n     * @returns {RawCronFields} The raw fields.\n     */\n    static #getRawFields(expression, strict) {\n        if (strict && !expression.length) {\n            throw new Error('Invalid cron expression');\n        }\n        expression = expression || '0 * * * * *';\n        const atoms = expression.trim().split(/\\s+/);\n        if (strict && atoms.length < 6) {\n            throw new Error('Invalid cron expression, expected 6 fields');\n        }\n        if (atoms.length > 6) {\n            throw new Error('Invalid cron expression, too many fields');\n        }\n        const defaults = ['*', '*', '*', '*', '*', '0'];\n        if (atoms.length < defaults.length) {\n            atoms.unshift(...defaults.slice(atoms.length));\n        }\n        const [second, minute, hour, dayOfMonth, month, dayOfWeek] = atoms;\n        return { second, minute, hour, dayOfMonth, month, dayOfWeek };\n    }\n    /**\n     * Parse a field from a cron expression.\n     * @param {CronUnit} field - The field to parse.\n     * @param {string} value - The value of the field.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     * @returns {(number | string)[]} The parsed field.\n     */\n    static #parseField(field, value, constraints, rand) {\n        // Replace aliases for month and dayOfWeek\n        if (field === CronUnit.Month || field === CronUnit.DayOfWeek) {\n            value = value.replace(/[a-z]{3}/gi, (match) => {\n                match = match.toLowerCase();\n                const replacer = Months[match] || DayOfWeek[match];\n                if (replacer === undefined) {\n                    throw new Error(`Validation error, cannot resolve alias \"${match}\"`);\n                }\n                return replacer.toString();\n            });\n        }\n        // Check for valid characters\n        if (!constraints.validChars.test(value)) {\n            throw new Error(`Invalid characters, got value: ${value}`);\n        }\n        value = this.#parseWildcard(value, constraints);\n        value = this.#parseHashed(value, constraints, rand);\n        return this.#parseSequence(field, value, constraints);\n    }\n    /**\n     * Parse a wildcard from a cron expression.\n     * @param {string} value - The value to parse.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     */\n    static #parseWildcard(value, constraints) {\n        return value.replace(/[*?]/g, constraints.min + '-' + constraints.max);\n    }\n    /**\n     * Parse a hashed value from a cron expression.\n     * @param {string} value - The value to parse.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @param {PRNG} rand - The random number generator to use.\n     * @private\n     */\n    static #parseHashed(value, constraints, rand) {\n        const randomValue = rand();\n        return value.replace(/H(?:\\((\\d+)-(\\d+)\\))?(?:\\/(\\d+))?/g, (_, min, max, step) => {\n            // H(range)/step\n            if (min && max && step) {\n                const minNum = parseInt(min, 10);\n                const maxNum = parseInt(max, 10);\n                const stepNum = parseInt(step, 10);\n                if (minNum > maxNum) {\n                    throw new Error(`Invalid range: ${minNum}-${maxNum}, min > max`);\n                }\n                if (stepNum <= 0) {\n                    throw new Error(`Invalid step: ${stepNum}, must be positive`);\n                }\n                const minStart = Math.max(minNum, constraints.min);\n                const offset = Math.floor(randomValue * stepNum);\n                const values = [];\n                for (let i = Math.floor(minStart / stepNum) * stepNum + offset; i <= maxNum; i += stepNum) {\n                    if (i >= minStart) {\n                        values.push(i);\n                    }\n                }\n                return values.join(',');\n            }\n            // H(range)\n            else if (min && max) {\n                const minNum = parseInt(min, 10);\n                const maxNum = parseInt(max, 10);\n                if (minNum > maxNum) {\n                    throw new Error(`Invalid range: ${minNum}-${maxNum}, min > max`);\n                }\n                return String(Math.floor(randomValue * (maxNum - minNum + 1)) + minNum);\n            }\n            // H/step\n            else if (step) {\n                const stepNum = parseInt(step, 10);\n                // Validate step\n                if (stepNum <= 0) {\n                    throw new Error(`Invalid step: ${stepNum}, must be positive`);\n                }\n                const offset = Math.floor(randomValue * stepNum);\n                const values = [];\n                for (let i = Math.floor(constraints.min / stepNum) * stepNum + offset; i <= constraints.max; i += stepNum) {\n                    if (i >= constraints.min) {\n                        values.push(i);\n                    }\n                }\n                return values.join(',');\n            }\n            // H\n            else {\n                return String(Math.floor(randomValue * (constraints.max - constraints.min + 1) + constraints.min));\n            }\n        });\n    }\n    /**\n     * Parse a sequence from a cron expression.\n     * @param {CronUnit} field - The field to parse.\n     * @param {string} val - The sequence to parse.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     */\n    static #parseSequence(field, val, constraints) {\n        const stack = [];\n        function handleResult(result, constraints) {\n            if (Array.isArray(result)) {\n                stack.push(...result);\n            }\n            else {\n                if (CronExpressionParser.#isValidConstraintChar(constraints, result)) {\n                    stack.push(result);\n                }\n                else {\n                    const v = parseInt(result.toString(), 10);\n                    const isValid = v >= constraints.min && v <= constraints.max;\n                    if (!isValid) {\n                        throw new Error(`Constraint error, got value ${result} expected range ${constraints.min}-${constraints.max}`);\n                    }\n                    stack.push(field === CronUnit.DayOfWeek ? v % 7 : result);\n                }\n            }\n        }\n        const atoms = val.split(',');\n        atoms.forEach((atom) => {\n            if (!(atom.length > 0)) {\n                throw new Error('Invalid list value format');\n            }\n            handleResult(CronExpressionParser.#parseRepeat(field, atom, constraints), constraints);\n        });\n        return stack;\n    }\n    /**\n     * Parse repeat from a cron expression.\n     * @param {CronUnit} field - The field to parse.\n     * @param {string} val - The repeat to parse.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     * @returns {(number | string)[]} The parsed repeat.\n     */\n    static #parseRepeat(field, val, constraints) {\n        const atoms = val.split('/');\n        if (atoms.length > 2) {\n            throw new Error(`Invalid repeat: ${val}`);\n        }\n        if (atoms.length === 2) {\n            if (!isNaN(parseInt(atoms[0], 10))) {\n                atoms[0] = `${atoms[0]}-${constraints.max}`;\n            }\n            return CronExpressionParser.#parseRange(field, atoms[0], parseInt(atoms[1], 10), constraints);\n        }\n        return CronExpressionParser.#parseRange(field, val, 1, constraints);\n    }\n    /**\n     * Validate a cron range.\n     * @param {number} min - The minimum value of the range.\n     * @param {number} max - The maximum value of the range.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     * @returns {void}\n     * @throws {Error} Throws an error if the range is invalid.\n     */\n    static #validateRange(min, max, constraints) {\n        const isValid = !isNaN(min) && !isNaN(max) && min >= constraints.min && max <= constraints.max;\n        if (!isValid) {\n            throw new Error(`Constraint error, got range ${min}-${max} expected range ${constraints.min}-${constraints.max}`);\n        }\n        if (min > max) {\n            throw new Error(`Invalid range: ${min}-${max}, min(${min}) > max(${max})`);\n        }\n    }\n    /**\n     * Validate a cron repeat interval.\n     * @param {number} repeatInterval - The repeat interval to validate.\n     * @private\n     * @returns {void}\n     * @throws {Error} Throws an error if the repeat interval is invalid.\n     */\n    static #validateRepeatInterval(repeatInterval) {\n        if (!(!isNaN(repeatInterval) && repeatInterval > 0)) {\n            throw new Error(`Constraint error, cannot repeat at every ${repeatInterval} time.`);\n        }\n    }\n    /**\n     * Create a range from a cron expression.\n     * @param {CronUnit} field - The field to parse.\n     * @param {number} min - The minimum value of the range.\n     * @param {number} max - The maximum value of the range.\n     * @param {number} repeatInterval - The repeat interval of the range.\n     * @private\n     * @returns {number[]} The created range.\n     */\n    static #createRange(field, min, max, repeatInterval) {\n        const stack = [];\n        if (field === CronUnit.DayOfWeek && max % 7 === 0) {\n            stack.push(0);\n        }\n        for (let index = min; index <= max; index += repeatInterval) {\n            if (stack.indexOf(index) === -1) {\n                stack.push(index);\n            }\n        }\n        return stack;\n    }\n    /**\n     * Parse a range from a cron expression.\n     * @param {CronUnit} field - The field to parse.\n     * @param {string} val - The range to parse.\n     * @param {number} repeatInterval - The repeat interval of the range.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @private\n     * @returns {number[] | string[] | number | string} The parsed range.\n     */\n    static #parseRange(field, val, repeatInterval, constraints) {\n        const atoms = val.split('-');\n        if (atoms.length <= 1) {\n            return isNaN(+val) ? val : +val;\n        }\n        const [min, max] = atoms.map((num) => parseInt(num, 10));\n        this.#validateRange(min, max, constraints);\n        this.#validateRepeatInterval(repeatInterval);\n        // Create range\n        return this.#createRange(field, min, max, repeatInterval);\n    }\n    /**\n     * Parse a cron expression.\n     * @param {string} val - The cron expression to parse.\n     * @private\n     * @returns {string} The parsed cron expression.\n     */\n    static #parseNthDay(val) {\n        const atoms = val.split('#');\n        if (atoms.length <= 1) {\n            return { dayOfWeek: atoms[0] };\n        }\n        const nthValue = +atoms[atoms.length - 1];\n        const matches = val.match(/([,-/])/);\n        if (matches !== null) {\n            throw new Error(`Constraint error, invalid dayOfWeek \\`#\\` and \\`${matches?.[0]}\\` special characters are incompatible`);\n        }\n        if (!(atoms.length <= 2 && !isNaN(nthValue) && nthValue >= 1 && nthValue <= 5)) {\n            throw new Error('Constraint error, invalid dayOfWeek occurrence number (#)');\n        }\n        return { dayOfWeek: atoms[0], nthDayOfWeek: nthValue };\n    }\n    /**\n     * Checks if a character is valid for a field.\n     * @param {CronConstraints} constraints - The constraints for the field.\n     * @param {string | number} value - The value to check.\n     * @private\n     * @returns {boolean} Whether the character is valid for the field.\n     */\n    static #isValidConstraintChar(constraints, value) {\n        return constraints.chars.some((char) => value.toString().includes(char));\n    }\n}\nexports.CronExpressionParser = CronExpressionParser;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronFileParser = void 0;\nconst CronExpressionParser_1 = require(\"./CronExpressionParser\");\n/**\n * Parser for crontab files that handles both synchronous and asynchronous operations.\n */\nclass CronFileParser {\n    /**\n     * Parse a crontab file asynchronously\n     * @param filePath Path to crontab file\n     * @returns Promise resolving to parse results\n     * @throws If file cannot be read\n     */\n    static async parseFile(filePath) {\n        const { readFile } = await Promise.resolve().then(() => __importStar(require('fs/promises')));\n        const data = await readFile(filePath, 'utf8');\n        return CronFileParser.#parseContent(data);\n    }\n    /**\n     * Parse a crontab file synchronously\n     * @param filePath Path to crontab file\n     * @returns Parse results\n     * @throws If file cannot be read\n     */\n    static parseFileSync(filePath) {\n        // eslint-disable-next-line @typescript-eslint/no-require-imports\n        const { readFileSync } = require('fs');\n        const data = readFileSync(filePath, 'utf8');\n        return CronFileParser.#parseContent(data);\n    }\n    /**\n     * Internal method to parse crontab file content\n     * @private\n     */\n    static #parseContent(data) {\n        const blocks = data.split('\\n');\n        const result = {\n            variables: {},\n            expressions: [],\n            errors: {},\n        };\n        for (const block of blocks) {\n            const entry = block.trim();\n            if (entry.length === 0 || entry.startsWith('#')) {\n                continue;\n            }\n            const variableMatch = entry.match(/^(.*)=(.*)$/);\n            if (variableMatch) {\n                const [, key, value] = variableMatch;\n                result.variables[key] = value.replace(/[\"']/g, ''); // Remove quotes\n                continue;\n            }\n            try {\n                const parsedEntry = CronFileParser.#parseEntry(entry);\n                result.expressions.push(parsedEntry.interval);\n            }\n            catch (err) {\n                result.errors[entry] = err;\n            }\n        }\n        return result;\n    }\n    /**\n     * Parse a single crontab entry\n     * @private\n     */\n    static #parseEntry(entry) {\n        const atoms = entry.split(' ');\n        return {\n            interval: CronExpressionParser_1.CronExpressionParser.parse(atoms.slice(0, 5).join(' ')),\n            command: atoms.slice(5, atoms.length),\n        };\n    }\n}\nexports.CronFileParser = CronFileParser;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CronFileParser = exports.CronExpressionParser = exports.CronExpression = exports.CronFieldCollection = exports.CronDate = void 0;\n/* istanbul ignore file */\nconst CronExpressionParser_1 = require(\"./CronExpressionParser\");\nvar CronDate_1 = require(\"./CronDate\");\nObject.defineProperty(exports, \"CronDate\", { enumerable: true, get: function () { return CronDate_1.CronDate; } });\nvar CronFieldCollection_1 = require(\"./CronFieldCollection\");\nObject.defineProperty(exports, \"CronFieldCollection\", { enumerable: true, get: function () { return CronFieldCollection_1.CronFieldCollection; } });\nvar CronExpression_1 = require(\"./CronExpression\");\nObject.defineProperty(exports, \"CronExpression\", { enumerable: true, get: function () { return CronExpression_1.CronExpression; } });\nvar CronExpressionParser_2 = require(\"./CronExpressionParser\");\nObject.defineProperty(exports, \"CronExpressionParser\", { enumerable: true, get: function () { return CronExpressionParser_2.CronExpressionParser; } });\nvar CronFileParser_1 = require(\"./CronFileParser\");\nObject.defineProperty(exports, \"CronFileParser\", { enumerable: true, get: function () { return CronFileParser_1.CronFileParser; } });\n__exportStar(require(\"./fields\"), exports);\nexports.default = CronExpressionParser_1.CronExpressionParser;\n", "import { resolve } from \"path\";\nimport { DEFAULT_WAKE_RETRY_AFTER_SEC, isJobAdmissionKillSwitchActive, isWakeAppDeferredResult, readPositiveIntegerEnv, } from \"@gencow/core\";\nimport { ensurePlatformRuntimeStateTable, getCurrentPlatformNodeId, getPlatformSlotActivity, } from \"./platform-active-slot\";\nexport const CRON_POLL_INTERVAL = 60_000;\nexport const CRON_CONCURRENCY = 5;\nexport const CRON_EXEC_TIMEOUT = 60_000;\nexport const CRON_MAX_JOBS_PER_POLL = 50;\nexport const CRON_MAX_WAKE_PER_POLL = 3;\nexport const CRON_DUE_PER_APP_PER_POLL = 10;\nexport const CRON_EMPTY_LOG_INTERVAL = 5;\nexport const CRON_CONSECUTIVE_FAIL_THRESHOLD = 5;\nexport const CRON_INFLIGHT_RETRY_DELAY_SEC = 120;\nexport const DEFAULT_CRON_MIN_INTERVAL_SECONDS = 15 * 60;\nexport const APP_MEMORY_EXCEEDED_STATUS = \"memory_exceeded\";\nexport const APP_MEMORY_EXCEEDED_CODE = \"APP_MEMORY_EXCEEDED\";\nexport const CRON_MEMORY_EXCEEDED_LAST_STATUS = \"blocked_memory_exceeded\";\nexport const APP_OWNER_ACCOUNT_HELD_CODE = \"APP_OWNER_ACCOUNT_HELD\";\nexport const CRON_OWNER_ACCOUNT_HELD_LAST_STATUS = \"blocked_owner_account_hold\";\nexport const APP_NO_BACKEND_CODE = \"APP_NO_BACKEND\";\nexport const CRON_NO_BACKEND_LAST_STATUS = \"blocked_no_backend\";\nexport class CronWakeDeferredError extends Error {\n    status;\n    retryAfterSec;\n    constructor(result) {\n        super(`Cron wake deferred (${result.status})`);\n        this.name = \"CronWakeDeferredError\";\n        this.status = result.status;\n        this.retryAfterSec = result.retryAfterSec || DEFAULT_WAKE_RETRY_AFTER_SEC;\n    }\n}\nexport function isCronWakeDeferredError(error) {\n    return error instanceof CronWakeDeferredError;\n}\nexport function calculateCronNextRun(schedule, currentDate = new Date()) {\n    try {\n        const { CronExpressionParser } = require(\"cron-parser\");\n        const interval = CronExpressionParser.parse(schedule, { currentDate });\n        return interval.next().toDate();\n    }\n    catch {\n        return new Date(currentDate.getTime() + 60_000);\n    }\n}\nexport function resolveCronMinimumIntervalSeconds(env = process.env) {\n    return readPositiveIntegerEnv(env, \"GENCOW_CRON_MIN_INTERVAL_SECONDS\") ?? DEFAULT_CRON_MIN_INTERVAL_SECONDS;\n}\nexport function calculateCronAdmissionDeferUntil(schedule, options = {}) {\n    const now = options.now ?? new Date();\n    const naturalNextRun = calculateCronNextRun(schedule, now);\n    const minimumNextRun = new Date(now.getTime() + resolveCronMinimumIntervalSeconds(options.env) * 1000);\n    return naturalNextRun.getTime() > minimumNextRun.getTime() ? naturalNextRun : minimumNextRun;\n}\nexport function shouldExecuteCronJob(appStatus) {\n    return appStatus === \"running\" || appStatus === \"idle\";\n}\nexport function splitCronExecutionJobs(jobs, getPort, maxWakePerPoll) {\n    const readyJobs = jobs.filter((job) => getPort(job.app_name));\n    const needWakeJobs = jobs.filter((job) => !getPort(job.app_name));\n    const wakeJobs = needWakeJobs.slice(0, maxWakePerPoll);\n    return {\n        readyJobs,\n        wakeJobs,\n        deferredCount: needWakeJobs.length - wakeJobs.length,\n        executeJobs: [...readyJobs, ...wakeJobs],\n    };\n}\nexport function resolveCronDuePerAppPerPoll(env = process.env) {\n    return (readPositiveIntegerEnv(env, \"GENCOW_CRON_DUE_PER_APP_PER_POLL\") ??\n        readPositiveIntegerEnv(env, \"GENCOW_CRON_DUE_PER_APP_PER_MINUTE\") ??\n        CRON_DUE_PER_APP_PER_POLL);\n}\nexport function limitCronDueJobsPerApp(jobs, maxPerApp) {\n    if (!Number.isInteger(maxPerApp) || maxPerApp <= 0) {\n        return { allowed: jobs, deferred: [] };\n    }\n    const counts = new Map();\n    const allowed = [];\n    const deferred = [];\n    for (const job of jobs) {\n        const nextCount = (counts.get(job.app_id) ?? 0) + 1;\n        counts.set(job.app_id, nextCount);\n        if (nextCount <= maxPerApp) {\n            allowed.push(job);\n        }\n        else {\n            deferred.push(job);\n        }\n    }\n    return { allowed, deferred };\n}\nexport function filterCronJobsByKillSwitch(jobs, env = process.env) {\n    const allowed = [];\n    const deferred = [];\n    for (const job of jobs) {\n        const paused = [\n            \"cron:claim\",\n            `cron:claim:app:${job.app_id}`,\n            `cron:claim:app-name:${job.app_name}`,\n            `cron:claim:job:${job.name}`,\n            `cron:claim:action:${job.action}`,\n        ].some((scope) => isJobAdmissionKillSwitchActive(env, scope));\n        if (paused) {\n            deferred.push(job);\n        }\n        else {\n            allowed.push(job);\n        }\n    }\n    return { allowed, deferred };\n}\nexport function buildCronDueJobsQuery(options = {}) {\n    const nodeFilter = options.nodeId ? \"\\n               AND a.node_id = $1\" : \"\";\n    const limit = options.limit ?? CRON_MAX_JOBS_PER_POLL;\n    return `SELECT cj.id, cj.app_id, cj.name, cj.schedule, cj.action,\n                    a.name AS app_name, a.status AS app_status, a.has_backend AS app_has_backend, a.port\n             FROM cron_jobs cj\n             JOIN apps a ON a.id = cj.app_id\n             WHERE cj.status = 'enabled'\n               AND cj.next_run_at <= NOW()\n               AND a.status IN ('running', 'idle')\n               AND a.has_backend = TRUE\n               AND a.owner_account_hold IS NULL${nodeFilter}\n             ORDER BY cj.next_run_at ASC\n             LIMIT ${limit}`;\n}\nexport async function markMemoryExceededCronJobs(params) {\n    const limit = Number.isInteger(params.limit) && params.limit > 0 ? params.limit : CRON_MAX_JOBS_PER_POLL;\n    const nodeFilter = params.nodeId ? \"\\n        AND a.node_id = $2\" : \"\";\n    const queryParams = params.nodeId\n        ? [APP_MEMORY_EXCEEDED_STATUS, params.nodeId]\n        : [APP_MEMORY_EXCEEDED_STATUS];\n    const jobs = (await params.rawSql(`SELECT cj.id, cj.name, cj.schedule, cj.action, a.name AS app_name\n       FROM cron_jobs cj\n       JOIN apps a ON a.id = cj.app_id\n      WHERE cj.status = 'enabled'\n        AND cj.next_run_at <= NOW()\n        AND a.status = $1${nodeFilter}\n      ORDER BY cj.next_run_at ASC\n      LIMIT ${limit}`, queryParams));\n    await Promise.all(jobs.map((job) => params.rawSql(`UPDATE cron_jobs\n            SET last_status = $1,\n                last_error = $2,\n                next_run_at = $3\n          WHERE id = $4`, [\n        CRON_MEMORY_EXCEEDED_LAST_STATUS,\n        APP_MEMORY_EXCEEDED_CODE,\n        calculateCronAdmissionDeferUntil(job.schedule, { env: params.env }),\n        job.id,\n    ])));\n    if (jobs.length > 0) {\n        params.log?.warn(`[cron] ${jobs.length} due job(s) blocked by memory_exceeded app status`);\n    }\n    return jobs.length;\n}\nexport async function markOwnerAccountHeldCronJobs(params) {\n    const limit = Number.isInteger(params.limit) && params.limit > 0 ? params.limit : CRON_MAX_JOBS_PER_POLL;\n    const nodeFilter = params.nodeId ? \"\\n        AND a.node_id = $1\" : \"\";\n    const queryParams = params.nodeId ? [params.nodeId] : undefined;\n    const jobs = (await params.rawSql(`SELECT cj.id, cj.name, cj.schedule, cj.action, a.name AS app_name, a.owner_account_hold\n       FROM cron_jobs cj\n       JOIN apps a ON a.id = cj.app_id\n      WHERE cj.status = 'enabled'\n        AND cj.next_run_at <= NOW()\n        AND a.owner_account_hold IS NOT NULL${nodeFilter}\n      ORDER BY cj.next_run_at ASC\n      LIMIT ${limit}`, queryParams));\n    await Promise.all(jobs.map((job) => params.rawSql(`UPDATE cron_jobs\n            SET last_status = $1,\n                last_error = $2,\n                next_run_at = $3\n          WHERE id = $4`, [\n        CRON_OWNER_ACCOUNT_HELD_LAST_STATUS,\n        APP_OWNER_ACCOUNT_HELD_CODE,\n        calculateCronAdmissionDeferUntil(job.schedule, { env: params.env }),\n        job.id,\n    ])));\n    if (jobs.length > 0) {\n        params.log?.warn(`[cron] ${jobs.length} due job(s) blocked by owner account hold`);\n    }\n    return jobs.length;\n}\nexport async function markNoBackendCronJobs(params) {\n    const limit = Number.isInteger(params.limit) && params.limit > 0 ? params.limit : CRON_MAX_JOBS_PER_POLL;\n    const nodeFilter = params.nodeId ? \"\\n        AND a.node_id = $1\" : \"\";\n    const queryParams = params.nodeId ? [params.nodeId] : undefined;\n    const jobs = (await params.rawSql(`SELECT cj.id, cj.name, cj.schedule, cj.action, a.name AS app_name\n       FROM cron_jobs cj\n       JOIN apps a ON a.id = cj.app_id\n      WHERE cj.status = 'enabled'\n        AND cj.next_run_at <= NOW()\n        AND a.has_backend = FALSE${nodeFilter}\n      ORDER BY cj.next_run_at ASC\n      LIMIT ${limit}`, queryParams));\n    await Promise.all(jobs.map((job) => params.rawSql(`UPDATE cron_jobs\n            SET last_status = $1,\n                last_error = $2,\n                next_run_at = $3\n          WHERE id = $4`, [\n        CRON_NO_BACKEND_LAST_STATUS,\n        APP_NO_BACKEND_CODE,\n        calculateCronAdmissionDeferUntil(job.schedule, { env: params.env }),\n        job.id,\n    ])));\n    if (jobs.length > 0) {\n        params.log?.warn(`[cron] ${jobs.length} due job(s) blocked by no-backend app`);\n    }\n    return jobs.length;\n}\nexport async function resolveCronAppPort(params) {\n    const log = params.log ?? console;\n    if (params.job.app_has_backend === false) {\n        throw new Error(`App \"${params.job.app_name}\" has no backend runtime`);\n    }\n    const currentPort = params.getPort(params.job.app_name);\n    if (params.job.app_status !== \"idle\" && currentPort) {\n        return currentPort;\n    }\n    const reason = params.job.app_status === \"idle\" ? \"idle\" : \"port not in memory\";\n    const label = params.job.app_name;\n    log.log(`[cron] ${label}: restoring (${reason})...`);\n    const wakeResult = await params.wakeApp(params.job.app_name);\n    let woke = wakeResult.ok;\n    if (!wakeResult.ok && isWakeAppDeferredResult(wakeResult)) {\n        log.warn(`[cron] ${label}: wake deferred (${wakeResult.status})`);\n        throw new CronWakeDeferredError(wakeResult);\n    }\n    if (!woke) {\n        log.warn(`[cron] ${label}: wakeApp failed \u2014 trying DB-based provision...`);\n        try {\n            const [appRow] = (await params.rawSql(`SELECT id, port FROM apps WHERE name = $1 AND status IN ('running','idle')`, [params.job.app_name]));\n            if (appRow) {\n                const dataDir = `/var/gencow/deployments/${params.job.app_name}`;\n                params.setAppMeta(params.job.app_name, { port: appRow.port, dataDir, appDbId: appRow.id });\n                await params.provisionApp(params.job.app_name, appRow.port, dataDir, appRow.id, true, \"wake\");\n                woke = true;\n                log.log(`[cron] ${label}: DB-based provision success`);\n            }\n        }\n        catch (provErr) {\n            log.error(`[cron] ${label}: DB-based provision failed:`, provErr.message);\n        }\n    }\n    if (!woke) {\n        throw new Error(`Failed to restore app (${reason})`);\n    }\n    const restoredPort = params.getPort(params.job.app_name) ?? (wakeResult.ok ? wakeResult.port : undefined);\n    if (!restoredPort) {\n        throw new Error(`App port not found after restore attempt (status: ${params.job.app_status})`);\n    }\n    return restoredPort;\n}\nexport async function executeCronJob(params) {\n    const log = params.log ?? console;\n    const fetchImpl = params.fetchImpl ?? fetch;\n    const cronExecTimeoutMs = params.cronExecTimeoutMs ?? CRON_EXEC_TIMEOUT;\n    const consecutiveFailThreshold = params.consecutiveFailThreshold ?? CRON_CONSECUTIVE_FAIL_THRESHOLD;\n    const start = Date.now();\n    const label = `${params.job.app_name}/${params.job.name}`;\n    try {\n        const port = await resolveCronAppPort({\n            job: params.job,\n            getPort: params.provisioner.getAppPort,\n            wakeApp: params.provisioner.wakeApp,\n            provisionApp: params.provisioner.provisionApp,\n            setAppMeta: params.provisioner.setAppMeta,\n            rawSql: params.rawSql,\n            log,\n        });\n        const cronToken = params.provisioner.generateCronToken(params.job.app_id, params.job.app_name);\n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), cronExecTimeoutMs);\n        try {\n            const res = await fetchImpl(`http://localhost:${port}/internal/cron/${params.job.action}`, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\",\n                    \"X-Cron-Token\": cronToken,\n                },\n                body: JSON.stringify({ action: params.job.action }),\n                signal: controller.signal,\n            });\n            clearTimeout(timeout);\n            const elapsed = ((Date.now() - start) / 1000).toFixed(1);\n            if (res.ok) {\n                const nextRun = calculateCronNextRun(params.job.schedule);\n                await params.rawSql(`UPDATE cron_jobs SET last_run_at = NOW(), last_status = 'success', last_error = NULL, next_run_at = $1 WHERE id = $2`, [nextRun, params.job.id]);\n                params\n                    .rawSql(`INSERT INTO cron_job_runs (cron_job_id, cron_name, action, status, duration_ms, started_at, completed_at) VALUES ($1, $2, $3, 'success', $4, $5, NOW())`, [\n                    params.job.id,\n                    params.job.name,\n                    params.job.action,\n                    Date.now() - start,\n                    new Date(start).toISOString(),\n                ])\n                    .catch(() => { });\n                params.failCounts.delete(params.job.app_name);\n                log.log(`[cron] ${label}: success (${elapsed}s)`);\n                return;\n            }\n            const body = await res.text().catch(() => \"\");\n            const nextRun = calculateCronNextRun(params.job.schedule);\n            await params.rawSql(`UPDATE cron_jobs SET last_run_at = NOW(), last_status = 'failed', last_error = $1, next_run_at = $2 WHERE id = $3`, [body.slice(0, 500), nextRun, params.job.id]);\n            params\n                .rawSql(`INSERT INTO cron_job_runs (cron_job_id, cron_name, action, status, error, duration_ms, started_at, completed_at) VALUES ($1, $2, $3, 'failed', $4, $5, $6, NOW())`, [\n                params.job.id,\n                params.job.name,\n                params.job.action,\n                body.slice(0, 500),\n                Date.now() - start,\n                new Date(start).toISOString(),\n            ])\n                .catch(() => { });\n            log.error(`[cron] ${label}: failed (${elapsed}s) \u2014 ${res.status}`);\n            params.failCounts.set(params.job.app_name, (params.failCounts.get(params.job.app_name) || 0) + 1);\n        }\n        catch (fetchErr) {\n            clearTimeout(timeout);\n            const elapsed = ((Date.now() - start) / 1000).toFixed(1);\n            const isTimeout = fetchErr.name === \"AbortError\";\n            const status = isTimeout ? \"timeout\" : \"failed\";\n            const errMsg = isTimeout ? `Timeout after ${cronExecTimeoutMs / 1000}s` : fetchErr.message;\n            const nextRun = calculateCronNextRun(params.job.schedule);\n            await params.rawSql(`UPDATE cron_jobs SET last_run_at = NOW(), last_status = $1, last_error = $2, next_run_at = $3 WHERE id = $4`, [status, errMsg.slice(0, 500), nextRun, params.job.id]);\n            params\n                .rawSql(`INSERT INTO cron_job_runs (cron_job_id, cron_name, action, status, error, duration_ms, started_at, completed_at) VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())`, [\n                params.job.id,\n                params.job.name,\n                params.job.action,\n                status,\n                errMsg.slice(0, 500),\n                Date.now() - start,\n                new Date(start).toISOString(),\n            ])\n                .catch(() => { });\n            log.error(`[cron] ${label}: ${status} (${elapsed}s) \u2014 ${errMsg}`);\n            params.failCounts.set(params.job.app_name, (params.failCounts.get(params.job.app_name) || 0) + 1);\n        }\n    }\n    catch (err) {\n        if (isCronWakeDeferredError(err)) {\n            await params\n                .rawSql(`UPDATE cron_jobs SET last_status = 'deferred', last_error = NULL, next_run_at = NOW() + make_interval(secs => $1) WHERE id = $2`, [err.retryAfterSec, params.job.id])\n                .catch(() => { });\n            log.warn(`[cron] ${label}: wake deferred (${err.status}), retry in ${err.retryAfterSec}s`);\n            return;\n        }\n        const elapsed = ((Date.now() - start) / 1000).toFixed(1);\n        const errMsg = err.message;\n        const nextRun = calculateCronNextRun(params.job.schedule);\n        try {\n            await params.rawSql(`UPDATE cron_jobs SET last_run_at = NOW(), last_status = 'failed', last_error = $1, next_run_at = $2 WHERE id = $3`, [errMsg.slice(0, 500), nextRun, params.job.id]);\n            params\n                .rawSql(`INSERT INTO cron_job_runs (cron_job_id, cron_name, action, status, error, duration_ms, started_at, completed_at) VALUES ($1, $2, $3, 'failed', $4, $5, $6, NOW())`, [\n                params.job.id,\n                params.job.name,\n                params.job.action,\n                errMsg.slice(0, 500),\n                Date.now() - start,\n                new Date(start).toISOString(),\n            ])\n                .catch(() => { });\n        }\n        catch {\n            /* ignore */\n        }\n        log.error(`[cron] ${label}: failed (${elapsed}s) \u2014 ${errMsg}`);\n        const failCount = (params.failCounts.get(params.job.app_name) || 0) + 1;\n        params.failCounts.set(params.job.app_name, failCount);\n        if (failCount >= consecutiveFailThreshold && params.job.app_status === \"running\") {\n            try {\n                await params.rawSql(`UPDATE apps SET status = 'crashed', status_updated_at = NOW() WHERE name = $1 AND status = 'running'`, [params.job.app_name]);\n                log.log(`[cron] ${params.job.app_name}: ${failCount} consecutive failures -> DB status corrected to \"crashed\"`);\n                params.failCounts.delete(params.job.app_name);\n            }\n            catch {\n                /* ignore */\n            }\n        }\n    }\n}\nexport async function registerPlatformCronScheduler(params) {\n    const log = params.log ?? console;\n    const importProvisioner = params.importProvisioner ?? ((path) => import(path));\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const provisioner = await importProvisioner(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n    const failCounts = new Map();\n    let emptyCount = 0;\n    let lastActiveState = null;\n    await ensurePlatformRuntimeStateTable(params.rawSql).catch((error) => {\n        log.warn(`[platform] Platform Cron Scheduler active-slot table init failed: ${error.message}`);\n    });\n    setIntervalImpl(async () => {\n        try {\n            const activity = await getPlatformSlotActivity({ rawSql: params.rawSql, logger: log });\n            if (!activity.active) {\n                if (lastActiveState !== false) {\n                    log.log(`[platform] Platform Cron Scheduler paused on inactive slot :${activity.currentPort} (active :${activity.activePort})`);\n                }\n                lastActiveState = false;\n                return;\n            }\n            if (lastActiveState === false) {\n                log.log(`[platform] Platform Cron Scheduler resumed on active slot :${activity.currentPort ?? \"unknown\"}`);\n            }\n            lastActiveState = true;\n            if (isJobAdmissionKillSwitchActive(process.env, \"cron:claim\")) {\n                log.warn(\"[cron] Scheduler paused by job admission kill switch\");\n                return;\n            }\n            const currentNodeId = getCurrentPlatformNodeId();\n            await markMemoryExceededCronJobs({\n                rawSql: params.rawSql,\n                nodeId: currentNodeId,\n                env: process.env,\n                log,\n            }).catch((error) => {\n                log.warn(`[cron] Failed to mark memory_exceeded jobs: ${error instanceof Error ? error.message : String(error)}`);\n            });\n            await markOwnerAccountHeldCronJobs({\n                rawSql: params.rawSql,\n                nodeId: currentNodeId,\n                env: process.env,\n                log,\n            }).catch((error) => {\n                log.warn(`[cron] Failed to mark owner-account-held jobs: ${error instanceof Error ? error.message : String(error)}`);\n            });\n            await markNoBackendCronJobs({\n                rawSql: params.rawSql,\n                nodeId: currentNodeId,\n                env: process.env,\n                log,\n            }).catch((error) => {\n                log.warn(`[cron] Failed to mark no-backend jobs: ${error instanceof Error ? error.message : String(error)}`);\n            });\n            const dueJobs = (await params.rawSql(buildCronDueJobsQuery({ nodeId: currentNodeId }), currentNodeId ? [currentNodeId] : undefined));\n            if (dueJobs.length === 0) {\n                emptyCount++;\n                if (emptyCount % CRON_EMPTY_LOG_INTERVAL === 0) {\n                    log.log(`[cron] No due jobs (${emptyCount} consecutive empty polls)`);\n                }\n                return;\n            }\n            emptyCount = 0;\n            const killSwitchLimit = filterCronJobsByKillSwitch(dueJobs, process.env);\n            if (killSwitchLimit.deferred.length > 0) {\n                await Promise.all(killSwitchLimit.deferred.map((job) => {\n                    const nextRun = calculateCronAdmissionDeferUntil(job.schedule, { env: process.env });\n                    return params.rawSql(`UPDATE cron_jobs\n                   SET last_status = 'deferred',\n                       last_error = 'job_admission_disabled',\n                       next_run_at = $1\n                 WHERE id = $2`, [nextRun, job.id]);\n                }));\n                log.warn(`[cron] ${killSwitchLimit.deferred.length} due job(s) deferred by kill switch`);\n            }\n            const dueLimit = limitCronDueJobsPerApp(killSwitchLimit.allowed, resolveCronDuePerAppPerPoll());\n            if (dueLimit.deferred.length > 0) {\n                await Promise.all(dueLimit.deferred.map((job) => {\n                    const nextRun = calculateCronAdmissionDeferUntil(job.schedule, { env: process.env });\n                    return params.rawSql(`UPDATE cron_jobs\n                   SET last_status = 'deferred',\n                       last_error = 'per_app_due_cap',\n                       next_run_at = $1\n                 WHERE id = $2`, [nextRun, job.id]);\n                }));\n                log.warn(`[cron] ${dueLimit.deferred.length} due job(s) deferred by per-app poll cap`);\n            }\n            const { readyJobs, wakeJobs, deferredCount, executeJobs } = splitCronExecutionJobs(dueLimit.allowed, provisioner.getAppPort, CRON_MAX_WAKE_PER_POLL);\n            const needWakeCount = wakeJobs.length + deferredCount;\n            if (deferredCount > 0) {\n                log.warn(`[cron] ${needWakeCount} apps need wake, processing ${wakeJobs.length} this cycle (${deferredCount} deferred)`);\n            }\n            log.log(`[cron] ${dueLimit.allowed.length} due - ${readyJobs.length} ready, ${wakeJobs.length} wake, ${deferredCount} deferred`);\n            if (executeJobs.length > 0) {\n                await Promise.all(executeJobs.map((job) => params.rawSql(`UPDATE cron_jobs\n                   SET last_status = 'running',\n                       last_error = NULL,\n                       next_run_at = NOW() + make_interval(secs => $1)\n                   WHERE id = $2`, [CRON_INFLIGHT_RETRY_DELAY_SEC, job.id])));\n                void (async () => {\n                    for (let i = 0; i < executeJobs.length; i += CRON_CONCURRENCY) {\n                        const batch = executeJobs.slice(i, i + CRON_CONCURRENCY);\n                        await Promise.allSettled(batch.map((job) => executeCronJob({\n                            job,\n                            rawSql: params.rawSql,\n                            provisioner,\n                            failCounts,\n                            fetchImpl: params.fetchImpl,\n                            log,\n                        })));\n                        if (i + CRON_CONCURRENCY < executeJobs.length) {\n                            await new Promise((r) => setTimeout(r, 1000));\n                        }\n                    }\n                })();\n            }\n        }\n        catch (err) {\n            log.error(`[cron] Scheduler error:`, err.message);\n        }\n    }, CRON_POLL_INTERVAL);\n    log.log(`[platform] Platform Cron Scheduler registered (${CRON_POLL_INTERVAL / 1000}s poll, concurrency ${CRON_CONCURRENCY}, timeout ${CRON_EXEC_TIMEOUT / 1000}s)`);\n}\n", "import { JobAdmissionError, getMsUntilNextMinute, isJobAdmissionKillSwitchActive, jsonByteLength, readNonNegativeIntegerEnv, readPositiveIntegerEnv, } from \"@gencow/core\";\nexport const DEFAULT_SCHEDULED_PENDING_PER_APP = 1_000;\nexport const DEFAULT_SCHEDULED_RUNNING_PER_APP = 50;\nexport const DEFAULT_SCHEDULED_CREATES_PER_MINUTE_PER_APP = 120;\nexport const DEFAULT_SCHEDULED_PAYLOAD_MAX_BYTES = 64 * 1024;\nexport const DEFAULT_SCHEDULED_MAX_FUTURE_DAYS = 30;\nexport const DEFAULT_SCHEDULED_DUE_PER_APP_PER_POLL = 20;\nfunction rows(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction numberFrom(value) {\n    const parsed = Number(value ?? 0);\n    return Number.isFinite(parsed) ? parsed : 0;\n}\nexport function resolveScheduledJobAdmissionPolicy(env = process.env) {\n    const maxFutureDays = readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_MAX_FUTURE_DAYS\") ?? DEFAULT_SCHEDULED_MAX_FUTURE_DAYS;\n    return {\n        pendingPerApp: readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_PENDING_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_PENDING_PER_APP\") ??\n            DEFAULT_SCHEDULED_PENDING_PER_APP,\n        runningPerApp: readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_RUNNING_PER_APP\") ?? DEFAULT_SCHEDULED_RUNNING_PER_APP,\n        createsPerMinutePerApp: readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_CREATES_PER_MINUTE_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_CREATES_PER_MINUTE_PER_APP\") ??\n            DEFAULT_SCHEDULED_CREATES_PER_MINUTE_PER_APP,\n        createsPerMinutePerAction: readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_CREATES_PER_MINUTE_PER_ACTION\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_CREATES_PER_MINUTE_PER_ACTION\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_CREATES_PER_MINUTE_PER_APP\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_CREATES_PER_MINUTE_PER_APP\") ??\n            DEFAULT_SCHEDULED_CREATES_PER_MINUTE_PER_APP,\n        payloadMaxBytes: readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_PAYLOAD_MAX_BYTES\") ??\n            readPositiveIntegerEnv(env, \"GENCOW_JOB_PAYLOAD_MAX_BYTES\") ??\n            DEFAULT_SCHEDULED_PAYLOAD_MAX_BYTES,\n        minDelayMs: readNonNegativeIntegerEnv(env, \"GENCOW_SCHEDULED_MIN_DELAY_MS\") ?? 0,\n        maxFutureMs: maxFutureDays * 24 * 60 * 60 * 1000,\n    };\n}\nexport function resolveScheduledDueMaxClaimsPerAppPerPoll(env = process.env, explicit) {\n    if (typeof explicit === \"number\" && Number.isInteger(explicit) && explicit > 0)\n        return explicit;\n    return (readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_DUE_PER_APP_PER_POLL\") ??\n        DEFAULT_SCHEDULED_DUE_PER_APP_PER_POLL);\n}\nexport function resolveScheduledMaxRunningPerApp(env = process.env, explicit) {\n    if (typeof explicit === \"number\" && Number.isInteger(explicit) && explicit > 0)\n        return explicit;\n    return readPositiveIntegerEnv(env, \"GENCOW_SCHEDULED_RUNNING_PER_APP\") ?? DEFAULT_SCHEDULED_RUNNING_PER_APP;\n}\nasync function getExistingScheduledJobStatus(rawSql, appId, jobId, action, dedupeKey) {\n    const existing = rows(await rawSql(`SELECT id, status\n         FROM scheduled_jobs\n        WHERE app_id = $1\n          AND (\n            id = $2\n            OR ($3::text IS NOT NULL AND action = $4 AND dedupe_key = $3)\n          )\n        ORDER BY CASE WHEN id = $2 THEN 0 ELSE 1 END\n        LIMIT 1`, [appId, jobId, dedupeKey ?? null, action]))[0];\n    return existing ?? null;\n}\nasync function getScheduledJobBacklog(rawSql, appId) {\n    const row = rows(await rawSql(`SELECT\n          COUNT(*) AS total_count,\n          COALESCE(SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END), 0)::int AS pending_count,\n          COALESCE(SUM(CASE WHEN status = 'running' THEN 1 ELSE 0 END), 0)::int AS running_count\n       FROM scheduled_jobs\n       WHERE app_id = $1`, [appId]))[0];\n    return {\n        pending: numberFrom(row?.pending_count),\n        running: numberFrom(row?.running_count),\n    };\n}\nasync function consumeScheduledRateBucket(options) {\n    const result = await options.rawSql(`INSERT INTO platform_job_admission_buckets (scope, bucket_start, count, updated_at)\n       VALUES ($1, date_trunc('minute', $2::timestamptz), 1, NOW())\n       ON CONFLICT (scope, bucket_start) DO UPDATE\n         SET count = platform_job_admission_buckets.count + 1,\n             updated_at = NOW()\n         WHERE platform_job_admission_buckets.count < $3\n       RETURNING count`, [options.scope, options.now.toISOString(), options.limit]);\n    return rows(result).length > 0;\n}\nasync function acquireScheduledCreateAdmissionLock(rawSql, appId) {\n    await rawSql(`SELECT pg_advisory_xact_lock(hashtextextended($1::text, 0))`, [\n        `scheduled:create:app:${appId}`,\n    ]);\n}\nfunction normalizeDedupeKey(value) {\n    if (typeof value !== \"string\")\n        return undefined;\n    const trimmed = value.trim();\n    if (trimmed.length === 0)\n        return undefined;\n    return trimmed.slice(0, 512);\n}\nfunction isScheduledCreateKillSwitchActive(env, options) {\n    return [\n        \"scheduled:create\",\n        `scheduled:create:app:${options.appId}`,\n        `scheduled:create:app-name:${options.appName}`,\n        `scheduled:create:action:${options.action}`,\n        `scheduled:create:app:${options.appId}:action:${options.action}`,\n        `scheduled:create:app-name:${options.appName}:action:${options.action}`,\n    ].some((scope) => isJobAdmissionKillSwitchActive(env, scope));\n}\nexport async function applyScheduledJobAdmission(options) {\n    const env = options.env ?? process.env;\n    const now = options.now?.() ?? new Date();\n    const policy = resolveScheduledJobAdmissionPolicy(env);\n    const dedupeKey = normalizeDedupeKey(options.dedupeKey);\n    if (isScheduledCreateKillSwitchActive(env, options)) {\n        throw new JobAdmissionError(\"job_admission_disabled\", \"scheduled job admission is disabled\");\n    }\n    const runAt = options.runAt instanceof Date ? options.runAt : new Date(options.runAt);\n    if (!Number.isFinite(runAt.getTime())) {\n        throw new JobAdmissionError(\"job_schedule_horizon_exceeded\", \"scheduled job runAt must be a valid date\");\n    }\n    const delayMs = runAt.getTime() - now.getTime();\n    if (policy.minDelayMs > 0 && delayMs >= 0 && delayMs < policy.minDelayMs) {\n        throw new JobAdmissionError(\"job_min_delay_violation\", \"scheduled job delay is below the platform minimum\", {\n            details: { minDelayMs: policy.minDelayMs, delayMs },\n        });\n    }\n    if (delayMs > policy.maxFutureMs) {\n        throw new JobAdmissionError(\"job_schedule_horizon_exceeded\", \"scheduled job runAt exceeds the platform horizon\", {\n            details: { maxFutureMs: policy.maxFutureMs, delayMs },\n        });\n    }\n    const payloadBytes = jsonByteLength({ action: options.action, args: options.args });\n    if (payloadBytes > policy.payloadMaxBytes) {\n        throw new JobAdmissionError(\"job_payload_too_large\", \"scheduled job payload is too large\", {\n            details: { limitBytes: policy.payloadMaxBytes, payloadBytes },\n        });\n    }\n    await acquireScheduledCreateAdmissionLock(options.rawSql, options.appId);\n    const existing = await getExistingScheduledJobStatus(options.rawSql, options.appId, options.jobId, options.action, dedupeKey);\n    if (existing?.status === \"running\") {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"scheduled job is already running\", {\n            status: 409,\n            details: { jobId: existing.id },\n        });\n    }\n    if (existing)\n        return { dedupeKey, existingJobId: existing.id };\n    const backlog = await getScheduledJobBacklog(options.rawSql, options.appId);\n    if (backlog.pending >= policy.pendingPerApp) {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"scheduled job pending backlog limit exceeded\", {\n            details: {\n                appId: options.appId,\n                appName: options.appName,\n                limit: policy.pendingPerApp,\n                pending: backlog.pending,\n            },\n        });\n    }\n    if (backlog.running >= policy.runningPerApp) {\n        throw new JobAdmissionError(\"job_backlog_limit_exceeded\", \"scheduled job running backlog limit exceeded\", {\n            details: {\n                appId: options.appId,\n                appName: options.appName,\n                limit: policy.runningPerApp,\n                running: backlog.running,\n            },\n        });\n    }\n    const consumed = await consumeScheduledRateBucket({\n        rawSql: options.rawSql,\n        scope: `scheduled:create:app:${options.appId}`,\n        limit: policy.createsPerMinutePerApp,\n        now,\n    });\n    if (!consumed) {\n        throw new JobAdmissionError(\"job_rate_limited\", \"scheduled job create rate limit exceeded\", {\n            retryAfterMs: getMsUntilNextMinute(now),\n            details: { appId: options.appId, appName: options.appName, limit: policy.createsPerMinutePerApp },\n        });\n    }\n    const actionConsumed = await consumeScheduledRateBucket({\n        rawSql: options.rawSql,\n        scope: `scheduled:create:app:${options.appId}:action:${options.action}`,\n        limit: policy.createsPerMinutePerAction,\n        now,\n    });\n    if (!actionConsumed) {\n        throw new JobAdmissionError(\"job_rate_limited\", \"scheduled job action create rate limit exceeded\", {\n            retryAfterMs: getMsUntilNextMinute(now),\n            details: {\n                appId: options.appId,\n                appName: options.appName,\n                action: options.action,\n                limit: policy.createsPerMinutePerAction,\n            },\n        });\n    }\n    void options\n        .rawSql(`DELETE FROM platform_job_admission_buckets WHERE updated_at < NOW() - INTERVAL '2 hours'`)\n        .catch(() => { });\n    return { dedupeKey };\n}\n", "import { DEFAULT_WAKE_RETRY_AFTER_SEC, isJobAdmissionKillSwitchActive, isWakeAppDeferredResult, } from \"@gencow/core\";\nimport { resolveScheduledDueMaxClaimsPerAppPerPoll, resolveScheduledMaxRunningPerApp, } from \"./job-admission-policy.js\";\nimport { getCurrentPlatformNodeId } from \"./platform-active-slot.js\";\nimport { extractWorkflowResumeArgs } from \"./workflow-resume-args.js\";\nconst WORKFLOW_RESUME_ACTION_PREFIX = \"__gencow.workflow.resume.\";\nconst WORKFLOW_RESUME_MAX_CONCURRENT_PER_APP = 8;\nconst WORKFLOW_RESUME_MAX_CONCURRENT_PER_ACTION = 3;\nexport const APP_MEMORY_EXCEEDED_STATUS = \"memory_exceeded\";\nexport const SCHEDULED_MEMORY_EXCEEDED_ERROR = \"blocked_memory_exceeded\";\nexport const SCHEDULED_MEMORY_EXCEEDED_DEFER_SECONDS = 300;\nexport const SCHEDULED_OWNER_ACCOUNT_HELD_ERROR = \"blocked_owner_account_hold\";\nexport const SCHEDULED_OWNER_ACCOUNT_HELD_DEFER_SECONDS = 3600;\nexport const SCHEDULED_NO_BACKEND_ERROR = \"blocked_no_backend\";\nexport const SCHEDULED_NO_BACKEND_DEFER_SECONDS = 3600;\nconst WORKFLOW_ID_FROM_ARGS_SQL = `\n  CASE\n    WHEN jsonb_typeof(args) = 'object' THEN args->>'workflowId'\n    WHEN jsonb_typeof(args) = 'string'\n      AND (args #>> '{}') ~ '^\\\\s*\\\\{'\n      THEN ((args #>> '{}')::jsonb)->>'workflowId'\n    ELSE NULL\n  END\n`;\nfunction errorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nfunction getRunningJobStaleAfterSec(cronExecTimeoutMs) {\n    return Math.max(60, Math.ceil(cronExecTimeoutMs / 1000) + 30);\n}\nfunction getWorkflowResumeDeliveryStaleAfterSec() {\n    return 45;\n}\nfunction getPositiveIntegerOption(value, fallback) {\n    if (typeof value !== \"number\" || !Number.isInteger(value) || value <= 0)\n        return fallback;\n    return value;\n}\nfunction parseScheduledJobArgs(args) {\n    try {\n        return JSON.parse(args || \"{}\");\n    }\n    catch {\n        return {};\n    }\n}\nfunction getWorkflowResumeId(action, args) {\n    if (!action.startsWith(WORKFLOW_RESUME_ACTION_PREFIX))\n        return null;\n    return extractWorkflowResumeArgs(args).workflowId ?? null;\n}\nasync function deleteCompletedScheduledJob(options, job, workflowId) {\n    if (!workflowId) {\n        await options.rawSql(`DELETE FROM scheduled_jobs WHERE id = $1`, [job.id]);\n        return;\n    }\n    await options.rawSql(`\n      DELETE FROM scheduled_jobs\n      WHERE app_id = $1\n        AND action = $2\n        AND (\n          id = $3\n          OR ${WORKFLOW_ID_FROM_ARGS_SQL} = $4\n        )\n    `, [job.app_id, job.action, job.id, workflowId]);\n}\nasync function handleScheduledJobFailure(options, job, appName, errorMsg) {\n    const logger = options.logger ?? console;\n    const fetchImpl = options.fetchImpl ?? fetch;\n    const nextRetry = job.retry_count + 1;\n    if (nextRetry < job.max_retries) {\n        const backoffSec = 10 * Math.pow(3, nextRetry);\n        await options.rawSql(`UPDATE scheduled_jobs\n             SET status = 'pending',\n                 retry_count = $1,\n                 error = $2,\n                 run_at = NOW() + make_interval(secs => $3),\n                 updated_at = NOW()\n             WHERE id = $4`, [nextRetry, errorMsg, backoffSec, job.id]);\n        logger.warn(`[scheduled] ${appName}/${job.action} (${job.id}): retry ${nextRetry}/${job.max_retries} in ${backoffSec}s \u2014 ${errorMsg}`);\n        return;\n    }\n    await options.rawSql(`UPDATE scheduled_jobs\n         SET status = 'failed',\n             error = $1,\n             retry_count = $2\n         WHERE id = $3`, [errorMsg, nextRetry, job.id]);\n    logger.error(`[scheduled] ${appName}/${job.action} (${job.id}): FAILED (${nextRetry} retries exhausted) \u2014 ${errorMsg}`);\n    if (!job.on_error_action)\n        return;\n    try {\n        const port = options.getPort(appName);\n        if (!port)\n            return;\n        const appRows = (await options.rawSql(`SELECT id, name FROM apps WHERE name = $1`, [\n            appName,\n        ]));\n        const appRow = appRows[0];\n        if (!appRow)\n            return;\n        const cronToken = options.generateCronToken(appRow.id, appRow.name);\n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), options.cronExecTimeoutMs);\n        try {\n            await fetchImpl(`http://localhost:${port}/internal/cron/${job.on_error_action}`, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\",\n                    \"X-Cron-Token\": cronToken,\n                },\n                body: JSON.stringify({\n                    action: job.on_error_action,\n                    args: { failedAction: job.action, failedJobId: job.id, error: errorMsg },\n                }),\n                signal: controller.signal,\n            });\n            logger.log(`[scheduled] ${appName}/${job.on_error_action}: onError handler invoked for ${job.action}`);\n        }\n        finally {\n            clearTimeout(timeout);\n        }\n    }\n    catch (error) {\n        logger.error(`[scheduled] ${appName}/${job.on_error_action}: onError handler failed:`, errorMessage(error));\n    }\n}\nasync function deferScheduledJobForWake(options, job, appName, result) {\n    const retryAfterSec = result?.retryAfterSec || DEFAULT_WAKE_RETRY_AFTER_SEC;\n    await options.rawSql(`UPDATE scheduled_jobs SET status = 'pending', run_at = NOW() + make_interval(secs => $1) WHERE id = $2`, [retryAfterSec, job.id]);\n    const reason = result ? result.status : \"boot_failed\";\n    (options.logger ?? console).warn(`[scheduled] ${appName}/${job.action}: wake deferred (${reason})`);\n}\nasync function deferScheduledJobForMemoryExceeded(options, job, appName) {\n    await options.rawSql(`UPDATE scheduled_jobs\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n      WHERE id = $3`, [SCHEDULED_MEMORY_EXCEEDED_ERROR, SCHEDULED_MEMORY_EXCEEDED_DEFER_SECONDS, job.id]);\n    (options.logger ?? console).warn(`[scheduled] ${appName}/${job.action}: blocked by memory_exceeded app status`);\n}\nasync function deferScheduledJobForNoBackend(options, job, appName) {\n    await options.rawSql(`UPDATE scheduled_jobs\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n      WHERE id = $3`, [SCHEDULED_NO_BACKEND_ERROR, SCHEDULED_NO_BACKEND_DEFER_SECONDS, job.id]);\n    (options.logger ?? console).warn(`[scheduled] ${appName}/${job.action}: blocked by no-backend app`);\n}\nexport async function deferMemoryExceededScheduledJobs(options) {\n    const retryAfterSec = getPositiveIntegerOption(options.retryAfterSec, SCHEDULED_MEMORY_EXCEEDED_DEFER_SECONDS);\n    const nodeHomeClause = options.nodeId ? \"AND a.node_id = $4\" : \"\";\n    const queryParams = options.nodeId\n        ? [SCHEDULED_MEMORY_EXCEEDED_ERROR, retryAfterSec, APP_MEMORY_EXCEEDED_STATUS, options.nodeId]\n        : [SCHEDULED_MEMORY_EXCEEDED_ERROR, retryAfterSec, APP_MEMORY_EXCEEDED_STATUS];\n    const rows = (await options.rawSql(`UPDATE scheduled_jobs sj\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n       FROM apps a\n      WHERE a.id = sj.app_id\n        AND sj.status = 'pending'\n        AND sj.run_at <= NOW()\n        AND a.status = $3\n        ${nodeHomeClause}\n      RETURNING TRUE AS blocked`, queryParams));\n    if (rows.length > 0) {\n        options.logger?.warn(`[scheduled] ${rows.length} due job(s) blocked by memory_exceeded app status`);\n    }\n    return rows.length;\n}\nexport async function deferNoBackendScheduledJobs(options) {\n    const retryAfterSec = getPositiveIntegerOption(options.retryAfterSec, SCHEDULED_NO_BACKEND_DEFER_SECONDS);\n    const nodeHomeClause = options.nodeId ? \"AND a.node_id = $3\" : \"\";\n    const queryParams = options.nodeId\n        ? [SCHEDULED_NO_BACKEND_ERROR, retryAfterSec, options.nodeId]\n        : [SCHEDULED_NO_BACKEND_ERROR, retryAfterSec];\n    const rows = (await options.rawSql(`UPDATE scheduled_jobs sj\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n       FROM apps a\n      WHERE a.id = sj.app_id\n        AND sj.status = 'pending'\n        AND sj.run_at <= NOW()\n        AND a.has_backend = FALSE\n        ${nodeHomeClause}\n      RETURNING TRUE AS blocked`, queryParams));\n    if (rows.length > 0) {\n        options.logger?.warn(`[scheduled] ${rows.length} due job(s) blocked by no-backend app`);\n    }\n    return rows.length;\n}\nasync function deferScheduledJobForOwnerAccountHold(options, job, appName, hold) {\n    await options.rawSql(`UPDATE scheduled_jobs\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n      WHERE id = $3`, [SCHEDULED_OWNER_ACCOUNT_HELD_ERROR, SCHEDULED_OWNER_ACCOUNT_HELD_DEFER_SECONDS, job.id]);\n    (options.logger ?? console).warn(`[scheduled] ${appName}/${job.action}: blocked by owner account hold (${hold})`);\n}\nexport async function deferOwnerAccountHeldScheduledJobs(options) {\n    const retryAfterSec = getPositiveIntegerOption(options.retryAfterSec, SCHEDULED_OWNER_ACCOUNT_HELD_DEFER_SECONDS);\n    const nodeHomeClause = options.nodeId ? \"AND a.node_id = $3\" : \"\";\n    const queryParams = options.nodeId\n        ? [SCHEDULED_OWNER_ACCOUNT_HELD_ERROR, retryAfterSec, options.nodeId]\n        : [SCHEDULED_OWNER_ACCOUNT_HELD_ERROR, retryAfterSec];\n    const rows = (await options.rawSql(`UPDATE scheduled_jobs sj\n        SET status = 'pending',\n            error = $1,\n            run_at = NOW() + make_interval(secs => $2),\n            updated_at = NOW()\n       FROM apps a\n      WHERE a.id = sj.app_id\n        AND sj.status = 'pending'\n        AND sj.run_at <= NOW()\n        AND a.owner_account_hold IS NOT NULL\n        ${nodeHomeClause}\n      RETURNING TRUE AS blocked`, queryParams));\n    if (rows.length > 0) {\n        options.logger?.warn(`[scheduled] ${rows.length} due job(s) blocked by owner account hold`);\n    }\n    return rows.length;\n}\nasync function tryDbBasedScheduledProvision(options, appRow) {\n    const logger = options.logger ?? console;\n    if (!options.provisionApp || !options.setAppMeta)\n        return null;\n    try {\n        const rows = (await options.rawSql(`SELECT id, port FROM apps WHERE name = $1 AND status IN ('running','idle') AND has_backend = TRUE AND owner_account_hold IS NULL`, [appRow.name]));\n        const row = rows[0];\n        if (!row)\n            return null;\n        const dataDir = `/var/gencow/deployments/${appRow.name}`;\n        options.setAppMeta(appRow.name, { port: row.port, dataDir, appDbId: row.id });\n        await options.provisionApp(appRow.name, row.port, dataDir, row.id, true, \"wake\");\n        logger.log(`[scheduled] ${appRow.name}: DB-based provision success`);\n        return options.getPort(appRow.name) ?? row.port;\n    }\n    catch (error) {\n        logger.error(`[scheduled] ${appRow.name}: DB-based provision failed:`, errorMessage(error));\n        return null;\n    }\n}\nasync function executeClaimedScheduledJob(options, job) {\n    const logger = options.logger ?? console;\n    const fetchImpl = options.fetchImpl ?? fetch;\n    const appRows = (await options.rawSql(`SELECT id, name, port, status, has_backend AS \"hasBackend\" FROM apps WHERE id = $1`, [job.app_id]));\n    const appRow = appRows[0];\n    if (!appRow) {\n        await options.rawSql(`UPDATE scheduled_jobs SET status = 'failed', error = 'App not found' WHERE id = $1`, [job.id]);\n        return false;\n    }\n    if (appRow.status === APP_MEMORY_EXCEEDED_STATUS) {\n        await deferScheduledJobForMemoryExceeded(options, job, appRow.name);\n        return false;\n    }\n    if (appRow.hasBackend === false) {\n        await deferScheduledJobForNoBackend(options, job, appRow.name);\n        return false;\n    }\n    const holdRows = (await options.rawSql(`SELECT owner_account_hold, owner_account_hold_reason FROM apps WHERE id = $1`, [job.app_id]));\n    const hold = holdRows[0]?.owner_account_hold;\n    if (hold) {\n        await deferScheduledJobForOwnerAccountHold(options, job, appRow.name, hold);\n        return false;\n    }\n    try {\n        let port = options.getPort(appRow.name);\n        if (!port || appRow.status === \"idle\") {\n            const wakeResult = await options.wakeApp(appRow.name);\n            if (!wakeResult.ok) {\n                if (!isWakeAppDeferredResult(wakeResult)) {\n                    logger.warn(`[scheduled] ${appRow.name}: wakeApp failed \u2014 trying DB-based provision...`);\n                    port = await tryDbBasedScheduledProvision(options, appRow);\n                    if (!port) {\n                        await deferScheduledJobForWake(options, job, appRow.name);\n                        return false;\n                    }\n                }\n                else {\n                    await deferScheduledJobForWake(options, job, appRow.name, wakeResult);\n                    return false;\n                }\n            }\n            else {\n                port = options.getPort(appRow.name) ?? wakeResult.port;\n            }\n        }\n        if (!port) {\n            await deferScheduledJobForWake(options, job, appRow.name);\n            return false;\n        }\n        const cronToken = options.generateCronToken(appRow.id, appRow.name);\n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), options.cronExecTimeoutMs);\n        const parsedArgs = parseScheduledJobArgs(job.args);\n        const workflowId = getWorkflowResumeId(job.action, parsedArgs);\n        try {\n            const res = await fetchImpl(`http://localhost:${port}/internal/cron/${job.action}`, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\",\n                    \"X-Cron-Token\": cronToken,\n                },\n                body: JSON.stringify({ action: job.action, args: parsedArgs }),\n                signal: controller.signal,\n            });\n            clearTimeout(timeout);\n            if (res.ok) {\n                await deleteCompletedScheduledJob(options, job, workflowId);\n                logger.log(`[scheduled] ${appRow.name}/${job.action} (${job.id}): completed \u2713`);\n                return true;\n            }\n            const body = await res.text().catch(() => \"\");\n            await handleScheduledJobFailure(options, job, appRow.name, body.slice(0, 500));\n            return false;\n        }\n        catch (error) {\n            clearTimeout(timeout);\n            const msg = error instanceof Error && error.name === \"AbortError\"\n                ? `Timeout after ${options.cronExecTimeoutMs / 1000}s`\n                : errorMessage(error);\n            await handleScheduledJobFailure(options, job, appRow.name, msg.slice(0, 500));\n            return false;\n        }\n    }\n    catch (error) {\n        const msg = errorMessage(error).slice(0, 500);\n        logger.error(`[scheduled] ${appRow.name}/${job.action}: unexpected error:`, msg);\n        await options\n            .rawSql(`UPDATE scheduled_jobs SET status = 'failed', error = $1 WHERE id = $2`, [msg, job.id])\n            .catch(() => { });\n        return false;\n    }\n}\nexport async function processScheduledJobsPoll(options) {\n    const logger = options.logger ?? console;\n    const maxJobsPerPoll = options.maxJobsPerPoll ?? 20;\n    const workflowResumeMaxConcurrentPerApp = getPositiveIntegerOption(options.workflowResumeMaxConcurrentPerApp, WORKFLOW_RESUME_MAX_CONCURRENT_PER_APP);\n    const workflowResumeMaxConcurrentPerAction = getPositiveIntegerOption(options.workflowResumeMaxConcurrentPerAction, WORKFLOW_RESUME_MAX_CONCURRENT_PER_ACTION);\n    const env = options.env ?? process.env;\n    const scheduledDueMaxClaimsPerAppPerPoll = resolveScheduledDueMaxClaimsPerAppPerPoll(env, options.scheduledDueMaxClaimsPerAppPerPoll);\n    const scheduledMaxRunningPerApp = resolveScheduledMaxRunningPerApp(env, options.scheduledMaxRunningPerApp);\n    const runningJobStaleAfterSec = getRunningJobStaleAfterSec(options.cronExecTimeoutMs);\n    const workflowResumeDeliveryStaleAfterSec = getWorkflowResumeDeliveryStaleAfterSec();\n    const currentNodeId = getCurrentPlatformNodeId(env);\n    try {\n        if (isJobAdmissionKillSwitchActive(env, \"scheduled:claim\")) {\n            logger.warn(\"[scheduled] Poll paused by job admission kill switch\");\n            return { claimed: 0, executed: 0 };\n        }\n        await options\n            .rawSql(`\n            UPDATE scheduled_jobs\n            SET status = 'pending',\n                run_at = NOW() + INTERVAL '5 seconds',\n                updated_at = NOW()\n            WHERE status = 'running'\n              AND action LIKE '${WORKFLOW_RESUME_ACTION_PREFIX}%'\n              AND updated_at < NOW() - make_interval(secs => $1)\n        `, [workflowResumeDeliveryStaleAfterSec])\n            .catch(() => { });\n        await options\n            .rawSql(`\n            UPDATE scheduled_jobs\n            SET status = 'pending',\n                retry_count = retry_count + 1,\n                run_at = NOW() + INTERVAL '10 seconds',\n                updated_at = NOW()\n            WHERE status = 'running'\n              AND updated_at < NOW() - make_interval(secs => $1)\n              AND retry_count < max_retries\n        `, [runningJobStaleAfterSec])\n            .catch(() => { });\n        await options\n            .rawSql(`\n            DELETE FROM scheduled_jobs\n            WHERE (status = 'failed' AND created_at < NOW() - INTERVAL '7 days')\n               OR (\n                 status = 'running'\n                 AND retry_count >= max_retries\n                 AND updated_at < NOW() - make_interval(secs => $1)\n               )\n        `, [runningJobStaleAfterSec])\n            .catch(() => { });\n        void options\n            .rawSql(`DELETE FROM cron_job_runs WHERE started_at < NOW() - INTERVAL '7 days'`)\n            .catch(() => { });\n        await deferMemoryExceededScheduledJobs({\n            rawSql: options.rawSql,\n            nodeId: currentNodeId,\n            logger,\n        }).catch(() => { });\n        await deferOwnerAccountHeldScheduledJobs({\n            rawSql: options.rawSql,\n            nodeId: currentNodeId,\n            logger,\n        }).catch(() => { });\n        await deferNoBackendScheduledJobs({\n            rawSql: options.rawSql,\n            nodeId: currentNodeId,\n            logger,\n        }).catch(() => { });\n        let claimed = 0;\n        let executed = 0;\n        let deferredDueLimited = 0;\n        const executions = [];\n        const claimsByApp = new Map();\n        const dueLimitedAppIds = new Set();\n        for (let i = 0; i < maxJobsPerPoll; i += 1) {\n            const excludedAppIds = Array.from(dueLimitedAppIds).filter(Number.isFinite);\n            const excludedAppClause = excludedAppIds.length > 0 ? `AND sj2.app_id NOT IN (${excludedAppIds.join(\", \")})` : \"\";\n            const nodeHomeClause = currentNodeId ? \"AND a.node_id = $1\" : \"\";\n            const dueJobs = (await options.rawSql(`\n            UPDATE scheduled_jobs sj\n            SET status = 'running', updated_at = NOW()\n            FROM (\n                SELECT sj2.id\n                FROM scheduled_jobs sj2\n                JOIN apps a ON a.id = sj2.app_id\n                WHERE sj2.status = 'pending'\n                  AND sj2.run_at <= NOW()\n                  AND a.status IN ('running', 'idle')\n                  AND a.has_backend = TRUE\n                  AND a.owner_account_hold IS NULL\n                  ${nodeHomeClause}\n                  ${excludedAppClause}\n                  AND (\n                    SELECT COUNT(*)\n                    FROM scheduled_jobs running\n                    WHERE running.app_id = sj2.app_id\n                      AND running.status = 'running'\n                  ) < ${scheduledMaxRunningPerApp}\n                  AND NOT (\n                    sj2.action LIKE '${WORKFLOW_RESUME_ACTION_PREFIX}%'\n                    AND (\n                      SELECT COUNT(*)\n                      FROM scheduled_jobs running\n                      WHERE running.app_id = sj2.app_id\n                        AND running.action LIKE '${WORKFLOW_RESUME_ACTION_PREFIX}%'\n                        AND running.status = 'running'\n                    ) >= ${workflowResumeMaxConcurrentPerApp}\n                  )\n                  AND NOT (\n                    sj2.action LIKE '${WORKFLOW_RESUME_ACTION_PREFIX}%'\n                    AND (\n                      SELECT COUNT(*)\n                      FROM scheduled_jobs running\n                      WHERE running.app_id = sj2.app_id\n                        AND running.action = sj2.action\n                        AND running.status = 'running'\n                    ) >= ${workflowResumeMaxConcurrentPerAction}\n                  )\n                ORDER BY sj2.run_at ASC\n                LIMIT 1\n                FOR UPDATE OF sj2 SKIP LOCKED\n            ) sub\n            WHERE sj.id = sub.id\n            RETURNING sj.id, sj.app_id, sj.action, sj.args::text, sj.on_error_action, sj.retry_count, sj.max_retries\n        `, currentNodeId ? [currentNodeId] : undefined));\n            const job = dueJobs?.[0];\n            if (!job)\n                break;\n            claimed += 1;\n            const nextClaimCount = (claimsByApp.get(job.app_id) ?? 0) + 1;\n            claimsByApp.set(job.app_id, nextClaimCount);\n            if (nextClaimCount >= scheduledDueMaxClaimsPerAppPerPoll) {\n                dueLimitedAppIds.add(job.app_id);\n            }\n            executions.push(() => executeClaimedScheduledJob(options, job));\n        }\n        if (dueLimitedAppIds.size > 0) {\n            const appIds = Array.from(dueLimitedAppIds).filter(Number.isFinite);\n            if (appIds.length > 0) {\n                const dueLimitedRows = (await options.rawSql(`SELECT COUNT(*)::int AS c\n             FROM scheduled_jobs\n             WHERE status = 'pending'\n               AND run_at <= NOW()\n               AND app_id IN (${appIds.join(\", \")})`));\n                deferredDueLimited = Number(dueLimitedRows[0]?.c ?? 0);\n            }\n        }\n        if (executions.length > 0) {\n            const results = await Promise.all(executions.map((execute) => execute()));\n            executed = results.filter(Boolean).length;\n        }\n        if (executed > 0) {\n            logger.log(`[scheduled] Poll \u2014 ${executed} job(s) executed`);\n        }\n        return deferredDueLimited > 0 ? { claimed, executed, deferredDueLimited } : { claimed, executed };\n    }\n    catch (error) {\n        logger.error(`[scheduled] Poller error:`, errorMessage(error));\n        return { claimed: 0, executed: 0 };\n    }\n}\n", "import { resolve } from \"path\";\nimport { buildJobAdmissionErrorBody, isJobAdmissionError, } from \"@gencow/core\";\nimport { ensurePlatformRuntimeStateTable, getPlatformSlotActivity } from \"./platform-active-slot\";\nimport { processScheduledJobsPoll } from \"./scheduled-jobs-poller\";\nimport { applyScheduledJobAdmission } from \"./job-admission-policy\";\nimport { createSingleFlightWake } from \"./wake-signal/single-flight-wake\";\nimport { GENCOW_PLATFORM_WAKE_CHANNEL, buildWakeNotifySql } from \"./wake-signal/wake-signal-types\";\nexport const SCHED_POLL_INTERVAL = 10_000;\nexport const SCHED_MIN_POLL_INTERVAL = 1_000;\nexport const SCHED_MAX_POLL_INTERVAL = 300_000;\nexport const SCHED_MAX_JOBS_PER_POLL = 20;\nexport const SCHED_POLL_INTERVAL_ENV = \"GENCOW_SCHEDULED_JOBS_POLL_INTERVAL_MS\";\nfunction errorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nexport function validateSchedulerPersistBody(body) {\n    return body.appName && body.id && body.action && body.runAt ? null : \"appName, id, action, runAt required\";\n}\nexport function validateSchedulerCancelBody(body) {\n    return body.appName && body.id ? null : \"appName and id required\";\n}\nfunction normalizeSchedulerArgs(args) {\n    if (typeof args !== \"string\")\n        return args ?? {};\n    try {\n        return JSON.parse(args);\n    }\n    catch {\n        return args;\n    }\n}\nfunction clampPollIntervalMs(value) {\n    return Math.min(SCHED_MAX_POLL_INTERVAL, Math.max(SCHED_MIN_POLL_INTERVAL, value));\n}\nexport function resolveScheduledJobsPollIntervalMs(env, override) {\n    if (typeof override === \"number\" && Number.isFinite(override) && override > 0) {\n        return override;\n    }\n    const rawValue = env?.[SCHED_POLL_INTERVAL_ENV];\n    if (!rawValue)\n        return SCHED_POLL_INTERVAL;\n    const parsedValue = Number(rawValue);\n    if (!Number.isInteger(parsedValue) || parsedValue <= 0)\n        return SCHED_POLL_INTERVAL;\n    return clampPollIntervalMs(parsedValue);\n}\nfunction resolveRunAtTimestampMs(value) {\n    if (value instanceof Date) {\n        const timestamp = value.getTime();\n        return Number.isFinite(timestamp) ? timestamp : null;\n    }\n    if (typeof value === \"string\" || typeof value === \"number\") {\n        const timestamp = new Date(value).getTime();\n        return Number.isFinite(timestamp) ? timestamp : null;\n    }\n    return null;\n}\nasync function resolveSchedulerAppId(rawSql, appName) {\n    const appRows = (await rawSql(`SELECT id FROM apps WHERE name = $1`, [appName]));\n    return appRows[0]?.id ?? null;\n}\nasync function loadSchedulerAppOwnerAccountHold(rawSql, appId) {\n    const rows = (await rawSql(`SELECT owner_account_hold, owner_account_hold_reason FROM apps WHERE id = $1`, [appId]));\n    const row = rows[0];\n    return row?.owner_account_hold ? row : null;\n}\nasync function runRawSqlTransaction(rawSql, callback) {\n    if (rawSql.transaction) {\n        return rawSql.transaction(callback);\n    }\n    return callback(rawSql);\n}\nasync function notifySchedulerWake(rawSql) {\n    const statement = buildWakeNotifySql({\n        kind: \"scheduler\",\n        defaultChannel: GENCOW_PLATFORM_WAKE_CHANNEL,\n    });\n    await rawSql(statement.query, statement.params);\n}\nasync function getNextScheduledRunAtMs(rawSql) {\n    const rows = (await rawSql(`\n      SELECT MIN(sj.run_at) AS next_run_at\n      FROM scheduled_jobs sj\n      JOIN apps a ON a.id = sj.app_id\n      WHERE sj.status = 'pending'\n        AND sj.run_at > NOW()\n        AND a.status IN ('running', 'idle')\n        AND a.owner_account_hold IS NULL\n    `));\n    return resolveRunAtTimestampMs(rows[0]?.next_run_at);\n}\nasync function upsertScheduledJob(params) {\n    if (params.existingJobId) {\n        const updated = (await params.rawSql(`UPDATE scheduled_jobs\n          SET action = $3,\n              args = $4::jsonb,\n              run_at = $5,\n              on_error_action = $6,\n              status = 'pending',\n              retry_count = 0,\n              error = NULL,\n              dedupe_key = $7,\n              updated_at = NOW()\n        WHERE id = $1\n          AND app_id = $2\n          AND status <> 'running'\n        RETURNING id`, [\n            params.existingJobId,\n            params.appId,\n            params.body.action,\n            params.normalizedArgs,\n            params.body.runAt,\n            params.body.onErrorAction ?? null,\n            params.dedupeKey ?? null,\n        ]));\n        return updated[0]?.id ?? null;\n    }\n    const inserted = (await params.rawSql(`INSERT INTO scheduled_jobs (id, app_id, action, args, run_at, on_error_action, dedupe_key)\n               VALUES ($1, $2, $3, $4::jsonb, $5, $6, $7)\n               ON CONFLICT (id) DO UPDATE SET\n                  action = EXCLUDED.action,\n                  args = EXCLUDED.args,\n                  run_at = EXCLUDED.run_at,\n                  on_error_action = EXCLUDED.on_error_action,\n                  dedupe_key = EXCLUDED.dedupe_key,\n                  status = 'pending',\n                  retry_count = 0,\n                  error = NULL,\n                  updated_at = NOW()\n               WHERE scheduled_jobs.app_id = EXCLUDED.app_id\n                 AND scheduled_jobs.status <> 'running'\n               RETURNING id`, [\n        params.body.id,\n        params.appId,\n        params.body.action,\n        params.normalizedArgs,\n        params.body.runAt,\n        params.body.onErrorAction ?? null,\n        params.dedupeKey ?? null,\n    ]));\n    return inserted[0]?.id ?? null;\n}\nexport async function persistScheduledJob(params) {\n    const logger = params.logger ?? console;\n    const validationError = validateSchedulerPersistBody(params.body);\n    if (validationError) {\n        return { status: 400, body: { error: validationError } };\n    }\n    if (params.ensureActivePlatform && !(await params.ensureActivePlatform())) {\n        return { status: 503, body: { error: \"Inactive platform slot\" } };\n    }\n    const appId = await resolveSchedulerAppId(params.rawSql, params.body.appName);\n    if (!appId) {\n        return { status: 404, body: { error: \"App not found\" } };\n    }\n    const expectedToken = params.generateInternalToken(appId, params.body.appName);\n    if (params.token !== expectedToken) {\n        logger.warn(`[scheduler] persist: invalid token for app ${params.body.appName}`);\n        return { status: 403, body: { error: \"Invalid token\" } };\n    }\n    const hold = await loadSchedulerAppOwnerAccountHold(params.rawSql, appId);\n    if (hold?.owner_account_hold) {\n        logger.warn(`[scheduler] persist: blocked ${params.body.appName}/${params.body.action} by owner account hold`);\n        return {\n            status: 423,\n            body: {\n                error: \"Scheduled job creation is locked because the owner account is not active.\",\n                code: \"APP_OWNER_ACCOUNT_HELD\",\n                ownerAccountHold: hold.owner_account_hold,\n                ...(hold.owner_account_hold_reason ? { reason: hold.owner_account_hold_reason } : {}),\n            },\n        };\n    }\n    const normalizedArgs = normalizeSchedulerArgs(params.body.args);\n    let persistedJobId = null;\n    try {\n        persistedJobId = await runRawSqlTransaction(params.rawSql, async (rawSql) => {\n            const decision = await applyScheduledJobAdmission({\n                rawSql,\n                appId,\n                appName: params.body.appName,\n                jobId: params.body.id,\n                action: params.body.action,\n                args: normalizedArgs,\n                runAt: params.body.runAt,\n                dedupeKey: params.body.dedupeKey,\n                env: params.env,\n                now: params.now,\n            });\n            const upsertedJobId = await upsertScheduledJob({\n                rawSql,\n                appId,\n                body: params.body,\n                normalizedArgs,\n                existingJobId: decision.existingJobId,\n                dedupeKey: decision.dedupeKey,\n            });\n            if (upsertedJobId) {\n                await notifySchedulerWake(rawSql).catch((error) => {\n                    logger.warn(`[scheduler] wake notify failed; fallback poll will repair: ${errorMessage(error)}`);\n                });\n            }\n            return upsertedJobId;\n        });\n    }\n    catch (error) {\n        if (isJobAdmissionError(error)) {\n            logger.warn(`[scheduler] persist: rejected ${params.body.appName}/${params.body.action} (${error.code})`);\n            return { status: error.status, body: buildJobAdmissionErrorBody(error) };\n        }\n        throw error;\n    }\n    if (!persistedJobId) {\n        return { status: 409, body: { error: \"Scheduled job already running or id belongs to another app\" } };\n    }\n    return { status: 200, body: { ok: true, id: persistedJobId } };\n}\nexport async function cancelScheduledJob(params) {\n    const logger = params.logger ?? console;\n    const validationError = validateSchedulerCancelBody(params.body);\n    if (validationError) {\n        return { status: 400, body: { error: validationError } };\n    }\n    if (params.ensureActivePlatform && !(await params.ensureActivePlatform())) {\n        return { status: 503, body: { error: \"Inactive platform slot\" } };\n    }\n    const appId = await resolveSchedulerAppId(params.rawSql, params.body.appName);\n    if (!appId) {\n        return { status: 404, body: { error: \"App not found\" } };\n    }\n    const expectedToken = params.generateInternalToken(appId, params.body.appName);\n    if (params.token !== expectedToken) {\n        logger.warn(`[scheduler] cancel: invalid token for app ${params.body.appName}`);\n        return { status: 403, body: { error: \"Invalid token\" } };\n    }\n    const deleted = (await params.rawSql(`DELETE FROM scheduled_jobs WHERE id = $1 AND app_id = $2 RETURNING id`, [params.body.id, appId]));\n    return { status: 200, body: { ok: true, deleted: deleted.length > 0 } };\n}\nexport async function registerScheduledJobsPoller(params) {\n    const logger = params.logger ?? console;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const clearTimeoutImpl = params.clearTimeoutImpl ?? clearTimeout;\n    const now = params.now ?? (() => new Date());\n    const pollIntervalMs = resolveScheduledJobsPollIntervalMs(params.env ?? process.env, params.pollIntervalMs);\n    const maxJobsPerPoll = params.maxJobsPerPoll ?? SCHED_MAX_JOBS_PER_POLL;\n    const importProvisioner = params.importProvisioner ?? ((path) => import(path));\n    const provisioner = await importProvisioner(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n    await ensurePlatformRuntimeStateTable(params.rawSql).catch((error) => {\n        logger.warn(`[platform] Scheduled Jobs Poller active-slot table init failed: ${errorMessage(error)}`);\n    });\n    let lastActiveState = null;\n    let nextDueTimer = null;\n    let runPoll;\n    function clearNextDueTimer() {\n        if (!nextDueTimer)\n            return;\n        clearTimeoutImpl(nextDueTimer);\n        nextDueTimer = null;\n    }\n    async function scheduleNextDueTimer() {\n        if (!params.wakeSignalBus)\n            return;\n        const nextRunAtMs = await getNextScheduledRunAtMs(params.rawSql).catch((error) => {\n            logger.warn(`[platform] Scheduled Jobs Poller next-run lookup failed: ${errorMessage(error)}`);\n            return null;\n        });\n        if (nextRunAtMs === null) {\n            clearNextDueTimer();\n            return;\n        }\n        const delayMs = nextRunAtMs - now().getTime();\n        if (delayMs < 0 || delayMs >= pollIntervalMs) {\n            clearNextDueTimer();\n            return;\n        }\n        clearNextDueTimer();\n        nextDueTimer = setTimeoutImpl(() => {\n            nextDueTimer = null;\n            runPoll().catch((error) => {\n                logger.error(\"[scheduled] Next-due timer failed:\", errorMessage(error));\n            });\n        }, delayMs);\n    }\n    runPoll = createSingleFlightWake(async () => {\n        const activity = await getPlatformSlotActivity({ rawSql: params.rawSql, logger });\n        if (!activity.active) {\n            if (lastActiveState !== false) {\n                logger.log(`[platform] Scheduled Jobs Poller paused on inactive slot :${activity.currentPort} (active :${activity.activePort})`);\n            }\n            lastActiveState = false;\n            clearNextDueTimer();\n            return;\n        }\n        if (lastActiveState === false) {\n            logger.log(`[platform] Scheduled Jobs Poller resumed on active slot :${activity.currentPort ?? \"unknown\"}`);\n        }\n        lastActiveState = true;\n        await processScheduledJobsPoll({\n            rawSql: params.rawSql,\n            getPort: provisioner.getAppPort,\n            wakeApp: provisioner.wakeApp,\n            provisionApp: provisioner.provisionApp,\n            setAppMeta: provisioner.setAppMeta,\n            generateCronToken: provisioner.generateCronToken,\n            cronExecTimeoutMs: params.cronExecTimeoutMs,\n            maxJobsPerPoll,\n            logger,\n        });\n        await scheduleNextDueTimer();\n    });\n    setIntervalImpl(() => runPoll().catch((error) => {\n        logger.error(\"[scheduled] Poller tick failed:\", errorMessage(error));\n    }), pollIntervalMs);\n    if (params.wakeSignalBus) {\n        const runStartupScan = async () => {\n            await runPoll().catch((error) => {\n                logger.warn(`[platform] Scheduled Jobs Poller startup scan failed: ${errorMessage(error)}`);\n            });\n        };\n        try {\n            await params.wakeSignalBus.listen([\"scheduler\"], async () => {\n                await runPoll();\n            }, { onListen: runStartupScan });\n            logger.log(\"[platform] Scheduled Jobs Poller wake listener registered\");\n        }\n        catch (error) {\n            logger.warn(`[platform] Scheduled Jobs Poller wake listener disabled: ${errorMessage(error)}`);\n        }\n    }\n    logger.log(`[platform] Scheduled Jobs Poller registered (${pollIntervalMs / 1000}s poll)`);\n}\nexport function registerScheduledJobRoutes(params) {\n    const logger = params.logger ?? console;\n    const ensureActivePlatform = async () => (await getPlatformSlotActivity({ rawSql: params.rawSql, logger })).active;\n    params.app.post(\"/internal/scheduler/persist\", async (c) => {\n        try {\n            const result = await persistScheduledJob({\n                rawSql: params.rawSql,\n                generateInternalToken: params.generateInternalToken,\n                token: c.req.header(\"X-Internal-Token\") || \"\",\n                body: (await c.req.json()),\n                ensureActivePlatform,\n                logger,\n            });\n            return c.json(result.body, result.status);\n        }\n        catch (e) {\n            logger.error(\"[scheduler] persist error:\", errorMessage(e));\n            return c.json({ error: errorMessage(e) }, 500);\n        }\n    });\n    params.app.post(\"/internal/scheduler/cancel\", async (c) => {\n        try {\n            const result = await cancelScheduledJob({\n                rawSql: params.rawSql,\n                generateInternalToken: params.generateInternalToken,\n                token: c.req.header(\"X-Internal-Token\") || \"\",\n                body: (await c.req.json()),\n                ensureActivePlatform,\n                logger,\n            });\n            return c.json(result.body, result.status);\n        }\n        catch (e) {\n            logger.error(\"[scheduler] cancel error:\", errorMessage(e));\n            return c.json({ error: errorMessage(e) }, 500);\n        }\n    });\n}\n", "import { resolve } from \"path\";\nconst WORKER_NAME_PATTERN = /^[a-z][a-z0-9_:-]{0,63}$/;\nconst URL_PATTERN = /https?:\\/\\/[^\\s\"'<>]+/g;\nconst EMAIL_PATTERN = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi;\nconst SECRET_ASSIGNMENT_PATTERN = /\\b(token|secret|password|api[_-]?key|authorization)=([^\\s\"'<>]+)/gi;\nfunction isObject(value) {\n    return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction asString(value) {\n    return typeof value === \"string\" && value.length > 0 ? value : null;\n}\nfunction asNumberOrNull(value) {\n    if (value === null || value === undefined || value === \"\")\n        return null;\n    const numberValue = typeof value === \"number\" ? value : Number(value);\n    return Number.isFinite(numberValue) ? numberValue : null;\n}\nfunction asBooleanOrNull(value) {\n    return typeof value === \"boolean\" ? value : null;\n}\nexport function redactDiagnosticText(value) {\n    if (!value)\n        return null;\n    return value\n        .replace(SECRET_ASSIGNMENT_PATTERN, \"$1=[redacted]\")\n        .replace(URL_PATTERN, \"[redacted-url]\")\n        .replace(EMAIL_PATTERN, \"[redacted-email]\")\n        .slice(0, 240);\n}\nfunction normalizeDrainResult(value) {\n    if (!isObject(value))\n        return null;\n    const result = {};\n    for (const [key, raw] of Object.entries(value)) {\n        if (!/^[a-z][a-z0-9_:-]{0,63}$/.test(key))\n            continue;\n        const numberValue = asNumberOrNull(raw);\n        if (numberValue !== null)\n            result[key] = numberValue;\n    }\n    return Object.keys(result).length > 0 ? result : null;\n}\nfunction normalizeKnownNumberFields(value, keys) {\n    if (!isObject(value))\n        return null;\n    const result = {};\n    for (const key of keys) {\n        const numberValue = asNumberOrNull(value[key]);\n        if (numberValue !== null)\n            result[key] = numberValue;\n    }\n    return Object.keys(result).length > 0 ? result : null;\n}\nfunction normalizeScratchUsage(value) {\n    if (!isObject(value))\n        return undefined;\n    return {\n        configured: asBooleanOrNull(value.configured) ?? false,\n        available: asBooleanOrNull(value.available) ?? false,\n        bytes: asNumberOrNull(value.bytes),\n        files: asNumberOrNull(value.files),\n        directories: asNumberOrNull(value.directories),\n        truncated: asBooleanOrNull(value.truncated) ?? false,\n        error: redactDiagnosticText(asString(value.error)),\n    };\n}\nfunction normalizeCgroup(value) {\n    if (!isObject(value))\n        return undefined;\n    return {\n        available: asBooleanOrNull(value.available) ?? false,\n        cpuQuotaMicros: asNumberOrNull(value.cpuQuotaMicros),\n        cpuPeriodMicros: asNumberOrNull(value.cpuPeriodMicros),\n        memoryMaxBytes: asNumberOrNull(value.memoryMaxBytes),\n        memoryHighBytes: asNumberOrNull(value.memoryHighBytes),\n        error: redactDiagnosticText(asString(value.error)),\n    };\n}\nexport function normalizeWakeSignalWorkerRuntimeDiagnostics(value) {\n    if (!isObject(value))\n        return null;\n    const diagnostics = {\n        status: asString(value.status) ?? \"unknown\",\n        provider: asString(value.provider),\n        intervalMs: asNumberOrNull(value.intervalMs),\n        batchSize: asNumberOrNull(value.batchSize),\n        maxConcurrency: asNumberOrNull(value.maxConcurrency),\n        maxAttempts: asNumberOrNull(value.maxAttempts),\n        startedAt: asString(value.startedAt),\n        stoppedAt: asString(value.stoppedAt),\n        lastDrainAt: asString(value.lastDrainAt),\n        lastError: redactDiagnosticText(asString(value.lastError)),\n        lastResult: normalizeDrainResult(value.lastResult),\n    };\n    const activeLeases = asNumberOrNull(value.activeLeases);\n    const lastHeartbeatAt = asString(value.lastHeartbeatAt);\n    const lastCleanupAt = asString(value.lastCleanupAt);\n    const lastSuccessfulCleanupAt = asString(value.lastSuccessfulCleanupAt);\n    const lastCleanupResult = normalizeKnownNumberFields(value.lastCleanupResult, [\n        \"scannedChunks\",\n        \"updatedChunks\",\n        \"deletedArtifacts\",\n        \"failedArtifacts\",\n    ]);\n    const lastHealthAt = asString(value.lastHealthAt);\n    const scratchUsage = normalizeScratchUsage(value.scratchUsage);\n    const cgroup = normalizeCgroup(value.cgroup);\n    if (lastHeartbeatAt)\n        diagnostics.lastHeartbeatAt = lastHeartbeatAt;\n    if (activeLeases !== null)\n        diagnostics.activeLeases = activeLeases;\n    if (lastCleanupAt)\n        diagnostics.lastCleanupAt = lastCleanupAt;\n    if (lastSuccessfulCleanupAt)\n        diagnostics.lastSuccessfulCleanupAt = lastSuccessfulCleanupAt;\n    if (lastCleanupResult)\n        diagnostics.lastCleanupResult = lastCleanupResult;\n    if (\"lastCleanupError\" in value) {\n        diagnostics.lastCleanupError = redactDiagnosticText(asString(value.lastCleanupError));\n    }\n    if (lastHealthAt)\n        diagnostics.lastHealthAt = lastHealthAt;\n    if (scratchUsage)\n        diagnostics.scratchUsage = scratchUsage;\n    if (cgroup)\n        diagnostics.cgroup = cgroup;\n    return diagnostics;\n}\nexport function normalizeWakeSignalWorkerDiagnostics(input) {\n    if (!isObject(input))\n        return {};\n    const workers = {};\n    for (const [workerName, value] of Object.entries(input)) {\n        if (!WORKER_NAME_PATTERN.test(workerName))\n            continue;\n        const diagnostics = normalizeWakeSignalWorkerRuntimeDiagnostics(value);\n        if (diagnostics)\n            workers[workerName] = diagnostics;\n    }\n    return workers;\n}\nasync function readPlatformWorkerRuntimeState(params) {\n    try {\n        const mod = await import(resolve(params.functionsPath, params.fileName));\n        const getter = mod[params.getterName];\n        if (typeof getter !== \"function\") {\n            return {\n                status: \"error\",\n                provider: params.provider,\n                lastError: `worker diagnostics getter missing: ${params.getterName}`,\n            };\n        }\n        return getter();\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return {\n            status: \"error\",\n            provider: params.provider,\n            lastError: message,\n        };\n    }\n}\nexport async function getPlatformWorkerDiagnostics(params) {\n    const [email, webhook, accountDeletionFinalizer, aiAudio] = await Promise.all([\n        readPlatformWorkerRuntimeState({\n            functionsPath: params.functionsPath,\n            fileName: \"email-worker.ts\",\n            getterName: \"getPlatformEmailWorkerRuntimeState\",\n            provider: \"resend\",\n        }),\n        readPlatformWorkerRuntimeState({\n            functionsPath: params.functionsPath,\n            fileName: \"webhook-worker.ts\",\n            getterName: \"getPlatformWebhookWorkerRuntimeState\",\n            provider: \"http\",\n        }),\n        readPlatformWorkerRuntimeState({\n            functionsPath: params.functionsPath,\n            fileName: \"account-lifecycle-finalization.ts\",\n            getterName: \"getAccountDeletionFinalizerRuntimeState\",\n            provider: \"platform-db\",\n        }),\n        readPlatformWorkerRuntimeState({\n            functionsPath: params.functionsPath,\n            fileName: \"ai-gateway-audio-worker-runner.ts\",\n            getterName: \"getPlatformAiAudioWorkerRuntimeState\",\n            provider: \"azure_openai\",\n        }),\n    ]);\n    return normalizeWakeSignalWorkerDiagnostics({\n        email,\n        webhook,\n        account_deletion_finalizer: accountDeletionFinalizer,\n        ai_audio: aiAudio,\n    });\n}\n", "import { createDisabledWakeSignalDiagnostics, } from \"./wake-signal/wake-signal-diagnostics.js\";\nimport { normalizeWakeSignalWorkerDiagnostics, } from \"./server-platform-worker-diagnostics.js\";\nconst WAKE_SIGNAL_DIAGNOSTICS_INTERNAL_ERROR = \"Internal wake signal diagnostics failed\";\nfunction isAuthorizedInternalToken(token, internalToken) {\n    if (!internalToken)\n        return true;\n    return token === internalToken;\n}\nexport function createWakeSignalDiagnosticsRouteHandler(params) {\n    const logger = params.logger ?? console;\n    return async (c) => {\n        if (!isAuthorizedInternalToken(c.req.header(\"X-Internal-Token\"), params.internalToken)) {\n            return c.json({ error: \"Forbidden\" }, 403);\n        }\n        try {\n            const diagnostics = (await params.getDiagnostics?.()) ?? createDisabledWakeSignalDiagnostics(\"disabled\");\n            const response = {\n                ok: true,\n                wakeSignal: diagnostics,\n            };\n            if (params.getWorkerDiagnostics) {\n                response.workers = normalizeWakeSignalWorkerDiagnostics(await params.getWorkerDiagnostics());\n            }\n            return c.json(response);\n        }\n        catch {\n            logger.error(\"[wake-signal] diagnostics failed\");\n            return c.json({ error: WAKE_SIGNAL_DIAGNOSTICS_INTERNAL_ERROR }, 500);\n        }\n    };\n}\nexport function registerWakeSignalDiagnosticsRoute(params) {\n    params.app.get(\"/internal/wake-signal/diagnostics\", createWakeSignalDiagnosticsRouteHandler({\n        getDiagnostics: params.getDiagnostics,\n        getWorkerDiagnostics: params.getWorkerDiagnostics,\n        internalToken: params.internalToken,\n        logger: params.logger,\n    }));\n}\n", "import { normalizePlatformProxyHost, resolveRealtimeConnectionLimit } from \"./server-platform-app-proxy.js\";\nimport { buildServerPlatformNodeRouteRecord, createServerNodeProxyLoopbackRequest, resolvePlatformControlPlaneAppNameFromPath, resolvePlatformControlPlaneAppNameFromProxyHeaders, } from \"./server-platform-node-routing.js\";\nimport { getNodeRouteMetricsSnapshot } from \"./server-node-routing-metrics.js\";\nimport * as wsGateway from \"./ws-gateway.js\";\nexport function registerPlatformNodeOpsForRuntime(params) {\n    if (!params.nodeOpsRoutes?.registerPlatformNodeOpsRoutes)\n        return;\n    const nodeOpsParams = {\n        app: params.app,\n        currentNodeId: params.platformNodeId,\n        envName: process.env.GENCOW_ENV || (params.platformDomain.includes(\"dev\") ? \"dev\" : \"prod\"),\n        currentInternalOrigin: process.env.GENCOW_NODE_INTERNAL_ORIGIN || null,\n        currentActivePort: Number(process.env.PORT || 4100),\n        rawSql: params.rawSql,\n        getCapacity: params.getCapacity,\n        getRuntimeMetrics: params.getRuntimeMetrics,\n        getRouteMetrics: getNodeRouteMetricsSnapshot,\n        getBuildHash: () => process.env.GIT_SHA || process.env.RENDER_GIT_COMMIT || null,\n        resolveRouteDiagnostic: async (appName) => {\n            const rows = await params.db\n                .select({ name: params.appsTable.name, nodeId: params.appsTable.nodeId, port: params.appsTable.port })\n                .from(params.appsTable)\n                .where(params.eqOp(params.appsTable.name, appName))\n                .limit(1);\n            const appRow = rows[0];\n            if (!appRow) {\n                return params.nodeOpsRoutes.buildPlatformNodeRouteDiagnostic({\n                    appName,\n                    currentNodeId: params.platformNodeId,\n                    app: null,\n                });\n            }\n            const currentNodeId = params.platformNodeId || appRow.nodeId || \"node-1\";\n            let homeNode = null;\n            if (params.platformNodes && appRow.nodeId && appRow.nodeId !== currentNodeId) {\n                const nodeRows = await params.db\n                    .select({\n                    id: params.platformNodes.id,\n                    status: params.platformNodes.status,\n                    internalOrigin: params.platformNodes.internalOrigin,\n                    lastHeartbeatAt: params.platformNodes.lastHeartbeatAt,\n                })\n                    .from(params.platformNodes)\n                    .where(params.eqOp(params.platformNodes.id, appRow.nodeId))\n                    .limit(1);\n                homeNode = nodeRows[0] ? buildServerPlatformNodeRouteRecord(nodeRows[0]) : null;\n            }\n            return params.nodeOpsRoutes.buildPlatformNodeRouteDiagnostic({\n                appName,\n                currentNodeId,\n                app: appRow,\n                homeNode,\n                localPort: params.getLivePort(appName) ?? null,\n            });\n        },\n        logger: params.logger,\n    };\n    params.nodeOpsRoutes.registerPlatformNodeOpsRoutes(nodeOpsParams);\n    params.nodeOpsRoutes.startPlatformNodeHeartbeatLoop?.({\n        ...nodeOpsParams,\n        setIntervalImpl: params.setIntervalImpl,\n        clearIntervalImpl: params.clearIntervalImpl,\n    });\n}\nexport function registerNodeProxyInternalRoutesForRuntime(params) {\n    if (!params.nodeProxyEnabled ||\n        !params.nodeProxyInternalRoutes ||\n        !params.platformNodeId ||\n        !params.nodeProxyKeyId ||\n        !params.nodeProxySecret) {\n        return;\n    }\n    const resolveAppName = async ({ headers, originalHost, originalPath, }) => {\n        const host = normalizePlatformProxyHost(originalHost);\n        const platformHost = normalizePlatformProxyHost(params.platformDomain);\n        if (host === platformHost || host === `www.${platformHost}`) {\n            const controlPlaneAppName = resolvePlatformControlPlaneAppNameFromPath(originalPath);\n            if (controlPlaneAppName)\n                return controlPlaneAppName;\n            const rpcControlPlaneAppName = resolvePlatformControlPlaneAppNameFromProxyHeaders(originalPath, headers);\n            if (rpcControlPlaneAppName)\n                return rpcControlPlaneAppName;\n        }\n        const match = host.match(params.subdomainRegex);\n        if (match?.[1])\n            return match[1];\n        const rows = await params.db\n            .select({ name: params.appsTable.name })\n            .from(params.appsTable)\n            .where(params.andOp(params.eqOp(params.appsTable.customDomain, host), params.eqOp(params.appsTable.customDomainStatus, \"active\")))\n            .limit(1);\n        return rows[0]?.name ?? null;\n    };\n    params.nodeProxyInternalRoutes.registerNodeProxyHttpRoute({\n        app: params.app,\n        currentNodeId: params.platformNodeId,\n        secretsByKeyId: { [params.nodeProxyKeyId]: params.nodeProxySecret },\n        resolveAppName,\n        proxyHomeAppRequest: async ({ c, appName, originalHost, originalPath, body }) => {\n            const rows = await params.db\n                .select({ nodeId: params.appsTable.nodeId })\n                .from(params.appsTable)\n                .where(params.eqOp(params.appsTable.name, appName))\n                .limit(1);\n            const appNodeId = rows[0]?.nodeId?.trim() || params.platformNodeId;\n            if (appNodeId && appNodeId !== params.platformNodeId) {\n                return Response.json({ error: \"Node assignment changed\", code: \"NODE_ASSIGNMENT_CHANGED\" }, { status: 409 });\n            }\n            return params.app.fetch(createServerNodeProxyLoopbackRequest({ c, originalHost, originalPath, body }), c.env);\n        },\n        logger: params.logger,\n    });\n    params.nodeProxyInternalRoutes.registerNodeProxyWsRoute({\n        app: params.app,\n        currentNodeId: params.platformNodeId,\n        secretsByKeyId: { [params.nodeProxyKeyId]: params.nodeProxySecret },\n        resolveAppName,\n        upgradeHomeAppWsRequest: async ({ c, appName, originalPath }) => {\n            const rows = await params.db\n                .select({ id: params.appsTable.id, name: params.appsTable.name, port: params.appsTable.port, nodeId: params.appsTable.nodeId })\n                .from(params.appsTable)\n                .where(params.eqOp(params.appsTable.name, appName))\n                .limit(1);\n            const appRow = rows[0];\n            if (!appRow) {\n                return Response.json({ error: \"App not found\", code: \"NODE_PROXY_APP_NOT_FOUND\" }, { status: 404 });\n            }\n            const appNodeId = appRow.nodeId?.trim() || params.platformNodeId;\n            if (appNodeId && appNodeId !== params.platformNodeId) {\n                return Response.json({ error: \"Node assignment changed\", code: \"NODE_ASSIGNMENT_CHANGED\" }, { status: 409 });\n            }\n            const appInternalToken = params.generateInternalToken(appRow.id, appRow.name);\n            const originalUrl = new URL(`http://placeholder${originalPath}`);\n            const ticketAuth = wsGateway.consumeGatewayRealtimeTicket({\n                ticket: originalUrl.searchParams.get(\"ticket\"),\n                appName: appRow.name,\n                secret: appInternalToken,\n            });\n            if (!ticketAuth.ok) {\n                return new Response(\"Invalid realtime ticket\", { status: ticketAuth.status });\n            }\n            const connectionLimit = await resolveRealtimeConnectionLimit({\n                appName: appRow.name,\n                rawSql: params.rawSql,\n                logger: params.logger,\n            });\n            const upgraded = c.env?.server?.upgrade?.(c.req.raw, {\n                data: {\n                    gatewayAppName: appRow.name,\n                    appName: appRow.name,\n                    appPort: params.getLivePort(appRow.name) || appRow.port,\n                    pathname: originalUrl.pathname,\n                    connectionLimit,\n                    appInternalToken,\n                    authMode: ticketAuth.authMode,\n                    userId: ticketAuth.authMode === \"authenticated\" ? ticketAuth.userId : undefined,\n                    sessionId: ticketAuth.authMode === \"authenticated\" ? ticketAuth.sessionId : null,\n                    authExpiresAt: ticketAuth.authMode === \"authenticated\" ? ticketAuth.expiresAt : undefined,\n                    crudRealtimeMode: ticketAuth.authMode === \"authenticated\" ? ticketAuth.realtime.crudRealtimeMode : undefined,\n                },\n            });\n            return upgraded\n                ? new Response(null, { status: 101 })\n                : Response.json({ error: \"WebSocket upgrade failed\", code: \"NODE_PROXY_WS_UPGRADE_FAILED\" }, { status: 500 });\n        },\n        logger: params.logger,\n    });\n}\n", "import { resolve } from \"path\";\nexport async function startPlatformAiAudioWorkerForRuntime(params) {\n    const logger = params.logger ?? console;\n    const env = params.env ?? {};\n    const { createDefaultPlatformAiAudioWorkerDeps, resolvePlatformAiAudioWorkerConfig, startPlatformAiAudioWorker, } = await import(resolve(params.functionsPath, \"ai-gateway-audio-worker-runner.ts\"));\n    const { createDefaultAiAudioTtsWorkerDeps } = await import(resolve(params.functionsPath, \"ai-gateway-audio-tts-worker.ts\"));\n    const config = resolvePlatformAiAudioWorkerConfig(env);\n    if (config.disabled) {\n        logger.log(\"[platform-ai-audio] worker disabled; set PLATFORM_AI_AUDIO_WORKER_ENABLED=true to run it\");\n        return null;\n    }\n    return startPlatformAiAudioWorker({\n        db: params.db,\n        deps: createDefaultPlatformAiAudioWorkerDeps({ db: params.db }, {\n            timeoutMs: config.storageTimeoutMs,\n            ffprobeBinary: config.ffprobeBinary,\n            ffprobeTimeoutMs: config.ffprobeTimeoutMs,\n            scratchDir: config.scratchDir,\n        }),\n        ttsDeps: createDefaultAiAudioTtsWorkerDeps({ db: params.db }),\n        intervalMs: config.intervalMs,\n        batchSize: config.batchSize,\n        maxConcurrency: config.maxConcurrency,\n        scratchDir: config.scratchDir,\n        cgroupRoot: config.cgroupRoot,\n        chunkArtifactTtlMs: config.chunkArtifactTtlMs,\n        chunkCleanupLimit: config.chunkCleanupLimit,\n        mediaWorkerLaneConfig: config.mediaWorkerLaneConfig,\n        queueControls: {\n            maxActivePerUser: config.maxActivePerUser,\n            queueWaitBudgetMs: config.queueWaitBudgetMs,\n        },\n        drainOnStart: config.drainOnStart,\n        logger,\n        isActiveWorker: params.isActiveWorker,\n        setIntervalImpl: params.setIntervalImpl,\n        clearIntervalImpl: params.clearIntervalImpl,\n    });\n}\n", "import { resolve } from \"path\";\nexport async function startPlatformEmailWorkerForRuntime(params) {\n    const logger = params.logger ?? console;\n    const env = params.env ?? {};\n    const { createPlatformEmailProvider, resolvePlatformEmailWorkerConfig, startPlatformEmailWorker } = await import(resolve(params.functionsPath, \"email-worker.ts\"));\n    const config = resolvePlatformEmailWorkerConfig(env);\n    if (config.disabled) {\n        logger.log(\"[platform-email] worker disabled by PLATFORM_EMAIL_WORKER_DISABLED\");\n        return null;\n    }\n    if (!env.RESEND_API_KEY) {\n        logger.warn(\"[platform-email] worker skipped: RESEND_API_KEY is not configured\");\n        return null;\n    }\n    return startPlatformEmailWorker({\n        db: params.db,\n        provider: createPlatformEmailProvider(env),\n        from: config.from,\n        intervalMs: config.intervalMs,\n        batchSize: config.batchSize,\n        maxAttempts: config.maxAttempts,\n        logger,\n        wakeSignalBus: params.wakeSignalBus,\n        isActiveWorker: params.isActiveWorker,\n        setIntervalImpl: params.setIntervalImpl,\n        clearIntervalImpl: params.clearIntervalImpl,\n    });\n}\nexport async function startPlatformWebhookWorkerForRuntime(params) {\n    const logger = params.logger ?? console;\n    const env = params.env ?? {};\n    const { createPlatformWebhookProvider, resolvePlatformWebhookWorkerConfig, startPlatformWebhookWorker, } = await import(resolve(params.functionsPath, \"webhook-worker.ts\"));\n    const config = resolvePlatformWebhookWorkerConfig(env);\n    if (config.disabled) {\n        logger.log(\"[platform-webhook] worker disabled by PLATFORM_WEBHOOK_WORKER_DISABLED\");\n        return null;\n    }\n    return startPlatformWebhookWorker({\n        db: params.db,\n        provider: createPlatformWebhookProvider(env, {\n            fetchImpl: params.fetchImpl,\n            timeoutMs: config.timeoutMs,\n        }),\n        intervalMs: config.intervalMs,\n        batchSize: config.batchSize,\n        maxAttempts: config.maxAttempts,\n        logger,\n        wakeSignalBus: params.wakeSignalBus,\n        isActiveWorker: params.isActiveWorker,\n        setIntervalImpl: params.setIntervalImpl,\n        clearIntervalImpl: params.clearIntervalImpl,\n    });\n}\n", "import { dirname, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst platformNodeProxyWsTunnel = resolve(__dirname, \"../../platform/src/node-proxy-ws-tunnel.ts\");\nconst mod = await import(platformNodeProxyWsTunnel);\nexport const createNodeProxyWsTunnelUpgradeResponse = mod.createNodeProxyWsTunnelUpgradeResponse;\nexport const handleNodeProxyWsTunnelOpen = mod.handleNodeProxyWsTunnelOpen;\nexport const handleNodeProxyWsTunnelMessage = mod.handleNodeProxyWsTunnelMessage;\nexport const handleNodeProxyWsTunnelClose = mod.handleNodeProxyWsTunnelClose;\n", "import { resolve } from \"path\";\nexport async function createPlatformStorageDirectRuntime(functionsPath, buildDatabaseUrl) {\n    const [proxyMetrics, directMetrics, appQueryModule] = await Promise.all([\n        import(resolve(functionsPath, \"../src/proxy-metrics.ts\")),\n        import(resolve(functionsPath, \"../src/storage-direct-metrics.ts\")),\n        import(resolve(functionsPath, \"../src/platform-storage-app-query.ts\")),\n    ]);\n    const appQuery = appQueryModule.createPlatformStorageAppQueryRuntime({ buildDatabaseUrl });\n    return {\n        addProxyMetric: proxyMetrics.addProxyMetric,\n        addStorageBandwidthMetric: proxyMetrics.addStorageBandwidthMetric,\n        recordStorageDirectMetric: directMetrics.recordStorageDirectMetric,\n        appRawSql: appQuery.query,\n    };\n}\n", "import { resolve } from \"path\";\nexport async function startPlatformAccountDeletionFinalizerForRuntime(params) {\n    const logger = params.logger ?? console;\n    const env = params.env ?? {};\n    const { resolveAccountDeletionFinalizerConfig, startAccountDeletionFinalizerWorker } = await import(resolve(params.functionsPath, \"account-lifecycle-finalization.ts\"));\n    const config = resolveAccountDeletionFinalizerConfig(env);\n    if (config.disabled) {\n        logger.log(\"[account-deletion-finalizer] worker disabled by GENCOW_ACCOUNT_DELETION_FINALIZER_DISABLED\");\n        return null;\n    }\n    return startAccountDeletionFinalizerWorker({\n        db: params.db,\n        intervalMs: config.intervalMs,\n        batchSize: config.batchSize,\n        maxAttempts: config.maxAttempts,\n        logger,\n        isActiveWorker: params.isActiveWorker,\n        setIntervalImpl: params.setIntervalImpl,\n        clearIntervalImpl: params.clearIntervalImpl,\n    });\n}\n", "import { dirname, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst platformRuntimeMetrics = resolve(__dirname, \"../../platform/src/runtime-metrics.ts\");\nconst mod = await import(platformRuntimeMetrics);\nexport const getRuntimeMetricsSnapshot = mod.getRuntimeMetricsSnapshot;\nexport const startRuntimeMetricsSampler = mod.startRuntimeMetricsSampler;\n", "import { resolve } from \"path\";\nimport { registerBillingMaintenanceCrons, registerPlatformSleepChecker, registerUsageSnapshotCron, } from \"./server-platform-maintenance.js\";\nimport { registerPlatformAppProxy } from \"./server-platform-app-proxy.js\";\nimport { registerMediaWorkerStorageBridgeForRuntime } from \"./server-platform-media-worker-storage-runtime.js\";\nimport { bootstrapPlatformAutoRecovery } from \"./server-platform-auto-recovery.js\";\nimport { registerPlatformCronScheduler } from \"./server-platform-cron-scheduler.js\";\nimport { registerScheduledJobsPoller, registerScheduledJobRoutes } from \"./server-scheduled-jobs-runtime.js\";\nimport { FUNCTION_TIMEOUTS } from \"./server-execution.js\";\nimport { registerWakeSignalDiagnosticsRoute } from \"./server-wake-signal-diagnostics-route.js\";\nimport { getPlatformWorkerDiagnostics } from \"./server-platform-worker-diagnostics.js\";\nimport { ensurePlatformRuntimeStateTable, getPlatformSlotActivity } from \"./platform-active-slot.js\";\nimport { createPostgresWakeSignalRuntime } from \"./wake-signal/postgres-wake-signal-runtime.js\";\nimport { createDisabledWakeSignalDiagnostics } from \"./wake-signal/wake-signal-diagnostics.js\";\nimport * as wsGateway from \"./ws-gateway.js\";\nimport { buildServerPlatformNodeRouteRecord } from \"./server-platform-node-routing.js\";\nimport { registerNodeProxyInternalRoutesForRuntime, registerPlatformNodeOpsForRuntime, } from \"./server-platform-node-routes-bootstrap.js\";\nimport { startPlatformAiAudioWorkerForRuntime, } from \"./server-platform-ai-audio-worker-runtime.js\";\nimport { startPlatformEmailWorkerForRuntime, startPlatformWebhookWorkerForRuntime, } from \"./server-platform-notification-worker-runtime.js\";\nimport * as nodeProxyWsTunnel from \"./server-node-proxy-ws-tunnel.js\";\nimport { recordNodeRouteMetric } from \"./server-node-routing-metrics.js\";\nimport { createPlatformStorageDirectRuntime } from \"./server-platform-storage-direct-runtime.js\";\nimport { startPlatformAccountDeletionFinalizerForRuntime, } from \"./server-platform-account-deletion-finalizer-runtime.js\";\nexport const platformWebsocketGateway = wsGateway;\nexport const platformNodeProxyWsTunnel = {\n    handleOpen: nodeProxyWsTunnel.handleNodeProxyWsTunnelOpen,\n    handleMessage: nodeProxyWsTunnel.handleNodeProxyWsTunnelMessage,\n    handleClose: nodeProxyWsTunnel.handleNodeProxyWsTunnelClose,\n};\nconst REALTIME_NOTIFY_INTERNAL_ERROR = \"Internal realtime notify failed\";\nfunction normalizeOptionalShortString(value) {\n    if (value === undefined || value === null)\n        return undefined;\n    if (typeof value !== \"string\" || value.length === 0 || value.length > 200)\n        return null;\n    return value;\n}\nexport function createPlatformSubdomainRegex(platformDomain) {\n    const escaped = platformDomain.replace(/\\./g, \"\\\\.\");\n    return new RegExp(`^([a-z0-9][a-z0-9-]*[a-z0-9]?)\\\\.${escaped}$`);\n}\nexport function registerPlatformInternalMiddleware(app, gateway = wsGateway) {\n    app.use(\"/internal/*\", async (c, next) => {\n        if (c.req.path === \"/internal/domain/verify\") {\n            return next();\n        }\n        if (c.req.path.startsWith(\"/internal/node-proxy/\") && c.req.header(\"X-Gencow-Node-Proxy\") === \"v1\") {\n            return next();\n        }\n        const host = c.req.header(\"host\") || \"\";\n        const remoteAddress = c.env?.ip && typeof c.env.ip.address === \"string\" ? c.env.ip.address : null;\n        if (!gateway.isLocalInternalHost(host, remoteAddress)) {\n            return c.json({ error: \"Forbidden\" }, 403);\n        }\n        return next();\n    });\n}\nexport function registerRealtimeNotifyRoute(params) {\n    const logger = params.logger ?? console;\n    params.app.post(\"/internal/realtime-notify\", async (c) => {\n        try {\n            const body = (await c.req.json());\n            if (!body.type) {\n                return c.json({ error: \"type required\" }, 400);\n            }\n            const auth = await params.gateway.authorizeRealtimeNotifyRequest({\n                appName: body.appName,\n                token: c.req.header(\"X-Internal-Token\") || \"\",\n                findAppByName: async (appName) => {\n                    const rows = await params.db\n                        .select({ id: params.appsTable.id, name: params.appsTable.name })\n                        .from(params.appsTable)\n                        .where(params.eqOp(params.appsTable.name, appName))\n                        .limit(1);\n                    return rows[0] ?? null;\n                },\n                generateInternalToken: params.generateInternalToken,\n            });\n            if (!auth.ok) {\n                return c.json({ error: auth.error }, auth.status);\n            }\n            const rateLimit = params.gateway.consumeRealtimeNotifyRateLimit?.(auth.appName);\n            if (rateLimit && !rateLimit.ok) {\n                return c.json({ error: \"Realtime notify rate limit exceeded\", retryAfterMs: rateLimit.retryAfterMs }, 429);\n            }\n            if (body.type === \"emit\") {\n                if (typeof body.queryKey !== \"string\" || body.queryKey.length === 0) {\n                    return c.json({ error: \"queryKey required\" }, 400);\n                }\n                const sent = params.gateway.notifyEmit(auth.appName, body.queryKey, body.data);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"invalidate\") {\n                const queryKeys = typeof body.queryKey === \"string\" && body.queryKey.length > 0\n                    ? [body.queryKey]\n                    : Array.isArray(body.queryKeys) &&\n                        body.queryKeys.every((key) => typeof key === \"string\" && key.length > 0)\n                        ? [...new Set(body.queryKeys)]\n                        : null;\n                if (!queryKeys)\n                    return c.json({ error: \"queryKey required\" }, 400);\n                const sent = params.gateway.notifyInvalidate(auth.appName, queryKeys);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"query_invalidate\") {\n                if (typeof body.query !== \"string\" || body.query.length === 0) {\n                    return c.json({ error: \"query required\" }, 400);\n                }\n                if (typeof body.subscriptionKey !== \"string\" || body.subscriptionKey.length === 0) {\n                    return c.json({ error: \"subscriptionKey required\" }, 400);\n                }\n                if (typeof body.scopeHash !== \"string\" ||\n                    body.scopeHash.length === 0 ||\n                    body.scopeHash.length > 200) {\n                    return c.json({ error: \"scopeHash required\" }, 400);\n                }\n                const eventId = typeof body.eventId === \"string\" && body.eventId.length > 0 ? body.eventId : undefined;\n                const legacyQueryKey = normalizeOptionalShortString(body.legacyQueryKey);\n                if (legacyQueryKey === null) {\n                    return c.json({ error: \"legacyQueryKey must be a non-empty string\" }, 400);\n                }\n                const crudRealtimeEmitMode = body.crudRealtimeEmitMode === undefined\n                    ? undefined\n                    : body.crudRealtimeEmitMode === \"legacy\" ||\n                        body.crudRealtimeEmitMode === \"scoped\" ||\n                        body.crudRealtimeEmitMode === \"dual\"\n                        ? body.crudRealtimeEmitMode\n                        : null;\n                if (crudRealtimeEmitMode === null) {\n                    return c.json({ error: \"crudRealtimeEmitMode must be legacy, scoped, or dual\" }, 400);\n                }\n                const sent = params.gateway.notifyQueryInvalidate(auth.appName, body.query, body.subscriptionKey, eventId, body.scopeHash, legacyQueryKey, crudRealtimeEmitMode);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"query_revoke\") {\n                if (typeof body.query !== \"string\" || body.query.length === 0) {\n                    return c.json({ error: \"query required\" }, 400);\n                }\n                if (typeof body.subscriptionKey !== \"string\" || body.subscriptionKey.length === 0) {\n                    return c.json({ error: \"subscriptionKey required\" }, 400);\n                }\n                if (typeof body.scopeHash !== \"string\" ||\n                    body.scopeHash.length === 0 ||\n                    body.scopeHash.length > 200) {\n                    return c.json({ error: \"scopeHash required\" }, 400);\n                }\n                const epoch = normalizeOptionalShortString(body.epoch);\n                const reason = normalizeOptionalShortString(body.reason);\n                if (epoch === null)\n                    return c.json({ error: \"epoch must be a non-empty string\" }, 400);\n                if (reason === null)\n                    return c.json({ error: \"reason must be a non-empty string\" }, 400);\n                const sent = params.gateway.notifyQueryRevoke(auth.appName, body.query, body.subscriptionKey, epoch, reason, body.scopeHash);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"channel_publish\") {\n                if (typeof body.channelKey !== \"string\" || body.channelKey.length === 0) {\n                    return c.json({ error: \"channelKey required\" }, 400);\n                }\n                const eventId = typeof body.eventId === \"string\" && body.eventId.length > 0 ? body.eventId : undefined;\n                const sent = params.gateway.notifyChannelPublish(auth.appName, body.channelKey, body.data, eventId);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"channel_invalidate\") {\n                if (typeof body.channelKey !== \"string\" || body.channelKey.length === 0) {\n                    return c.json({ error: \"channelKey required\" }, 400);\n                }\n                const sent = params.gateway.notifyChannelInvalidate(auth.appName, body.channelKey);\n                return c.json({ ok: true, sent });\n            }\n            if (body.type === \"channel_revoke\") {\n                if (typeof body.channelKey !== \"string\" || body.channelKey.length === 0) {\n                    return c.json({ error: \"channelKey required\" }, 400);\n                }\n                const epoch = body.epoch === undefined || body.epoch === null\n                    ? undefined\n                    : typeof body.epoch === \"string\" && body.epoch.length > 0 && body.epoch.length <= 200\n                        ? body.epoch\n                        : null;\n                const reason = body.reason === undefined || body.reason === null\n                    ? undefined\n                    : typeof body.reason === \"string\" && body.reason.length > 0 && body.reason.length <= 200\n                        ? body.reason\n                        : null;\n                if (epoch === null)\n                    return c.json({ error: \"epoch must be a non-empty string\" }, 400);\n                if (reason === null)\n                    return c.json({ error: \"reason must be a non-empty string\" }, 400);\n                const sent = params.gateway.notifyChannelRevoke(auth.appName, body.channelKey, epoch, reason);\n                return c.json({ ok: true, sent });\n            }\n            return c.json({ error: `Unknown type: ${body.type}` }, 400);\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            logger.error(\"[ws-gateway] notify error:\", message);\n            return c.json({ error: REALTIME_NOTIFY_INTERNAL_ERROR }, 500);\n        }\n    });\n}\nexport function registerCapacityRoute(params) {\n    params.app.get(\"/internal/capacity\", (c) => {\n        return c.json(params.gateway.getCapacity());\n    });\n}\nexport function registerRuntimeMetricsRoute(params) {\n    params.app.get(\"/internal/runtime-metrics\", (c) => c.json(params.gateway.getRuntimeMetrics()));\n}\nexport function createPlatformActiveSlotWorkerCheck(params) {\n    const logger = params.logger ?? console;\n    let lastActiveState = null;\n    return async () => {\n        const activity = await getPlatformSlotActivity({ rawSql: params.rawSql, logger });\n        if (!activity.active) {\n            if (lastActiveState !== false) {\n                logger.log(`[${params.workerName}] worker paused on inactive slot :${activity.currentPort} (active :${activity.activePort})`);\n            }\n            lastActiveState = false;\n            return false;\n        }\n        if (lastActiveState === false) {\n            logger.log(`[${params.workerName}] worker resumed on active slot :${activity.currentPort ?? \"unknown\"}`);\n        }\n        lastActiveState = true;\n        return true;\n    };\n}\nexport async function startGatewayRealtimeUsageMeteringForRuntime(params) {\n    const importImpl = params.importImpl ?? ((path) => import(path));\n    const mod = await importImpl(resolve(params.functionsPath, \"../src/ws-gateway-usage-metering.ts\"));\n    mod.startGatewayRealtimeUsageMetering({\n        getDb: () => params.db,\n        logger: params.logger,\n        setIntervalImpl: params.setIntervalImpl,\n    });\n}\nexport async function bootstrapPlatformRuntime(params) {\n    const logger = params.logger ?? console;\n    const fetchImpl = params.fetchImpl ?? fetch;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const clearIntervalImpl = params.clearIntervalImpl ?? clearInterval;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const subdomainRegex = createPlatformSubdomainRegex(params.platformDomain);\n    const { apps: appsTable, platformNodes } = await import(resolve(params.functionsPath, \"schema.ts\"));\n    const { eq: eqOp, and: andOp, inArray: inArrayOp } = await import(\"drizzle-orm\");\n    const { createProxyRequestReplayPlan } = await import(resolve(params.functionsPath, \"../src/proxy-request-replay.ts\"));\n    const { buildAppRuntimeUnavailableResult, ensureAppRuntimeReady } = await import(resolve(params.functionsPath, \"../src/app-runtime-recovery.ts\"));\n    const { getAppPort: getLivePort, setAppPort, removeAppPort, removeAppPortIfEquals, wakeApp, provisionApp, setAppMeta, setLastAccess: markLastAccess, hasLiveRuntimeProcess, resolveLiveRuntimePort, reapWarmPoolStale, getWakeCapacitySnapshot, generateInternalToken, setDatabasePreflightRawSql, setPlatformRuntimeDb, buildAppDatabaseUrl, } = await import(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n    setDatabasePreflightRawSql(params.rawSql);\n    setPlatformRuntimeDb?.(params.db);\n    const storageDirectRuntime = await createPlatformStorageDirectRuntime(params.functionsPath, buildAppDatabaseUrl);\n    const { getRuntimeMetricsSnapshot, startRuntimeMetricsSampler } = await import(\"./runtime-metrics.js\");\n    const platformNodeId = process.env.GENCOW_NODE_ID?.trim() || null;\n    const nodeProxyKeyId = process.env.GENCOW_NODE_PROXY_KEY_ID?.trim() || null;\n    const nodeProxySecret = process.env.GENCOW_NODE_PROXY_SECRET?.trim() || null;\n    const nodeProxyEnabled = Boolean(platformNodeId && nodeProxyKeyId && nodeProxySecret);\n    const nodeProxyHttpClient = nodeProxyEnabled\n        ? await import(resolve(params.functionsPath, \"../src/node-proxy-http-client.ts\"))\n        : null;\n    const nodeProxyInternalRoutes = nodeProxyEnabled\n        ? await import(resolve(params.functionsPath, \"../src/platform-internal-routes.ts\"))\n        : null;\n    const nodeOpsRoutes = await import(resolve(params.functionsPath, \"../src/platform-node-ops.ts\")).catch(() => null);\n    registerPlatformInternalMiddleware(params.app);\n    await registerMediaWorkerStorageBridgeForRuntime(params, logger);\n    registerPlatformAppProxy({\n        app: params.app,\n        platformDomain: params.platformDomain,\n        subdomainRegex,\n        getBunServer: params.getBunServer,\n        async findActiveDomainApp(host) {\n            const rows = await params.db\n                .select({ name: appsTable.name })\n                .from(appsTable)\n                .where(andOp(eqOp(appsTable.customDomain, host), eqOp(appsTable.customDomainStatus, \"active\")));\n            return rows[0]?.name ?? null;\n        },\n        async findAppRow(appName) {\n            const rows = await params.db\n                .select({\n                id: appsTable.id,\n                name: appsTable.name,\n                port: appsTable.port,\n                status: appsTable.status,\n                statusReason: appsTable.statusReason,\n                dataDir: appsTable.dataDir,\n                staticDeployedAt: appsTable.staticDeployedAt,\n                hasBackend: appsTable.hasBackend,\n                plan: appsTable.plan,\n                customDomain: appsTable.customDomain,\n                customDomainStatus: appsTable.customDomainStatus,\n                nodeId: appsTable.nodeId,\n                ownerAccountHold: appsTable.ownerAccountHold,\n                ownerAccountHoldReason: appsTable.ownerAccountHoldReason,\n            })\n                .from(appsTable)\n                .where(eqOp(appsTable.name, appName));\n            return rows[0] ?? null;\n        },\n        currentNodeId: nodeProxyEnabled ? platformNodeId : null,\n        loadAppRouteNode: nodeProxyEnabled && platformNodes\n            ? async (nodeId) => {\n                const rows = await params.db\n                    .select({\n                    id: platformNodes.id,\n                    status: platformNodes.status,\n                    internalOrigin: platformNodes.internalOrigin,\n                    lastHeartbeatAt: platformNodes.lastHeartbeatAt,\n                })\n                    .from(platformNodes)\n                    .where(eqOp(platformNodes.id, nodeId))\n                    .limit(1);\n                return rows[0] ? buildServerPlatformNodeRouteRecord(rows[0]) : null;\n            }\n            : undefined,\n        proxyRemoteNodeRequest: nodeProxyEnabled && nodeProxyHttpClient\n            ? ({ c, host, appName, nodeId, origin, body }) => {\n                recordNodeRouteMetric({ protocol: \"http\", kind: \"remote\", appName });\n                return nodeProxyHttpClient.proxyRemoteNodeHttpRequest({\n                    request: c.req.raw,\n                    originalHost: host,\n                    origin,\n                    sourceNode: platformNodeId,\n                    targetNode: nodeId,\n                    keyId: nodeProxyKeyId,\n                    secret: nodeProxySecret,\n                    body,\n                });\n            }\n            : undefined,\n        proxyRemoteNodeWebSocket: nodeProxyEnabled\n            ? async ({ c, host, appName, nodeId, origin }) => {\n                recordNodeRouteMetric({ protocol: \"ws\", kind: \"remote\", appName });\n                return nodeProxyWsTunnel.createNodeProxyWsTunnelUpgradeResponse({\n                    server: params.getBunServer(),\n                    request: c.req.raw,\n                    originalHost: host,\n                    origin,\n                    sourceNode: platformNodeId,\n                    targetNode: nodeId,\n                    keyId: nodeProxyKeyId,\n                    secret: nodeProxySecret,\n                });\n            }\n            : undefined,\n        async markAppAsCrashed(appName) {\n            await params.db\n                .update(appsTable)\n                .set({\n                status: \"crashed\",\n                statusReason: \"user_code_exit\",\n                statusMessage: \"\uC571 \uB7F0\uD0C0\uC784 \uD504\uB85C\uC138\uC2A4\uAC00 \uBE44\uC815\uC0C1 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB85C\uADF8\uB97C \uD655\uC778\uD558\uC138\uC694.\",\n                statusUpdatedAt: new Date(),\n            })\n                .where(andOp(eqOp(appsTable.name, appName), eqOp(appsTable.hasBackend, true)));\n            logger.log(`[platform] ${appName}: runtime unreachable \u2192 DB status set to \"crashed\"`);\n        },\n        async markHasBackend(appName) {\n            await params.db.update(appsTable).set({ hasBackend: true }).where(eqOp(appsTable.name, appName));\n            logger.log(`[platform] ${appName}: hasBackend corrected false \u2192 true`);\n        },\n        generateInternalToken,\n        rawSql: params.rawSql,\n        platformStorageEnv: params.platformStorageBridgeEnv,\n        analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n        functionsPath: params.functionsPath,\n        ...storageDirectRuntime,\n        createProxyRequestReplayPlan,\n        buildAppRuntimeUnavailableResult,\n        ensureAppRuntimeReady,\n        getLivePort,\n        setAppPort,\n        removeAppPort,\n        removeAppPortIfEquals,\n        wakeApp,\n        provisionApp,\n        setAppMeta,\n        markLastAccess,\n        hasLiveRuntimeProcess,\n        resolveLiveRuntimePort,\n        reapRuntimeExits: reapWarmPoolStale,\n        logger,\n    });\n    logger.log(`[platform] Subdomain proxy enabled for *.${process.env.BASE_DOMAIN || \"gencow.app\"}`);\n    try {\n        await bootstrapPlatformAutoRecovery({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            appsTable,\n            eqOp,\n            andOp,\n            inArrayOp,\n            currentNodeId: platformNodeId,\n            logger,\n            fetchImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[platform] Auto-recovery failed:\", message);\n    }\n    registerUsageSnapshotCron({\n        platformPort: process.env.PORT || \"4100\",\n        logger,\n        fetchImpl,\n        setIntervalImpl,\n        setTimeoutImpl,\n    });\n    registerBillingMaintenanceCrons({\n        platformPort: process.env.PORT || \"4100\",\n        logger,\n        fetchImpl,\n        setIntervalImpl,\n        setTimeoutImpl,\n    });\n    registerPlatformSleepChecker({\n        functionsPath: params.functionsPath,\n        fetchAppStatuses: async () => (await params.db\n            .select({\n            name: appsTable.name,\n            status: appsTable.status,\n            hasBackend: appsTable.hasBackend,\n            parentAppId: appsTable.parentAppId,\n            nodeId: appsTable.nodeId,\n        })\n            .from(appsTable)),\n        logger,\n        setIntervalImpl,\n        currentNodeId: platformNodeId,\n    });\n    await registerPlatformCronScheduler({\n        functionsPath: params.functionsPath,\n        rawSql: params.rawSql,\n    });\n    const wakeSignalRuntime = await createPostgresWakeSignalRuntime({\n        rawSql: params.rawSql,\n        env: params.wakeSignalEnv,\n        logger,\n    }).catch((error) => {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.warn(`[wake-signal] PostgreSQL listener runtime disabled: ${message}`);\n        return null;\n    });\n    await registerScheduledJobsPoller({\n        functionsPath: params.functionsPath,\n        rawSql: params.rawSql,\n        cronExecTimeoutMs: FUNCTION_TIMEOUTS.cron,\n        logger,\n        wakeSignalBus: wakeSignalRuntime?.bus,\n    });\n    await ensurePlatformRuntimeStateTable(params.rawSql).catch((error) => {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.warn(`[platform] worker active-slot table init failed: ${message}`);\n    });\n    try {\n        await startPlatformEmailWorkerForRuntime({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            env: params.platformEmailEnv,\n            wakeSignalBus: wakeSignalRuntime?.bus,\n            isActiveWorker: createPlatformActiveSlotWorkerCheck({\n                rawSql: params.rawSql,\n                workerName: \"platform-email\",\n                logger,\n            }),\n            logger,\n            setIntervalImpl,\n            clearIntervalImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[platform-email] worker bootstrap failed:\", message);\n    }\n    try {\n        await startPlatformWebhookWorkerForRuntime({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            env: params.platformWebhookEnv,\n            wakeSignalBus: wakeSignalRuntime?.bus,\n            isActiveWorker: createPlatformActiveSlotWorkerCheck({\n                rawSql: params.rawSql,\n                workerName: \"platform-webhook\",\n                logger,\n            }),\n            logger,\n            fetchImpl,\n            setIntervalImpl,\n            clearIntervalImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[platform-webhook] worker bootstrap failed:\", message);\n    }\n    try {\n        await startPlatformAccountDeletionFinalizerForRuntime({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            env: params.platformAccountDeletionFinalizerEnv,\n            isActiveWorker: createPlatformActiveSlotWorkerCheck({\n                rawSql: params.rawSql,\n                workerName: \"account-deletion-finalizer\",\n                logger,\n            }),\n            logger,\n            setIntervalImpl,\n            clearIntervalImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[account-deletion-finalizer] worker bootstrap failed:\", message);\n    }\n    try {\n        const isActiveAiAudioWorker = createPlatformActiveSlotWorkerCheck({\n            rawSql: params.rawSql,\n            workerName: \"platform-ai-audio\",\n            logger,\n        });\n        await startPlatformAiAudioWorkerForRuntime({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            env: params.platformAiAudioWorkerEnv,\n            isActiveWorker: isActiveAiAudioWorker,\n            logger,\n            setIntervalImpl,\n            clearIntervalImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[platform-ai-audio] worker bootstrap failed:\", message);\n    }\n    registerCapacityRoute({ app: params.app, gateway: { getCapacity: getWakeCapacitySnapshot } });\n    startRuntimeMetricsSampler();\n    registerRuntimeMetricsRoute({ app: params.app, gateway: { getRuntimeMetrics: getRuntimeMetricsSnapshot } });\n    registerWakeSignalDiagnosticsRoute({\n        app: params.app,\n        getDiagnostics: () => wakeSignalRuntime?.getDiagnostics() ?? createDisabledWakeSignalDiagnostics(\"disabled\"),\n        getWorkerDiagnostics: () => getPlatformWorkerDiagnostics({ functionsPath: params.functionsPath }),\n    });\n    registerPlatformNodeOpsForRuntime({\n        nodeOpsRoutes,\n        app: params.app,\n        db: params.db,\n        appsTable,\n        platformNodes,\n        eqOp,\n        rawSql: params.rawSql,\n        platformDomain: params.platformDomain,\n        platformNodeId,\n        getCapacity: getWakeCapacitySnapshot,\n        getRuntimeMetrics: getRuntimeMetricsSnapshot,\n        getLivePort,\n        setIntervalImpl,\n        clearIntervalImpl,\n        logger,\n    });\n    registerRealtimeNotifyRoute({\n        app: params.app,\n        db: params.db,\n        appsTable,\n        eqOp,\n        gateway: wsGateway,\n        generateInternalToken,\n        logger,\n    });\n    registerNodeProxyInternalRoutesForRuntime({\n        nodeProxyEnabled,\n        nodeProxyInternalRoutes,\n        app: params.app,\n        db: params.db,\n        appsTable,\n        eqOp,\n        andOp,\n        rawSql: params.rawSql,\n        platformDomain: params.platformDomain,\n        subdomainRegex,\n        platformNodeId,\n        nodeProxyKeyId,\n        nodeProxySecret,\n        generateInternalToken,\n        getLivePort,\n        logger,\n    });\n    registerScheduledJobRoutes({\n        app: params.app,\n        rawSql: params.rawSql,\n        generateInternalToken,\n        logger,\n    });\n    params.app.get(\"/internal/ws-gateway/stats\", (c) => c.json(wsGateway.getStats()));\n    params.app.get(\"/internal/warm-pool/stats\", async (c) => {\n        try {\n            const { getWarmPoolStats } = await import(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n            return c.json(await getWarmPoolStats());\n        }\n        catch {\n            return c.json({ enabled: false, error: \"warm-pool not loaded\" });\n        }\n    });\n    try {\n        await startGatewayRealtimeUsageMeteringForRuntime({\n            functionsPath: params.functionsPath,\n            db: params.db,\n            logger,\n            setIntervalImpl,\n        });\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.error(\"[ws-gateway] realtime usage metering bootstrap failed:\", message);\n    }\n    wsGateway.startHeartbeat();\n    const limits = wsGateway.getGatewayLimits();\n    logger.log(`[ws-gateway] WS Gateway active (max ${limits.maxConnectionsPerApp}/app, ${limits.maxTotalConnections} total)`);\n}\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n  return (context, next) => {\n    let index = -1;\n    return dispatch(0);\n    async function dispatch(i) {\n      if (i <= index) {\n        throw new Error(\"next() called multiple times\");\n      }\n      index = i;\n      let res;\n      let isError = false;\n      let handler;\n      if (middleware[i]) {\n        handler = middleware[i][0][0];\n        context.req.routeIndex = i;\n      } else {\n        handler = i === middleware.length && next || void 0;\n      }\n      if (handler) {\n        try {\n          res = await handler(context, () => dispatch(i + 1));\n        } catch (err) {\n          if (err instanceof Error && onError) {\n            context.error = err;\n            res = await onError(err, context);\n            isError = true;\n          } else {\n            throw err;\n          }\n        }\n      } else {\n        if (context.finalized === false && onNotFound) {\n          res = await onNotFound(context);\n        }\n      }\n      if (res && (context.finalized === false || isError)) {\n        context.res = res;\n      }\n      return context;\n    }\n  };\n};\nexport {\n  compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n  GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n  const { all = false, dot = false } = options;\n  const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n  const contentType = headers.get(\"Content-Type\");\n  if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n    return parseFormData(request, { all, dot });\n  }\n  return {};\n};\nasync function parseFormData(request, options) {\n  const formData = await request.formData();\n  if (formData) {\n    return convertFormDataToBodyData(formData, options);\n  }\n  return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n  const form = /* @__PURE__ */ Object.create(null);\n  formData.forEach((value, key) => {\n    const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n    if (!shouldParseAllValues) {\n      form[key] = value;\n    } else {\n      handleParsingAllValues(form, key, value);\n    }\n  });\n  if (options.dot) {\n    Object.entries(form).forEach(([key, value]) => {\n      const shouldParseDotValues = key.includes(\".\");\n      if (shouldParseDotValues) {\n        handleParsingNestedValues(form, key, value);\n        delete form[key];\n      }\n    });\n  }\n  return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n  if (form[key] !== void 0) {\n    if (Array.isArray(form[key])) {\n      ;\n      form[key].push(value);\n    } else {\n      form[key] = [form[key], value];\n    }\n  } else {\n    if (!key.endsWith(\"[]\")) {\n      form[key] = value;\n    } else {\n      form[key] = [value];\n    }\n  }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n  if (/(?:^|\\.)__proto__\\./.test(key)) {\n    return;\n  }\n  let nestedForm = form;\n  const keys = key.split(\".\");\n  keys.forEach((key2, index) => {\n    if (index === keys.length - 1) {\n      nestedForm[key2] = value;\n    } else {\n      if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n        nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n      }\n      nestedForm = nestedForm[key2];\n    }\n  });\n};\nexport {\n  parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n  const paths = path.split(\"/\");\n  if (paths[0] === \"\") {\n    paths.shift();\n  }\n  return paths;\n};\nvar splitRoutingPath = (routePath) => {\n  const { groups, path } = extractGroupsFromPath(routePath);\n  const paths = splitPath(path);\n  return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n  const groups = [];\n  path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n    const mark = `@${index}`;\n    groups.push([mark, match]);\n    return mark;\n  });\n  return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n  for (let i = groups.length - 1; i >= 0; i--) {\n    const [mark] = groups[i];\n    for (let j = paths.length - 1; j >= 0; j--) {\n      if (paths[j].includes(mark)) {\n        paths[j] = paths[j].replace(mark, groups[i][1]);\n        break;\n      }\n    }\n  }\n  return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n  if (label === \"*\") {\n    return \"*\";\n  }\n  const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n  if (match) {\n    const cacheKey = `${label}#${next}`;\n    if (!patternCache[cacheKey]) {\n      if (match[2]) {\n        patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n      } else {\n        patternCache[cacheKey] = [label, match[1], true];\n      }\n    }\n    return patternCache[cacheKey];\n  }\n  return null;\n};\nvar tryDecode = (str, decoder) => {\n  try {\n    return decoder(str);\n  } catch {\n    return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n      try {\n        return decoder(match);\n      } catch {\n        return match;\n      }\n    });\n  }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n  const url = request.url;\n  const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n  let i = start;\n  for (; i < url.length; i++) {\n    const charCode = url.charCodeAt(i);\n    if (charCode === 37) {\n      const queryIndex = url.indexOf(\"?\", i);\n      const hashIndex = url.indexOf(\"#\", i);\n      const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n      const path = url.slice(start, end);\n      return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n    } else if (charCode === 63 || charCode === 35) {\n      break;\n    }\n  }\n  return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n  const queryIndex = url.indexOf(\"?\", 8);\n  return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n  const result = getPath(request);\n  return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n  if (rest.length) {\n    sub = mergePath(sub, ...rest);\n  }\n  return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n  if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n    return null;\n  }\n  const segments = path.split(\"/\");\n  const results = [];\n  let basePath = \"\";\n  segments.forEach((segment) => {\n    if (segment !== \"\" && !/\\:/.test(segment)) {\n      basePath += \"/\" + segment;\n    } else if (/\\:/.test(segment)) {\n      if (/\\?/.test(segment)) {\n        if (results.length === 0 && basePath === \"\") {\n          results.push(\"/\");\n        } else {\n          results.push(basePath);\n        }\n        const optionalSegment = segment.replace(\"?\", \"\");\n        basePath += \"/\" + optionalSegment;\n        results.push(basePath);\n      } else {\n        basePath += \"/\" + segment;\n      }\n    }\n  });\n  return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n  if (!/[%+]/.test(value)) {\n    return value;\n  }\n  if (value.indexOf(\"+\") !== -1) {\n    value = value.replace(/\\+/g, \" \");\n  }\n  return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n  let encoded;\n  if (!multiple && key && !/[%+]/.test(key)) {\n    let keyIndex2 = url.indexOf(\"?\", 8);\n    if (keyIndex2 === -1) {\n      return void 0;\n    }\n    if (!url.startsWith(key, keyIndex2 + 1)) {\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    while (keyIndex2 !== -1) {\n      const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n      if (trailingKeyCode === 61) {\n        const valueIndex = keyIndex2 + key.length + 2;\n        const endIndex = url.indexOf(\"&\", valueIndex);\n        return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n      } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n        return \"\";\n      }\n      keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n    }\n    encoded = /[%+]/.test(url);\n    if (!encoded) {\n      return void 0;\n    }\n  }\n  const results = {};\n  encoded ??= /[%+]/.test(url);\n  let keyIndex = url.indexOf(\"?\", 8);\n  while (keyIndex !== -1) {\n    const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n    let valueIndex = url.indexOf(\"=\", keyIndex);\n    if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n      valueIndex = -1;\n    }\n    let name = url.slice(\n      keyIndex + 1,\n      valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n    );\n    if (encoded) {\n      name = _decodeURI(name);\n    }\n    keyIndex = nextKeyIndex;\n    if (name === \"\") {\n      continue;\n    }\n    let value;\n    if (valueIndex === -1) {\n      value = \"\";\n    } else {\n      value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n      if (encoded) {\n        value = _decodeURI(value);\n      }\n    }\n    if (multiple) {\n      if (!(results[name] && Array.isArray(results[name]))) {\n        results[name] = [];\n      }\n      ;\n      results[name].push(value);\n    } else {\n      results[name] ??= value;\n    }\n  }\n  return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n  return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n  checkOptionalParameter,\n  decodeURIComponent_,\n  getPath,\n  getPathNoStrict,\n  getPattern,\n  getQueryParam,\n  getQueryParams,\n  getQueryStrings,\n  mergePath,\n  splitPath,\n  splitRoutingPath,\n  tryDecode,\n  tryDecodeURI\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n  /**\n   * `.raw` can get the raw Request object.\n   *\n   * @see {@link https://hono.dev/docs/api/request#raw}\n   *\n   * @example\n   * ```ts\n   * // For Cloudflare Workers\n   * app.post('/', async (c) => {\n   *   const metadata = c.req.raw.cf?.hostMetadata?\n   *   ...\n   * })\n   * ```\n   */\n  raw;\n  #validatedData;\n  // Short name of validatedData\n  #matchResult;\n  routeIndex = 0;\n  /**\n   * `.path` can get the pathname of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#path}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const pathname = c.req.path // `/about/me`\n   * })\n   * ```\n   */\n  path;\n  bodyCache = {};\n  constructor(request, path = \"/\", matchResult = [[]]) {\n    this.raw = request;\n    this.path = path;\n    this.#matchResult = matchResult;\n    this.#validatedData = {};\n  }\n  param(key) {\n    return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n  }\n  #getDecodedParam(key) {\n    const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n    const param = this.#getParamValue(paramKey);\n    return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n  }\n  #getAllDecodedParams() {\n    const decoded = {};\n    const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n    for (const key of keys) {\n      const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n      if (value !== void 0) {\n        decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n      }\n    }\n    return decoded;\n  }\n  #getParamValue(paramKey) {\n    return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n  }\n  query(key) {\n    return getQueryParam(this.url, key);\n  }\n  queries(key) {\n    return getQueryParams(this.url, key);\n  }\n  header(name) {\n    if (name) {\n      return this.raw.headers.get(name) ?? void 0;\n    }\n    const headerData = {};\n    this.raw.headers.forEach((value, key) => {\n      headerData[key] = value;\n    });\n    return headerData;\n  }\n  async parseBody(options) {\n    return parseBody(this, options);\n  }\n  #cachedBody = (key) => {\n    const { bodyCache, raw } = this;\n    const cachedBody = bodyCache[key];\n    if (cachedBody) {\n      return cachedBody;\n    }\n    const anyCachedKey = Object.keys(bodyCache)[0];\n    if (anyCachedKey) {\n      return bodyCache[anyCachedKey].then((body) => {\n        if (anyCachedKey === \"json\") {\n          body = JSON.stringify(body);\n        }\n        return new Response(body)[key]();\n      });\n    }\n    return bodyCache[key] = raw[key]();\n  };\n  /**\n   * `.json()` can parse Request body of type `application/json`\n   *\n   * @see {@link https://hono.dev/docs/api/request#json}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.json()\n   * })\n   * ```\n   */\n  json() {\n    return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n  }\n  /**\n   * `.text()` can parse Request body of type `text/plain`\n   *\n   * @see {@link https://hono.dev/docs/api/request#text}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.text()\n   * })\n   * ```\n   */\n  text() {\n    return this.#cachedBody(\"text\");\n  }\n  /**\n   * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n   *\n   * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n   *\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.arrayBuffer()\n   * })\n   * ```\n   */\n  arrayBuffer() {\n    return this.#cachedBody(\"arrayBuffer\");\n  }\n  /**\n   * Parses the request body as a `Blob`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.blob();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#blob\n   */\n  blob() {\n    return this.#cachedBody(\"blob\");\n  }\n  /**\n   * Parses the request body as `FormData`.\n   * @example\n   * ```ts\n   * app.post('/entry', async (c) => {\n   *   const body = await c.req.formData();\n   * });\n   * ```\n   * @see https://hono.dev/docs/api/request#formdata\n   */\n  formData() {\n    return this.#cachedBody(\"formData\");\n  }\n  /**\n   * Adds validated data to the request.\n   *\n   * @param target - The target of the validation.\n   * @param data - The validated data to add.\n   */\n  addValidatedData(target, data) {\n    this.#validatedData[target] = data;\n  }\n  valid(target) {\n    return this.#validatedData[target];\n  }\n  /**\n   * `.url()` can get the request url strings.\n   *\n   * @see {@link https://hono.dev/docs/api/request#url}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const url = c.req.url // `http://localhost:8787/about/me`\n   *   ...\n   * })\n   * ```\n   */\n  get url() {\n    return this.raw.url;\n  }\n  /**\n   * `.method()` can get the method name of the request.\n   *\n   * @see {@link https://hono.dev/docs/api/request#method}\n   *\n   * @example\n   * ```ts\n   * app.get('/about/me', (c) => {\n   *   const method = c.req.method // `GET`\n   * })\n   * ```\n   */\n  get method() {\n    return this.raw.method;\n  }\n  get [GET_MATCH_RESULT]() {\n    return this.#matchResult;\n  }\n  /**\n   * `.matchedRoutes()` can return a matched route in the handler\n   *\n   * @deprecated\n   *\n   * Use matchedRoutes helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async function logger(c, next) {\n   *   await next()\n   *   c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n   *     const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n   *     console.log(\n   *       method,\n   *       ' ',\n   *       path,\n   *       ' '.repeat(Math.max(10 - path.length, 0)),\n   *       name,\n   *       i === c.req.routeIndex ? '<- respond from here' : ''\n   *     )\n   *   })\n   * })\n   * ```\n   */\n  get matchedRoutes() {\n    return this.#matchResult[0].map(([[, route]]) => route);\n  }\n  /**\n   * `routePath()` can retrieve the path registered within the handler\n   *\n   * @deprecated\n   *\n   * Use routePath helper defined in \"hono/route\" instead.\n   *\n   * @see {@link https://hono.dev/docs/api/request#routepath}\n   *\n   * @example\n   * ```ts\n   * app.get('/posts/:id', (c) => {\n   *   return c.json({ path: c.req.routePath })\n   * })\n   * ```\n   */\n  get routePath() {\n    return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n  }\n};\nvar cloneRawRequest = async (req) => {\n  if (!req.raw.bodyUsed) {\n    return req.raw.clone();\n  }\n  const cacheKey = Object.keys(req.bodyCache)[0];\n  if (!cacheKey) {\n    throw new HTTPException(500, {\n      message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n    });\n  }\n  const requestInit = {\n    body: await req[cacheKey](),\n    cache: req.raw.cache,\n    credentials: req.raw.credentials,\n    headers: req.header(),\n    integrity: req.raw.integrity,\n    keepalive: req.raw.keepalive,\n    method: req.method,\n    mode: req.raw.mode,\n    redirect: req.raw.redirect,\n    referrer: req.raw.referrer,\n    referrerPolicy: req.raw.referrerPolicy,\n    signal: req.raw.signal\n  };\n  return new Request(req.url, requestInit);\n};\nexport {\n  HonoRequest,\n  cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n  Stringify: 1,\n  BeforeStream: 2,\n  Stream: 3\n};\nvar raw = (value, callbacks) => {\n  const escapedString = new String(value);\n  escapedString.isEscaped = true;\n  escapedString.callbacks = callbacks;\n  return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n  let str = \"\";\n  callbacks ||= [];\n  const resolvedBuffer = await Promise.all(buffer);\n  for (let i = resolvedBuffer.length - 1; ; i--) {\n    str += resolvedBuffer[i];\n    i--;\n    if (i < 0) {\n      break;\n    }\n    let r = resolvedBuffer[i];\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    const isEscaped = r.isEscaped;\n    r = await (typeof r === \"object\" ? r.toString() : r);\n    if (typeof r === \"object\") {\n      callbacks.push(...r.callbacks || []);\n    }\n    if (r.isEscaped ?? isEscaped) {\n      str += r;\n    } else {\n      const buf = [str];\n      escapeToBuffer(r, buf);\n      str = buf[0];\n    }\n  }\n  return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n  const match = str.search(escapeRe);\n  if (match === -1) {\n    buffer[0] += str;\n    return;\n  }\n  let escape;\n  let index;\n  let lastIndex = 0;\n  for (index = match; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escape = \"&quot;\";\n        break;\n      case 39:\n        escape = \"&#39;\";\n        break;\n      case 38:\n        escape = \"&amp;\";\n        break;\n      case 60:\n        escape = \"&lt;\";\n        break;\n      case 62:\n        escape = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    buffer[0] += str.substring(lastIndex, index) + escape;\n    lastIndex = index + 1;\n  }\n  buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return str;\n  }\n  const buffer = [str];\n  const context = {};\n  callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n  return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n  if (typeof str === \"object\" && !(str instanceof String)) {\n    if (!(str instanceof Promise)) {\n      str = str.toString();\n    }\n    if (str instanceof Promise) {\n      str = await str;\n    }\n  }\n  const callbacks = str.callbacks;\n  if (!callbacks?.length) {\n    return Promise.resolve(str);\n  }\n  if (buffer) {\n    buffer[0] += str;\n  } else {\n    buffer = [str];\n  }\n  const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n    (res) => Promise.all(\n      res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n    ).then(() => buffer[0])\n  );\n  if (preserveCallbacks) {\n    return raw(await resStr, callbacks);\n  } else {\n    return resStr;\n  }\n};\nexport {\n  HtmlEscapedCallbackPhase,\n  escapeToBuffer,\n  raw,\n  resolveCallback,\n  resolveCallbackSync,\n  stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n  return {\n    \"Content-Type\": contentType,\n    ...headers\n  };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n  #rawRequest;\n  #req;\n  /**\n   * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#env}\n   *\n   * @example\n   * ```ts\n   * // Environment object for Cloudflare Workers\n   * app.get('*', async c => {\n   *   const counter = c.env.COUNTER\n   * })\n   * ```\n   */\n  env = {};\n  #var;\n  finalized = false;\n  /**\n   * `.error` can get the error object from the middleware if the Handler throws an error.\n   *\n   * @see {@link https://hono.dev/docs/api/context#error}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   await next()\n   *   if (c.error) {\n   *     // do something...\n   *   }\n   * })\n   * ```\n   */\n  error;\n  #status;\n  #executionCtx;\n  #res;\n  #layout;\n  #renderer;\n  #notFoundHandler;\n  #preparedHeaders;\n  #matchResult;\n  #path;\n  /**\n   * Creates an instance of the Context class.\n   *\n   * @param req - The Request object.\n   * @param options - Optional configuration options for the context.\n   */\n  constructor(req, options) {\n    this.#rawRequest = req;\n    if (options) {\n      this.#executionCtx = options.executionCtx;\n      this.env = options.env;\n      this.#notFoundHandler = options.notFoundHandler;\n      this.#path = options.path;\n      this.#matchResult = options.matchResult;\n    }\n  }\n  /**\n   * `.req` is the instance of {@link HonoRequest}.\n   */\n  get req() {\n    this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n    return this.#req;\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#event}\n   * The FetchEvent associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have a FetchEvent.\n   */\n  get event() {\n    if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no FetchEvent\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#executionctx}\n   * The ExecutionContext associated with the current request.\n   *\n   * @throws Will throw an error if the context does not have an ExecutionContext.\n   */\n  get executionCtx() {\n    if (this.#executionCtx) {\n      return this.#executionCtx;\n    } else {\n      throw Error(\"This context has no ExecutionContext\");\n    }\n  }\n  /**\n   * @see {@link https://hono.dev/docs/api/context#res}\n   * The Response object for the current request.\n   */\n  get res() {\n    return this.#res ||= createResponseInstance(null, {\n      headers: this.#preparedHeaders ??= new Headers()\n    });\n  }\n  /**\n   * Sets the Response object for the current request.\n   *\n   * @param _res - The Response object to set.\n   */\n  set res(_res) {\n    if (this.#res && _res) {\n      _res = createResponseInstance(_res.body, _res);\n      for (const [k, v] of this.#res.headers.entries()) {\n        if (k === \"content-type\") {\n          continue;\n        }\n        if (k === \"set-cookie\") {\n          const cookies = this.#res.headers.getSetCookie();\n          _res.headers.delete(\"set-cookie\");\n          for (const cookie of cookies) {\n            _res.headers.append(\"set-cookie\", cookie);\n          }\n        } else {\n          _res.headers.set(k, v);\n        }\n      }\n    }\n    this.#res = _res;\n    this.finalized = true;\n  }\n  /**\n   * `.render()` can create a response within a layout.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   return c.render('Hello!')\n   * })\n   * ```\n   */\n  render = (...args) => {\n    this.#renderer ??= (content) => this.html(content);\n    return this.#renderer(...args);\n  };\n  /**\n   * Sets the layout for the response.\n   *\n   * @param layout - The layout to set.\n   * @returns The layout function.\n   */\n  setLayout = (layout) => this.#layout = layout;\n  /**\n   * Gets the current layout for the response.\n   *\n   * @returns The current layout function.\n   */\n  getLayout = () => this.#layout;\n  /**\n   * `.setRenderer()` can set the layout in the custom middleware.\n   *\n   * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n   *\n   * @example\n   * ```tsx\n   * app.use('*', async (c, next) => {\n   *   c.setRenderer((content) => {\n   *     return c.html(\n   *       <html>\n   *         <body>\n   *           <p>{content}</p>\n   *         </body>\n   *       </html>\n   *     )\n   *   })\n   *   await next()\n   * })\n   * ```\n   */\n  setRenderer = (renderer) => {\n    this.#renderer = renderer;\n  };\n  /**\n   * `.header()` can set headers.\n   *\n   * @see {@link https://hono.dev/docs/api/context#header}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  header = (name, value, options) => {\n    if (this.finalized) {\n      this.#res = createResponseInstance(this.#res.body, this.#res);\n    }\n    const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n    if (value === void 0) {\n      headers.delete(name);\n    } else if (options?.append) {\n      headers.append(name, value);\n    } else {\n      headers.set(name, value);\n    }\n  };\n  status = (status) => {\n    this.#status = status;\n  };\n  /**\n   * `.set()` can set the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.use('*', async (c, next) => {\n   *   c.set('message', 'Hono is hot!!')\n   *   await next()\n   * })\n   * ```\n   */\n  set = (key, value) => {\n    this.#var ??= /* @__PURE__ */ new Map();\n    this.#var.set(key, value);\n  };\n  /**\n   * `.get()` can use the value specified by the key.\n   *\n   * @see {@link https://hono.dev/docs/api/context#set-get}\n   *\n   * @example\n   * ```ts\n   * app.get('/', (c) => {\n   *   const message = c.get('message')\n   *   return c.text(`The message is \"${message}\"`)\n   * })\n   * ```\n   */\n  get = (key) => {\n    return this.#var ? this.#var.get(key) : void 0;\n  };\n  /**\n   * `.var` can access the value of a variable.\n   *\n   * @see {@link https://hono.dev/docs/api/context#var}\n   *\n   * @example\n   * ```ts\n   * const result = c.var.client.oneMethod()\n   * ```\n   */\n  // c.var.propName is a read-only\n  get var() {\n    if (!this.#var) {\n      return {};\n    }\n    return Object.fromEntries(this.#var);\n  }\n  #newResponse(data, arg, headers) {\n    const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n    if (typeof arg === \"object\" && \"headers\" in arg) {\n      const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n      for (const [key, value] of argHeaders) {\n        if (key.toLowerCase() === \"set-cookie\") {\n          responseHeaders.append(key, value);\n        } else {\n          responseHeaders.set(key, value);\n        }\n      }\n    }\n    if (headers) {\n      for (const [k, v] of Object.entries(headers)) {\n        if (typeof v === \"string\") {\n          responseHeaders.set(k, v);\n        } else {\n          responseHeaders.delete(k);\n          for (const v2 of v) {\n            responseHeaders.append(k, v2);\n          }\n        }\n      }\n    }\n    const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n    return createResponseInstance(data, { status, headers: responseHeaders });\n  }\n  newResponse = (...args) => this.#newResponse(...args);\n  /**\n   * `.body()` can return the HTTP response.\n   * You can set headers with `.header()` and set HTTP status code with `.status`.\n   * This can also be set in `.text()`, `.json()` and so on.\n   *\n   * @see {@link https://hono.dev/docs/api/context#body}\n   *\n   * @example\n   * ```ts\n   * app.get('/welcome', (c) => {\n   *   // Set headers\n   *   c.header('X-Message', 'Hello!')\n   *   c.header('Content-Type', 'text/plain')\n   *   // Set HTTP status code\n   *   c.status(201)\n   *\n   *   // Return the response body\n   *   return c.body('Thank you for coming')\n   * })\n   * ```\n   */\n  body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n  /**\n   * `.text()` can render text as `Content-Type:text/plain`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#text}\n   *\n   * @example\n   * ```ts\n   * app.get('/say', (c) => {\n   *   return c.text('Hello!')\n   * })\n   * ```\n   */\n  text = (text, arg, headers) => {\n    return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n      text,\n      arg,\n      setDefaultContentType(TEXT_PLAIN, headers)\n    );\n  };\n  /**\n   * `.json()` can render JSON as `Content-Type:application/json`.\n   *\n   * @see {@link https://hono.dev/docs/api/context#json}\n   *\n   * @example\n   * ```ts\n   * app.get('/api', (c) => {\n   *   return c.json({ message: 'Hello!' })\n   * })\n   * ```\n   */\n  json = (object, arg, headers) => {\n    return this.#newResponse(\n      JSON.stringify(object),\n      arg,\n      setDefaultContentType(\"application/json\", headers)\n    );\n  };\n  html = (html, arg, headers) => {\n    const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n    return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n  };\n  /**\n   * `.redirect()` can Redirect, default status code is 302.\n   *\n   * @see {@link https://hono.dev/docs/api/context#redirect}\n   *\n   * @example\n   * ```ts\n   * app.get('/redirect', (c) => {\n   *   return c.redirect('/')\n   * })\n   * app.get('/redirect-permanently', (c) => {\n   *   return c.redirect('/', 301)\n   * })\n   * ```\n   */\n  redirect = (location, status) => {\n    const locationString = String(location);\n    this.header(\n      \"Location\",\n      // Multibyes should be encoded\n      // eslint-disable-next-line no-control-regex\n      !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n    );\n    return this.newResponse(null, status ?? 302);\n  };\n  /**\n   * `.notFound()` can return the Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/context#notfound}\n   *\n   * @example\n   * ```ts\n   * app.get('/notfound', (c) => {\n   *   return c.notFound()\n   * })\n   * ```\n   */\n  notFound = () => {\n    this.#notFoundHandler ??= () => createResponseInstance();\n    return this.#notFoundHandler(this);\n  };\n};\nexport {\n  Context,\n  TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHODS,\n  METHOD_NAME_ALL,\n  METHOD_NAME_ALL_LOWERCASE,\n  UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n  COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n  return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n  if (\"getResponse\" in err) {\n    const res = err.getResponse();\n    return c.newResponse(res.body, res);\n  }\n  console.error(err);\n  return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n  get;\n  post;\n  put;\n  delete;\n  options;\n  patch;\n  all;\n  on;\n  use;\n  /*\n    This class is like an abstract class and does not have a router.\n    To use it, inherit the class and implement router in the constructor.\n  */\n  router;\n  getPath;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  _basePath = \"/\";\n  #path = \"/\";\n  routes = [];\n  constructor(options = {}) {\n    const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n    allMethods.forEach((method) => {\n      this[method] = (args1, ...args) => {\n        if (typeof args1 === \"string\") {\n          this.#path = args1;\n        } else {\n          this.#addRoute(method, this.#path, args1);\n        }\n        args.forEach((handler) => {\n          this.#addRoute(method, this.#path, handler);\n        });\n        return this;\n      };\n    });\n    this.on = (method, path, ...handlers) => {\n      for (const p of [path].flat()) {\n        this.#path = p;\n        for (const m of [method].flat()) {\n          handlers.map((handler) => {\n            this.#addRoute(m.toUpperCase(), this.#path, handler);\n          });\n        }\n      }\n      return this;\n    };\n    this.use = (arg1, ...handlers) => {\n      if (typeof arg1 === \"string\") {\n        this.#path = arg1;\n      } else {\n        this.#path = \"*\";\n        handlers.unshift(arg1);\n      }\n      handlers.forEach((handler) => {\n        this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n      });\n      return this;\n    };\n    const { strict, ...optionsWithoutStrict } = options;\n    Object.assign(this, optionsWithoutStrict);\n    this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n  }\n  #clone() {\n    const clone = new _Hono({\n      router: this.router,\n      getPath: this.getPath\n    });\n    clone.errorHandler = this.errorHandler;\n    clone.#notFoundHandler = this.#notFoundHandler;\n    clone.routes = this.routes;\n    return clone;\n  }\n  #notFoundHandler = notFoundHandler;\n  // Cannot use `#` because it requires visibility at JavaScript runtime.\n  errorHandler = errorHandler;\n  /**\n   * `.route()` allows grouping other Hono instance in routes.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#grouping}\n   *\n   * @param {string} path - base Path\n   * @param {Hono} app - other Hono instance\n   * @returns {Hono} routed Hono instance\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * const app2 = new Hono()\n   *\n   * app2.get(\"/user\", (c) => c.text(\"user\"))\n   * app.route(\"/api\", app2) // GET /api/user\n   * ```\n   */\n  route(path, app) {\n    const subApp = this.basePath(path);\n    app.routes.map((r) => {\n      let handler;\n      if (app.errorHandler === errorHandler) {\n        handler = r.handler;\n      } else {\n        handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n        handler[COMPOSED_HANDLER] = r.handler;\n      }\n      subApp.#addRoute(r.method, r.path, handler);\n    });\n    return this;\n  }\n  /**\n   * `.basePath()` allows base paths to be specified.\n   *\n   * @see {@link https://hono.dev/docs/api/routing#base-path}\n   *\n   * @param {string} path - base Path\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * const api = new Hono().basePath('/api')\n   * ```\n   */\n  basePath(path) {\n    const subApp = this.#clone();\n    subApp._basePath = mergePath(this._basePath, path);\n    return subApp;\n  }\n  /**\n   * `.onError()` handles an error and returns a customized Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#error-handling}\n   *\n   * @param {ErrorHandler} handler - request Handler for error\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.onError((err, c) => {\n   *   console.error(`${err}`)\n   *   return c.text('Custom Error Message', 500)\n   * })\n   * ```\n   */\n  onError = (handler) => {\n    this.errorHandler = handler;\n    return this;\n  };\n  /**\n   * `.notFound()` allows you to customize a Not Found Response.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#not-found}\n   *\n   * @param {NotFoundHandler} handler - request handler for not-found\n   * @returns {Hono} changed Hono instance\n   *\n   * @example\n   * ```ts\n   * app.notFound((c) => {\n   *   return c.text('Custom 404 Message', 404)\n   * })\n   * ```\n   */\n  notFound = (handler) => {\n    this.#notFoundHandler = handler;\n    return this;\n  };\n  /**\n   * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#mount}\n   *\n   * @param {string} path - base Path\n   * @param {Function} applicationHandler - other Request Handler\n   * @param {MountOptions} [options] - options of `.mount()`\n   * @returns {Hono} mounted Hono instance\n   *\n   * @example\n   * ```ts\n   * import { Router as IttyRouter } from 'itty-router'\n   * import { Hono } from 'hono'\n   * // Create itty-router application\n   * const ittyRouter = IttyRouter()\n   * // GET /itty-router/hello\n   * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n   *\n   * const app = new Hono()\n   * app.mount('/itty-router', ittyRouter.handle)\n   * ```\n   *\n   * @example\n   * ```ts\n   * const app = new Hono()\n   * // Send the request to another application without modification.\n   * app.mount('/app', anotherApp, {\n   *   replaceRequest: (req) => req,\n   * })\n   * ```\n   */\n  mount(path, applicationHandler, options) {\n    let replaceRequest;\n    let optionHandler;\n    if (options) {\n      if (typeof options === \"function\") {\n        optionHandler = options;\n      } else {\n        optionHandler = options.optionHandler;\n        if (options.replaceRequest === false) {\n          replaceRequest = (request) => request;\n        } else {\n          replaceRequest = options.replaceRequest;\n        }\n      }\n    }\n    const getOptions = optionHandler ? (c) => {\n      const options2 = optionHandler(c);\n      return Array.isArray(options2) ? options2 : [options2];\n    } : (c) => {\n      let executionContext = void 0;\n      try {\n        executionContext = c.executionCtx;\n      } catch {\n      }\n      return [c.env, executionContext];\n    };\n    replaceRequest ||= (() => {\n      const mergedPath = mergePath(this._basePath, path);\n      const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n      return (request) => {\n        const url = new URL(request.url);\n        url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n        return new Request(url, request);\n      };\n    })();\n    const handler = async (c, next) => {\n      const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n      if (res) {\n        return res;\n      }\n      await next();\n    };\n    this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n    return this;\n  }\n  #addRoute(method, path, handler) {\n    method = method.toUpperCase();\n    path = mergePath(this._basePath, path);\n    const r = { basePath: this._basePath, path, method, handler };\n    this.router.add(method, path, [handler, r]);\n    this.routes.push(r);\n  }\n  #handleError(err, c) {\n    if (err instanceof Error) {\n      return this.errorHandler(err, c);\n    }\n    throw err;\n  }\n  #dispatch(request, executionCtx, env, method) {\n    if (method === \"HEAD\") {\n      return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n    }\n    const path = this.getPath(request, { env });\n    const matchResult = this.router.match(method, path);\n    const c = new Context(request, {\n      path,\n      matchResult,\n      env,\n      executionCtx,\n      notFoundHandler: this.#notFoundHandler\n    });\n    if (matchResult[0].length === 1) {\n      let res;\n      try {\n        res = matchResult[0][0][0][0](c, async () => {\n          c.res = await this.#notFoundHandler(c);\n        });\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n      return res instanceof Promise ? res.then(\n        (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n      ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n    }\n    const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n    return (async () => {\n      try {\n        const context = await composed(c);\n        if (!context.finalized) {\n          throw new Error(\n            \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n          );\n        }\n        return context.res;\n      } catch (err) {\n        return this.#handleError(err, c);\n      }\n    })();\n  }\n  /**\n   * `.fetch()` will be entry point of your app.\n   *\n   * @see {@link https://hono.dev/docs/api/hono#fetch}\n   *\n   * @param {Request} request - request Object of request\n   * @param {Env} Env - env Object\n   * @param {ExecutionContext} - context of execution\n   * @returns {Response | Promise<Response>} response of request\n   *\n   */\n  fetch = (request, ...rest) => {\n    return this.#dispatch(request, rest[1], rest[0], request.method);\n  };\n  /**\n   * `.request()` is a useful method for testing.\n   * You can pass a URL or pathname to send a GET request.\n   * app will return a Response object.\n   * ```ts\n   * test('GET /hello is ok', async () => {\n   *   const res = await app.request('/hello')\n   *   expect(res.status).toBe(200)\n   * })\n   * ```\n   * @see https://hono.dev/docs/api/hono#request\n   */\n  request = (input, requestInit, Env, executionCtx) => {\n    if (input instanceof Request) {\n      return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n    }\n    input = input.toString();\n    return this.fetch(\n      new Request(\n        /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n        requestInit\n      ),\n      Env,\n      executionCtx\n    );\n  };\n  /**\n   * `.fire()` automatically adds a global fetch event listener.\n   * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n   * @deprecated\n   * Use `fire` from `hono/service-worker` instead.\n   * ```ts\n   * import { Hono } from 'hono'\n   * import { fire } from 'hono/service-worker'\n   *\n   * const app = new Hono()\n   * // ...\n   * fire(app)\n   * ```\n   * @see https://hono.dev/docs/api/hono#fire\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n   * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n   */\n  fire = () => {\n    addEventListener(\"fetch\", (event) => {\n      event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n    });\n  };\n};\nexport {\n  Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n  const matchers = this.buildAllMatchers();\n  const match2 = ((method2, path2) => {\n    const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n    const staticMatch = matcher[2][path2];\n    if (staticMatch) {\n      return staticMatch;\n    }\n    const match3 = path2.match(matcher[0]);\n    if (!match3) {\n      return [[], emptyParam];\n    }\n    const index = match3.indexOf(\"\", 1);\n    return [matcher[1][index], match3];\n  });\n  this.match = match2;\n  return match2(method, path);\n}\nexport {\n  emptyParam,\n  match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n  if (a.length === 1) {\n    return b.length === 1 ? a < b ? -1 : 1 : -1;\n  }\n  if (b.length === 1) {\n    return 1;\n  }\n  if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n    return 1;\n  } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n    return -1;\n  }\n  if (a === LABEL_REG_EXP_STR) {\n    return 1;\n  } else if (b === LABEL_REG_EXP_STR) {\n    return -1;\n  }\n  return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n  #index;\n  #varIndex;\n  #children = /* @__PURE__ */ Object.create(null);\n  insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n    if (tokens.length === 0) {\n      if (this.#index !== void 0) {\n        throw PATH_ERROR;\n      }\n      if (pathErrorCheckOnly) {\n        return;\n      }\n      this.#index = index;\n      return;\n    }\n    const [token, ...restTokens] = tokens;\n    const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n    let node;\n    if (pattern) {\n      const name = pattern[1];\n      let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n      if (name && pattern[2]) {\n        if (regexpStr === \".*\") {\n          throw PATH_ERROR;\n        }\n        regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n        if (/\\((?!\\?:)/.test(regexpStr)) {\n          throw PATH_ERROR;\n        }\n      }\n      node = this.#children[regexpStr];\n      if (!node) {\n        if (Object.keys(this.#children).some(\n          (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n        )) {\n          throw PATH_ERROR;\n        }\n        if (pathErrorCheckOnly) {\n          return;\n        }\n        node = this.#children[regexpStr] = new _Node();\n        if (name !== \"\") {\n          node.#varIndex = context.varIndex++;\n        }\n      }\n      if (!pathErrorCheckOnly && name !== \"\") {\n        paramMap.push([name, node.#varIndex]);\n      }\n    } else {\n      node = this.#children[token];\n      if (!node) {\n        if (Object.keys(this.#children).some(\n          (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n        )) {\n          throw PATH_ERROR;\n        }\n        if (pathErrorCheckOnly) {\n          return;\n        }\n        node = this.#children[token] = new _Node();\n      }\n    }\n    node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n  }\n  buildRegExpStr() {\n    const childKeys = Object.keys(this.#children).sort(compareKey);\n    const strList = childKeys.map((k) => {\n      const c = this.#children[k];\n      return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n    });\n    if (typeof this.#index === \"number\") {\n      strList.unshift(`#${this.#index}`);\n    }\n    if (strList.length === 0) {\n      return \"\";\n    }\n    if (strList.length === 1) {\n      return strList[0];\n    }\n    return \"(?:\" + strList.join(\"|\") + \")\";\n  }\n};\nexport {\n  Node,\n  PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n  #context = { varIndex: 0 };\n  #root = new Node();\n  insert(path, index, pathErrorCheckOnly) {\n    const paramAssoc = [];\n    const groups = [];\n    for (let i = 0; ; ) {\n      let replaced = false;\n      path = path.replace(/\\{[^}]+\\}/g, (m) => {\n        const mark = `@\\\\${i}`;\n        groups[i] = [mark, m];\n        i++;\n        replaced = true;\n        return mark;\n      });\n      if (!replaced) {\n        break;\n      }\n    }\n    const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n    for (let i = groups.length - 1; i >= 0; i--) {\n      const [mark] = groups[i];\n      for (let j = tokens.length - 1; j >= 0; j--) {\n        if (tokens[j].indexOf(mark) !== -1) {\n          tokens[j] = tokens[j].replace(mark, groups[i][1]);\n          break;\n        }\n      }\n    }\n    this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n    return paramAssoc;\n  }\n  buildRegExp() {\n    let regexp = this.#root.buildRegExpStr();\n    if (regexp === \"\") {\n      return [/^$/, [], []];\n    }\n    let captureIndex = 0;\n    const indexReplacementMap = [];\n    const paramReplacementMap = [];\n    regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n      if (handlerIndex !== void 0) {\n        indexReplacementMap[++captureIndex] = Number(handlerIndex);\n        return \"$()\";\n      }\n      if (paramIndex !== void 0) {\n        paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n        return \"\";\n      }\n      return \"\";\n    });\n    return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n  }\n};\nexport {\n  Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n  MESSAGE_MATCHER_IS_ALREADY_BUILT,\n  METHOD_NAME_ALL,\n  UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n  return wildcardRegExpCache[path] ??= new RegExp(\n    path === \"*\" ? \"\" : `^${path.replace(\n      /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n      (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n    )}$`\n  );\n}\nfunction clearWildcardRegExpCache() {\n  wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n  const trie = new Trie();\n  const handlerData = [];\n  if (routes.length === 0) {\n    return nullMatcher;\n  }\n  const routesWithStaticPathFlag = routes.map(\n    (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n  ).sort(\n    ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n  );\n  const staticMap = /* @__PURE__ */ Object.create(null);\n  for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n    const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n    if (pathErrorCheckOnly) {\n      staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n    } else {\n      j++;\n    }\n    let paramAssoc;\n    try {\n      paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n    } catch (e) {\n      throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n    }\n    if (pathErrorCheckOnly) {\n      continue;\n    }\n    handlerData[j] = handlers.map(([h, paramCount]) => {\n      const paramIndexMap = /* @__PURE__ */ Object.create(null);\n      paramCount -= 1;\n      for (; paramCount >= 0; paramCount--) {\n        const [key, value] = paramAssoc[paramCount];\n        paramIndexMap[key] = value;\n      }\n      return [h, paramIndexMap];\n    });\n  }\n  const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n  for (let i = 0, len = handlerData.length; i < len; i++) {\n    for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n      const map = handlerData[i][j]?.[1];\n      if (!map) {\n        continue;\n      }\n      const keys = Object.keys(map);\n      for (let k = 0, len3 = keys.length; k < len3; k++) {\n        map[keys[k]] = paramReplacementMap[map[keys[k]]];\n      }\n    }\n  }\n  const handlerMap = [];\n  for (const i in indexReplacementMap) {\n    handlerMap[i] = handlerData[indexReplacementMap[i]];\n  }\n  return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n  if (!middleware) {\n    return void 0;\n  }\n  for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n    if (buildWildcardRegExp(k).test(path)) {\n      return [...middleware[k]];\n    }\n  }\n  return void 0;\n}\nvar RegExpRouter = class {\n  name = \"RegExpRouter\";\n  #middleware;\n  #routes;\n  constructor() {\n    this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n    this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n  }\n  add(method, path, handler) {\n    const middleware = this.#middleware;\n    const routes = this.#routes;\n    if (!middleware || !routes) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    if (!middleware[method]) {\n      ;\n      [middleware, routes].forEach((handlerMap) => {\n        handlerMap[method] = /* @__PURE__ */ Object.create(null);\n        Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n          handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n        });\n      });\n    }\n    if (path === \"/*\") {\n      path = \"*\";\n    }\n    const paramCount = (path.match(/\\/:/g) || []).length;\n    if (/\\*$/.test(path)) {\n      const re = buildWildcardRegExp(path);\n      if (method === METHOD_NAME_ALL) {\n        Object.keys(middleware).forEach((m) => {\n          middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n        });\n      } else {\n        middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n      }\n      Object.keys(middleware).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          Object.keys(middleware[m]).forEach((p) => {\n            re.test(p) && middleware[m][p].push([handler, paramCount]);\n          });\n        }\n      });\n      Object.keys(routes).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          Object.keys(routes[m]).forEach(\n            (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n          );\n        }\n      });\n      return;\n    }\n    const paths = checkOptionalParameter(path) || [path];\n    for (let i = 0, len = paths.length; i < len; i++) {\n      const path2 = paths[i];\n      Object.keys(routes).forEach((m) => {\n        if (method === METHOD_NAME_ALL || method === m) {\n          routes[m][path2] ||= [\n            ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n          ];\n          routes[m][path2].push([handler, paramCount - len + i + 1]);\n        }\n      });\n    }\n  }\n  match = match;\n  buildAllMatchers() {\n    const matchers = /* @__PURE__ */ Object.create(null);\n    Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n      matchers[method] ||= this.#buildMatcher(method);\n    });\n    this.#middleware = this.#routes = void 0;\n    clearWildcardRegExpCache();\n    return matchers;\n  }\n  #buildMatcher(method) {\n    const routes = [];\n    let hasOwnRoute = method === METHOD_NAME_ALL;\n    [this.#middleware, this.#routes].forEach((r) => {\n      const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n      if (ownRoute.length !== 0) {\n        hasOwnRoute ||= true;\n        routes.push(...ownRoute);\n      } else if (method !== METHOD_NAME_ALL) {\n        routes.push(\n          ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n        );\n      }\n    });\n    if (!hasOwnRoute) {\n      return null;\n    } else {\n      return buildMatcherFromPreprocessedRoutes(routes);\n    }\n  }\n};\nexport {\n  RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n  name = \"SmartRouter\";\n  #routers = [];\n  #routes = [];\n  constructor(init) {\n    this.#routers = init.routers;\n  }\n  add(method, path, handler) {\n    if (!this.#routes) {\n      throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n    }\n    this.#routes.push([method, path, handler]);\n  }\n  match(method, path) {\n    if (!this.#routes) {\n      throw new Error(\"Fatal error\");\n    }\n    const routers = this.#routers;\n    const routes = this.#routes;\n    const len = routers.length;\n    let i = 0;\n    let res;\n    for (; i < len; i++) {\n      const router = routers[i];\n      try {\n        for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n          router.add(...routes[i2]);\n        }\n        res = router.match(method, path);\n      } catch (e) {\n        if (e instanceof UnsupportedPathError) {\n          continue;\n        }\n        throw e;\n      }\n      this.match = router.match.bind(router);\n      this.#routers = [router];\n      this.#routes = void 0;\n      break;\n    }\n    if (i === len) {\n      throw new Error(\"Fatal error\");\n    }\n    this.name = `SmartRouter + ${this.activeRouter.name}`;\n    return res;\n  }\n  get activeRouter() {\n    if (this.#routes || this.#routers.length !== 1) {\n      throw new Error(\"No active router has been determined yet.\");\n    }\n    return this.#routers[0];\n  }\n};\nexport {\n  SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar hasChildren = (children) => {\n  for (const _ in children) {\n    return true;\n  }\n  return false;\n};\nvar Node = class _Node {\n  #methods;\n  #children;\n  #patterns;\n  #order = 0;\n  #params = emptyParams;\n  constructor(method, handler, children) {\n    this.#children = children || /* @__PURE__ */ Object.create(null);\n    this.#methods = [];\n    if (method && handler) {\n      const m = /* @__PURE__ */ Object.create(null);\n      m[method] = { handler, possibleKeys: [], score: 0 };\n      this.#methods = [m];\n    }\n    this.#patterns = [];\n  }\n  insert(method, path, handler) {\n    this.#order = ++this.#order;\n    let curNode = this;\n    const parts = splitRoutingPath(path);\n    const possibleKeys = [];\n    for (let i = 0, len = parts.length; i < len; i++) {\n      const p = parts[i];\n      const nextP = parts[i + 1];\n      const pattern = getPattern(p, nextP);\n      const key = Array.isArray(pattern) ? pattern[0] : p;\n      if (key in curNode.#children) {\n        curNode = curNode.#children[key];\n        if (pattern) {\n          possibleKeys.push(pattern[1]);\n        }\n        continue;\n      }\n      curNode.#children[key] = new _Node();\n      if (pattern) {\n        curNode.#patterns.push(pattern);\n        possibleKeys.push(pattern[1]);\n      }\n      curNode = curNode.#children[key];\n    }\n    curNode.#methods.push({\n      [method]: {\n        handler,\n        possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n        score: this.#order\n      }\n    });\n    return curNode;\n  }\n  #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n    for (let i = 0, len = node.#methods.length; i < len; i++) {\n      const m = node.#methods[i];\n      const handlerSet = m[method] || m[METHOD_NAME_ALL];\n      const processedSet = {};\n      if (handlerSet !== void 0) {\n        handlerSet.params = /* @__PURE__ */ Object.create(null);\n        handlerSets.push(handlerSet);\n        if (nodeParams !== emptyParams || params && params !== emptyParams) {\n          for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n            const key = handlerSet.possibleKeys[i2];\n            const processed = processedSet[handlerSet.score];\n            handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n            processedSet[handlerSet.score] = true;\n          }\n        }\n      }\n    }\n  }\n  search(method, path) {\n    const handlerSets = [];\n    this.#params = emptyParams;\n    const curNode = this;\n    let curNodes = [curNode];\n    const parts = splitPath(path);\n    const curNodesQueue = [];\n    const len = parts.length;\n    let partOffsets = null;\n    for (let i = 0; i < len; i++) {\n      const part = parts[i];\n      const isLast = i === len - 1;\n      const tempNodes = [];\n      for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n        const node = curNodes[j];\n        const nextNode = node.#children[part];\n        if (nextNode) {\n          nextNode.#params = node.#params;\n          if (isLast) {\n            if (nextNode.#children[\"*\"]) {\n              this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n            }\n            this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n          } else {\n            tempNodes.push(nextNode);\n          }\n        }\n        for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n          const pattern = node.#patterns[k];\n          const params = node.#params === emptyParams ? {} : { ...node.#params };\n          if (pattern === \"*\") {\n            const astNode = node.#children[\"*\"];\n            if (astNode) {\n              this.#pushHandlerSets(handlerSets, astNode, method, node.#params);\n              astNode.#params = params;\n              tempNodes.push(astNode);\n            }\n            continue;\n          }\n          const [key, name, matcher] = pattern;\n          if (!part && !(matcher instanceof RegExp)) {\n            continue;\n          }\n          const child = node.#children[key];\n          if (matcher instanceof RegExp) {\n            if (partOffsets === null) {\n              partOffsets = new Array(len);\n              let offset = path[0] === \"/\" ? 1 : 0;\n              for (let p = 0; p < len; p++) {\n                partOffsets[p] = offset;\n                offset += parts[p].length + 1;\n              }\n            }\n            const restPathString = path.substring(partOffsets[i]);\n            const m = matcher.exec(restPathString);\n            if (m) {\n              params[name] = m[0];\n              this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n              if (hasChildren(child.#children)) {\n                child.#params = params;\n                const componentCount = m[0].match(/\\//)?.length ?? 0;\n                const targetCurNodes = curNodesQueue[componentCount] ||= [];\n                targetCurNodes.push(child);\n              }\n              continue;\n            }\n          }\n          if (matcher === true || matcher.test(part)) {\n            params[name] = part;\n            if (isLast) {\n              this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n              if (child.#children[\"*\"]) {\n                this.#pushHandlerSets(\n                  handlerSets,\n                  child.#children[\"*\"],\n                  method,\n                  params,\n                  node.#params\n                );\n              }\n            } else {\n              child.#params = params;\n              tempNodes.push(child);\n            }\n          }\n        }\n      }\n      const shifted = curNodesQueue.shift();\n      curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n    }\n    if (handlerSets.length > 1) {\n      handlerSets.sort((a, b) => {\n        return a.score - b.score;\n      });\n    }\n    return [handlerSets.map(({ handler, params }) => [handler, params])];\n  }\n};\nexport {\n  Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n  name = \"TrieRouter\";\n  #node;\n  constructor() {\n    this.#node = new Node();\n  }\n  add(method, path, handler) {\n    const results = checkOptionalParameter(path);\n    if (results) {\n      for (let i = 0, len = results.length; i < len; i++) {\n        this.#node.insert(method, results[i], handler);\n      }\n      return;\n    }\n    this.#node.insert(method, path, handler);\n  }\n  match(method, path) {\n    return this.#node.search(method, path);\n  }\n};\nexport {\n  TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n  /**\n   * Creates an instance of the Hono class.\n   *\n   * @param options - Optional configuration options for the Hono instance.\n   */\n  constructor(options = {}) {\n    super(options);\n    this.router = options.router ?? new SmartRouter({\n      routers: [new RegExpRouter(), new TrieRouter()]\n    });\n  }\n};\nexport {\n  Hono\n};\n", "// src/utils/color.ts\nfunction getColorEnabled() {\n  const { process, Deno } = globalThis;\n  const isNoColor = typeof Deno?.noColor === \"boolean\" ? Deno.noColor : process !== void 0 ? (\n    // eslint-disable-next-line no-unsafe-optional-chaining\n    \"NO_COLOR\" in process?.env\n  ) : false;\n  return !isNoColor;\n}\nasync function getColorEnabledAsync() {\n  const { navigator } = globalThis;\n  const cfWorkers = \"cloudflare:workers\";\n  const isNoColor = navigator !== void 0 && navigator.userAgent === \"Cloudflare-Workers\" ? await (async () => {\n    try {\n      return \"NO_COLOR\" in ((await import(cfWorkers)).env ?? {});\n    } catch {\n      return false;\n    }\n  })() : !getColorEnabled();\n  return !isNoColor;\n}\nexport {\n  getColorEnabled,\n  getColorEnabledAsync\n};\n", "// src/middleware/logger/index.ts\nimport { getColorEnabledAsync } from \"../../utils/color.js\";\nvar humanize = (times) => {\n  const [delimiter, separator] = [\",\", \".\"];\n  const orderTimes = times.map((v) => v.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + delimiter));\n  return orderTimes.join(separator);\n};\nvar time = (start) => {\n  const delta = Date.now() - start;\n  return humanize([delta < 1e3 ? delta + \"ms\" : Math.round(delta / 1e3) + \"s\"]);\n};\nvar colorStatus = async (status) => {\n  const colorEnabled = await getColorEnabledAsync();\n  if (colorEnabled) {\n    switch (status / 100 | 0) {\n      case 5:\n        return `\\x1B[31m${status}\\x1B[0m`;\n      case 4:\n        return `\\x1B[33m${status}\\x1B[0m`;\n      case 3:\n        return `\\x1B[36m${status}\\x1B[0m`;\n      case 2:\n        return `\\x1B[32m${status}\\x1B[0m`;\n    }\n  }\n  return `${status}`;\n};\nasync function log(fn, prefix, method, path, status = 0, elapsed) {\n  const out = prefix === \"<--\" /* Incoming */ ? `${prefix} ${method} ${path}` : `${prefix} ${method} ${path} ${await colorStatus(status)} ${elapsed}`;\n  fn(out);\n}\nvar logger = (fn = console.log) => {\n  return async function logger2(c, next) {\n    const { method, url } = c.req;\n    const path = url.slice(url.indexOf(\"/\", 8));\n    await log(fn, \"<--\" /* Incoming */, method, path);\n    const start = Date.now();\n    await next();\n    await log(fn, \"-->\" /* Outgoing */, method, path, c.res.status, time(start));\n  };\n};\nexport {\n  logger\n};\n", "/**\n * packages/server/src/index.ts\n *\n * Gencow Server Runtime \u2014 Pure framework, no app-specific code.\n *\n * App functions are loaded dynamically from GENCOW_FUNCTIONS env var.\n * This is how Convex works: the runtime runs your convex/ functions.\n *\n * Usage:\n *   GENCOW_FUNCTIONS=../../apps/tests/e2e/gencow PORT=3456 tsx src/index.ts\n */\nimport { Hono } from \"hono\";\nimport { logger } from \"hono/logger\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { createDatabase } from \"./database\";\nimport { applyRuntimeEnvSnapshot, parseRuntimeEnvContent } from \"./env-runtime.js\";\nimport { setupRuntimeEnvHotReload } from \"./server-env-runtime-bootstrap.js\";\nimport { loadAppModule, loadAuthAdapterSchema, loadAuthConfig, loadProjectConfig, resolveFunctionsPath, resolveMigrationsPath, } from \"./server-bootstrap.js\";\nimport { executeWithTimeout } from \"./server-execution.js\";\nimport { readShutdownReasonFromMarker, startFallbackServer } from \"./server-lifecycle.js\";\nimport { bootstrapRuntimeSystemSchemas } from \"./server-system-schema-bootstrap.js\";\nimport { bootstrapServerMainRuntime } from \"./server-main-runtime.js\";\nimport { createAnalyticsSqlRuntime } from \"./server-analytics-db.js\";\nimport { createServerWebsocketRuntime, } from \"./server-websocket-runtime.js\";\nimport { redactRequestLogMessage } from \"./server-request-log-redaction.js\";\nimport { parseArgs } from \"@gencow/core\";\nimport { initAuth, betterAuthMiddleware, betterAuthHandler, sendAdminVerificationEmail } from \"./better-auth\";\nimport { createRuntimeStorage } from \"./storage.js\";\nimport { isLegacyLocalFallbackEnabled, normalizeRuntimeStorageBackend, readAzureBlobRuntimeOptionsFromEnv, } from \"./storage-config.js\";\nimport { resolveStorageLimitConfig } from \"./storage-limit-config.js\";\nimport { createSettingsRoutes, captureEnvSnapshot, loadDbEnvVars, sanitizeSystemEnvVars } from \"./settings\";\nimport { getSecretKey } from \"./crypto\";\nimport { createPlatformFailoverClients, RuntimeBuffer } from \"./platform-failover\";\nimport { loadPlatformRuntimeConfigFile } from \"./server-platform-config-file\";\nimport { createAdminAccessPolicy, resolveAdminSurfaceAccess } from \"./server-admin-access.js\";\nimport { resolveAuthRuntimeDb } from \"./server-auth-runtime-db.js\";\nimport { createPlatformSystemDb } from \"./server-platform-rls.js\";\nimport { resolveCorsOrigin, resolveOriginPolicy } from \"./server-origin-policy.js\";\nimport { createRuntimeCorsMiddleware } from \"./server-host-aware-cors.js\";\nimport { resolveServerRuntimeMode } from \"./server-runtime-mode.js\";\nimport { capturePlatformMediaWorkerStorageAuthSecret, capturePlatformStorageBridgeEnv, } from \"./server-platform-media-worker-storage-runtime.js\";\nimport { createOfficialDomainCanonicalRedirectMiddleware } from \"./server-official-domain-canonical.js\";\nimport { createServerStartupTimingRecorder, formatServerStartupTimingLog, } from \"./server-startup-timing.js\";\nimport { backendStatusClass, calculateBackendRequestBillableMs, checkPlatformSpendCapForRequest, classifyPlatformRequestPath, createPlatformSpendCapCache, readBackendRequestMaxBillableMs, shouldEnforcePlatformSpendCap, shouldProcessPlatformRequestClassification, } from \"./server-spend-cap\";\nimport { meterResponseBandwidth } from \"./response-bandwidth-meter.js\";\n// \u2500\u2500\u2500 BaaS Usage Metering (Layer 2 \u2014 Runtime \uBD88\uBCC0 \uCF54\uB4DC) \u2500\u2500\u2500\u2500\n//\n// BaaS \uBC30\uD3EC \uC2DC Platform\uC774 GENCOW_METERING_URL + GENCOW_INTERNAL_TOKEN\uC744 \uC8FC\uC785.\n// \uB85C\uCEEC dev\uC5D0\uC11C\uB294 metering \uBE44\uD65C\uC131.\nloadPlatformRuntimeConfigFile({ logger: console });\nconst METERING_URL = process.env.GENCOW_METERING_URL;\nconst METERING_URL_ALT = process.env.GENCOW_METERING_URL_ALT;\nconst RUNTIME_MODE = resolveServerRuntimeMode();\nconst IS_BAAS = RUNTIME_MODE.isBaas;\nconst IS_PLATFORM = RUNTIME_MODE.isPlatform;\nconst INTERNAL_TOKEN = process.env.GENCOW_INTERNAL_TOKEN || \"\";\nconst APP_NAME = process.env.GENCOW_APP_NAME || \"\";\nconst APP_DB_ID = process.env.GENCOW_APP_DB_ID || \"\";\nconst RUNTIME_METERING_DISABLED = process.env.GENCOW_RUNTIME_METERING_DISABLED === \"1\" ||\n    process.env.GENCOW_RUNTIME_METERING_DISABLED === \"true\";\nconst WAKE_SIGNAL_ENV = {\n    GENCOW_WAKE_SIGNAL_ENABLED: process.env.GENCOW_WAKE_SIGNAL_ENABLED,\n    GENCOW_WAKE_SIGNAL_DATABASE_URL: process.env.GENCOW_WAKE_SIGNAL_DATABASE_URL,\n};\n// WS Gateway: BaaS \uBAA8\uB4DC\uC5D0\uC11C realtime.emit() / refresh() \u2192 Platform Gateway HTTP callback\n// GENCOW_METERING_URL\uC774 \uC788\uC73C\uBA74 BaaS \uBAA8\uB4DC \u2192 Platform\uC774 \uB85C\uCEF8\uD638\uC2A4\uD2B8\uC5D0 \uC788\uC73C\uBBC0\uB85C METERING_URL \uC7AC\uC0AC\uC6A9\nconst PLATFORM_INTERNAL_URL = process.env.GENCOW_PLATFORM_INTERNAL_URL || METERING_URL;\nconst PLATFORM_INTERNAL_URL_ALT = process.env.GENCOW_PLATFORM_INTERNAL_URL_ALT || METERING_URL_ALT;\nconst { fetchPlatformInternal, notifyGateway } = createPlatformFailoverClients({\n    platformInternalUrl: PLATFORM_INTERNAL_URL,\n    platformInternalUrlAlt: PLATFORM_INTERNAL_URL_ALT,\n    internalToken: INTERNAL_TOKEN,\n    appName: APP_NAME,\n});\nconst runtimeBuffer = new RuntimeBuffer();\nconst platformSpendCapCache = createPlatformSpendCapCache();\nconst BACKEND_REQUEST_MAX_BILLABLE_MS = readBackendRequestMaxBillableMs(process.env);\n/** WS \uC811\uC18D \uC2DC\uC791 \uC2DC\uAC01 \uAE30\uB85D */\nconst wsTimers = new WeakMap();\nlet bunServer = null; // set after Bun.serve()\n// \u2500\u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst app = new Hono();\nlet runtimeProjectConfig;\nlet runtimeManagedPublicOrigins;\n// \u2500\u2500\u2500 Middleware \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/** \uD50C\uB7AB\uD3FC \uAE30\uBCF8 \uB3C4\uBA54\uC778 \u2014 \uD658\uACBD\uBCC0\uC218 1\uD68C \uC77D\uAE30. CORS + \uD504\uB85D\uC2DC MW\uC5D0\uC11C \uC7AC\uC0AC\uC6A9 */\nconst PLATFORM_DOMAIN = process.env.BASE_DOMAIN || \"gencow.app\";\nif (IS_PLATFORM) {\n    app.use(\"*\", createOfficialDomainCanonicalRedirectMiddleware(PLATFORM_DOMAIN));\n}\nfunction resolveRuntimeOriginPolicy() {\n    return resolveOriginPolicy({\n        baseDomain: PLATFORM_DOMAIN,\n        appPublicDomain: process.env.APP_PUBLIC_DOMAIN,\n        capturedBaseURL: process.env.BETTER_AUTH_URL,\n        managedPublicOrigins: runtimeManagedPublicOrigins ?? process.env.GENCOW_MANAGED_PUBLIC_ORIGINS,\n        frontendOrigins: runtimeProjectConfig?.frontendOrigins,\n        projectTrustedOrigins: runtimeProjectConfig?.trustedOrigins,\n        corsOriginsEnv: process.env.CORS_ORIGINS,\n    });\n}\napp.use(\"*\", createRuntimeCorsMiddleware({\n    isPlatform: IS_PLATFORM,\n    platformDomain: PLATFORM_DOMAIN,\n    resolveOrigin: (origin) => resolveCorsOrigin(origin, resolveRuntimeOriginPolicy()),\n}));\n// \u2500\u2500 HTTP \uB85C\uADF8 \u2014 \uC778\uD504\uB77C \uACBD\uB85C \uAE30\uBCF8 suppress \u2500\u2500\n// /_admin/*, /_dashboard/*, /ws, /api/auth/** \uB294 \uAC1C\uBC1C \uC911 \uB178\uC774\uC988.\n// GENCOW_VERBOSE=true \uB610\uB294 --verbose \uC2DC \uC804\uCCB4 \uB85C\uADF8 \uD65C\uC131\uD654.\nconst VERBOSE = process.env.GENCOW_VERBOSE === \"true\";\nconst SUPPRESS_PREFIXES = [\"/_admin\", \"/_dashboard\", \"/api/auth\"];\napp.use(\"*\", async (c, next) => {\n    const path = c.req.path;\n    if (!VERBOSE && (path === \"/ws\" || SUPPRESS_PREFIXES.some((p) => path.startsWith(p)))) {\n        return next(); // \uB85C\uADF8 \uC5C6\uC774 \uD1B5\uACFC\n    }\n    // Hono logger \uC2E4\uD589\n    return logger((message, ...rest) => {\n        console.log(redactRequestLogMessage(message), ...rest);\n    })(c, next);\n});\n// \u2500\u2500 x-gencow-platform \uC2DD\uBCC4 \uD5E4\uB354 \u2500\u2500\n// \uCEE4\uC2A4\uD140 \uB3C4\uBA54\uC778 HTTP \uAC80\uC99D\uC6A9 (Cloudflare \uD504\uB85D\uC2DC \uB4F1\uC5D0\uC11C DNS \uC9C1\uC811 \uB9E4\uCE6D \uBD88\uAC00 \uC2DC)\napp.use(\"*\", async (c, next) => {\n    await next();\n    c.header(\"x-gencow-platform\", \"1\");\n});\n// \u2500\u2500 BaaS \uD1B5\uD569 Metering \uBBF8\uB4E4\uC6E8\uC5B4 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// API \uD638\uCD9C \uCE74\uC6B4\uD2B8, \uC751\uB2F5 \uC2DC\uAC04, Bandwidth\uB97C \uBBF8\uB4E4\uC6E8\uC5B4\uC5D0\uC11C \uCE21\uC815.\n// 401 early return\uC2DC\uC5D0\uB3C4 \uCE74\uC6B4\uD2B8\uB418\uB3C4\uB85D \uD578\uB4E4\uB7EC \uBC16\uC5D0\uC11C \uCE21\uC815.\nif (IS_BAAS && !RUNTIME_METERING_DISABLED) {\n    app.use(\"*\", async (c, next) => {\n        const path = c.req.path;\n        const metering = classifyPlatformRequestPath(path);\n        if (!shouldProcessPlatformRequestClassification(metering)) {\n            return next();\n        }\n        if (shouldEnforcePlatformSpendCap(metering)) {\n            const spendCap = await checkPlatformSpendCapForRequest({\n                internalToken: INTERNAL_TOKEN,\n                appName: APP_NAME,\n                appDbId: APP_DB_ID,\n                cache: platformSpendCapCache,\n                fetchPlatformInternal,\n                logger: console,\n            });\n            if (!spendCap.allowed) {\n                return c.json({\n                    error: \"Platform spend cap exceeded\",\n                    code: \"platform_spend_cap_exceeded\",\n                    remaining: spendCap.remaining ?? 0,\n                }, 402);\n            }\n        }\n        const start = Date.now();\n        await next();\n        const observedMs = Math.max(0, Date.now() - start);\n        const billableMs = metering.meterFunctionMs\n            ? calculateBackendRequestBillableMs(observedMs, BACKEND_REQUEST_MAX_BILLABLE_MS)\n            : 0;\n        if (metering.meterApiCall)\n            runtimeBuffer.add(\"api_calls\", 1);\n        if (metering.meterFunctionMs)\n            runtimeBuffer.add(\"function_ms\", billableMs);\n        if (metering.recordRouteUsage) {\n            runtimeBuffer.addBackendRouteUsage({\n                category: metering.category,\n                routePattern: metering.routePattern,\n                statusClass: backendStatusClass(c.res?.status),\n                requestCount: 1,\n                observedMs,\n                billableMs,\n                cappedRequests: metering.meterFunctionMs && billableMs < observedMs ? 1 : 0,\n                maxObservedMs: observedMs,\n            });\n        }\n        // Bandwidth (\uBAA8\uB4E0 \uBE44\uC778\uD504\uB77C \uACBD\uB85C): body\uB97C clone/read \uD558\uC9C0 \uC54A\uACE0 \uD1B5\uACFC chunk\uB9CC \uACC4\uCE21.\n        if (metering.meterBandwidth) {\n            try {\n                const bandwidthMetric = metering.category === \"hosted_storage\" ? \"storage_bandwidth_bytes\" : \"bandwidth_bytes\";\n                c.res = meterResponseBandwidth(c.res, (bytes) => runtimeBuffer.add(bandwidthMetric, bytes));\n            }\n            catch {\n                // metering \uC2E4\uD328\uB294 \uBB34\uC2DC (metering \uB204\uB77D > \uC571 \uC911\uB2E8)\n            }\n        }\n    });\n}\n// better-auth \uBBF8\uB4E4\uC6E8\uC5B4 + \uB77C\uC6B0\uD2B8 \uD578\uB4E4\uB7EC\uB294 DB \uCD08\uAE30\uD654 \uD6C4 main()\uC5D0\uC11C \uB4F1\uB85D.\n// \u26A0\uFE0F IS_PLATFORM \uBAA8\uB4DC\uC5D0\uC11C \uD504\uB85D\uC2DC \uBBF8\uB4E4\uC6E8\uC5B4\uBCF4\uB2E4 \uB4A4\uC5D0 \uB4F1\uB85D\uD574\uC57C \uD568 (\uC11C\uBE0C\uB3C4\uBA54\uC778 \uC694\uCCAD\uC774 \uC571 \uC11C\uBC84\uB85C \uC804\uB2EC\uB418\uB3C4\uB85D).\n// \u2500\u2500\u2500 Bootstrap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function main() {\n    const _mainStart = performance.now();\n    const isWarmWorker = process.env.GENCOW_WARM_WORKER === \"true\";\n    const startupTiming = createServerStartupTimingRecorder({\n        runtimePath: isWarmWorker ? \"warm\" : \"direct\",\n        processStartElapsedMs: isWarmWorker ? 0 : process.uptime() * 1000,\n    });\n    const _t = (label) => {\n        if (isWarmWorker) {\n            console.log(`[warm-timing] ${label}: ${(performance.now() - _mainStart).toFixed(0)}ms`);\n        }\n    };\n    // \u2500\u2500 1. Load app functions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // GENCOW_FUNCTIONS points to the app's gencow/ folder (like convex/).\n    // Importing it registers all query/mutation handlers and injects db.\n    //\n    const functionsPath = resolveFunctionsPath();\n    console.log(`[gencow] Loading functions from: ${functionsPath}`);\n    const appModule = await loadAppModule({\n        functionsPath,\n        isWarmWorker,\n        onTiming: _t,\n        startupTiming,\n    });\n    // \u2500\u2500 2. Initialize DB (\u2B50 Promise.all \uBCD1\uB82C\uD654) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // Database \uCD08\uAE30\uD654\uC640 auth config import\uB97C \uBCD1\uB82C\uB85C \uC2E4\uD589.\n    // \uB450 \uC791\uC5C5\uC740 \uC644\uC804\uD788 \uB3C5\uB9BD\uC801\uC774\uBBC0\uB85C \uC548\uC804.\n    //\n    _t(\"pre-db\");\n    // \u2B50 \uBCD1\uB82C \uC2E4\uD589: DB \uCD08\uAE30\uD654 + auth/project config import (\uB3C5\uB9BD\uC801 \uC791\uC5C5)\n    const { dbResult, authConfig, projectConfig, authSchema } = await startupTiming.measure(\"database_auth\", async () => {\n        const [nextDbResult, nextAuthConfig, nextProjectConfig] = await Promise.all([\n            createDatabase(),\n            loadAuthConfig(functionsPath),\n            loadProjectConfig(functionsPath),\n        ]);\n        const nextAuthSchema = await loadAuthAdapterSchema(functionsPath, nextProjectConfig, {\n            isPlatform: IS_PLATFORM,\n        });\n        return {\n            dbResult: nextDbResult,\n            authConfig: nextAuthConfig,\n            projectConfig: nextProjectConfig,\n            authSchema: nextAuthSchema,\n        };\n    });\n    runtimeProjectConfig = projectConfig;\n    runtimeManagedPublicOrigins = process.env.GENCOW_MANAGED_PUBLIC_ORIGINS;\n    const { db, systemDb, rawSql, systemRawSql, migrate, close, driver } = dbResult;\n    const stopPreSchemaSetupTiming = startupTiming.start(\"runtime_setup\");\n    const platformSystemDb = createPlatformSystemDb(db, { isPlatform: IS_PLATFORM });\n    const authRuntimeDb = resolveAuthRuntimeDb({\n        db,\n        systemDb,\n        platformSystemDb,\n        isBaas: IS_BAAS,\n        isPlatform: IS_PLATFORM,\n    });\n    _t(\"post-db\");\n    const migrationsFolder = resolveMigrationsPath();\n    if (process.env.GENCOW_SKIP_MIGRATION === \"true\") {\n        console.log(\"[db] migrations skipped (GENCOW_SKIP_MIGRATION=true)\");\n    }\n    else {\n        try {\n            await migrate(migrationsFolder);\n            console.log(\"[db] migrations applied \u2713\");\n        }\n        catch (e) {\n            const msg = e?.message ?? String(e);\n            console.error(\"[db] \u274C Migration failed:\", msg);\n            console.error(\"[db] \u2500\u2500 Run: gencow db:reset (\uC790\uB3D9 \uBC31\uC5C5 \uD6C4 \uB9AC\uC14B)\");\n            console.error(\"[db] \u2500\u2500 \u26A0\uFE0F rm -rf \uD558\uC9C0 \uB9C8\uC138\uC694! \uB370\uC774\uD130\uAC00 \uC601\uAD6C \uC0AD\uC81C\uB429\uB2C8\uB2E4.\");\n            // BaaS \uC571\uC740 fail-fast, \uB85C\uCEEC dev\uB294 fallback \uC11C\uBC84\uB85C \uB300\uAE30\n            if (IS_BAAS)\n                process.exit(1);\n            throw new Error(`Migration failed: ${msg}`);\n        }\n    }\n    stopPreSchemaSetupTiming();\n    // \u2500\u2500 2c. Workflow system tables \u2014 app DB durable execution state \u2500\u2500\n    // BaaS\uC5D0\uC11C\uB294 provisioner\uAC00 superuser\uB85C \uC120\uD589 \uC0DD\uC131\uD55C\uB2E4.\n    // \uC571 \uB7F0\uD0C0\uC784(gencow_app_user)\uC740 DML only \uC774\uBBC0\uB85C \uBD80\uD305 \uC2DC DDL\uC744 \uC2DC\uB3C4\uD558\uBA74 permission denied\uAC00 \uBC1C\uC0DD\uD55C\uB2E4.\n    await startupTiming.measure(\"system_schema\", () => bootstrapRuntimeSystemSchemas({\n        rawSql: rawSql,\n        isBaas: IS_BAAS,\n        isPlatform: IS_PLATFORM,\n        logger: console,\n    }));\n    // \u2500\u2500 3. Initialize Storage \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const stopPostSchemaSetupTiming = startupTiming.start(\"runtime_setup\");\n    const storageDir = process.env.GENCOW_STORAGE || \"./uploads\";\n    const storageBackend = IS_BAAS\n        ? normalizeRuntimeStorageBackend(process.env.GENCOW_STORAGE_BACKEND)\n        : \"local-filesystem\";\n    const platformStorageBridgeEnv = IS_PLATFORM\n        ? capturePlatformStorageBridgeEnv(process.env)\n        : undefined;\n    const platformMediaWorkerStorageAuthSecret = IS_PLATFORM\n        ? capturePlatformMediaWorkerStorageAuthSecret(process.env)\n        : undefined;\n    const storageLimits = resolveStorageLimitConfig(process.env);\n    const storage = createRuntimeStorage({\n        mode: IS_BAAS ? \"platform\" : \"local\",\n        storageDir,\n        storageBackend,\n        legacyLocalFallback: isLegacyLocalFallbackEnabled(process.env.GENCOW_STORAGE_LEGACY_LOCAL_FALLBACK),\n        azureBlob: storageBackend === \"azure_blob\" ? readAzureBlobRuntimeOptionsFromEnv(process.env) : undefined,\n        rawSql,\n        storageQuotaBytes: storageLimits.storageQuotaBytes,\n        maxFileSizeBytes: storageLimits.maxFileSizeBytes,\n        apiUploadMaxFileSizeBytes: storageLimits.apiUploadMaxFileSizeBytes,\n        appName: APP_NAME,\n        readGrantSecret: INTERNAL_TOKEN,\n    });\n    // \u2500\u2500 3-1. Initialize Auth (\u2B50 Lazy Loading) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // auth config\uB294 \uC704 Promise.all\uC5D0\uC11C \uC774\uBBF8 \uB85C\uB4DC\uB428.\n    // initAuth()\uB294 config\uB9CC \uC800\uC7A5 (betterAuth() \uD638\uCD9C \uC548 \uD568).\n    // \uC2E4\uC81C better-auth \uCD08\uAE30\uD654\uB294 \uCCAB auth \uC694\uCCAD \uC2DC ensureAuth()\uC5D0\uC11C \uC2E4\uD589.\n    //\n    initAuth(authRuntimeDb, authConfig, projectConfig, { authSchema });\n    if (IS_PLATFORM) {\n        const { registerAdminVerificationEmailIssuer } = await import(resolve(functionsPath, \"admin-user-verification-runtime.ts\"));\n        registerAdminVerificationEmailIssuer(sendAdminVerificationEmail);\n    }\n    app.use(\"*\", betterAuthMiddleware(authRuntimeDb));\n    console.log(\"[auth] better-auth configured (lazy \u2014 loads on first auth request) \u2713\");\n    _t(\"post-auth\");\n    stopPostSchemaSetupTiming();\n    // \u2500\u2500 3-2. Initialize Settings (Environment Variables) \u2500\u2500\u2500\u2500\u2500\n    //\n    // 1. .env\uC5D0\uC11C \uB85C\uB4DC\uB41C \uD658\uACBD\uBCC0\uC218\uB97C \uC2A4\uB0C5\uC0F7 (DB \uBCC0\uC218\uC640 \uAD6C\uBD84 \uC6A9\uB3C4)\n    // 2. secret.key \uC900\uBE44 (\uC5C6\uC73C\uBA74 \uC790\uB3D9 \uC0DD\uC131)\n    // 3. DB\uC5D0 \uC800\uC7A5\uB41C \uD658\uACBD\uBCC0\uC218\uB97C process.env\uC5D0 \uC8FC\uC785 (.env \uAC12 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uC74C)\n    //\n    const stopSettingsTiming = startupTiming.start(\"settings_env\");\n    captureEnvSnapshot(); // .env \uC6D0\uBCF8 \uBCF4\uC874\n    getSecretKey(); // \uC554\uD638\uD654 \uD0A4 \uC900\uBE44\n    const adminSurfaceAccess = resolveAdminSurfaceAccess({ isBaas: IS_BAAS, isPlatform: IS_PLATFORM });\n    const settingsRoutes = createSettingsRoutes(rawSql, {\n        accessPolicy: createAdminAccessPolicy(adminSurfaceAccess),\n    });\n    const loadedCount = await loadDbEnvVars(rawSql);\n    if (loadedCount > 0) {\n        console.log(`[settings] Loaded ${loadedCount} env var(s) from DB \u2713`);\n    }\n    const analyticsSqlRuntime = await createAnalyticsSqlRuntime({\n        fallbackRawSql: systemRawSql,\n        logger: console,\n    });\n    const platformEmailEnv = {\n        RESEND_API_KEY: process.env.RESEND_API_KEY,\n        PLATFORM_EMAIL_FROM: process.env.PLATFORM_EMAIL_FROM,\n        PLATFORM_EMAIL_WORKER_DISABLED: process.env.PLATFORM_EMAIL_WORKER_DISABLED,\n        PLATFORM_EMAIL_WORKER_INTERVAL_MS: process.env.PLATFORM_EMAIL_WORKER_INTERVAL_MS,\n        PLATFORM_EMAIL_WORKER_BATCH_SIZE: process.env.PLATFORM_EMAIL_WORKER_BATCH_SIZE,\n        PLATFORM_EMAIL_WORKER_MAX_ATTEMPTS: process.env.PLATFORM_EMAIL_WORKER_MAX_ATTEMPTS,\n    };\n    const platformWebhookEnv = {\n        PLATFORM_WEBHOOK_WORKER_DISABLED: process.env.PLATFORM_WEBHOOK_WORKER_DISABLED,\n        PLATFORM_WEBHOOK_WORKER_INTERVAL_MS: process.env.PLATFORM_WEBHOOK_WORKER_INTERVAL_MS,\n        PLATFORM_WEBHOOK_WORKER_BATCH_SIZE: process.env.PLATFORM_WEBHOOK_WORKER_BATCH_SIZE,\n        PLATFORM_WEBHOOK_WORKER_MAX_ATTEMPTS: process.env.PLATFORM_WEBHOOK_WORKER_MAX_ATTEMPTS,\n        PLATFORM_WEBHOOK_WORKER_TIMEOUT_MS: process.env.PLATFORM_WEBHOOK_WORKER_TIMEOUT_MS,\n    };\n    const platformAccountDeletionFinalizerEnv = {\n        GENCOW_ACCOUNT_DELETION_FINALIZER_DISABLED: process.env.GENCOW_ACCOUNT_DELETION_FINALIZER_DISABLED,\n        GENCOW_ACCOUNT_DELETION_FINALIZER_INTERVAL_MS: process.env.GENCOW_ACCOUNT_DELETION_FINALIZER_INTERVAL_MS,\n        GENCOW_ACCOUNT_DELETION_FINALIZER_BATCH_SIZE: process.env.GENCOW_ACCOUNT_DELETION_FINALIZER_BATCH_SIZE,\n        GENCOW_ACCOUNT_DELETION_FINALIZER_MAX_ATTEMPTS: process.env.GENCOW_ACCOUNT_DELETION_FINALIZER_MAX_ATTEMPTS,\n    };\n    const platformAiAudioWorkerEnv = {\n        PLATFORM_AI_AUDIO_WORKER_ENABLED: process.env.PLATFORM_AI_AUDIO_WORKER_ENABLED,\n        PLATFORM_AI_AUDIO_WORKER_DISABLED: process.env.PLATFORM_AI_AUDIO_WORKER_DISABLED,\n        PLATFORM_AI_AUDIO_WORKER_INTERVAL_MS: process.env.PLATFORM_AI_AUDIO_WORKER_INTERVAL_MS,\n        PLATFORM_AI_AUDIO_WORKER_BATCH_SIZE: process.env.PLATFORM_AI_AUDIO_WORKER_BATCH_SIZE,\n        PLATFORM_AI_AUDIO_WORKER_MAX_CONCURRENCY: process.env.PLATFORM_AI_AUDIO_WORKER_MAX_CONCURRENCY,\n        PLATFORM_AI_AUDIO_WORKER_DRAIN_ON_START: process.env.PLATFORM_AI_AUDIO_WORKER_DRAIN_ON_START,\n        PLATFORM_AI_AUDIO_WORKER_STORAGE_TIMEOUT_MS: process.env.PLATFORM_AI_AUDIO_WORKER_STORAGE_TIMEOUT_MS,\n        PLATFORM_AI_AUDIO_WORKER_FFPROBE_BINARY: process.env.PLATFORM_AI_AUDIO_WORKER_FFPROBE_BINARY,\n        PLATFORM_AI_AUDIO_WORKER_FFPROBE_TIMEOUT_MS: process.env.PLATFORM_AI_AUDIO_WORKER_FFPROBE_TIMEOUT_MS,\n        PLATFORM_AI_AUDIO_WORKER_SCRATCH_DIR: process.env.PLATFORM_AI_AUDIO_WORKER_SCRATCH_DIR,\n        PLATFORM_AI_AUDIO_WORKER_CGROUP_ROOT: process.env.PLATFORM_AI_AUDIO_WORKER_CGROUP_ROOT,\n    };\n    const realtimeOutboxEnv = {\n        GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS: process.env.GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS,\n    };\n    const workflowReconcilerEnv = {\n        GENCOW_WORKFLOW_RECONCILER_INTERVAL_MS: process.env.GENCOW_WORKFLOW_RECONCILER_INTERVAL_MS,\n    };\n    // \u2500\u2500 3-2b. Sanitize system env vars (Security) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // DB \uC5F0\uACB0, Auth \uCD08\uAE30\uD654, Settings \uB85C\uB4DC\uAC00 \uBAA8\uB450 \uC644\uB8CC\uB41C \uD6C4\n    // process.env\uC5D0\uC11C \uC2DC\uC2A4\uD15C \uBCC0\uC218\uB97C \uC0AD\uC81C\uD558\uC5EC \uC0AC\uC6A9\uC790 \uCF54\uB4DC \uC811\uADFC \uCC28\uB2E8.\n    // \uC774 \uC2DC\uC810 \uC774\uD6C4 \uC0AC\uC6A9\uC790 \uD568\uC218\uC758 handler()\uAC00 \uD638\uCD9C\uB418\uC5B4\uB3C4\n    // process.env.DATABASE_URL \uB4F1\uC5D0 \uC811\uADFC\uD560 \uC218 \uC5C6\uB2E4.\n    //\n    sanitizeSystemEnvVars();\n    // \u2500\u2500 3-2c. .env.runtime Hot-Reload (BaaS mode) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // Platform provisioner\uAC00 .env.runtime \uD30C\uC77C\uC5D0 \uC0AC\uC6A9\uC790 \uD658\uACBD\uBCC0\uC218\uB97C \uAE30\uB85D.\n    // fs.watch(inotify)\uB85C \uD30C\uC77C \uBCC0\uACBD\uC744 \uC989\uC2DC \uAC10\uC9C0\uD558\uC5EC process.env\uC5D0 merge.\n    // \u2192 gencow env set \uD6C4 \uC571 \uC7AC\uC2DC\uC791 \uC5C6\uC774 \uC989\uC2DC \uBC18\uC601.\n    //\n    if (IS_BAAS) {\n        await setupRuntimeEnvHotReload({\n            functionsPath: process.env.GENCOW_FUNCTIONS || \"\",\n            internalToken: process.env.GENCOW_INTERNAL_TOKEN || \"\",\n            isWarmWorker,\n            logger: console,\n            env: process.env,\n            existsSyncImpl: existsSync,\n            readFileSyncImpl: readFileSync,\n            parseRuntimeEnvContentImpl: parseRuntimeEnvContent,\n            applyRuntimeEnvSnapshotImpl: applyRuntimeEnvSnapshot,\n        });\n    }\n    stopSettingsTiming();\n    // \u2500\u2500 3-3. Subdomain Proxy (Platform mode only) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // IS_PLATFORM=true \uC2DC {app}.{BASE_DOMAIN} \u2192 localhost:{port} \uD504\uB85D\uC2DC.\n    // DB\uC758 apps \uD14C\uC774\uBE14\uC5D0\uC11C name\u2192port \uB9E4\uD551\uC744 \uC870\uD68C.\n    //\n    let platformWebsocketGateway;\n    let platformNodeProxyWsTunnel;\n    if (IS_PLATFORM) {\n        await startupTiming.measure(\"platform_runtime\", async () => {\n            const platformRuntime = await import(\"./server-platform-runtime-bootstrap.js\");\n            platformWebsocketGateway = platformRuntime.platformWebsocketGateway;\n            platformNodeProxyWsTunnel = platformRuntime.platformNodeProxyWsTunnel;\n            await platformRuntime.bootstrapPlatformRuntime({\n                app,\n                db: platformSystemDb,\n                rawSql: systemRawSql,\n                analyticsRawSql: analyticsSqlRuntime.rawSql,\n                functionsPath,\n                platformDomain: PLATFORM_DOMAIN,\n                getBunServer: () => bunServer,\n                logger: console,\n                fetchImpl: fetch,\n                setIntervalImpl: setInterval,\n                clearIntervalImpl: clearInterval,\n                setTimeoutImpl: setTimeout,\n                platformEmailEnv,\n                platformWebhookEnv,\n                platformAccountDeletionFinalizerEnv,\n                platformAiAudioWorkerEnv,\n                platformStorageBridgeEnv,\n                platformMediaWorkerStorageAuthSecret,\n                wakeSignalEnv: WAKE_SIGNAL_ENV,\n            });\n        });\n    }\n    // \u2500\u2500\u2500 Auth Routes (better-auth) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    //\n    // \u26A0\uFE0F \uBC18\uB4DC\uC2DC \uD504\uB85D\uC2DC \uBBF8\uB4E4\uC6E8\uC5B4 \uB4A4\uC5D0 \uB4F1\uB85D\uD574\uC57C \uD568.\n    // \uBAA8\uB4C8 \uC2A4\uCF54\uD504\uC5D0 \uB4F1\uB85D\uD558\uBA74 \uC11C\uBE0C\uB3C4\uBA54\uC778\uC758 /api/auth/* \uC694\uCCAD\uC744 \uD50C\uB7AB\uD3FC\uC774 \uAC00\uB85C\uCC44\uC11C\n    // \uD50C\uB7AB\uD3FC \uD0A4\uB85C JWT\uB97C \uBC1C\uAE09\uD568 \u2192 \uC571 \uC11C\uBC84\uC5D0\uC11C \uD0A4 \uBD88\uC77C\uCE58\uB85C 401 \uBC1C\uC0DD.\n    // see: docs/analysis/analysis-jwt-auth-failure.md\n    //\n    const stopRuntimeWiringTiming = startupTiming.start(\"runtime_wiring\");\n    app.all(\"/api/auth/*\", betterAuthHandler);\n    _t(\"pre-serve\");\n    const { upgradeWebSocket, websocket } = createServerWebsocketRuntime({\n        platformGateway: platformWebsocketGateway,\n        nodeProxyTunnel: platformNodeProxyWsTunnel,\n    });\n    stopRuntimeWiringTiming();\n    bunServer = await bootstrapServerMainRuntime({\n        app,\n        appModule,\n        upgradeWebSocket,\n        websocket,\n        db,\n        systemDb,\n        platformSystemDb,\n        rawSql,\n        systemRawSql,\n        analyticsRawSql: analyticsSqlRuntime.rawSql,\n        close: async () => {\n            await analyticsSqlRuntime.close();\n            await close();\n        },\n        driver,\n        storage,\n        storageDir,\n        settingsRoutes,\n        functionsPath,\n        authConfig,\n        projectConfig,\n        isBaas: IS_BAAS,\n        isPlatform: IS_PLATFORM,\n        appName: process.env.GENCOW_APP_NAME || \"\",\n        internalToken: INTERNAL_TOKEN,\n        executeWithTimeout,\n        parseArgs,\n        runtimeBuffer,\n        fetchPlatformInternal,\n        notifyGateway,\n        readShutdownReasonFromMarker,\n        wsTimers,\n        wakeSignalEnv: WAKE_SIGNAL_ENV,\n        realtimeOutboxEnv,\n        workflowReconcilerEnv,\n        startupTiming,\n        logger: console,\n    });\n    _t(\"post-serve\");\n    console.log(formatServerStartupTimingLog(APP_NAME || \"unknown\", startupTiming.finish()));\n}\n// \u2500\u2500\u2500 Warm Worker \uC9C0\uC6D0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GENCOW_WARM_WORKER=true\uC774\uBA74 main() \uC790\uB3D9\uC2E4\uD589 skip.\n// warm-process-entry.ts\uC5D0\uC11C import \uD6C4 start() \uC9C1\uC811 \uD638\uCD9C.\nexport { main };\nexport async function start() {\n    await main();\n    return bunServer;\n}\nif (process.env.GENCOW_WARM_WORKER !== \"true\") {\n    main().catch((bootError) => startFallbackServer({\n        bootError,\n        isBaas: IS_BAAS,\n        isPlatform: IS_PLATFORM,\n    }));\n}\n", "/**\n * packages/server/src/database.ts\n *\n * DB Connection Factory \u2014 PGlite / PostgreSQL \uD658\uACBD\uBCC0\uC218 \uBD84\uAE30.\n *\n * DATABASE_URL \uC5C6\uC74C \u2192 PGlite (\uC784\uBCA0\uB514\uB4DC, ./data)\n * DATABASE_URL \uC788\uC74C \u2192 PostgreSQL (\uC2E4\uC81C \uC11C\uBC84 \uC5F0\uACB0)\n *\n * Drizzle ORM \uC778\uC2A4\uD134\uC2A4\uB294 \uB3D9\uC77C API \u2192 \uC0AC\uC6A9\uC790 \uD568\uC218 \uCF54\uB4DC \uBCC0\uACBD \uC5C6\uC74C.\n */\nimport { createHash } from \"crypto\";\nimport { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from \"fs\";\nimport { tmpdir } from \"os\";\nimport { join, resolve } from \"path\";\nimport { resolvePostgresOperationTimeoutMs, resolvePostgresPoolConfig } from \"./database-config.js\";\nimport { createRuntimePostgresClient } from \"./runtime-postgres-client.js\";\nexport function resolveSystemDatabaseUrl(databaseUrl, env = process.env) {\n    // Platform control-plane runtime should keep using the platform DB connection\n    // plus system-scoped GUC injection (systemRawSql / createPlatformSystemDb),\n    // not the tenant-app gencow_system_user role. If we derive a system-role URL\n    // while IS_PLATFORM=true, platform workers start querying gencow_platform as\n    // gencow_system_user and lose access to control-plane tables such as\n    // platform_runtime_state and scheduled_jobs.\n    if (env.IS_PLATFORM === \"true\")\n        return null;\n    const explicit = env.GENCOW_SYSTEM_DATABASE_URL?.trim();\n    if (explicit)\n        return explicit;\n    const systemPassword = env.GENCOW_SYSTEM_USER_PASS?.trim();\n    if (!systemPassword)\n        return null;\n    const url = new URL(databaseUrl);\n    url.username = \"gencow_system_user\";\n    url.password = systemPassword;\n    url.searchParams.delete(\"options\");\n    return url.toString();\n}\nfunction formatMigrationTimestamp(millis) {\n    const d = new Date(Math.floor(millis / 1000) * 1000);\n    const pad = (value, width = 2) => String(value).padStart(width, \"0\");\n    return [\n        pad(d.getUTCFullYear(), 4),\n        pad(d.getUTCMonth() + 1),\n        pad(d.getUTCDate()),\n        pad(d.getUTCHours()),\n        pad(d.getUTCMinutes()),\n        pad(d.getUTCSeconds()),\n    ].join(\"\");\n}\nfunction safeMigrationTag(tag) {\n    return tag.replace(/[^a-zA-Z0-9_]+/g, \"_\").replace(/^_+|_+$/g, \"\") || \"migration\";\n}\nexport function prepareRuntimeMigrationsFolder(migrationsFolder) {\n    const journalPath = join(migrationsFolder, \"meta\", \"_journal.json\");\n    if (!existsSync(journalPath)) {\n        return { path: migrationsFolder, cleanup: () => { } };\n    }\n    const journal = JSON.parse(readFileSync(journalPath, \"utf-8\"));\n    const entries = Array.isArray(journal.entries) ? journal.entries : [];\n    const compatDir = mkdtempSync(join(tmpdir(), \"gencow-runtime-migrations-\"));\n    let copied = 0;\n    for (const [index, entry] of entries.entries()) {\n        if (!entry.tag)\n            continue;\n        const sqlPath = join(migrationsFolder, `${entry.tag}.sql`);\n        if (!existsSync(sqlPath))\n            continue;\n        const when = Number.isFinite(entry.when) ? Number(entry.when) : Date.UTC(2000, 0, 1, 0, 0, index);\n        const dirName = `${formatMigrationTimestamp(when)}_${String(entry.idx ?? index).padStart(4, \"0\")}_${safeMigrationTag(entry.tag)}`;\n        const targetDir = join(compatDir, dirName);\n        mkdirSync(targetDir, { recursive: true });\n        writeFileSync(join(targetDir, \"migration.sql\"), readFileSync(sqlPath, \"utf-8\"));\n        copied++;\n    }\n    if (copied === 0) {\n        rmSync(compatDir, { recursive: true, force: true });\n        return { path: migrationsFolder, cleanup: () => { } };\n    }\n    return {\n        path: compatDir,\n        cleanup: () => rmSync(compatDir, { recursive: true, force: true }),\n    };\n}\nfunction parseMigrationDirTimestamp(dir) {\n    const match = dir.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/);\n    if (!match)\n        return null;\n    return Date.UTC(+match[1], +match[2] - 1, +match[3], +match[4], +match[5], +match[6]);\n}\nfunction roundMigrationMillis(value) {\n    return Math.floor(value / 1000) * 1000;\n}\nexport function collectRuntimeMigrationDescriptors(migrationsFolder) {\n    return readdirSync(migrationsFolder)\n        .map((name) => {\n        const migrationSqlPath = join(migrationsFolder, name, \"migration.sql\");\n        const folderMillis = parseMigrationDirTimestamp(name);\n        if (folderMillis === null || !existsSync(migrationSqlPath))\n            return null;\n        const query = readFileSync(migrationSqlPath, \"utf-8\");\n        return {\n            name,\n            folderMillis,\n            hash: createHash(\"sha256\").update(query).digest(\"hex\"),\n        };\n    })\n        .filter((migration) => migration !== null)\n        .sort((a, b) => a.folderMillis - b.folderMillis || a.name.localeCompare(b.name));\n}\nexport function planLegacyDrizzleMigrationTableRepair(dbRows, localMigrations) {\n    const byMillis = new Map();\n    const byHash = new Map();\n    for (const migration of localMigrations) {\n        const existing = byMillis.get(migration.folderMillis) ?? [];\n        existing.push(migration);\n        byMillis.set(migration.folderMillis, existing);\n        byHash.set(migration.hash, migration);\n    }\n    const assignedNames = new Set();\n    const assignments = [];\n    const unmatchedRows = [];\n    for (const row of dbRows) {\n        const rowMillis = roundMigrationMillis(row.createdAt);\n        const candidates = byMillis.get(rowMillis);\n        let matched;\n        if (candidates?.length === 1) {\n            matched = candidates[0];\n        }\n        else if (candidates && candidates.length > 1) {\n            matched = candidates.find((candidate) => candidate.hash === row.hash);\n        }\n        else {\n            matched = byHash.get(row.hash);\n        }\n        if (matched) {\n            assignedNames.add(matched.name);\n            assignments.push({ id: row.id, name: matched.name, reason: \"matched\" });\n        }\n        else {\n            unmatchedRows.push(row);\n        }\n    }\n    const maxUnmatchedMillis = unmatchedRows.length > 0\n        ? Math.max(...unmatchedRows.map((row) => roundMigrationMillis(row.createdAt)))\n        : -Infinity;\n    const inferredBackfill = localMigrations.filter((migration) => !assignedNames.has(migration.name) && migration.folderMillis <= maxUnmatchedMillis);\n    for (const [index, row] of unmatchedRows.entries()) {\n        const migration = inferredBackfill[index];\n        if (!migration)\n            break;\n        assignedNames.add(migration.name);\n        assignments.push({ id: row.id, name: migration.name, reason: \"inferred\" });\n    }\n    return {\n        dbCount: dbRows.length,\n        localCount: localMigrations.length,\n        matchedCount: assignments.filter((assignment) => assignment.reason === \"matched\").length,\n        inferredCount: assignments.filter((assignment) => assignment.reason === \"inferred\").length,\n        assignments,\n    };\n}\nfunction toLegacyDrizzleMigrationRow(row) {\n    const id = Number(row.id);\n    const hash = typeof row.hash === \"string\" ? row.hash : String(row.hash ?? \"\");\n    const createdAt = Number(row.createdAt ?? row.created_at);\n    if (!Number.isFinite(id) || !hash || !Number.isFinite(createdAt))\n        return null;\n    return { id, hash, createdAt };\n}\nfunction extractDatabaseNameFromUrl(url) {\n    try {\n        return new URL(url).pathname.replace(\"/\", \"\") || undefined;\n    }\n    catch {\n        return undefined;\n    }\n}\nasync function repairLegacyDrizzleMigrationTableForPlatformRuntime(rawSql, migrationsFolder) {\n    if (process.env.IS_PLATFORM !== \"true\")\n        return null;\n    const tableRows = await rawSql(`SELECT 1 FROM information_schema.tables WHERE table_schema = $1 AND table_name = $2`, [\"drizzle\", \"__drizzle_migrations\"]);\n    if (tableRows.length === 0)\n        return null;\n    const columnRows = await rawSql(`SELECT column_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2`, [\"drizzle\", \"__drizzle_migrations\"]);\n    const columns = new Set(columnRows.map((row) => String(row.column_name)));\n    if (columns.has(\"name\") && columns.has(\"applied_at\"))\n        return null;\n    const localMigrations = collectRuntimeMigrationDescriptors(migrationsFolder);\n    if (localMigrations.length === 0)\n        return null;\n    const dbRows = (await rawSql(`SELECT id, hash, created_at AS \"createdAt\" FROM \"drizzle\".\"__drizzle_migrations\" ORDER BY id ASC`))\n        .map((row) => toLegacyDrizzleMigrationRow(row))\n        .filter((row) => row !== null);\n    if (dbRows.length === 0)\n        return null;\n    const plan = planLegacyDrizzleMigrationTableRepair(dbRows, localMigrations);\n    if (plan.assignments.length === 0)\n        return null;\n    const executeRepair = async (execute) => {\n        await execute(`ALTER TABLE \"drizzle\".\"__drizzle_migrations\" ADD COLUMN IF NOT EXISTS \"name\" text`);\n        await execute(`ALTER TABLE \"drizzle\".\"__drizzle_migrations\" ADD COLUMN IF NOT EXISTS \"applied_at\" timestamp with time zone DEFAULT now()`);\n        for (const assignment of plan.assignments) {\n            await execute(`UPDATE \"drizzle\".\"__drizzle_migrations\" SET \"name\" = $1, \"applied_at\" = NULL WHERE \"id\" = $2`, [assignment.name, assignment.id]);\n        }\n    };\n    if (rawSql.transaction) {\n        await rawSql.transaction(executeRepair);\n    }\n    else {\n        await executeRepair(rawSql);\n    }\n    return plan;\n}\n// \u2500\u2500\u2500 Factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport async function createDatabase() {\n    const databaseUrl = process.env.DATABASE_URL;\n    if (databaseUrl) {\n        return initPostgres(databaseUrl);\n    }\n    const dataDir = process.env.GENCOW_DB_URL || \"./data\";\n    return initPGlite(dataDir);\n}\n// \u2500\u2500\u2500 PGlite \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function initPGlite(dataDir) {\n    const { PGlite } = await import(\"@electric-sql/pglite\");\n    const { drizzle } = await import(\"drizzle-orm/pglite\");\n    // Remove stale postmaster.pid left behind by kill -9.\n    try {\n        const { unlinkSync } = await import(\"fs\");\n        unlinkSync(resolve(dataDir, \"postmaster.pid\"));\n        console.log(\"[db] removed stale postmaster.pid\");\n    }\n    catch {\n        /* file didn't exist \u2014 normal */\n    }\n    // pgvector \uD655\uC7A5 \u2014 RAG/Memory\uC758 vector \uD0C0\uC785 \uC0AC\uC6A9\uC744 \uC704\uD574 \uD56D\uC0C1 \uB85C\uB529\n    let vectorExt = {};\n    try {\n        const { vector } = await import(\"@electric-sql/pglite/vector\");\n        vectorExt = { vector };\n    }\n    catch {\n        /* vector \uD655\uC7A5\uC774 \uC5C6\uC5B4\uB3C4 \uAE30\uBCF8 \uAE30\uB2A5\uC740 \uB3D9\uC791 */\n    }\n    const client = new PGlite({ dataDir, extensions: vectorExt });\n    const db = drizzle({ client });\n    console.log(`[db] PGlite mode \u2014 ${dataDir}`);\n    async function setPlatformSystemGucs(executor) {\n        await executor.query(\"SELECT set_config($1::text, $2::text, true)\", [\"app.current_user_id\", \"\"]);\n        await executor.query(\"SELECT set_config($1::text, $2::text, true)\", [\"app.current_user_role\", \"system\"]);\n        await executor.query(\"SELECT set_config($1::text, $2::text, true)\", [\"app.internal_system\", \"true\"]);\n    }\n    const rawSql = (async (sql, params) => {\n        if (params && params.length > 0) {\n            const result = await client.query(sql, params);\n            return result.rows;\n        }\n        const result = await client.exec(sql);\n        return result[0]?.rows || [];\n    });\n    rawSql.transaction = async (callback) => client.transaction(async (tx) => {\n        const txRawSql = (async (sql, params) => {\n            const result = params && params.length > 0 ? await tx.query(sql, params) : await tx.query(sql);\n            return result.rows || [];\n        });\n        return callback(txRawSql);\n    });\n    const systemRawSql = (async (sql, params) => {\n        return await client.transaction(async (tx) => {\n            await setPlatformSystemGucs(tx);\n            if (params && params.length > 0) {\n                const result = await tx.query(sql, params);\n                return result.rows;\n            }\n            const result = await tx.query(sql);\n            return result.rows || [];\n        });\n    });\n    systemRawSql.transaction = async (callback) => client.transaction(async (tx) => {\n        await setPlatformSystemGucs(tx);\n        const txRawSql = (async (sql, params) => {\n            const result = params && params.length > 0 ? await tx.query(sql, params) : await tx.query(sql);\n            return result.rows || [];\n        });\n        return callback(txRawSql);\n    });\n    return {\n        db,\n        systemDb: db,\n        driver: \"pglite\",\n        rawSql,\n        systemRawSql,\n        async migrate(migrationsFolder) {\n            // vector \uD655\uC7A5\uC774 \uB85C\uB4DC\uB418\uC5C8\uC73C\uBA74 \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uC804\uC5D0 \uD65C\uC131\uD654\n            if (Object.keys(vectorExt).length > 0) {\n                await client.exec(\"CREATE EXTENSION IF NOT EXISTS vector;\");\n            }\n            const { migrate } = await import(\"drizzle-orm/pglite/migrator\");\n            const prepared = prepareRuntimeMigrationsFolder(migrationsFolder);\n            try {\n                await migrate(db, { migrationsFolder: prepared.path });\n            }\n            finally {\n                prepared.cleanup();\n            }\n        },\n        async close() {\n            try {\n                await client.close();\n            }\n            catch { }\n        },\n    };\n}\n// \u2500\u2500\u2500 PostgreSQL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function initPostgres(url) {\n    const { SQL } = await import(\"bun\");\n    const { drizzle } = await import(\"drizzle-orm/bun-sql\");\n    // Database-per-Tenant: \uAC01 \uC571\uC774 \uC804\uC6A9 DB\uC5D0 \uC9C1\uC811 \uC5F0\uACB0\uD558\uBBC0\uB85C search_path \uBD88\uD544\uC694.\n    // PgBouncer(6432)\uB97C \uACBD\uC720\uD558\uC5EC \uCEE4\uB125\uC158 \uD480\uB9C1 \uC801\uC6A9.\n    // \uCEE4\uB125\uC158 \uD480 \uD06C\uAE30/\uD0C0\uC784\uC544\uC6C3\uC740 \uC571 workload\uBCC4\uB85C provisioner\uAC00 \uC8FC\uC785\uD560 \uC218 \uC788\uB2E4.\n    const poolConfig = resolvePostgresPoolConfig();\n    const operationTimeoutMs = resolvePostgresOperationTimeoutMs();\n    const client = createRuntimePostgresClient({\n        label: \"tenant-runtime\",\n        databaseName: extractDatabaseNameFromUrl(url),\n        operationTimeoutMs,\n        logger: console,\n        createClient: () => new SQL({\n            url,\n            ...poolConfig,\n        }),\n    });\n    const db = drizzle({ client });\n    const systemUrl = resolveSystemDatabaseUrl(url);\n    const systemClient = systemUrl && systemUrl !== url\n        ? createRuntimePostgresClient({\n            label: \"system-runtime\",\n            databaseName: extractDatabaseNameFromUrl(systemUrl),\n            operationTimeoutMs,\n            logger: console,\n            createClient: () => new SQL({\n                url: systemUrl,\n                ...poolConfig,\n            }),\n        })\n        : client;\n    const systemDb = systemClient === client ? db : drizzle({ client: systemClient });\n    // Mask password in log output\n    const safeUrl = url.replace(/:([^@]+)@/, \":***@\");\n    const safeSystemUrl = systemUrl?.replace(/:([^@]+)@/, \":***@\") ?? null;\n    // Database-per-Tenant: URL\uC5D0\uC11C dbname\uC744 \uCD94\uCD9C\uD558\uC5EC \uD45C\uC2DC\n    let dbNameInfo = \"\";\n    const dbName = extractDatabaseNameFromUrl(url);\n    if (dbName && dbName !== \"gencow_platform\") {\n        dbNameInfo = ` (db: ${dbName})`;\n    }\n    console.log(`[db] Bun.sql mode \u2014 ${safeUrl}${dbNameInfo}`);\n    if (safeSystemUrl) {\n        console.log(`[db] Bun.sql system mode \u2014 ${safeSystemUrl}${dbNameInfo}`);\n    }\n    else {\n        console.warn(\"[db] GENCOW_SYSTEM_DATABASE_URL/GENCOW_SYSTEM_USER_PASS not configured \u2014 ctx.unsafeDb falls back to the tenant DB handle\");\n    }\n    async function setPlatformSystemGucs(executor) {\n        await executor.unsafe(\"SELECT set_config($1::text, $2::text, true)\", [\"app.current_user_id\", \"\"]);\n        await executor.unsafe(\"SELECT set_config($1::text, $2::text, true)\", [\"app.current_user_role\", \"system\"]);\n        await executor.unsafe(\"SELECT set_config($1::text, $2::text, true)\", [\"app.internal_system\", \"true\"]);\n    }\n    const rawSql = (async (query, params) => {\n        if (params && params.length > 0) {\n            const result = await client.unsafe(query, params);\n            return Array.from(result);\n        }\n        const result = await client.unsafe(query);\n        return Array.from(result);\n    });\n    rawSql.transaction = async (callback) => client.begin(async (tx) => {\n        const txRawSql = (async (query, params) => {\n            const result = params && params.length > 0 ? await tx.unsafe(query, params) : await tx.unsafe(query);\n            return Array.from(result);\n        });\n        return callback(txRawSql);\n    });\n    const systemRawSql = (async (query, params) => {\n        return await systemClient.begin(async (tx) => {\n            await setPlatformSystemGucs(tx);\n            const result = params && params.length > 0 ? await tx.unsafe(query, params) : await tx.unsafe(query);\n            return Array.from(result);\n        });\n    });\n    systemRawSql.transaction = async (callback) => systemClient.begin(async (tx) => {\n        await setPlatformSystemGucs(tx);\n        const txRawSql = (async (query, params) => {\n            const result = params && params.length > 0 ? await tx.unsafe(query, params) : await tx.unsafe(query);\n            return Array.from(result);\n        });\n        return callback(txRawSql);\n    });\n    return {\n        db,\n        systemDb,\n        driver: \"postgres\",\n        rawSql,\n        systemRawSql,\n        async migrate(migrationsFolder) {\n            const { migrate } = await import(\"drizzle-orm/bun-sql/migrator\");\n            const prepared = prepareRuntimeMigrationsFolder(migrationsFolder);\n            try {\n                const repairPlan = await repairLegacyDrizzleMigrationTableForPlatformRuntime(rawSql, prepared.path);\n                if (repairPlan) {\n                    console.warn(`[db] legacy drizzle migration table repaired for runtime compatibility ` +\n                        `(matched=${repairPlan.matchedCount}, inferred=${repairPlan.inferredCount}, ` +\n                        `dbRows=${repairPlan.dbCount}, local=${repairPlan.localCount})`);\n                }\n                await migrate(db, { migrationsFolder: prepared.path });\n            }\n            finally {\n                prepared.cleanup();\n            }\n        },\n        async close() {\n            try {\n                await client.close();\n            }\n            catch { }\n            if (systemClient !== client) {\n                try {\n                    await systemClient.close();\n                }\n                catch { }\n            }\n        },\n    };\n}\n", "function readPositiveIntEnv(env, key, fallback) {\n    const value = Number(env[key]);\n    return Number.isInteger(value) && value > 0 ? value : fallback;\n}\nfunction readNonNegativeIntEnv(env, key, fallback) {\n    const value = Number(env[key]);\n    return Number.isInteger(value) && value >= 0 ? value : fallback;\n}\nexport function resolvePostgresPoolConfig(env = process.env) {\n    return {\n        max: readPositiveIntEnv(env, \"GENCOW_DB_MAX_CONNECTIONS\", 10),\n        idleTimeout: readPositiveIntEnv(env, \"GENCOW_DB_IDLE_TIMEOUT_SECONDS\", 30),\n        connectionTimeout: readPositiveIntEnv(env, \"GENCOW_DB_CONNECTION_TIMEOUT_SECONDS\", 10),\n    };\n}\nexport function resolvePostgresOperationTimeoutMs(env = process.env) {\n    return readNonNegativeIntEnv(env, \"GENCOW_DB_OPERATION_TIMEOUT_MS\", 25_000);\n}\n", "export class RuntimePostgresClientError extends Error {\n    code;\n    reason;\n    operation;\n    generation;\n    elapsedMs;\n    constructor(params) {\n        super(`Postgres client ${params.reason} during ${params.operation}; connection recycled`);\n        this.name = \"RuntimePostgresClientError\";\n        this.code = codeForFailureReason(params.reason);\n        this.reason = params.reason;\n        this.operation = params.operation;\n        this.generation = params.generation;\n        this.elapsedMs = params.elapsedMs;\n    }\n}\nfunction codeForFailureReason(reason) {\n    switch (reason) {\n        case \"connection_closed\":\n            return \"GENCOW_DB_CONNECTION_CLOSED\";\n        case \"connection_timeout\":\n            return \"GENCOW_DB_CONNECTION_TIMEOUT\";\n        case \"operation_timeout\":\n            return \"GENCOW_DB_OPERATION_TIMEOUT\";\n        case \"socket_closed\":\n            return \"GENCOW_DB_SOCKET_CLOSED\";\n    }\n}\nfunction errorMessage(error) {\n    if (error instanceof Error)\n        return error.message;\n    return String(error);\n}\nfunction errorCode(error) {\n    const code = error?.code;\n    return typeof code === \"string\" ? code : undefined;\n}\nfunction errorName(error) {\n    const name = error?.name;\n    return typeof name === \"string\" ? name : undefined;\n}\nexport function classifyPostgresClientFailure(error) {\n    if (error instanceof RuntimePostgresClientError) {\n        return error.reason;\n    }\n    const code = errorCode(error);\n    if (code === \"ERR_POSTGRES_CONNECTION_CLOSED\") {\n        return \"connection_closed\";\n    }\n    if (code === \"ECONNRESET\" || code === \"EPIPE\") {\n        return \"socket_closed\";\n    }\n    if (code === \"ETIMEDOUT\" || code === \"ECONNREFUSED\") {\n        return \"connection_timeout\";\n    }\n    const message = errorMessage(error).toLowerCase();\n    if (message.includes(\"socket connection was closed\") || message.includes(\"socket closed\")) {\n        return \"socket_closed\";\n    }\n    if (message.includes(\"connection closed\") ||\n        message.includes(\"client is closed\") ||\n        message.includes(\"connection terminated\") ||\n        message.includes(\"closed unexpectedly\")) {\n        return \"connection_closed\";\n    }\n    if (message.includes(\"connection timeout\") ||\n        message.includes(\"connect timeout\") ||\n        message.includes(\"connection timed out\")) {\n        return \"connection_timeout\";\n    }\n    return null;\n}\nfunction safeDatabaseName(value) {\n    if (!value)\n        return undefined;\n    return /^[a-zA-Z0-9_-]+$/.test(value) ? value : undefined;\n}\nfunction safeFailureCode(error) {\n    const code = errorCode(error);\n    if (!code)\n        return undefined;\n    return /^[A-Z0-9_]+$/.test(code) ? code : \"UNKNOWN\";\n}\nfunction safeFailureName(error) {\n    const name = errorName(error);\n    if (!name)\n        return undefined;\n    return /^[a-zA-Z0-9_]+$/.test(name) ? name : \"Error\";\n}\nasync function closeWithBoundedWait(client, timeoutMs) {\n    try {\n        await Promise.race([\n            Promise.resolve(client.close()),\n            new Promise((resolve) => {\n                setTimeout(resolve, timeoutMs).unref?.();\n            }),\n        ]);\n    }\n    catch {\n        /* Closing a broken SQL client is best-effort. */\n    }\n}\nfunction rowsToValues(rows) {\n    if (!Array.isArray(rows))\n        return rows;\n    return rows.map((row) => {\n        if (Array.isArray(row))\n            return row;\n        if (row && typeof row === \"object\")\n            return Object.values(row);\n        return [row];\n    });\n}\nfunction attachUnsafeValues(result, values) {\n    Object.defineProperty(result, \"values\", {\n        configurable: true,\n        enumerable: false,\n        value: values,\n    });\n    return result;\n}\nexport function createRuntimePostgresClient(params) {\n    const logger = params.logger ?? console;\n    const databaseName = safeDatabaseName(params.databaseName);\n    const operationTimeoutMs = Math.max(0, Math.floor(params.operationTimeoutMs));\n    let activeClient = params.createClient();\n    let generation = 1;\n    let recoveries = 0;\n    let lastFailure;\n    const recycleClient = async (recycleParams) => {\n        if (activeClient !== recycleParams.client || generation !== recycleParams.expectedGeneration) {\n            return;\n        }\n        const previousClient = activeClient;\n        activeClient = params.createClient();\n        generation += 1;\n        recoveries += 1;\n        lastFailure = {\n            at: new Date().toISOString(),\n            operation: recycleParams.operation,\n            reason: recycleParams.reason,\n            elapsedMs: recycleParams.elapsedMs,\n            causeCode: safeFailureCode(recycleParams.cause),\n            causeName: safeFailureName(recycleParams.cause),\n        };\n        const dbInfo = databaseName ? ` db=${databaseName}` : \"\";\n        const causeCode = lastFailure.causeCode ? ` causeCode=${lastFailure.causeCode}` : \"\";\n        const causeName = lastFailure.causeName ? ` causeName=${lastFailure.causeName}` : \"\";\n        logger.warn(`[db] postgres client recycled label=${params.label}${dbInfo} reason=${recycleParams.reason} operation=${recycleParams.operation} elapsedMs=${recycleParams.elapsedMs} generation=${generation} recoveries=${recoveries}${causeName}${causeCode}`);\n        await closeWithBoundedWait(previousClient, 250);\n    };\n    const runOperation = async (operation, run) => {\n        const client = activeClient;\n        const operationGeneration = generation;\n        const startedAt = Date.now();\n        let timeout;\n        const work = Promise.resolve().then(() => run(client));\n        work.catch(() => {\n            /* The race below may time out first; keep late rejections handled. */\n        });\n        try {\n            if (operationTimeoutMs <= 0) {\n                return await work;\n            }\n            return await Promise.race([\n                work,\n                new Promise((_, reject) => {\n                    timeout = setTimeout(() => {\n                        reject(new RuntimePostgresClientError({\n                            reason: \"operation_timeout\",\n                            operation,\n                            generation: operationGeneration,\n                            elapsedMs: Date.now() - startedAt,\n                        }));\n                    }, operationTimeoutMs);\n                    timeout.unref?.();\n                }),\n            ]);\n        }\n        catch (error) {\n            const reason = classifyPostgresClientFailure(error);\n            if (!reason) {\n                throw error;\n            }\n            const elapsedMs = error instanceof RuntimePostgresClientError ? error.elapsedMs : Date.now() - startedAt;\n            await recycleClient({\n                client,\n                expectedGeneration: operationGeneration,\n                operation,\n                reason,\n                elapsedMs,\n                cause: error,\n            });\n            if (error instanceof RuntimePostgresClientError) {\n                throw error;\n            }\n            throw new RuntimePostgresClientError({\n                reason,\n                operation,\n                generation: operationGeneration,\n                elapsedMs,\n            });\n        }\n        finally {\n            if (timeout !== undefined) {\n                clearTimeout(timeout);\n            }\n        }\n    };\n    const target = {\n        unsafe(query, queryParams) {\n            const queryClient = activeClient;\n            let unsafeResult;\n            const getUnsafeResult = (client) => {\n                if (client !== queryClient) {\n                    return client.unsafe(query, queryParams);\n                }\n                unsafeResult ??= queryClient.unsafe(query, queryParams);\n                return unsafeResult;\n            };\n            return attachUnsafeValues(runOperation(\"unsafe\", (client) => getUnsafeResult(client)), () => runOperation(\"unsafe\", async (client) => {\n                const result = getUnsafeResult(client);\n                if (typeof result.values === \"function\") {\n                    return result.values();\n                }\n                return rowsToValues(await result);\n            }));\n        },\n        begin(callback) {\n            return runOperation(\"begin\", (client) => client.begin(callback));\n        },\n        close() {\n            return closeWithBoundedWait(activeClient, 1_000);\n        },\n        getDiagnostics() {\n            return {\n                label: params.label,\n                databaseName,\n                generation,\n                recoveries,\n                lastFailure,\n            };\n        },\n    };\n    return new Proxy(target, {\n        get(proxyTarget, prop, receiver) {\n            if (prop in proxyTarget) {\n                return Reflect.get(proxyTarget, prop, receiver);\n            }\n            const value = Reflect.get(activeClient, prop, activeClient);\n            return typeof value === \"function\" ? value.bind(activeClient) : value;\n        },\n    });\n}\n", "import { createDecipheriv, pbkdf2Sync } from \"crypto\";\nimport { filterTenantRuntimeEnvVars } from \"@gencow/core\";\nexport function parseRuntimeEnvContent(content, internalToken) {\n    if (!content.trim())\n        return {};\n    const parsePlainText = (text) => {\n        const vars = {};\n        for (const line of text.split(\"\\n\")) {\n            const trimmed = line.trim();\n            if (!trimmed || trimmed.startsWith(\"#\"))\n                continue;\n            const eqIndex = trimmed.indexOf(\"=\");\n            if (eqIndex < 1)\n                continue;\n            vars[trimmed.slice(0, eqIndex)] = trimmed.slice(eqIndex + 1);\n        }\n        return vars;\n    };\n    if (!content.startsWith(\"#GENCOW_ENC_V1\")) {\n        return parsePlainText(content);\n    }\n    if (!internalToken) {\n        return null;\n    }\n    const encrypted = content.split(\"\\n\").slice(1).join(\"\").trim();\n    if (!encrypted)\n        return {};\n    const fileKey = pbkdf2Sync(internalToken, \"gencow-env-runtime-file\", 100_000, 32, \"sha256\");\n    const raw = Buffer.from(encrypted, \"base64\");\n    const iv = raw.subarray(0, 12);\n    const authTag = raw.subarray(raw.length - 16);\n    const ciphertext = raw.subarray(12, raw.length - 16);\n    const decipher = createDecipheriv(\"aes-256-gcm\", fileKey, iv, { authTagLength: 16 });\n    decipher.setAuthTag(authTag);\n    const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString(\"utf8\");\n    return parsePlainText(plaintext);\n}\nexport function applyRuntimeEnvSnapshot(targetEnv, runtimeEnvKeys, nextVars) {\n    const { allowed } = filterTenantRuntimeEnvVars(nextVars);\n    const nextKeys = new Set(Object.keys(allowed));\n    let loaded = 0;\n    for (const key of runtimeEnvKeys) {\n        if (!nextKeys.has(key)) {\n            delete targetEnv[key];\n        }\n    }\n    for (const [key, value] of Object.entries(allowed)) {\n        targetEnv[key] = value;\n        loaded++;\n    }\n    runtimeEnvKeys.clear();\n    for (const key of nextKeys) {\n        runtimeEnvKeys.add(key);\n    }\n    return loaded;\n}\n", "import { existsSync, readFileSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { applyRuntimeEnvSnapshot, parseRuntimeEnvContent } from \"./env-runtime.js\";\nexport function resolveEnvRuntimePath(functionsPath) {\n    return resolve(functionsPath || \"\", \"..\", \".env.runtime\");\n}\nexport function loadRuntimeEnvSnapshot(params) {\n    const env = params.env ?? process.env;\n    const existsSyncImpl = params.existsSyncImpl ?? existsSync;\n    const readFileSyncImpl = params.readFileSyncImpl ?? readFileSync;\n    const parseRuntimeEnvContentImpl = params.parseRuntimeEnvContentImpl ?? parseRuntimeEnvContent;\n    const applyRuntimeEnvSnapshotImpl = params.applyRuntimeEnvSnapshotImpl ?? applyRuntimeEnvSnapshot;\n    const logger = params.logger ?? console;\n    try {\n        if (!existsSyncImpl(params.envRuntimePath)) {\n            return 0;\n        }\n        const content = readFileSyncImpl(params.envRuntimePath, \"utf-8\");\n        const vars = parseRuntimeEnvContentImpl(content, params.internalToken);\n        if (vars === null) {\n            logger.warn(\"[env] Cannot decrypt .env.runtime \u2014 GENCOW_INTERNAL_TOKEN missing\");\n            return 0;\n        }\n        const loaded = applyRuntimeEnvSnapshotImpl(env, params.runtimeEnvKeys, vars);\n        if (loaded > 0) {\n            logger.log(`[env] Loaded ${loaded} env var(s) from .env.runtime`);\n        }\n        return loaded;\n    }\n    catch (e) {\n        logger.warn(`[env] Failed to load .env.runtime:`, e.message);\n        return 0;\n    }\n}\nexport async function setupRuntimeEnvHotReload(params) {\n    const logger = params.logger ?? console;\n    const existsSyncImpl = params.existsSyncImpl ?? existsSync;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const clearTimeoutImpl = params.clearTimeoutImpl ?? clearTimeout;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const clearIntervalImpl = params.clearIntervalImpl ?? clearInterval;\n    const runtimeEnvKeys = new Set();\n    const envRuntimePath = resolveEnvRuntimePath(params.functionsPath);\n    const watchImpl = params.watchImpl ?? (await import(\"fs\")).watch;\n    const loadEnvRuntime = () => loadRuntimeEnvSnapshot({\n        envRuntimePath,\n        internalToken: params.internalToken,\n        runtimeEnvKeys,\n        env: params.env,\n        existsSyncImpl,\n        readFileSyncImpl: params.readFileSyncImpl,\n        parseRuntimeEnvContentImpl: params.parseRuntimeEnvContentImpl,\n        applyRuntimeEnvSnapshotImpl: params.applyRuntimeEnvSnapshotImpl,\n        logger,\n    });\n    const logWatchReady = () => {\n        logger.log(params.isWarmWorker\n            ? `[env] Watching .env.runtime for hot-reload in warm worker (inotify) \u2713`\n            : `[env] Watching .env.runtime for hot-reload (inotify) \u2713`);\n    };\n    const attachWatch = () => {\n        let debounceTimer = null;\n        watchImpl(envRuntimePath, { persistent: false }, (eventType) => {\n            if (eventType !== \"change\")\n                return;\n            if (debounceTimer)\n                clearTimeoutImpl(debounceTimer);\n            debounceTimer = setTimeoutImpl(() => {\n                loadEnvRuntime();\n                logger.log(\"[env] Hot-reloaded env vars from .env.runtime \u2713\");\n            }, 100);\n        });\n    };\n    if (!params.isWarmWorker) {\n        loadEnvRuntime();\n    }\n    try {\n        attachWatch();\n        logWatchReady();\n        return envRuntimePath;\n    }\n    catch {\n        logger.log(`[env] .env.runtime not found yet \u2014 will load on next deploy`);\n        const pollInterval = setIntervalImpl(async () => {\n            if (!existsSyncImpl(envRuntimePath)) {\n                return;\n            }\n            loadEnvRuntime();\n            try {\n                attachWatch();\n                logWatchReady();\n                clearIntervalImpl(pollInterval);\n            }\n            catch {\n                /* retry next interval */\n            }\n        }, 60_000);\n        return envRuntimePath;\n    }\n}\n", "import { existsSync } from \"fs\";\nimport { isAbsolute, relative, resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { resolveConfiguredSchemaPaths } from \"@gencow/internal/introspection\";\nexport { resolveFunctionsImportPath } from \"./introspection/functions-entrypoint.js\";\nimport { gencowConfigSchema } from \"@gencow/internal/config\";\nimport { collectRuntimeOperationInventory } from \"./runtime-operation-inventory.js\";\nimport { auditAIBypass, auditFrontendAntiPatterns, auditFunctions, auditSchemaPatterns, auditSelfFetch, auditWorkflowShadowing, printAIBypassReport, printAuditReport, printFrontendAntiPatternReport, printSelfFetchReport, printWorkflowShadowingReport, } from \"./auditor\";\nimport { auditUnsafeDbUsage, printUnsafeDbReport } from \"./auditor-unsafe-db\";\nimport { loadRuntimeAuthAdapterSchema, resolveRuntimeAuthSchemaContract, } from \"./runtime-auth-schema-contract.js\";\nexport { resolveLegacyAuthSchemaFile, validateBetterAuthSchemaExports, } from \"./runtime-auth-schema-contract.js\";\nexport function resolveRuntimeBaseDir(envAppDataDir = process.env.GENCOW_APP_DATA_DIR) {\n    const baseDir = envAppDataDir?.trim();\n    if (!baseDir)\n        return process.cwd();\n    return isAbsolute(baseDir) ? baseDir : resolve(process.cwd(), baseDir);\n}\nexport function resolveManagedRuntimeReleaseDir(envAppDataDir = process.env.GENCOW_APP_DATA_DIR) {\n    const runtimeBaseDir = envAppDataDir?.trim() ? resolveRuntimeBaseDir(envAppDataDir) : null;\n    return runtimeBaseDir ? resolve(runtimeBaseDir, \".gencow-runtime\", \"release\") : null;\n}\nexport function resolveRuntimeRelativePath(pathValue, options = {}) {\n    return isAbsolute(pathValue) ? pathValue : resolve(options.baseDir ?? resolveRuntimeBaseDir(), pathValue);\n}\nexport function resolveRuntimeSearchRoot(params = {}) {\n    const appDataDir = params.appDataDir?.trim();\n    if (appDataDir)\n        return resolveRuntimeBaseDir(appDataDir);\n    const functionsPath = params.functionsPath?.trim();\n    if (functionsPath) {\n        return resolve(resolveRuntimeRelativePath(functionsPath), \"..\");\n    }\n    return process.cwd();\n}\nexport function resolveFunctionsPath(envFunctions = process.env.GENCOW_FUNCTIONS, options = {}) {\n    return envFunctions\n        ? resolveRuntimeRelativePath(envFunctions, { baseDir: options.runtimeBaseDir ?? resolveRuntimeBaseDir() })\n        : resolve(options.exampleFunctionsDir ?? import.meta.dirname, \"./example/functions\");\n}\nexport function resolveMigrationsPath(envMigrations = process.env.GENCOW_MIGRATIONS, options = {}) {\n    if (envMigrations) {\n        return resolveRuntimeRelativePath(envMigrations, {\n            baseDir: options.runtimeBaseDir ?? resolveRuntimeBaseDir(),\n        });\n    }\n    const runtimeBaseDir = options.appDataDir?.trim() ? resolveRuntimeBaseDir(options.appDataDir) : null;\n    if (runtimeBaseDir) {\n        return resolve(runtimeBaseDir, \"gencow\", \"migrations\");\n    }\n    return resolve(options.importMetaDirname ?? import.meta.dirname, \"../../../migrations\");\n}\nexport function hasFunctionsSource(functionsPath) {\n    return (existsSync(resolve(functionsPath, \"index.ts\")) ||\n        existsSync(resolve(functionsPath, \"index.js\")) ||\n        existsSync(`${functionsPath}.ts`) ||\n        existsSync(`${functionsPath}.js`));\n}\nexport function resolveFunctionsEntryPoint(functionsPath) {\n    if (existsSync(`${functionsPath}.ts`))\n        return `${functionsPath}.ts`;\n    if (existsSync(`${functionsPath}.js`))\n        return `${functionsPath}.js`;\n    if (existsSync(resolve(functionsPath, \"index.js\")))\n        return resolve(functionsPath, \"index.js\");\n    return resolve(functionsPath, \"index.ts\");\n}\nexport function resolveAuthConfigFile(functionsPath) {\n    const authConfigTs = resolve(functionsPath, \"auth.ts\");\n    if (existsSync(authConfigTs))\n        return authConfigTs;\n    const authConfigJs = resolve(functionsPath, \"auth.js\");\n    return existsSync(authConfigJs) ? authConfigJs : null;\n}\nexport function resolveProjectConfigFile(functionsPath) {\n    const projectDir = resolve(functionsPath, \"..\");\n    const configJs = resolve(projectDir, \"gencow.config.js\");\n    if (existsSync(configJs))\n        return configJs;\n    const configTs = resolve(projectDir, \"gencow.config.ts\");\n    return existsSync(configTs) ? configTs : null;\n}\nfunction resolveAuditorImplementation(projectConfig) {\n    return projectConfig?.auditor?.implementation === \"analyzer\" ? \"analyzer\" : \"legacy\";\n}\nexport async function loadAnalyzerAuditorModuleForRuntime(options = {}) {\n    const { importPackageImpl = () => import(\"@gencow/internal/auditor\") } = options;\n    return importPackageImpl();\n}\nasync function runStartupAudits(functionsPath, projectConfig) {\n    const entryPoint = resolveFunctionsEntryPoint(functionsPath);\n    const implementation = resolveAuditorImplementation(projectConfig);\n    if (implementation === \"analyzer\") {\n        const analyzerAuditor = await loadAnalyzerAuditorModuleForRuntime();\n        const projectRoot = resolve(functionsPath, \"..\");\n        const resolvedRootDir = projectConfig?.rootDir ??\n            projectConfig?.functionsDir ??\n            \"./\" + relative(projectRoot, functionsPath).replace(/\\\\/g, \"/\");\n        const analysis = await analyzerAuditor.runAppSourceAndGraphAnalysis({\n            projectRoot,\n            rootDir: resolvedRootDir,\n            schema: projectConfig?.schema,\n            serverPublishDir: projectConfig?.codegen?.serverOutDir,\n        });\n        const moduleResult = analyzerAuditor.getAnalyzerModuleAuditReport(analysis.graphResult);\n        analyzerAuditor.printAnalyzerModuleAuditReport(moduleResult, entryPoint);\n        if (!moduleResult.passed && process.env.GENCOW_STRICT === \"true\") {\n            console.error(\"[gencow] Server startup aborted due to module violations.\");\n            console.error(\"[gencow] Set GENCOW_STRICT=false to override (not recommended).\");\n            process.exit(1);\n        }\n        const sourceReport = analyzerAuditor.getAnalyzerSourceAuditReport(analysis.graphResult);\n        if (!sourceReport) {\n            throw new Error(\"Analyzer source report contract missing from graph analysis result.\");\n        }\n        analyzerAuditor.printAnalyzerSchemaPatternReport(sourceReport.schemaPatterns);\n        analyzerAuditor.printAnalyzerSelfFetchReport(sourceReport.selfFetch);\n        const unsafeDbResult = sourceReport.unsafeDb;\n        analyzerAuditor.printAnalyzerUnsafeDbReport(unsafeDbResult);\n        if (unsafeDbResult.blocked && process.env.GENCOW_STRICT === \"true\") {\n            console.error(\"[gencow] Server startup aborted due to unsafe public database access.\");\n            console.error(\"[gencow] Use ctx.db or add a complete gencow-allow-unsafe-db review comment.\");\n            process.exit(1);\n        }\n        const workflowShadowingResult = sourceReport.workflowShadowing;\n        analyzerAuditor.printAnalyzerWorkflowShadowingReport(workflowShadowingResult);\n        if (!workflowShadowingResult.passed && process.env.GENCOW_STRICT === \"true\") {\n            console.error(\"[gencow] Server startup aborted due to workflow runtime shadowing.\");\n            console.error('[gencow] Import workflow from \"@gencow/core\" and remove local workflow.ts forks.');\n            process.exit(1);\n        }\n        analyzerAuditor.printAnalyzerAIBypassReport(sourceReport.aiBypass);\n        analyzerAuditor.printAnalyzerFrontendAntiPatternReport(sourceReport.frontendAntiPatterns);\n        return;\n    }\n    const auditResult = await auditFunctions(entryPoint);\n    printAuditReport(auditResult, entryPoint);\n    if (!auditResult.passed && process.env.GENCOW_STRICT === \"true\") {\n        console.error(\"[gencow] Server startup aborted due to module violations.\");\n        console.error(\"[gencow] Set GENCOW_STRICT=false to override (not recommended).\");\n        process.exit(1);\n    }\n    const schemaFile = resolve(functionsPath, \"schema.ts\");\n    if (existsSync(schemaFile)) {\n        auditSchemaPatterns(schemaFile);\n    }\n    const selfFetchResult = auditSelfFetch(functionsPath);\n    printSelfFetchReport(selfFetchResult);\n    const unsafeDbResult = auditUnsafeDbUsage(functionsPath);\n    printUnsafeDbReport(unsafeDbResult);\n    if (unsafeDbResult.blocked && process.env.GENCOW_STRICT === \"true\") {\n        console.error(\"[gencow] Server startup aborted due to unsafe public database access.\");\n        console.error(\"[gencow] Use ctx.db or add a complete gencow-allow-unsafe-db review comment.\");\n        process.exit(1);\n    }\n    const workflowShadowingResult = auditWorkflowShadowing(functionsPath);\n    printWorkflowShadowingReport(workflowShadowingResult);\n    if (!workflowShadowingResult.passed && process.env.GENCOW_STRICT === \"true\") {\n        console.error(\"[gencow] Server startup aborted due to workflow runtime shadowing.\");\n        console.error('[gencow] Import workflow from \"@gencow/core\" and remove local workflow.ts forks.');\n        process.exit(1);\n    }\n    const aiBypassResult = auditAIBypass(functionsPath);\n    printAIBypassReport(aiBypassResult);\n    const projectDir = resolve(functionsPath, \"..\");\n    const frontendResult = auditFrontendAntiPatterns(projectDir);\n    printFrontendAntiPatternReport(frontendResult);\n}\nexport function collectRegisteredOperationCounts(appModule) {\n    const inventory = collectRuntimeOperationInventory({ appModule });\n    return {\n        legacyQueries: inventory.legacyQueries.length,\n        legacyMutations: inventory.legacyMutations.length,\n        procedureQueries: inventory.procedureQueries.length,\n        procedureMutations: inventory.procedureMutations.length,\n        totalQueries: inventory.totalQueries,\n        totalMutations: inventory.totalMutations,\n        totalOperations: inventory.totalOperations,\n    };\n}\nfunction logRegisteredOperationCounts(label, appModule) {\n    const counts = collectRegisteredOperationCounts(appModule);\n    console.log(`[gencow] ${label}: ${counts.totalQueries} queries, ${counts.totalMutations} mutations registered`);\n    return counts;\n}\nasync function forceImportRegisteredModules(functionsPath, appModule) {\n    console.warn(\"[gencow] Registry empty after import \u2014 forcing individual module imports...\");\n    for (const key of Object.keys(appModule)) {\n        try {\n            const tsPath = resolve(functionsPath, `${key}.ts`);\n            const jsPath = resolve(functionsPath, `${key}.js`);\n            const modulePath = existsSync(tsPath) ? tsPath : existsSync(jsPath) ? jsPath : null;\n            if (modulePath) {\n                await import(modulePath);\n                console.log(`[gencow]   \u2713 Force-imported: ${key}`);\n            }\n        }\n        catch (error) {\n            console.error(`[gencow]   \u2717 Failed to import ${key}:`, error?.message);\n        }\n    }\n    const counts = logRegisteredOperationCounts(\"After force-import\", appModule);\n    if (counts.totalOperations === 0) {\n        console.error(\"[gencow] \u26A0 Still 0 functions after force-import! Possible causes:\");\n        console.error(`[gencow]   - @gencow/core not resolvable from ${functionsPath}`);\n        console.error(\"[gencow]   - Module files are empty or have syntax errors\");\n        console.error(`[gencow]   - NODE_PATH=${process.env.NODE_PATH}`);\n    }\n}\nexport async function loadAppModule(params) {\n    const { functionsPath, isWarmWorker, onTiming, startupTiming } = params;\n    if (!hasFunctionsSource(functionsPath)) {\n        console.log(\"[gencow] No functions found \u2014 starting in minimal mode (deploy to add functions)\");\n        return {};\n    }\n    if (!isWarmWorker) {\n        const projectConfig = await loadProjectConfig(functionsPath);\n        if (startupTiming) {\n            await startupTiming.measure(\"startup_audits\", () => runStartupAudits(functionsPath, projectConfig));\n        }\n        else {\n            await runStartupAudits(functionsPath, projectConfig);\n        }\n    }\n    onTiming?.(\"pre-import\");\n    const appEntryPoint = resolveFunctionsEntryPoint(functionsPath);\n    const importAppModule = () => import(pathToFileURL(appEntryPoint).href);\n    const appModule = startupTiming\n        ? await startupTiming.measure(\"app_import\", importAppModule)\n        : await importAppModule();\n    onTiming?.(\"post-import\");\n    const finalizeAppRegistry = async () => {\n        const counts = logRegisteredOperationCounts(\"After import\", appModule);\n        if (counts.totalOperations === 0 && appModule) {\n            await forceImportRegisteredModules(functionsPath, appModule);\n        }\n    };\n    if (startupTiming) {\n        await startupTiming.measure(\"app_registry\", finalizeAppRegistry);\n    }\n    else {\n        await finalizeAppRegistry();\n    }\n    return appModule;\n}\nexport async function loadAuthConfig(functionsPath) {\n    const authConfigFile = resolveAuthConfigFile(functionsPath);\n    if (!authConfigFile)\n        return undefined;\n    try {\n        const authModule = await import(authConfigFile);\n        console.log(\"[auth] Loaded auth config from auth.ts \u2713\");\n        return authModule.default;\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        console.error(\"[auth] Failed to load auth.ts:\", message);\n        return undefined;\n    }\n}\nexport function resolveProjectSchemaFiles(functionsPath, projectConfig) {\n    const projectDir = resolve(functionsPath, \"..\");\n    return resolveConfiguredSchemaPaths(projectDir, functionsPath, projectConfig?.schema);\n}\nexport async function loadAuthAdapterSchema(functionsPath, projectConfig, options = {}) {\n    const contract = resolveRuntimeAuthSchemaContract({\n        functionsPath,\n        configuredSchemaFiles: resolveProjectSchemaFiles(functionsPath, projectConfig),\n        isPlatform: options.isPlatform,\n    });\n    return loadRuntimeAuthAdapterSchema(contract);\n}\nexport async function loadProjectConfig(functionsPath) {\n    const projectConfigFile = resolveProjectConfigFile(functionsPath);\n    if (!projectConfigFile)\n        return undefined;\n    try {\n        const configModule = await import(projectConfigFile);\n        console.log(\"[config] Loaded gencow.config \u2713\");\n        return gencowConfigSchema.parse(configModule.default ?? {});\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        console.error(\"[config] Failed to load gencow.config:\", message);\n        return undefined;\n    }\n}\n", "const UNKNOWN_RECORD_TYPE = \"Record<string, unknown>\";\nconst IDENTIFIER_RE = /^[$A-Z_][0-9A-Z_$]*$/i;\nfunction safeFieldKey(key) {\n    return IDENTIFIER_RE.test(key) ? key : JSON.stringify(key);\n}\nfunction isPlainObject(value) {\n    return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction getObjectProperty(value, key) {\n    return isPlainObject(value) ? value[key] : undefined;\n}\nfunction hasParseFunction(value) {\n    return typeof getObjectProperty(value, \"parse\") === \"function\";\n}\nfunction inferTypeFromSample(sample) {\n    if (sample instanceof Date && !Number.isNaN(sample.getTime()))\n        return \"Date\";\n    if (sample === undefined || sample === null)\n        return \"unknown\";\n    const typeOfSample = typeof sample;\n    if (typeOfSample === \"string\")\n        return \"string\";\n    if (typeOfSample === \"number\")\n        return \"number\";\n    if (typeOfSample === \"boolean\")\n        return \"boolean\";\n    if (typeOfSample === \"bigint\")\n        return \"bigint\";\n    if (Array.isArray(sample))\n        return \"unknown[]\";\n    if (typeOfSample === \"object\")\n        return UNKNOWN_RECORD_TYPE;\n    return \"unknown\";\n}\nfunction jsonSchemaToTypeLiteral(jsonSchema) {\n    if (!jsonSchema || typeof jsonSchema !== \"object\" || Array.isArray(jsonSchema))\n        return undefined;\n    const schema = jsonSchema;\n    if (Array.isArray(schema.anyOf) && schema.anyOf.length > 0) {\n        const branches = schema.anyOf\n            .map((branch) => jsonSchemaToTypeLiteral(branch))\n            .filter(Boolean);\n        if (branches.length > 0)\n            return branches.join(\" | \");\n    }\n    const type = schema.type;\n    if (Array.isArray(type) && type.length > 0) {\n        const rendered = type\n            .map((entryType) => jsonSchemaToTypeLiteral({ ...schema, type: entryType }))\n            .filter(Boolean);\n        return rendered.length > 0 ? rendered.join(\" | \") : undefined;\n    }\n    if (typeof type !== \"string\") {\n        if (Array.isArray(schema.enum) && schema.enum.length > 0) {\n            return schema.enum.map((value) => JSON.stringify(value)).join(\" | \");\n        }\n        return undefined;\n    }\n    if (type === \"string\" && schema.format === \"date-time\")\n        return \"Date\";\n    if (type === \"string\" && schema.format === \"binary\" && schema[\"x-gencow-type\"] === \"file\") {\n        return \"File\";\n    }\n    if (type === \"string\")\n        return \"string\";\n    if (type === \"number\" || type === \"integer\")\n        return \"number\";\n    if (type === \"boolean\")\n        return \"boolean\";\n    if (type === \"null\")\n        return \"null\";\n    if (type === \"array\")\n        return `(${jsonSchemaToTypeLiteral(schema.items) ?? \"unknown\"})[]`;\n    if (type === \"object\") {\n        const props = schema.properties;\n        const required = new Set(Array.isArray(schema.required) ? schema.required : []);\n        if (!isPlainObject(props))\n            return UNKNOWN_RECORD_TYPE;\n        const fields = Object.entries(props).map(([field, childSchema]) => {\n            const optional = required.has(field) ? \"\" : \"?\";\n            return `${safeFieldKey(field)}${optional}: ${jsonSchemaToTypeLiteral(childSchema) ?? \"unknown\"}`;\n        });\n        return `{ ${fields.join(\"; \")} }`;\n    }\n    return undefined;\n}\nfunction renderZodObjectShape(shape) {\n    if (!isPlainObject(shape))\n        return UNKNOWN_RECORD_TYPE;\n    const entries = Object.entries(shape);\n    if (entries.length === 0)\n        return \"Record<string, never>\";\n    const rendered = entries.map(([field, fieldSchema]) => {\n        return `${safeFieldKey(field)}: ${schemaToCodegenTypeLiteral(fieldSchema)}`;\n    });\n    return `{ ${rendered.join(\"; \")} }`;\n}\nfunction zodSchemaToTypeLiteral(schema) {\n    const def = getObjectProperty(schema, \"_def\");\n    if (!isPlainObject(def))\n        return undefined;\n    const type = def.type;\n    if (typeof type !== \"string\")\n        return undefined;\n    if (type === \"string\")\n        return \"string\";\n    if (type === \"number\")\n        return \"number\";\n    if (type === \"boolean\")\n        return \"boolean\";\n    if (type === \"bigint\")\n        return \"bigint\";\n    if (type === \"date\")\n        return \"Date\";\n    if (type === \"null\")\n        return \"null\";\n    if (type === \"undefined\")\n        return \"undefined\";\n    if (type === \"unknown\" || type === \"any\")\n        return \"unknown\";\n    if (type === \"void\")\n        return \"void\";\n    if (type === \"never\")\n        return \"never\";\n    if (type === \"literal\")\n        return JSON.stringify(def.value);\n    if (type === \"array\")\n        return `(${schemaToCodegenTypeLiteral(def.element)})[]`;\n    if (type === \"object\")\n        return renderZodObjectShape(def.shape);\n    if (type === \"map\") {\n        return `Map<${schemaToCodegenTypeLiteral(def.keyType)}, ${schemaToCodegenTypeLiteral(def.valueType)}>`;\n    }\n    if (type === \"record\")\n        return `Record<string, ${schemaToCodegenTypeLiteral(def.valueType)}>`;\n    if (type === \"tuple\") {\n        return Array.isArray(def.items)\n            ? `[${def.items.map((item) => schemaToCodegenTypeLiteral(item)).join(\", \")}]`\n            : \"unknown[]\";\n    }\n    if (type === \"union\") {\n        return Array.isArray(def.options)\n            ? def.options.map((option) => schemaToCodegenTypeLiteral(option)).join(\" | \")\n            : \"unknown\";\n    }\n    if (type === \"optional\")\n        return `${schemaToCodegenTypeLiteral(def.innerType)} | undefined`;\n    if (type === \"nullable\")\n        return `${schemaToCodegenTypeLiteral(def.innerType)} | null`;\n    if (type === \"default\")\n        return schemaToCodegenTypeLiteral(def.innerType);\n    return undefined;\n}\nexport function schemaToCodegenTypeLiteral(schema) {\n    if (!schema)\n        return UNKNOWN_RECORD_TYPE;\n    const fromDirectJsonSchema = jsonSchemaToTypeLiteral(schema);\n    if (fromDirectJsonSchema)\n        return fromDirectJsonSchema;\n    const standardMeta = getObjectProperty(schema, \"~standard\");\n    const standardJsonSchema = getObjectProperty(standardMeta, \"jsonSchema\");\n    const fromStandardJsonSchema = jsonSchemaToTypeLiteral(typeof standardJsonSchema === \"function\" ? standardJsonSchema() : standardJsonSchema);\n    if (fromStandardJsonSchema)\n        return fromStandardJsonSchema;\n    const vendorProp = getObjectProperty(standardMeta, \"vendor\");\n    const vendor = typeof vendorProp === \"string\" ? vendorProp.toLowerCase() : \"\";\n    if (vendor.includes(\"zod\")) {\n        const fromZod = zodSchemaToTypeLiteral(schema);\n        if (fromZod)\n            return fromZod;\n    }\n    if (hasParseFunction(schema))\n        return inferTypeFromSample(getObjectProperty(schema, \"_type\"));\n    if (!isPlainObject(schema))\n        return UNKNOWN_RECORD_TYPE;\n    const entries = Object.entries(schema).filter(([, value]) => hasParseFunction(value));\n    if (entries.length === 0)\n        return UNKNOWN_RECORD_TYPE;\n    const rendered = entries.map(([field, validator]) => {\n        const validatorType = getObjectProperty(validator, \"_type\");\n        const inferred = inferTypeFromSample(validatorType);\n        const optional = validatorType === undefined ? \"?\" : \"\";\n        return `${safeFieldKey(field)}${optional}: ${inferred}`;\n    });\n    return `{ ${rendered.join(\"; \")} }`;\n}\n", "function collectCrudDefinitions(appModule) {\n    if (!appModule || typeof appModule !== \"object\")\n        return [];\n    const mod = appModule;\n    const apiCandidate = mod.default !== undefined && mod.default !== null && typeof mod.default === \"object\"\n        ? mod.default\n        : appModule;\n    const crud = apiCandidate.crud;\n    if (!crud || typeof crud !== \"object\")\n        return [];\n    return typeof crud.prefix === \"string\"\n        ? [crud]\n        : Object.values(crud).filter((entry) => !!entry && typeof entry === \"object\");\n}\nexport function collectCrudCodegenMeta(appModule) {\n    const byPrefix = new Map();\n    for (const def of collectCrudDefinitions(appModule)) {\n        const meta = def.meta;\n        const prefix = typeof def.prefix === \"string\"\n            ? def.prefix\n            : meta && typeof meta.prefix === \"string\"\n                ? meta.prefix\n                : undefined;\n        if (!meta || typeof prefix !== \"string\")\n            continue;\n        byPrefix.set(prefix, {\n            prefix,\n            tableName: meta.tableName,\n            methods: meta.methods ?? [],\n            allowedFilters: meta.allowedFilters ?? [],\n            searchFields: meta.searchFields ?? [],\n            sortable: meta.sortable ?? [],\n            cursor: meta.cursor ?? [],\n            ...(meta.disableILike ? { disableILike: meta.disableILike } : {}),\n            ...(meta.allowAnonymous ? { allowAnonymous: true } : {}),\n            realtime: meta.realtime === true,\n            listRealtime: meta.listRealtime === true,\n            ...(meta.realtimePolicy !== undefined ? { realtimePolicy: meta.realtimePolicy } : {}),\n            ...(meta.resourceIdentity ? { resourceIdentity: meta.resourceIdentity } : {}),\n            crudImpl: \"createCrud\",\n        });\n    }\n    return [...byPrefix.values()];\n}\nexport function collectOwnerRlsTables(appModule) {\n    const dedup = new Map();\n    for (const def of collectCrudDefinitions(appModule)) {\n        const meta = def.meta;\n        if (!meta?.ownerRls)\n            continue;\n        dedup.set(meta.tableName, {\n            tableName: meta.tableName,\n            columnName: meta.ownerRls.columnName,\n            readPublic: meta.ownerRls.readPublic,\n        });\n    }\n    return [...dedup.values()];\n}\n", "function asProcedureDef(value) {\n    if (!value || typeof value !== \"object\")\n        return undefined;\n    const d = value;\n    if (d.kind !== \"query\" && d.kind !== \"mutation\" && d.kind !== \"internal\")\n        return undefined;\n    if (typeof d.name !== \"string\" || typeof d.handler !== \"function\")\n        return undefined;\n    if (!Array.isArray(d.middlewares))\n        return undefined;\n    if (typeof d.inputValidationIndex !== \"number\" || typeof d.outputValidationIndex !== \"number\") {\n        return undefined;\n    }\n    if (typeof d.allowAnonymous !== \"boolean\")\n        return undefined;\n    return d;\n}\nexport function collectProcedureRouteMaps(appModule) {\n    const queryProcedureMap = new Map();\n    const mutationProcedureMap = new Map();\n    const internalProcedureMap = new Map();\n    if (!appModule || typeof appModule !== \"object\") {\n        return { queryProcedureMap, mutationProcedureMap, internalProcedureMap };\n    }\n    const mod = appModule;\n    const apiCandidate = mod.default !== undefined && mod.default !== null && typeof mod.default === \"object\"\n        ? mod.default\n        : appModule;\n    const procedures = apiCandidate.procedures;\n    if (procedures && typeof procedures === \"object\") {\n        for (const def of Object.values(procedures)) {\n            const proc = asProcedureDef(def);\n            if (!proc)\n                continue;\n            if (proc.kind === \"query\") {\n                queryProcedureMap.set(proc.name, proc);\n            }\n            else if (proc.kind === \"mutation\") {\n                mutationProcedureMap.set(proc.name, proc);\n            }\n            else {\n                internalProcedureMap.set(proc.name, proc);\n            }\n        }\n    }\n    const crudBag = apiCandidate.crud;\n    if (crudBag && typeof crudBag === \"object\") {\n        for (const entry of Object.values(crudBag)) {\n            if (!entry || typeof entry !== \"object\")\n                continue;\n            const maybe = entry;\n            for (const key of [\"list\", \"get\", \"create\", \"update\", \"remove\"]) {\n                const proc = asProcedureDef(maybe[key]);\n                if (!proc)\n                    continue;\n                if (proc.kind === \"query\") {\n                    queryProcedureMap.set(proc.name, proc);\n                }\n                else if (proc.kind === \"mutation\") {\n                    mutationProcedureMap.set(proc.name, proc);\n                }\n            }\n        }\n    }\n    return { queryProcedureMap, mutationProcedureMap, internalProcedureMap };\n}\n", "import { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nexport function resolveFunctionsImportPath(functionsPath) {\n    if (existsSync(resolve(functionsPath, \"index.js\")))\n        return resolve(functionsPath, \"index.js\");\n    if (existsSync(resolve(functionsPath, \"index.ts\")))\n        return resolve(functionsPath, \"index.ts\");\n    return functionsPath;\n}\n", "export * from \"./codegen-schema-types.js\";\nexport * from \"./crud-route-maps.js\";\nexport * from \"./procedure-route-maps.js\";\nexport * from \"./functions-entrypoint.js\";\nexport * from \"./definition-collector.js\";\nexport * from \"./name-casing.js\";\nexport * from \"./raw-model.js\";\nexport * from \"./registry-extractor.js\";\nexport * from \"./schema-paths.js\";\nexport * from \"./source-entrypoints.js\";\nexport * from \"./table-introspector.js\";\n", "import { isAbsolute, resolve } from \"node:path\";\nexport function resolveSourceEntrypoints(input) {\n    const projectRoot = resolve(input.projectRoot);\n    const rootDir = input.rootDir ?? input.functionsDir ?? \"gencow\";\n    const functionsDirAbs = isAbsolute(rootDir) ? rootDir : resolve(projectRoot, rootDir);\n    const outDirAbs = resolve(projectRoot, input.outDir ?? \".gencow/codegen\");\n    const finalOutDirAbs = input.finalOutDir\n        ? isAbsolute(input.finalOutDir)\n            ? input.finalOutDir\n            : resolve(projectRoot, input.finalOutDir)\n        : undefined;\n    return { projectRoot, functionsDirAbs, outDirAbs, finalOutDirAbs };\n}\nexport function assertSourceEntrypoints(input) {\n    if (!input.projectRoot || !input.functionsDirAbs || !input.outDirAbs) {\n        throw new Error(\"Invalid source entrypoints\");\n    }\n}\n", "import { delimiter, relative, resolve } from \"node:path\";\nexport function createTableIntrospector(deps) {\n    return {\n        extract(input) {\n            return extractTables(input, deps);\n        },\n    };\n}\nexport async function extractTables(input, deps) {\n    const schemaFiles = await resolveSchemaFiles(input, deps.fs);\n    const workDir = resolve(input.projectRoot, \".gencow\");\n    await deps.fs.mkdir(workDir, { recursive: true });\n    const scriptPath = resolve(workDir, \".gencow-codegen-table-extract.ts\");\n    const script = buildTableExtractScript(schemaFiles, input.projectRoot);\n    await deps.fs.writeFile(scriptPath, script);\n    try {\n        const result = await deps.processRunner.run({\n            command: \"bun\",\n            args: [scriptPath],\n            cwd: workDir,\n            env: {\n                NODE_PATH: [resolve(input.projectRoot, \"node_modules\"), process.env.NODE_PATH ?? \"\"]\n                    .filter(Boolean)\n                    .join(delimiter),\n            },\n        });\n        if (result.exitCode !== 0) {\n            throw new Error(result.stderr || result.stdout || \"Table extraction failed\");\n        }\n        return normalizeRawTablePayload(parseTableExtractOutput(result.stdout));\n    }\n    finally {\n        try {\n            await deps.fs.unlink(scriptPath);\n        }\n        catch {\n            /* noop */\n        }\n    }\n}\nexport function normalizeRawTablePayload(payload) {\n    return {\n        tables: [...payload.tables]\n            .map((table) => ({\n            ...table,\n            fields: [...table.fields].sort((a, b) => a.name.localeCompare(b.name)),\n        }))\n            .sort((a, b) => a.tableName.localeCompare(b.tableName)),\n    };\n}\nasync function resolveSchemaFiles(input, fs) {\n    const configuredPaths = Array.isArray(input.schemaPaths)\n        ? input.schemaPaths.map((path) => resolve(input.projectRoot, path)).filter(Boolean)\n        : [];\n    if (configuredPaths.length > 0) {\n        return uniqueExistingFiles(configuredPaths, fs);\n    }\n    if (input.schemaPath) {\n        return uniqueExistingFiles([resolve(input.projectRoot, input.schemaPath)], fs);\n    }\n    if (input.functionsDirAbs) {\n        // Backward-compatible fallback for projects not setting schema in config.\n        return uniqueExistingFiles([resolve(input.functionsDirAbs, \"schema.ts\")], fs);\n    }\n    return uniqueExistingFiles([resolve(input.projectRoot, \"gencow\", \"schema.ts\")], fs);\n}\nasync function uniqueExistingFiles(paths, fs) {\n    const out = [];\n    const seen = new Set();\n    for (const fullPath of paths) {\n        if (seen.has(fullPath))\n            continue;\n        seen.add(fullPath);\n        try {\n            const stat = await fs.stat(fullPath);\n            if (stat.isFile())\n                out.push(fullPath);\n        }\n        catch {\n            /* ignore missing schema file */\n        }\n    }\n    return out.sort((a, b) => a.localeCompare(b));\n}\nfunction buildTableExtractScript(schemaFilesAbs, projectRoot) {\n    const projectRootNorm = resolve(projectRoot);\n    const imports = schemaFilesAbs\n        .map((abs, index) => `import * as schemaModule${index} from ${JSON.stringify(abs.replace(/\\\\/g, \"/\"))};`)\n        .join(\"\\n\");\n    const entries = schemaFilesAbs\n        .map((abs, index) => {\n        const sourceRel = relative(projectRootNorm, abs).replace(/\\\\/g, \"/\");\n        return `...Object.entries(schemaModule${index}).map(([exportName, candidate]) => ({ exportName, candidate, sourcePath: ${JSON.stringify(sourceRel)} }))`;\n    })\n        .join(\",\\n  \");\n    return `import { getTableColumns, getTableName } from \"drizzle-orm\";\n${imports}\n\nconst allSchemaEntries = [\n  ${entries}\n];\nconst tables = allSchemaEntries\n  .map(({ exportName, candidate, sourcePath }) => {\n    try {\n      const tableName = getTableName(candidate);\n      if (!tableName) return null;\n      let columns = {};\n      try {\n        columns = getTableColumns(candidate);\n      } catch {\n        columns = {};\n      }\n      const fields = Object.entries(columns).map(([name, columnDef]) => ({\n        name,\n        dataType: columnDef?.dataType ?? \"unknown\",\n        columnType: String(columnDef?.columnType ?? \"\"),\n        notNull: Boolean(columnDef?.notNull),\n      }));\n      return { tableName, exportName, sourcePath, fields };\n    } catch {\n      return null;\n    }\n  })\n  .filter(Boolean);\n\nconsole.log(\"GENCOW_TABLES_JSON=\" + JSON.stringify({ tables }));\n`;\n}\nexport function parseTableExtractOutput(stdout) {\n    const jsonText = extractJsonAfterMarker(stdout, \"GENCOW_TABLES_JSON=\");\n    if (!jsonText) {\n        throw new Error(`Could not parse table extraction output: ${stdout.slice(0, 300)}`);\n    }\n    let parsed;\n    try {\n        parsed = JSON.parse(jsonText);\n    }\n    catch (error) {\n        throw new Error(`Invalid table extraction payload: ${error.message}`);\n    }\n    return {\n        tables: Array.isArray(parsed.tables)\n            ? parsed.tables.map((entry) => ({\n                tableName: String(entry.tableName ?? \"\"),\n                exportName: String(entry.exportName ?? \"\"),\n                sourcePath: String(entry.sourcePath ?? \"\"),\n                fields: Array.isArray(entry.fields)\n                    ? entry.fields.map((field) => ({\n                        name: String(field.name ?? \"\"),\n                        dataType: inferFieldDataType({\n                            dataType: String(field.dataType ?? \"unknown\"),\n                            columnType: String(field.columnType ?? \"\"),\n                        }),\n                        notNull: Boolean(field.notNull),\n                    }))\n                    : [],\n            }))\n            : [],\n    };\n}\nexport function inferFieldDataType(input) {\n    const raw = input.dataType.toLowerCase().trim();\n    const rawTokens = raw.split(/\\s+/g).filter(Boolean);\n    const columnType = input.columnType.toLowerCase();\n    if (raw === \"string\" || raw === \"number\" || raw === \"boolean\" || raw === \"date\" || raw === \"json\")\n        return raw;\n    if (rawTokens.includes(\"date\"))\n        return \"date\";\n    if (rawTokens.includes(\"json\"))\n        return \"json\";\n    if (rawTokens.includes(\"bigint\"))\n        return \"bigint\";\n    if (rawTokens.includes(\"array\"))\n        return \"array\";\n    if (raw === \"bigint\" || columnType.includes(\"bigint\"))\n        return \"bigint\";\n    if (raw === \"array\" || columnType.includes(\"array\"))\n        return \"array\";\n    if (raw === \"buffer\" || columnType.includes(\"bytea\"))\n        return \"buffer\";\n    if (raw === \"object\") {\n        if (columnType.includes(\"timestamp\") || columnType.includes(\"date\"))\n            return \"date\";\n        if (columnType.includes(\"json\"))\n            return \"json\";\n        return \"unknown\";\n    }\n    if (raw.includes(\"date\") || columnType.includes(\"timestamp\") || columnType.includes(\"date\"))\n        return \"date\";\n    if (raw.includes(\"json\") || columnType.includes(\"json\"))\n        return \"json\";\n    if (raw.includes(\"int\") || raw.includes(\"float\") || raw.includes(\"double\") || raw.includes(\"numeric\"))\n        return \"number\";\n    return \"unknown\";\n}\nfunction extractJsonAfterMarker(stdout, marker) {\n    const markerIndex = stdout.indexOf(marker);\n    if (markerIndex === -1)\n        return undefined;\n    const startIndex = stdout.indexOf(\"{\", markerIndex + marker.length);\n    if (startIndex === -1)\n        return undefined;\n    let depth = 0;\n    let inString = false;\n    let escaped = false;\n    for (let index = startIndex; index < stdout.length; index += 1) {\n        const ch = stdout[index];\n        if (inString) {\n            if (escaped) {\n                escaped = false;\n            }\n            else if (ch === \"\\\\\") {\n                escaped = true;\n            }\n            else if (ch === '\"') {\n                inString = false;\n            }\n            continue;\n        }\n        if (ch === '\"') {\n            inString = true;\n            continue;\n        }\n        if (ch === \"{\")\n            depth += 1;\n        if (ch === \"}\") {\n            depth -= 1;\n            if (depth === 0) {\n                return stdout.slice(startIndex, index + 1);\n            }\n        }\n    }\n    return undefined;\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // Use a relative epsilon scaled to the magnitude of the result\n    const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n    // as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n    rest.path ?? (rest.path = []);\n    rest.message = message;\n    if (ctx?.reportInput) {\n        rest.input = _input;\n    }\n    return rest;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n", "import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 4,\n    patch: 3,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // When normalize is off, require :// for http/https URLs\n            // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n            if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n                if (!/^https?:\\/\\//i.test(trimmed)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid URL format\",\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                    return;\n                }\n            }\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n    const isPresent = key in input;\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (isOptionalIn && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && !isOptionalIn) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalIn = _catchall.optin === \"optional\";\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        // skip __proto__ so it can't replace the result prototype via the\n        // assignment setter on the plain {} we build into\n        if (key === \"__proto__\")\n            continue;\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalIn = el._zod.optin === \"optional\";\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalIn = schema?._zod?.optin === \"optional\";\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${k} in input;\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n        }\n\n        if (${id}_present) {\n          if (${id}.value === undefined) {\n            newResult[${k}] = undefined;\n          } else {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators\n        //   have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed\n        // array. The post-processing in `handleTupleResults` walks them in\n        // order so it can decide whether an absent optional-output error can\n        // truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n            }\n        }\n        if (def.rest) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        if (items[i]._zod[key] !== \"optional\")\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n    // rule, but only after `optoutStart`: the first index where the output\n    // tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n                // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        payload.fallback = true;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (input === undefined && (result.issues.length || result.fallback)) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const input = payload.value;\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, input));\n            return handleOptionalResult(result, input);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                    payload.fallback = true;\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n            payload.fallback = true;\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this\n    // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n    // preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as el } from \"./el.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hr } from \"./hr.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ro } from \"./ro.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0645\u062F\u062E\u0644\",\n        email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n        url: \"\u0631\u0627\u0628\u0637\",\n        emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n        ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n        cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n        cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n        base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n        base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n        json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n        e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0645\u062F\u062E\u0644\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n                }\n                return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n                return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n            }\n            case \"not_multiple_of\":\n                return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n            case \"invalid_element\":\n                return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            default:\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n                }\n                return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n                if (_issue.format === \"regex\")\n                    return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n                return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n            case \"invalid_union\":\n                return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n            default:\n                return `Yanl\u0131\u015F d\u0259y\u0259r`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n                few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n                many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u044B\",\n                many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0443\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0430\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0447\u0430\u0441\",\n        duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n        cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n        base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n        json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n        e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0443\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u043B\u0456\u043A\",\n        array: \"\u043C\u0430\u0441\u0456\u045E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n                }\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n            default:\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u043E\u0434\",\n        email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        json_string: \"JSON \u043D\u0438\u0437\",\n        e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n                let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n                if (_issue.format === \"emoji\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"datetime\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"date\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                if (_issue.format === \"time\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"duration\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"adre\u00E7a electr\u00F2nica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adre\u00E7a IPv4\",\n        ipv6: \"adre\u00E7a IPv6\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n                }\n                return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n                return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau inv\u00E0lida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n            case \"invalid_element\":\n                return `Element inv\u00E0lid a ${issue.origin}`;\n            default:\n                return `Entrada inv\u00E0lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n        file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n        array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n        set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n        email: \"e-mailov\u00E1 adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n        date: \"datum ve form\u00E1tu ISO\",\n        time: \"\u010Das ve form\u00E1tu ISO\",\n        duration: \"doba trv\u00E1n\u00ED ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n        base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n        json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n        e164: \"\u010D\u00EDslo E.164\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u010D\u00EDslo\",\n        string: \"\u0159et\u011Bzec\",\n        function: \"funkce\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n                }\n                return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n                return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatn\u00FD vstup\";\n            case \"invalid_element\":\n                return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n            default:\n                return `Neplatn\u00FD vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"havde\" },\n        file: { unit: \"bytes\", verb: \"havde\" },\n        array: { unit: \"elementer\", verb: \"indeholdt\" },\n        set: { unit: \"elementer\", verb: \"indeholdt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-mailadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkesl\u00E6t\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkesl\u00E6t\",\n        duration: \"ISO-varighed\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodet streng\",\n        base64url: \"base64url-kodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"streng\",\n        number: \"tal\",\n        boolean: \"boolean\",\n        array: \"liste\",\n        object: \"objekt\",\n        set: \"s\u00E6t\",\n        file: \"fil\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n                }\n                return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8gle i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n            case \"invalid_element\":\n                return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n            default:\n                return `Ugyldigt input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"Zahl\",\n        array: \"Array\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n                }\n                return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ung\u00FCltige Eingabe\";\n            case \"invalid_element\":\n                return `Ung\u00FCltiger Wert in ${issue.origin}`;\n            default:\n                return `Ung\u00FCltige Eingabe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03B5\u03C2\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n        file: { unit: \"bytes\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n        array: { unit: \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n        set: { unit: \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n        map: { unit: \"\u03BA\u03B1\u03C4\u03B1\u03C7\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\",\n        email: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1\",\n        date: \"ISO \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\",\n        time: \"ISO \u03CE\u03C1\u03B1\",\n        duration: \"ISO \u03B4\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1\",\n        ipv4: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv4\",\n        ipv6: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv6\",\n        mac: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 MAC\",\n        cidrv4: \"\u03B5\u03CD\u03C1\u03BF\u03C2 IPv4\",\n        cidrv6: \"\u03B5\u03CD\u03C1\u03BF\u03C2 IPv6\",\n        base64: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64\",\n        base64url: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64url\",\n        json_string: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC JSON\",\n        e164: \"\u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (typeof issue.expected === \"string\" && /^[A-Z]/.test(issue.expected)) {\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD instanceof ${issue.expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`;\n                }\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD \u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin ?? \"\u03C4\u03B9\u03BC\u03AE\"} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\"}`;\n                return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin ?? \"\u03C4\u03B9\u03BC\u03AE\"} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC \u03BC\u03B5 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B5\u03BB\u03B5\u03B9\u03CE\u03BD\u03B5\u03B9 \u03BC\u03B5 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03B5\u03B9 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03BF\u03C4\u03AF\u03B2\u03BF ${_issue.pattern}`;\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03BB\u03B1\u03C0\u03BB\u03AC\u03C3\u03B9\u03BF \u03C4\u03BF\u03C5 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u0386\u03B3\u03BD\u03C9\u03C3\u03C4${issue.keys.length > 1 ? \"\u03B1\" : \"\u03BF\"} \u03BA\u03BB\u03B5\u03B9\u03B4${issue.keys.length > 1 ? \"\u03B9\u03AC\" : \"\u03AF\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03C3\u03C4\u03BF ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\";\n            case \"invalid_element\":\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C3\u03C4\u03BF ${issue.origin}`;\n            default:\n                return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Invalid discriminator value. Expected ${opts}`;\n                }\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emo\u011Dio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-da\u016Dro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombro\",\n        array: \"tabelo\",\n        null: \"senvalora\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n                }\n                return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida \u015Dlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"direcci\u00F3n de correo electr\u00F3nico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duraci\u00F3n ISO\",\n        ipv4: \"direcci\u00F3n IPv4\",\n        ipv6: \"direcci\u00F3n IPv6\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"texto\",\n        number: \"n\u00FAmero\",\n        boolean: \"booleano\",\n        array: \"arreglo\",\n        object: \"objeto\",\n        set: \"conjunto\",\n        file: \"archivo\",\n        date: \"fecha\",\n        bigint: \"n\u00FAmero grande\",\n        symbol: \"s\u00EDmbolo\",\n        undefined: \"indefinido\",\n        null: \"nulo\",\n        function: \"funci\u00F3n\",\n        map: \"mapa\",\n        record: \"registro\",\n        tuple: \"tupla\",\n        enum: \"enumeraci\u00F3n\",\n        union: \"uni\u00F3n\",\n        literal: \"literal\",\n        promise: \"promesa\",\n        void: \"vac\u00EDo\",\n        never: \"nunca\",\n        unknown: \"desconocido\",\n        any: \"cualquiera\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n                }\n                return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n                return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Entrada inv\u00E1lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n        email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n        url: \"URL\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n        time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n        ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n        cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n        cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n        base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n        base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n        json_string: \"JSON \u0631\u0634\u062A\u0647\",\n        e164: \"E.164 \u0639\u062F\u062F\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0622\u0631\u0627\u06CC\u0647\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n                }\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n                }\n                return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            }\n            case \"not_multiple_of\":\n                return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n            case \"unrecognized_keys\":\n                return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            case \"invalid_element\":\n                return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n            default:\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n        email: \"s\u00E4hk\u00F6postiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n                }\n                return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen sy\u00F6te`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        string: \"cha\u00EEne\",\n        number: \"nombre\",\n        int: \"entier\",\n        boolean: \"bool\u00E9en\",\n        bigint: \"grand entier\",\n        symbol: \"symbole\",\n        undefined: \"ind\u00E9fini\",\n        null: \"null\",\n        never: \"jamais\",\n        void: \"vide\",\n        date: \"date\",\n        array: \"tableau\",\n        object: \"objet\",\n        tuple: \"tuple\",\n        record: \"enregistrement\",\n        map: \"carte\",\n        set: \"ensemble\",\n        file: \"fichier\",\n        nonoptional: \"non-optionnel\",\n        nan: \"NaN\",\n        function: \"fonction\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n                }\n                return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n                return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n                }\n                return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u2264\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u2265\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    // Hebrew labels + grammatical gender\n    const TypeNames = {\n        string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n        number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n        boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n        bigint: { label: \"BigInt\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n        array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n        object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n        null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n        undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n        symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n        function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n        map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n        set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n        file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n        promise: { label: \"Promise\", gender: \"m\" },\n        NaN: { label: \"NaN\", gender: \"m\" },\n        unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n        value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n    };\n    // Sizing units for size-related messages + localized origin labels\n    const Sizable = {\n        string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n        file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n    };\n    // Helpers \u2014 labels, articles, and verbs\n    const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n    const typeLabel = (t) => {\n        const e = typeEntry(t);\n        if (e)\n            return e.label;\n        // fallback: show raw string if unknown\n        return t ?? TypeNames.unknown.label;\n    };\n    const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n    const verbFor = (t) => {\n        const e = typeEntry(t);\n        const gender = e?.gender ?? \"m\";\n        return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n    };\n    const getSizing = (origin) => {\n        if (!origin)\n            return null;\n        return Sizable[origin] ?? null;\n    };\n    const FormatDictionary = {\n        regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n        url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n        uuid: { label: \"UUID\", gender: \"m\" },\n        nanoid: { label: \"nanoid\", gender: \"m\" },\n        guid: { label: \"GUID\", gender: \"m\" },\n        cuid: { label: \"cuid\", gender: \"m\" },\n        cuid2: { label: \"cuid2\", gender: \"m\" },\n        ulid: { label: \"ULID\", gender: \"m\" },\n        xid: { label: \"XID\", gender: \"m\" },\n        ksuid: { label: \"KSUID\", gender: \"m\" },\n        datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n        time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n        ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n        cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n        cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n        base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n        base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n        e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n        jwt: { label: \"JWT\", gender: \"m\" },\n        ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                // Expected type: show without definite article for clearer Hebrew\n                const expectedKey = issue.expected;\n                const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n                // Received: show localized label if known, otherwise constructor/raw\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n                }\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n            }\n            case \"invalid_value\": {\n                if (issue.values.length === 1) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n                }\n                // Join values with proper Hebrew formatting\n                const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n                if (issue.values.length === 2) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n                }\n                // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n                const lastValue = stringified[stringified.length - 1];\n                const restValues = stringified.slice(0, -1).join(\", \");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n            }\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    const comparison = issue.inclusive\n                        ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n                        : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    // Special case for singular (minimum === 1)\n                    if (issue.minimum === 1 && issue.inclusive) {\n                        const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n                        return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n                    }\n                    const comparison = issue.inclusive\n                        ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n                        : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n                if (_issue.format === \"starts_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n                // Handle gender agreement for formats\n                const nounEntry = FormatDictionary[_issue.format];\n                const noun = nounEntry?.label ?? _issue.format;\n                const gender = nounEntry?.gender ?? \"m\";\n                const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n                return `${noun} \u05DC\u05D0 ${adjective}`;\n            }\n            case \"not_multiple_of\":\n                return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\": {\n                return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n            }\n            case \"invalid_union\":\n                return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n            case \"invalid_element\": {\n                const place = withDefinite(issue.origin ?? \"array\");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n            }\n            default:\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakova\", verb: \"imati\" },\n        file: { unit: \"bajtova\", verb: \"imati\" },\n        array: { unit: \"stavki\", verb: \"imati\" },\n        set: { unit: \"stavki\", verb: \"imati\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"unos\",\n        email: \"email adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum i vrijeme\",\n        date: \"ISO datum\",\n        time: \"ISO vrijeme\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"IPv4 raspon\",\n        cidrv6: \"IPv6 raspon\",\n        base64: \"base64 kodirani tekst\",\n        base64url: \"base64url kodirani tekst\",\n        json_string: \"JSON tekst\",\n        e164: \"E.164 broj\",\n        jwt: \"JWT\",\n        template_literal: \"unos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"tekst\",\n        number: \"broj\",\n        boolean: \"boolean\",\n        array: \"niz\",\n        object: \"objekt\",\n        set: \"skup\",\n        file: \"datoteka\",\n        date: \"datum\",\n        bigint: \"bigint\",\n        symbol: \"simbol\",\n        undefined: \"undefined\",\n        null: \"null\",\n        function: \"funkcija\",\n        map: \"mapa\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neispravan unos: o\u010Dekuje se instanceof ${issue.expected}, a primljeno je ${received}`;\n                }\n                return `Neispravan unos: o\u010Dekuje se ${expected}, a primljeno je ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neispravna vrijednost: o\u010Dekivano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neispravna opcija: o\u010Dekivano jedno od ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Preveliko: o\u010Dekivano da ${origin ?? \"vrijednost\"} ima ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemenata\"}`;\n                return `Preveliko: o\u010Dekivano da ${origin ?? \"vrijednost\"} bude ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Premalo: o\u010Dekivano da ${origin} ima ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premalo: o\u010Dekivano da ${origin} bude ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neispravan tekst: mora zapo\u010Dinjati s \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neispravan tekst: mora zavr\u0161avati s \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neispravan tekst: mora sadr\u017Eavati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neispravan tekst: mora odgovarati uzorku ${_issue.pattern}`;\n                return `Neispravna ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neispravan broj: mora biti vi\u0161ekratnik od ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznat${issue.keys.length > 1 ? \"i klju\u010Devi\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neispravan klju\u010D u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Neispravan unos\";\n            case \"invalid_element\":\n                return `Neispravna vrijednost u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Neispravan unos`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"bemenet\",\n        email: \"email c\u00EDm\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO id\u0151b\u00E9lyeg\",\n        date: \"ISO d\u00E1tum\",\n        time: \"ISO id\u0151\",\n        duration: \"ISO id\u0151intervallum\",\n        ipv4: \"IPv4 c\u00EDm\",\n        ipv6: \"IPv6 c\u00EDm\",\n        cidrv4: \"IPv4 tartom\u00E1ny\",\n        cidrv6: \"IPv6 tartom\u00E1ny\",\n        base64: \"base64-k\u00F3dolt string\",\n        base64url: \"base64url-k\u00F3dolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 sz\u00E1m\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"sz\u00E1m\",\n        array: \"t\u00F6mb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n                }\n                return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n                if (_issue.format === \"ends_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n                if (_issue.format === \"includes\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n                return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00C9rv\u00E9nytelen bemenet\";\n            case \"invalid_element\":\n                return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n            default:\n                return `\u00C9rv\u00E9nytelen bemenet`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n    return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n    if (!word)\n        return \"\";\n    const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n    const lastChar = word[word.length - 1];\n    return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0576\u0577\u0561\u0576\",\n                many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0562\u0561\u0575\u0569\",\n                many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        array: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        set: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0574\u0578\u0582\u057F\u0584\",\n        email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n        url: \"URL\",\n        emoji: \"\u0567\u0574\u0578\u057B\u056B\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n        date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n        time: \"ISO \u056A\u0561\u0574\",\n        duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n        ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n        ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n        cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        json_string: \"JSON \u057F\u0578\u0572\",\n        e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n        jwt: \"JWT\",\n        template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0569\u056B\u057E\",\n        array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n                }\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n                return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n                if (_issue.format === \"ends_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n                if (_issue.format === \"includes\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n                return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n            case \"unrecognized_keys\":\n                return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            case \"invalid_union\":\n                return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n            case \"invalid_element\":\n                return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            default:\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n        file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n        array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n        set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"gildi\",\n        email: \"netfang\",\n        url: \"vefsl\u00F3\u00F0\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dagsetning og t\u00EDmi\",\n        date: \"ISO dagsetning\",\n        time: \"ISO t\u00EDmi\",\n        duration: \"ISO t\u00EDmalengd\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded strengur\",\n        base64url: \"base64url-encoded strengur\",\n        json_string: \"JSON strengur\",\n        e164: \"E.164 t\u00F6lugildi\",\n        jwt: \"JWT\",\n        template_literal: \"gildi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmer\",\n        array: \"fylki\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n                }\n                return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n                return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n                return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Rangur lykill \u00ED ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Rangt gildi\";\n            case \"invalid_element\":\n                return `Rangt gildi \u00ED ${issue.origin}`;\n            default:\n                return `Rangt gildi`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numero\",\n        array: \"vettore\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n                }\n                return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Input non valido: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n        file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n        array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n        set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u5165\u529B\u5024\",\n        email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n        url: \"URL\",\n        emoji: \"\u7D75\u6587\u5B57\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u6642\",\n        date: \"ISO\u65E5\u4ED8\",\n        time: \"ISO\u6642\u523B\",\n        duration: \"ISO\u671F\u9593\",\n        ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n        ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n        cidrv4: \"IPv4\u7BC4\u56F2\",\n        cidrv6: \"IPv6\u7BC4\u56F2\",\n        base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        json_string: \"JSON\u6587\u5B57\u5217\",\n        e164: \"E.164\u756A\u53F7\",\n        jwt: \"JWT\",\n        template_literal: \"\u5165\u529B\u5024\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5024\",\n        array: \"\u914D\u5217\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n                }\n                return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n                return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"unrecognized_keys\":\n                return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n            case \"invalid_union\":\n                return \"\u7121\u52B9\u306A\u5165\u529B\";\n            case \"invalid_element\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n            default:\n                return `\u7121\u52B9\u306A\u5165\u529B`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n        email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        url: \"URL\",\n        emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n        date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n        time: \"\u10D3\u10E0\u10DD\",\n        duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n        ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8\",\n        base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8\",\n        json_string: \"JSON \u10D5\u10D4\u10DA\u10D8\",\n        e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n        jwt: \"JWT\",\n        template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n        string: \"\u10D5\u10D4\u10DA\u10D8\",\n        boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n        function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n        array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n                }\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n                if (_issue.format === \"includes\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n                if (_issue.format === \"regex\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n            case \"unrecognized_keys\":\n                return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n            case \"invalid_union\":\n                return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n            case \"invalid_element\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n            default:\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n        email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n        url: \"URL\",\n        emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n        date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n        time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n        duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n        ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n        base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n        json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n        e164: \"\u179B\u17C1\u1781 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u179B\u17C1\u1781\",\n        array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n        null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n                }\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n                return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n                return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n            case \"invalid_element\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            default:\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n    return km();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n        file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n        array: { unit: \"\uAC1C\", verb: \"to have\" },\n        set: { unit: \"\uAC1C\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\uC785\uB825\",\n        email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n        url: \"URL\",\n        emoji: \"\uC774\uBAA8\uC9C0\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n        date: \"ISO \uB0A0\uC9DC\",\n        time: \"ISO \uC2DC\uAC04\",\n        duration: \"ISO \uAE30\uAC04\",\n        ipv4: \"IPv4 \uC8FC\uC18C\",\n        ipv6: \"IPv6 \uC8FC\uC18C\",\n        cidrv4: \"IPv4 \uBC94\uC704\",\n        cidrv6: \"IPv6 \uBC94\uC704\",\n        base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        json_string: \"JSON \uBB38\uC790\uC5F4\",\n        e164: \"E.164 \uBC88\uD638\",\n        jwt: \"JWT\",\n        template_literal: \"\uC785\uB825\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n                }\n                return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n                const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing)\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n                const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing) {\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"includes\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"regex\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"unrecognized_keys\":\n                return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n            case \"invalid_union\":\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n            case \"invalid_element\":\n                return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n            default:\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n    return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n    const abs = Math.abs(number);\n    const last = abs % 10;\n    const last2 = abs % 100;\n    if ((last2 >= 11 && last2 <= 19) || last === 0)\n        return \"many\";\n    if (last === 1)\n        return \"one\";\n    return \"few\";\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"simbolis\",\n                few: \"simboliai\",\n                many: \"simboli\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n                },\n            },\n        },\n        file: {\n            unit: {\n                one: \"baitas\",\n                few: \"baitai\",\n                many: \"bait\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne didesnis kaip\",\n                    notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n                    notInclusive: \"turi b\u016Bti didesnis kaip\",\n                },\n            },\n        },\n        array: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n        set: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n    };\n    function getSizing(origin, unitType, inclusive, targetShouldBe) {\n        const result = Sizable[origin] ?? null;\n        if (result === null)\n            return result;\n        return {\n            unit: result.unit[unitType],\n            verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n        };\n    }\n    const FormatDictionary = {\n        regex: \"\u012Fvestis\",\n        email: \"el. pa\u0161to adresas\",\n        url: \"URL\",\n        emoji: \"jaustukas\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO data ir laikas\",\n        date: \"ISO data\",\n        time: \"ISO laikas\",\n        duration: \"ISO trukm\u0117\",\n        ipv4: \"IPv4 adresas\",\n        ipv6: \"IPv6 adresas\",\n        cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n        cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n        base64: \"base64 u\u017Ekoduota eilut\u0117\",\n        base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n        json_string: \"JSON eilut\u0117\",\n        e164: \"E.164 numeris\",\n        jwt: \"JWT\",\n        template_literal: \"\u012Fvestis\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"skai\u010Dius\",\n        bigint: \"sveikasis skai\u010Dius\",\n        string: \"eilut\u0117\",\n        boolean: \"login\u0117 reik\u0161m\u0117\",\n        undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n        function: \"funkcija\",\n        symbol: \"simbolis\",\n        array: \"masyvas\",\n        object: \"objektas\",\n        null: \"nulin\u0117 reik\u0161m\u0117\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n                }\n                return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n            case \"too_big\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n            }\n            case \"too_small\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n                return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n            case \"unrecognized_keys\":\n                return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Rastas klaidingas raktas\";\n            case \"invalid_union\":\n                return \"Klaidinga \u012Fvestis\";\n            case \"invalid_element\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n            }\n            default:\n                return \"Klaidinga \u012Fvestis\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u043D\u0435\u0441\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n        cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n        base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        json_string: \"JSON \u043D\u0438\u0437\u0430\",\n        e164: \"E.164 \u0431\u0440\u043E\u0458\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u043D\u0435\u0441\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0431\u0440\u043E\u0458\",\n        array: \"\u043D\u0438\u0437\u0430\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n                }\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n            case \"invalid_element\":\n                return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n            default:\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombor\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\", verb: \"heeft\" },\n        file: { unit: \"bytes\", verb: \"heeft\" },\n        array: { unit: \"elementen\", verb: \"heeft\" },\n        set: { unit: \"elementen\", verb: \"heeft\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"getal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n                }\n                return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n                if (sizing)\n                    return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n                return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n                if (sizing) {\n                    return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n        file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n        array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n        set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tall\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n                }\n                return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giren\",\n        email: \"epostag\u00E2h\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO heng\u00E2m\u0131\",\n        date: \"ISO tarihi\",\n        time: \"ISO zaman\u0131\",\n        duration: \"ISO m\u00FCddeti\",\n        ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n        ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-\u015Fifreli metin\",\n        base64url: \"base64url-\u015Fifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numara\",\n        array: \"saf\",\n        null: \"gayb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n                return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n                }\n                return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n                if (_issue.format === \"ends_with\")\n                    return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n                return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tan\u0131namad\u0131.\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n            default:\n                return `K\u0131ymet tan\u0131namad\u0131.`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n        array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u064A\",\n        email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n        date: \"\u0646\u06D0\u067C\u0647\",\n        time: \"\u0648\u062E\u062A\",\n        duration: \"\u0645\u0648\u062F\u0647\",\n        ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n        ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n        cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n        cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n        base64: \"base64-encoded \u0645\u062A\u0646\",\n        base64url: \"base64url-encoded \u0645\u062A\u0646\",\n        json_string: \"JSON \u0645\u062A\u0646\",\n        e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0627\u0631\u06D0\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n            }\n            case \"not_multiple_of\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n            case \"unrecognized_keys\":\n                return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            case \"invalid_union\":\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n            case \"invalid_element\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            default:\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n        file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n        array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n        set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"wyra\u017Cenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n        base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n        json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n        e164: \"liczba E.164\",\n        jwt: \"JWT\",\n        template_literal: \"wej\u015Bcie\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"liczba\",\n        array: \"tablica\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n                }\n                return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n                return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n            case \"invalid_element\":\n                return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n            default:\n                return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"ter\" },\n        file: { unit: \"bytes\", verb: \"ter\" },\n        array: { unit: \"itens\", verb: \"ter\" },\n        set: { unit: \"itens\", verb: \"ter\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"padr\u00E3o\",\n        email: \"endere\u00E7o de e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"dura\u00E7\u00E3o ISO\",\n        ipv4: \"endere\u00E7o IPv4\",\n        ipv6: \"endere\u00E7o IPv6\",\n        cidrv4: \"faixa de IPv4\",\n        cidrv6: \"faixa de IPv6\",\n        base64: \"texto codificado em base64\",\n        base64url: \"URL codificada em base64\",\n        json_string: \"texto JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmero\",\n        null: \"nulo\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n                }\n                return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chave inv\u00E1lida em ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido em ${issue.origin}`;\n            default:\n                return `Campo inv\u00E1lido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caractere\", verb: \"s\u0103 aib\u0103\" },\n        file: { unit: \"octe\u021Bi\", verb: \"s\u0103 aib\u0103\" },\n        array: { unit: \"elemente\", verb: \"s\u0103 aib\u0103\" },\n        set: { unit: \"elemente\", verb: \"s\u0103 aib\u0103\" },\n        map: { unit: \"intr\u0103ri\", verb: \"s\u0103 aib\u0103\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"intrare\",\n        email: \"adres\u0103 de email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"dat\u0103 \u0219i or\u0103 ISO\",\n        date: \"dat\u0103 ISO\",\n        time: \"or\u0103 ISO\",\n        duration: \"durat\u0103 ISO\",\n        ipv4: \"adres\u0103 IPv4\",\n        ipv6: \"adres\u0103 IPv6\",\n        mac: \"adres\u0103 MAC\",\n        cidrv4: \"interval IPv4\",\n        cidrv6: \"interval IPv6\",\n        base64: \"\u0219ir codat base64\",\n        base64url: \"\u0219ir codat base64url\",\n        json_string: \"\u0219ir JSON\",\n        e164: \"num\u0103r E.164\",\n        jwt: \"JWT\",\n        template_literal: \"intrare\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"\u0219ir\",\n        number: \"num\u0103r\",\n        boolean: \"boolean\",\n        function: \"func\u021Bie\",\n        array: \"matrice\",\n        object: \"obiect\",\n        undefined: \"nedefinit\",\n        symbol: \"simbol\",\n        bigint: \"num\u0103r mare\",\n        void: \"void\",\n        never: \"never\",\n        map: \"hart\u0103\",\n        set: \"set\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Intrare invalid\u0103: a\u0219teptat ${expected}, primit ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Intrare invalid\u0103: a\u0219teptat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Op\u021Biune invalid\u0103: a\u0219teptat una dintre ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Prea mare: a\u0219teptat ca ${issue.origin ?? \"valoarea\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemente\"}`;\n                return `Prea mare: a\u0219teptat ca ${issue.origin ?? \"valoarea\"} s\u0103 fie ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Prea mic: a\u0219teptat ca ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Prea mic: a\u0219teptat ca ${issue.origin} s\u0103 fie ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0218ir invalid: trebuie s\u0103 \u00EEnceap\u0103 cu \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u0218ir invalid: trebuie s\u0103 se termine cu \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0218ir invalid: trebuie s\u0103 includ\u0103 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u0218ir invalid: trebuie s\u0103 se potriveasc\u0103 cu modelul ${_issue.pattern}`;\n                return `Format invalid: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Num\u0103r invalid: trebuie s\u0103 fie multiplu de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chei nerecunoscute: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cheie invalid\u0103 \u00EEn ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Intrare invalid\u0103\";\n            case \"invalid_element\":\n                return `Valoare invalid\u0103 \u00EEn ${issue.origin}`;\n            default:\n                return `Intrare invalid\u0103`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n                few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n                many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u0430\",\n                many: \"\u0431\u0430\u0439\u0442\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n        duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n        base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n        json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"vnos\",\n        email: \"e-po\u0161tni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in \u010Das\",\n        date: \"ISO datum\",\n        time: \"ISO \u010Das\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 \u0161tevilka\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0161tevilo\",\n        array: \"tabela\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n                }\n                return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven klju\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n        set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulj\u00E4rt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-intervall\",\n        ipv6: \"IPv6-intervall\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad str\u00E4ng\",\n        base64url: \"base64url-kodad str\u00E4ng\",\n        json_string: \"JSON-str\u00E4ng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"antal\",\n        array: \"lista\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n                }\n                return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n        email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n        time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n        ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n        e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0B8E\u0BA3\u0BCD\",\n        array: \"\u0B85\u0BA3\u0BBF\",\n        null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n                }\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                }\n                return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n                }\n                return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"includes\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"regex\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            case \"unrecognized_keys\":\n                return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n            case \"invalid_union\":\n                return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n            default:\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n        email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n        url: \"URL\",\n        emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n        time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n        ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n        cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n        cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n        base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n        base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n        json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n        e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n        jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n        template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n        array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n        null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n                }\n                return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n                return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n                if (_issue.format === \"regex\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n                return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n            case \"unrecognized_keys\":\n                return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n            case \"invalid_element\":\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            default:\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n        array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n        set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO s\u00FCre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n        cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n        base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n        base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"\u015Eablon dizesi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n                return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n                if (_issue.format === \"ends_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n                if (_issue.format === \"regex\")\n                    return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n                return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n            case \"invalid_union\":\n                return \"Ge\u00E7ersiz de\u011Fer\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n            default:\n                return `Ge\u00E7ersiz de\u011Fer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n        date: \"\u0434\u0430\u0442\u0430 ISO\",\n        time: \"\u0447\u0430\u0441 ISO\",\n        duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n        ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n        ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n        cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n        cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n        base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n        base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n        json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n    return uk();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0627\u0646 \u067E\u0679\",\n        email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n        uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n        nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n        ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n        xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n        ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n        date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n        time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n        duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n        ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n        cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n        base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n        e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n        jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n        template_literal: \"\u0627\u0646 \u067E\u0679\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0646\u0645\u0628\u0631\",\n        array: \"\u0622\u0631\u06D2\",\n        null: \"\u0646\u0644\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n                }\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n                return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                }\n                return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"includes\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"regex\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n            case \"unrecognized_keys\":\n                return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n            case \"invalid_union\":\n                return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n            default:\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n        file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n        array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n        set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n        map: { unit: \"yozuv\", verb: \"bo\u2018lishi kerak\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"kirish\",\n        email: \"elektron pochta manzili\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sana va vaqti\",\n        date: \"ISO sana\",\n        time: \"ISO vaqt\",\n        duration: \"ISO davomiylik\",\n        ipv4: \"IPv4 manzil\",\n        ipv6: \"IPv6 manzil\",\n        mac: \"MAC manzil\",\n        cidrv4: \"IPv4 diapazon\",\n        cidrv6: \"IPv6 diapazon\",\n        base64: \"base64 kodlangan satr\",\n        base64url: \"base64url kodlangan satr\",\n        json_string: \"JSON satr\",\n        e164: \"E.164 raqam\",\n        jwt: \"JWT\",\n        template_literal: \"kirish\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"raqam\",\n        array: \"massiv\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n                }\n                return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n                if (_issue.format === \"ends_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n                if (_issue.format === \"includes\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n                if (_issue.format === \"regex\")\n                    return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n                return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n            case \"unrecognized_keys\":\n                return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n            case \"invalid_union\":\n                return \"Noto\u2018g\u2018ri kirish\";\n            case \"invalid_element\":\n                return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n            default:\n                return `Noto\u2018g\u2018ri kirish`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n        file: { unit: \"byte\", verb: \"c\u00F3\" },\n        array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n        set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0111\u1EA7u v\u00E0o\",\n        email: \"\u0111\u1ECBa ch\u1EC9 email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ng\u00E0y gi\u1EDD ISO\",\n        date: \"ng\u00E0y ISO\",\n        time: \"gi\u1EDD ISO\",\n        duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n        ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n        ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n        cidrv4: \"d\u1EA3i IPv4\",\n        cidrv6: \"d\u1EA3i IPv6\",\n        base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n        base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n        json_string: \"chu\u1ED7i JSON\",\n        e164: \"s\u1ED1 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0111\u1EA7u v\u00E0o\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"s\u1ED1\",\n        array: \"m\u1EA3ng\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n                }\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n                return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n                return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n            }\n            case \"not_multiple_of\":\n                return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n            case \"invalid_element\":\n                return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            default:\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n        file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n        array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n        set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F93\u5165\",\n        email: \"\u7535\u5B50\u90AE\u4EF6\",\n        url: \"URL\",\n        emoji: \"\u8868\u60C5\u7B26\u53F7\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n        date: \"ISO\u65E5\u671F\",\n        time: \"ISO\u65F6\u95F4\",\n        duration: \"ISO\u65F6\u957F\",\n        ipv4: \"IPv4\u5730\u5740\",\n        ipv6: \"IPv6\u5730\u5740\",\n        cidrv4: \"IPv4\u7F51\u6BB5\",\n        cidrv6: \"IPv6\u7F51\u6BB5\",\n        base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n        base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n        json_string: \"JSON\u5B57\u7B26\u4E32\",\n        e164: \"E.164\u53F7\u7801\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F93\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5B57\",\n        array: \"\u6570\u7EC4\",\n        null: \"\u7A7A\u503C(null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n                }\n                return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n                return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n                if (_issue.format === \"ends_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n                return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n            case \"unrecognized_keys\":\n                return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n            case \"invalid_union\":\n                return \"\u65E0\u6548\u8F93\u5165\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n            default:\n                return `\u65E0\u6548\u8F93\u5165`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n        file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n        array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n        set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F38\u5165\",\n        email: \"\u90F5\u4EF6\u5730\u5740\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n        date: \"ISO \u65E5\u671F\",\n        time: \"ISO \u6642\u9593\",\n        duration: \"ISO \u671F\u9593\",\n        ipv4: \"IPv4 \u4F4D\u5740\",\n        ipv6: \"IPv6 \u4F4D\u5740\",\n        cidrv4: \"IPv4 \u7BC4\u570D\",\n        cidrv6: \"IPv6 \u7BC4\u570D\",\n        base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n        base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n        json_string: \"JSON \u5B57\u4E32\",\n        e164: \"E.164 \u6578\u503C\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F38\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n                }\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n                return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n                return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n            case \"unrecognized_keys\":\n                return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n            case \"invalid_union\":\n                return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n            default:\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n        file: { unit: \"bytes\", verb: \"n\u00ED\" },\n        array: { unit: \"nkan\", verb: \"n\u00ED\" },\n        set: { unit: \"nkan\", verb: \"n\u00ED\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n        email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u00E0k\u00F3k\u00F2 ISO\",\n        date: \"\u1ECDj\u1ECD\u0301 ISO\",\n        time: \"\u00E0k\u00F3k\u00F2 ISO\",\n        duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n        ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n        ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n        cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n        cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n        base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n        base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n        json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n        e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u1ECD\u0301mb\u00E0\",\n        array: \"akop\u1ECD\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n                }\n                return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n                return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n                return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n                return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n            case \"invalid_element\":\n                return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            default:\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n    // schemas into $defs \u2014 it is not user-facing JSON Schema metadata. Strip it\n    // from the output body where it would otherwise leak. The id is preserved\n    // implicitly via the $defs key (and via $ref paths).\n    const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n    if (rootMetaId !== undefined && result.id === rootMetaId)\n        delete result.id;\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            if (seen.def.id === seen.defId)\n                delete seen.def.id;\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        if (_schema._zod.traits.has(\"$ZodCodec\"))\n            return true;\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n", "import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n    const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n    const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n    const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n    if (exMin) {\n        if (legacy) {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    else if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n    }\n    if (exMax) {\n        if (legacy) {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    else if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = process(def.element, ctx, {\n        ...params,\n        path: [...params.path, \"items\"],\n    });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = process(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = process(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = process(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = process(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? process(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = process(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n    const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            process(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            schemas[key] = finalize(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    process(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n", "import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n    /** @deprecated Access via ctx instead */\n    get metadataRegistry() {\n        return this.ctx.metadataRegistry;\n    }\n    /** @deprecated Access via ctx instead */\n    get target() {\n        return this.ctx.target;\n    }\n    /** @deprecated Access via ctx instead */\n    get unrepresentable() {\n        return this.ctx.unrepresentable;\n    }\n    /** @deprecated Access via ctx instead */\n    get override() {\n        return this.ctx.override;\n    }\n    /** @deprecated Access via ctx instead */\n    get io() {\n        return this.ctx.io;\n    }\n    /** @deprecated Access via ctx instead */\n    get counter() {\n        return this.ctx.counter;\n    }\n    set counter(value) {\n        this.ctx.counter = value;\n    }\n    /** @deprecated Access via ctx instead */\n    get seen() {\n        return this.ctx.seen;\n    }\n    constructor(params) {\n        // Normalize target for internal context\n        let normalizedTarget = params?.target ?? \"draft-2020-12\";\n        if (normalizedTarget === \"draft-4\")\n            normalizedTarget = \"draft-04\";\n        if (normalizedTarget === \"draft-7\")\n            normalizedTarget = \"draft-07\";\n        this.ctx = initializeContext({\n            processors: allProcessors,\n            target: normalizedTarget,\n            ...(params?.metadata && { metadata: params.metadata }),\n            ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n            ...(params?.override && { override: params.override }),\n            ...(params?.io && { io: params.io }),\n        });\n    }\n    /**\n     * Process a schema to prepare it for JSON Schema generation.\n     * This must be called before emit().\n     */\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        return process(schema, this.ctx, _params);\n    }\n    /**\n     * Emit the final JSON Schema after processing.\n     * Must call process() first.\n     */\n    emit(schema, _params) {\n        // Apply emit params to the context\n        if (_params) {\n            if (_params.cycles)\n                this.ctx.cycles = _params.cycles;\n            if (_params.reused)\n                this.ctx.reused = _params.reused;\n            if (_params.external)\n                this.ctx.external = _params.external;\n        }\n        extractDefs(this.ctx, schema);\n        const result = finalize(this.ctx, schema);\n        // Strip ~standard property to match old implementation's return type\n        const { \"~standard\": _, ...plainResult } = result;\n        return plainResult;\n    }\n}\n", "export {};\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n    const proto = Object.getPrototypeOf(inst);\n    let installed = _installedGroups.get(proto);\n    if (!installed) {\n        installed = new Set();\n        _installedGroups.set(proto, installed);\n    }\n    if (installed.has(group))\n        return;\n    installed.add(group);\n    for (const key in methods) {\n        const fn = methods[key];\n        Object.defineProperty(proto, key, {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const bound = fn.bind(this);\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: bound,\n                });\n                return bound;\n            },\n            set(v) {\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: v,\n                });\n            },\n        });\n    }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: createStandardJSONSchemaMethod(inst, \"input\"),\n            output: createStandardJSONSchemaMethod(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // Parse-family is intentionally kept as per-instance closures: these are\n    // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n    // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n    // ~12 closure allocations per schema but get monomorphic call sites and\n    // detached usage that \"just works\".\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // All builder methods are placed on the internal prototype as lazy-bind\n    // getters. On first access per-instance, a bound thunk is allocated and\n    // cached as an own property; subsequent accesses skip the getter. This\n    // means: no per-instance allocation for unused methods, full\n    // detachability preserved (`const m = schema.optional; m()` works), and\n    // shared underlying function references across all instances.\n    _installLazyMethods(inst, \"ZodType\", {\n        check(...chks) {\n            const def = this.def;\n            return this.clone(util.mergeDefs(def, {\n                checks: [\n                    ...(def.checks ?? []),\n                    ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n                ],\n            }), { parent: true });\n        },\n        with(...chks) {\n            return this.check(...chks);\n        },\n        clone(def, params) {\n            return core.clone(this, def, params);\n        },\n        brand() {\n            return this;\n        },\n        register(reg, meta) {\n            reg.add(this, meta);\n            return this;\n        },\n        refine(check, params) {\n            return this.check(refine(check, params));\n        },\n        superRefine(refinement, params) {\n            return this.check(superRefine(refinement, params));\n        },\n        overwrite(fn) {\n            return this.check(checks.overwrite(fn));\n        },\n        optional() {\n            return optional(this);\n        },\n        exactOptional() {\n            return exactOptional(this);\n        },\n        nullable() {\n            return nullable(this);\n        },\n        nullish() {\n            return optional(nullable(this));\n        },\n        nonoptional(params) {\n            return nonoptional(this, params);\n        },\n        array() {\n            return array(this);\n        },\n        or(arg) {\n            return union([this, arg]);\n        },\n        and(arg) {\n            return intersection(this, arg);\n        },\n        transform(tx) {\n            return pipe(this, transform(tx));\n        },\n        default(d) {\n            return _default(this, d);\n        },\n        prefault(d) {\n            return prefault(this, d);\n        },\n        catch(params) {\n            return _catch(this, params);\n        },\n        pipe(target) {\n            return pipe(this, target);\n        },\n        readonly() {\n            return readonly(this);\n        },\n        describe(description) {\n            const cl = this.clone();\n            core.globalRegistry.add(cl, { description });\n            return cl;\n        },\n        meta(...args) {\n            // overloaded: meta() returns the registered metadata, meta(data)\n            // returns a clone with `data` registered. The mapped type picks\n            // up the second overload, so we accept variadic any-args and\n            // return `any` to satisfy both at runtime.\n            if (args.length === 0)\n                return core.globalRegistry.get(this);\n            const cl = this.clone();\n            core.globalRegistry.add(cl, args[0]);\n            return cl;\n        },\n        isOptional() {\n            return this.safeParse(undefined).success;\n        },\n        isNullable() {\n            return this.safeParse(null).success;\n        },\n        apply(fn) {\n            return fn(this);\n        },\n    });\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    _installLazyMethods(inst, \"_ZodString\", {\n        regex(...args) {\n            return this.check(checks.regex(...args));\n        },\n        includes(...args) {\n            return this.check(checks.includes(...args));\n        },\n        startsWith(...args) {\n            return this.check(checks.startsWith(...args));\n        },\n        endsWith(...args) {\n            return this.check(checks.endsWith(...args));\n        },\n        min(...args) {\n            return this.check(checks.minLength(...args));\n        },\n        max(...args) {\n            return this.check(checks.maxLength(...args));\n        },\n        length(...args) {\n            return this.check(checks.length(...args));\n        },\n        nonempty(...args) {\n            return this.check(checks.minLength(1, ...args));\n        },\n        lowercase(params) {\n            return this.check(checks.lowercase(params));\n        },\n        uppercase(params) {\n            return this.check(checks.uppercase(params));\n        },\n        trim() {\n            return this.check(checks.trim());\n        },\n        normalize(...args) {\n            return this.check(checks.normalize(...args));\n        },\n        toLowerCase() {\n            return this.check(checks.toLowerCase());\n        },\n        toUpperCase() {\n            return this.check(checks.toUpperCase());\n        },\n        slugify() {\n            return this.check(checks.slugify());\n        },\n    });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: core.regexes.httpProtocol,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    _installLazyMethods(inst, \"ZodNumber\", {\n        gt(value, params) {\n            return this.check(checks.gt(value, params));\n        },\n        gte(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        min(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        lt(value, params) {\n            return this.check(checks.lt(value, params));\n        },\n        lte(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        max(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        int(params) {\n            return this.check(int(params));\n        },\n        safe(params) {\n            return this.check(int(params));\n        },\n        positive(params) {\n            return this.check(checks.gt(0, params));\n        },\n        nonnegative(params) {\n            return this.check(checks.gte(0, params));\n        },\n        negative(params) {\n            return this.check(checks.lt(0, params));\n        },\n        nonpositive(params) {\n            return this.check(checks.lte(0, params));\n        },\n        multipleOf(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        step(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        finite() {\n            return this;\n        },\n    });\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    _installLazyMethods(inst, \"ZodArray\", {\n        min(n, params) {\n            return this.check(checks.minLength(n, params));\n        },\n        nonempty(params) {\n            return this.check(checks.minLength(1, params));\n        },\n        max(n, params) {\n            return this.check(checks.maxLength(n, params));\n        },\n        length(n, params) {\n            return this.check(checks.length(n, params));\n        },\n        unwrap() {\n            return this.element;\n        },\n    });\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    _installLazyMethods(inst, \"ZodObject\", {\n        keyof() {\n            return _enum(Object.keys(this._zod.def.shape));\n        },\n        catchall(catchall) {\n            return this.clone({ ...this._zod.def, catchall: catchall });\n        },\n        passthrough() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        loose() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        strict() {\n            return this.clone({ ...this._zod.def, catchall: never() });\n        },\n        strip() {\n            return this.clone({ ...this._zod.def, catchall: undefined });\n        },\n        extend(incoming) {\n            return util.extend(this, incoming);\n        },\n        safeExtend(incoming) {\n            return util.safeExtend(this, incoming);\n        },\n        merge(other) {\n            return util.merge(this, other);\n        },\n        pick(mask) {\n            return util.pick(this, mask);\n        },\n        omit(mask) {\n            return util.omit(this, mask);\n        },\n        partial(...args) {\n            return util.partial(ZodOptional, this, args[0]);\n        },\n        required(...args) {\n            return util.required(ZodNonOptional, this, args[0]);\n        },\n    });\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) \u2014 defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        payload.value = output;\n        payload.fallback = true;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n    return new ZodPreprocess({\n        type: \"pipe\",\n        in: transform(fn),\n        out: schema,\n    });\n}\n", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1];\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime());\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.iso.time());\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            if (typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional\n                shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n            }\n            // Handle propertyNames\n            if (schema.propertyNames) {\n                const keySchema = convertSchema(schema.propertyNames, ctx);\n                const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n                    ? convertSchema(schema.additionalProperties, ctx)\n                    : z.any();\n                // Case A: No properties (pure record)\n                if (Object.keys(shape).length === 0) {\n                    zodSchema = z.record(keySchema, valueSchema);\n                    break;\n                }\n                // Case B: With properties (intersection of object and looseRecord)\n                const objectSchema = z.object(shape).passthrough();\n                const recordSchema = z.looseRecord(keySchema, valueSchema);\n                zodSchema = z.intersection(objectSchema, recordSchema);\n                break;\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema\n                // Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                break;\n            }\n            // Handle additionalProperties\n            // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n            // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n            const objectSchema = z.object(shape);\n            if (schema.additionalProperties === false) {\n                // Strict mode - no extra properties allowed\n                zodSchema = objectSchema.strict();\n            }\n            else if (typeof schema.additionalProperties === \"object\") {\n                // Extra properties must match the specified schema\n                zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n            }\n            else {\n                // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                zodSchema = objectSchema.passthrough();\n            }\n            break;\n        }\n        case \"array\": {\n            // TODO: uniqueItems is not supported\n            // TODO: contains/minContains/maxContains are not supported\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const rest = items && typeof items === \"object\" && !Array.isArray(items)\n                    ? convertSchema(items, ctx)\n                    : undefined;\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n                    ? convertSchema(schema.additionalItems, ctx)\n                    : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Apply `default` so it wraps the fully-composed schema. This ensures\n    // `parse(undefined) -> default` works regardless of which branch of\n    // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n    if (schema.default !== undefined) {\n        baseSchema = baseSchema.default(schema.default);\n    }\n    // Collect non-description annotation metadata into the user-supplied\n    // registry. Description is handled separately below via `.describe()` to\n    // preserve the contract that `schema.description` reads from globalRegistry.\n    const extraMeta = {};\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    // Apply description last. `.describe()` clones the schema and sets\n    // `_zod.parent` on the clone, so registry lookups on the returned reference\n    // still resolve `extraMeta` via parent inheritance.\n    if (schema.description) {\n        baseSchema = baseSchema.describe(schema.description);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Normalize input via a JSON round-trip. This guarantees the converter\n    // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,\n    // getter/Proxy-based properties are materialized into static values, and\n    // class instances collapse to plain objects.\n    let normalized;\n    try {\n        normalized = JSON.parse(JSON.stringify(schema));\n    }\n    catch {\n        throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n    }\n    const version = detectVersion(normalized, params?.defaultTarget);\n    const defs = (normalized.$defs || normalized.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: normalized,\n        registry: params?.registry ?? globalRegistry,\n    };\n    return convertSchema(normalized, ctx);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n", "import { z } from \"zod\";\nfunction isLocalHttpOrigin(url) {\n    return (url.protocol === \"http:\" &&\n        (url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\") &&\n        url.port !== \"\");\n}\nexport function normalizeFrontendOrigin(value) {\n    const raw = value.trim();\n    if (!raw)\n        throw new Error(\"Origin is required\");\n    if (raw.includes(\"*\"))\n        throw new Error(\"Wildcard origins are not supported\");\n    let url;\n    try {\n        url = new URL(raw);\n    }\n    catch {\n        throw new Error(\"Origin must be a valid URL\");\n    }\n    if (![\"http:\", \"https:\"].includes(url.protocol)) {\n        throw new Error(\"Origin must use http:// or https://\");\n    }\n    if (url.protocol === \"http:\" && !isLocalHttpOrigin(url)) {\n        throw new Error(\"Production frontend origins must use https://\");\n    }\n    if (url.username || url.password) {\n        throw new Error(\"Origin cannot include username or password\");\n    }\n    if (url.pathname !== \"/\" || url.search || url.hash) {\n        throw new Error(\"Origin must be a bare origin without path, query, or hash\");\n    }\n    return url.origin;\n}\nconst codegenInput = z\n    .object({\n    clientOutDir: z.string().optional(),\n    outDir: z\n        .string()\n        .optional()\n        .describe(\"Deprecated \u2014 use `codegen.clientOutDir`. Still accepted for backwards compatibility.\"),\n    serverOutDir: z.string().optional(),\n    authSchema: z\n        .union([\n        z.boolean(),\n        z.object({\n            emitRelations: z.boolean().optional(),\n        }),\n    ])\n        .optional()\n        .describe(\"Better Auth schema codegen: false disables it; true or object emits schema-auth.gen.ts.\"),\n})\n    .optional();\nconst dbInput = z\n    .object({\n    url: z.string().optional(),\n})\n    .optional();\nconst deployInput = z\n    .object({\n    app: z.string().optional(),\n})\n    .optional();\nconst auditorInput = z\n    .object({\n    implementation: z.enum([\"legacy\", \"analyzer\"]).optional(),\n})\n    .optional();\nconst cloudFeatureToggleInput = z.union([z.boolean(), z.record(z.string(), z.unknown()), z.undefined()]);\nconst cloudFeaturesInput = z\n    .object({\n    rag: cloudFeatureToggleInput.optional(),\n    ai: cloudFeatureToggleInput.optional(),\n    admin: cloudFeatureToggleInput.optional(),\n})\n    .catchall(cloudFeatureToggleInput)\n    .optional();\nconst rawConfigSchema = z.object({\n    rootDir: z.string().optional(),\n    functionsDir: z.string().optional().describe(\"Deprecated \u2014 use `rootDir`.\"),\n    schema: z.union([z.string(), z.array(z.string())]).optional(),\n    codegen: codegenInput,\n    cloudFeatures: cloudFeaturesInput,\n    storage: z.string().optional(),\n    db: dbInput,\n    port: z.number().optional(),\n    deploy: deployInput,\n    auditor: auditorInput,\n    name: z.string().optional(),\n    frontendOrigins: z.array(z.string()).optional(),\n    trustedOrigins: z.array(z.string()).optional(),\n});\nexport const GENCOW_CONFIG_DEFAULTS = Object.freeze({\n    rootDir: \"./gencow\",\n    schema: \"./gencow/schema.ts\",\n    codegen: { clientOutDir: \"./src/gencow\", authSchema: true },\n    storage: \"./.gencow/uploads\",\n    db: { url: \"./.gencow/data\" },\n    port: 5456,\n    frontendOrigins: [],\n    trustedOrigins: [],\n});\nexport function resolveConfiguredAuditorImplementation(config) {\n    return config?.auditor?.implementation === \"analyzer\" ? \"analyzer\" : \"legacy\";\n}\nexport function isAnalyzerAuditorConfigured(config) {\n    return resolveConfiguredAuditorImplementation(config) === \"analyzer\";\n}\nexport const gencowConfigSchema = rawConfigSchema.transform((v) => {\n    const trimPath = (value) => typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n    const rootDir = trimPath(v.rootDir);\n    const functionsDir = trimPath(v.functionsDir);\n    if (rootDir && functionsDir) {\n        throw new Error(\"[gencow] Invalid gencow.config: set either `rootDir` or `functionsDir`, not both.\");\n    }\n    const resolvedRootDir = rootDir ?? functionsDir ?? GENCOW_CONFIG_DEFAULTS.rootDir;\n    const clientCodegenDir = trimPath(v.codegen?.clientOutDir) ??\n        trimPath(v.codegen?.outDir) ??\n        GENCOW_CONFIG_DEFAULTS.codegen.clientOutDir;\n    const authSchema = v.codegen?.authSchema ?? GENCOW_CONFIG_DEFAULTS.codegen.authSchema;\n    const serverOutDirRaw = v.codegen?.serverOutDir;\n    const serverOutDir = typeof serverOutDirRaw === \"string\" && serverOutDirRaw.trim().length > 0\n        ? serverOutDirRaw.trim()\n        : undefined;\n    const codegen = {\n        clientOutDir: clientCodegenDir,\n        outDir: clientCodegenDir,\n        authSchema,\n    };\n    if (serverOutDir !== undefined) {\n        codegen.serverOutDir = serverOutDir;\n    }\n    const result = {\n        rootDir: resolvedRootDir,\n        schema: v.schema ?? GENCOW_CONFIG_DEFAULTS.schema,\n        codegen,\n        storage: v.storage ?? GENCOW_CONFIG_DEFAULTS.storage,\n        db: { url: v.db?.url ?? GENCOW_CONFIG_DEFAULTS.db.url },\n        port: v.port ?? GENCOW_CONFIG_DEFAULTS.port,\n        frontendOrigins: (v.frontendOrigins ?? []).map((origin) => normalizeFrontendOrigin(origin)),\n        trustedOrigins: v.trustedOrigins ?? [],\n    };\n    if (v.deploy?.app)\n        result.deploy = { app: v.deploy.app };\n    if (v.auditor)\n        result.auditor = v.auditor;\n    if (v.name)\n        result.name = v.name;\n    if (v.cloudFeatures)\n        result.cloudFeatures = v.cloudFeatures;\n    return result;\n});\nexport function getDefaultConfig() {\n    return gencowConfigSchema.parse({});\n}\nconst _gencowConfigAssignableToSchemaInput = {};\nconst _schemaInputAssignableToGencowConfig = {};\nvoid _gencowConfigAssignableToSchemaInput;\nvoid _schemaInputAssignableToGencowConfig;\n", "import { getQueryDef, getRegisteredMutations, getRegisteredQueries } from \"@gencow/core\";\nimport { collectProcedureRouteMaps } from \"./procedure-route-maps.js\";\nexport function collectRuntimeOperationInventory(params = {}) {\n    const registeredQueries = params.getRegisteredQueries ?? getRegisteredQueries;\n    const queryDefFor = params.getQueryDef ?? getQueryDef;\n    const registeredMutations = params.getRegisteredMutations ?? getRegisteredMutations;\n    const procedureMaps = params.procedureMaps ??\n        (params.collectProcedureRouteMaps ?? collectProcedureRouteMaps)(params.appModule);\n    const legacyQueries = registeredQueries().map((key) => ({\n        key,\n        allowAnonymous: queryDefFor(key)?.isPublic === true,\n    }));\n    const legacyMutations = registeredMutations().map((mutation) => ({\n        key: mutation.name,\n        allowAnonymous: mutation.isPublic === true,\n    }));\n    const procedureQueries = [...procedureMaps.queryProcedureMap.entries()].map(([key, procedure]) => ({\n        key,\n        allowAnonymous: procedure.allowAnonymous === true,\n    }));\n    const procedureMutations = [...procedureMaps.mutationProcedureMap.entries()].map(([key, procedure]) => ({\n        key,\n        allowAnonymous: procedure.allowAnonymous === true,\n    }));\n    const totalQueries = legacyQueries.length + procedureQueries.length;\n    const totalMutations = legacyMutations.length + procedureMutations.length;\n    return {\n        legacyQueries,\n        legacyMutations,\n        procedureQueries,\n        procedureMutations,\n        totalQueries,\n        totalMutations,\n        totalOperations: totalQueries + totalMutations,\n    };\n}\n", "/**\n * Reads `defineApi({ procedures, crud })` from the loaded app module (default export)\n * and builds route maps. Does not use global registries \u2014 `crud` values expose\n * procedure defs directly.\n */\nexport { collectProcedureRouteMaps } from \"@gencow/internal/introspection\";\nexport function mergeProcedureRouteMaps(appMaps, builtinMaps, options = {}) {\n    const queryProcedureMap = new Map(appMaps.queryProcedureMap);\n    const mutationProcedureMap = new Map(appMaps.mutationProcedureMap);\n    const appProcedureNames = new Set([\n        ...appMaps.queryProcedureMap.keys(),\n        ...appMaps.mutationProcedureMap.keys(),\n    ]);\n    mergeBuiltinMap({\n        target: queryProcedureMap,\n        builtin: builtinMaps.queryProcedureMap,\n        appProcedureNames,\n        logger: options.logger,\n    });\n    mergeBuiltinMap({\n        target: mutationProcedureMap,\n        builtin: builtinMaps.mutationProcedureMap,\n        appProcedureNames,\n        logger: options.logger,\n    });\n    return { queryProcedureMap, mutationProcedureMap };\n}\nfunction mergeBuiltinMap(params) {\n    for (const [name, def] of params.builtin) {\n        if (params.appProcedureNames.has(name)) {\n            const message = `[gencow] Builtin procedure \"${name}\" shadowed by app defineApi procedure.`;\n            if (typeof params.logger?.debug === \"function\")\n                params.logger.debug(message);\n            else\n                params.logger?.warn?.(message);\n            continue;\n        }\n        params.target.set(name, def);\n    }\n}\n", "/**\n * packages/server/src/auditor.ts\n *\n * \uC0AC\uC6A9\uC790 \uD568\uC218(gencow/) \uC18C\uC2A4 import\uB97C \uC815\uC801\uC73C\uB85C \uBD84\uC11D\uD574\n * reachable source files\uB97C \uB530\uB77C\uAC00\uBA70 \uB7F0\uD0C0\uC784\uC5D0 \uB3C4\uB2EC \uAC00\uB2A5\uD55C import\uB97C \uC218\uC9D1\uD55C\uB2E4.\n * \uD504\uB85C\uB355\uC158(Firecracker microVM)\uC5D0\uC11C \uCC28\uB2E8\uB420 \uBAA8\uB4C8 \uC0AC\uC6A9 \uC5EC\uBD80\uB97C \uAC80\uC0AC.\n *\n * \uB610\uD55C, \uB4F1\uB85D\uB41C query/mutation\uC758 public/private \uC0C1\uD0DC\uB97C \uBD84\uC11D\uD558\uC5EC\n * \uBCF4\uC548 \uAC10\uC0AC \uB9AC\uD3EC\uD2B8\uB97C \uCD9C\uB825 (Secure by Default).\n *\n * \uC11C\uBC84 \uC2DC\uC791 \uC2DC \uD568\uC218 \uB85C\uB4DC \uC804\uC5D0 \uC2E4\uD589\uB41C\uB2E4.\n * \uC704\uBC18 \uBC1C\uACAC \uC2DC \uC11C\uBC84 \uC2DC\uC791\uC744 \uC911\uB2E8\uD558\uACE0 \uBA85\uD655\uD55C \uC624\uB958 \uBA54\uC2DC\uC9C0\uB97C \uCD9C\uB825.\n */\nimport { existsSync, readFileSync, readdirSync } from \"fs\";\nimport { dirname, join, resolve } from \"path\";\n// \u2500\u2500\u2500 \uAE08\uC9C0 \uBAA8\uB4C8 \uBAA9\uB85D \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// ESLint\uC758 FORBIDDEN_MODULES\uC640 \uB3D9\uAE30\uD654 \uC720\uC9C0.\n// (eslint.config.mjs\uC758 \uBAA9\uB85D\uACFC \uC77C\uCE58\uC2DC\uD0AC \uAC83)\n//\n// \uCC28\uB2E8 \uC720\uC9C0 \uC774\uC720:\n// - child_process: \uC784\uC758 \uBA85\uB839 \uC2E4\uD589 \u2192 \uC0CC\uB4DC\uBC15\uC2A4 \uD0C8\uCD9C \uC704\uD5D8\n// - vm: \uB3D9\uC801 \uCF54\uB4DC \uC2E4\uD589 \u2192 \uCF54\uB4DC \uC778\uC81D\uC158 \uC704\uD5D8\n// - os: \uC2DC\uC2A4\uD15C \uC815\uBCF4 \uB178\uCD9C (CPU, \uBA54\uBAA8\uB9AC, \uB124\uD2B8\uC6CC\uD06C \uC778\uD130\uD398\uC774\uC2A4)\n// - worker_threads/cluster: \uB9AC\uC18C\uC2A4 \uB3C5\uC810 + \uD504\uB85C\uC138\uC2A4 \uAD00\uB9AC \uC6B0\uD68C\n// - dgram: UDP \uC18C\uCF13 \u2192 cowbox Landlock \uC6B0\uD68C \uAC00\uB2A5\uC131\n// - v8: V8 \uC5D4\uC9C4 \uB0B4\uBD80 \uC811\uADFC \u2192 \uBCF4\uC548 \uACBD\uACC4 \uC6B0\uD68C\nconst FORBIDDEN_MODULES = new Set([\n    \"child_process\",\n    \"node:child_process\",\n    \"dgram\",\n    \"node:dgram\",\n    \"os\",\n    \"node:os\",\n    \"cluster\",\n    \"node:cluster\",\n    \"worker_threads\",\n    \"node:worker_threads\",\n    \"v8\",\n    \"node:v8\",\n    \"vm\",\n    \"node:vm\",\n]);\nconst SOURCE_FILE_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\"];\nfunction extractModuleSpecifiers(source) {\n    const imports = new Set();\n    const patterns = [\n        /\\bimport\\s+[^'\"]*?\\s+from\\s+[\"']([^\"']+)[\"']/g,\n        /\\bexport\\s+[^'\"]*?\\s+from\\s+[\"']([^\"']+)[\"']/g,\n        /\\bimport\\s+[\"']([^\"']+)[\"']/g,\n        /\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g,\n        /\\brequire\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g,\n    ];\n    for (const pattern of patterns) {\n        let match;\n        while ((match = pattern.exec(source)) !== null) {\n            imports.add(match[1]);\n        }\n    }\n    return [...imports];\n}\nfunction resolveSourceFileCandidate(base) {\n    const candidates = [\n        base,\n        `${base}.ts`,\n        `${base}.tsx`,\n        `${base}.js`,\n        `${base}.jsx`,\n        `${base}.mts`,\n        `${base}.cts`,\n        `${base}.mjs`,\n        `${base}.cjs`,\n        join(base, \"index.ts\"),\n        join(base, \"index.tsx\"),\n        join(base, \"index.js\"),\n        join(base, \"index.jsx\"),\n        join(base, \"index.mjs\"),\n        join(base, \"index.cjs\"),\n    ];\n    return candidates.find((candidate) => existsSync(candidate)) ?? null;\n}\nfunction resolveRelativeImportFile(importerFile, specifier) {\n    if (!specifier.startsWith(\".\"))\n        return null;\n    return resolveSourceFileCandidate(join(dirname(importerFile), specifier));\n}\nfunction stripJsonComments(source) {\n    let result = \"\";\n    let inString = false;\n    let stringQuote = \"\";\n    let escaping = false;\n    for (let i = 0; i < source.length; i += 1) {\n        const char = source[i];\n        const next = source[i + 1];\n        if (inString) {\n            result += char;\n            if (escaping) {\n                escaping = false;\n                continue;\n            }\n            if (char === \"\\\\\") {\n                escaping = true;\n                continue;\n            }\n            if (char === stringQuote) {\n                inString = false;\n                stringQuote = \"\";\n            }\n            continue;\n        }\n        if ((char === '\"' || char === \"'\") && !escaping) {\n            inString = true;\n            stringQuote = char;\n            result += char;\n            continue;\n        }\n        if (char === \"/\" && next === \"/\") {\n            while (i < source.length && source[i] !== \"\\n\")\n                i += 1;\n            if (i < source.length)\n                result += source[i];\n            continue;\n        }\n        if (char === \"/\" && next === \"*\") {\n            i += 2;\n            while (i < source.length && !(source[i] === \"*\" && source[i + 1] === \"/\"))\n                i += 1;\n            i += 1;\n            continue;\n        }\n        result += char;\n    }\n    return result;\n}\nfunction stripTrailingCommas(source) {\n    return source.replace(/,\\s*([}\\]])/g, \"$1\");\n}\nfunction parseJsoncObject(filePath) {\n    try {\n        const source = readFileSync(filePath, \"utf8\");\n        const normalized = stripTrailingCommas(stripJsonComments(source)).trim();\n        if (!normalized)\n            return null;\n        const parsed = JSON.parse(normalized);\n        return parsed && typeof parsed === \"object\" ? parsed : null;\n    }\n    catch {\n        return null;\n    }\n}\nfunction resolveTsConfigExtendsPath(configFile, extendsValue) {\n    if (!extendsValue.startsWith(\".\") && !extendsValue.startsWith(\"/\"))\n        return null;\n    const configDir = dirname(configFile);\n    const rawPath = extendsValue.startsWith(\"/\")\n        ? extendsValue\n        : resolve(configDir, extendsValue);\n    const candidates = rawPath.endsWith(\".json\")\n        ? [rawPath]\n        : [rawPath, `${rawPath}.json`, join(rawPath, \"tsconfig.json\")];\n    return candidates.find((candidate) => existsSync(candidate)) ?? null;\n}\nfunction loadTsConfigCompilerOptions(configFile, seen = new Set()) {\n    const resolvedConfigFile = resolve(configFile);\n    if (seen.has(resolvedConfigFile))\n        return {};\n    seen.add(resolvedConfigFile);\n    const parsed = parseJsoncObject(resolvedConfigFile);\n    if (!parsed)\n        return {};\n    const localCompilerOptions = parsed.compilerOptions && typeof parsed.compilerOptions === \"object\"\n        ? parsed.compilerOptions\n        : {};\n    let inherited = {};\n    if (typeof parsed.extends === \"string\") {\n        const extendsPath = resolveTsConfigExtendsPath(resolvedConfigFile, parsed.extends);\n        if (extendsPath) {\n            inherited = loadTsConfigCompilerOptions(extendsPath, seen);\n        }\n    }\n    const baseUrl = typeof localCompilerOptions.baseUrl === \"string\" && localCompilerOptions.baseUrl.trim().length > 0\n        ? localCompilerOptions.baseUrl\n        : inherited.baseUrl;\n    const mergedPaths = { ...(inherited.paths ?? {}) };\n    const localPaths = localCompilerOptions.paths && typeof localCompilerOptions.paths === \"object\"\n        ? localCompilerOptions.paths\n        : null;\n    if (localPaths) {\n        for (const [key, value] of Object.entries(localPaths)) {\n            if (Array.isArray(value)) {\n                mergedPaths[key] = value.filter((entry) => typeof entry === \"string\");\n            }\n        }\n    }\n    return {\n        ...(baseUrl ? { baseUrl } : {}),\n        ...(Object.keys(mergedPaths).length > 0 ? { paths: mergedPaths } : {}),\n    };\n}\nfunction findNearestProjectConfigFiles(startDir) {\n    const configFiles = [];\n    let currentDir = resolve(startDir);\n    const visited = new Set();\n    while (!visited.has(currentDir)) {\n        visited.add(currentDir);\n        const discovered = new Set();\n        const prioritized = [\"tsconfig.json\", \"jsconfig.json\"];\n        for (const filename of prioritized) {\n            const configPath = join(currentDir, filename);\n            if (existsSync(configPath)) {\n                configFiles.push(configPath);\n                discovered.add(filename);\n            }\n        }\n        try {\n            const extraConfigFiles = readdirSync(currentDir)\n                .filter((filename) => !discovered.has(filename) &&\n                /^tsconfig\\.[^.]+\\.json$/i.test(filename))\n                .sort();\n            for (const filename of extraConfigFiles) {\n                configFiles.push(join(currentDir, filename));\n            }\n        }\n        catch {\n            /* ignore unreadable directories */\n        }\n        const parentDir = dirname(currentDir);\n        if (parentDir === currentDir)\n            break;\n        currentDir = parentDir;\n    }\n    return configFiles;\n}\nfunction matchTsconfigPathPattern(specifier, pattern) {\n    if (!pattern.includes(\"*\")) {\n        return specifier === pattern ? \"\" : null;\n    }\n    if ((pattern.match(/\\*/g) ?? []).length !== 1)\n        return null;\n    const [prefix, suffix] = pattern.split(\"*\");\n    if (!specifier.startsWith(prefix) || !specifier.endsWith(suffix))\n        return null;\n    return specifier.slice(prefix.length, specifier.length - suffix.length);\n}\nfunction substituteTsconfigPathTarget(target, wildcardValue) {\n    if (!target.includes(\"*\"))\n        return target;\n    if ((target.match(/\\*/g) ?? []).length !== 1)\n        return null;\n    return target.replace(\"*\", wildcardValue);\n}\nfunction resolveTsconfigAliasImportFile(importerFile, specifier) {\n    for (const configFile of findNearestProjectConfigFiles(dirname(importerFile))) {\n        const compilerOptions = loadTsConfigCompilerOptions(configFile);\n        const configDir = dirname(configFile);\n        const baseDir = compilerOptions.baseUrl\n            ? resolve(configDir, compilerOptions.baseUrl)\n            : configDir;\n        for (const [pattern, targets] of Object.entries(compilerOptions.paths ?? {})) {\n            const wildcardValue = matchTsconfigPathPattern(specifier, pattern);\n            if (wildcardValue === null)\n                continue;\n            for (const target of targets) {\n                const substituted = substituteTsconfigPathTarget(target, wildcardValue);\n                if (!substituted)\n                    continue;\n                const resolvedTarget = substituted.startsWith(\"/\")\n                    ? substituted\n                    : resolve(baseDir, substituted);\n                const candidate = resolveSourceFileCandidate(resolvedTarget);\n                if (candidate)\n                    return candidate;\n            }\n        }\n        if (compilerOptions.baseUrl) {\n            const candidate = resolveSourceFileCandidate(resolve(baseDir, specifier));\n            if (candidate)\n                return candidate;\n        }\n    }\n    return null;\n}\nfunction resolveImportedSourceFile(importerFile, specifier) {\n    if (specifier.startsWith(\".\")) {\n        return resolveRelativeImportFile(importerFile, specifier);\n    }\n    if (specifier.startsWith(\"/\")) {\n        return resolveSourceFileCandidate(specifier);\n    }\n    return resolveTsconfigAliasImportFile(importerFile, specifier);\n}\nfunction collectReachableSourceFiles(entryPoint) {\n    const results = [];\n    const queue = [entryPoint];\n    const visited = new Set();\n    while (queue.length > 0) {\n        const current = queue.shift();\n        if (!current || visited.has(current) || !existsSync(current))\n            continue;\n        visited.add(current);\n        results.push(current);\n        const source = readFileSync(current, \"utf8\");\n        for (const specifier of extractModuleSpecifiers(source)) {\n            const localFile = resolveImportedSourceFile(current, specifier);\n            if (localFile && !visited.has(localFile))\n                queue.push(localFile);\n        }\n    }\n    return results;\n}\n/**\n * \uC0AC\uC6A9\uC790 \uD568\uC218 \uACBD\uB85C\uB97C \uBC1B\uC544 \uAE08\uC9C0 \uBAA8\uB4C8 \uC0AC\uC6A9 \uC5EC\uBD80\uB97C \uBD84\uC11D.\n * reachable source files\uB97C \uC815\uC801\uC73C\uB85C \uB530\uB77C\uAC00\uBA70 import\uB97C \uC218\uC9D1\uD55C\uB2E4.\n */\nexport async function auditFunctions(functionsPath) {\n    const violations = [];\n    try {\n        // \uBC88\uB4E4 \uBA54\uD0C0\uD30C\uC77C \uB300\uC2E0 reachable source graph\uB97C \uC9C1\uC811 \uC21C\uD68C\uD55C\uB2E4.\n        // \uAE30\uC874\uC758 \"\uC571\uC774 \uC2E4\uC81C\uB85C \uB85C\uB4DC\uD560 \uC218 \uC788\uB294 import\uB97C \uAC80\uC0AC\uD55C\uB2E4\"\uB294 \uC758\uB3C4\uB294 \uC720\uC9C0\uD558\uBA74\uC11C\n        // full-suite \uD14C\uC2A4\uD2B8\uC5D0\uC11C \uBCF4\uC600\uB358 esbuild service \uBD88\uC548\uC815\uC744 \uD53C\uD55C\uB2E4.\n        for (const filePath of collectReachableSourceFiles(functionsPath)) {\n            const source = readFileSync(filePath, \"utf8\");\n            for (const moduleName of extractModuleSpecifiers(source)) {\n                if (moduleName.startsWith(\".\") || moduleName.startsWith(\"/\"))\n                    continue;\n                // node: \uD504\uB85C\uD1A0\uCF5C\uC740 \uD5C8\uC6A9 \uBAA9\uB85D\uC5D0 \uC5C6\uB294 \uACBD\uC6B0 \uC989\uC2DC \uC704\uBC18 \uCC98\uB9AC\uD55C\uB2E4.\n                if (moduleName.startsWith(\"node:\") && !isAllowedNodeModule(moduleName)) {\n                    violations.push({ module: moduleName, importedFrom: filePath });\n                    continue;\n                }\n                // bare import\uB3C4 \uB3D9\uC77C\uD55C \uAE08\uC9C0 \uBAA9\uB85D\uC73C\uB85C \uAC80\uC0AC\uD55C\uB2E4.\n                if (FORBIDDEN_MODULES.has(moduleName)) {\n                    violations.push({ module: moduleName, importedFrom: filePath });\n                }\n            }\n        }\n    }\n    catch (err) {\n        // \uC815\uC801 \uBD84\uC11D \uC2E4\uD328\uB294 \uACBD\uACE0\uB9CC \uB0A8\uAE30\uACE0 \uACC4\uC18D \uC9C4\uD589\uD55C\uB2E4. \uC11C\uBC84 \uC2DC\uC791 \uC790\uCCB4\uB97C \uB9C9\uC9C0\uB294 \uC54A\uB294\uB2E4.\n        console.warn(\"[auditor] Module audit skipped \u2014 could not analyze bundle:\", err.message);\n        return { passed: true, violations: [] };\n    }\n    return {\n        passed: violations.length === 0,\n        violations,\n    };\n}\n// \u2500\u2500\u2500 \uD5C8\uC6A9\uB41C node: \uBAA8\uB4C8 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// crypto, path, url, buffer \uB4F1 \uC21C\uC218 \uC720\uD2F8\uB9AC\uD2F0\uB294 \uD5C8\uC6A9.\n// http, https, net, tls \uB4F1\uC740 \uC11C\uB4DC\uD30C\uD2F0 \uD328\uD0A4\uC9C0 \uD638\uD658\uC744 \uC704\uD574 \uD5C8\uC6A9.\n// \uB124\uD2B8\uC6CC\uD06C \uACA9\uB9AC\uB294 cowbox Landlock TCP \uADDC\uCE59\uC73C\uB85C \uCC98\uB9AC.\n//\n// \u26D4 fs \uACC4\uC5F4 \uCC28\uB2E8:\n//   - \uC0AC\uC6A9\uC790 \uCF54\uB4DC\uC5D0\uC11C \uC9C1\uC811 fs \uC811\uADFC\uC744 \uC6D0\uCC9C \uCC28\uB2E8\n//   - cowbox Landlock Phase 2\uC5D0\uC11C per-app \uB514\uB809\uD1A0\uB9AC\uB9CC \uD5C8\uC6A9\uD558\uC9C0\uB9CC,\n//     \uBE4C\uB4DC\uD0C0\uC784\uC5D0 1\uCC28 \uBC29\uC5B4\uD558\uC5EC \uBCF4\uC548 \uACC4\uCE35 \uAC15\uD654\n//   - \uD504\uB808\uC784\uC6CC\uD06C(core/storage.ts)\uB294 auditor \uB300\uC0C1 \uC544\uB2D8 \u2192 \uC601\uD5A5 \uC5C6\uC74C\n//     (esbuild\uC758 packages: \"external\" \uC124\uC815\uC73C\uB85C node_modules \uC81C\uC678)\n//   - \uD30C\uC77C \uC811\uADFC\uC740 ctx.storage API\uB97C \uC0AC\uC6A9\nconst ALLOWED_NODE_MODULES = new Set([\n    \"node:crypto\",\n    \"node:path\",\n    \"node:url\",\n    \"node:buffer\",\n    \"node:stream\",\n    \"node:events\",\n    \"node:util\",\n    \"node:assert\",\n    \"node:querystring\",\n    \"node:string_decoder\",\n    \"node:timers\",\n    \"node:timers/promises\",\n    \"node:zlib\",\n    // \uC11C\uB4DC\uD30C\uD2F0 \uD328\uD0A4\uC9C0 \uD638\uD658\uC744 \uC704\uD574 \uD5C8\uC6A9 (cowbox Landlock TCP\uAC00 \uBCF4\uC548 \uB2F4\uB2F9)\n    \"node:http\",\n    \"node:https\",\n    \"node:http2\",\n    \"node:net\",\n    \"node:tls\",\n    \"node:readline\",\n    // non-prefixed equivalents\n    \"crypto\",\n    \"path\",\n    \"url\",\n    \"buffer\",\n    \"stream\",\n    \"events\",\n    \"util\",\n    \"assert\",\n    \"querystring\",\n    \"string_decoder\",\n    \"timers\",\n    \"zlib\",\n    \"http\",\n    \"https\",\n    \"http2\",\n    \"net\",\n    \"tls\",\n    \"readline\",\n]);\nfunction isAllowedNodeModule(moduleName) {\n    return ALLOWED_NODE_MODULES.has(moduleName);\n}\n/**\n * \uAC10\uC0AC \uACB0\uACFC\uB97C \uC0AC\uB78C\uC774 \uC77D\uAE30 \uC26C\uC6B4 \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825\n */\nexport function printAuditReport(result, functionsPath) {\n    if (result.passed) {\n        console.log(`[auditor] \u2705 Module audit passed \u2014 no forbidden APIs detected`);\n        return;\n    }\n    const banner = `\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551  \u26D4 GENCOW AUDIT FAILED \u2014 Production Constraint Violation    \u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D`;\n    console.error(banner);\n    console.error(`\\n  Functions: ${functionsPath}`);\n    console.error(`\\n  The following modules are BLOCKED in production (Firecracker microVM)`);\n    console.error(`  but are used in your gencow/ functions:\\n`);\n    for (const { module, importedFrom } of result.violations) {\n        console.error(`    \u2717  import \"${module}\"`);\n        console.error(`       in ${importedFrom}`);\n    }\n    console.error(`\\n  Fix: Replace direct module access with ctx API:`);\n    console.error(`    ctx.db         \u2014 database queries (Drizzle)`);\n    console.error(`    ctx.storage    \u2014 file storage`);\n    console.error(`    ctx.scheduler  \u2014 background jobs`);\n    console.error(`    ctx.auth       \u2014 authentication\\n`);\n}\n/**\n * \uB4F1\uB85D\uB41C \uD568\uC218\uB4E4\uC758 public/private \uC0C1\uD0DC\uB97C \uBD84\uC11D.\n * \uC11C\uBC84 \uBD80\uD305 \uC2DC \uD638\uCD9C\uD558\uC5EC \uACF5\uAC1C \uD568\uC218 \uBAA9\uB85D\uC744 \uACBD\uACE0.\n */\nexport function auditSecurity(queryNames, queryDefs, mutations) {\n    const publicQueries = queryDefs.filter((d) => d.isPublic).map((d) => d.key);\n    const publicMutations = mutations.filter((m) => m.isPublic).map((m) => m.name);\n    const protectedQueries = queryDefs.filter((d) => !d.isPublic).map((d) => d.key);\n    const protectedMutations = mutations.filter((m) => !m.isPublic).map((m) => m.name);\n    return { publicQueries, publicMutations, protectedQueries, protectedMutations };\n}\n/**\n * \uBCF4\uC548 \uAC10\uC0AC \uACB0\uACFC\uB97C \uCF58\uC194\uC5D0 \uCD9C\uB825.\n * deploy \uC2DC \uACF5\uAC1C \uD568\uC218\uAC00 \uC788\uC73C\uBA74 \uACBD\uACE0 \uBC30\uB108 \uD45C\uC2DC.\n */\nexport function printSecurityAuditReport(result) {\n    const totalPublic = result.publicQueries.length + result.publicMutations.length;\n    const totalProtected = result.protectedQueries.length + result.protectedMutations.length;\n    if (totalPublic > 0) {\n        console.log(``);\n        console.log(`[auditor] \u26A0\uFE0F  SECURITY AUDIT \u2014 ${totalPublic} public function(s) detected:`);\n        if (result.publicQueries.length > 0) {\n            console.log(`[auditor]   \uD83D\uDCD6 queries:   ${result.publicQueries.join(\", \")}`);\n        }\n        if (result.publicMutations.length > 0) {\n            console.log(`[auditor]   \u270F\uFE0F  mutations: ${result.publicMutations.join(\", \")}`);\n        }\n        console.log(`[auditor]   \u2192 These functions are accessible WITHOUT authentication.`);\n        console.log(`[auditor]   \u2192 Remove { public: true } if auth is intended.`);\n    }\n    console.log(`[auditor] \uD83D\uDD12 ${totalProtected} function(s) protected (auth required)`);\n}\n/**\n * \uC0AC\uC6A9\uC790 \uC2A4\uD0A4\uB9C8 \uD30C\uC77C\uC744 \uC77D\uC5B4 \uBCF4\uC548 anti-pattern\uC744 \uAC10\uC9C0.\n * \uACBD\uACE0\uB9CC \uCD9C\uB825\uD558\uACE0 \uC11C\uBC84 \uC2DC\uC791\uC740 \uCC28\uB2E8\uD558\uC9C0 \uC54A\uC74C (lint\uCC98\uB7FC \uB3D9\uC791).\n *\n * \uAC10\uC9C0 \uD56D\uBAA9:\n *   1. userId \uCEEC\uB7FC \uC5C6\uB294 pgTable (\uC2DC\uC2A4\uD15C \uD14C\uC774\uBE14 \uC81C\uC678)\n *   2. userId\uC5D0 .references() \uC5C6\uC74C\n *   3. userId\uAC00 nullable (.notNull() \uC5C6\uC74C)\n *   4. [NEW] pgTable \uC0AC\uC6A9 \uC2DC RLS \uB204\uB77D \uAD8C\uACE0 (TODO)\n */\nexport function auditSchemaPatterns(schemaPath) {\n    try {\n        const fs = require(\"fs\");\n        const path = require(\"path\");\n        const content = fs.readFileSync(schemaPath, \"utf-8\");\n        const fileName = path.basename(schemaPath);\n        // auth-schema.ts\uB294 better-auth\uAC00 \uC0DD\uC131 \u2014 pgTable \uC0AC\uC6A9\uC774 \uC815\uC0C1\n        if (fileName === \"auth-schema.ts\")\n            return;\n        const warnings = [];\n        // [NEW] pgTable import \uAC10\uC9C0 \uBC0F \uAD8C\uACE0 \uC0AD\uC81C (\uC774\uC81C pgTable\uC774 \uD45C\uC900)\n        // pgTable \uC815\uC758 \uBE14\uB85D \uCD94\uCD9C\n        const tableRegex = /export\\s+const\\s+(\\w+)\\s*=\\s*pgTable\\s*\\(\\s*\"([^\"]+)\"\\s*,\\s*\\{([^}]+(?:\\{[^}]*\\}[^}]*)*)\\}/g;\n        // \uC2DC\uC2A4\uD15C/\uC778\uD504\uB77C \uD14C\uC774\uBE14 (userId \uCCB4\uD06C \uC81C\uC678)\n        const SYSTEM_TABLES = new Set([\n            \"user\",\n            \"session\",\n            \"account\",\n            \"verification\", // auth\n            \"_system_files\", // storage \uC2DC\uC2A4\uD15C \uD14C\uC774\uBE14 (nullable userId \uD5C8\uC6A9)\n            \"_system_settings\",\n            \"usage_snapshots\",\n            \"credits\",\n        ]);\n        let match;\n        while ((match = tableRegex.exec(content)) !== null) {\n            const [, varName, tableName, body] = match;\n            // \uC2DC\uC2A4\uD15C \uD14C\uC774\uBE14 \uC2A4\uD0B5\n            if (SYSTEM_TABLES.has(tableName))\n                continue;\n            const hasUserId = /user_id|userId/.test(body);\n            // userId\uAC00 \uC788\uB294 \uACBD\uC6B0 pgPolicy/RLS\uAC00 \uC801\uC6A9\uB418\uC5C8\uB294\uC9C0 \uAC80\uC0AC\uD558\uBA74 \uC88B\uC73C\uB098\n            // \uD604\uC7AC\uB294 \uAD6C\uC870 \uC81C\uC57D\uC774 \uD480\uB9AC\uBBC0\uB85C \uC0DD\uB7B5 (rls.ts\uC5D0\uC11C \uD655\uC778)\n            if (!hasUserId) {\n                warnings.push(`  \u26A0\uFE0F  \"${tableName}\" \u2014 userId \uCEEC\uB7FC \uC5C6\uC74C \u2192 \uC0AC\uC6A9\uC790\uBCC4 \uB370\uC774\uD130 \uACA9\uB9AC \uBD88\uAC00`);\n                continue;\n            }\n            const hasReferences = /\\.references\\s*\\(/.test(body);\n            if (!hasReferences) {\n                warnings.push(`  \u26A0\uFE0F  \"${tableName}\" \u2014 userId\uC5D0 .references() \uC5C6\uC74C \u2192 FK \uBB34\uACB0\uC131 \uBBF8\uBCF4\uC7A5`);\n            }\n            const userIdLine = body.split(\"\\n\").find((l) => /user_id|userId/.test(l)) || \"\";\n            if (!userIdLine.includes(\"notNull\")) {\n                warnings.push(`  \uD83D\uDCA1 \"${tableName}\" \u2014 userId\uAC00 nullable \u2192 \uC18C\uC720\uC790 \uC5C6\uB294 \uB370\uC774\uD130 \uBC1C\uC0DD \uAC00\uB2A5`);\n            }\n        }\n        if (warnings.length > 0) {\n            console.log(`\\n[auditor] \uD83D\uDD0D \uC2A4\uD0A4\uB9C8 \uBCF4\uC548 \uD328\uD134 \uC810\uAC80 (${fileName}):`);\n            for (const w of warnings) {\n                console.log(`[auditor] ${w}`);\n            }\n            console.log(`[auditor]   \u2192 \uD83D\uDCC4 gencow/SECURITY.md \uCC38\uACE0`);\n            console.log(``);\n        }\n    }\n    catch {\n        // \uC2A4\uD0A4\uB9C8 \uD30C\uC77C\uC744 \uBABB \uC77D\uC73C\uBA74 \uC870\uC6A9\uD788 \uBB34\uC2DC (optional \uAE30\uB2A5)\n    }\n}\n/**\n * gencow/ \uD3F4\uB354 \uB0B4\uC5D0\uC11C fetch(\"/api/mutation\") \uB610\uB294 fetch(\"/api/query\") self-fetch \uD328\uD134\uC744 \uAC10\uC9C0.\n * \uAC19\uC740 \uC11C\uBC84\uC758 \uD568\uC218\uB97C fetch\uB85C \uD638\uCD9C\uD558\uB294 \uAC83\uC740 \uBD88\uD544\uC694\uD55C \uB124\uD2B8\uC6CC\uD06C \uC6B0\uD68C\uC774\uBBC0\uB85C \uACBD\uACE0\uD55C\uB2E4.\n *\n * \uAC10\uC9C0 \uD328\uD134:\n *   - fetch(\"/api/mutation\"), fetch(\"/api/query\")\n *   - fetch(`${baseUrl}/api/mutation`), fetch(`${GENCOW_INTERNAL_URL}/api/query`)\n *   - fetch(url + \"/api/mutation\")\n */\nexport function auditSelfFetch(functionsDir) {\n    const usages = [];\n    try {\n        const fs = require(\"fs\");\n        const path = require(\"path\");\n        const files = findTsFiles(functionsDir);\n        // /api/query \uB610\uB294 /api/mutation \uC744 fetch \uD638\uCD9C \uB0B4\uC5D0\uC11C \uCC38\uC870\uD558\uB294 \uD328\uD134\n        const selfFetchPattern = /\\/api\\/(query|mutation)/;\n        for (const file of files) {\n            const content = fs.readFileSync(file, \"utf-8\");\n            const lines = content.split(\"\\n\");\n            for (let i = 0; i < lines.length; i++) {\n                const line = lines[i];\n                // \uC8FC\uC11D \uB77C\uC778\uC740 \uC2A4\uD0B5\n                const trimmed = line.trim();\n                if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"*\"))\n                    continue;\n                // fetch() \uD638\uCD9C \uB0B4\uC5D0\uC11C /api/query \uB610\uB294 /api/mutation \uCC38\uC870 \uAC10\uC9C0\n                if (line.includes(\"fetch\") && selfFetchPattern.test(line)) {\n                    usages.push({\n                        file: path.relative(functionsDir, file),\n                        line: i + 1,\n                        snippet: trimmed,\n                    });\n                }\n            }\n        }\n    }\n    catch {\n        // \uB514\uB809\uD130\uB9AC\uB97C \uBABB \uC77D\uC73C\uBA74 \uC870\uC6A9\uD788 \uBB34\uC2DC\n    }\n    return { usages };\n}\n/**\n * Self-fetch \uAC10\uC0AC \uACB0\uACFC\uB97C \uCF58\uC194\uC5D0 \uCD9C\uB825.\n */\nexport function printSelfFetchReport(result) {\n    if (result.usages.length === 0)\n        return;\n    console.log(`\\n[auditor] \u26A0\uFE0F  Self-fetch detected in ${result.usages.length} location(s):`);\n    for (const u of result.usages) {\n        console.log(`[auditor]   ${u.file}:${u.line} \u2192 ${u.snippet}`);\n    }\n    console.log(`[auditor]   \u2192 \uAC19\uC740 \uC11C\uBC84\uC758 \uD568\uC218\uB294 \uC9C1\uC811 import\uD558\uC138\uC694:`);\n    console.log(`[auditor]     import { fetchNews } from \"./crawler\";`);\n    console.log(`[auditor]     const result = await fetchNews.handler(ctx, { keyword });`);\n    console.log(`[auditor]   \u2192 fetch(\"/api/mutation\") \uD328\uD134\uC740 \uBD88\uD544\uC694\uD55C \uB124\uD2B8\uC6CC\uD06C \uC6B0\uD68C\uC785\uB2C8\uB2E4.\\n`);\n}\n/**\n * \uD504\uB860\uD2B8\uC5D4\uB4DC \uC18C\uC2A4(src/)\uC5D0\uC11C \uCEE4\uC2A4\uD140 API \uB798\uD37C \uD30C\uC77C + fetch \uC9C1\uC811 \uD638\uCD9C\uC744 \uAC10\uC9C0.\n * AI\uAC00 gencow/api.ts (\uC790\uB3D9 \uC0DD\uC131)\uB97C \uBB34\uC2DC\uD558\uACE0 \uB3C5\uC790 API \uD074\uB77C\uC774\uC5B8\uD2B8\uB97C \uB9CC\uB4DC\uB294 \uD328\uD134\uC744 \uACBD\uACE0.\n *\n * \uAC10\uC9C0 \uB300\uC0C1:\n *   - src/lib/api.ts, src/api.ts \uB4F1 \uCEE4\uC2A4\uD140 API \uB798\uD37C \uD30C\uC77C\n *   - \uD574\uB2F9 \uD30C\uC77C \uB0B4 fetch(\"/api/query\") \uB610\uB294 fetch(\"/api/mutation\") \uD328\uD134\n */\nexport function auditFrontendAntiPatterns(projectDir) {\n    const issues = [];\n    try {\n        const fs = require(\"fs\");\n        const path = require(\"path\");\n        const srcDir = path.join(projectDir, \"src\");\n        if (!fs.existsSync(srcDir))\n            return { issues };\n        // \uC758\uC2EC \uD30C\uC77C\uBA85 \uD328\uD134 \u2014 \uCEE4\uC2A4\uD140 API \uB798\uD37C \uD6C4\uBCF4\n        const SUSPECT_NAMES = new Set([\n            \"api.ts\",\n            \"api.tsx\",\n            \"api-client.ts\",\n            \"api-client.tsx\",\n            \"rpc.ts\",\n            \"rpc.tsx\",\n            \"client.ts\",\n            \"client.tsx\",\n        ]);\n        const selfFetchPattern = /\\/api\\/(query|mutation)/;\n        const allFiles = findTsFiles(srcDir);\n        for (const file of allFiles) {\n            const basename = path.basename(file);\n            const relPath = path.relative(projectDir, file);\n            // gencow/ \uB514\uB809\uD1A0\uB9AC \uB0B4 \uD30C\uC77C\uC740 \uC2A4\uD0B5 (\uC790\uB3D9 \uC0DD\uC131 \uD30C\uC77C)\n            if (relPath.startsWith(\"gencow/\") || relPath.startsWith(\"gencow\\\\\"))\n                continue;\n            if (SUSPECT_NAMES.has(basename)) {\n                const content = fs.readFileSync(file, \"utf-8\");\n                if (selfFetchPattern.test(content)) {\n                    issues.push({\n                        file: relPath,\n                        reason: `fetch(\"/api/query\" \uB610\uB294 \"/api/mutation\") \uC9C1\uC811 \uD638\uCD9C \uAC10\uC9C0 \u2014 \uC774 \uD30C\uC77C\uC744 \uC0AD\uC81C\uD558\uC138\uC694`,\n                    });\n                }\n            }\n        }\n    }\n    catch {\n        // \uD504\uB860\uD2B8\uC5D4\uB4DC \uC18C\uC2A4\uB97C \uBABB \uC77D\uC73C\uBA74 \uC870\uC6A9\uD788 \uBB34\uC2DC\n    }\n    return { issues };\n}\n/**\n * \uD504\uB860\uD2B8\uC5D4\uB4DC anti-pattern \uAC10\uC0AC \uACB0\uACFC \uCD9C\uB825.\n */\nexport function printFrontendAntiPatternReport(result) {\n    if (result.issues.length === 0)\n        return;\n    console.log(`\\n[auditor] \u26A0\uFE0F  Custom API client detected:`);\n    for (const issue of result.issues) {\n        console.log(`[auditor]   ${issue.file} \u2014 ${issue.reason}`);\n    }\n    console.log(`[auditor]   \u2192 gencow/api.ts (\uC790\uB3D9 \uC0DD\uC131)\uC640 useQuery/useMutation\uC744 \uC0AC\uC6A9\uD558\uC138\uC694`);\n    console.log(`[auditor]   \u2192 \uD83D\uDCC4 README.md \"\u274C \uC808\uB300 \uD558\uC9C0 \uB9C8\uC138\uC694\" \uC139\uC158 \uCC38\uC870\\n`);\n}\n// \u2500\u2500\u2500 Workflow Shadowing \uAC10\uC9C0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst WORKFLOW_SHADOW_FILENAMES = new Set([\"workflow.ts\", \"workflow.tsx\", \"workflow.js\", \"workflow.jsx\"]);\nconst WORKFLOW_SHADOW_RUNTIME_MARKERS = [\n    \"__gencow_workflowRegistry\",\n    \"WORKFLOW_RESUME_ACTION_PREFIX\",\n    \"registerWorkflowsApi(\",\n    'query(\"workflows.get\"',\n    'query(\"workflows.list\"',\n    'mutation(\"workflows.signal\"',\n    \"getWorkflowResumeActionName(\",\n];\nconst WORKFLOW_RELATIVE_IMPORT_PATTERN = /from\\s+[\"'](?:\\.\\.\\/|\\.\\/)workflow(?:\\.(?:[cm]?[jt]sx?))?[\"']/;\n/**\n * gencow/ \uB0B4\uBD80\uC5D0\uC11C framework workflow runtime\uC744 \uD3EC\uD06C\uD558\uAC70\uB098\n * ./workflow \uC0C1\uB300 import\uB85C shadowing \uD558\uB294 \uD328\uD134\uC744 \uAC10\uC9C0\uD55C\uB2E4.\n *\n * \uAE30\uBCF8 \uB3D9\uC791\uC740 \uACBD\uACE0\uC774\uBA70, GENCOW_STRICT=true \uC5D0\uC11C\uB9CC startup abort \uB300\uC0C1\uC73C\uB85C \uC0AC\uC6A9\uD55C\uB2E4.\n */\nexport function auditWorkflowShadowing(functionsDir) {\n    const issues = [];\n    try {\n        const fs = require(\"fs\");\n        const path = require(\"path\");\n        const files = findTsFiles(functionsDir);\n        for (const file of files) {\n            const content = fs.readFileSync(file, \"utf-8\");\n            const relPath = path.relative(functionsDir, file);\n            const basename = path.basename(file);\n            if (WORKFLOW_SHADOW_FILENAMES.has(basename)) {\n                const markers = WORKFLOW_SHADOW_RUNTIME_MARKERS.filter((marker) => content.includes(marker));\n                if (markers.length > 0) {\n                    issues.push({\n                        file: relPath,\n                        line: 1,\n                        snippet: `framework runtime markers: ${markers.slice(0, 3).join(\", \")}`,\n                        type: \"shadow-file\",\n                    });\n                }\n            }\n            const lines = content.split(\"\\n\");\n            for (let i = 0; i < lines.length; i++) {\n                const trimmed = lines[i].trim();\n                if (trimmed.startsWith(\"//\") ||\n                    trimmed.startsWith(\"*\") ||\n                    trimmed.startsWith(\"/*\") ||\n                    trimmed.startsWith(\"*/\")) {\n                    continue;\n                }\n                if (WORKFLOW_RELATIVE_IMPORT_PATTERN.test(trimmed)) {\n                    issues.push({\n                        file: relPath,\n                        line: i + 1,\n                        snippet: trimmed.slice(0, 140),\n                        type: \"relative-import\",\n                    });\n                }\n            }\n        }\n    }\n    catch {\n        // \uB514\uB809\uD130\uB9AC\uB97C \uBABB \uC77D\uC73C\uBA74 \uC870\uC6A9\uD788 \uBB34\uC2DC\n    }\n    return {\n        passed: issues.length === 0,\n        issues,\n    };\n}\nexport function printWorkflowShadowingReport(result) {\n    if (result.issues.length === 0)\n        return;\n    const typeLabels = {\n        \"shadow-file\": \"\uD83E\uDDEC \uB85C\uCEEC workflow runtime \uD3EC\uD06C\",\n        \"relative-import\": \"\uD83D\uDD01 \uC0C1\uB300 workflow import\",\n    };\n    console.log(`\\n[auditor] \u26A0\uFE0F  Workflow shadowing detected (${result.issues.length}\uAC74):`);\n    for (const issue of result.issues) {\n        const label = typeLabels[issue.type] || \"\u26A0\uFE0F  \uAE30\uD0C0\";\n        const loc = issue.line > 0 ? `${issue.file}:${issue.line}` : issue.file;\n        console.log(`[auditor]   ${label} \u2014 ${loc}`);\n        console.log(`[auditor]     ${issue.snippet}`);\n    }\n    console.log(`[auditor]   \u2192 workflow\uB294 \uBC18\uB4DC\uC2DC import { workflow } from \"@gencow/core\" \uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`);\n    console.log(`[auditor]   \u2192 gencow/workflow.ts \uAC19\uC740 shadow file\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.`);\n    console.log(`[auditor]   \u2192 helper\uAC00 \uD544\uC694\uD558\uBA74 \uB2E4\uB978 \uD30C\uC77C\uBA85\uC73C\uB85C \uB9CC\uB4E4\uACE0 core workflow\uB97C \uAC10\uC2F8\uC138\uC694.\\n`);\n}\n// \u2500\u2500\u2500 \uC720\uD2F8\uB9AC\uD2F0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/** \uB514\uB809\uD130\uB9AC\uC5D0\uC11C .ts \uD30C\uC77C \uC7AC\uADC0 \uAC80\uC0C9 */\nfunction findTsFiles(dir) {\n    const fs = require(\"fs\");\n    const path = require(\"path\");\n    const results = [];\n    try {\n        const entries = fs.readdirSync(dir, { withFileTypes: true });\n        for (const entry of entries) {\n            const fullPath = path.join(dir, entry.name);\n            if (entry.isDirectory() && entry.name !== \"node_modules\" && !entry.name.startsWith(\".\")) {\n                results.push(...findTsFiles(fullPath));\n            }\n            else if (entry.isFile() && (entry.name.endsWith(\".ts\") || entry.name.endsWith(\".tsx\"))) {\n                results.push(fullPath);\n            }\n        }\n    }\n    catch {\n        // ignore\n    }\n    return results;\n}\n/**\n * gencow/ \uD3F4\uB354 \uB0B4\uC5D0\uC11C AI \uD504\uB85D\uC2DC\uB97C \uC6B0\uD68C\uD558\uB294 \uD328\uD134\uC744 \uAC10\uC9C0.\n *\n * test041\u2192test042\u2192test043\uC5D0\uC11C \uBC18\uBCF5 \uBC1C\uACAC\uB41C \uD328\uD134:\n *   1. fetch(\"https://api.openai.com/...\") \u2014 OpenAI API \uC9C1\uC811 \uD638\uCD9C\n *   2. openai-direct.ts, ai-wrapper.ts \uB4F1 \uBCC4\uB3C4 AI \uB798\uD37C \uD30C\uC77C \uC0DD\uC131\n *   3. new OpenAI({ apiKey: ... }) \u2014 openai \uD328\uD0A4\uC9C0 \uC9C1\uC811 \uC0AC\uC6A9\n *   4. callGPT(), callOpenAI() \uAC19\uC740 \uC778\uB77C\uC778 AI \uD638\uCD9C \uD568\uC218\n *\n * \uC774\uB7EC\uD55C \uD328\uD134\uC774 \uBC1C\uACAC\uB418\uBA74 \uACBD\uACE0\uB97C \uCD9C\uB825\uD558\uC5EC:\n *   - import { ai } from \"./ai\" \uC0AC\uC6A9\uC744 \uC548\uB0B4\n *   - ai.ts \uC218\uC815/\uC6B0\uD68C \uAE08\uC9C0\uB97C \uC804\uB2EC\n */\nexport function auditAIBypass(functionsDir) {\n    const issues = [];\n    try {\n        const fs = require(\"fs\");\n        const path = require(\"path\");\n        const files = findTsFiles(functionsDir);\n        // \uC758\uC2EC \uD30C\uC77C\uBA85 \u2014 AI \uB798\uD37C \uD30C\uC77C \uD6C4\uBCF4 (ai.ts \uC790\uCCB4\uB294 \uC81C\uC678)\n        const SUSPECT_FILENAMES = new Set([\n            \"openai-direct.ts\",\n            \"openai-direct.tsx\",\n            \"ai-wrapper.ts\",\n            \"ai-wrapper.tsx\",\n            \"ai-helper.ts\",\n            \"ai-helper.tsx\",\n            \"ai-client.ts\",\n            \"ai-client.tsx\",\n            \"gpt.ts\",\n            \"gpt.tsx\",\n            \"openai.ts\",\n            \"openai.tsx\",\n            \"llm.ts\",\n            \"llm.tsx\",\n        ]);\n        // \uCF54\uB4DC \uB0B4 AI \uC9C1\uC811 \uD638\uCD9C \uD328\uD134\n        const DIRECT_OPENAI_FETCH = /fetch\\s*\\(\\s*[`\"']https?:\\/\\/api\\.openai\\.com/;\n        const DIRECT_OPENAI_CONSTRUCTOR = /new\\s+OpenAI\\s*\\(/;\n        const INLINE_AI_FUNC = /(?:async\\s+)?function\\s+(?:callGPT|callOpenAI|callAI|fetchGPT|aiCall|directAI)\\s*\\(/;\n        const OPENAI_IMPORT = /(?:import|require)\\s*\\(?.*['\"]openai['\"]/;\n        for (const file of files) {\n            const basename = path.basename(file);\n            const relPath = path.relative(functionsDir, file);\n            // ai.ts \uC790\uCCB4\uB294 \uC81C\uC678\n            if (basename === \"ai.ts\")\n                continue;\n            // 1. \uC758\uC2EC \uD30C\uC77C\uBA85 \uAC10\uC9C0\n            if (SUSPECT_FILENAMES.has(basename)) {\n                issues.push({\n                    file: relPath,\n                    line: 0,\n                    snippet: `\uD30C\uC77C\uBA85 \"${basename}\" \u2014 AI \uC6B0\uD68C \uB798\uD37C \uC758\uC2EC`,\n                    type: \"suspect-file\",\n                });\n            }\n            const content = fs.readFileSync(file, \"utf-8\");\n            const lines = content.split(\"\\n\");\n            for (let i = 0; i < lines.length; i++) {\n                const line = lines[i];\n                const trimmed = line.trim();\n                // \uC8FC\uC11D \uC2A4\uD0B5\n                if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"*\") || trimmed.startsWith(\"/*\"))\n                    continue;\n                // 2. OpenAI API \uC9C1\uC811 fetch\n                if (DIRECT_OPENAI_FETCH.test(line)) {\n                    issues.push({\n                        file: relPath,\n                        line: i + 1,\n                        snippet: trimmed.slice(0, 100),\n                        type: \"direct-fetch\",\n                    });\n                }\n                // 3. new OpenAI() \uC0DD\uC131\uC790\n                if (DIRECT_OPENAI_CONSTRUCTOR.test(line)) {\n                    issues.push({\n                        file: relPath,\n                        line: i + 1,\n                        snippet: trimmed.slice(0, 100),\n                        type: \"openai-constructor\",\n                    });\n                }\n                // 4. callGPT \uB4F1 \uC778\uB77C\uC778 AI \uD568\uC218 \uC815\uC758\n                if (INLINE_AI_FUNC.test(line)) {\n                    issues.push({\n                        file: relPath,\n                        line: i + 1,\n                        snippet: trimmed.slice(0, 100),\n                        type: \"inline-ai-func\",\n                    });\n                }\n                // 5. import OpenAI from \"openai\" (\uC9C1\uC811 \uD328\uD0A4\uC9C0 \uC0AC\uC6A9)\n                if (OPENAI_IMPORT.test(line)) {\n                    issues.push({\n                        file: relPath,\n                        line: i + 1,\n                        snippet: trimmed.slice(0, 100),\n                        type: \"openai-import\",\n                    });\n                }\n            }\n        }\n    }\n    catch {\n        // \uB514\uB809\uD130\uB9AC\uB97C \uBABB \uC77D\uC73C\uBA74 \uC870\uC6A9\uD788 \uBB34\uC2DC\n    }\n    return { issues };\n}\n/**\n * AI \uC6B0\uD68C \uD328\uD134 \uAC10\uC0AC \uACB0\uACFC\uB97C \uCF58\uC194\uC5D0 \uCD9C\uB825.\n */\nexport function printAIBypassReport(result) {\n    if (result.issues.length === 0)\n        return;\n    const typeLabels = {\n        \"suspect-file\": \"\uD83D\uDDC2\uFE0F  AI \uC6B0\uD68C \uB798\uD37C \uD30C\uC77C\",\n        \"direct-fetch\": \"\uD83D\uDD34 OpenAI API \uC9C1\uC811 \uD638\uCD9C\",\n        \"openai-constructor\": \"\uD83D\uDD34 OpenAI \uC0DD\uC131\uC790 \uC9C1\uC811 \uC0AC\uC6A9\",\n        \"inline-ai-func\": \"\u26A0\uFE0F  \uC778\uB77C\uC778 AI \uD568\uC218 \uC815\uC758\",\n        \"openai-import\": \"\u26A0\uFE0F  openai \uD328\uD0A4\uC9C0 \uC9C1\uC811 import\",\n    };\n    console.log(`\\n[auditor] \uD83E\uDD16 AI \uC6B0\uD68C \uD328\uD134 \uAC10\uC9C0 (${result.issues.length}\uAC74):`);\n    for (const issue of result.issues) {\n        const label = typeLabels[issue.type] || \"\u26A0\uFE0F  \uAE30\uD0C0\";\n        const loc = issue.line > 0 ? `${issue.file}:${issue.line}` : issue.file;\n        console.log(`[auditor]   ${label} \u2014 ${loc}`);\n        console.log(`[auditor]     ${issue.snippet}`);\n    }\n    console.log(`[auditor]   \u2192 AI \uD638\uCD9C\uC740 \uBC18\uB4DC\uC2DC import { ai } from \"./ai\" \uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`);\n    console.log(`[auditor]   \u2192 ai.ts\uB294 \uB85C\uCEEC/\uD074\uB77C\uC6B0\uB4DC \uC790\uB3D9 \uC804\uD658\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.`);\n    console.log(`[auditor]   \u2192 fetch()\uB85C OpenAI\uB97C \uC9C1\uC811 \uD638\uCD9C\uD558\uBA74 \uD074\uB77C\uC6B0\uB4DC\uC5D0\uC11C \uACFC\uAE08\uC774 \uC548 \uB429\uB2C8\uB2E4.\\n`);\n}\n", "import { readdirSync, readFileSync } from \"fs\";\nimport { basename, join, relative } from \"path\";\nconst ALLOW_COMMENT = \"gencow-allow-unsafe-db\";\nconst SYSTEM_TABLE_PATTERN = /\\b_(?:system|gencow)_[a-zA-Z0-9_]*\\b/;\nconst UNSAFE_PATTERNS = [\n    {\n        type: \"unsafe-db\",\n        pattern: /\\b(?:ctx\\.)?unsafeDb\\b/,\n        reason: \"ctx.unsafeDb uses the audited system-plane database handle\",\n    },\n    {\n        type: \"raw-sql\",\n        pattern: /\\brawSql\\b|\\bSQL\\.unsafe\\b|\\bclient\\.unsafe\\b|(?:^|[^\\w])\\.unsafe\\s*\\(/,\n        reason: \"raw SQL escape hatches need explicit review\",\n    },\n    {\n        type: \"system-table\",\n        pattern: SYSTEM_TABLE_PATTERN,\n        reason: \"_system_* and _gencow_* tables are framework-owned\",\n    },\n];\nexport function auditUnsafeDbUsage(functionsDir) {\n    const issues = [];\n    const seedWarnings = [];\n    for (const file of findSourceFiles(functionsDir)) {\n        const content = readFileSync(file, \"utf-8\");\n        const relPath = relative(functionsDir, file);\n        if (isSeedFile(relPath)) {\n            if (UNSAFE_PATTERNS.some((unsafePattern) => unsafePattern.pattern.test(maskComments(content)))) {\n                seedWarnings.push({\n                    file: relPath,\n                    reason: \"seed.ts may use unsafe database access for seeding, but it must not be shipped or used in production\",\n                });\n            }\n            continue;\n        }\n        const operations = findPublicOperationRanges(content);\n        const executableLines = maskComments(content).split(\"\\n\");\n        const originalLines = content.split(\"\\n\");\n        for (let index = 0; index < executableLines.length; index++) {\n            const executableLine = executableLines[index];\n            if (!executableLine.trim())\n                continue;\n            for (const unsafePattern of UNSAFE_PATTERNS) {\n                if (!unsafePattern.pattern.test(executableLine))\n                    continue;\n                const line = index + 1;\n                const operation = operations.find((range) => range.startLine <= line && line <= range.endLine);\n                const allowlisted = hasCompleteAllowComment(originalLines, index);\n                const blocked = isBlockedIssue(unsafePattern.type, operation, allowlisted);\n                issues.push({\n                    file: relPath,\n                    line,\n                    snippet: originalLines[index].trim().slice(0, 160),\n                    type: unsafePattern.type,\n                    operation: operation?.kind,\n                    allowlisted,\n                    blocked,\n                    reason: blocked ? buildBlockedReason(unsafePattern.type, operation) : unsafePattern.reason,\n                });\n            }\n        }\n    }\n    return {\n        usages: issues.map((issue) => ({ file: issue.file, line: issue.line, snippet: issue.snippet })),\n        issues,\n        seedWarnings,\n        blocked: issues.some((issue) => issue.blocked),\n    };\n}\nexport function printUnsafeDbReport(result) {\n    if (result.issues.length === 0 && result.seedWarnings.length === 0)\n        return;\n    const blocked = result.issues.filter((issue) => issue.blocked);\n    const warnings = result.issues.filter((issue) => !issue.blocked);\n    const log = blocked.length > 0 ? console.error : console.warn;\n    if (result.issues.length > 0) {\n        log(`\\n[auditor] \u26A0\uFE0F  unsafe/raw database access detected in ${result.issues.length} location(s):`);\n    }\n    for (const issue of result.issues) {\n        const marker = issue.blocked ? \"\u2717\" : issue.allowlisted ? \"\u2713 allowlisted\" : \"\u26A0 review\";\n        const operation = issue.operation ? ` public ${issue.operation}` : \" protected/internal code\";\n        log(`[auditor]   ${marker} ${issue.file}:${issue.line} \u2014 ${issue.type}${operation}`);\n        log(`[auditor]     ${issue.snippet}`);\n        log(`[auditor]     \u2192 ${issue.reason}`);\n    }\n    for (const seedWarning of result.seedWarnings) {\n        log(`\\n[auditor] \u26A0\uFE0F  ${seedWarning.file} is a seeding-only file`);\n        log(`[auditor]     \u2192 ${seedWarning.reason}`);\n    }\n    if (blocked.length > 0) {\n        log(\"[auditor]   \u2192 public handlers must use ctx.db, scoped helpers, or a complete allow comment.\");\n        log(`[auditor]   \u2192 allow comment format: // ${ALLOW_COMMENT} reason: ... scope: ... owner: ... test: ...`);\n    }\n    else if (warnings.length > 0 || result.seedWarnings.length > 0) {\n        log(\"[auditor]   \u2192 keep these reviewed and prefer ctx.db unless this is explicit infra/admin code.\");\n    }\n    log(\"\");\n}\nexport function auditDataIsolation(schemaPath, functionsDir) {\n    const pgTablesWithUserId = [];\n    try {\n        const content = readFileSync(schemaPath, \"utf-8\");\n        const systemTables = new Set([\n            \"user\",\n            \"session\",\n            \"account\",\n            \"verification\",\n            \"_system_files\",\n            \"_system_settings\",\n            \"usage_snapshots\",\n            \"credits\",\n        ]);\n        const tableRegex = /export\\s+const\\s+(\\w+)\\s*=\\s*pgTable\\s*\\(\\s*\"([^\"]+)\"\\s*,\\s*\\{([^}]+(?:\\{[^}]*\\}[^}]*)*)\\}/g;\n        let match;\n        while ((match = tableRegex.exec(content)) !== null) {\n            const [, , tableName, body] = match;\n            if (systemTables.has(tableName))\n                continue;\n            if (/user_id|userId/.test(body))\n                pgTablesWithUserId.push(tableName);\n        }\n    }\n    catch {\n        // optional schema file\n    }\n    const unsafeResult = auditUnsafeDbUsage(functionsDir);\n    return {\n        passed: pgTablesWithUserId.length === 0 && !unsafeResult.blocked,\n        pgTablesWithUserId,\n        unsafeDbUsages: unsafeResult.issues.length,\n    };\n}\nexport function printDataIsolationReport(result) {\n    if (result.passed && result.unsafeDbUsages === 0) {\n        console.log(\"[auditor] \u2705 Data isolation audit passed\");\n        return;\n    }\n    if (result.pgTablesWithUserId.length > 0) {\n        console.error(`\\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557`);\n        console.error(`\u2551  \u26D4 DEPLOY BLOCKED \u2014 pgTable without access control          \u2551`);\n        console.error(`\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D`);\n        console.error(`\\n  The following tables use pgTable() with userId but no access control:\\n`);\n        for (const table of result.pgTablesWithUserId) {\n            console.error(`    \u2717  \"${table}\" \u2014 add pgPolicy with ownerRls()`);\n        }\n        console.error(`\\n  Fix: Add pgPolicy to your pgTable():`);\n        console.error(`    import { ownerRls } from \"@gencow/core\";`);\n        console.error(`    export const tasks = pgTable(\"tasks\", { ... }, (t) => ownerRls(t.userId));\\n`);\n    }\n    if (result.unsafeDbUsages > 0) {\n        console.warn(`[auditor] \u26A0\uFE0F  ${result.unsafeDbUsages} unsafe/raw database access issue(s) found`);\n    }\n}\nfunction isBlockedIssue(type, operation, allowlisted) {\n    if (!operation)\n        return false;\n    if (type === \"system-table\")\n        return true;\n    return !allowlisted;\n}\nfunction buildBlockedReason(type, operation) {\n    if (type === \"system-table\") {\n        return `public ${operation?.kind ?? \"handler\"} must not expose framework-owned system tables`;\n    }\n    return `public ${operation?.kind ?? \"handler\"} uses an unreviewed database escape hatch`;\n}\nfunction hasCompleteAllowComment(lines, lineIndex) {\n    const start = Math.max(0, lineIndex - 4);\n    const nearby = lines.slice(start, lineIndex + 1).join(\"\\n\");\n    return (nearby.includes(ALLOW_COMMENT) &&\n        /\\breason\\s*:/i.test(nearby) &&\n        /\\bscope\\s*:/i.test(nearby) &&\n        /\\bowner\\s*:/i.test(nearby) &&\n        /\\btest\\s*:/i.test(nearby));\n}\nfunction findPublicOperationRanges(content) {\n    const masked = maskCommentsAndStrings(content);\n    const ranges = [];\n    // Legacy call-style: query(...), mutation(...), httpAction({ public: true, ... }).\n    const operationPattern = /\\b(query|mutation|httpAction)\\s*\\(/g;\n    let match;\n    while ((match = operationPattern.exec(masked)) !== null) {\n        const openParen = masked.indexOf(\"(\", match.index);\n        const closeParen = findMatchingParen(masked, openParen);\n        if (closeParen === -1)\n            continue;\n        const block = masked.slice(match.index, closeParen + 1);\n        if (!/\\bpublic\\s*:\\s*true\\b/.test(block))\n            continue;\n        ranges.push({\n            kind: match[1],\n            startLine: lineNumberAt(content, match.index),\n            endLine: lineNumberAt(content, closeParen),\n        });\n    }\n    // New builder: httpRoute.<verb>.path(...).allowAnonymous().handler(...).\n    // Treated as \"public\" iff `.allowAnonymous()` appears anywhere in the chain up to .handler()'s close.\n    const httpRoutePattern = /\\bhttpRoute\\s*\\.\\s*(get|post|put|delete|patch)\\b/g;\n    let cursor = 0;\n    while ((match = httpRoutePattern.exec(masked)) !== null) {\n        if (match.index < cursor)\n            continue;\n        const handlerIdx = masked.indexOf(\".handler\", match.index);\n        if (handlerIdx === -1)\n            continue;\n        const openParen = masked.indexOf(\"(\", handlerIdx);\n        if (openParen === -1)\n            continue;\n        const closeParen = findMatchingParen(masked, openParen);\n        if (closeParen === -1)\n            continue;\n        const block = masked.slice(match.index, closeParen + 1);\n        cursor = closeParen + 1;\n        if (!/\\.allowAnonymous\\s*\\(\\s*\\)/.test(block))\n            continue;\n        ranges.push({\n            kind: \"httpRoute\",\n            startLine: lineNumberAt(content, match.index),\n            endLine: lineNumberAt(content, closeParen),\n        });\n    }\n    return ranges;\n}\nfunction findMatchingParen(content, openParen) {\n    let depth = 0;\n    for (let index = openParen; index < content.length; index++) {\n        const ch = content[index];\n        if (ch === \"(\")\n            depth++;\n        if (ch === \")\") {\n            depth--;\n            if (depth === 0)\n                return index;\n        }\n    }\n    return -1;\n}\nfunction lineNumberAt(content, index) {\n    let line = 1;\n    for (let cursor = 0; cursor < index; cursor++) {\n        if (content[cursor] === \"\\n\")\n            line++;\n    }\n    return line;\n}\nfunction findSourceFiles(dir) {\n    const results = [];\n    try {\n        for (const entry of readdirSync(dir, { withFileTypes: true })) {\n            if (entry.name === \"node_modules\" || entry.name.startsWith(\".\"))\n                continue;\n            const fullPath = join(dir, entry.name);\n            if (entry.isDirectory())\n                results.push(...findSourceFiles(fullPath));\n            if (entry.isFile() && /\\.(?:[cm]?[jt]sx?)$/.test(basename(entry.name)))\n                results.push(fullPath);\n        }\n    }\n    catch {\n        // missing functions dir\n    }\n    return results;\n}\nfunction isSeedFile(file) {\n    return basename(file) === \"seed.ts\" || basename(file) === \"seed.js\";\n}\nfunction maskComments(content) {\n    let output = \"\";\n    let inBlock = false;\n    for (let i = 0; i < content.length; i++) {\n        const ch = content[i];\n        const next = content[i + 1];\n        if (inBlock) {\n            if (ch === \"*\" && next === \"/\") {\n                output += \"  \";\n                i++;\n                inBlock = false;\n            }\n            else {\n                output += ch === \"\\n\" ? \"\\n\" : \" \";\n            }\n            continue;\n        }\n        if (ch === \"/\" && next === \"*\") {\n            output += \"  \";\n            i++;\n            inBlock = true;\n            continue;\n        }\n        if (ch === \"/\" && next === \"/\") {\n            while (i < content.length && content[i] !== \"\\n\") {\n                output += \" \";\n                i++;\n            }\n            if (i < content.length)\n                output += \"\\n\";\n            continue;\n        }\n        output += ch;\n    }\n    return output;\n}\nfunction maskCommentsAndStrings(content) {\n    const withoutComments = maskComments(content);\n    let output = \"\";\n    let quote = null;\n    let escaped = false;\n    for (const ch of withoutComments) {\n        if (quote) {\n            output += ch === \"\\n\" ? \"\\n\" : \" \";\n            if (!escaped && ch === quote)\n                quote = null;\n            escaped = !escaped && ch === \"\\\\\";\n            if (ch !== \"\\\\\")\n                escaped = false;\n            continue;\n        }\n        if (ch === \"'\" || ch === '\"' || ch === \"`\") {\n            quote = ch;\n            output += \" \";\n            continue;\n        }\n        output += ch;\n    }\n    return output;\n}\n", "import { existsSync, realpathSync } from \"fs\";\nimport { basename, isAbsolute, relative, resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nconst BETTER_AUTH_SCHEMA_EXPORTS = [\"user\", \"session\", \"account\", \"verification\"];\nconst PROJECT_AUTH_SCHEMA_FILENAMES = new Set([\"schema-auth.ts\", \"schema-auth.js\"]);\nconst LEGACY_AUTH_SCHEMA_FILENAMES = new Set([\"auth-schema.ts\", \"auth-schema.js\"]);\nexport class RuntimeAuthSchemaContractError extends Error {\n    code = \"AUTH_SCHEMA_CONTRACT_INVALID\";\n    constructor(message) {\n        super(`AUTH_SCHEMA_CONTRACT_INVALID: ${message}`);\n        this.name = \"RuntimeAuthSchemaContractError\";\n    }\n}\nexport function validateBetterAuthSchemaExports(authSchemaModule) {\n    const missingExports = BETTER_AUTH_SCHEMA_EXPORTS.filter((exportName) => !(exportName in authSchemaModule));\n    const invalidExports = BETTER_AUTH_SCHEMA_EXPORTS.filter((exportName) => exportName in authSchemaModule &&\n        (typeof authSchemaModule[exportName] !== \"object\" ||\n            authSchemaModule[exportName] === null ||\n            Array.isArray(authSchemaModule[exportName])));\n    return {\n        ok: missingExports.length === 0 && invalidExports.length === 0,\n        missingExports,\n        invalidExports,\n    };\n}\n/** Legacy unmigrated apps: accept exactly one bounded legacy Auth schema source. */\nexport function resolveLegacyAuthSchemaFile(functionsPath) {\n    const projectRoot = resolve(functionsPath, \"..\");\n    const entries = dedupeEntries(resolveImplicitLegacyAuthSchemaFiles(functionsPath).map((schemaFile) => assertConfinedSchemaEntry(projectRoot, schemaFile)));\n    return entries.length > 0 ? requireSingleEntry(\"legacy\", entries).path : null;\n}\nfunction resolveImplicitLegacyAuthSchemaFiles(functionsPath) {\n    return [\n        resolve(functionsPath, \"generated\", \"auth-schema.ts\"),\n        resolve(functionsPath, \"generated\", \"auth-schema.js\"),\n        resolve(functionsPath, \"auth-schema.ts\"),\n        resolve(functionsPath, \"auth-schema.js\"),\n    ].filter((candidate) => existsSync(candidate));\n}\nfunction isWithinRoot(root, candidate) {\n    const relativePath = relative(root, candidate);\n    return relativePath === \"\" || (!relativePath.startsWith(\"..\") && !isAbsolute(relativePath));\n}\nfunction safeSchemaLabel(projectRoot, candidate) {\n    const relativePath = relative(projectRoot, candidate).replace(/\\\\/g, \"/\");\n    return relativePath || basename(candidate);\n}\nfunction assertConfinedSchemaEntry(projectRoot, candidate) {\n    const resolved = resolve(candidate);\n    if (!isWithinRoot(projectRoot, resolved)) {\n        throw new RuntimeAuthSchemaContractError(\"Auth schema path must stay inside the admitted project root.\");\n    }\n    if (existsSync(resolved)) {\n        let realProjectRoot;\n        let realSchemaPath;\n        try {\n            realProjectRoot = realpathSync(projectRoot);\n            realSchemaPath = realpathSync(resolved);\n        }\n        catch {\n            throw new RuntimeAuthSchemaContractError(\"Auth schema path changed while validating the admitted project root.\");\n        }\n        if (!isWithinRoot(realProjectRoot, realSchemaPath)) {\n            throw new RuntimeAuthSchemaContractError(\"Auth schema symlink must stay inside the admitted project root.\");\n        }\n    }\n    return { path: resolved, label: safeSchemaLabel(projectRoot, resolved) };\n}\nfunction dedupeEntries(entries) {\n    const seen = new Set();\n    return entries.filter((entry) => {\n        let identity = entry.path;\n        if (existsSync(entry.path)) {\n            try {\n                identity = realpathSync(entry.path);\n            }\n            catch {\n                throw new RuntimeAuthSchemaContractError(\"Auth schema path changed while deduplicating admitted entries.\");\n            }\n        }\n        if (seen.has(identity))\n            return false;\n        seen.add(identity);\n        return true;\n    });\n}\nfunction requireSingleEntry(kind, entries) {\n    if (entries.length !== 1) {\n        throw new RuntimeAuthSchemaContractError(`Expected exactly one ${kind} Auth schema entry, received ${entries.length}.`);\n    }\n    return entries[0];\n}\nexport function resolveRuntimeAuthSchemaContract(params) {\n    if (params.isPlatform)\n        return { mode: \"builtin\", reason: \"platform_runtime\" };\n    const functionsPath = resolve(params.functionsPath);\n    const projectRoot = resolve(functionsPath, \"..\");\n    const configuredProjectEntries = params.configuredSchemaFiles\n        .filter((schemaFile) => PROJECT_AUTH_SCHEMA_FILENAMES.has(basename(schemaFile)))\n        .map((schemaFile) => assertConfinedSchemaEntry(projectRoot, schemaFile));\n    const implicitProjectEntries = [\n        resolve(functionsPath, \"schema-auth.ts\"),\n        resolve(functionsPath, \"schema-auth.js\"),\n    ]\n        .filter((schemaFile) => existsSync(schemaFile))\n        .map((schemaFile) => assertConfinedSchemaEntry(projectRoot, schemaFile));\n    const projectEntries = dedupeEntries([...configuredProjectEntries, ...implicitProjectEntries]);\n    const configuredLegacyEntries = params.configuredSchemaFiles\n        .filter((schemaFile) => LEGACY_AUTH_SCHEMA_FILENAMES.has(basename(schemaFile)))\n        .map((schemaFile) => assertConfinedSchemaEntry(projectRoot, schemaFile));\n    const implicitLegacyEntries = resolveImplicitLegacyAuthSchemaFiles(functionsPath).map((schemaFile) => assertConfinedSchemaEntry(projectRoot, schemaFile));\n    const legacyEntries = dedupeEntries([...configuredLegacyEntries, ...implicitLegacyEntries]);\n    if (projectEntries.length > 0 && legacyEntries.length > 0) {\n        throw new RuntimeAuthSchemaContractError(\"Conflicting project and legacy Auth schema entries are not allowed.\");\n    }\n    if (projectEntries.length > 0) {\n        return {\n            mode: \"project\",\n            reason: \"canonical_schema_auth\",\n            entry: requireSingleEntry(\"project\", projectEntries),\n        };\n    }\n    if (legacyEntries.length > 0) {\n        return {\n            mode: \"legacy\",\n            reason: \"legacy_auth_schema\",\n            entry: requireSingleEntry(\"legacy\", legacyEntries),\n        };\n    }\n    return { mode: \"builtin\", reason: \"no_project_auth_schema\" };\n}\nasync function importAndValidateAuthSchema(contract) {\n    if (!existsSync(contract.entry.path)) {\n        throw new RuntimeAuthSchemaContractError(`${contract.mode} Auth schema is missing (${contract.entry.label}).`);\n    }\n    let schemaModule;\n    try {\n        schemaModule = (await import(pathToFileURL(contract.entry.path).href));\n    }\n    catch {\n        throw new RuntimeAuthSchemaContractError(`${contract.mode} Auth schema could not be imported (${contract.entry.label}).`);\n    }\n    const validation = validateBetterAuthSchemaExports(schemaModule);\n    if (!validation.ok) {\n        const details = [\n            validation.missingExports.length > 0\n                ? `is missing required exports: ${validation.missingExports.join(\", \")}`\n                : null,\n            validation.invalidExports.length > 0\n                ? `has invalid required exports: ${validation.invalidExports.join(\", \")}`\n                : null,\n        ]\n            .filter((detail) => detail !== null)\n            .join(\"; \");\n        throw new RuntimeAuthSchemaContractError(`${contract.mode} Auth schema ${details}.`);\n    }\n    return schemaModule;\n}\nexport async function loadRuntimeAuthAdapterSchema(contract) {\n    if (contract.mode === \"builtin\")\n        return undefined;\n    const schemaModule = await importAndValidateAuthSchema(contract);\n    if (contract.mode === \"legacy\") {\n        console.warn(`[auth] Loaded bounded legacy Better Auth schema (${contract.entry.label})`);\n    }\n    else {\n        console.log(`[auth] Loaded project Better Auth schema (${contract.entry.label}) \u2713`);\n    }\n    return schemaModule;\n}\n", "import { existsSync, readFileSync } from \"fs\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nexport function readShutdownReasonFromMarker(markerPath = process.env.GENCOW_SHUTDOWN_MARKER_PATH) {\n    if (!markerPath || !existsSync(markerPath))\n        return null;\n    try {\n        const raw = readFileSync(markerPath, \"utf-8\");\n        const parsed = JSON.parse(raw);\n        if (!parsed || typeof parsed !== \"object\")\n            return null;\n        return parsed;\n    }\n    catch {\n        return null;\n    }\n}\nexport function shouldFailFastOnBootError(params) {\n    return params.isBaas || params.isPlatform;\n}\nexport function buildFallbackErrorBody(error) {\n    const errorMsg = error instanceof Error ? error.message : String(error);\n    const errorStack = error instanceof Error ? error.stack : undefined;\n    return {\n        status: \"error\",\n        error: errorMsg,\n        hint: \"Fix the error in your code. The server will auto-restart when you save.\",\n        stack: errorStack,\n    };\n}\nexport function formatBootFailureBanner(errorMessage, port) {\n    const RED = \"\\x1b[31m\";\n    const BOLD = \"\\x1b[1m\";\n    const RESET = \"\\x1b[0m\";\n    const YELLOW = \"\\x1b[33m\";\n    const width = 58;\n    const pad = (value) => `  ${value.padEnd(width)}`;\n    const line = \"\u2550\".repeat(width + 2);\n    return `\n${RED}\u2554${line}\u2557${RESET}\n${RED}\u2551${pad(`${BOLD}\u274C Server Boot Failed${RESET}${RED}`)}\u2551${RESET}\n${RED}\u2551${pad(\"\")}\u2551${RESET}\n${RED}\u2551${pad(errorMessage.slice(0, width))}\u2551${RESET}${errorMessage.length > width\n        ? `\n${RED}\u2551${pad(errorMessage.slice(width, width * 2))}\u2551${RESET}`\n        : \"\"}\n${RED}\u2551${pad(\"\")}\u2551${RESET}\n${YELLOW}\u2551${pad(\"\uD83D\uDCA1 Fix the error and save \u2014 server will auto-restart\")}\u2551${RESET}\n${RED}\u2551${pad(`   Listening on :${port} (error mode)`)}\u2551${RESET}\n${RED}\u255A${line}\u255D${RESET}\n`;\n}\nexport function startFallbackServer(params) {\n    const { bootError, isBaas, isPlatform } = params;\n    if (isBaas) {\n        console.error(\"[FATAL]\", bootError);\n        process.exit(1);\n    }\n    if (isPlatform) {\n        console.error(\"[FATAL] Platform boot failed \u2014 exiting for systemd restart\", bootError);\n        process.exit(1);\n    }\n    const port = params.port ?? Number(process.env.PORT || 5456);\n    const errorBody = buildFallbackErrorBody(bootError);\n    console.error(formatBootFailureBanner(errorBody.error, port));\n    const fallbackApp = new Hono();\n    fallbackApp.use(\"*\", cors({\n        origin: (origin) => {\n            if (!origin || origin.startsWith(\"http://localhost\"))\n                return origin;\n            return \"\";\n        },\n        credentials: true,\n    }));\n    fallbackApp.get(\"/_admin/status\", (c) => c.json({\n        ...errorBody,\n        bootError: true,\n    }));\n    fallbackApp.get(\"/\", (c) => c.json(errorBody, 503));\n    fallbackApp.all(\"*\", (c) => c.json(errorBody, 503));\n    try {\n        Bun.serve({\n            port,\n            fetch: fallbackApp.fetch,\n        });\n        console.log(`[gencow] Fallback server listening on :${port} \u2014 waiting for file changes...`);\n    }\n    catch (serveError) {\n        console.error(\"[gencow] Fallback server failed to start:\", serveError);\n    }\n}\n", "// src/middleware/cors/index.ts\nvar cors = (options) => {\n  const opts = {\n    origin: \"*\",\n    allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"],\n    allowHeaders: [],\n    exposeHeaders: [],\n    ...options\n  };\n  const findAllowOrigin = ((optsOrigin) => {\n    if (typeof optsOrigin === \"string\") {\n      if (optsOrigin === \"*\") {\n        if (opts.credentials) {\n          return (origin) => origin || null;\n        }\n        return () => optsOrigin;\n      } else {\n        return (origin) => optsOrigin === origin ? origin : null;\n      }\n    } else if (typeof optsOrigin === \"function\") {\n      return optsOrigin;\n    } else {\n      return (origin) => optsOrigin.includes(origin) ? origin : null;\n    }\n  })(opts.origin);\n  const findAllowMethods = ((optsAllowMethods) => {\n    if (typeof optsAllowMethods === \"function\") {\n      return optsAllowMethods;\n    } else if (Array.isArray(optsAllowMethods)) {\n      return () => optsAllowMethods;\n    } else {\n      return () => [];\n    }\n  })(opts.allowMethods);\n  return async function cors2(c, next) {\n    function set(key, value) {\n      c.res.headers.set(key, value);\n    }\n    const allowOrigin = await findAllowOrigin(c.req.header(\"origin\") || \"\", c);\n    if (allowOrigin) {\n      set(\"Access-Control-Allow-Origin\", allowOrigin);\n    }\n    if (opts.credentials) {\n      set(\"Access-Control-Allow-Credentials\", \"true\");\n    }\n    if (opts.exposeHeaders?.length) {\n      set(\"Access-Control-Expose-Headers\", opts.exposeHeaders.join(\",\"));\n    }\n    if (c.req.method === \"OPTIONS\") {\n      if (opts.origin !== \"*\" || opts.credentials) {\n        set(\"Vary\", \"Origin\");\n      }\n      if (opts.maxAge != null) {\n        set(\"Access-Control-Max-Age\", opts.maxAge.toString());\n      }\n      const allowMethods = await findAllowMethods(c.req.header(\"origin\") || \"\", c);\n      if (allowMethods.length) {\n        set(\"Access-Control-Allow-Methods\", allowMethods.join(\",\"));\n      }\n      let headers = opts.allowHeaders;\n      if (!headers?.length) {\n        const requestHeaders = c.req.header(\"Access-Control-Request-Headers\");\n        if (requestHeaders) {\n          headers = requestHeaders.split(/\\s*,\\s*/);\n        }\n      }\n      if (headers?.length) {\n        set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n        c.res.headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n      }\n      c.res.headers.delete(\"Content-Length\");\n      c.res.headers.delete(\"Content-Type\");\n      return new Response(null, {\n        headers: c.res.headers,\n        status: 204,\n        statusText: \"No Content\"\n      });\n    }\n    await next();\n    if (opts.origin !== \"*\" || opts.credentials) {\n      c.header(\"Vary\", \"Origin\", { append: true });\n    }\n  };\n};\nexport {\n  cors\n};\n", "const loadSchemaBootstrap = () => import(\"./server-platform-db-bootstrap.js\");\nexport async function bootstrapRuntimeSystemSchemas(params) {\n    const logger = params.logger ?? console;\n    if (params.isBaas) {\n        logger.log(\"[workflow] system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        logger.log(\"[auth] OAuth exchange system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        logger.log(\"[rag] system table bootstrap skipped (BaaS runtime; provisioner-managed)\");\n        return;\n    }\n    const schemaBootstrap = await (params.loadSchemaBootstrap ?? loadSchemaBootstrap)();\n    await schemaBootstrap.ensureWorkflowSystemSchema({\n        rawSql: params.rawSql,\n        isBaas: false,\n        logger,\n    });\n    await schemaBootstrap.ensureOAuthExchangeSystemSchema({\n        rawSql: params.rawSql,\n        isBaas: false,\n        logger,\n    });\n    await schemaBootstrap.ensureRagSystemSchema({\n        rawSql: params.rawSql,\n        isBaas: false,\n        logger,\n    });\n    await schemaBootstrap.ensurePlatformSchemaUpgrade({\n        rawSql: params.rawSql,\n        isPlatform: params.isPlatform,\n        logger,\n    });\n}\n", "import { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { serveStatic } from \"hono/bun\";\nimport { GencowValidationError, getQueryDef, getRegisteredHttpActions, getRegisteredMutations, getRegisteredQueries, getRegisteredWorkflows, getWorkflowResumeActionName, } from \"@gencow/core\";\nimport { storageRoutes, storageUploadRoutes } from \"./storage.js\";\nimport { collectAdminFunctionDetails } from \"./admin-function-details.js\";\nimport { createScheduler } from \"./scheduler.js\";\nimport { collectProcedureRouteMaps, mergeProcedureRouteMaps } from \"./procedure-route-maps.js\";\nimport { collectRuntimeOperationInventory } from \"./runtime-operation-inventory.js\";\nimport { buildActionTokenMap } from \"./cron-action-tokens.js\";\nimport { collectCronSchedules, hasDefineApiCrons } from \"./cron-schedule-collect.js\";\nimport { collectHttpRoutesFromApi } from \"./http-route-collect.js\";\nimport { collectOwnerRlsTables } from \"./crud-route-maps.js\";\nimport { warnIfPlaceholderAiKey } from \"./server-ai-runtime.js\";\nimport { registerInternalCronRoute } from \"./server-internal-cron-route.js\";\nimport { registerDeclarativeCronJobs } from \"./server-declarative-crons.js\";\nimport { registerHttpActions } from \"./server-http-actions.js\";\nimport { logFunctionSecuritySummary, logOwnerRlsSummary, logRegisteredRpcEndpoints, registerAdminSurfaceRoutes, resolveAdminSurfaceAccess, resolveStorageTierConfig, summarizeFunctionSecurity, } from \"./server-api-surface.js\";\nimport { createShutdownHandler, registerShutdownSignals, startUsageMeteringFlush, } from \"./server-process-runtime.js\";\nimport { createRequestContextBuilder } from \"./server-request-context.js\";\nimport { registerRealtimeChannelRoute } from \"./server-realtime-channel-route.js\";\nimport { registerRealtimeOutboxDiagnosticsRoute } from \"./server-realtime-outbox-diagnostics-route.js\";\nimport { registerRealtimeQueryRoute } from \"./server-realtime-query-route.js\";\nimport { registerRealtimeTicketRoute } from \"./server-realtime-ticket-route.js\";\nimport { registerRagIngestRuntime } from \"./rag-ingest-runtime.js\";\nimport { collectBuiltinProcedureMaps } from \"./builtins/index.js\";\nimport { isCloudFeatureEnabled } from \"./cloud-features.js\";\nimport { buildApiRouter } from \"./server-rpc-routes.js\";\nimport { registerSchedulerMutationActions, registerWorkflowResumeActions, } from \"./server-scheduler-bootstrap.js\";\nimport { loadWorkflowV2CapacityPolicyFromEnv } from \"./workflow-kernel-v2-capacity.js\";\nimport { resolveWorkflowV2ReconcilerIntervalMs, startWorkflowV2Reconciler, } from \"./workflow-kernel-v2-reconciler.js\";\nimport { assertBaasPortEnv, buildRootStatusPayload, buildServerStartupBanner, createDashboardWebSocketHandlers, createReadinessHandler, ensureInternalUrl, loadCloudDashboardState, registerCloudDashboardSpa, registerEmbeddedDashboardRoutes, } from \"./server-shell-runtime.js\";\nimport { resolveRuntimeSearchRoot } from \"./server-bootstrap.js\";\nimport { subscribeToLogs, unsubscribeFromLogs } from \"./admin\";\nimport { createHttpGatewayFanout } from \"./realtime/http-gateway-fanout.js\";\nimport { createLocalRealtimeFanout } from \"./realtime/local-fanout.js\";\nimport { createRealtimeOutboxFanout, createRealtimeOutboxWorker, resolveRealtimeOutboxPollIntervalMs, startRealtimeOutboxWakeBusListener, } from \"./realtime/realtime-outbox.js\";\nimport { createPostgresWakeSignalRuntime } from \"./wake-signal/postgres-wake-signal-runtime.js\";\nimport { GENCOW_APP_WAKE_CHANNEL } from \"./wake-signal/wake-signal-types.js\";\nimport { injectPlatformAnalyticsScript, registerPlatformAnalyticsRoutes, } from \"./server-platform-analytics-routes.js\";\nimport { resolveAdminDataRawSql, shouldUsePlatformSystemDbForHttpActionPath, } from \"./server-platform-db-routing.js\";\nimport { createDeprecatedRuntimeUsageReader } from \"./server-deprecated-runtime-usage.js\";\nimport { buildBunFetchEnv, collectTransitionCronProcedureNames, shouldAutoCreateScheduler, } from \"./server-main-runtime-helpers.js\";\nexport { buildBunFetchEnv, collectTransitionCronProcedureNames, shouldAutoCreateScheduler, } from \"./server-main-runtime-helpers.js\";\nfunction isLocalRealtimeRegistry(value) {\n    return !!value && typeof value === \"object\" && \"handleWsMessage\" in value;\n}\nfunction readDbHandleDiagnostics(db) {\n    const client = db?.session?.client;\n    if (!client || typeof client.getDiagnostics !== \"function\")\n        return undefined;\n    const diagnostics = client.getDiagnostics();\n    return diagnostics && typeof diagnostics === \"object\"\n        ? diagnostics\n        : undefined;\n}\nfunction readRuntimeDatabaseDiagnostics(params) {\n    const tenant = readDbHandleDiagnostics(params.db);\n    const system = params.systemDb && params.systemDb !== params.db ? readDbHandleDiagnostics(params.systemDb) : undefined;\n    if (!tenant && !system)\n        return undefined;\n    return {\n        ...(tenant ? { tenant } : {}),\n        ...(system ? { system } : {}),\n    };\n}\nasync function ensureScheduler(params) {\n    let scheduler = params.scheduler;\n    scheduler?.start?.();\n    if (scheduler)\n        return scheduler;\n    const cronsPath = resolve(params.functionsPath, \"crons.ts\");\n    const cronsPathJs = resolve(params.functionsPath, \"crons.js\");\n    const hasCrons = existsSync(cronsPath) || existsSync(cronsPathJs);\n    const hasWorkflows = getRegisteredWorkflows().length > 0;\n    if (!shouldAutoCreateScheduler({\n        isBaas: params.isBaas,\n        hasCrons,\n        hasDefineApiCrons: params.hasDefineApiCrons,\n        hasWorkflows,\n    })) {\n        return scheduler;\n    }\n    if (params.isBaas) {\n        scheduler = createScheduler({\n            persistFailureMode: \"fail-closed\",\n            persistJob: async (job) => {\n                const res = await params.fetchPlatformInternal(\"/internal/scheduler/persist\", {\n                    method: \"POST\",\n                    headers: {\n                        \"Content-Type\": \"application/json\",\n                        \"X-Internal-Token\": params.internalToken,\n                    },\n                    body: JSON.stringify({\n                        appName: params.appName,\n                        id: job.id,\n                        action: job.action,\n                        args: job.args,\n                        runAt: job.runAt.toISOString(),\n                        onErrorAction: job.onErrorAction ?? null,\n                        dedupeKey: job.dedupeKey ?? null,\n                    }),\n                }, \"scheduler-persist\");\n                if (!res.ok) {\n                    const errBody = await res.text().catch(() => \"\");\n                    throw new Error(`[scheduler] persist failed: ${res.status} ${errBody}`);\n                }\n            },\n            removeJob: async (jobId) => {\n                const res = await params.fetchPlatformInternal(\"/internal/scheduler/cancel\", {\n                    method: \"POST\",\n                    headers: {\n                        \"Content-Type\": \"application/json\",\n                        \"X-Internal-Token\": params.internalToken,\n                    },\n                    body: JSON.stringify({ appName: params.appName, id: jobId }),\n                }, \"scheduler-cancel\");\n                if (!res.ok)\n                    return false;\n                const data = (await res.json());\n                return !!data.deleted;\n            },\n        });\n        params.logger.log(\"[gencow] Durable scheduler created (Platform DB-backed, sleep-safe)\");\n        return scheduler;\n    }\n    scheduler = createScheduler();\n    params.logger.log(\"[gencow] Auto-created scheduler for defineApi.crons/crons.ts/workflow() (in-memory mode)\");\n    return scheduler;\n}\nexport async function bootstrapServerMainRuntime(params) {\n    const logger = params.logger ?? console;\n    const stopRealtimeTiming = params.startupTiming?.start(\"realtime_runtime\");\n    const executeWithRuntimeDiagnostics = (fn, type, functionName, timeouts, restartRuntime) => {\n        const baseDiagnostics = restartRuntime?.diagnostics;\n        return params.executeWithTimeout(fn, type, functionName, timeouts, {\n            ...restartRuntime,\n            diagnostics: () => {\n                const base = baseDiagnostics?.() ?? {};\n                const dbDiagnostics = readRuntimeDatabaseDiagnostics({\n                    db: params.db,\n                    systemDb: params.systemDb,\n                });\n                return dbDiagnostics ? { ...base, db: dbDiagnostics } : base;\n            },\n        });\n    };\n    const httpGatewayFanout = createHttpGatewayFanout({\n        notifyGateway: (event) => params.notifyGateway(event),\n        notifyGatewayAsync: async (event) => {\n            const res = await params.fetchPlatformInternal(\"/internal/realtime-notify\", {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\",\n                    \"X-Internal-Token\": params.internalToken,\n                },\n                body: JSON.stringify({ appName: params.appName, ...event }),\n            }, \"realtime-notify\");\n            if (!res.ok) {\n                const body = await res.text().catch(() => \"\");\n                throw new Error(`Gateway notify failed: ${res.status} ${body.slice(0, 160)}`);\n            }\n        },\n    });\n    const wakeSignalRuntime = params.isBaas\n        ? await createPostgresWakeSignalRuntime({\n            rawSql: params.rawSql,\n            env: params.wakeSignalEnv,\n            logger,\n            defaultChannel: GENCOW_APP_WAKE_CHANNEL,\n        }).catch((error) => {\n            const message = error instanceof Error ? error.message : String(error);\n            logger.warn(`[wake-signal] App realtime listener runtime disabled: ${message.slice(0, 160)}`);\n            return null;\n        })\n        : null;\n    const realtimeOutboxWorker = params.isBaas\n        ? createRealtimeOutboxWorker({\n            rawSql: params.rawSql,\n            fanout: httpGatewayFanout,\n            intervalMs: resolveRealtimeOutboxPollIntervalMs(params.realtimeOutboxEnv ?? process.env),\n            logger,\n        })\n        : null;\n    const realtimeOutboxWakeUnsubscribe = params.isBaas && wakeSignalRuntime && realtimeOutboxWorker\n        ? await startRealtimeOutboxWakeBusListener({\n            bus: wakeSignalRuntime.bus,\n            appName: params.appName,\n            wakeWorker: () => realtimeOutboxWorker.wake(),\n            logger,\n        }).catch((error) => {\n            const message = error instanceof Error ? error.message : String(error);\n            logger.warn(`[realtime-outbox] wake listener disabled: ${message.slice(0, 160)}`);\n            return null;\n        })\n        : null;\n    const realtimeFanout = params.isBaas\n        ? createRealtimeOutboxFanout({\n            rawSql: params.rawSql,\n            appName: params.appName,\n            inner: httpGatewayFanout,\n            logger,\n            wakeWorker: () => realtimeOutboxWorker?.wake() ?? Promise.resolve(),\n            postgresWakeSignal: wakeSignalRuntime ? { channel: GENCOW_APP_WAKE_CHANNEL } : undefined,\n        })\n        : createLocalRealtimeFanout({\n            appName: params.appName,\n            channelTokenSecret: params.internalToken,\n            generatedCrudRealtimeEmitMode: params.generatedCrudRealtimeEmitMode,\n        });\n    if (isCloudFeatureEnabled(params.projectConfig, \"rag\")) {\n        registerRagIngestRuntime();\n    }\n    params.appModule.setDb?.(params.db);\n    const appHasDefineApiCrons = hasDefineApiCrons(params.appModule);\n    stopRealtimeTiming?.();\n    const stopSchedulerTiming = params.startupTiming?.start(\"scheduler\");\n    const scheduler = await ensureScheduler({\n        scheduler: params.appModule.scheduler,\n        isBaas: params.isBaas,\n        appName: params.appName,\n        internalToken: params.internalToken,\n        functionsPath: params.functionsPath,\n        hasDefineApiCrons: appHasDefineApiCrons,\n        fetchPlatformInternal: params.fetchPlatformInternal,\n        logger,\n    });\n    stopSchedulerTiming?.();\n    const stopRouteTiming = params.startupTiming?.start(\"route_registration\");\n    const { queryProcedureMap: appQueryProcedureMap, mutationProcedureMap: appMutationProcedureMap, internalProcedureMap, } = collectProcedureRouteMaps(params.appModule);\n    const { queryProcedureMap, mutationProcedureMap } = mergeProcedureRouteMaps({\n        queryProcedureMap: appQueryProcedureMap,\n        mutationProcedureMap: appMutationProcedureMap,\n    }, collectBuiltinProcedureMaps(params.projectConfig), { logger });\n    const cronSchedules = collectCronSchedules(params.appModule);\n    const unresolvedCronProcedureNames = collectTransitionCronProcedureNames(cronSchedules, internalProcedureMap);\n    if (unresolvedCronProcedureNames.length > 0) {\n        logger.warn(`[crons] ${unresolvedCronProcedureNames.length} schedule(s) use transition procedure lookup instead of procedure.internal: ${unresolvedCronProcedureNames.join(\", \")}`);\n    }\n    const deployId = process.env.GENCOW_DEPLOY_ID?.trim() || \"local-dev\";\n    const actionTokenMap = buildActionTokenMap({\n        cronSchedules,\n        internalProcedureMap,\n        deployId,\n        allowTransitionProcedureNames: true,\n    });\n    const buildCtx = createRequestContextBuilder({\n        db: params.db,\n        systemDb: params.systemDb,\n        rawSql: params.rawSql,\n        analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n        storage: params.storage,\n        scheduler,\n        isBaas: params.isBaas,\n        isPlatform: params.isPlatform,\n        appName: params.appName,\n        internalToken: params.internalToken,\n        authConfig: params.authConfig,\n        realtimeFanout,\n        deferRealtimeFanout: params.isBaas,\n        generatedCrudRealtimeEmitMode: params.generatedCrudRealtimeEmitMode ?? \"dual\",\n        procedureQueryMap: queryProcedureMap,\n    });\n    registerRealtimeTicketRoute({\n        app: params.app,\n        appName: params.appName,\n        internalToken: params.internalToken,\n        buildCtx,\n    });\n    registerRealtimeChannelRoute({\n        app: params.app,\n        appName: params.appName,\n        internalToken: params.internalToken,\n        buildCtx,\n    });\n    registerRealtimeQueryRoute({\n        app: params.app,\n        appName: params.appName,\n        internalToken: params.internalToken,\n        buildCtx,\n    });\n    const mutations = getRegisteredMutations();\n    const mutationMap = new Map(mutations.map((mutation) => [mutation.name, mutation]));\n    if (scheduler) {\n        registerSchedulerMutationActions({\n            scheduler,\n            mutationMap,\n            internalProcedureMap,\n            mutationProcedureMap,\n            actionTokenMap,\n            buildCtx: () => buildCtx({ get: () => null }),\n            parseArgs: params.parseArgs,\n            executeWithTimeout: executeWithRuntimeDiagnostics,\n        });\n    }\n    const workflows = getRegisteredWorkflows();\n    if (scheduler && workflows.length > 0) {\n        const workflowCapacityPolicy = loadWorkflowV2CapacityPolicyFromEnv(process.env, {\n            useDefaults: params.isBaas,\n        });\n        await registerWorkflowResumeActions({\n            scheduler,\n            workflows,\n            db: params.db,\n            buildCtx: () => buildCtx({ get: () => null }),\n            executeWithTimeout: executeWithRuntimeDiagnostics,\n            isBaas: params.isBaas,\n            workflowCapacityPolicy,\n        });\n        startWorkflowV2Reconciler({\n            db: params.db,\n            workflows,\n            scheduler,\n            getWorkflowResumeActionName,\n            logger,\n            intervalMs: resolveWorkflowV2ReconcilerIntervalMs(params.workflowReconcilerEnv ?? process.env),\n            wakeSignalBus: wakeSignalRuntime?.bus,\n            wakeSignalKinds: [\"workflow\", \"rag_ingest\"],\n        });\n    }\n    if (scheduler) {\n        await registerDeclarativeCronJobs({\n            scheduler,\n            functionsPath: params.functionsPath,\n            appModule: params.appModule,\n            mutationMap,\n            internalProcedureMap,\n            mutationProcedureMap,\n            buildCtx: () => buildCtx({ get: () => null }),\n            parseArgs: params.parseArgs,\n            executeWithTimeout: executeWithRuntimeDiagnostics,\n            isBaas: params.isBaas,\n        });\n    }\n    const apiRouter = buildApiRouter({\n        storageRouteHandler: storageRoutes(params.storage, params.rawSql, params.storageDir, resolveStorageTierConfig(process.env.__GENCOW_IMAGE_TIER_CONFIG), params.isBaas\n            ? {\n                onImageTransform: (metric) => {\n                    params.runtimeBuffer.add(\"image_transforms\", metric.transformCount);\n                    params.runtimeBuffer.add(\"image_source_bytes\", metric.sourceBytes);\n                    params.runtimeBuffer.add(\"image_output_bytes\", metric.outputBytes);\n                },\n            }\n            : undefined, {\n            appName: params.appName,\n            readGrantSecret: params.internalToken,\n            requireReadGrant: process.env.GENCOW_STORAGE_REQUIRE_READ_GRANT === \"1\",\n        }),\n        storageUploadRouteHandler: storageUploadRoutes(params.storage),\n        getQueryDef,\n        mutationMap,\n        queryProcedureMap,\n        mutationProcedureMap,\n        buildCtx,\n        executeWithTimeout: executeWithRuntimeDiagnostics,\n        parseArgs: params.parseArgs,\n        validationErrorCtor: GencowValidationError,\n        isBaas: params.isBaas,\n        logger,\n    });\n    const queryNames = getRegisteredQueries();\n    const getOperationInventory = () => collectRuntimeOperationInventory({\n        procedureMaps: { queryProcedureMap, mutationProcedureMap },\n    });\n    const getFunctionDetails = () => collectAdminFunctionDetails({\n        procedureMaps: { queryProcedureMap, mutationProcedureMap },\n    });\n    const operationInventory = getOperationInventory();\n    const securitySummary = summarizeFunctionSecurity({\n        queryNames,\n        getQueryDef,\n        mutations,\n        procedureQueries: operationInventory.procedureQueries,\n        procedureMutations: operationInventory.procedureMutations,\n    });\n    logRegisteredRpcEndpoints({\n        queryNames,\n        mutationNames: securitySummary.mutationNames,\n        procedureQueryNames: [...queryProcedureMap.keys()],\n        procedureMutationNames: [...mutationProcedureMap.keys()],\n        logger,\n    });\n    logFunctionSecuritySummary({\n        summary: securitySummary,\n        logger,\n    });\n    logOwnerRlsSummary({\n        rlsTables: collectOwnerRlsTables(params.appModule),\n        logger,\n    });\n    warnIfPlaceholderAiKey(process.env, logger);\n    params.app.route(\"/api\", apiRouter);\n    if (params.isBaas) {\n        registerInternalCronRoute({\n            app: params.app,\n            mutationMap,\n            internalProcedureMap,\n            mutationProcedureMap,\n            actionTokenMap,\n            scheduler: scheduler ?? undefined,\n            buildCtx: () => buildCtx({ get: () => null }),\n            parseArgs: params.parseArgs,\n            executeWithTimeout: executeWithRuntimeDiagnostics,\n            internalToken: params.internalToken,\n            cronToken: process.env.GENCOW_CRON_TOKEN,\n            logger,\n        });\n        registerRealtimeOutboxDiagnosticsRoute({\n            app: params.app,\n            rawSql: params.rawSql,\n            internalToken: params.internalToken,\n            getWakeSignalDiagnostics: wakeSignalRuntime ? () => wakeSignalRuntime.getDiagnostics() : undefined,\n            logger,\n        });\n    }\n    // Phase A: merge defineApi({ httpRoutes }) with legacy globalThis registry.\n    // Dedupe by (method, path); the collector (defineApi.httpRoutes) wins on collision so that\n    // an app-declared httpRoute can override a legacy httpAction registration during migration.\n    // See docs/specs/spec-http-route-api.md \u2014 \"Collision rule\" subsection.\n    const collectedHttpRoutes = collectHttpRoutesFromApi(params.appModule);\n    const collectedKeys = new Set(collectedHttpRoutes.map((a) => `${a.method} ${a.path}`));\n    const legacyHttpRoutes = getRegisteredHttpActions();\n    const droppedLegacy = legacyHttpRoutes.filter((a) => collectedKeys.has(`${a.method} ${a.path}`));\n    const survivingLegacy = legacyHttpRoutes.filter((a) => !collectedKeys.has(`${a.method} ${a.path}`));\n    const getDeprecatedRuntimeUsage = createDeprecatedRuntimeUsageReader({\n        getOperationInventory,\n        legacyHttpActions: legacyHttpRoutes,\n        overriddenHttpRouteKeys: collectedKeys,\n    });\n    for (const dropped of droppedLegacy) {\n        logger.log(`[gencow] \u26A0\uFE0F  httpRoute \"${dropped.method} ${dropped.path}\" overrides a legacy httpAction registration for the same path.`);\n    }\n    const allHttpRoutes = [...collectedHttpRoutes, ...survivingLegacy];\n    registerHttpActions({\n        app: params.app,\n        actions: allHttpRoutes,\n        buildCtx: (context, action) => {\n            const ctx = buildCtx(context);\n            if (params.isPlatform &&\n                params.platformSystemDb &&\n                shouldUsePlatformSystemDbForHttpActionPath(action.path)) {\n                return { ...ctx, db: params.platformSystemDb };\n            }\n            return ctx;\n        },\n        executeWithTimeout: executeWithRuntimeDiagnostics,\n        logger,\n    });\n    registerAdminSurfaceRoutes({\n        app: params.app,\n        db: params.db,\n        rawSql: params.rawSql,\n        adminDataRawSql: resolveAdminDataRawSql({\n            rawSql: params.rawSql,\n            systemRawSql: params.systemRawSql,\n            isBaas: params.isBaas,\n            isPlatform: params.isPlatform,\n            logger,\n        }),\n        driver: params.driver,\n        buildCtx: () => buildCtx({ get: () => null }),\n        storage: params.storage,\n        functionsPath: params.functionsPath,\n        scheduler,\n        settingsRoutes: params.settingsRoutes,\n        access: resolveAdminSurfaceAccess({ isBaas: params.isBaas, isPlatform: params.isPlatform }),\n        dataAccessInternalToken: params.internalToken,\n        requireDataAccessInternalToken: params.isBaas || params.isPlatform,\n        getOperationInventory,\n        getFunctionDetails,\n        getDeprecatedRuntimeUsage,\n    });\n    const runtimeSearchRoot = resolveRuntimeSearchRoot({\n        appDataDir: process.env.GENCOW_APP_DATA_DIR,\n        functionsPath: params.functionsPath,\n    });\n    const dashboardEmbedded = await registerEmbeddedDashboardRoutes({\n        app: params.app,\n        isBaas: params.isBaas,\n        isPlatform: params.isPlatform,\n        envDashboardDir: process.env.GENCOW_DASHBOARD_DIR,\n        importMetaDirname: import.meta.dirname,\n        cwd: runtimeSearchRoot,\n        functionsPath: params.functionsPath,\n        existsSyncImpl: existsSync,\n        serveStaticImpl: serveStatic,\n        logger,\n    });\n    const { dir: cloudDashboardDir, html: cloudDashboardHtml } = loadCloudDashboardState({\n        isPlatform: params.isPlatform,\n        importMetaDirname: import.meta.dirname,\n        cwd: runtimeSearchRoot,\n        existsSyncImpl: existsSync,\n        logger,\n    });\n    if (isLocalRealtimeRegistry(realtimeFanout)) {\n        params.app.get(\"/ws\", params.upgradeWebSocket(() => createDashboardWebSocketHandlers({\n            isBaas: params.isBaas,\n            wsTimers: params.wsTimers,\n            runtimeBuffer: params.runtimeBuffer,\n            registerClient: (ws) => realtimeFanout.registerClient(ws),\n            subscribeToLogs,\n            unsubscribeFromLogs,\n            deregisterClient: (ws) => realtimeFanout.deregisterClient(ws),\n            handleWsMessage: (ws, message) => realtimeFanout.handleWsMessage(ws, message),\n        })));\n    }\n    params.app.get(\"/health/ready\", createReadinessHandler({\n        rawSql: params.rawSql,\n        getRegisteredQueries,\n        getRegisteredMutations,\n        getOperationInventory,\n    }));\n    if (params.isPlatform) {\n        registerPlatformAnalyticsRoutes({\n            app: params.app,\n            functionsPath: params.functionsPath,\n            rawSql: params.rawSql,\n            analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n            logger,\n        });\n        registerCloudDashboardSpa({\n            app: params.app,\n            dir: cloudDashboardDir,\n            html: injectPlatformAnalyticsScript(cloudDashboardHtml),\n        });\n    }\n    else {\n        params.app.get(\"/\", (c) => c.json(buildRootStatusPayload()));\n    }\n    stopRouteTiming?.();\n    const port = Number(process.env.PORT || 5456);\n    ensureInternalUrl(process.env, port);\n    assertBaasPortEnv({ isBaas: params.isBaas, env: process.env, logger });\n    let server;\n    const stopListenTiming = params.startupTiming?.start(\"listen_ready\");\n    server = Bun.serve({\n        port,\n        fetch: (req) => params.app.fetch(req, buildBunFetchEnv(server, req)),\n        websocket: params.websocket,\n    });\n    stopListenTiming?.();\n    logger.log(buildServerStartupBanner({\n        port,\n        driver: params.driver,\n        dashboardEmbedded,\n    }));\n    if (params.isBaas) {\n        logger.log(`[server] lifecycle start (app=${process.env.GENCOW_APP_NAME || \"unknown\"}, startReason=${process.env.GENCOW_START_REASON || \"unknown\"}, restartId=${process.env.GENCOW_RESTART_ID || \"unknown\"})`);\n    }\n    const runtimeMeteringDisabled = process.env.GENCOW_RUNTIME_METERING_DISABLED === \"1\" ||\n        process.env.GENCOW_RUNTIME_METERING_DISABLED === \"true\";\n    if (params.isBaas) {\n        realtimeOutboxWorker?.start();\n    }\n    if (params.isBaas && !runtimeMeteringDisabled) {\n        startUsageMeteringFlush({\n            isBaas: params.isBaas,\n            meteringUrl: process.env.GENCOW_METERING_URL,\n            runtimeBuffer: params.runtimeBuffer,\n            fetchPlatformInternal: params.fetchPlatformInternal,\n            internalToken: params.internalToken,\n            appName: process.env.GENCOW_APP_NAME,\n            appDbId: process.env.GENCOW_APP_DB_ID,\n            logger,\n        });\n    }\n    const shutdown = createShutdownHandler({\n        isPlatform: params.isPlatform,\n        isBaas: params.isBaas,\n        functionsPath: params.functionsPath,\n        env: process.env,\n        runtimeBuffer: params.runtimeBuffer,\n        fetchPlatformInternal: params.fetchPlatformInternal,\n        internalToken: params.internalToken,\n        readShutdownReasonFromMarker: params.readShutdownReasonFromMarker,\n        close: async () => {\n            await realtimeOutboxWakeUnsubscribe?.().catch((error) => {\n                const message = error instanceof Error ? error.message : String(error);\n                logger.warn(`[realtime-outbox] wake listener cleanup failed: ${message.slice(0, 160)}`);\n            });\n            await wakeSignalRuntime?.close().catch((error) => {\n                const message = error instanceof Error ? error.message : String(error);\n                logger.warn(`[wake-signal] App realtime listener close failed: ${message.slice(0, 160)}`);\n            });\n            await params.close();\n        },\n        logger,\n    });\n    registerShutdownSignals({\n        processLike: process,\n        shutdown,\n    });\n    return server;\n}\n", "// src/adapter/bun/serve-static.ts\nimport { stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { serveStatic as baseServeStatic } from \"../../middleware/serve-static/index.js\";\nvar serveStatic = (options) => {\n  return async function serveStatic2(c, next) {\n    const getContent = async (path) => {\n      const file = Bun.file(path);\n      return await file.exists() ? file : null;\n    };\n    const isDir = async (path) => {\n      let isDir2;\n      try {\n        const stats = await stat(path);\n        isDir2 = stats.isDirectory();\n      } catch {\n      }\n      return isDir2;\n    };\n    return baseServeStatic({\n      ...options,\n      getContent,\n      join,\n      isDir\n    })(c, next);\n  };\n};\nexport {\n  serveStatic\n};\n", "// src/utils/compress.ts\nvar COMPRESSIBLE_CONTENT_TYPE_REGEX = /^\\s*(?:text\\/(?!event-stream(?:[;\\s]|$))[^;\\s]+|application\\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|postscript|rtf|tar|toml|vnd\\.dart|vnd\\.ms-fontobject|vnd\\.ms-opentype|wasm|x-httpd-php|x-javascript|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\\/(?:otf|ttf)|image\\/(?:bmp|vnd\\.adobe\\.photoshop|vnd\\.microsoft\\.icon|vnd\\.ms-dds|x-icon|x-ms-bmp)|message\\/rfc822|model\\/gltf-binary|x-shader\\/x-fragment|x-shader\\/x-vertex|[^;\\s]+?\\+(?:json|text|xml|yaml))(?:[;\\s]|$)/i;\nexport {\n  COMPRESSIBLE_CONTENT_TYPE_REGEX\n};\n", "// src/utils/mime.ts\nvar getMimeType = (filename, mimes = baseMimes) => {\n  const regexp = /\\.([a-zA-Z0-9]+?)$/;\n  const match = filename.match(regexp);\n  if (!match) {\n    return;\n  }\n  let mimeType = mimes[match[1].toLowerCase()];\n  if (mimeType && mimeType.startsWith(\"text\")) {\n    mimeType += \"; charset=utf-8\";\n  }\n  return mimeType;\n};\nvar getExtension = (mimeType) => {\n  for (const ext in baseMimes) {\n    if (baseMimes[ext] === mimeType) {\n      return ext;\n    }\n  }\n};\nvar _baseMimes = {\n  aac: \"audio/aac\",\n  avi: \"video/x-msvideo\",\n  avif: \"image/avif\",\n  av1: \"video/av1\",\n  bin: \"application/octet-stream\",\n  bmp: \"image/bmp\",\n  css: \"text/css\",\n  csv: \"text/csv\",\n  eot: \"application/vnd.ms-fontobject\",\n  epub: \"application/epub+zip\",\n  gif: \"image/gif\",\n  gz: \"application/gzip\",\n  htm: \"text/html\",\n  html: \"text/html\",\n  ico: \"image/x-icon\",\n  ics: \"text/calendar\",\n  jpeg: \"image/jpeg\",\n  jpg: \"image/jpeg\",\n  js: \"text/javascript\",\n  json: \"application/json\",\n  jsonld: \"application/ld+json\",\n  map: \"application/json\",\n  mid: \"audio/x-midi\",\n  midi: \"audio/x-midi\",\n  mjs: \"text/javascript\",\n  mp3: \"audio/mpeg\",\n  mp4: \"video/mp4\",\n  mpeg: \"video/mpeg\",\n  oga: \"audio/ogg\",\n  ogv: \"video/ogg\",\n  ogx: \"application/ogg\",\n  opus: \"audio/opus\",\n  otf: \"font/otf\",\n  pdf: \"application/pdf\",\n  png: \"image/png\",\n  rtf: \"application/rtf\",\n  svg: \"image/svg+xml\",\n  tif: \"image/tiff\",\n  tiff: \"image/tiff\",\n  ts: \"video/mp2t\",\n  ttf: \"font/ttf\",\n  txt: \"text/plain\",\n  wasm: \"application/wasm\",\n  webm: \"video/webm\",\n  weba: \"audio/webm\",\n  webmanifest: \"application/manifest+json\",\n  webp: \"image/webp\",\n  woff: \"font/woff\",\n  woff2: \"font/woff2\",\n  xhtml: \"application/xhtml+xml\",\n  xml: \"application/xml\",\n  zip: \"application/zip\",\n  \"3gp\": \"video/3gpp\",\n  \"3g2\": \"video/3gpp2\",\n  gltf: \"model/gltf+json\",\n  glb: \"model/gltf-binary\"\n};\nvar baseMimes = _baseMimes;\nexport {\n  getExtension,\n  getMimeType,\n  baseMimes as mimes\n};\n", "// src/middleware/serve-static/path.ts\nvar defaultJoin = (...paths) => {\n  let result = paths.filter((p) => p !== \"\").join(\"/\");\n  result = result.replace(/(?<=\\/)\\/+/g, \"\");\n  const segments = result.split(\"/\");\n  const resolved = [];\n  for (const segment of segments) {\n    if (segment === \"..\" && resolved.length > 0 && resolved.at(-1) !== \"..\") {\n      resolved.pop();\n    } else if (segment !== \".\") {\n      resolved.push(segment);\n    }\n  }\n  return resolved.join(\"/\") || \".\";\n};\nexport {\n  defaultJoin\n};\n", "// src/middleware/serve-static/index.ts\nimport { COMPRESSIBLE_CONTENT_TYPE_REGEX } from \"../../utils/compress.js\";\nimport { getMimeType } from \"../../utils/mime.js\";\nimport { tryDecodeURI } from \"../../utils/url.js\";\nimport { defaultJoin } from \"./path.js\";\nvar ENCODINGS = {\n  br: \".br\",\n  zstd: \".zst\",\n  gzip: \".gz\"\n};\nvar ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);\nvar DEFAULT_DOCUMENT = \"index.html\";\nvar serveStatic = (options) => {\n  const root = options.root ?? \"./\";\n  const optionPath = options.path;\n  const join = options.join ?? defaultJoin;\n  return async (c, next) => {\n    if (c.finalized) {\n      return next();\n    }\n    let filename;\n    if (options.path) {\n      filename = options.path;\n    } else {\n      try {\n        filename = tryDecodeURI(c.req.path);\n        if (/(?:^|[\\/\\\\])\\.{1,2}(?:$|[\\/\\\\])|[\\/\\\\]{2,}/.test(filename)) {\n          throw new Error();\n        }\n      } catch {\n        await options.onNotFound?.(c.req.path, c);\n        return next();\n      }\n    }\n    let path = join(\n      root,\n      !optionPath && options.rewriteRequestPath ? options.rewriteRequestPath(filename) : filename\n    );\n    if (options.isDir && await options.isDir(path)) {\n      path = join(path, DEFAULT_DOCUMENT);\n    }\n    const getContent = options.getContent;\n    let content = await getContent(path, c);\n    if (content instanceof Response) {\n      return c.newResponse(content.body, content);\n    }\n    if (content) {\n      const mimeType = options.mimes && getMimeType(path, options.mimes) || getMimeType(path);\n      c.header(\"Content-Type\", mimeType || \"application/octet-stream\");\n      if (options.precompressed && (!mimeType || COMPRESSIBLE_CONTENT_TYPE_REGEX.test(mimeType))) {\n        const acceptEncodingSet = new Set(\n          c.req.header(\"Accept-Encoding\")?.split(\",\").map((encoding) => encoding.trim())\n        );\n        for (const encoding of ENCODINGS_ORDERED_KEYS) {\n          if (!acceptEncodingSet.has(encoding)) {\n            continue;\n          }\n          const compressedContent = await getContent(path + ENCODINGS[encoding], c);\n          if (compressedContent) {\n            content = compressedContent;\n            c.header(\"Content-Encoding\", encoding);\n            c.header(\"Vary\", \"Accept-Encoding\", { append: true });\n            break;\n          }\n        }\n      }\n      await options.onFound?.(path, c);\n      return c.body(content);\n    }\n    await options.onNotFound?.(path, c);\n    await next();\n    return;\n  };\n};\nexport {\n  serveStatic\n};\n", "// src/helper/ssg/middleware.ts\nimport { isDynamicRoute } from \"./utils.js\";\nvar SSG_CONTEXT = \"HONO_SSG_CONTEXT\";\nvar X_HONO_DISABLE_SSG_HEADER_KEY = \"x-hono-disable-ssg\";\nvar SSG_DISABLED_RESPONSE = (() => {\n  try {\n    return new Response(\"SSG is disabled\", {\n      status: 404,\n      headers: { [X_HONO_DISABLE_SSG_HEADER_KEY]: \"true\" }\n    });\n  } catch {\n    return null;\n  }\n})();\nvar ssgParams = (params) => async (c, next) => {\n  if (isDynamicRoute(c.req.path)) {\n    ;\n    c.req.raw.ssgParams = Array.isArray(params) ? params : await params(c);\n    return c.notFound();\n  }\n  await next();\n};\nvar isSSGContext = (c) => !!c.env?.[SSG_CONTEXT];\nvar disableSSG = () => async function disableSSG2(c, next) {\n  if (isSSGContext(c)) {\n    c.header(X_HONO_DISABLE_SSG_HEADER_KEY, \"true\");\n    return c.notFound();\n  }\n  await next();\n};\nvar onlySSG = () => async function onlySSG2(c, next) {\n  if (!isSSGContext(c)) {\n    return c.notFound();\n  }\n  await next();\n};\nexport {\n  SSG_CONTEXT,\n  SSG_DISABLED_RESPONSE,\n  X_HONO_DISABLE_SSG_HEADER_KEY,\n  disableSSG,\n  isSSGContext,\n  onlySSG,\n  ssgParams\n};\n", "// src/adapter/bun/ssg.ts\nimport { toSSG as baseToSSG } from \"../../helper/ssg/index.js\";\nvar { write } = Bun;\nvar bunFileSystemModule = {\n  writeFile: async (path, data) => {\n    await write(path, data);\n  },\n  mkdir: async () => {\n  }\n};\nvar toSSG = async (app, options) => {\n  return baseToSSG(app, bunFileSystemModule, options);\n};\nexport {\n  bunFileSystemModule,\n  toSSG\n};\n", "// src/helper/websocket/index.ts\nvar WSContext = class {\n  #init;\n  constructor(init) {\n    this.#init = init;\n    this.raw = init.raw;\n    this.url = init.url ? new URL(init.url) : null;\n    this.protocol = init.protocol ?? null;\n  }\n  send(source, options) {\n    this.#init.send(source, options ?? {});\n  }\n  raw;\n  binaryType = \"arraybuffer\";\n  get readyState() {\n    return this.#init.readyState;\n  }\n  url;\n  protocol;\n  close(code, reason) {\n    this.#init.close(code, reason);\n  }\n};\nvar createWSMessageEvent = (source) => {\n  return new MessageEvent(\"message\", {\n    data: source\n  });\n};\nvar defineWebSocketHelper = (handler) => {\n  return ((...args) => {\n    if (typeof args[0] === \"function\") {\n      const [createEvents, options] = args;\n      return async function upgradeWebSocket(c, next) {\n        const events = await createEvents(c);\n        const result = await handler(c, events, options);\n        if (result) {\n          return result;\n        }\n        await next();\n      };\n    } else {\n      const [c, events, options] = args;\n      return (async () => {\n        const upgraded = await handler(c, events, options);\n        if (!upgraded) {\n          throw new Error(\"Failed to upgrade WebSocket\");\n        }\n        return upgraded;\n      })();\n    }\n  });\n};\nexport {\n  WSContext,\n  createWSMessageEvent,\n  defineWebSocketHelper\n};\n", "// src/adapter/bun/server.ts\nvar getBunServer = (c) => \"server\" in c.env ? c.env.server : c.env;\nexport {\n  getBunServer\n};\n", "// src/adapter/bun/websocket.ts\nimport { createWSMessageEvent, defineWebSocketHelper, WSContext } from \"../../helper/websocket/index.js\";\nimport { getBunServer } from \"./server.js\";\nvar createWSContext = (ws) => {\n  return new WSContext({\n    send: (source, options) => {\n      ws.send(source, options?.compress);\n    },\n    raw: ws,\n    readyState: ws.readyState,\n    url: ws.data.url,\n    protocol: ws.data.protocol,\n    close(code, reason) {\n      ws.close(code, reason);\n    }\n  });\n};\nvar upgradeWebSocket = defineWebSocketHelper((c, events) => {\n  const server = getBunServer(c);\n  if (!server) {\n    throw new TypeError(\"env has to include the 2nd argument of fetch.\");\n  }\n  const upgradeResult = server.upgrade(c.req.raw, {\n    data: {\n      events,\n      url: new URL(c.req.url),\n      protocol: c.req.url\n    }\n  });\n  if (upgradeResult) {\n    return new Response(null);\n  }\n  return;\n});\nvar websocket = {\n  open(ws) {\n    const websocketListeners = ws.data.events;\n    if (websocketListeners.onOpen) {\n      websocketListeners.onOpen(new Event(\"open\"), createWSContext(ws));\n    }\n  },\n  close(ws, code, reason) {\n    const websocketListeners = ws.data.events;\n    if (websocketListeners.onClose) {\n      websocketListeners.onClose(\n        new CloseEvent(\"close\", {\n          code,\n          reason\n        }),\n        createWSContext(ws)\n      );\n    }\n  },\n  message(ws, message) {\n    const websocketListeners = ws.data.events;\n    if (websocketListeners.onMessage) {\n      const normalizedReceiveData = typeof message === \"string\" ? message : message.buffer;\n      websocketListeners.onMessage(createWSMessageEvent(normalizedReceiveData), createWSContext(ws));\n    }\n  }\n};\nvar createBunWebSocket = () => ({\n  upgradeWebSocket,\n  websocket\n});\nexport {\n  createBunWebSocket,\n  createWSContext,\n  upgradeWebSocket,\n  websocket\n};\n", "import * as crypto from \"crypto\";\nimport { createRequire } from \"module\";\nimport { DEFAULT_STORAGE_QUOTA, StorageListUnsupportedError } from \"@gencow/core\";\nimport { assertStorageFileSize, resolveStorageAdapterLimits, } from \"./storage-adapter-limits.js\";\nimport { downloadAzureBlobToBuffer, } from \"./storage-azure-blob-transfer.js\";\nimport { createAzureDirectUploadController } from \"./storage-azure-direct-upload.js\";\nimport { createStorageReadGrant } from \"./storage-read-grant.js\";\nimport { createSystemFilesCatalog } from \"./storage-system-files-catalog.js\";\nimport { createStorageUploadSessionCatalog } from \"./storage-upload-session-catalog.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nfunction createLazyClientProxy(resolveClient) {\n    return new Proxy({}, {\n        get(_target, property) {\n            const client = resolveClient();\n            if (!client)\n                return undefined;\n            const value = Reflect.get(client, property, client);\n            return typeof value === \"function\" ? value.bind(client) : value;\n        },\n    });\n}\nfunction normalizeStoreOptions(input) {\n    if (typeof input === \"string\")\n        return { filename: input, visibility: \"private\" };\n    return {\n        filename: input?.filename,\n        visibility: normalizeStorageVisibility(input?.visibility),\n    };\n}\nfunction normalizePrefix(prefix) {\n    return prefix.trim().replace(/^\\/+|\\/+$/g, \"\");\n}\nfunction blobObjectKey(input) {\n    const prefix = normalizePrefix(input.prefix);\n    const base = `apps/${encodeURIComponent(input.appName)}/objects/${input.storageId}`;\n    return prefix ? `${prefix}/${base}` : base;\n}\nfunction transformPrefix(input) {\n    const prefix = normalizePrefix(input.prefix);\n    const base = `apps/${encodeURIComponent(input.appName)}/transforms/${input.storageId}/`;\n    return prefix ? `${prefix}/${base}` : base;\n}\nfunction sha256(buffer) {\n    return crypto.createHash(\"sha256\").update(buffer).digest(\"hex\");\n}\nfunction encodeMetadata(input) {\n    return {\n        gencowfilename: Buffer.from(input.filename, \"utf-8\").toString(\"base64url\"),\n        gencowtype: input.type,\n        gencowsize: String(input.size),\n        gencowvisibility: normalizeStorageVisibility(input.visibility),\n        gencowsha256: input.contentHash,\n    };\n}\nfunction decodeFilename(value, fallback) {\n    if (!value)\n        return fallback;\n    try {\n        return Buffer.from(value, \"base64url\").toString(\"utf-8\") || fallback;\n    }\n    catch {\n        return fallback;\n    }\n}\nfunction toStorageFile(input) {\n    const metadata = input.metadata ?? {};\n    return {\n        id: input.id,\n        name: decodeFilename(metadata.gencowfilename, input.fallbackName),\n        size: Number(metadata.gencowsize ?? input.fallbackSize ?? 0),\n        type: metadata.gencowtype || input.fallbackType || \"application/octet-stream\",\n        visibility: normalizeStorageVisibility(metadata.gencowvisibility),\n    };\n}\nasync function deleteBlobIfExists(blob) {\n    if (blob.deleteIfExists) {\n        await blob.deleteIfExists();\n        return;\n    }\n    try {\n        await blob.delete?.();\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        if (!message.includes(\"BlobNotFound\"))\n            throw error;\n    }\n}\nasync function recordStored(params) {\n    if (!params.catalog)\n        return;\n    try {\n        await params.catalog.recordStored({\n            ...params.meta,\n            uploadedBy: params.uploadedBy,\n            storageBackend: \"azure-blob\",\n            objectKey: params.objectKey,\n            etag: params.etag,\n            contentHash: params.contentHash,\n        });\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        console.warn(`[storage] DB record failed for ${params.meta.id}: ${msg}`);\n        throw new Error(\"Storage catalog record failed\");\n    }\n}\nfunction resolveAzureClients(options) {\n    if (options.containerClient) {\n        return {\n            containerClient: options.containerClient,\n            ...(options.serviceClient ? { serviceClient: options.serviceClient } : {}),\n        };\n    }\n    if (options.createContainerClient) {\n        return {\n            containerClient: options.createContainerClient(options),\n            ...(options.serviceClient ? { serviceClient: options.serviceClient } : {}),\n        };\n    }\n    const require = createRequire(import.meta.url);\n    const storageBlob = require(\"@azure/storage-blob\");\n    const identity = require(\"@azure/identity\");\n    const auth = options.auth ?? \"managed_identity\";\n    const credential = auth === \"client_secret\"\n        ? new identity.ClientSecretCredential(requireNonEmpty(options.tenantId, \"GENCOW_PLATFORM_STORAGE_AZURE_TENANT_ID\"), requireNonEmpty(options.clientId, \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_ID\"), requireNonEmpty(options.clientSecret, \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_SECRET\"))\n        : new identity.ManagedIdentityCredential(options.clientId);\n    const serviceClient = new storageBlob.BlobServiceClient(options.endpoint.replace(/\\/+$/, \"\"), credential);\n    return {\n        serviceClient,\n        containerClient: serviceClient.getContainerClient(options.containerName),\n    };\n}\nfunction requireNonEmpty(value, key) {\n    if (value?.trim())\n        return value.trim();\n    throw new Error(`${key} is required for Azure Blob client_secret auth`);\n}\nexport function createAzureBlobStorage(options) {\n    if (!options.appName)\n        throw new Error(\"Azure Blob storage requires appName\");\n    if (!options.containerClient && !options.createContainerClient && (options.auth ?? \"managed_identity\") === \"client_secret\") {\n        requireNonEmpty(options.tenantId, \"GENCOW_PLATFORM_STORAGE_AZURE_TENANT_ID\");\n        requireNonEmpty(options.clientId, \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_ID\");\n        requireNonEmpty(options.clientSecret, \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_SECRET\");\n    }\n    let resolvedClients;\n    const getClients = () => (resolvedClients ??= resolveAzureClients(options));\n    const containerClient = createLazyClientProxy(() => getClients().containerClient);\n    const serviceClient = createLazyClientProxy(() => getClients().serviceClient);\n    const catalog = options.rawSql ? createSystemFilesCatalog(options.rawSql) : undefined;\n    const sessions = options.rawSql ? createStorageUploadSessionCatalog(options.rawSql) : undefined;\n    const quota = options.storageQuota ?? DEFAULT_STORAGE_QUOTA;\n    const { maxFileSizeBytes, apiUploadMaxFileSizeBytes } = resolveStorageAdapterLimits(options);\n    const directUploads = createAzureDirectUploadController({\n        appName: options.appName,\n        prefix: options.prefix,\n        directUploadMode: options.directUploadMode,\n        containerClient,\n        serviceClient,\n        catalog,\n        sessions,\n        quotaBytes: quota,\n        maxFileSizeBytes,\n        apiUploadMaxFileSizeBytes,\n    });\n    async function assertCanStore(size) {\n        assertStorageFileSize(size, maxFileSizeBytes);\n        await catalog?.assertCanStore({ size, quotaBytes: quota });\n    }\n    async function storeBufferInternal(input) {\n        await assertCanStore(input.buffer.length);\n        const id = crypto.randomUUID();\n        const objectKey = blobObjectKey({ prefix: options.prefix, appName: options.appName, storageId: id });\n        const contentHash = sha256(input.buffer);\n        const metadata = encodeMetadata({\n            filename: input.filename,\n            type: input.type,\n            size: input.buffer.length,\n            visibility: input.visibility,\n            contentHash,\n        });\n        const blob = containerClient.getBlockBlobClient(objectKey);\n        const upload = await blob.uploadData(input.buffer, {\n            blobHTTPHeaders: { blobContentType: input.type },\n            metadata,\n        });\n        const meta = {\n            id,\n            name: input.filename,\n            size: input.buffer.length,\n            type: input.type,\n            visibility: input.visibility,\n        };\n        try {\n            await recordStored({\n                catalog,\n                meta,\n                uploadedBy: input.uploadedBy,\n                objectKey,\n                etag: upload.etag,\n                contentHash,\n            });\n        }\n        catch (error) {\n            await deleteBlobIfExists(blob).catch(() => { });\n            throw error;\n        }\n        return id;\n    }\n    return {\n        kind: \"azure-blob\",\n        apiUploadMaxFileSizeBytes,\n        storageDirectUploadProtocolVersion: directUploads.protocolVersion,\n        async store(file, filenameOrOptions) {\n            assertStorageFileSize(file.size, maxFileSizeBytes);\n            const storeOptions = normalizeStoreOptions(filenameOrOptions);\n            const idName = crypto.randomUUID();\n            const name = storeOptions.filename || (file instanceof File ? file.name : `${idName}.bin`);\n            const type = file.type || \"application/octet-stream\";\n            return storeBufferInternal({\n                buffer: Buffer.from(await file.arrayBuffer()),\n                filename: name,\n                type,\n                visibility: storeOptions.visibility,\n                uploadedBy: \"api\",\n            });\n        },\n        async storeBuffer(buffer, filename, type = \"application/octet-stream\", opts) {\n            return storeBufferInternal({\n                buffer,\n                filename,\n                type,\n                visibility: normalizeStorageVisibility(opts?.visibility),\n                uploadedBy: \"api\",\n            });\n        },\n        getUrl(storageId) {\n            return `/api/storage/${storageId}`;\n        },\n        getPublicUrl(storageId) {\n            return `/api/storage/${storageId}`;\n        },\n        async createUploadGrant(input) {\n            return directUploads.createUploadGrant(input);\n        },\n        async receiveUpload(uploadId, input) {\n            await directUploads.receiveUpload(uploadId, input);\n        },\n        async finalizeUpload(input) {\n            return directUploads.finalizeUpload(input);\n        },\n        async abortUpload(uploadId) {\n            await directUploads.abortUpload(uploadId);\n        },\n        async reconcileUploads(input) {\n            return directUploads.reconcileUploads(input);\n        },\n        async createBackendReadGrant(storageId, input) {\n            return directUploads.createBackendReadGrant(storageId, input?.ttlSeconds);\n        },\n        async createReadGrant(storageId, input) {\n            if (!options.readGrantSecret)\n                throw new Error(\"Storage read grants are not configured\");\n            const meta = await this.getMeta(storageId);\n            if (!meta)\n                throw new Error(\"Storage object not found\");\n            return createStorageReadGrant({\n                appName: options.appName,\n                storageId,\n                secret: options.readGrantSecret,\n                input,\n                nowMs: options.readGrantNowMs?.(),\n            });\n        },\n        async get(storageId) {\n            const catalogMeta = catalog ? await catalog.getMeta(storageId) : null;\n            if (catalog && !catalogMeta)\n                return null;\n            const objectKey = blobObjectKey({ prefix: options.prefix, appName: options.appName, storageId });\n            const blob = containerClient.getBlobClient?.(objectKey) ?? containerClient.getBlockBlobClient(objectKey);\n            let properties;\n            try {\n                properties = await blob.getProperties();\n            }\n            catch {\n                return null;\n            }\n            const meta = catalogMeta ??\n                toStorageFile({\n                    id: storageId,\n                    fallbackName: storageId,\n                    fallbackSize: properties.contentLength,\n                    fallbackType: properties.contentType,\n                    metadata: properties.metadata,\n                });\n            try {\n                const buffer = await downloadAzureBlobToBuffer(blob);\n                return { ...meta, buffer };\n            }\n            catch {\n                return null;\n            }\n        },\n        async getMeta(storageId) {\n            if (catalog)\n                return catalog.getMeta(storageId);\n            const objectKey = blobObjectKey({ prefix: options.prefix, appName: options.appName, storageId });\n            const blob = containerClient.getBlobClient?.(objectKey) ?? containerClient.getBlockBlobClient(objectKey);\n            try {\n                const properties = await blob.getProperties();\n                return toStorageFile({\n                    id: storageId,\n                    fallbackName: storageId,\n                    fallbackSize: properties.contentLength,\n                    fallbackType: properties.contentType,\n                    metadata: properties.metadata,\n                });\n            }\n            catch {\n                return null;\n            }\n        },\n        async setVisibility(storageId, visibility) {\n            const objectKey = blobObjectKey({ prefix: options.prefix, appName: options.appName, storageId });\n            const blob = containerClient.getBlobClient?.(objectKey) ?? containerClient.getBlockBlobClient(objectKey);\n            const properties = await blob.getProperties();\n            const previousMetadata = properties.metadata ?? {};\n            const nextVisibility = normalizeStorageVisibility(visibility);\n            if (blob.setMetadata) {\n                await blob.setMetadata({ ...previousMetadata, gencowvisibility: nextVisibility });\n            }\n            await catalog?.setVisibility(storageId, nextVisibility).catch(async (error) => {\n                if (blob.setMetadata)\n                    await blob.setMetadata(previousMetadata).catch(() => { });\n                throw error;\n            });\n        },\n        async listMeta(input) {\n            if (!catalog) {\n                throw new StorageListUnsupportedError(\"listMeta is not supported on Azure Blob storage without a SQL catalog.\");\n            }\n            return catalog.listMeta(input);\n        },\n        async getTransform(storageId, cacheKey) {\n            const objectKey = `${transformPrefix({ prefix: options.prefix, appName: options.appName, storageId })}${cacheKey}`;\n            const blob = containerClient.getBlobClient?.(objectKey) ?? containerClient.getBlockBlobClient(objectKey);\n            try {\n                const properties = await blob.getProperties();\n                const buffer = await downloadAzureBlobToBuffer(blob);\n                return {\n                    id: cacheKey,\n                    name: cacheKey,\n                    size: buffer.byteLength,\n                    type: properties.contentType || \"application/octet-stream\",\n                    visibility: \"private\",\n                    buffer,\n                };\n            }\n            catch {\n                return null;\n            }\n        },\n        async storeTransform(storageId, cacheKey, input) {\n            const objectKey = `${transformPrefix({ prefix: options.prefix, appName: options.appName, storageId })}${cacheKey}`;\n            await containerClient.getBlockBlobClient(objectKey).uploadData(input.buffer, {\n                blobHTTPHeaders: { blobContentType: input.type },\n                metadata: {\n                    gencowsourceid: storageId,\n                    gencowcachekey: Buffer.from(cacheKey, \"utf-8\").toString(\"base64url\"),\n                },\n            });\n        },\n        async countTransforms() {\n            if (!containerClient.listBlobsFlat)\n                return 0;\n            const prefix = `${normalizePrefix(options.prefix) ? `${normalizePrefix(options.prefix)}/` : \"\"}apps/${encodeURIComponent(options.appName)}/transforms/`;\n            let count = 0;\n            for await (const item of containerClient.listBlobsFlat({ prefix })) {\n                if (item.name)\n                    count++;\n            }\n            return count;\n        },\n        async delete(storageId) {\n            const objectKey = blobObjectKey({ prefix: options.prefix, appName: options.appName, storageId });\n            await deleteBlobIfExists(containerClient.getBlobClient?.(objectKey) ?? containerClient.getBlockBlobClient(objectKey));\n            if (containerClient.listBlobsFlat) {\n                for await (const item of containerClient.listBlobsFlat({\n                    prefix: transformPrefix({ prefix: options.prefix, appName: options.appName, storageId }),\n                })) {\n                    await deleteBlobIfExists(containerClient.getBlobClient?.(item.name) ?? containerClient.getBlockBlobClient(item.name));\n                }\n            }\n            await catalog?.remove(storageId);\n        },\n    };\n}\n", "import { MAX_FILE_SIZE, formatBytes } from \"@gencow/core\";\nfunction resolveByteLimit(value, fallback) {\n    if (!Number.isFinite(value))\n        return fallback;\n    const normalized = Math.floor(Number(value));\n    return normalized > 0 ? normalized : fallback;\n}\nexport function resolveStorageAdapterLimits(options) {\n    const maxFileSizeBytes = resolveByteLimit(options?.maxFileSizeBytes, MAX_FILE_SIZE);\n    const apiUploadMaxFileSizeBytes = Math.min(resolveByteLimit(options?.apiUploadMaxFileSizeBytes, MAX_FILE_SIZE), maxFileSizeBytes);\n    return { maxFileSizeBytes, apiUploadMaxFileSizeBytes };\n}\nexport function assertStorageFileSize(size, maxFileSizeBytes) {\n    if (size <= maxFileSizeBytes)\n        return;\n    throw new Error(`File too large: ${formatBytes(size)} exceeds limit of ${formatBytes(maxFileSizeBytes)}`);\n}\nexport function assertStorageApiUploadFileSize(size, apiUploadMaxFileSizeBytes) {\n    if (size <= apiUploadMaxFileSizeBytes)\n        return;\n    throw new Error(`API-routed upload too large: ${formatBytes(size)} exceeds limit of ${formatBytes(apiUploadMaxFileSizeBytes)}. Use direct-to-storage upload for larger files.`);\n}\nexport function preflightStorageApiUploadContentLength(contentLengthHeader, apiUploadMaxFileSizeBytes) {\n    if (!apiUploadMaxFileSizeBytes || apiUploadMaxFileSizeBytes <= 0)\n        return { ok: true };\n    const raw = contentLengthHeader?.trim();\n    if (!raw) {\n        return {\n            ok: false,\n            status: 411,\n            error: `Content-Length is required for API-routed uploads. Limit is ${formatBytes(apiUploadMaxFileSizeBytes)}. Use direct-to-storage upload for larger files.`,\n        };\n    }\n    const parsed = Number(raw);\n    if (!Number.isFinite(parsed) || parsed < 0 || Math.floor(parsed) !== parsed) {\n        return { ok: false, status: 400, error: \"Invalid Content-Length\" };\n    }\n    try {\n        assertStorageApiUploadFileSize(parsed, apiUploadMaxFileSizeBytes);\n        return { ok: true };\n    }\n    catch (error) {\n        return {\n            ok: false,\n            status: 413,\n            error: error instanceof Error ? error.message : String(error),\n        };\n    }\n}\n", "import * as crypto from \"crypto\";\nimport { Readable, Transform } from \"stream\";\nexport async function downloadAzureBlobToBuffer(blob) {\n    if (blob.downloadToBuffer)\n        return Buffer.from(await blob.downloadToBuffer());\n    if (!blob.download)\n        throw new Error(\"Azure blob client does not support download\");\n    const downloaded = await blob.download();\n    if (downloaded.blobBody) {\n        return Buffer.from(await (await downloaded.blobBody).arrayBuffer());\n    }\n    if (!downloaded.readableStreamBody)\n        throw new Error(\"Azure blob download returned no body\");\n    const chunks = [];\n    for await (const chunk of Readable.from(downloaded.readableStreamBody)) {\n        chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n    }\n    return Buffer.concat(chunks);\n}\nexport async function streamAzureBlobToBlockBlob(input) {\n    if (!input.sourceBlob.download || !input.targetBlob.uploadStream) {\n        throw new Error(\"Azure blob client does not support streaming upload finalize\");\n    }\n    const downloaded = await input.sourceBlob.download();\n    let sourceStream;\n    if (downloaded.readableStreamBody) {\n        sourceStream = Readable.from(downloaded.readableStreamBody);\n    }\n    else if (downloaded.blobBody) {\n        sourceStream = Readable.from([Buffer.from(await (await downloaded.blobBody).arrayBuffer())]);\n    }\n    else {\n        throw new Error(\"Azure blob download returned no body\");\n    }\n    const hash = crypto.createHash(\"sha256\");\n    let actualSize = 0;\n    const hashingStream = new Transform({\n        transform(chunk, _encoding, callback) {\n            const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n            actualSize += buffer.length;\n            hash.update(buffer);\n            callback(null, buffer);\n        },\n    });\n    const upload = await input.targetBlob.uploadStream(sourceStream.pipe(hashingStream), undefined, undefined, {\n        blobHTTPHeaders: { blobContentType: input.contentType },\n        metadata: input.initialMetadata,\n    });\n    if (actualSize !== input.expectedSize)\n        throw new Error(\"Upload size mismatch\");\n    const contentHash = hash.digest(\"hex\");\n    if (input.expectedChecksum && input.expectedChecksum !== contentHash) {\n        throw new Error(\"Upload checksum mismatch\");\n    }\n    await input.targetBlob.setMetadata?.(input.verifiedMetadata(contentHash, actualSize));\n    return { etag: upload.etag, contentHash, size: actualSize };\n}\n", "import * as crypto from \"crypto\";\nimport { assertStorageApiUploadFileSize, assertStorageFileSize, } from \"./storage-adapter-limits.js\";\nimport { azureBlobObjectKey, azureStagingObjectKey, blobSasPermissions, deleteAzureBlobIfExists, normalizeChecksum, normalizeMime, normalizeUploadInput, sha256AzureBlob, } from \"./storage-azure-direct-upload-common.js\";\nimport { createAzureLegacyDirectUploadController, decodeLegacyUploadMetadata, } from \"./storage-azure-direct-upload-legacy.js\";\nimport { DIRECT_UPLOAD_PROTOCOL_VERSION, StorageUploadError, } from \"./storage-upload-session-catalog.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nexport { azureBlobObjectKey, azureStagingObjectKey, deleteAzureBlobIfExists };\nfunction assertUploadId(uploadId) {\n    if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(uploadId)) {\n        throw new Error(\"Invalid upload id\");\n    }\n}\nexport function createAzureDirectUploadController(options) {\n    const nowMs = () => options.nowMs?.() ?? Date.now();\n    const legacy = createAzureLegacyDirectUploadController(options, nowMs);\n    const v2Enabled = options.directUploadMode === \"azure_sas\" &&\n        Boolean(options.catalog && options.sessions) &&\n        typeof options.serviceClient?.getUserDelegationKey === \"function\";\n    async function createV2Grant(meta) {\n        const uploadId = crypto.randomUUID();\n        const objectKey = azureBlobObjectKey({ ...options, storageId: uploadId });\n        await options.catalog.prepare();\n        const session = await options.sessions.reserve({\n            uploadId,\n            assetId: uploadId,\n            objectKey,\n            protocolVersion: DIRECT_UPLOAD_PROTOCOL_VERSION,\n            filename: meta.filename,\n            contentType: meta.contentType,\n            declaredSize: meta.declaredSize,\n            ...(meta.checksum ? { checksumAlgorithm: \"sha256\", checksumValue: meta.checksum } : {}),\n            visibility: \"private\",\n            expiresAt: new Date(meta.expiresAt),\n            quotaBytes: options.quotaBytes,\n        });\n        const blob = options.containerClient.getBlockBlobClient(objectKey);\n        try {\n            if (!blob.generateUserDelegationSasUrl)\n                throw new Error(\"Azure direct upload SAS is unavailable\");\n            const expiresOn = session.expiresAt;\n            const startsOn = new Date(nowMs() - 5 * 60 * 1000);\n            const key = await options.serviceClient.getUserDelegationKey(startsOn, expiresOn);\n            const url = await blob.generateUserDelegationSasUrl({ permissions: blobSasPermissions(\"c\"), startsOn, expiresOn }, key);\n            return {\n                uploadId,\n                url,\n                method: \"PUT\",\n                headers: {\n                    \"Content-Type\": meta.contentType,\n                    \"x-ms-blob-type\": \"BlockBlob\",\n                    \"x-ms-blob-content-type\": meta.contentType,\n                    \"If-None-Match\": \"*\",\n                },\n                expiresAt: meta.expiresAt,\n            };\n        }\n        catch (error) {\n            const claimed = await options.sessions.claimAbort(uploadId).catch(() => null);\n            if (claimed)\n                await options.sessions.completeAbort(uploadId).catch(() => { });\n            throw error;\n        }\n    }\n    async function finalizeV2(session, input) {\n        if (session.state === \"finalized\")\n            return { assetId: session.assetId };\n        if (session.expiresAt.getTime() <= nowMs()) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_EXPIRED\", \"Upload grant expired\");\n        }\n        const leaseOwner = crypto.randomUUID();\n        const claimed = await options.sessions.claimFinalize(session.uploadId, leaseOwner, new Date(nowMs()));\n        if (claimed.state === \"finalized\")\n            return { assetId: claimed.assetId };\n        const blob = options.containerClient.getBlockBlobClient(claimed.objectKey);\n        let properties;\n        try {\n            properties = await blob.getProperties();\n        }\n        catch {\n            await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                state: \"granted\",\n                failureCode: \"STORAGE_UPLOAD_BODY_MISSING\",\n            });\n            throw new StorageUploadError(\"STORAGE_UPLOAD_BODY_MISSING\", \"Upload body is missing\", true);\n        }\n        if (properties.contentLength !== claimed.declaredSize) {\n            await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                state: \"rejected\",\n                failureCode: \"STORAGE_UPLOAD_SIZE_MISMATCH\",\n            });\n            throw new StorageUploadError(\"STORAGE_UPLOAD_SIZE_MISMATCH\", \"Upload size mismatch\");\n        }\n        if (normalizeMime(properties.contentType ?? \"\") !== claimed.contentType) {\n            await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                state: \"rejected\",\n                failureCode: \"STORAGE_UPLOAD_TYPE_MISMATCH\",\n            });\n            throw new StorageUploadError(\"STORAGE_UPLOAD_TYPE_MISMATCH\", \"Upload content type mismatch\");\n        }\n        const requestedChecksum = normalizeChecksum(input.checksum);\n        if (requestedChecksum && claimed.checksumValue && requestedChecksum !== claimed.checksumValue) {\n            await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                state: \"rejected\",\n                failureCode: \"STORAGE_UPLOAD_STATE_CONFLICT\",\n            });\n            throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Upload checksum contract mismatch\");\n        }\n        const expectedChecksum = requestedChecksum ?? claimed.checksumValue;\n        if (expectedChecksum) {\n            let actualChecksum;\n            try {\n                actualChecksum = await sha256AzureBlob(blob);\n            }\n            catch (error) {\n                await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                    state: \"granted\",\n                    failureCode: \"STORAGE_AZURE_TEMPORARY_FAILURE\",\n                });\n                throw error;\n            }\n            if (actualChecksum !== expectedChecksum) {\n                await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                    state: \"rejected\",\n                    failureCode: \"STORAGE_UPLOAD_STATE_CONFLICT\",\n                });\n                throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Upload checksum mismatch\");\n            }\n        }\n        try {\n            const finalized = await options.sessions.completeFinalize({\n                uploadId: claimed.uploadId,\n                leaseOwner,\n                etag: properties.etag,\n                record: {\n                    id: claimed.assetId,\n                    name: claimed.filename,\n                    size: claimed.declaredSize,\n                    type: claimed.contentType,\n                    visibility: normalizeStorageVisibility(input.visibility),\n                    uploadedBy: \"direct-upload\",\n                    storageBackend: \"azure-blob\",\n                    objectKey: claimed.objectKey,\n                    etag: properties.etag,\n                    ...(expectedChecksum ? { contentHash: expectedChecksum } : {}),\n                },\n            });\n            return { assetId: finalized.assetId };\n        }\n        catch (error) {\n            await options.sessions.releaseFinalize(claimed.uploadId, leaseOwner, {\n                state: \"granted\",\n                failureCode: \"STORAGE_AZURE_TEMPORARY_FAILURE\",\n            });\n            throw error;\n        }\n    }\n    return {\n        protocolVersion: (v2Enabled ? DIRECT_UPLOAD_PROTOCOL_VERSION : 1),\n        async createUploadGrant(input) {\n            const meta = normalizeUploadInput(input, options.maxFileSizeBytes, nowMs());\n            if (!v2Enabled) {\n                assertStorageApiUploadFileSize(meta.declaredSize, options.apiUploadMaxFileSizeBytes);\n            }\n            return v2Enabled ? createV2Grant(meta) : legacy.createGrant(meta);\n        },\n        async receiveUpload(uploadId, input) {\n            assertUploadId(uploadId);\n            if (await options.sessions?.get(uploadId)) {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Use the direct upload grant URL\");\n            }\n            const key = azureStagingObjectKey({ ...options, uploadId });\n            const blob = options.containerClient.getBlockBlobClient(key);\n            const meta = decodeLegacyUploadMetadata((await blob.getProperties()).metadata);\n            if (Date.parse(meta.expiresAt) <= nowMs()) {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_EXPIRED\", \"Upload grant expired\");\n            }\n            if (normalizeMime(input.contentType ?? \"\") !== meta.contentType) {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_TYPE_MISMATCH\", \"Upload content type mismatch\");\n            }\n            assertStorageApiUploadFileSize(input.body.size, options.apiUploadMaxFileSizeBytes);\n            const buffer = Buffer.from(await input.body.arrayBuffer());\n            assertStorageApiUploadFileSize(buffer.length, options.apiUploadMaxFileSizeBytes);\n            assertStorageFileSize(buffer.length, options.maxFileSizeBytes);\n            await blob.uploadData(buffer, {\n                blobHTTPHeaders: { blobContentType: meta.contentType },\n                metadata: legacy.encodeUploadMetadata({ ...meta, state: \"received\" }),\n            });\n        },\n        async finalizeUpload(input) {\n            assertUploadId(input.uploadId);\n            const session = await options.sessions?.get(input.uploadId);\n            return session ? finalizeV2(session, input) : legacy.finalize(input);\n        },\n        async abortUpload(uploadId) {\n            assertUploadId(uploadId);\n            const session = await options.sessions?.get(uploadId);\n            if (session) {\n                const claimed = await options.sessions.claimAbort(uploadId);\n                if (!claimed || claimed.state === \"aborted\")\n                    return;\n                await deleteAzureBlobIfExists(options.containerClient.getBlockBlobClient(claimed.objectKey));\n                await options.sessions.completeAbort(uploadId);\n                return;\n            }\n            await deleteAzureBlobIfExists(options.containerClient.getBlockBlobClient(azureStagingObjectKey({ ...options, uploadId })));\n        },\n        async reconcileUploads(input) {\n            const reconcileNow = new Date(input?.nowMs ?? nowMs());\n            let removed = 0;\n            for (const session of (await options.sessions?.listExpired(reconcileNow, 100)) ?? []) {\n                const claimed = await options.sessions.claimExpiredAbort(session.uploadId, reconcileNow).catch(() => null);\n                if (!claimed || claimed.state === \"aborted\")\n                    continue;\n                await deleteAzureBlobIfExists(options.containerClient.getBlockBlobClient(claimed.objectKey));\n                await options.sessions.completeAbort(session.uploadId);\n                removed++;\n            }\n            if (!options.containerClient.listBlobsFlat)\n                return { removed };\n            const prefix = azureStagingObjectKey({ ...options, uploadId: \"\" });\n            for await (const item of options.containerClient.listBlobsFlat({ prefix })) {\n                const blob = options.containerClient.getBlobClient?.(item.name) ?? options.containerClient.getBlockBlobClient(item.name);\n                const props = await blob.getProperties().catch(() => null);\n                const meta = props\n                    ? (() => {\n                        try {\n                            return decodeLegacyUploadMetadata(props.metadata);\n                        }\n                        catch {\n                            return null;\n                        }\n                    })()\n                    : null;\n                const expiresAt = meta ? Date.parse(meta.expiresAt) : 0;\n                if (expiresAt > reconcileNow.getTime())\n                    continue;\n                await deleteAzureBlobIfExists(blob);\n                removed++;\n            }\n            return { removed };\n        },\n        async createBackendReadGrant(storageId, ttlSeconds = 300) {\n            if (!options.catalog)\n                throw new Error(\"Azure backend read grants require a storage catalog\");\n            const meta = await options.catalog.getMeta(storageId);\n            if (!meta)\n                throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Storage object not found\");\n            const location = await options.catalog.getBackendLocation(storageId);\n            if (location?.storageBackend !== \"azure-blob\" || !location.objectKey) {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Storage object not found\");\n            }\n            const objectKey = location.objectKey;\n            const blob = options.containerClient.getBlockBlobClient(objectKey);\n            await blob.getProperties();\n            if (!options.serviceClient?.getUserDelegationKey || !blob.generateUserDelegationSasUrl) {\n                throw new Error(\"Azure backend read grants are unavailable\");\n            }\n            const boundedTtl = Math.max(60, Math.min(600, Math.floor(ttlSeconds)));\n            const startsOn = new Date(nowMs() - 5 * 60 * 1000);\n            const expiresOn = new Date(nowMs() + boundedTtl * 1000);\n            const key = await options.serviceClient.getUserDelegationKey(startsOn, expiresOn);\n            const url = await blob.generateUserDelegationSasUrl({\n                permissions: blobSasPermissions(\"r\"),\n                startsOn,\n                expiresOn,\n                contentType: meta.type,\n                contentDisposition: `attachment; filename*=UTF-8''${encodeURIComponent(meta.name)}`,\n            }, key);\n            return { url, expiresAt: expiresOn.toISOString() };\n        },\n    };\n}\n", "import * as crypto from \"crypto\";\nimport { createRequire } from \"module\";\nimport { Readable } from \"stream\";\nimport { assertStorageFileSize } from \"./storage-adapter-limits.js\";\nimport { DIRECT_UPLOAD_SYNC_SHA256_MAX_BYTES, DIRECT_UPLOAD_TTL_MS, StorageUploadError, } from \"./storage-upload-session-catalog.js\";\nfunction normalizedPrefix(prefix) {\n    return prefix.trim().replace(/^\\/+|\\/+$/g, \"\");\n}\nexport function azureBlobObjectKey(input) {\n    const prefix = normalizedPrefix(input.prefix);\n    const base = `apps/${encodeURIComponent(input.appName)}/objects/${input.storageId}`;\n    return prefix ? `${prefix}/${base}` : base;\n}\nexport function azureStagingObjectKey(input) {\n    const prefix = normalizedPrefix(input.prefix);\n    const base = `apps/${encodeURIComponent(input.appName)}/staging/${input.uploadId}`;\n    return prefix ? `${prefix}/${base}` : base;\n}\nexport async function deleteAzureBlobIfExists(blob) {\n    if (blob.deleteIfExists) {\n        await blob.deleteIfExists();\n        return;\n    }\n    try {\n        await blob.delete?.();\n    }\n    catch (error) {\n        if (!(error instanceof Error) || !error.message.includes(\"BlobNotFound\"))\n            throw error;\n    }\n}\nexport function normalizeChecksum(checksum) {\n    if (!checksum)\n        return undefined;\n    const normalized = checksum.trim().toLowerCase();\n    if (!/^[a-f0-9]{64}$/.test(normalized))\n        throw new Error(\"Invalid upload checksum\");\n    return normalized;\n}\nexport function normalizeMime(value) {\n    return value.split(\";\", 1)[0]?.trim().toLowerCase() || \"application/octet-stream\";\n}\nexport function normalizeUploadInput(input, maxFileSizeBytes, nowMs) {\n    if (!input.filename || input.filename.length > 500)\n        throw new Error(\"Invalid upload filename\");\n    if (!input.contentType || input.contentType.length > 200)\n        throw new Error(\"Invalid upload content type\");\n    if (!Number.isSafeInteger(input.size) || input.size < 0)\n        throw new Error(\"Invalid upload size\");\n    assertStorageFileSize(input.size, maxFileSizeBytes);\n    const checksum = normalizeChecksum(input.checksum);\n    if (checksum && input.size > DIRECT_UPLOAD_SYNC_SHA256_MAX_BYTES) {\n        throw new StorageUploadError(\"STORAGE_ASYNC_INTEGRITY_REQUIRED\", \"Large SHA-256 uploads require asynchronous integrity verification\");\n    }\n    return {\n        filename: input.filename,\n        contentType: normalizeMime(input.contentType),\n        declaredSize: input.size,\n        ...(checksum ? { checksum } : {}),\n        expiresAt: new Date(nowMs + DIRECT_UPLOAD_TTL_MS).toISOString(),\n        state: \"pending\",\n    };\n}\nexport function blobSasPermissions(value) {\n    const require = createRequire(import.meta.url);\n    const storageBlob = require(\"@azure/storage-blob\");\n    return storageBlob.BlobSASPermissions.parse(value);\n}\nexport async function sha256AzureBlob(blob) {\n    if (!blob.download)\n        throw new Error(\"Azure blob client does not support integrity verification\");\n    const response = await blob.download();\n    const source = response.readableStreamBody\n        ? Readable.from(response.readableStreamBody)\n        : response.blobBody\n            ? Readable.from([Buffer.from(await (await response.blobBody).arrayBuffer())])\n            : null;\n    if (!source)\n        throw new Error(\"Azure blob download returned no body\");\n    const hash = crypto.createHash(\"sha256\");\n    for await (const chunk of source)\n        hash.update(Buffer.from(chunk));\n    return hash.digest(\"hex\");\n}\n", "export const DIRECT_UPLOAD_PROTOCOL_VERSION = 2;\nexport const DIRECT_UPLOAD_TTL_MS = 15 * 60 * 1000;\nexport const DIRECT_UPLOAD_FINALIZE_LEASE_MS = 60 * 1000;\nexport const DIRECT_UPLOAD_SYNC_SHA256_MAX_BYTES = 50 * 1024 * 1024;\nexport class StorageUploadError extends Error {\n    code;\n    retryable;\n    name = \"StorageUploadError\";\n    constructor(code, message, retryable = false) {\n        super(message);\n        this.code = code;\n        this.retryable = retryable;\n    }\n}\nfunction asDate(value) {\n    return value instanceof Date ? value : new Date(String(value));\n}\nfunction asOptionalString(value) {\n    return typeof value === \"string\" && value ? value : undefined;\n}\nfunction mapSession(row) {\n    return {\n        uploadId: String(row.upload_id),\n        assetId: String(row.asset_id),\n        objectKey: String(row.object_key),\n        protocolVersion: Number(row.protocol_version),\n        state: String(row.state),\n        filename: String(row.filename),\n        contentType: String(row.content_type),\n        declaredSize: Number(row.declared_size),\n        ...(row.checksum_algorithm === \"sha256\" ? { checksumAlgorithm: \"sha256\" } : {}),\n        ...(asOptionalString(row.checksum_value) ? { checksumValue: String(row.checksum_value) } : {}),\n        visibility: row.visibility === \"public\" ? \"public\" : \"private\",\n        reservationBytes: Number(row.reservation_bytes),\n        ...(asOptionalString(row.azure_etag) ? { azureEtag: String(row.azure_etag) } : {}),\n        ...(asOptionalString(row.lease_owner) ? { leaseOwner: String(row.lease_owner) } : {}),\n        ...(row.lease_expires_at ? { leaseExpiresAt: asDate(row.lease_expires_at) } : {}),\n        expiresAt: asDate(row.expires_at),\n    };\n}\nconst SESSION_COLUMNS = `upload_id, asset_id, object_key, protocol_version, state,\n  filename, content_type, declared_size, checksum_algorithm, checksum_value,\n  visibility, reservation_bytes, azure_etag, lease_owner, lease_expires_at, expires_at`;\nexport function createStorageUploadSessionCatalog(rawSql) {\n    let prepared = false;\n    async function prepare() {\n        if (prepared)\n            return;\n        const quotaLockRows = (await rawSql(`SELECT to_regclass(current_schema() || '._system_storage_upload_quota_lock')::text AS table_name`));\n        if (!quotaLockRows[0]?.table_name) {\n            await rawSql(`CREATE TABLE _system_storage_upload_quota_lock (\n        id SMALLINT PRIMARY KEY\n      )`);\n        }\n        await rawSql(`INSERT INTO _system_storage_upload_quota_lock (id)\n      VALUES (1) ON CONFLICT (id) DO NOTHING`);\n        const uploadTableRows = (await rawSql(`SELECT to_regclass(current_schema() || '._system_storage_uploads')::text AS table_name`));\n        if (!uploadTableRows[0]?.table_name) {\n            await rawSql(`CREATE TABLE _system_storage_uploads (\n        upload_id TEXT PRIMARY KEY,\n        asset_id TEXT NOT NULL,\n        object_key TEXT NOT NULL,\n        protocol_version INTEGER NOT NULL,\n        state TEXT NOT NULL CHECK (state IN ('granted','finalizing','finalized','aborting','aborted','rejected')),\n        filename TEXT NOT NULL,\n        content_type TEXT NOT NULL,\n        declared_size BIGINT NOT NULL CHECK (declared_size >= 0),\n        checksum_algorithm TEXT,\n        checksum_value TEXT,\n        visibility TEXT NOT NULL DEFAULT 'private',\n        reservation_bytes BIGINT NOT NULL CHECK (reservation_bytes >= 0),\n        azure_etag TEXT,\n        lease_owner TEXT,\n        lease_expires_at TIMESTAMPTZ,\n        failure_code TEXT,\n        expires_at TIMESTAMPTZ NOT NULL,\n        finalized_at TIMESTAMPTZ,\n        aborted_at TIMESTAMPTZ,\n        created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n        updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n      )`);\n        }\n        const indexRows = (await rawSql(`SELECT indexname FROM pg_indexes\n        WHERE schemaname = current_schema()\n          AND tablename = '_system_storage_uploads'\n          AND indexname IN ('_system_storage_uploads_state_expiry_idx', '_system_storage_uploads_lease_idx')`));\n        const indexes = new Set(indexRows.map((row) => String(row.indexname)));\n        if (!indexes.has(\"_system_storage_uploads_state_expiry_idx\")) {\n            await rawSql(`CREATE INDEX _system_storage_uploads_state_expiry_idx\n        ON _system_storage_uploads (state, expires_at)`);\n        }\n        if (!indexes.has(\"_system_storage_uploads_lease_idx\")) {\n            await rawSql(`CREATE INDEX _system_storage_uploads_lease_idx\n        ON _system_storage_uploads (state, lease_expires_at)`);\n        }\n        prepared = true;\n    }\n    async function get(uploadId) {\n        await prepare();\n        const rows = (await rawSql(`SELECT ${SESSION_COLUMNS} FROM _system_storage_uploads WHERE upload_id = $1 LIMIT 1`, [uploadId]));\n        return rows[0] ? mapSession(rows[0]) : null;\n    }\n    return {\n        prepare,\n        get,\n        async reserve(input) {\n            await prepare();\n            const rows = (await rawSql(`WITH quota_lock AS MATERIALIZED (\n           SELECT id FROM _system_storage_upload_quota_lock WHERE id = 1 FOR UPDATE\n         ), usage AS (\n           SELECT COALESCE(SUM(CAST(size AS BIGINT)), 0) AS bytes FROM _system_files\n         ), reservations AS (\n           SELECT COALESCE(SUM(reservation_bytes), 0) AS bytes\n             FROM _system_storage_uploads\n            WHERE state IN ('granted', 'finalizing', 'aborting')\n         ), inserted AS (\n           INSERT INTO _system_storage_uploads (\n             upload_id, asset_id, object_key, protocol_version, state, filename,\n             content_type, declared_size, checksum_algorithm, checksum_value,\n             visibility, reservation_bytes, expires_at, created_at, updated_at\n           )\n           SELECT $1, $2, $3, $4, 'granted', $5, $6, $7, $8, $9, $10, $7, $11, NOW(), NOW()\n             FROM quota_lock, usage, reservations\n            WHERE $12::bigint <= 0\n               OR usage.bytes + reservations.bytes + $7::bigint <= $12::bigint\n           RETURNING ${SESSION_COLUMNS}\n         ) SELECT * FROM inserted`, [\n                input.uploadId,\n                input.assetId,\n                input.objectKey,\n                input.protocolVersion,\n                input.filename,\n                input.contentType,\n                input.declaredSize,\n                input.checksumAlgorithm ?? null,\n                input.checksumValue ?? null,\n                input.visibility,\n                input.expiresAt,\n                input.quotaBytes,\n            ]));\n            if (!rows[0]) {\n                throw new StorageUploadError(\"STORAGE_QUOTA_EXCEEDED\", \"Storage quota exceeded\");\n            }\n            return mapSession(rows[0]);\n        },\n        async claimFinalize(uploadId, leaseOwner, now = new Date()) {\n            await prepare();\n            const leaseExpiresAt = new Date(now.getTime() + DIRECT_UPLOAD_FINALIZE_LEASE_MS);\n            const rows = (await rawSql(`UPDATE _system_storage_uploads\n            SET state = 'finalizing', lease_owner = $2, lease_expires_at = $3,\n                failure_code = NULL, updated_at = $4\n          WHERE upload_id = $1\n            AND (state = 'granted' OR (state = 'finalizing' AND lease_expires_at <= $4))\n          RETURNING ${SESSION_COLUMNS}`, [uploadId, leaseOwner, leaseExpiresAt, now]));\n            if (rows[0])\n                return mapSession(rows[0]);\n            const existing = await get(uploadId);\n            if (!existing)\n                throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Upload grant not found\");\n            if (existing.state === \"finalized\")\n                return existing;\n            if (existing.state === \"aborted\" || existing.state === \"aborting\") {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_ABORTED\", \"Upload was aborted\");\n            }\n            if (existing.state === \"rejected\") {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Upload was rejected\");\n            }\n            throw new StorageUploadError(\"STORAGE_UPLOAD_IN_PROGRESS\", \"Upload finalize is already running\", true);\n        },\n        async releaseFinalize(uploadId, leaseOwner, input) {\n            await prepare();\n            await rawSql(`UPDATE _system_storage_uploads\n            SET state = $3, failure_code = $4, lease_owner = NULL,\n                lease_expires_at = NULL, updated_at = NOW()\n          WHERE upload_id = $1 AND state = 'finalizing' AND lease_owner = $2`, [uploadId, leaseOwner, input.state, input.failureCode]);\n        },\n        async completeFinalize(input) {\n            await prepare();\n            const record = input.record;\n            const rows = (await rawSql(`WITH stored AS (\n           INSERT INTO _system_files (\n             storage_id, name, size, type, visibility, uploaded_by,\n             storage_backend, object_key, etag, content_hash, created_at\n           ) VALUES ($3, $4, $5, $6, $7, $8, 'azure-blob', $9, $10, $11, NOW())\n           ON CONFLICT (storage_id) DO UPDATE SET storage_id = EXCLUDED.storage_id\n             WHERE _system_files.object_key IS NOT DISTINCT FROM EXCLUDED.object_key\n               AND _system_files.size = EXCLUDED.size\n               AND _system_files.type = EXCLUDED.type\n           RETURNING storage_id\n         ), finalized AS (\n           UPDATE _system_storage_uploads\n              SET state = 'finalized', reservation_bytes = 0, azure_etag = $10,\n                  visibility = $7, lease_owner = NULL, lease_expires_at = NULL,\n                  failure_code = NULL, finalized_at = NOW(), updated_at = NOW()\n            WHERE upload_id = $1 AND state = 'finalizing' AND lease_owner = $2\n              AND EXISTS (SELECT 1 FROM stored)\n            RETURNING ${SESSION_COLUMNS}\n         ) SELECT * FROM finalized`, [\n                input.uploadId,\n                input.leaseOwner,\n                record.id,\n                record.name,\n                String(record.size),\n                record.type,\n                record.visibility,\n                record.uploadedBy,\n                record.objectKey ?? null,\n                input.etag ?? null,\n                record.contentHash ?? null,\n            ]));\n            if (!rows[0]) {\n                const existing = await get(input.uploadId);\n                if (existing?.state === \"finalized\")\n                    return existing;\n                throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Storage catalog commit failed\");\n            }\n            return mapSession(rows[0]);\n        },\n        async claimAbort(uploadId) {\n            await prepare();\n            const rows = (await rawSql(`UPDATE _system_storage_uploads\n            SET state = 'aborting', lease_owner = NULL, lease_expires_at = NULL, updated_at = NOW()\n          WHERE upload_id = $1 AND state IN ('granted', 'rejected')\n          RETURNING ${SESSION_COLUMNS}`, [uploadId]));\n            if (rows[0])\n                return mapSession(rows[0]);\n            const existing = await get(uploadId);\n            if (!existing)\n                return null;\n            if (existing.state === \"aborting\" || existing.state === \"aborted\")\n                return existing;\n            if (existing.state === \"finalized\" || existing.state === \"finalizing\") {\n                throw new StorageUploadError(\"STORAGE_UPLOAD_IN_PROGRESS\", \"Upload cannot be aborted now\", true);\n            }\n            return existing;\n        },\n        async completeAbort(uploadId) {\n            await prepare();\n            await rawSql(`UPDATE _system_storage_uploads\n            SET state = 'aborted', reservation_bytes = 0, aborted_at = NOW(), updated_at = NOW()\n          WHERE upload_id = $1 AND state = 'aborting'`, [uploadId]);\n        },\n        async claimExpiredAbort(uploadId, now) {\n            await prepare();\n            const rows = (await rawSql(`UPDATE _system_storage_uploads\n            SET state = 'aborting', lease_owner = NULL, lease_expires_at = NULL, updated_at = $2\n          WHERE upload_id = $1 AND expires_at <= $2\n            AND (\n              state IN ('granted', 'rejected')\n              OR (state = 'finalizing' AND lease_expires_at <= $2)\n            )\n          RETURNING ${SESSION_COLUMNS}`, [uploadId, now]));\n            if (rows[0])\n                return mapSession(rows[0]);\n            const existing = await get(uploadId);\n            return existing?.state === \"aborting\" || existing?.state === \"aborted\" ? existing : null;\n        },\n        async listExpired(now, limit = 100) {\n            await prepare();\n            const rows = (await rawSql(`SELECT ${SESSION_COLUMNS}\n           FROM _system_storage_uploads\n          WHERE expires_at <= $1\n            AND (\n              state IN ('granted', 'rejected', 'aborting')\n              OR (state = 'finalizing' AND lease_expires_at <= $1)\n            )\n          ORDER BY expires_at ASC LIMIT $2`, [now, Math.max(1, Math.min(500, Math.floor(limit)))]));\n            return rows.map(mapSession);\n        },\n    };\n}\n", "import * as crypto from \"crypto\";\nimport { assertStorageFileSize } from \"./storage-adapter-limits.js\";\nimport { azureBlobObjectKey, azureStagingObjectKey, blobSasPermissions, deleteAzureBlobIfExists, normalizeChecksum, normalizeMime, sha256AzureBlob, } from \"./storage-azure-direct-upload-common.js\";\nimport { DIRECT_UPLOAD_SYNC_SHA256_MAX_BYTES, StorageUploadError, } from \"./storage-upload-session-catalog.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nfunction encodeUploadMetadata(input) {\n    return {\n        gencowuploadfilename: Buffer.from(input.filename, \"utf-8\").toString(\"base64url\"),\n        gencowuploadcontenttype: input.contentType,\n        gencowuploadsize: String(input.declaredSize),\n        gencowuploadexpiresat: input.expiresAt,\n        gencowuploadstate: input.state,\n        ...(input.checksum ? { gencowuploadchecksum: input.checksum } : {}),\n    };\n}\nexport function decodeLegacyUploadMetadata(metadata) {\n    const raw = metadata ?? {};\n    let filename = \"\";\n    try {\n        filename = Buffer.from(raw.gencowuploadfilename ?? \"\", \"base64url\").toString(\"utf-8\");\n    }\n    catch { }\n    const declaredSize = Number(raw.gencowuploadsize);\n    const expiresAt = raw.gencowuploadexpiresat;\n    if (!filename || !raw.gencowuploadcontenttype || !Number.isSafeInteger(declaredSize) || declaredSize < 0) {\n        throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Upload grant not found\");\n    }\n    if (!expiresAt || Number.isNaN(Date.parse(expiresAt))) {\n        throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Upload grant not found\");\n    }\n    return {\n        filename,\n        contentType: normalizeMime(raw.gencowuploadcontenttype),\n        declaredSize,\n        ...(raw.gencowuploadchecksum ? { checksum: normalizeChecksum(raw.gencowuploadchecksum) } : {}),\n        expiresAt,\n        state: raw.gencowuploadstate === \"received\" ? \"received\" : \"pending\",\n    };\n}\nfunction finalMetadata(input) {\n    return {\n        gencowfilename: Buffer.from(input.filename, \"utf-8\").toString(\"base64url\"),\n        gencowtype: input.type,\n        gencowsize: String(input.size),\n        gencowvisibility: input.visibility,\n        ...(input.contentHash ? { gencowsha256: input.contentHash } : {}),\n    };\n}\nexport function createAzureLegacyDirectUploadController(options, nowMs) {\n    async function createGrant(meta) {\n        await options.catalog?.assertCanStore({ size: meta.declaredSize, quotaBytes: options.quotaBytes });\n        const uploadId = crypto.randomUUID();\n        const objectKey = azureStagingObjectKey({ ...options, uploadId });\n        const blob = options.containerClient.getBlockBlobClient(objectKey);\n        await blob.uploadData(Buffer.alloc(0), {\n            blobHTTPHeaders: { blobContentType: meta.contentType },\n            metadata: encodeUploadMetadata(meta),\n        });\n        if (options.directUploadMode === \"azure_sas\" &&\n            options.serviceClient?.getUserDelegationKey &&\n            blob.generateUserDelegationSasUrl) {\n            try {\n                const expiresOn = new Date(meta.expiresAt);\n                const startsOn = new Date(nowMs() - 5 * 60 * 1000);\n                const key = await options.serviceClient.getUserDelegationKey(startsOn, expiresOn);\n                const url = await blob.generateUserDelegationSasUrl({ permissions: blobSasPermissions(\"cw\"), startsOn, expiresOn }, key);\n                return {\n                    uploadId,\n                    url,\n                    method: \"PUT\",\n                    headers: {\n                        \"Content-Type\": meta.contentType,\n                        \"x-ms-blob-type\": \"BlockBlob\",\n                        \"x-ms-blob-content-type\": meta.contentType,\n                        ...Object.fromEntries(Object.entries(encodeUploadMetadata({ ...meta, state: \"received\" })).map(([key, value]) => [\n                            `x-ms-meta-${key}`,\n                            value,\n                        ])),\n                    },\n                    expiresAt: meta.expiresAt,\n                };\n            }\n            catch (error) {\n                await deleteAzureBlobIfExists(blob).catch(() => { });\n                throw error;\n            }\n        }\n        return {\n            uploadId,\n            url: `/api/storage/upload/${uploadId}`,\n            method: \"PUT\",\n            headers: { \"Content-Type\": meta.contentType },\n            expiresAt: meta.expiresAt,\n        };\n    }\n    async function finalize(input) {\n        const sourceKey = azureStagingObjectKey({ ...options, uploadId: input.uploadId });\n        const source = options.containerClient.getBlockBlobClient(sourceKey);\n        let properties;\n        try {\n            properties = await source.getProperties();\n        }\n        catch {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_NOT_FOUND\", \"Upload grant not found\");\n        }\n        const pending = decodeLegacyUploadMetadata(properties.metadata);\n        if (pending.state !== \"received\") {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_BODY_MISSING\", \"Upload body is missing\", true);\n        }\n        if (Date.parse(pending.expiresAt) <= nowMs()) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_EXPIRED\", \"Upload grant expired\");\n        }\n        const actualSize = properties.contentLength;\n        if (!Number.isSafeInteger(actualSize) || actualSize < 0) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_SIZE_MISMATCH\", \"Upload size mismatch\");\n        }\n        assertStorageFileSize(actualSize, options.maxFileSizeBytes);\n        if (actualSize !== pending.declaredSize) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_SIZE_MISMATCH\", \"Upload size mismatch\");\n        }\n        const actualType = normalizeMime(properties.contentType ?? \"\");\n        if (actualType !== pending.contentType) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_TYPE_MISMATCH\", \"Upload content type mismatch\");\n        }\n        const expectedChecksum = normalizeChecksum(input.checksum) ?? pending.checksum;\n        if (expectedChecksum && actualSize > DIRECT_UPLOAD_SYNC_SHA256_MAX_BYTES) {\n            throw new StorageUploadError(\"STORAGE_ASYNC_INTEGRITY_REQUIRED\", \"Large SHA-256 uploads require asynchronous integrity verification\");\n        }\n        if (expectedChecksum && (await sha256AzureBlob(source)) !== expectedChecksum) {\n            throw new StorageUploadError(\"STORAGE_UPLOAD_STATE_CONFLICT\", \"Upload checksum mismatch\");\n        }\n        await options.catalog?.assertCanStore({ size: actualSize, quotaBytes: options.quotaBytes });\n        if (!options.serviceClient?.getUserDelegationKey || !source.generateUserDelegationSasUrl) {\n            throw new StorageUploadError(\"STORAGE_AZURE_TEMPORARY_FAILURE\", \"Azure server-side copy is unavailable\", true);\n        }\n        const assetId = crypto.randomUUID();\n        const targetKey = azureBlobObjectKey({ ...options, storageId: assetId });\n        const target = options.containerClient.getBlockBlobClient(targetKey);\n        if (!target.syncUploadFromURL) {\n            throw new StorageUploadError(\"STORAGE_AZURE_TEMPORARY_FAILURE\", \"Azure server-side copy is unavailable\", true);\n        }\n        const startsOn = new Date(nowMs() - 5 * 60 * 1000);\n        const expiresOn = new Date(nowMs() + 5 * 60 * 1000);\n        const key = await options.serviceClient.getUserDelegationKey(startsOn, expiresOn);\n        const sourceUrl = await source.generateUserDelegationSasUrl({ permissions: blobSasPermissions(\"r\"), startsOn, expiresOn }, key);\n        try {\n            const visibility = normalizeStorageVisibility(input.visibility);\n            const copied = await target.syncUploadFromURL(sourceUrl, {\n                blobHTTPHeaders: { blobContentType: actualType },\n                metadata: finalMetadata({\n                    filename: pending.filename,\n                    type: actualType,\n                    size: actualSize,\n                    visibility,\n                    contentHash: expectedChecksum,\n                }),\n            });\n            if (copied.copyStatus && copied.copyStatus !== \"success\") {\n                throw new StorageUploadError(\"STORAGE_AZURE_TEMPORARY_FAILURE\", \"Azure copy is incomplete\", true);\n            }\n            await options.catalog?.recordStored({\n                id: assetId,\n                name: pending.filename,\n                size: actualSize,\n                type: actualType,\n                visibility,\n                uploadedBy: \"direct-upload\",\n                storageBackend: \"azure-blob\",\n                objectKey: targetKey,\n                etag: copied.etag,\n                ...(expectedChecksum ? { contentHash: expectedChecksum } : {}),\n            });\n            await deleteAzureBlobIfExists(source);\n            return { assetId };\n        }\n        catch (error) {\n            await deleteAzureBlobIfExists(target).catch(() => { });\n            throw error;\n        }\n    }\n    return { createGrant, finalize, encodeUploadMetadata };\n}\n", "const PUBLIC_INLINE_CONTENT_TYPES = new Set([\n    \"image/png\",\n    \"image/jpeg\",\n    \"image/jpg\",\n    \"image/webp\",\n    \"image/avif\",\n    \"image/gif\",\n]);\nexport function normalizeStorageVisibility(value) {\n    return value === \"public\" ? \"public\" : \"private\";\n}\nexport function isPublicStorageFile(meta) {\n    return normalizeStorageVisibility(meta.visibility) === \"public\";\n}\nexport function isSafePublicInlineContentType(contentType) {\n    return PUBLIC_INLINE_CONTENT_TYPES.has(contentType.trim().toLowerCase());\n}\nexport function resolveStorageDisposition(input) {\n    if (input.cacheScope !== \"public\")\n        return input.requested;\n    if (input.requested !== \"inline\")\n        return input.requested;\n    return isSafePublicInlineContentType(input.meta.type) ? \"inline\" : \"attachment\";\n}\nexport function storageCacheControl(scope, privateMaxAgeSeconds = 300) {\n    if (scope === \"public\")\n        return \"public, max-age=31536000, immutable\";\n    const maxAge = Math.max(0, Math.min(300, Math.floor(privateMaxAgeSeconds)));\n    return maxAge > 0 ? `private, max-age=${maxAge}` : \"private, no-store\";\n}\n", "import * as crypto from \"crypto\";\nfunction base64UrlEncode(input) {\n    return Buffer.from(input).toString(\"base64url\");\n}\nfunction base64UrlDecode(input) {\n    return Buffer.from(input, \"base64url\").toString(\"utf-8\");\n}\nfunction signPayload(encodedPayload, secret) {\n    return crypto.createHmac(\"sha256\", secret).update(encodedPayload).digest(\"base64url\");\n}\nfunction normalizeTtlSeconds(ttlSeconds) {\n    const value = typeof ttlSeconds === \"number\" && Number.isFinite(ttlSeconds) ? ttlSeconds : 60;\n    return Math.max(1, Math.min(Math.floor(value), 300));\n}\nfunction normalizeDisposition(value) {\n    return value === \"attachment\" ? \"attachment\" : \"inline\";\n}\nexport function createStorageReadGrant(params) {\n    const nowMs = params.nowMs ?? Date.now();\n    const payload = {\n        v: 1,\n        appName: params.appName,\n        storageId: params.storageId,\n        exp: nowMs + normalizeTtlSeconds(params.input?.ttlSeconds) * 1000,\n        disposition: normalizeDisposition(params.input?.disposition),\n        ...(params.input?.subject ? { subject: params.input.subject } : {}),\n        ...(params.input?.sessionId ? { sessionId: params.input.sessionId } : {}),\n    };\n    const encodedPayload = base64UrlEncode(JSON.stringify(payload));\n    const signature = signPayload(encodedPayload, params.secret);\n    return {\n        url: `/api/storage/${encodeURIComponent(params.storageId)}?grant=${encodedPayload}.${signature}`,\n        expiresAt: new Date(payload.exp).toISOString(),\n    };\n}\nexport function verifyStorageReadGrant(params) {\n    if (!params.token)\n        return { ok: false, reason: \"missing\" };\n    const [encodedPayload, signature, extra] = params.token.split(\".\");\n    if (!encodedPayload || !signature || extra !== undefined)\n        return { ok: false, reason: \"malformed\" };\n    const expected = signPayload(encodedPayload, params.secret);\n    const actual = Buffer.from(signature);\n    if (actual.length !== Buffer.byteLength(expected))\n        return { ok: false, reason: \"invalid\" };\n    if (!crypto.timingSafeEqual(actual, Buffer.from(expected)))\n        return { ok: false, reason: \"invalid\" };\n    let payload;\n    try {\n        payload = JSON.parse(base64UrlDecode(encodedPayload));\n    }\n    catch {\n        return { ok: false, reason: \"malformed\" };\n    }\n    if (payload.v !== 1 || typeof payload.exp !== \"number\")\n        return { ok: false, reason: \"malformed\" };\n    if (payload.appName !== params.appName)\n        return { ok: false, reason: \"app_mismatch\" };\n    if (payload.storageId !== params.storageId)\n        return { ok: false, reason: \"storage_mismatch\" };\n    if (payload.exp <= (params.nowMs ?? Date.now()))\n        return { ok: false, reason: \"expired\" };\n    return { ok: true, payload };\n}\n", "import { STORAGE_LIST_DEFAULT_LIMIT, STORAGE_LIST_MAX_LIMIT, formatBytes } from \"@gencow/core\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nexport function encodeStorageListCursor(payload) {\n    return Buffer.from(JSON.stringify(payload), \"utf-8\").toString(\"base64url\");\n}\nexport function decodeStorageListCursor(raw, order) {\n    let parsed;\n    try {\n        const json = Buffer.from(raw, \"base64url\").toString(\"utf-8\");\n        parsed = JSON.parse(json);\n    }\n    catch {\n        throw new Error(\"Invalid cursor\");\n    }\n    if (!parsed ||\n        typeof parsed !== \"object\" ||\n        parsed.v !== 1 ||\n        typeof parsed.t !== \"string\" ||\n        typeof parsed.s !== \"string\" ||\n        (parsed.f !== undefined &&\n            typeof parsed.f !== \"string\") ||\n        (parsed.o !== \"asc\" && parsed.o !== \"desc\")) {\n        throw new Error(\"Invalid cursor\");\n    }\n    const cursor = parsed;\n    if (cursor.o !== order)\n        throw new Error(\"Invalid cursor\");\n    return cursor;\n}\nexport function clampStorageListLimit(requested) {\n    const raw = typeof requested === \"number\" && Number.isFinite(requested)\n        ? Math.floor(requested)\n        : STORAGE_LIST_DEFAULT_LIMIT;\n    if (raw < 1)\n        return 1;\n    if (raw > STORAGE_LIST_MAX_LIMIT)\n        return STORAGE_LIST_MAX_LIMIT;\n    return raw;\n}\nexport function createSystemFilesCatalog(rawSql) {\n    let prepared = false;\n    let hasVisibilityColumn = false;\n    let hasStorageBackendColumn = false;\n    let hasObjectKeyColumn = false;\n    let hasEtagColumn = false;\n    let hasContentHashColumn = false;\n    let hasMigratedAtColumn = false;\n    async function prepare() {\n        if (prepared)\n            return;\n        await rawSql(`\n        DO $$\n        BEGIN\n            IF NOT EXISTS (\n                SELECT 1 FROM information_schema.tables\n                WHERE table_schema = current_schema()\n                AND table_name = '_system_files'\n            ) THEN\n                CREATE TABLE _system_files (\n                    id SERIAL PRIMARY KEY,\n                    storage_id TEXT NOT NULL,\n                    name TEXT NOT NULL,\n                    size TEXT NOT NULL,\n                    type TEXT NOT NULL DEFAULT 'application/octet-stream',\n                    visibility TEXT NOT NULL DEFAULT 'private',\n                    storage_backend TEXT NOT NULL DEFAULT 'local-filesystem',\n                    object_key TEXT,\n                    etag TEXT,\n                    content_hash TEXT,\n                    migrated_at TIMESTAMP,\n                    uploaded_by TEXT DEFAULT 'api',\n                    created_at TIMESTAMP DEFAULT NOW()\n                );\n            END IF;\n        END$$;\n    `);\n        const visibilityColumns = await rawSql(`SELECT 1\n         FROM information_schema.columns\n        WHERE table_schema = current_schema()\n          AND table_name = '_system_files'\n          AND column_name = 'visibility'\n        LIMIT 1`);\n        hasVisibilityColumn = visibilityColumns.length > 0;\n        if (!hasVisibilityColumn) {\n            try {\n                await rawSql(`ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS visibility TEXT NOT NULL DEFAULT 'private'`);\n                hasVisibilityColumn = true;\n            }\n            catch {\n                hasVisibilityColumn = false;\n            }\n        }\n        const azureColumnRows = (await rawSql(`SELECT column_name\n         FROM information_schema.columns\n        WHERE table_schema = current_schema()\n          AND table_name = '_system_files'\n          AND column_name IN ('storage_backend', 'object_key', 'etag', 'content_hash', 'migrated_at')`));\n        const azureColumns = new Set(azureColumnRows.map((row) => String(row.column_name)));\n        hasStorageBackendColumn = azureColumns.has(\"storage_backend\");\n        hasObjectKeyColumn = azureColumns.has(\"object_key\");\n        hasEtagColumn = azureColumns.has(\"etag\");\n        hasContentHashColumn = azureColumns.has(\"content_hash\");\n        hasMigratedAtColumn = azureColumns.has(\"migrated_at\");\n        const optionalColumns = [\n            [\n                \"storage_backend\",\n                \"TEXT NOT NULL DEFAULT 'local-filesystem'\",\n                (value) => (hasStorageBackendColumn = value),\n            ],\n            [\"object_key\", \"TEXT\", (value) => (hasObjectKeyColumn = value)],\n            [\"etag\", \"TEXT\", (value) => (hasEtagColumn = value)],\n            [\"content_hash\", \"TEXT\", (value) => (hasContentHashColumn = value)],\n            [\"migrated_at\", \"TIMESTAMP\", (value) => (hasMigratedAtColumn = value)],\n        ];\n        for (const [name, definition, setFlag] of optionalColumns) {\n            if (azureColumns.has(name))\n                continue;\n            try {\n                await rawSql(`ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS ${name} ${definition}`);\n                setFlag(true);\n            }\n            catch {\n                setFlag(false);\n            }\n        }\n        const uniqueIndexRows = await rawSql(`SELECT 1\n         FROM pg_indexes\n        WHERE schemaname = current_schema()\n          AND tablename = '_system_files'\n          AND indexname = '_system_files_storage_id_unique'\n        LIMIT 1`);\n        if (uniqueIndexRows.length === 0) {\n            const duplicateIdentityColumns = [\n                \"name\",\n                \"size\",\n                \"type\",\n                ...(hasVisibilityColumn ? [\"visibility\"] : []),\n                ...(hasStorageBackendColumn ? [\"storage_backend\"] : []),\n                ...(hasObjectKeyColumn ? [\"object_key\"] : []),\n                ...(hasEtagColumn ? [\"etag\"] : []),\n                ...(hasContentHashColumn ? [\"content_hash\"] : []),\n                ...(hasMigratedAtColumn ? [\"migrated_at\"] : []),\n            ];\n            const exactDuplicatePredicate = duplicateIdentityColumns\n                .map((column) => `newer.${column} IS NOT DISTINCT FROM older.${column}`)\n                .join(\" AND \");\n            await rawSql(`DELETE FROM _system_files AS newer\n          USING _system_files AS older\n          WHERE newer.storage_id = older.storage_id\n            AND newer.id > older.id\n            AND ${exactDuplicatePredicate}`);\n            const duplicateRows = (await rawSql(`SELECT COUNT(*)::text AS conflicts\n           FROM (\n             SELECT storage_id\n               FROM _system_files\n              GROUP BY storage_id\n             HAVING COUNT(*) > 1\n           ) AS conflicting_storage_ids`));\n            const duplicateConflicts = Number(duplicateRows[0]?.conflicts ?? 0);\n            if (duplicateConflicts > 0) {\n                throw new Error(`Storage catalog contains conflicting duplicate storage ids (${duplicateConflicts}); repair is required`);\n            }\n            await rawSql(`CREATE UNIQUE INDEX IF NOT EXISTS _system_files_storage_id_unique\n           ON _system_files (storage_id)`);\n        }\n        prepared = true;\n    }\n    return {\n        prepare,\n        async getUsageBytes() {\n            await prepare();\n            const rows = await rawSql(`SELECT COALESCE(SUM(CAST(size AS BIGINT)), 0) AS total FROM _system_files`);\n            return Number(rows[0]?.total || \"0\");\n        },\n        async assertCanStore(input) {\n            if (input.quotaBytes <= 0)\n                return;\n            const currentUsage = await this.getUsageBytes();\n            const projectedUsage = currentUsage + input.size;\n            if (projectedUsage > input.quotaBytes) {\n                throw new Error(`Storage quota exceeded: ${formatBytes(currentUsage)} used + ${formatBytes(input.size)} new = ${formatBytes(projectedUsage)}, ` +\n                    `quota is ${formatBytes(input.quotaBytes)}. Delete files or increase quota.`);\n            }\n        },\n        async recordStored(input) {\n            await prepare();\n            const columns = [\"storage_id\", \"name\", \"size\", \"type\"];\n            const values = [input.id, input.name, String(input.size), input.type];\n            if (hasVisibilityColumn) {\n                columns.push(\"visibility\");\n                values.push(normalizeStorageVisibility(input.visibility));\n            }\n            columns.push(\"uploaded_by\");\n            values.push(input.uploadedBy);\n            if (hasStorageBackendColumn && input.storageBackend) {\n                columns.push(\"storage_backend\");\n                values.push(input.storageBackend);\n            }\n            if (hasObjectKeyColumn && input.objectKey) {\n                columns.push(\"object_key\");\n                values.push(input.objectKey);\n            }\n            if (hasEtagColumn && input.etag) {\n                columns.push(\"etag\");\n                values.push(input.etag);\n            }\n            if (hasContentHashColumn && input.contentHash) {\n                columns.push(\"content_hash\");\n                values.push(input.contentHash);\n            }\n            if (hasMigratedAtColumn && input.migratedAt) {\n                columns.push(\"migrated_at\");\n                values.push(input.migratedAt);\n            }\n            const placeholders = values.map((_, index) => `$${index + 1}`).join(\", \");\n            const idempotentConditions = [\n                \"_system_files.name = EXCLUDED.name\",\n                \"_system_files.size = EXCLUDED.size\",\n                \"_system_files.type = EXCLUDED.type\",\n                ...(hasVisibilityColumn ? [\"_system_files.visibility = EXCLUDED.visibility\"] : []),\n                ...(hasStorageBackendColumn && input.storageBackend\n                    ? [\"_system_files.storage_backend = EXCLUDED.storage_backend\"]\n                    : []),\n                ...(hasObjectKeyColumn && input.objectKey\n                    ? [\"_system_files.object_key IS NOT DISTINCT FROM EXCLUDED.object_key\"]\n                    : []),\n                ...(hasEtagColumn && input.etag ? [\"_system_files.etag IS NOT DISTINCT FROM EXCLUDED.etag\"] : []),\n                ...(hasContentHashColumn && input.contentHash\n                    ? [\"_system_files.content_hash IS NOT DISTINCT FROM EXCLUDED.content_hash\"]\n                    : []),\n            ];\n            const stored = await rawSql(`INSERT INTO _system_files (${columns.join(\", \")}, created_at)\n           VALUES (${placeholders}, NOW())\n           ON CONFLICT (storage_id) DO UPDATE SET storage_id = EXCLUDED.storage_id\n             WHERE ${idempotentConditions.join(\" AND \")}\n           RETURNING storage_id`, values);\n            if (stored.length === 0)\n                throw new Error(\"Storage catalog id conflict\");\n        },\n        async remove(storageId) {\n            await rawSql(`DELETE FROM _system_files WHERE storage_id = $1`, [storageId]);\n        },\n        async getMeta(storageId) {\n            await prepare();\n            const rows = await rawSql(hasVisibilityColumn\n                ? `SELECT storage_id, name, size, type, visibility FROM _system_files WHERE storage_id = $1 LIMIT 1`\n                : `SELECT storage_id, name, size, type FROM _system_files WHERE storage_id = $1 LIMIT 1`, [storageId]);\n            if (rows.length === 0)\n                return null;\n            const row = rows[0];\n            return {\n                id: row.storage_id,\n                name: row.name,\n                size: Number(row.size),\n                type: row.type || \"application/octet-stream\",\n                visibility: normalizeStorageVisibility(row.visibility),\n            };\n        },\n        async getBackendLocation(storageId) {\n            await prepare();\n            if (!hasStorageBackendColumn || !hasObjectKeyColumn)\n                return null;\n            const rows = (await rawSql(`SELECT storage_backend, object_key\n           FROM _system_files\n          WHERE storage_id = $1\n          LIMIT 1`, [storageId]));\n            if (!rows[0])\n                return null;\n            return {\n                storageBackend: typeof rows[0].storage_backend === \"string\" ? rows[0].storage_backend : null,\n                objectKey: typeof rows[0].object_key === \"string\" ? rows[0].object_key : null,\n            };\n        },\n        async listMeta(input) {\n            await prepare();\n            const order = input?.order === \"asc\" ? \"asc\" : \"desc\";\n            const limit = clampStorageListLimit(input?.limit);\n            const cursor = input?.cursor ? decodeStorageListCursor(input.cursor, order) : null;\n            const direction = order === \"asc\" ? \"ASC\" : \"DESC\";\n            const comparator = order === \"asc\" ? \">\" : \"<\";\n            // `created_at` is selected as ::text so the cursor round-trips byte-for-byte\n            // without JS Date \u2192 ISO \u2192 ::timestamp drift (postgres TIMESTAMP WITHOUT TIME\n            // ZONE round-trips lossily through JS Date.toISOString in some drivers).\n            const params = [];\n            let whereClause = \"\";\n            if (cursor) {\n                params.push(cursor.t, cursor.s);\n                whereClause = `WHERE (created_at, storage_id) ${comparator} ($1::timestamp, $2)`;\n            }\n            params.push(limit + 1);\n            const limitParam = `$${params.length}`;\n            const rows = (await rawSql(hasVisibilityColumn\n                ? `SELECT storage_id, name, size, type, visibility, created_at::text AS created_at_text\n           FROM _system_files\n           ${whereClause}\n           ORDER BY created_at ${direction}, storage_id ${direction}\n           LIMIT ${limitParam}`\n                : `SELECT storage_id, name, size, type, created_at::text AS created_at_text\n           FROM _system_files\n           ${whereClause}\n           ORDER BY created_at ${direction}, storage_id ${direction}\n           LIMIT ${limitParam}`, params));\n            const hasMore = rows.length > limit;\n            const pageRows = hasMore ? rows.slice(0, limit) : rows;\n            const items = pageRows.map((row) => ({\n                id: String(row.storage_id),\n                name: String(row.name),\n                size: Number(row.size),\n                type: typeof row.type === \"string\" && row.type ? row.type : \"application/octet-stream\",\n                visibility: normalizeStorageVisibility(row.visibility),\n            }));\n            let nextCursor = null;\n            if (hasMore && pageRows.length > 0) {\n                const last = pageRows[pageRows.length - 1];\n                nextCursor = encodeStorageListCursor({\n                    v: 1,\n                    o: order,\n                    t: String(last.created_at_text ?? \"\"),\n                    s: String(last.storage_id),\n                });\n            }\n            return { items, nextCursor };\n        },\n        async setVisibility(storageId, visibility) {\n            await prepare();\n            if (!hasVisibilityColumn)\n                return;\n            await rawSql(`UPDATE _system_files SET visibility = $1 WHERE storage_id = $2`, [\n                normalizeStorageVisibility(visibility),\n                storageId,\n            ]);\n        },\n    };\n}\n", "import * as crypto from \"crypto\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { DEFAULT_STORAGE_QUOTA, StorageListUnsupportedError } from \"@gencow/core\";\nimport { assertStorageApiUploadFileSize, assertStorageFileSize, resolveStorageAdapterLimits, } from \"./storage-adapter-limits.js\";\nimport { createSystemFilesCatalog } from \"./storage-system-files-catalog.js\";\nimport { createAzureBlobStorage } from \"./storage-azure-blob.js\";\nimport { createStorageReadGrant } from \"./storage-read-grant.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nconst metaStore = new Map();\nconst DIRECT_UPLOAD_TTL_MS = 15 * 60 * 1000;\nfunction normalizeChecksum(checksum) {\n    if (!checksum)\n        return undefined;\n    const normalized = checksum.trim().toLowerCase();\n    if (!/^[a-f0-9]{64}$/.test(normalized))\n        throw new Error(\"Invalid upload checksum\");\n    return normalized;\n}\nasync function loadStorageMeta(params) {\n    const cached = params.metaStore.get(params.storageId);\n    if (cached)\n        return cached;\n    const filePath = path.join(params.dir, params.storageId);\n    try {\n        const raw = await fs.readFile(`${filePath}.meta`, \"utf-8\");\n        const parsed = JSON.parse(raw);\n        const stat = await fs.stat(filePath);\n        const meta = {\n            id: params.storageId,\n            name: typeof parsed.name === \"string\" ? parsed.name : params.storageId,\n            size: typeof parsed.size === \"number\" ? parsed.size : stat.size,\n            type: typeof parsed.type === \"string\" ? parsed.type : \"application/octet-stream\",\n            visibility: normalizeStorageVisibility(parsed.visibility),\n            path: filePath,\n        };\n        params.metaStore.set(params.storageId, meta);\n        return meta;\n    }\n    catch {\n        return null;\n    }\n}\nasync function removeCachedTransforms(dir, storageId) {\n    const cacheDir = path.join(dir, \".cache\");\n    try {\n        const entries = await fs.readdir(cacheDir);\n        const prefix = `${storageId}_`;\n        await Promise.all(entries\n            .filter((entry) => entry.startsWith(prefix))\n            .map((entry) => fs.unlink(path.join(cacheDir, entry)).catch(() => { })));\n    }\n    catch {\n        /* .cache \uB514\uB809\uD1A0\uB9AC \uBBF8\uC874\uC7AC \uC2DC \uBB34\uC2DC */\n    }\n}\nasync function removeStoredObjectFiles(params) {\n    await fs.unlink(params.filePath).catch(() => { });\n    await fs.unlink(`${params.filePath}.meta`).catch(() => { });\n    params.metaStore.delete(params.storageId);\n    await removeCachedTransforms(params.dir, params.storageId);\n}\nasync function ensureStorageDir(dir) {\n    await fs.mkdir(dir, { recursive: true });\n}\nfunction uploadDir(dir) {\n    return path.join(dir, \".uploads\");\n}\nfunction normalizeUploadInput(input, maxFileSizeBytes) {\n    if (!input.filename || input.filename.length > 500)\n        throw new Error(\"Invalid upload filename\");\n    if (!input.contentType || input.contentType.length > 200)\n        throw new Error(\"Invalid upload content type\");\n    if (!Number.isFinite(input.size) || input.size < 0)\n        throw new Error(\"Invalid upload size\");\n    assertStorageFileSize(input.size, maxFileSizeBytes);\n    return {\n        filename: input.filename,\n        contentType: input.contentType,\n        declaredSize: input.size,\n        ...(input.checksum ? { checksum: normalizeChecksum(input.checksum) } : {}),\n        expiresAt: new Date(Date.now() + DIRECT_UPLOAD_TTL_MS).toISOString(),\n    };\n}\nfunction normalizeStoreOptions(input) {\n    if (typeof input === \"string\")\n        return { filename: input, visibility: \"private\" };\n    return {\n        filename: input?.filename,\n        visibility: normalizeStorageVisibility(input?.visibility),\n    };\n}\nfunction encodeMeta(meta) {\n    return JSON.stringify({\n        name: meta.name,\n        type: meta.type,\n        size: meta.size,\n        visibility: normalizeStorageVisibility(meta.visibility),\n    });\n}\nasync function readPendingUploadMeta(dir, uploadId) {\n    const raw = await fs.readFile(path.join(uploadDir(dir), `${uploadId}.json`), \"utf-8\");\n    return JSON.parse(raw);\n}\nasync function removePendingUpload(dir, uploadId) {\n    await fs.unlink(path.join(uploadDir(dir), uploadId)).catch(() => { });\n    await fs.unlink(path.join(uploadDir(dir), `${uploadId}.json`)).catch(() => { });\n}\nfunction sha256(buffer) {\n    return crypto.createHash(\"sha256\").update(buffer).digest(\"hex\");\n}\nfunction toPublicStorageFile(meta) {\n    return {\n        id: meta.id,\n        name: meta.name,\n        size: meta.size,\n        type: meta.type,\n        visibility: normalizeStorageVisibility(meta.visibility),\n    };\n}\nasync function recordStored(params) {\n    if (!params.catalog)\n        return;\n    try {\n        await params.catalog.recordStored({ ...params.meta, uploadedBy: params.uploadedBy });\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        console.warn(`[storage] DB record failed for ${params.meta.id}: ${msg}`);\n        throw new Error(\"Storage catalog record failed\");\n    }\n}\nexport function createLocalFilesystemStorage(dir = \"./uploads\", options) {\n    const catalog = options?.catalog ?? (options?.rawSql ? createSystemFilesCatalog(options.rawSql) : undefined);\n    const quota = options?.storageQuota ?? DEFAULT_STORAGE_QUOTA;\n    const { maxFileSizeBytes, apiUploadMaxFileSizeBytes } = resolveStorageAdapterLimits(options);\n    return {\n        kind: \"local-filesystem\",\n        apiUploadMaxFileSizeBytes,\n        async store(file, filenameOrOptions) {\n            assertStorageFileSize(file.size, maxFileSizeBytes);\n            await catalog?.assertCanStore({ size: file.size, quotaBytes: quota });\n            await ensureStorageDir(dir);\n            const storeOptions = normalizeStoreOptions(filenameOrOptions);\n            const id = crypto.randomUUID();\n            const name = storeOptions.filename || (file instanceof File ? file.name : `${id}.bin`);\n            const type = file.type || \"application/octet-stream\";\n            const filePath = path.join(dir, id);\n            const arrayBuffer = await file.arrayBuffer();\n            await fs.writeFile(filePath, Buffer.from(arrayBuffer));\n            await fs\n                .writeFile(`${filePath}.meta`, encodeMeta({ name, type, size: file.size, visibility: storeOptions.visibility }))\n                .catch(() => { });\n            const meta = {\n                id,\n                name,\n                size: file.size,\n                type,\n                visibility: storeOptions.visibility,\n                path: filePath,\n            };\n            metaStore.set(id, meta);\n            try {\n                await recordStored({ catalog, meta: toPublicStorageFile(meta), uploadedBy: \"api\" });\n            }\n            catch (error) {\n                await removeStoredObjectFiles({ dir, filePath, storageId: id, metaStore });\n                throw error;\n            }\n            return id;\n        },\n        async storeBuffer(buffer, filename, type = \"application/octet-stream\", options) {\n            assertStorageFileSize(buffer.length, maxFileSizeBytes);\n            await catalog?.assertCanStore({ size: buffer.length, quotaBytes: quota });\n            await ensureStorageDir(dir);\n            const id = crypto.randomUUID();\n            const visibility = normalizeStorageVisibility(options?.visibility);\n            const filePath = path.join(dir, id);\n            await fs.writeFile(filePath, buffer);\n            await fs\n                .writeFile(`${filePath}.meta`, encodeMeta({ name: filename, type, size: buffer.length, visibility }))\n                .catch(() => { });\n            const meta = {\n                id,\n                name: filename,\n                size: buffer.length,\n                type,\n                visibility,\n                path: filePath,\n            };\n            metaStore.set(id, meta);\n            try {\n                await recordStored({ catalog, meta: toPublicStorageFile(meta), uploadedBy: \"api\" });\n            }\n            catch (error) {\n                await removeStoredObjectFiles({ dir, filePath, storageId: id, metaStore });\n                throw error;\n            }\n            return id;\n        },\n        getUrl(storageId) {\n            return `/api/storage/${storageId}`;\n        },\n        getPublicUrl(storageId) {\n            return `/api/storage/${storageId}`;\n        },\n        async createUploadGrant(input) {\n            const meta = normalizeUploadInput(input, maxFileSizeBytes);\n            await catalog?.assertCanStore({ size: meta.declaredSize, quotaBytes: quota });\n            await fs.mkdir(uploadDir(dir), { recursive: true });\n            const uploadId = crypto.randomUUID();\n            await fs.writeFile(path.join(uploadDir(dir), `${uploadId}.json`), JSON.stringify(meta));\n            return {\n                uploadId,\n                url: `/api/storage/upload/${uploadId}`,\n                method: \"PUT\",\n                headers: { \"Content-Type\": meta.contentType },\n                expiresAt: meta.expiresAt,\n            };\n        },\n        async receiveUpload(uploadId, input) {\n            const meta = await readPendingUploadMeta(dir, uploadId);\n            if (Date.parse(meta.expiresAt) <= Date.now())\n                throw new Error(\"Upload grant expired\");\n            if ((input.contentType ?? \"\") !== meta.contentType)\n                throw new Error(\"Upload content type mismatch\");\n            if (Number.isFinite(input.body.size)) {\n                assertStorageApiUploadFileSize(input.body.size, apiUploadMaxFileSizeBytes);\n            }\n            const buffer = Buffer.from(await input.body.arrayBuffer());\n            assertStorageApiUploadFileSize(buffer.length, apiUploadMaxFileSizeBytes);\n            assertStorageFileSize(buffer.length, maxFileSizeBytes);\n            await fs.mkdir(uploadDir(dir), { recursive: true });\n            await fs.writeFile(path.join(uploadDir(dir), uploadId), buffer);\n        },\n        async finalizeUpload(input) {\n            const pending = await readPendingUploadMeta(dir, input.uploadId);\n            if (Date.parse(pending.expiresAt) <= Date.now())\n                throw new Error(\"Upload grant expired\");\n            const stagedPath = path.join(uploadDir(dir), input.uploadId);\n            const buffer = await fs.readFile(stagedPath);\n            if (buffer.length !== pending.declaredSize)\n                throw new Error(\"Upload size mismatch\");\n            const actualChecksum = sha256(buffer);\n            const expectedChecksum = normalizeChecksum(input.checksum) ?? pending.checksum;\n            if (expectedChecksum && expectedChecksum !== actualChecksum)\n                throw new Error(\"Upload checksum mismatch\");\n            assertStorageFileSize(buffer.length, maxFileSizeBytes);\n            await catalog?.assertCanStore({ size: buffer.length, quotaBytes: quota });\n            await ensureStorageDir(dir);\n            const id = crypto.randomUUID();\n            const filePath = path.join(dir, id);\n            await fs.rename(stagedPath, filePath);\n            await fs.writeFile(`${filePath}.meta`, encodeMeta({\n                name: pending.filename,\n                type: pending.contentType,\n                size: buffer.length,\n                visibility: normalizeStorageVisibility(input.visibility),\n            }));\n            await fs.unlink(path.join(uploadDir(dir), `${input.uploadId}.json`)).catch(() => { });\n            const meta = {\n                id,\n                name: pending.filename,\n                size: buffer.length,\n                type: pending.contentType,\n                visibility: normalizeStorageVisibility(input.visibility),\n                path: filePath,\n            };\n            metaStore.set(id, meta);\n            try {\n                await recordStored({ catalog, meta: toPublicStorageFile(meta), uploadedBy: \"direct-upload\" });\n            }\n            catch (error) {\n                await removeStoredObjectFiles({ dir, filePath, storageId: id, metaStore });\n                throw error;\n            }\n            return { assetId: id };\n        },\n        async abortUpload(uploadId) {\n            await removePendingUpload(dir, uploadId);\n        },\n        async reconcileUploads(input) {\n            const nowMs = input?.nowMs ?? Date.now();\n            const maxAgeMs = input?.maxAgeMs ?? DIRECT_UPLOAD_TTL_MS;\n            let removed = 0;\n            const dirPath = uploadDir(dir);\n            const entries = await fs.readdir(dirPath).catch(() => []);\n            for (const entry of entries.filter((name) => name.endsWith(\".json\"))) {\n                const uploadId = entry.replace(/\\.json$/, \"\");\n                const meta = await readPendingUploadMeta(dir, uploadId).catch(() => null);\n                const expired = !meta || Date.parse(meta.expiresAt) <= nowMs || Date.parse(meta.expiresAt) + maxAgeMs <= nowMs;\n                if (!expired)\n                    continue;\n                await removePendingUpload(dir, uploadId);\n                removed++;\n            }\n            return { removed };\n        },\n        async createReadGrant(storageId, input) {\n            if (!options?.appName || !options?.readGrantSecret) {\n                throw new Error(\"Storage read grants are not configured\");\n            }\n            const meta = await loadStorageMeta({ storageId, dir, metaStore });\n            if (!meta)\n                throw new Error(\"Storage object not found\");\n            return createStorageReadGrant({\n                appName: options.appName,\n                storageId,\n                secret: options.readGrantSecret,\n                input,\n                nowMs: options.readGrantNowMs?.(),\n            });\n        },\n        async get(storageId) {\n            const meta = await loadStorageMeta({ storageId, dir, metaStore });\n            if (!meta)\n                return null;\n            const buffer = await fs.readFile(meta.path).catch(() => null);\n            if (!buffer)\n                return null;\n            return {\n                id: meta.id,\n                name: meta.name,\n                size: meta.size,\n                type: meta.type,\n                visibility: normalizeStorageVisibility(meta.visibility),\n                buffer,\n            };\n        },\n        async getMeta(storageId) {\n            const meta = await loadStorageMeta({ storageId, dir, metaStore });\n            if (meta)\n                return toPublicStorageFile(meta);\n            return (await catalog?.getMeta(storageId)) ?? null;\n        },\n        async setVisibility(storageId, visibility) {\n            const meta = await loadStorageMeta({ storageId, dir, metaStore });\n            if (!meta)\n                throw new Error(\"Storage object not found\");\n            const nextVisibility = normalizeStorageVisibility(visibility);\n            const nextMeta = { ...meta, visibility: nextVisibility };\n            const previousVisibility = normalizeStorageVisibility(meta.visibility);\n            if (nextVisibility === \"public\" && catalog) {\n                try {\n                    await catalog.setVisibility(storageId, nextVisibility);\n                }\n                catch {\n                    throw new Error(\"Storage catalog visibility update failed\");\n                }\n                try {\n                    await fs.writeFile(`${meta.path}.meta`, encodeMeta(nextMeta));\n                    metaStore.set(storageId, nextMeta);\n                }\n                catch (error) {\n                    await catalog.setVisibility(storageId, previousVisibility).catch(() => { });\n                    throw error;\n                }\n                return;\n            }\n            await fs.writeFile(`${meta.path}.meta`, encodeMeta(nextMeta));\n            metaStore.set(storageId, nextMeta);\n            if (catalog) {\n                try {\n                    await catalog.setVisibility(storageId, nextVisibility);\n                }\n                catch {\n                    throw new Error(\"Storage catalog visibility update failed\");\n                }\n            }\n        },\n        async listMeta(input) {\n            if (!catalog) {\n                throw new StorageListUnsupportedError(\"listMeta is not supported on filesystem-only storage without a SQL catalog. \" +\n                    \"Configure rawSql to enable inventory listing.\");\n            }\n            return catalog.listMeta(input);\n        },\n        async delete(storageId) {\n            const meta = metaStore.get(storageId);\n            const filePath = meta?.path ?? path.join(dir, storageId);\n            await fs.unlink(filePath).catch(() => { });\n            await fs.unlink(`${filePath}.meta`).catch(() => { });\n            metaStore.delete(storageId);\n            await removeCachedTransforms(dir, storageId);\n            if (catalog)\n                await catalog.remove(storageId);\n        },\n    };\n}\nexport function createRuntimeStorage(options) {\n    const dir = options.storageDir ?? \"./uploads\";\n    const adapterOptions = {\n        ...options,\n        storageQuota: options.storageQuotaBytes ?? options.storageQuota,\n    };\n    if (options.mode === \"platform\") {\n        if (options.storageBackend === \"azure_blob\") {\n            if (!options.azureBlob)\n                throw new Error(\"GENCOW_STORAGE_BACKEND=azure_blob requires Azure config\");\n            return createAzureBlobStorage({ ...adapterOptions, ...options.azureBlob });\n        }\n        return createPlatformStorage(dir, adapterOptions);\n    }\n    return createLocalFilesystemStorage(dir, adapterOptions);\n}\nexport function createPlatformStorage(dir = \"./uploads\", options) {\n    const storage = createLocalFilesystemStorage(dir, options);\n    return { ...storage, kind: \"platform\" };\n}\nexport function createStorage(dir = \"./uploads\", options) {\n    return createLocalFilesystemStorage(dir, options);\n}\n", "import * as fs from \"fs/promises\";\nimport * as fsSync from \"fs\";\nimport * as path from \"path\";\nimport { recordStorageImageTransform, recordStorageImageTransformSize } from \"./storage-metering.js\";\nimport { preflightStorageApiUploadContentLength } from \"./storage-adapter-limits.js\";\nimport { decideStorageRouteReadAccess } from \"./storage-route-access.js\";\nimport { normalizeStorageVisibility, resolveStorageDisposition, storageCacheControl, } from \"./storage-visibility.js\";\nconst TRANSFORMABLE_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/jpg\", \"image/webp\"]);\nconst ALLOWED_FORMATS = new Set([\"webp\", \"avif\", \"jpeg\", \"png\"]);\nconst ALLOWED_FIT_MODES = new Set([\"cover\", \"contain\", \"fill\", \"inside\"]);\nconst MAX_DIMENSION = 4096;\nconst DEFAULT_QUALITY = 80;\nconst AUTO_WEBP_QUALITY = 75;\nconst AUTO_WEBP_EFFORT = 6;\nconst MAX_CACHE_ENTRIES = 1000;\nconst baseContentTypes = {\n    jpg: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    png: \"image/png\",\n    webp: \"image/webp\",\n    avif: \"image/avif\",\n};\nlet activeTransforms = 0;\nconst MAX_CONCURRENT_TRANSFORMS = 3;\nconst transformQueue = [];\nfunction acquireTransformSlot() {\n    if (activeTransforms < MAX_CONCURRENT_TRANSFORMS) {\n        activeTransforms++;\n        return Promise.resolve();\n    }\n    return new Promise((resolve) => {\n        transformQueue.push(() => {\n            activeTransforms++;\n            resolve();\n        });\n    });\n}\nfunction releaseTransformSlot() {\n    activeTransforms--;\n    const next = transformQueue.shift();\n    if (next)\n        next();\n}\nfunction parseTransformParams(wStr, hStr, fStr, qStr, fitStr) {\n    const params = {};\n    let hasParam = false;\n    if (wStr) {\n        const w = parseInt(wStr, 10);\n        if (isNaN(w) || w < 1 || w > MAX_DIMENSION)\n            return null;\n        params.w = w;\n        hasParam = true;\n    }\n    if (hStr) {\n        const h = parseInt(hStr, 10);\n        if (isNaN(h) || h < 1 || h > MAX_DIMENSION)\n            return null;\n        params.h = h;\n        hasParam = true;\n    }\n    if (fStr) {\n        const fmt = fStr.toLowerCase();\n        if (!ALLOWED_FORMATS.has(fmt))\n            return null;\n        params.f = fmt;\n        hasParam = true;\n    }\n    if (qStr) {\n        const q = parseInt(qStr, 10);\n        if (isNaN(q) || q < 1 || q > 100)\n            return null;\n        params.q = q;\n        hasParam = true;\n    }\n    if (fitStr) {\n        const fitMode = fitStr.toLowerCase();\n        if (!ALLOWED_FIT_MODES.has(fitMode))\n            return null;\n        params.fit = fitMode;\n        hasParam = true;\n    }\n    return hasParam ? params : null;\n}\nfunction buildCacheKey(storageId, params, isAutoWebp, autoMaxWidth, autoQuality) {\n    if (isAutoWebp) {\n        const mwSuffix = autoMaxWidth ? `_mw${autoMaxWidth}` : \"\";\n        const qSuffix = autoQuality && autoQuality !== AUTO_WEBP_QUALITY ? `_q${autoQuality}` : \"\";\n        return `${storageId}_auto_webp${mwSuffix}${qSuffix}.webp`;\n    }\n    const parts = [storageId];\n    if (params.w)\n        parts.push(`w${params.w}`);\n    if (params.h)\n        parts.push(`h${params.h}`);\n    const fmt = params.f || \"webp\";\n    parts.push(`f${fmt}`);\n    parts.push(`q${params.q || DEFAULT_QUALITY}`);\n    if (params.fit)\n        parts.push(params.fit);\n    return `${parts.join(\"_\")}.${fmt === \"jpeg\" ? \"jpg\" : fmt}`;\n}\nasync function getCacheEntryCount(cacheDir) {\n    try {\n        const entries = await fs.readdir(cacheDir);\n        return entries.length;\n    }\n    catch {\n        return 0;\n    }\n}\nfunction resolveStoredPath(meta, storageDir) {\n    const pathValue = meta.path;\n    return typeof pathValue === \"string\" ? pathValue : path.join(storageDir, meta.id);\n}\nexport function storageRoutes(storage, rawSql, storageDir, tierConfig, meteringOptions, accessOptions) {\n    const baseTierConfig = {\n        autoWebp: tierConfig?.autoWebp ?? true,\n        autoMaxWidth: tierConfig?.autoMaxWidth ?? 0,\n        resize: tierConfig?.resize ?? true,\n        formats: tierConfig?.formats ?? [\"webp\", \"avif\", \"jpeg\", \"png\"],\n        qualityControl: tierConfig?.qualityControl ?? true,\n        cacheMaxMB: tierConfig?.cacheMaxMB ?? 1024,\n        transformsPerMonth: tierConfig?.transformsPerMonth ?? -1,\n        autoQuality: tierConfig?.autoQuality ?? AUTO_WEBP_QUALITY,\n    };\n    function getImageConfig(uploadsDir) {\n        const config = { ...baseTierConfig };\n        try {\n            const raw = fsSync.readFileSync(path.join(uploadsDir, \".image-config.json\"), \"utf-8\");\n            const appConfig = JSON.parse(raw);\n            if (appConfig.autoMaxWidth > 0) {\n                config.autoMaxWidth =\n                    config.autoMaxWidth > 0\n                        ? Math.min(appConfig.autoMaxWidth, config.autoMaxWidth)\n                        : appConfig.autoMaxWidth;\n            }\n            if (appConfig.autoQuality > 0 && appConfig.autoQuality <= 100) {\n                config.autoQuality = appConfig.autoQuality;\n            }\n            if (appConfig.autoWebp === false) {\n                config.autoWebp = false;\n            }\n        }\n        catch {\n            /* \uD30C\uC77C \uC5C6\uC74C or \uD30C\uC2F1 \uC2E4\uD328 \u2192 Tier \uAE30\uBCF8\uAC12 \uC720\uC9C0 */\n        }\n        return config;\n    }\n    let sharpModule = null;\n    let sharpLoadAttempted = false;\n    async function getSharp() {\n        if (sharpLoadAttempted)\n            return sharpModule;\n        sharpLoadAttempted = true;\n        try {\n            // @ts-ignore \u2014 sharp\uB294 \uB7F0\uD0C0\uC784 \uC120\uD0DD\uC801 \uC758\uC874\uC131 (\uC124\uCE58 \uC548 \uB41C \uD658\uACBD\uC5D0\uC11C\uB3C4 \uBE4C\uB4DC \uAC00\uB2A5)\n            sharpModule = (await import(\"sharp\")).default;\n        }\n        catch {\n            console.warn(\"[storage] sharp not available \u2014 image optimization disabled\");\n            sharpModule = null;\n        }\n        return sharpModule;\n    }\n    return async (c) => {\n        const dir = storageDir || \"./uploads\";\n        const config = getImageConfig(dir);\n        const id = c.req.param(\"id\");\n        let meta = await storage.getMeta(id);\n        if (!meta && rawSql) {\n            try {\n                const rows = await rawSql(`SELECT storage_id, name, size, type, visibility FROM _system_files WHERE storage_id = $1 LIMIT 1`, [id]);\n                if (rows.length > 0) {\n                    const row = rows[0];\n                    meta = {\n                        id: row.storage_id,\n                        name: row.name,\n                        size: Number(row.size),\n                        type: row.type || \"application/octet-stream\",\n                        visibility: normalizeStorageVisibility(row.visibility),\n                    };\n                }\n            }\n            catch {\n                try {\n                    const rows = await rawSql(`SELECT storage_id, name, size, type FROM _system_files WHERE storage_id = $1 LIMIT 1`, [id]);\n                    if (rows.length > 0) {\n                        const row = rows[0];\n                        meta = {\n                            id: row.storage_id,\n                            name: row.name,\n                            size: Number(row.size),\n                            type: row.type || \"application/octet-stream\",\n                            visibility: \"private\",\n                        };\n                    }\n                }\n                catch {\n                    /* fallthrough to access decision */\n                }\n            }\n        }\n        const readAccess = decideStorageRouteReadAccess({\n            storageId: id,\n            meta,\n            grant: c.req.query(\"grant\"),\n            identity: getRouteIdentity(c),\n            accessOptions,\n        });\n        if (!readAccess.ok)\n            return c.json({ error: readAccess.error }, readAccess.status);\n        if (!meta)\n            return c.json({ error: \"Not found\" }, 404);\n        const isTransformable = TRANSFORMABLE_TYPES.has(meta.type);\n        const transformParams = isTransformable\n            ? parseTransformParams(c.req.query(\"w\"), c.req.query(\"h\"), c.req.query(\"f\"), c.req.query(\"q\"), c.req.query(\"fit\"))\n            : null;\n        const acceptHeader = c.req.header(\"accept\") || \"\";\n        const clientAcceptsWebp = acceptHeader.includes(\"image/webp\");\n        const isAutoWebp = !transformParams &&\n            isTransformable &&\n            clientAcceptsWebp &&\n            config.autoWebp &&\n            (meta.type === \"image/png\" || meta.type === \"image/jpeg\" || meta.type === \"image/jpg\");\n        if (!transformParams && !isAutoWebp) {\n            return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n        }\n        if (transformParams) {\n            if ((transformParams.w || transformParams.h) && !config.resize) {\n                return c.json({\n                    error: \"Image resize requires Pro plan\",\n                    code: \"PLAN_LIMIT\",\n                    upgrade: \"https://gencow.app/pricing\",\n                }, 403);\n            }\n            if (transformParams.f && !config.formats.includes(transformParams.f)) {\n                return c.json({\n                    error: `Format \"${transformParams.f}\" requires a higher plan`,\n                    code: \"PLAN_LIMIT\",\n                    upgrade: \"https://gencow.app/pricing\",\n                    allowed: { formats: config.formats },\n                }, 403);\n            }\n            if (transformParams.q && !config.qualityControl) {\n                return c.json({\n                    error: \"Quality control requires Pro plan\",\n                    code: \"PLAN_LIMIT\",\n                    upgrade: \"https://gencow.app/pricing\",\n                }, 403);\n            }\n            if (transformParams.fit && !config.resize) {\n                return c.json({\n                    error: \"Fit mode requires Pro plan\",\n                    code: \"PLAN_LIMIT\",\n                    upgrade: \"https://gencow.app/pricing\",\n                }, 403);\n            }\n        }\n        const sharp = await getSharp();\n        if (!sharp) {\n            return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n        }\n        const cacheKey = buildCacheKey(id, transformParams || {}, isAutoWebp, config.autoMaxWidth || undefined, config.autoQuality);\n        if (storage.kind === \"azure-blob\") {\n            const cached = await storage.getTransform?.(id, cacheKey);\n            if (cached) {\n                return serveTransformBuffer(c, cached.buffer, transformParams, isAutoWebp, meta, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n            }\n            if (storage.countTransforms && (await storage.countTransforms()) >= MAX_CACHE_ENTRIES) {\n                return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n            }\n            if (!storage.storeTransform) {\n                return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n            }\n            try {\n                await acquireTransformSlot();\n                try {\n                    const original = await storage.get(id);\n                    if (!original)\n                        return c.json({ error: \"Not found\" }, 404);\n                    let pipeline = sharp(original.buffer);\n                    if (transformParams?.w || transformParams?.h) {\n                        pipeline = pipeline.resize({\n                            width: transformParams.w || undefined,\n                            height: transformParams.h || undefined,\n                            fit: (transformParams.fit || \"cover\"),\n                            withoutEnlargement: true,\n                        });\n                    }\n                    else if (isAutoWebp && config.autoMaxWidth > 0) {\n                        pipeline = pipeline.resize({ width: config.autoMaxWidth, withoutEnlargement: true });\n                    }\n                    const outputFormat = transformParams?.f || (isAutoWebp ? \"webp\" : null);\n                    const quality = transformParams?.q ?? DEFAULT_QUALITY;\n                    if (outputFormat === \"webp\") {\n                        pipeline = pipeline.webp(isAutoWebp\n                            ? { quality: config.autoQuality, effort: AUTO_WEBP_EFFORT, alphaQuality: 100 }\n                            : { quality, alphaQuality: 100 });\n                    }\n                    else if (outputFormat === \"avif\") {\n                        pipeline = pipeline.avif({ quality });\n                    }\n                    else if (outputFormat === \"jpeg\" || outputFormat === \"jpg\") {\n                        pipeline = pipeline.jpeg({ quality, mozjpeg: true });\n                    }\n                    else if (outputFormat === \"png\") {\n                        pipeline = pipeline.png({ compressionLevel: 9 });\n                    }\n                    const transformed = await pipeline.toBuffer();\n                    const cacheStats = await recordStorageImageTransformSize(meteringOptions, transformed.byteLength, {\n                        sourceBytes: meta.size,\n                        format: outputFormat || meta.type.replace(/^image\\//, \"\"),\n                        autoWebp: isAutoWebp,\n                    });\n                    if (isAutoWebp && cacheStats.size >= meta.size) {\n                        return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n                    }\n                    const contentType = transformContentType(transformParams, isAutoWebp, meta);\n                    await storage.storeTransform(id, cacheKey, { buffer: transformed, type: contentType });\n                    return serveTransformBuffer(c, transformed, transformParams, isAutoWebp, meta, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n                }\n                finally {\n                    releaseTransformSlot();\n                }\n            }\n            catch (err) {\n                const msg = err instanceof Error ? err.message : String(err);\n                console.warn(`[storage] Image transform failed for ${id}: ${msg}`);\n                return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n            }\n        }\n        const cacheDir = path.join(dir, \".cache\");\n        const cachePath = path.join(cacheDir, cacheKey);\n        try {\n            await fs.access(cachePath);\n            return serveCachedFile(c, cachePath, transformParams, isAutoWebp, meta, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n        }\n        catch {\n            /* cache miss */\n        }\n        if ((await getCacheEntryCount(cacheDir)) >= MAX_CACHE_ENTRIES) {\n            return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n        }\n        try {\n            await acquireTransformSlot();\n            try {\n                await fs.mkdir(cacheDir, { recursive: true });\n                let pipeline = sharp(resolveStoredPath(meta, dir));\n                if (transformParams?.w || transformParams?.h) {\n                    pipeline = pipeline.resize({\n                        width: transformParams.w || undefined,\n                        height: transformParams.h || undefined,\n                        fit: (transformParams.fit || \"cover\"),\n                        withoutEnlargement: true,\n                    });\n                }\n                else if (isAutoWebp && config.autoMaxWidth > 0) {\n                    pipeline = pipeline.resize({ width: config.autoMaxWidth, withoutEnlargement: true });\n                }\n                const outputFormat = transformParams?.f || (isAutoWebp ? \"webp\" : null);\n                const quality = transformParams?.q ?? DEFAULT_QUALITY;\n                if (outputFormat === \"webp\") {\n                    pipeline = pipeline.webp(isAutoWebp\n                        ? { quality: config.autoQuality, effort: AUTO_WEBP_EFFORT, alphaQuality: 100 }\n                        : { quality, alphaQuality: 100 });\n                }\n                else if (outputFormat === \"avif\") {\n                    pipeline = pipeline.avif({ quality });\n                }\n                else if (outputFormat === \"jpeg\" || outputFormat === \"jpg\") {\n                    pipeline = pipeline.jpeg({ quality, mozjpeg: true });\n                }\n                else if (outputFormat === \"png\") {\n                    pipeline = pipeline.png({ compressionLevel: 9 });\n                }\n                await pipeline.toFile(cachePath);\n                const cacheStats = await recordStorageImageTransform(meteringOptions, cachePath, {\n                    sourceBytes: meta.size,\n                    format: outputFormat || meta.type.replace(/^image\\//, \"\"),\n                    autoWebp: isAutoWebp,\n                });\n                if (isAutoWebp && cacheStats.size >= meta.size) {\n                    await fs.unlink(cachePath).catch(() => { });\n                    return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n                }\n                return serveCachedFile(c, cachePath, transformParams, isAutoWebp, meta, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n            }\n            finally {\n                releaseTransformSlot();\n            }\n        }\n        catch (err) {\n            const msg = err instanceof Error ? err.message : String(err);\n            console.warn(`[storage] Image transform failed for ${id}: ${msg}`);\n            return serveOriginal(c, meta, dir, readAccess.disposition, readAccess.cacheScope, readAccess.cacheMaxAgeSeconds);\n        }\n    };\n    function getRouteIdentity(c) {\n        const auth = typeof c.get === \"function\" ? c.get(\"auth\") : null;\n        const user = auth && typeof auth === \"object\" ? auth.getUserIdentity?.() : null;\n        if (!user || typeof user !== \"object\")\n            return null;\n        const sessionId = [user.sessionId, user.session_id, user.sid].find((value) => typeof value === \"string\" && value.length > 0);\n        return { id: typeof user.id === \"string\" ? user.id : undefined, sessionId: sessionId ?? null };\n    }\n    function contentDisposition(disposition, name) {\n        const encoded = encodeURIComponent(name);\n        return `${disposition}; filename=\"${encoded}\"; filename*=UTF-8''${encoded}`;\n    }\n    async function serveOriginal(c, meta, dir, disposition = \"inline\", cacheScope = \"private\", privateCacheMaxAgeSeconds) {\n        const filePath = resolveStoredPath(meta, dir);\n        const servedDisposition = resolveStorageDisposition({ meta, requested: disposition, cacheScope });\n        const headers = {\n            \"Content-Type\": meta.type,\n            \"Content-Disposition\": contentDisposition(servedDisposition, meta.name),\n            \"Cache-Control\": storageCacheControl(cacheScope, privateCacheMaxAgeSeconds),\n        };\n        if (storage.kind === \"azure-blob\") {\n            const stored = await storage.get(meta.id);\n            if (!stored)\n                return c.json({ error: \"Not found\" }, 404);\n            headers[\"Content-Length\"] = String(stored.buffer.byteLength);\n            return c.body(stored.buffer, 200, headers);\n        }\n        if (typeof globalThis.Bun !== \"undefined\") {\n            const bunFile = Bun.file(filePath);\n            return new Response(bunFile, { headers });\n        }\n        const file = fsSync.readFileSync(filePath);\n        headers[\"Content-Length\"] = String(file.byteLength);\n        return c.body(file, 200, headers);\n    }\n    function serveCachedFile(c, cachePath, params, isAutoWebp, originalMeta, disposition = \"inline\", cacheScope = \"private\", privateCacheMaxAgeSeconds) {\n        const outputFormat = params?.f || (isAutoWebp ? \"webp\" : null);\n        const contentType = outputFormat\n            ? baseContentTypes[outputFormat] || `image/${outputFormat}`\n            : originalMeta.type;\n        const baseName = originalMeta.name.replace(/\\.[^.]+$/, \"\");\n        const ext = outputFormat || originalMeta.name.split(\".\").pop() || \"bin\";\n        const suffix = params?.w || params?.h ? `_${params.w || \"auto\"}x${params.h || \"auto\"}` : \"\";\n        const fileName = `${baseName}${suffix}.${ext}`;\n        const servedDisposition = resolveStorageDisposition({\n            meta: originalMeta,\n            requested: disposition,\n            cacheScope,\n        });\n        const headers = {\n            \"Content-Type\": contentType,\n            \"Content-Disposition\": contentDisposition(servedDisposition, fileName),\n            \"Cache-Control\": storageCacheControl(cacheScope, privateCacheMaxAgeSeconds),\n            ...(isAutoWebp ? { Vary: \"Accept\" } : {}),\n        };\n        if (typeof globalThis.Bun !== \"undefined\") {\n            const bunFile = Bun.file(cachePath);\n            return new Response(bunFile, { headers });\n        }\n        const file = fsSync.readFileSync(cachePath);\n        headers[\"Content-Length\"] = String(file.byteLength);\n        return c.body(file, 200, headers);\n    }\n    function transformContentType(params, isAutoWebp, originalMeta) {\n        const outputFormat = params?.f || (isAutoWebp ? \"webp\" : null);\n        return outputFormat ? baseContentTypes[outputFormat] || `image/${outputFormat}` : originalMeta.type;\n    }\n    function transformFileName(params, isAutoWebp, originalMeta) {\n        const outputFormat = params?.f || (isAutoWebp ? \"webp\" : null);\n        const baseName = originalMeta.name.replace(/\\.[^.]+$/, \"\");\n        const ext = outputFormat || originalMeta.name.split(\".\").pop() || \"bin\";\n        const suffix = params?.w || params?.h ? `_${params.w || \"auto\"}x${params.h || \"auto\"}` : \"\";\n        return `${baseName}${suffix}.${ext}`;\n    }\n    function serveTransformBuffer(c, buffer, params, isAutoWebp, originalMeta, disposition = \"inline\", cacheScope = \"private\", privateCacheMaxAgeSeconds) {\n        const servedDisposition = resolveStorageDisposition({\n            meta: originalMeta,\n            requested: disposition,\n            cacheScope,\n        });\n        const headers = {\n            \"Content-Type\": transformContentType(params, isAutoWebp, originalMeta),\n            \"Content-Disposition\": contentDisposition(servedDisposition, transformFileName(params, isAutoWebp, originalMeta)),\n            \"Cache-Control\": storageCacheControl(cacheScope, privateCacheMaxAgeSeconds),\n            \"Content-Length\": String(buffer.byteLength),\n            ...(isAutoWebp ? { Vary: \"Accept\" } : {}),\n        };\n        return c.body(buffer, 200, headers);\n    }\n}\nexport function storageUploadRoutes(storage) {\n    return async (c) => {\n        if (!storage.receiveUpload)\n            return c.json({ error: \"Direct upload is not supported\" }, 501);\n        const uploadId = c.req.param(\"uploadId\");\n        if (!uploadId)\n            return c.json({ error: \"uploadId required\" }, 400);\n        const preflight = preflightStorageApiUploadContentLength(c.req.header(\"content-length\"), storage.apiUploadMaxFileSizeBytes);\n        if (!preflight.ok)\n            return c.json({ error: preflight.error }, preflight.status);\n        try {\n            const contentType = c.req.header(\"content-type\") ?? null;\n            const body = typeof c.req.blob === \"function\"\n                ? await c.req.blob()\n                : new Blob([await c.req.arrayBuffer()], { type: contentType ?? undefined });\n            await storage.receiveUpload(uploadId, { body, contentType });\n            return c.json({ ok: true });\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            return c.json({ error: message }, 400);\n        }\n    };\n}\n", "import * as fs from \"fs/promises\";\nexport async function recordStorageImageTransform(options, cachePath, metric) {\n    const stats = await fs.stat(cachePath);\n    await recordStorageImageTransformSize(options, stats.size, metric);\n    return stats;\n}\nexport async function recordStorageImageTransformSize(options, outputBytes, metric) {\n    if (!options?.onImageTransform)\n        return { size: outputBytes };\n    try {\n        await options.onImageTransform({\n            ...metric,\n            transformCount: 1,\n            outputBytes,\n        });\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        console.warn(`[storage] image transform metering failed: ${msg.slice(0, 120)}`);\n    }\n    return { size: outputBytes };\n}\n", "import { verifyStorageReadGrant } from \"./storage-read-grant.js\";\nimport { isPublicStorageFile } from \"./storage-visibility.js\";\nexport function decideStorageRouteReadAccess(input) {\n    if (input.meta && isPublicStorageFile(input.meta)) {\n        return { ok: true, disposition: \"inline\", cacheScope: \"public\" };\n    }\n    const grant = input.grant;\n    if (!input.accessOptions?.requireReadGrant && !grant) {\n        if (!input.meta)\n            return { ok: false, status: 404, error: \"Not found\" };\n        return { ok: true, disposition: \"inline\", cacheScope: \"private\" };\n    }\n    if (!input.accessOptions?.appName || !input.accessOptions?.readGrantSecret) {\n        return { ok: false, status: 500, error: \"Storage read grant verification is not configured\" };\n    }\n    const nowMs = input.accessOptions.nowMs?.() ?? Date.now();\n    const verified = verifyStorageReadGrant({\n        token: grant,\n        appName: input.accessOptions.appName,\n        storageId: input.storageId,\n        secret: input.accessOptions.readGrantSecret,\n        nowMs,\n    });\n    if (!verified.ok) {\n        return { ok: false, status: 403, error: \"Storage read grant denied\" };\n    }\n    if (verified.payload.subject && input.identity?.id !== verified.payload.subject) {\n        return { ok: false, status: 403, error: \"Storage read grant denied\" };\n    }\n    if (verified.payload.sessionId && input.identity?.sessionId !== verified.payload.sessionId) {\n        return { ok: false, status: 403, error: \"Storage read grant denied\" };\n    }\n    if (!input.meta)\n        return { ok: false, status: 404, error: \"Not found\" };\n    const remainingSeconds = Math.max(0, Math.floor((verified.payload.exp - nowMs) / 1000));\n    return {\n        ok: true,\n        disposition: verified.payload.disposition,\n        cacheScope: \"private\",\n        cacheMaxAgeSeconds: remainingSeconds,\n    };\n}\n", "export function normalizeRuntimeStorageBackend(value) {\n    const normalized = value?.trim();\n    if (!normalized || normalized === \"local-filesystem\")\n        return \"local-filesystem\";\n    if (normalized === \"azure_blob\")\n        return \"azure_blob\";\n    throw new Error(`Unsupported GENCOW_STORAGE_BACKEND: ${normalized}`);\n}\nexport function isLegacyLocalFallbackEnabled(value) {\n    return value === \"1\" || value?.toLowerCase() === \"true\";\n}\nfunction readRequiredEnv(env, key) {\n    const value = env[key]?.trim();\n    if (value)\n        return value;\n    throw new Error(`${key} is required when GENCOW_STORAGE_BACKEND=azure_blob`);\n}\nexport function readAzureBlobRuntimeOptionsFromEnv(env) {\n    const auth = env.GENCOW_PLATFORM_STORAGE_AZURE_AUTH?.trim() || \"managed_identity\";\n    if (auth !== \"managed_identity\" && auth !== \"client_secret\") {\n        throw new Error(`Unsupported GENCOW_PLATFORM_STORAGE_AZURE_AUTH: ${auth}`);\n    }\n    const directUploadMode = env.GENCOW_PLATFORM_STORAGE_AZURE_DIRECT_UPLOAD?.trim() || \"api_route\";\n    if (directUploadMode !== \"api_route\" && directUploadMode !== \"azure_sas\") {\n        throw new Error(`Unsupported GENCOW_PLATFORM_STORAGE_AZURE_DIRECT_UPLOAD: ${directUploadMode}`);\n    }\n    return {\n        accountName: readRequiredEnv(env, \"GENCOW_PLATFORM_STORAGE_AZURE_ACCOUNT_NAME\"),\n        containerName: readRequiredEnv(env, \"GENCOW_PLATFORM_STORAGE_AZURE_CONTAINER\"),\n        endpoint: readRequiredEnv(env, \"GENCOW_PLATFORM_STORAGE_AZURE_ENDPOINT\").replace(/\\/+$/, \"\"),\n        prefix: env.GENCOW_PLATFORM_STORAGE_AZURE_PREFIX?.trim() || \"prod\",\n        auth,\n        directUploadMode,\n        clientId: env.GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_ID?.trim(),\n        tenantId: env.GENCOW_PLATFORM_STORAGE_AZURE_TENANT_ID?.trim(),\n        clientSecret: env.GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_SECRET,\n    };\n}\n", "import { DEFAULT_STORAGE_QUOTA, MAX_FILE_SIZE } from \"@gencow/core\";\nfunction parseByteLimit(env, key, fallback, options = {}) {\n    const raw = env[key]?.trim();\n    if (!raw)\n        return fallback;\n    const value = Number(raw);\n    if (!Number.isFinite(value))\n        return fallback;\n    const normalized = Math.floor(value);\n    if (normalized < 0)\n        return fallback;\n    if (normalized === 0 && !options.allowZero)\n        return fallback;\n    return normalized;\n}\nfunction parseLegacyQuotaBytes(env) {\n    const raw = env.GENCOW_STORAGE_QUOTA?.trim();\n    if (!raw)\n        return DEFAULT_STORAGE_QUOTA;\n    const value = Number(raw);\n    if (!Number.isFinite(value))\n        return DEFAULT_STORAGE_QUOTA;\n    const normalized = Math.floor(value);\n    if (normalized < 0)\n        return DEFAULT_STORAGE_QUOTA;\n    if (normalized === 0)\n        return 0;\n    return normalized * 1024 * 1024;\n}\nexport function resolveStorageLimitConfig(env = process.env) {\n    const legacyQuotaBytes = parseLegacyQuotaBytes(env);\n    const storageQuotaBytes = env.GENCOW_STORAGE_QUOTA_BYTES?.trim()\n        ? parseByteLimit(env, \"GENCOW_STORAGE_QUOTA_BYTES\", DEFAULT_STORAGE_QUOTA, { allowZero: true })\n        : legacyQuotaBytes;\n    const configuredMaxFileSizeBytes = parseByteLimit(env, \"GENCOW_STORAGE_MAX_FILE_SIZE_BYTES\", MAX_FILE_SIZE);\n    const maxFileSizeBytes = storageQuotaBytes > 0\n        ? Math.min(configuredMaxFileSizeBytes, storageQuotaBytes)\n        : configuredMaxFileSizeBytes;\n    const configuredApiUploadMaxFileSizeBytes = parseByteLimit(env, \"GENCOW_STORAGE_API_UPLOAD_MAX_FILE_SIZE_BYTES\", MAX_FILE_SIZE);\n    const apiUploadMaxFileSizeBytes = Math.min(configuredApiUploadMaxFileSizeBytes, maxFileSizeBytes);\n    return {\n        storageQuotaBytes,\n        maxFileSizeBytes,\n        apiUploadMaxFileSizeBytes,\n    };\n}\n", "import { getQueryDef, getRegisteredMutations, getRegisteredQueries } from \"@gencow/core\";\nimport { schemaToCodegenTypeLiteral } from \"./introspection/codegen-schema-types.js\";\nimport { collectProcedureRouteMaps } from \"./procedure-route-maps.js\";\nfunction isPlainObject(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value))\n        return false;\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === Object.prototype || prototype === null;\n}\nfunction toSerializableJson(value, seen = new WeakSet()) {\n    if (value === null || typeof value === \"string\" || typeof value === \"boolean\")\n        return value;\n    if (typeof value === \"number\")\n        return Number.isFinite(value) ? value : undefined;\n    if (typeof value !== \"object\")\n        return undefined;\n    if (seen.has(value))\n        return undefined;\n    seen.add(value);\n    if (Array.isArray(value)) {\n        const entries = [];\n        for (const entry of value) {\n            const serialized = toSerializableJson(entry, seen);\n            if (serialized === undefined)\n                return undefined;\n            entries.push(serialized);\n        }\n        return entries;\n    }\n    if (!isPlainObject(value))\n        return undefined;\n    const output = {};\n    for (const [key, entry] of Object.entries(value)) {\n        const serialized = toSerializableJson(entry, seen);\n        if (serialized === undefined)\n            return undefined;\n        output[key] = serialized;\n    }\n    return output;\n}\nfunction withSerializableSchema(descriptor, inputSchema, outputSchema) {\n    const serializableInput = toSerializableJson(inputSchema);\n    const serializableOutput = toSerializableJson(outputSchema);\n    return {\n        ...descriptor,\n        ...(serializableInput !== undefined ? { inputSchema: serializableInput } : {}),\n        ...(serializableOutput !== undefined ? { outputSchema: serializableOutput } : {}),\n    };\n}\nfunction toInvalidates(value) {\n    if (!Array.isArray(value))\n        return undefined;\n    const invalidates = value.filter((entry) => typeof entry === \"string\");\n    return invalidates.length > 0 ? invalidates : undefined;\n}\nfunction sortOperations(operations) {\n    const kindRank = { query: 0, mutation: 1 };\n    return [...operations].sort((a, b) => {\n        const byKind = kindRank[a.kind] - kindRank[b.kind];\n        if (byKind !== 0)\n            return byKind;\n        return a.key.localeCompare(b.key);\n    });\n}\nexport function collectAdminFunctionDetails(params = {}) {\n    const registeredQueries = params.getRegisteredQueries ?? getRegisteredQueries;\n    const queryDefFor = params.getQueryDef ?? getQueryDef;\n    const registeredMutations = params.getRegisteredMutations ?? getRegisteredMutations;\n    const procedureMaps = params.procedureMaps ?? (params.collectProcedureRouteMaps ?? collectProcedureRouteMaps)(params.appModule);\n    const operations = [];\n    for (const key of registeredQueries()) {\n        const queryDef = queryDefFor(key);\n        const inputSchema = queryDef?.argsSchema;\n        operations.push(withSerializableSchema({\n            key,\n            kind: \"query\",\n            transport: \"legacy\",\n            allowAnonymous: queryDef?.isPublic === true,\n            argsType: schemaToCodegenTypeLiteral(inputSchema),\n            outputType: \"unknown\",\n            hasInputSchema: inputSchema !== undefined,\n            hasOutputSchema: false,\n        }, inputSchema, undefined));\n    }\n    for (const mutation of registeredMutations()) {\n        const inputSchema = mutation.argsSchema;\n        operations.push(withSerializableSchema({\n            key: mutation.name,\n            kind: \"mutation\",\n            transport: \"legacy\",\n            allowAnonymous: mutation.isPublic === true,\n            invalidates: toInvalidates(mutation.invalidates),\n            argsType: schemaToCodegenTypeLiteral(inputSchema),\n            outputType: \"unknown\",\n            hasInputSchema: inputSchema !== undefined,\n            hasOutputSchema: false,\n        }, inputSchema, undefined));\n    }\n    for (const [key, procedure] of procedureMaps.queryProcedureMap.entries()) {\n        const inputSchema = procedure.inputSchema;\n        const outputSchema = procedure.outputSchema;\n        operations.push(withSerializableSchema({\n            key,\n            kind: \"query\",\n            transport: \"procedure\",\n            allowAnonymous: procedure.allowAnonymous === true,\n            argsType: schemaToCodegenTypeLiteral(inputSchema),\n            outputType: schemaToCodegenTypeLiteral(outputSchema),\n            hasInputSchema: inputSchema !== undefined,\n            hasOutputSchema: outputSchema !== undefined,\n        }, inputSchema, outputSchema));\n    }\n    for (const [key, procedure] of procedureMaps.mutationProcedureMap.entries()) {\n        const inputSchema = procedure.inputSchema;\n        const outputSchema = procedure.outputSchema;\n        operations.push(withSerializableSchema({\n            key,\n            kind: \"mutation\",\n            transport: \"procedure\",\n            allowAnonymous: procedure.allowAnonymous === true,\n            argsType: schemaToCodegenTypeLiteral(inputSchema),\n            outputType: schemaToCodegenTypeLiteral(outputSchema),\n            hasInputSchema: inputSchema !== undefined,\n            hasOutputSchema: outputSchema !== undefined,\n        }, inputSchema, outputSchema));\n    }\n    const sortedOperations = sortOperations(operations);\n    const queryCount = sortedOperations.filter((operation) => operation.kind === \"query\").length;\n    const mutationCount = sortedOperations.length - queryCount;\n    return {\n        operations: sortedOperations,\n        totals: {\n            queries: queryCount,\n            mutations: mutationCount,\n            operations: sortedOperations.length,\n        },\n    };\n}\n", "import * as cron from \"node-cron\";\nconst MAX_FAILED_JOBS = 100;\nexport function createScheduler(options) {\n    const timers = new Map();\n    const isDurable = !!(options?.persistJob && options?.removeJob);\n    const cronJobs = new Map();\n    const actions = new Map();\n    const cronInfo = [];\n    const pendingJobs = [];\n    const failedJobs = [];\n    let jobCounter = 0;\n    function generateId() {\n        return `job_${++jobCounter}_${Date.now()}`;\n    }\n    function recordFailure(id, action, args, error) {\n        failedJobs.push({\n            id,\n            action,\n            args,\n            error: error.message,\n            failedAt: new Date().toISOString(),\n        });\n        while (failedJobs.length > MAX_FAILED_JOBS) {\n            failedJobs.shift();\n        }\n    }\n    async function runRegisteredAction(action, args) {\n        const handler = actions.get(action);\n        if (!handler) {\n            console.error(`[scheduler] Action \"${action}\" not registered`);\n            throw new Error(`Action \"${action}\" not registered`);\n        }\n        await handler(args);\n        console.log(`[scheduler] Action \"${action}\" completed`);\n    }\n    function scheduleInMemory(id, ms, action, args, scheduleOpts, jobEntry) {\n        const timer = setTimeout(async () => {\n            jobEntry.status = \"running\";\n            try {\n                await runRegisteredAction(action, args);\n                jobEntry.status = \"completed\";\n            }\n            catch (error) {\n                const err = error instanceof Error ? error : new Error(String(error));\n                jobEntry.status = \"failed\";\n                console.error(`[scheduler] Action \"${action}\" failed (job: ${id}):`, err.message);\n                recordFailure(id, action, args, err);\n                if (scheduleOpts?.onError) {\n                    try {\n                        await runRegisteredAction(scheduleOpts.onError, {\n                            failedAction: action,\n                            failedJobId: id,\n                            error: err.message,\n                            originalArgs: args,\n                        });\n                        console.log(`[scheduler] onError handler \"${scheduleOpts.onError}\" completed for \"${action}\"`);\n                    }\n                    catch (onErrorErr) {\n                        console.error(`[scheduler] onError handler \"${scheduleOpts.onError}\" also failed:`, onErrorErr);\n                    }\n                }\n            }\n            finally {\n                timers.delete(id);\n                setTimeout(() => {\n                    const idx = pendingJobs.findIndex((job) => job.id === id);\n                    if (idx >= 0)\n                        pendingJobs.splice(idx, 1);\n                }, 60_000);\n            }\n        }, ms);\n        timers.set(id, timer);\n        console.log(`[scheduler] Scheduled \"${action}\" to run after ${ms}ms (id: ${id})${scheduleOpts?.onError ? ` [onError: ${scheduleOpts.onError}]` : \"\"}`);\n    }\n    return {\n        runAfter(ms, action, args, scheduleOpts) {\n            const id = scheduleOpts?.id ?? generateId();\n            const jobEntry = {\n                id,\n                action,\n                scheduledAt: new Date().toISOString(),\n                status: \"pending\",\n            };\n            pendingJobs.push(jobEntry);\n            if (isDurable) {\n                const runAt = new Date(Date.now() + ms);\n                const job = {\n                    id,\n                    action,\n                    args,\n                    runAt,\n                    onErrorAction: scheduleOpts?.onError,\n                    dedupeKey: scheduleOpts?.dedupeKey,\n                };\n                options.persistJob(job)\n                    .then(() => {\n                    console.log(`[scheduler] Persisted \"${action}\" to run at ${runAt.toISOString()} (id: ${id}, durable)` +\n                        `${scheduleOpts?.onError ? ` [onError: ${scheduleOpts.onError}]` : \"\"}`);\n                })\n                    .catch((err) => {\n                    console.error(`[scheduler] Failed to persist job ${id}:`, err instanceof Error ? err.message : err);\n                    if (options.persistFailureMode === \"fail-closed\") {\n                        jobEntry.status = \"failed\";\n                        recordFailure(id, action, args, err instanceof Error ? err : new Error(String(err)));\n                        return;\n                    }\n                    scheduleInMemory(id, ms, action, args, scheduleOpts, jobEntry);\n                });\n                return id;\n            }\n            scheduleInMemory(id, ms, action, args, scheduleOpts, jobEntry);\n            return id;\n        },\n        runAt(timestamp, action, args, options) {\n            const target = timestamp instanceof Date ? timestamp.getTime() : timestamp;\n            const ms = Math.max(0, target - Date.now());\n            return this.runAfter(ms, action, args, options);\n        },\n        cancel(jobId) {\n            if (isDurable) {\n                const idx = pendingJobs.findIndex((job) => job.id === jobId);\n                if (idx >= 0) {\n                    pendingJobs.splice(idx, 1);\n                    options.removeJob(jobId).catch((err) => {\n                        console.error(`[scheduler] Failed to remove persisted job ${jobId}:`, err instanceof Error ? err.message : err);\n                    });\n                    console.log(`[scheduler] Cancelled job ${jobId} (durable)`);\n                    return true;\n                }\n                options.removeJob(jobId).catch(() => { });\n                return false;\n            }\n            const timer = timers.get(jobId);\n            if (timer) {\n                clearTimeout(timer);\n                timers.delete(jobId);\n                const idx = pendingJobs.findIndex((job) => job.id === jobId);\n                if (idx >= 0)\n                    pendingJobs.splice(idx, 1);\n                console.log(`[scheduler] Cancelled job ${jobId}`);\n                return true;\n            }\n            return false;\n        },\n        cron(name, pattern, handler) {\n            if (cronJobs.has(name)) {\n                cronJobs.get(name).stop();\n            }\n            const task = cron.schedule(pattern, async () => {\n                console.log(`[scheduler] Cron \"${name}\" triggered`);\n                try {\n                    await handler();\n                }\n                catch (error) {\n                    const err = error instanceof Error ? error : new Error(String(error));\n                    console.error(`[scheduler] Cron \"${name}\" failed:`, err.message);\n                    recordFailure(`cron_${name}_${Date.now()}`, `cron:${name}`, {}, err);\n                }\n            });\n            cronJobs.set(name, task);\n            const infoEntry = { name, pattern, registeredAt: new Date().toISOString() };\n            const existingInfoIndex = cronInfo.findIndex((entry) => entry.name === name);\n            if (existingInfoIndex >= 0) {\n                cronInfo[existingInfoIndex] = infoEntry;\n            }\n            else {\n                cronInfo.push(infoEntry);\n            }\n            console.log(`[scheduler] Registered cron \"${name}\" with pattern \"${pattern}\"`);\n        },\n        registerAction(name, handler) {\n            actions.set(name, handler);\n        },\n        async executeActionStrict(name, args) {\n            await runRegisteredAction(name, args);\n        },\n        async executeAction(name, args) {\n            try {\n                await runRegisteredAction(name, args);\n            }\n            catch (error) {\n                const msg = error instanceof Error ? error.message : String(error);\n                console.error(`[scheduler] executeAction(\"${name}\") failed: ${msg}`);\n            }\n        },\n        getSchedulerInfo() {\n            return {\n                crons: [...cronInfo],\n                pendingJobs: [...pendingJobs],\n                failedJobs: [...failedJobs],\n            };\n        },\n    };\n}\n", "import { computeCronActionToken } from \"@gencow/core\";\nexport function buildActionTokenMap(params) {\n    const actionTokenMap = new Map();\n    for (const schedule of params.cronSchedules) {\n        if (params.internalProcedureMap &&\n            !params.internalProcedureMap.has(schedule.procedureName) &&\n            params.allowTransitionProcedureNames !== true) {\n            throw new Error(`Cron \"${schedule.name}\" references unknown internal procedure \"${schedule.procedureName}\"`);\n        }\n        const token = computeCronActionToken({\n            kind: \"declarative\",\n            deployId: params.deployId,\n            name: schedule.name,\n            pattern: schedule.pattern,\n            procedureName: schedule.procedureName,\n        });\n        actionTokenMap.set(token, schedule.procedureName);\n    }\n    return actionTokenMap;\n}\n", "import { isCronJobsBuilder } from \"@gencow/core\";\nfunction getApiCandidate(appModule) {\n    if (!appModule || typeof appModule !== \"object\")\n        return undefined;\n    const mod = appModule;\n    return mod.default !== undefined && mod.default !== null && typeof mod.default === \"object\"\n        ? mod.default\n        : appModule;\n}\nfunction isInternalProcedureDef(value) {\n    return (!!value &&\n        typeof value === \"object\" &&\n        value.kind === \"internal\" &&\n        typeof value.name === \"string\");\n}\nfunction assertNotUserProcedureRef(value, name) {\n    if (!value || typeof value !== \"object\")\n        return;\n    const kind = value.kind;\n    if (kind === \"query\" || kind === \"mutation\") {\n        throw new Error(`defineApi.crons job \"${name}\" must reference procedure.internal, not procedure.${kind}`);\n    }\n}\nfunction normalizeCronJob(job) {\n    if (\"procedureName\" in job && typeof job.procedureName === \"string\") {\n        return { name: job.name, pattern: job.pattern, procedureName: job.procedureName };\n    }\n    const action = job.action;\n    if (typeof action === \"function\") {\n        return null;\n    }\n    if (typeof action === \"string\") {\n        return { name: job.name, pattern: job.pattern, procedureName: action };\n    }\n    if (isInternalProcedureDef(action)) {\n        return { name: job.name, pattern: job.pattern, procedureName: action.name };\n    }\n    assertNotUserProcedureRef(action, job.name);\n    throw new Error(`defineApi.crons job \"${job.name}\" must use a string, inline handler, or procedure.internal ref`);\n}\nfunction normalizeLocalCronJob(job) {\n    if (\"procedureName\" in job && typeof job.procedureName === \"string\") {\n        return { name: job.name, pattern: job.pattern, action: job.procedureName };\n    }\n    const action = job.action;\n    if (typeof action === \"function\" || typeof action === \"string\") {\n        return { name: job.name, pattern: job.pattern, action };\n    }\n    if (isInternalProcedureDef(action)) {\n        return { name: job.name, pattern: job.pattern, action: action.name };\n    }\n    assertNotUserProcedureRef(action, job.name);\n    throw new Error(`defineApi.crons job \"${job.name}\" must use a string, inline handler, or procedure.internal ref`);\n}\nexport function hasDefineApiCrons(appModule) {\n    const apiCandidate = getApiCandidate(appModule);\n    return !!apiCandidate && typeof apiCandidate === \"object\" && \"crons\" in apiCandidate;\n}\nfunction getCronJobs(appModule) {\n    const apiCandidate = getApiCandidate(appModule);\n    if (!apiCandidate || typeof apiCandidate !== \"object\")\n        return [];\n    const crons = apiCandidate.crons;\n    if (!crons)\n        return [];\n    return flattenCronDefinitions(crons);\n}\nfunction flattenCronDefinitions(crons) {\n    if (!crons)\n        return [];\n    if (isCronJobsBuilder(crons))\n        return crons.getJobs();\n    if (Array.isArray(crons))\n        return crons.flatMap((job) => flattenCronDefinitions(job));\n    if (typeof crons === \"object\") {\n        if (\"name\" in crons && \"pattern\" in crons)\n            return [crons];\n        return Object.values(crons).flatMap((job) => flattenCronDefinitions(job));\n    }\n    return [];\n}\nexport function collectDefineApiCronJobs(appModule) {\n    return getCronJobs(appModule)\n        .map((job) => normalizeLocalCronJob(job))\n        .filter((job) => job !== null);\n}\nexport function collectCronSchedules(appModule) {\n    const schedules = getCronJobs(appModule)\n        .map((job) => normalizeCronJob(job))\n        .filter((job) => job !== null);\n    return schedules.sort((a, b) => a.name.localeCompare(b.name));\n}\n", "const VALID_METHODS = new Set([\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"]);\nfunction asHttpActionDef(value) {\n    if (!value || typeof value !== \"object\")\n        return undefined;\n    const d = value;\n    if (typeof d.method !== \"string\" || !VALID_METHODS.has(d.method))\n        return undefined;\n    if (typeof d.path !== \"string\" || d.path.length === 0)\n        return undefined;\n    if (typeof d.handler !== \"function\")\n        return undefined;\n    return {\n        method: d.method,\n        path: d.path,\n        isPublic: d.allowAnonymous === true || d.isPublic === true,\n        handler: d.handler,\n    };\n}\n/**\n * Reads `defineApi({ httpRoutes })` from the loaded app module (default export)\n * and returns the route defs in deterministic order (sorted by key) \u2014 no global registry.\n *\n * Parallel to `collectProcedureRouteMaps` for procedures. See\n * docs/specs/spec-http-route-api.md.\n */\nexport function collectHttpRoutesFromApi(appModule) {\n    if (!appModule || typeof appModule !== \"object\")\n        return [];\n    const mod = appModule;\n    const apiCandidate = mod.default !== undefined && mod.default !== null && typeof mod.default === \"object\"\n        ? mod.default\n        : appModule;\n    const httpRoutes = apiCandidate.httpRoutes;\n    if (!httpRoutes || typeof httpRoutes !== \"object\")\n        return [];\n    const entries = Object.entries(httpRoutes);\n    entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n    const defs = [];\n    for (const [, value] of entries) {\n        const def = asHttpActionDef(value);\n        if (def)\n            defs.push(def);\n    }\n    return defs;\n}\n", "export function isPlaceholderAiKey(key) {\n    return key.length < 20 || /^sk-\\.{2,}$/.test(key) || key.includes(\"your-key\") || key.includes(\"YOUR_KEY\");\n}\nexport function warnIfPlaceholderAiKey(env, logger = console) {\n    const key = env.OPENAI_API_KEY || \"\";\n    if (!key || !isPlaceholderAiKey(key)) {\n        return;\n    }\n    logger.warn(`[gencow] \u26A0\uFE0F  OPENAI_API_KEY\uAC00 \uD50C\uB808\uC774\uC2A4\uD640\uB354\uC785\uB2C8\uB2E4.`);\n    logger.warn(`[gencow]    \uD83D\uDCA1 \uB85C\uCEEC\uC5D0\uC11C AI \uAE30\uB2A5\uC744 \uD14C\uC2A4\uD2B8\uD558\uB824\uBA74 \uC2E4\uC81C \uD0A4\uB97C .env\uC5D0 \uC124\uC815\uD558\uC138\uC694.`);\n    logger.warn(`[gencow]    \u2601\uFE0F  \uD074\uB77C\uC6B0\uB4DC \uBC30\uD3EC(gencow deploy) \uD6C4\uC5D0\uB294 \uD0A4 \uC124\uC815 \uC5C6\uC774 \uC790\uB3D9 \uB3D9\uC791\uD569\uB2C8\uB2E4.`);\n}\n", "import { WORKFLOW_RESUME_ACTION_PREFIX } from \"@gencow/core\";\nimport { executeScheduledAction, ScheduledActionNotFoundError, } from \"./scheduled-action-resolver.js\";\nexport function isAuthorizedCronToken(token, internalToken, cronToken) {\n    if (!token)\n        return false;\n    return (Boolean(internalToken) && token === internalToken) || (Boolean(cronToken) && token === cronToken);\n}\nfunction canFallbackToStableSchedulerAction(action) {\n    return action.startsWith(`${WORKFLOW_RESUME_ACTION_PREFIX}.`);\n}\nexport function createInternalCronRouteHandler(params) {\n    const logger = params.logger ?? console;\n    return async (c) => {\n        const action = c.req.param(\"action\");\n        const token = c.req.header(\"X-Cron-Token\");\n        if (!isAuthorizedCronToken(token, params.internalToken, params.cronToken)) {\n            logger.warn(`[cron] unauthorized /internal/cron/${action} \u2014 invalid X-Cron-Token`);\n            return c.json({ ok: false, error: \"Unauthorized\" }, 403);\n        }\n        const body = (await c.req.json().catch(() => ({})));\n        const hasActionTokenMap = !!params.actionTokenMap && params.actionTokenMap.size > 0;\n        const maps = {\n            internalProcedureMap: params.internalProcedureMap ?? new Map(),\n            mutationProcedureMap: params.mutationProcedureMap ?? new Map(),\n            mutationMap: params.mutationMap,\n        };\n        try {\n            await executeScheduledAction({\n                action,\n                rawArgs: body.args ?? {},\n                actionTokenMap: params.actionTokenMap,\n                maps,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                invoker: \"cron\",\n                allowWireActionNameFallback: !hasActionTokenMap,\n            });\n            logger.log(`[cron] /internal/cron/${action}: completed \u2713`);\n            return c.json({ ok: true });\n        }\n        catch (error) {\n            if (!(error instanceof ScheduledActionNotFoundError)) {\n                const message = error instanceof Error ? error.message : String(error);\n                logger.error(`[cron] /internal/cron/${action}: failed:`, message);\n                return c.json({ ok: false, error: message }, 500);\n            }\n            if (hasActionTokenMap && !canFallbackToStableSchedulerAction(action)) {\n                logger.warn(`[cron] /internal/cron/${action}: action token not found`);\n                return c.json({ ok: false, error: `Action \"${action}\" not found` }, 404);\n            }\n            if (!params.scheduler) {\n                logger.warn(`[cron] /internal/cron/${action}: action not found and scheduler unavailable`);\n                return c.json({ ok: false, error: `Action \"${action}\" not found` }, 404);\n            }\n            try {\n                await params.executeWithTimeout(() => params.scheduler.executeActionStrict(action, body.args ?? {}), \"cron\", action);\n                logger.log(`[cron] /internal/cron/${action}: scheduler action completed \u2713`);\n                return c.json({ ok: true });\n            }\n            catch (error) {\n                const message = error instanceof Error ? error.message : String(error);\n                logger.error(`[cron] /internal/cron/${action}: scheduler action failed:`, message);\n                return c.json({ ok: false, error: message }, 500);\n            }\n        }\n    };\n}\nexport function registerInternalCronRoute(params) {\n    const logger = params.logger ?? console;\n    params.app.post(\"/internal/cron/:action\", createInternalCronRouteHandler({\n        mutationMap: params.mutationMap,\n        internalProcedureMap: params.internalProcedureMap,\n        mutationProcedureMap: params.mutationProcedureMap,\n        actionTokenMap: params.actionTokenMap,\n        scheduler: params.scheduler,\n        buildCtx: params.buildCtx,\n        parseArgs: params.parseArgs,\n        executeWithTimeout: params.executeWithTimeout,\n        internalToken: params.internalToken,\n        cronToken: params.cronToken,\n        logger,\n    }));\n    logger.log(\"[gencow] /internal/cron/:action endpoint registered (BaaS mode)\");\n}\n", "export class ScheduledActionNotFoundError extends Error {\n    status = 404;\n    constructor(action) {\n        super(`Scheduled action \"${action}\" not found`);\n        this.name = \"ScheduledActionNotFoundError\";\n    }\n}\nexport function resolveWireAction(wireAction, actionTokenMap) {\n    return actionTokenMap.get(wireAction);\n}\nexport function resolveScheduledAction(procedureName, maps) {\n    const internal = maps.internalProcedureMap.get(procedureName);\n    if (internal)\n        return { kind: \"internal\", name: procedureName, def: internal };\n    const procedureMutation = maps.mutationProcedureMap.get(procedureName);\n    if (procedureMutation)\n        return { kind: \"procedure.mutation\", name: procedureName, def: procedureMutation };\n    const legacyMutation = maps.mutationMap.get(procedureName);\n    if (legacyMutation)\n        return { kind: \"legacy.mutation\", name: procedureName, def: legacyMutation };\n    return undefined;\n}\nexport function resolveScheduledProcedureName(params) {\n    const actionTokenMap = params.actionTokenMap;\n    if (!actionTokenMap || actionTokenMap.size === 0)\n        return params.action;\n    const procedureName = resolveWireAction(params.action, actionTokenMap);\n    if (procedureName)\n        return procedureName;\n    if (params.allowWireActionNameFallback === true && resolveScheduledAction(params.action, params.maps)) {\n        return params.action;\n    }\n    throw new ScheduledActionNotFoundError(params.action);\n}\nasync function flushRealtime(ctx) {\n    const realtime = ctx.realtime;\n    if (realtime?._flushRefresh) {\n        await realtime._flushRefresh();\n    }\n    if (realtime?._flushRealtimeEvents) {\n        await realtime._flushRealtimeEvents();\n    }\n}\nexport async function executeScheduledAction(params) {\n    const procedureName = resolveScheduledProcedureName({\n        action: params.action,\n        actionTokenMap: params.actionTokenMap,\n        maps: params.maps,\n        allowWireActionNameFallback: params.allowWireActionNameFallback,\n    });\n    const resolved = resolveScheduledAction(procedureName, params.maps);\n    if (!resolved)\n        throw new ScheduledActionNotFoundError(procedureName);\n    const ctx = params.buildCtx();\n    const args = params.rawArgs ?? {};\n    const input = resolved.kind === \"legacy.mutation\" && params.parseArgs\n        ? params.parseArgs(resolved.def.argsSchema, args)\n        : args;\n    const result = await params.executeWithTimeout(() => resolved.def.handler(ctx, input), \"cron\", procedureName);\n    await flushRealtime(ctx);\n    return result;\n}\nexport function allResolvableProcedureNames(maps) {\n    return [\n        ...maps.internalProcedureMap.keys(),\n        ...maps.mutationProcedureMap.keys(),\n        ...maps.mutationMap.keys(),\n    ];\n}\nexport function allResolvableActionTokens(actionTokenMap) {\n    return [...actionTokenMap.keys()];\n}\n", "import { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { collectDefineApiCronJobs, hasDefineApiCrons } from \"./cron-schedule-collect.js\";\nimport { executeScheduledAction, ScheduledActionNotFoundError, } from \"./scheduled-action-resolver.js\";\nexport function resolveDeclarativeCronsFile(functionsPath, fileExists = existsSync) {\n    const cronsPath = resolve(functionsPath, \"crons.ts\");\n    const cronsPathJs = resolve(functionsPath, \"crons.js\");\n    return fileExists(cronsPath) ? cronsPath : fileExists(cronsPathJs) ? cronsPathJs : null;\n}\nexport function createDeclarativeCronHandler(params) {\n    if (typeof params.job.action === \"function\") {\n        return params.job.action;\n    }\n    const actionName = typeof params.job.action === \"string\"\n        ? params.job.action\n        : params.job.action.name;\n    if (!actionName) {\n        throw new Error(`Cron job \"${params.job.name}\" action must be a string or procedure.internal ref`);\n    }\n    const log = params.log ?? console;\n    const maps = {\n        internalProcedureMap: params.internalProcedureMap ?? new Map(),\n        mutationProcedureMap: params.mutationProcedureMap ?? new Map(),\n        mutationMap: params.mutationMap,\n    };\n    return async () => {\n        try {\n            await executeScheduledAction({\n                action: actionName,\n                rawArgs: {},\n                maps,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                invoker: \"cron\",\n            });\n            log.log(`[scheduler] Cron action \"${actionName}\" completed`);\n        }\n        catch (err) {\n            if (err instanceof ScheduledActionNotFoundError) {\n                await params.scheduler.executeActionStrict(actionName);\n                return;\n            }\n            const msg = err instanceof Error ? err.message : JSON.stringify(err, null, 2);\n            const stack = err instanceof Error ? err.stack : undefined;\n            log.error(`[scheduler] Cron action \"${actionName}\" failed:`, msg);\n            if (stack) {\n                log.error(stack);\n            }\n            throw err;\n        }\n    };\n}\nexport async function registerDeclarativeCronJobs(params) {\n    const log = params.log ?? console;\n    const cronsFile = resolveDeclarativeCronsFile(params.functionsPath, params.fileExists);\n    const hasApiCrons = params.appModule ? hasDefineApiCrons(params.appModule) : false;\n    if (params.isBaas) {\n        if (cronsFile || hasApiCrons) {\n            log.log(`[crons] BaaS mode \u2014 skipping local cron scheduling (Platform Cron Runner handles it)`);\n        }\n        return;\n    }\n    if (hasApiCrons) {\n        const jobs = collectDefineApiCronJobs(params.appModule);\n        for (const job of jobs) {\n            params.scheduler.cron(job.name, job.pattern, createDeclarativeCronHandler({\n                scheduler: params.scheduler,\n                job,\n                mutationMap: params.mutationMap,\n                internalProcedureMap: params.internalProcedureMap,\n                mutationProcedureMap: params.mutationProcedureMap,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                log,\n            }));\n        }\n        log.log(`[crons] Loaded ${jobs.length} declarative cron job(s) from defineApi.crons`);\n        return;\n    }\n    if (!cronsFile)\n        return;\n    const importModule = params.importModule ??\n        ((path) => import(path));\n    try {\n        const cronsModule = await importModule(cronsFile);\n        const cronsBuilder = cronsModule.default;\n        if (!cronsBuilder?.getJobs) {\n            return;\n        }\n        const jobs = cronsBuilder.getJobs();\n        log.log(`[crons] getJobs() returned ${jobs.length} job(s)`);\n        if (jobs.length === 0) {\n            log.warn(`[crons] crons.ts found but 0 jobs. Possible cause: cronJobs() builder calls (.interval/.daily/.cron) did not execute.`);\n            log.warn(`[crons] Check if crons.ts correctly calls crons.interval()/daily()/cron() before export default.`);\n        }\n        for (const job of jobs) {\n            params.scheduler.cron(job.name, job.pattern, createDeclarativeCronHandler({\n                scheduler: params.scheduler,\n                job,\n                mutationMap: params.mutationMap,\n                internalProcedureMap: params.internalProcedureMap,\n                mutationProcedureMap: params.mutationProcedureMap,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                log,\n            }));\n        }\n        log.log(`[crons] Loaded ${jobs.length} declarative cron job(s) from crons.ts`);\n    }\n    catch (e) {\n        log.error(`[crons] Failed to load crons.ts:`, e?.message);\n    }\n}\n", "export function createHttpActionRequest(c) {\n    return {\n        method: c.req.method,\n        url: c.req.url,\n        path: c.req.path,\n        params: c.req.param(),\n        query: c.req.query(),\n        headers: Object.fromEntries(c.req.raw.headers.entries()),\n        raw: c.req.raw,\n        json: () => c.req.json(),\n        formData: () => c.req.formData(),\n        arrayBuffer: () => c.req.arrayBuffer(),\n        text: () => c.req.text(),\n    };\n}\nexport function toHttpActionResponse(c, result) {\n    if (result instanceof Response) {\n        return result;\n    }\n    const status = result.status ?? 200;\n    const headers = result.headers ?? {};\n    if (result.body instanceof Response) {\n        return result.body;\n    }\n    if (result.body instanceof ArrayBuffer ||\n        result.body instanceof Uint8Array ||\n        (result.body && typeof result.body === \"object\" && \"byteLength\" in result.body)) {\n        return new Response(result.body, { status, headers });\n    }\n    return c.json(result.body ?? null, status, headers);\n}\nexport function registerHttpActions(params) {\n    const logger = params.logger ?? console;\n    for (const action of params.actions) {\n        const method = action.method.toLowerCase();\n        params.app[method](action.path, async (c) => {\n            const ctx = params.buildCtx(c, action);\n            if (!action.isPublic) {\n                const user = ctx.auth.getUserIdentity();\n                if (!user) {\n                    return c.json({ error: \"Authentication required\" }, 401);\n                }\n            }\n            const req = createHttpActionRequest(c);\n            try {\n                const result = await params.executeWithTimeout(() => action.handler(ctx, req), \"httpAction\", `${action.method} ${action.path}`);\n                return toHttpActionResponse(c, result);\n            }\n            catch (error) {\n                const message = error instanceof Error ? error.message : String(error);\n                logger.error(`[httpAction] ${action.method} ${action.path} error:`, message);\n                return c.json({ error: message }, 500);\n            }\n        });\n    }\n    if (params.actions.length > 0) {\n        logger.log(`[gencow] \uD83C\uDF10 httpActions: ${params.actions.map((a) => `${a.method} ${a.path}`).join(\", \")}`);\n    }\n}\n", "/**\n * Admin API \u2014 Dashboard\uC5D0\uC11C \uC0AC\uC6A9\uD558\uB294 \uAD00\uB9AC \uC5D4\uB4DC\uD3EC\uC778\uD2B8\n *\n * /_admin/tables      \u2192 \uD14C\uC774\uBE14 \uBAA9\uB85D + \uC2A4\uD0A4\uB9C8\n * /_admin/data/:table \u2192 \uD14C\uC774\uBE14 \uB370\uC774\uD130 CRUD\n * /_admin/functions   \u2192 \uB4F1\uB85D\uB41C query/mutation \uBAA9\uB85D\n * /_admin/functions/details \u2192 query/mutation \uC2E4\uD589\uC6A9 \uBA54\uD0C0\uB370\uC774\uD130\n * /_admin/logs        \u2192 \uB85C\uADF8 \uC870\uD68C\n * /_admin/files       \u2192 \uD30C\uC77C \uBAA9\uB85D\n * /_admin/scheduler   \u2192 \uC2A4\uCF00\uC904\uB7EC \uC0C1\uD0DC\n * /_admin/status      \u2192 \uC11C\uBC84 \uC0C1\uD0DC\n * /_admin/usage       \u2192 Usage Metering (\uD06C\uB808\uB527/\uC0AC\uC6A9\uB7C9, Platform \uD504\uB85D\uC2DC)\n */\nimport { timingSafeEqual } from \"crypto\";\nimport { Hono } from \"hono\";\nimport { assertAdminWriteBody, buildAdminCountStatement, buildAdminDeleteStatement, buildAdminInsertStatement, buildAdminSelectStatement, buildAdminUpdateStatement, loadAdminTableSchema, normalizeAdminLimit, normalizeAdminOffset, } from \"./admin-sql-guard.js\";\nimport { applyAdminAccessMiddleware } from \"./server-admin-access.js\";\nimport { registerAdminFileRoutes } from \"./server-admin-files.js\";\nimport { createAdminLogsHandler, detectLogSource, isVerboseLogEntry, subscribeToLogs, unsubscribeFromLogs, } from \"./server-admin-logs.js\";\nimport { registerAdminMaintenanceRoutes } from \"./server-admin-maintenance.js\";\nimport { redactAdminLogValue } from \"./server-admin-redaction.js\";\nimport { collectAdminFunctionDetails } from \"./admin-function-details.js\";\nimport { collectRuntimeOperationInventory } from \"./runtime-operation-inventory.js\";\nimport { buildDeprecatedRuntimeUsage, } from \"./server-deprecated-runtime-usage.js\";\nexport function collectAdminInvalidationQueryKeys(table, inventory) {\n    return [...inventory.legacyQueries, ...inventory.procedureQueries]\n        .map((operation) => operation.key)\n        .filter((key) => key.includes(table));\n}\nexport function createAdminRoutes(db, rawSql, driver, getCtx, storage, functionsPath, options) {\n    const admin = new Hono();\n    applyAdminAccessMiddleware(admin, options?.accessPolicy);\n    const adminDataRawSql = options?.adminDataRawSql ?? rawSql;\n    const requireDataAccessInternalToken = options?.requireDataAccessInternalToken ?? false;\n    const getOperationInventory = options?.getOperationInventory ?? (() => collectRuntimeOperationInventory());\n    const getFunctionDetails = options?.getFunctionDetails ?? (() => collectAdminFunctionDetails());\n    const getDeprecatedRuntimeUsage = options?.getDeprecatedRuntimeUsage ??\n        (() => buildDeprecatedRuntimeUsage({ inventory: getOperationInventory() }));\n    function isMatchingInternalToken(actual, expected) {\n        if (!actual || !expected)\n            return false;\n        const actualBuffer = Buffer.from(actual);\n        const expectedBuffer = Buffer.from(expected);\n        return actualBuffer.length === expectedBuffer.length && timingSafeEqual(actualBuffer, expectedBuffer);\n    }\n    function authorizeAdminDataRequest(c) {\n        if (!requireDataAccessInternalToken)\n            return null;\n        if (isMatchingInternalToken(c.req.header(\"X-Internal-Token\"), options?.dataAccessInternalToken)) {\n            return null;\n        }\n        return c.json({ error: \"Forbidden\" }, 403);\n    }\n    /**\n     * After any write, push updated data via realtime emit.\n     * Dashboard \uB370\uC774\uD130 \uD3B8\uC9D1 \uC2DC \uAD6C\uB3C5 \uC911\uC778 \uD074\uB77C\uC774\uC5B8\uD2B8\uC5D0\uAC8C \uC54C\uB9BC.\n     */\n    async function notifyTableChanged(table) {\n        const related = collectAdminInvalidationQueryKeys(table, getOperationInventory());\n        if (related.length > 0) {\n            try {\n                const ctx = getCtx();\n                for (const queryKey of related) {\n                    // \uC804\uCCB4 \uD14C\uC774\uBE14 \uB370\uC774\uD130 re-fetch\uB294 \uBD88\uD544\uC694 \u2014 \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 refetch\uD558\uB3C4\uB85D \uBE48 \uC2E0\uD638\n                    ctx.realtime.emit(queryKey, null);\n                }\n            }\n            catch (e) {\n                console.warn(\"[admin] realtime push failed:\", e);\n            }\n        }\n    }\n    // \u2500\u2500\u2500 Tables: \uD14C\uC774\uBE14 \uBAA9\uB85D + \uC2A4\uD0A4\uB9C8 \uC815\uBCF4 + FK \uAD00\uACC4 \u2500\u2500\u2500\u2500\u2500\n    admin.get(\"/tables\", async (c) => {\n        const denied = authorizeAdminDataRequest(c);\n        if (denied)\n            return denied;\n        // Database-per-Tenant: \uBAA8\uB4E0 \uD14C\uC774\uBE14\uC774 \uC571 \uC804\uC6A9 DB\uC758 public \uC2A4\uD0A4\uB9C8\uC5D0 \uC704\uCE58\n        const schemaName = \"public\";\n        const rows = await adminDataRawSql(`\n      SELECT table_name, column_name, data_type, is_nullable, column_default\n      FROM information_schema.columns\n      WHERE table_schema = $1\n      ORDER BY table_name, ordinal_position\n    `, [schemaName]);\n        // FK \uC815\uBCF4 \uC870\uD68C \u2014 \uC774 \uC2A4\uD0A4\uB9C8\uC758 \uBAA8\uB4E0 FK \uC81C\uC57D \uC870\uAC74\n        let fkRows = [];\n        try {\n            fkRows = await adminDataRawSql(`\n        SELECT\n          kcu.table_name   AS source_table,\n          kcu.column_name  AS source_column,\n          ccu.table_name   AS target_table,\n          ccu.column_name  AS target_column\n        FROM information_schema.table_constraints AS tc\n        JOIN information_schema.key_column_usage AS kcu\n          ON tc.constraint_name = kcu.constraint_name\n          AND tc.table_schema = kcu.table_schema\n        JOIN information_schema.constraint_column_usage AS ccu\n          ON tc.constraint_name = ccu.constraint_name\n          AND tc.table_schema = ccu.table_schema\n        WHERE tc.constraint_type = 'FOREIGN KEY'\n          AND tc.table_schema = $1\n      `, [schemaName]);\n        }\n        catch {\n            /* FK \uC870\uD68C \uC2E4\uD328 \uC2DC \uBE48 \uBC30\uC5F4 */\n        }\n        let primaryKeyRows = [];\n        try {\n            primaryKeyRows = await adminDataRawSql(`\n        SELECT kcu.table_name, kcu.column_name\n        FROM information_schema.table_constraints AS tc\n        JOIN information_schema.key_column_usage AS kcu\n          ON tc.constraint_name = kcu.constraint_name\n          AND tc.table_schema = kcu.table_schema\n          AND tc.table_name = kcu.table_name\n        WHERE tc.constraint_type = 'PRIMARY KEY'\n          AND tc.table_schema = $1\n        ORDER BY kcu.table_name, kcu.ordinal_position\n      `, [schemaName]);\n        }\n        catch {\n            /* PK \uC870\uD68C \uC2E4\uD328 \uC2DC \uAE30\uC874 \uC751\uB2F5 \uD615\uD0DC \uC720\uC9C0 */\n        }\n        // FK map: { \"session.user_id\" \u2192 { table: \"user\", column: \"id\" } }\n        const fkMap = new Map();\n        for (const fk of fkRows) {\n            fkMap.set(`${fk.source_table}.${fk.source_column}`, {\n                table: fk.target_table,\n                column: fk.target_column,\n            });\n        }\n        const primaryKeyMap = new Set(primaryKeyRows.map((row) => `${row.table_name}.${row.column_name}`));\n        const tables = {};\n        for (const r of rows) {\n            const tableName = r.table_name;\n            if (!tables[tableName])\n                tables[tableName] = [];\n            const ref = fkMap.get(`${tableName}.${r.column_name}`);\n            tables[tableName].push({\n                column: r.column_name,\n                type: r.data_type,\n                nullable: r.is_nullable === \"YES\",\n                default: r.column_default,\n                ...(primaryKeyMap.has(`${tableName}.${r.column_name}`) ? { primaryKey: true } : {}),\n                ...(ref ? { references: ref } : {}),\n            });\n        }\n        return c.json(tables);\n    });\n    // \u2500\u2500\u2500 Data: \uD14C\uC774\uBE14 \uB370\uC774\uD130 \uC870\uD68C (\uD398\uC774\uC9C0\uB124\uC774\uC158) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // Data-tab CRUD is a Gencow control-plane DB browser. It runs through the\n    // system executor after route-level authorization; tenant app auth is not enough.\n    admin.get(\"/data/:table\", async (c) => {\n        const denied = authorizeAdminDataRequest(c);\n        if (denied)\n            return denied;\n        const table = c.req.param(\"table\");\n        const limit = normalizeAdminLimit(c.req.query(\"limit\"));\n        const offset = normalizeAdminOffset(c.req.query(\"offset\"));\n        const orderBy = c.req.query(\"orderBy\");\n        const order = c.req.query(\"order\") || \"desc\";\n        try {\n            const schema = await loadAdminTableSchema(adminDataRawSql, table);\n            const select = buildAdminSelectStatement({ schema, orderBy, order, limit, offset });\n            const count = buildAdminCountStatement(schema);\n            const data = await adminDataRawSql(select.sql, select.params);\n            const countRows = await adminDataRawSql(count.sql, count.params);\n            return c.json({\n                data,\n                total: Number(countRows[0]?.count || 0),\n                limit,\n                offset,\n            });\n        }\n        catch (error) {\n            return c.json({ error: error.message }, 400);\n        }\n    });\n    // \u2500\u2500\u2500 Data: \uD589 \uCD94\uAC00 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.post(\"/data/:table\", async (c) => {\n        const denied = authorizeAdminDataRequest(c);\n        if (denied)\n            return denied;\n        const table = c.req.param(\"table\");\n        try {\n            const body = assertAdminWriteBody(await c.req.json());\n            const schema = await loadAdminTableSchema(adminDataRawSql, table);\n            const insert = buildAdminInsertStatement(schema, body);\n            const rows = await adminDataRawSql(insert.sql, insert.params);\n            await notifyTableChanged(schema.tableName);\n            return c.json(rows[0], 201);\n        }\n        catch (error) {\n            return c.json({ error: error.message }, 400);\n        }\n    });\n    // \u2500\u2500\u2500 Data: \uD589 \uC218\uC815 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.patch(\"/data/:table/:id\", async (c) => {\n        const denied = authorizeAdminDataRequest(c);\n        if (denied)\n            return denied;\n        const table = c.req.param(\"table\");\n        const id = c.req.param(\"id\");\n        try {\n            const body = assertAdminWriteBody(await c.req.json());\n            const schema = await loadAdminTableSchema(adminDataRawSql, table);\n            const update = buildAdminUpdateStatement(schema, body, id);\n            const rows = await adminDataRawSql(update.sql, update.params);\n            await notifyTableChanged(schema.tableName);\n            return c.json(rows[0]);\n        }\n        catch (error) {\n            return c.json({ error: error.message }, 400);\n        }\n    });\n    // \u2500\u2500\u2500 Data: \uD589 \uC0AD\uC81C \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.delete(\"/data/:table/:id\", async (c) => {\n        const denied = authorizeAdminDataRequest(c);\n        if (denied)\n            return denied;\n        const table = c.req.param(\"table\");\n        const id = c.req.param(\"id\");\n        try {\n            const schema = await loadAdminTableSchema(adminDataRawSql, table);\n            const statement = buildAdminDeleteStatement(schema, id);\n            await adminDataRawSql(statement.sql, statement.params);\n            await notifyTableChanged(schema.tableName);\n            return c.json({ success: true });\n        }\n        catch (error) {\n            return c.json({ error: error.message }, 400);\n        }\n    });\n    // \u2500\u2500\u2500 Functions: legacy + procedure query/mutation \uBAA9\uB85D \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.get(\"/functions\", (c) => {\n        const inventory = getOperationInventory();\n        const queries = inventory.legacyQueries.map((operation) => operation.key);\n        const mutations = inventory.legacyMutations.map((operation) => ({\n            name: operation.key,\n            isPublic: operation.allowAnonymous,\n        }));\n        const procedureQueries = inventory.procedureQueries.map((operation) => operation.key);\n        const procedureMutations = inventory.procedureMutations.map((operation) => operation.key);\n        return c.json({\n            queries,\n            mutations,\n            procedureQueries,\n            procedureMutations,\n            totals: {\n                queries: inventory.totalQueries,\n                mutations: inventory.totalMutations,\n            },\n        });\n    });\n    admin.get(\"/functions/details\", (c) => {\n        return c.json(getFunctionDetails());\n    });\n    admin.get(\"/deprecated-usage\", (c) => c.json(getDeprecatedRuntimeUsage()));\n    admin.get(\"/logs\", createAdminLogsHandler());\n    registerAdminFileRoutes({ admin, rawSql, storage });\n    admin.get(\"/scheduler\", async (c) => {\n        const info = options?.scheduler?.getSchedulerInfo?.() ?? {\n            crons: [],\n            pendingJobs: [],\n            failedJobs: [],\n        };\n        if (info.crons.length === 0 && functionsPath) {\n            try {\n                const { resolve } = await import(\"path\");\n                const { existsSync } = await import(\"fs\");\n                const cronsPath = resolve(functionsPath, \"crons.ts\");\n                const cronsPathJs = resolve(functionsPath, \"crons.js\");\n                const cronsFile = existsSync(cronsPath) ? cronsPath : existsSync(cronsPathJs) ? cronsPathJs : null;\n                if (cronsFile) {\n                    const cronsModule = await import(cronsFile);\n                    const cronsBuilder = cronsModule.default;\n                    if (cronsBuilder?.getJobs) {\n                        const jobs = cronsBuilder.getJobs();\n                        info.crons = jobs.map((job) => ({\n                            name: job.name,\n                            pattern: job.pattern,\n                            registeredAt: \"(declarative)\",\n                        }));\n                    }\n                }\n            }\n            catch (e) {\n                console.error(\"[scheduler] Fallback crons.ts read failed:\", e?.message);\n            }\n        }\n        return c.json(info);\n    });\n    // \u2500\u2500\u2500 Auth: \uB4F1\uB85D\uB41C \uC720\uC800 \uBAA9\uB85D (better-auth DB) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.get(\"/auth/users\", async (c) => {\n        try {\n            const search = c.req.query(\"search\") || \"\";\n            const page = Math.max(0, parseInt(c.req.query(\"page\") || \"0\", 10));\n            const limit = Math.min(200, Math.max(1, parseInt(c.req.query(\"limit\") || \"50\", 10)));\n            const offset = page * limit;\n            // Build WHERE clause for search\n            const whereClause = search ? `WHERE LOWER(\"name\") LIKE LOWER($1) OR LOWER(\"email\") LIKE LOWER($1)` : \"\";\n            const searchParams = search ? [`%${search}%`] : [];\n            const countResult = await rawSql(`SELECT COUNT(*) as \"total\" FROM \"user\" ${whereClause}`, searchParams);\n            const total = parseInt(String(countResult[0]?.total || \"0\"), 10);\n            const limitIndex = search ? 2 : 1;\n            const users = await rawSql(`SELECT id, name, email, email_verified as \"emailVerified\", image, created_at as \"createdAt\", updated_at as \"updatedAt\" FROM \"user\" ${whereClause} ORDER BY created_at DESC LIMIT $${limitIndex} OFFSET $${limitIndex + 1}`, [...searchParams, limit, offset]);\n            return c.json({ data: users, total, page, limit });\n        }\n        catch {\n            // user \uD14C\uC774\uBE14\uC774 \uC544\uC9C1 \uC5C6\uB294 \uACBD\uC6B0\n            return c.json({ data: [], total: 0, page: 0, limit: 50 });\n        }\n    });\n    // \u2500\u2500\u2500 Status: \uC11C\uBC84 \uC0C1\uD0DC \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    admin.get(\"/status\", async (c) => {\n        // DB \uBC84\uC804 \uC870\uD68C\n        let dbVersion = \"unknown\";\n        try {\n            const vRows = await rawSql(\"SELECT version()\");\n            dbVersion = vRows[0]?.version || \"unknown\";\n        }\n        catch {\n            /* PGlite\uC5D0\uC11C \uC2E4\uD328\uD560 \uC218 \uC788\uC74C */\n        }\n        // \uC124\uCE58\uB41C \uD655\uC7A5 \uBAA9\uB85D\n        let extensions = [];\n        try {\n            const extRows = await rawSql(\"SELECT extname, extversion FROM pg_extension ORDER BY extname\");\n            extensions = extRows.map((r) => ({\n                name: r.extname,\n                version: r.extversion,\n            }));\n        }\n        catch {\n            /* pg_extension \uC870\uD68C \uBD88\uAC00 \uC2DC \uBE48 \uBC30\uC5F4 */\n        }\n        return c.json({\n            uptime: process.uptime(),\n            memory: process.memoryUsage(),\n            platform: {\n                runtime: typeof globalThis.Bun !== \"undefined\"\n                    ? `Bun v${globalThis.Bun.version}`\n                    : `Node.js ${process.version}`,\n                db: driver === \"postgres\" ? \"PostgreSQL\" : \"PGlite (embedded PostgreSQL)\",\n                dbVersion,\n                extensions,\n                framework: \"Hono\",\n                orm: \"Drizzle\",\n            },\n        });\n    });\n    // \u2500\u2500\u2500 Usage: \uD06C\uB808\uB527/\uC0AC\uC6A9\uB7C9 (Platform \uD504\uB85D\uC2DC) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // HMAC Internal Token\uC73C\uB85C Platform\uC758 \uC77D\uAE30 \uC804\uC6A9 API \uD638\uCD9C\n    admin.get(\"/usage\", async (c) => {\n        const meteringUrl = process.env.GENCOW_METERING_URL;\n        const internalToken = process.env.GENCOW_INTERNAL_TOKEN;\n        // BaaS \uBAA8\uB4DC\uAC00 \uC544\uB2C8\uBA74 (\uB85C\uCEEC dev) \uBE48 \uC751\uB2F5\n        if (!meteringUrl || !internalToken) {\n            return c.json({\n                available: false,\n                message: \"Usage metering is only available in deployed mode\",\n            });\n        }\n        try {\n            // Blue-Green fallback: primary \uC2E4\uD328 \uC2DC \uB300\uCCB4 \uC2AC\uB86F \uD3EC\uD2B8 \uC2DC\uB3C4\n            let res = await fetch(`${meteringUrl}/internal/usage/by-token`, {\n                headers: { \"X-Internal-Token\": internalToken },\n            }).catch(() => null);\n            if (!res || !res.ok) {\n                const altUrl = process.env.GENCOW_METERING_URL_ALT;\n                if (altUrl) {\n                    // .catch \uD544\uC218: ALT URL\uB3C4 \uC5F0\uACB0 \uBD88\uAC00 \uC2DC uncaught exception \uBC29\uC9C0\n                    // @see docs/specs/spec-app-status-centralization.md \u00A7Phase 0\n                    res = await fetch(`${altUrl}/internal/usage/by-token`, {\n                        headers: { \"X-Internal-Token\": internalToken },\n                    }).catch(() => null);\n                }\n            }\n            if (!res || !res.ok)\n                throw new Error(\"Platform unreachable\");\n            const data = (await res.json());\n            return c.json({ available: true, ...data });\n        }\n        catch (e) {\n            const errMsg = redactAdminLogValue(e);\n            console.error(`[admin/usage] Failed to fetch usage: ${errMsg} (primary=${redactAdminLogValue(meteringUrl)}, alt=${redactAdminLogValue(process.env.GENCOW_METERING_URL_ALT || \"none\")})`);\n            return c.json({ available: false, error: \"Failed to fetch usage data\" }, 500);\n        }\n    });\n    // \u2500\u2500 POST /_admin/restart \u2014 \uC11C\uBC84 \uC7AC\uC2DC\uC791 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // \uC751\uB2F5 \uD6C4 500ms \uC9C0\uC5F0 \u2192 process.exit(0)\n    // \uB85C\uCEEC: gencow dev\uAC00 \uD56B \uB9AC\uB85C\uB4DC\uB85C \uC7AC\uC2DC\uC791\n    // BaaS: provisioner\uAC00 \uD504\uB85C\uC138\uC2A4 \uC7AC\uC2DC\uC791\n    admin.post(\"/restart\", async (c) => {\n        setTimeout(() => {\n            console.log(\"[admin] Restarting server...\");\n            process.exit(0);\n        }, 500);\n        return c.json({ ok: true, message: \"Server restarting...\" });\n    });\n    registerAdminMaintenanceRoutes({ admin, rawSql, getCtx, functionsPath });\n    // NOTE: POST /update-env \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB294 \uC81C\uAC70\uB428 (2026-04-12).\n    // \uC774\uBBF8\uC9C0 \uC124\uC815\uC774 \uD30C\uC77C \uAE30\uBC18(.image-config.json)\uC73C\uB85C \uC804\uD658\uB418\uC5B4 env \uC804\uD30C \uBD88\uD544\uC694.\n    // \uBD84\uC11D\uC11C: analysis-image-config-architecture.md\n    return admin;\n}\nexport { detectLogSource, isVerboseLogEntry, subscribeToLogs, unsubscribeFromLogs };\n", "const IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\nexport function isAdminIdentifier(value) {\n    return typeof value === \"string\" && IDENTIFIER_RE.test(value);\n}\nexport function validateAdminIdentifier(value, kind) {\n    if (!isAdminIdentifier(value)) {\n        throw new Error(`Invalid ${kind} identifier`);\n    }\n    return value;\n}\nexport function quoteAdminIdentifier(identifier) {\n    return `\"${validateAdminIdentifier(identifier, \"SQL\")}\"`;\n}\nexport async function loadAdminTableSchema(rawSql, table) {\n    const tableName = validateAdminIdentifier(table, \"table\");\n    const rows = await rawSql(`SELECT column_name\n     FROM information_schema.columns\n     WHERE table_schema = $1 AND table_name = $2\n     ORDER BY ordinal_position`, [\"public\", tableName]);\n    const columns = new Set(rows.map((row) => row.column_name).filter(isAdminIdentifier));\n    if (columns.size === 0) {\n        throw new Error(`Unknown table: ${tableName}`);\n    }\n    const primaryKeyRows = await rawSql(`SELECT kcu.column_name\n     FROM information_schema.table_constraints AS tc\n     JOIN information_schema.key_column_usage AS kcu\n       ON tc.constraint_name = kcu.constraint_name\n      AND tc.table_schema = kcu.table_schema\n      AND tc.table_name = kcu.table_name\n     WHERE tc.table_schema = $1\n       AND tc.table_name = $2\n       AND tc.constraint_type = 'PRIMARY KEY'\n     ORDER BY kcu.ordinal_position`, [\"public\", tableName]);\n    const primaryKeyColumns = primaryKeyRows\n        .map((row) => row.column_name)\n        .filter((column) => isAdminIdentifier(column) && columns.has(column));\n    return {\n        tableName,\n        quotedTable: quoteAdminIdentifier(tableName),\n        columns,\n        orderedColumns: [...columns],\n        primaryKeyColumns,\n    };\n}\nexport function resolveAdminColumn(schema, column, kind = \"column\") {\n    const columnName = validateAdminIdentifier(column, kind);\n    if (!schema.columns.has(columnName)) {\n        throw new Error(`Unknown ${kind}: ${columnName}`);\n    }\n    return quoteAdminIdentifier(columnName);\n}\nexport function normalizeAdminLimit(value) {\n    const parsed = Number.parseInt(value || \"50\", 10);\n    if (!Number.isFinite(parsed))\n        return 50;\n    return Math.min(200, Math.max(1, parsed));\n}\nexport function normalizeAdminOffset(value) {\n    const parsed = Number.parseInt(value || \"0\", 10);\n    if (!Number.isFinite(parsed))\n        return 0;\n    return Math.max(0, parsed);\n}\nexport function normalizeAdminOrder(value) {\n    return value?.toLowerCase() === \"asc\" ? \"ASC\" : \"DESC\";\n}\nexport function assertAdminWriteBody(body) {\n    if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n        throw new Error(\"Request body must be an object\");\n    }\n    return body;\n}\nexport function buildAdminSelectStatement(params) {\n    const orderColumns = params.orderBy\n        ? [resolveAdminColumn(params.schema, params.orderBy, \"orderBy\")]\n        : params.schema.columns.has(\"id\")\n            ? [resolveAdminColumn(params.schema, \"id\", \"default orderBy\")]\n            : params.schema.primaryKeyColumns.length > 0\n                ? params.schema.primaryKeyColumns.map((column) => resolveAdminColumn(params.schema, column, \"primary key\"))\n                : [resolveAdminColumn(params.schema, params.schema.orderedColumns[0], \"default orderBy\")];\n    const direction = normalizeAdminOrder(params.order);\n    return {\n        sql: `SELECT * FROM ${params.schema.quotedTable} ORDER BY ${orderColumns.map((column) => `${column} ${direction}`).join(\", \")} LIMIT $1 OFFSET $2`,\n        params: [params.limit, params.offset],\n    };\n}\nexport function buildAdminCountStatement(schema) {\n    return { sql: `SELECT COUNT(*) as count FROM ${schema.quotedTable}` };\n}\nexport function buildAdminInsertStatement(schema, body) {\n    const keys = Object.keys(body);\n    if (keys.length === 0) {\n        throw new Error(\"Insert body must include at least one column\");\n    }\n    const columns = keys.map((key) => resolveAdminColumn(schema, key)).join(\", \");\n    const placeholders = keys.map((_, index) => `$${index + 1}`).join(\", \");\n    return {\n        sql: `INSERT INTO ${schema.quotedTable} (${columns}) VALUES (${placeholders}) RETURNING *`,\n        params: keys.map((key) => body[key]),\n    };\n}\nexport function buildAdminUpdateStatement(schema, body, id) {\n    const keys = Object.keys(body);\n    if (keys.length === 0) {\n        throw new Error(\"Update body must include at least one column\");\n    }\n    const sets = keys.map((key, index) => `${resolveAdminColumn(schema, key)} = $${index + 1}`).join(\", \");\n    const idColumn = resolveAdminColumn(schema, \"id\", \"id column\");\n    return {\n        sql: `UPDATE ${schema.quotedTable} SET ${sets} WHERE ${idColumn} = $${keys.length + 1} RETURNING *`,\n        params: [...keys.map((key) => body[key]), id],\n    };\n}\nexport function buildAdminDeleteStatement(schema, id) {\n    const idColumn = resolveAdminColumn(schema, \"id\", \"id column\");\n    return {\n        sql: `DELETE FROM ${schema.quotedTable} WHERE ${idColumn} = $1`,\n        params: [id],\n    };\n}\n", "export function resolveAdminSurfaceAccess(params) {\n    return params.isBaas || params.isPlatform ? \"local-only\" : \"public\";\n}\nexport function createAdminAccessPolicy(access) {\n    if (access === \"disabled\") {\n        return { mode: \"disabled\" };\n    }\n    return { mode: \"local-dev\", allowPublicDevHost: access === \"public\" };\n}\nexport function shouldAllowAdminSurfaceHost(hostHeader) {\n    const raw = (hostHeader || \"\").trim().toLowerCase();\n    if (raw === \"::1\")\n        return true;\n    const bracketedIpv6 = raw.match(/^\\[([^\\]]+)\\](?::(\\d{1,5}))?$/);\n    if (bracketedIpv6) {\n        const [, host, port] = bracketedIpv6;\n        if (port && Number(port) > 65535)\n            return false;\n        return host === \"::1\";\n    }\n    const hostPort = raw.match(/^([^:]+)(?::(\\d{1,5}))?$/);\n    if (!hostPort)\n        return false;\n    const [, host, port] = hostPort;\n    if (port && Number(port) > 65535)\n        return false;\n    return host === \"localhost\" || host === \"127.0.0.1\";\n}\nexport function createAdminAccessMiddleware(policy) {\n    return async (c, next) => {\n        if (policy.mode === \"disabled\") {\n            return c.json({ error: \"Not found\" }, 404);\n        }\n        if (policy.mode === \"local-dev\") {\n            if (policy.allowPublicDevHost || shouldAllowAdminSurfaceHost(c.req.header(\"host\"))) {\n                return next();\n            }\n            return c.json({ error: \"Not found\" }, 404);\n        }\n        const allowed = await policy.authorize?.(c);\n        if (!allowed) {\n            return c.json({ error: \"Forbidden\" }, 403);\n        }\n        return next();\n    };\n}\nexport function applyAdminAccessMiddleware(registrar, policy) {\n    if (!policy) {\n        return;\n    }\n    if (!registrar.use) {\n        throw new Error(\"Admin access policy requires route registrar use()\");\n    }\n    registrar.use(\"*\", createAdminAccessMiddleware(policy));\n}\n", "export class AdminFilesFilterError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"AdminFilesFilterError\";\n    }\n}\nconst TYPE_FAMILIES = new Set([\n    \"image\",\n    \"audio\",\n    \"video\",\n    \"document\",\n    \"archive\",\n    \"text\",\n    \"other\",\n]);\nconst UPLOADED_BY_VALUES = new Set([\"dashboard\", \"cli\", \"api\"]);\nconst MIME_PATTERN = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/i;\nconst MIME_PREFIX_PATTERN = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/$/i;\nconst MAX_SEARCH_LENGTH = 100;\nconst MAX_MIME_LENGTH = 128;\nconst DOCUMENT_MIME_TYPES = new Set([\n    \"application/pdf\",\n    \"application/json\",\n    \"application/msword\",\n    \"application/vnd.ms-excel\",\n    \"application/vnd.ms-powerpoint\",\n    \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n    \"application/x-hwp\",\n    \"application/haansofthwp\",\n]);\nconst ARCHIVE_MIME_TYPES = new Set([\n    \"application/zip\",\n    \"application/x-zip-compressed\",\n    \"application/gzip\",\n    \"application/x-gzip\",\n    \"application/x-tar\",\n    \"application/x-rar-compressed\",\n    \"application/vnd.rar\",\n    \"application/x-7z-compressed\",\n]);\nfunction firstString(value) {\n    if (typeof value === \"string\")\n        return value;\n    if (Array.isArray(value) && typeof value[0] === \"string\")\n        return value[0];\n    return undefined;\n}\nfunction normalizeMime(value, errorMessage) {\n    const normalized = value.trim().toLowerCase();\n    if (normalized.length === 0 || normalized.length > MAX_MIME_LENGTH || !MIME_PATTERN.test(normalized)) {\n        throw new AdminFilesFilterError(errorMessage);\n    }\n    return normalized;\n}\nfunction normalizeMimePrefix(value) {\n    const normalized = value.trim().toLowerCase();\n    if (normalized.length === 0 ||\n        normalized.length > MAX_MIME_LENGTH ||\n        !MIME_PREFIX_PATTERN.test(normalized)) {\n        throw new AdminFilesFilterError(\"Invalid files MIME prefix filter\");\n    }\n    return normalized;\n}\nexport function parseAdminFilesFilters(input) {\n    const filters = {};\n    const visibility = firstString(input.visibility)?.trim();\n    if (visibility && visibility !== \"all\") {\n        if (visibility !== \"private\" && visibility !== \"public\") {\n            throw new AdminFilesFilterError(\"Invalid files visibility filter\");\n        }\n        filters.visibility = visibility;\n    }\n    const typeFamily = firstString(input.typeFamily)?.trim();\n    if (typeFamily && typeFamily !== \"all\") {\n        if (!TYPE_FAMILIES.has(typeFamily)) {\n            throw new AdminFilesFilterError(\"Invalid files type filter\");\n        }\n        filters.typeFamily = typeFamily;\n    }\n    const mime = firstString(input.mime);\n    if (mime?.trim())\n        filters.mime = normalizeMime(mime, \"Invalid files MIME filter\");\n    const mimePrefix = firstString(input.mimePrefix);\n    if (mimePrefix?.trim())\n        filters.mimePrefix = normalizeMimePrefix(mimePrefix);\n    const q = firstString(input.q)?.trim();\n    if (q) {\n        if (q.length > MAX_SEARCH_LENGTH) {\n            throw new AdminFilesFilterError(\"Invalid files search filter\");\n        }\n        filters.q = q;\n    }\n    const uploadedBy = firstString(input.uploadedBy)?.trim();\n    if (uploadedBy && uploadedBy !== \"all\") {\n        if (!UPLOADED_BY_VALUES.has(uploadedBy)) {\n            throw new AdminFilesFilterError(\"Invalid files uploaded-by filter\");\n        }\n        filters.uploadedBy = uploadedBy;\n    }\n    return filters;\n}\nexport function getAdminFilesFilterFingerprint(filters) {\n    const entries = Object.entries(filters).filter(([, value]) => value !== undefined && value !== \"\");\n    if (entries.length === 0)\n        return null;\n    entries.sort(([left], [right]) => left.localeCompare(right));\n    return JSON.stringify(Object.fromEntries(entries));\n}\nexport function getStorageMimeFamily(contentType) {\n    const normalized = (contentType || \"application/octet-stream\").trim().toLowerCase();\n    if (normalized.startsWith(\"image/\"))\n        return \"image\";\n    if (normalized.startsWith(\"audio/\"))\n        return \"audio\";\n    if (normalized.startsWith(\"video/\"))\n        return \"video\";\n    if (normalized.startsWith(\"text/\"))\n        return \"text\";\n    if (DOCUMENT_MIME_TYPES.has(normalized) || normalized.includes(\"officedocument\"))\n        return \"document\";\n    if (ARCHIVE_MIME_TYPES.has(normalized))\n        return \"archive\";\n    return \"other\";\n}\nfunction escapeLike(value) {\n    return value.replace(/[\\\\%_]/g, (match) => `\\\\${match}`);\n}\nfunction buildFamilyClauses(family, pushParam) {\n    const typeExpr = \"LOWER(COALESCE(type, 'application/octet-stream'))\";\n    if (family === \"image\" || family === \"audio\" || family === \"video\" || family === \"text\") {\n        return [`${typeExpr} LIKE ${pushParam(`${family}/%`)}`];\n    }\n    const docClauses = [\n        ...Array.from(DOCUMENT_MIME_TYPES).map((mime) => `${typeExpr} = ${pushParam(mime)}`),\n        `${typeExpr} LIKE ${pushParam(\"%officedocument%\")}`,\n    ];\n    const archiveClauses = Array.from(ARCHIVE_MIME_TYPES).map((mime) => `${typeExpr} = ${pushParam(mime)}`);\n    if (family === \"document\")\n        return [`(${docClauses.join(\" OR \")})`];\n    if (family === \"archive\")\n        return [`(${archiveClauses.join(\" OR \")})`];\n    return [\n        `NOT (${[\n            `${typeExpr} LIKE ${pushParam(\"image/%\")}`,\n            `${typeExpr} LIKE ${pushParam(\"audio/%\")}`,\n            `${typeExpr} LIKE ${pushParam(\"video/%\")}`,\n            `${typeExpr} LIKE ${pushParam(\"text/%\")}`,\n            ...docClauses,\n            ...archiveClauses,\n        ].join(\" OR \")})`,\n    ];\n}\nexport function buildAdminFilesFilterSql(filters, options) {\n    const clauses = [];\n    const params = [];\n    const pushParam = (value) => {\n        params.push(value);\n        return `$${options.startingParamIndex + params.length - 1}`;\n    };\n    if (filters.visibility) {\n        if (options.hasVisibilityColumn) {\n            clauses.push(`visibility = ${pushParam(filters.visibility)}`);\n        }\n        else if (filters.visibility === \"public\") {\n            clauses.push(\"1 = 0\");\n        }\n    }\n    if (filters.typeFamily)\n        clauses.push(...buildFamilyClauses(filters.typeFamily, pushParam));\n    if (filters.mime) {\n        clauses.push(`LOWER(COALESCE(type, 'application/octet-stream')) = ${pushParam(filters.mime)}`);\n    }\n    if (filters.mimePrefix) {\n        clauses.push(`LOWER(COALESCE(type, 'application/octet-stream')) LIKE ${pushParam(`${filters.mimePrefix}%`)}`);\n    }\n    if (filters.q) {\n        const searchParam = pushParam(`%${escapeLike(filters.q)}%`);\n        clauses.push(`(name ILIKE ${searchParam} ESCAPE '\\\\\\\\' OR storage_id ILIKE ${searchParam} ESCAPE '\\\\\\\\')`);\n    }\n    if (filters.uploadedBy)\n        clauses.push(`uploaded_by = ${pushParam(filters.uploadedBy)}`);\n    return { clauses, params };\n}\n", "import { AdminFilesFilterError, buildAdminFilesFilterSql, getStorageMimeFamily, parseAdminFilesFilters, } from \"./server-admin-files-query.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nclass AdminFilesBulkRouteError extends Error {\n    code;\n    status;\n    constructor(code, message, options) {\n        super(message);\n        this.name = \"AdminFilesBulkRouteError\";\n        this.code = code;\n        this.status = options?.status ?? 500;\n        this.cause = options?.cause;\n    }\n}\nconst SELECTED_BULK_LIMIT = 100;\nconst FILTER_BULK_LIMIT = 500;\nfunction isValidStorageId(storageId) {\n    return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(storageId);\n}\nfunction parseStorageVisibility(value) {\n    return value === \"public\" || value === \"private\" ? value : null;\n}\nfunction invalidBulkRequest(message, status = 400, code = \"FILES_BULK_INVALID_REQUEST\") {\n    return new AdminFilesBulkRouteError(code, message, { status });\n}\nfunction parseBulkAction(value) {\n    const action = value && typeof value === \"object\" ? value : null;\n    if (!action || typeof action.type !== \"string\")\n        throw invalidBulkRequest(\"Invalid bulk action\");\n    if (action.type === \"delete\")\n        return { type: \"delete\" };\n    if (action.type === \"setVisibility\") {\n        const visibility = parseStorageVisibility(action.visibility);\n        if (!visibility)\n            throw invalidBulkRequest(\"visibility must be 'private' or 'public'\");\n        return { type: \"setVisibility\", visibility };\n    }\n    throw invalidBulkRequest(\"Invalid bulk action\");\n}\nfunction parseBulkTarget(value) {\n    const target = value && typeof value === \"object\" ? value : null;\n    if (!target || typeof target.mode !== \"string\")\n        throw invalidBulkRequest(\"Invalid bulk target\");\n    if (target.mode === \"selected\") {\n        const rawIds = Array.isArray(target.storageIds) ? target.storageIds : [];\n        const storageIds = Array.from(new Set(rawIds.filter((id) => typeof id === \"string\")));\n        if (storageIds.length === 0)\n            throw invalidBulkRequest(\"storageIds are required\");\n        if (storageIds.length > SELECTED_BULK_LIMIT) {\n            throw invalidBulkRequest(`Selected bulk action supports at most ${SELECTED_BULK_LIMIT} files`);\n        }\n        if (storageIds.some((id) => !isValidStorageId(id)))\n            throw invalidBulkRequest(\"Invalid storageId format\");\n        return { mode: \"selected\", storageIds };\n    }\n    if (target.mode === \"filter\") {\n        const rawFilter = target.filter && typeof target.filter === \"object\" ? target.filter : {};\n        try {\n            return { mode: \"filter\", filter: parseAdminFilesFilters(rawFilter) };\n        }\n        catch (error) {\n            if (error instanceof AdminFilesFilterError) {\n                throw new AdminFilesBulkRouteError(\"FILES_INVALID_FILTER\", error.message, {\n                    cause: error,\n                    status: 400,\n                });\n            }\n            throw error;\n        }\n    }\n    throw invalidBulkRequest(\"Invalid bulk target\");\n}\nfunction parseBulkRequest(body) {\n    const input = body && typeof body === \"object\" ? body : null;\n    if (!input)\n        throw invalidBulkRequest(\"Invalid bulk request\");\n    const expectedCount = typeof input.expectedCount === \"number\" ? Math.floor(input.expectedCount) : undefined;\n    if (expectedCount !== undefined && expectedCount < 0)\n        throw invalidBulkRequest(\"Invalid expectedCount\");\n    return {\n        target: parseBulkTarget(input.target),\n        action: parseBulkAction(input.action),\n        expectedCount,\n    };\n}\nfunction buildAdminFilesWhere(input) {\n    const filterSql = buildAdminFilesFilterSql(input.filters, {\n        hasVisibilityColumn: input.hasVisibilityColumn,\n        startingParamIndex: 1,\n    });\n    return {\n        whereClause: `WHERE ${[\"storage_id IS NOT NULL\", ...filterSql.clauses].join(\" AND \")}`,\n        params: filterSql.params,\n    };\n}\nfunction getVisibilitySelect(hasVisibilityColumn) {\n    return hasVisibilityColumn ? \"visibility\" : \"'private' AS visibility\";\n}\nfunction buildSelectedRowsSql(storageIds, hasVisibilityColumn) {\n    const placeholders = storageIds.map((_, index) => `$${index + 1}`).join(\", \");\n    const visibilitySelect = getVisibilitySelect(hasVisibilityColumn);\n    return {\n        sql: `SELECT id, storage_id, name, size, type, ${visibilitySelect}, uploaded_by, created_at\n            FROM _system_files\n           WHERE storage_id IN (${placeholders})\n           ORDER BY created_at DESC, storage_id DESC`,\n        params: storageIds,\n    };\n}\nasync function selectBulkRows(input) {\n    if (input.target.mode === \"selected\") {\n        const selected = buildSelectedRowsSql(input.target.storageIds, input.hasVisibilityColumn);\n        return (await input.rawSql(selected.sql, selected.params));\n    }\n    const where = buildAdminFilesWhere({\n        filters: input.target.filter,\n        hasVisibilityColumn: input.hasVisibilityColumn,\n    });\n    const params = [...where.params];\n    const limitClause = input.limit ? `LIMIT $${params.push(input.limit)}` : \"\";\n    const visibilitySelect = getVisibilitySelect(input.hasVisibilityColumn);\n    return (await input.rawSql(`SELECT id, storage_id, name, size, type, ${visibilitySelect}, uploaded_by, created_at\n       FROM _system_files\n      ${where.whereClause}\n      ORDER BY created_at DESC, storage_id DESC\n      ${limitClause}`, params));\n}\nasync function countBulkTarget(input) {\n    if (input.target.mode === \"selected\") {\n        const rows = await selectBulkRows(input);\n        return {\n            count: rows.length,\n            totalBytes: rows.reduce((sum, row) => sum + Number(row.size || 0), 0),\n        };\n    }\n    const where = buildAdminFilesWhere({\n        filters: input.target.filter,\n        hasVisibilityColumn: input.hasVisibilityColumn,\n    });\n    const rows = await input.rawSql(`SELECT COUNT(*)::text AS count, COALESCE(SUM(CAST(size AS BIGINT)), 0)::text AS total_bytes\n       FROM _system_files\n      ${where.whereClause}`, where.params);\n    const first = rows[0];\n    return {\n        count: Number(first?.count ?? 0),\n        totalBytes: Number(first?.total_bytes ?? 0),\n    };\n}\nfunction buildBulkPreview(rows, count, totalBytes) {\n    const visibility = {};\n    const typeFamily = {};\n    for (const row of rows) {\n        const rowVisibility = normalizeStorageVisibility(row.visibility);\n        visibility[rowVisibility] = (visibility[rowVisibility] ?? 0) + 1;\n        const family = getStorageMimeFamily(typeof row.type === \"string\" ? row.type : undefined);\n        typeFamily[family] = (typeFamily[family] ?? 0) + 1;\n    }\n    return {\n        count,\n        totalBytes,\n        visibility,\n        typeFamily,\n        samples: rows.slice(0, 10).map((row) => ({\n            storageId: String(row.storage_id),\n            name: String(row.name || row.storage_id),\n            type: typeof row.type === \"string\" && row.type ? row.type : \"application/octet-stream\",\n            size: Number(row.size || 0),\n        })),\n    };\n}\nasync function readFilterBreakdown(input) {\n    const where = buildAdminFilesWhere({\n        filters: input.filter,\n        hasVisibilityColumn: input.hasVisibilityColumn,\n    });\n    const visibilityExpr = input.hasVisibilityColumn ? \"visibility\" : \"'private'\";\n    const visibilityRows = await input.rawSql(`SELECT ${visibilityExpr} AS visibility, COUNT(*)::text AS count\n       FROM _system_files\n      ${where.whereClause}\n      GROUP BY ${visibilityExpr}`, where.params);\n    const typeRows = await input.rawSql(`SELECT type, COUNT(*)::text AS count\n       FROM _system_files\n      ${where.whereClause}\n      GROUP BY type`, where.params);\n    const visibility = {};\n    const typeFamily = {};\n    for (const row of visibilityRows) {\n        const key = normalizeStorageVisibility(row.visibility);\n        visibility[key] = Number(row.count ?? 0);\n    }\n    for (const row of typeRows) {\n        const family = getStorageMimeFamily(typeof row.type === \"string\" ? row.type : undefined);\n        typeFamily[family] = (typeFamily[family] ?? 0) + Number(row.count ?? 0);\n    }\n    return { visibility, typeFamily };\n}\nasync function buildFilterPreview(input) {\n    const [samples, summary, breakdown] = await Promise.all([\n        selectBulkRows({\n            rawSql: input.rawSql,\n            target: input.target,\n            hasVisibilityColumn: input.hasVisibilityColumn,\n            limit: 10,\n        }),\n        countBulkTarget({\n            rawSql: input.rawSql,\n            target: input.target,\n            hasVisibilityColumn: input.hasVisibilityColumn,\n        }),\n        readFilterBreakdown({\n            rawSql: input.rawSql,\n            filter: input.target.filter,\n            hasVisibilityColumn: input.hasVisibilityColumn,\n        }),\n    ]);\n    return {\n        count: summary.count,\n        totalBytes: summary.totalBytes,\n        visibility: breakdown.visibility,\n        typeFamily: breakdown.typeFamily,\n        samples: samples.slice(0, 10).map((row) => ({\n            storageId: String(row.storage_id),\n            name: String(row.name || row.storage_id),\n            type: typeof row.type === \"string\" && row.type ? row.type : \"application/octet-stream\",\n            size: Number(row.size || 0),\n        })),\n    };\n}\nasync function deleteStorageObject(storage, storageId) {\n    const deleteFn = typeof storage.remove === \"function\"\n        ? storage.remove.bind(storage)\n        : typeof storage.delete === \"function\"\n            ? storage.delete.bind(storage)\n            : null;\n    if (!deleteFn)\n        return;\n    try {\n        await deleteFn(storageId);\n    }\n    catch {\n        throw new Error(\"Storage object delete failed\");\n    }\n}\nasync function executeBulkAction(input) {\n    let changed = 0;\n    let skipped = Math.max(0, input.targetSize - input.rows.length);\n    const errors = [];\n    for (const row of input.rows) {\n        const storageId = String(row.storage_id);\n        try {\n            if (input.action.type === \"setVisibility\") {\n                if (normalizeStorageVisibility(row.visibility) === input.action.visibility) {\n                    skipped++;\n                    continue;\n                }\n                if (typeof input.storage.setVisibility === \"function\") {\n                    await input.storage.setVisibility(storageId, input.action.visibility);\n                }\n                else {\n                    await input.rawSql(`UPDATE _system_files SET visibility = $1 WHERE storage_id = $2`, [\n                        input.action.visibility,\n                        storageId,\n                    ]);\n                }\n                changed++;\n                continue;\n            }\n            await deleteStorageObject(input.storage, storageId);\n            await input.rawSql(`DELETE FROM _system_files WHERE storage_id = $1`, [storageId]);\n            changed++;\n        }\n        catch (error) {\n            const deleteFailed = input.action.type === \"delete\" && error instanceof Error && error.message.includes(\"delete\");\n            errors.push({\n                storageId,\n                code: deleteFailed ? \"STORAGE_OBJECT_DELETE_FAILED\" : \"FILES_BULK_ROW_FAILED\",\n                message: error instanceof Error ? error.message : \"Bulk row failed\",\n            });\n        }\n    }\n    return {\n        success: errors.length === 0,\n        matched: input.rows.length,\n        changed,\n        skipped,\n        failed: errors.length,\n        errors,\n    };\n}\nexport function registerAdminFileBulkRoutes(params) {\n    params.admin.post(\"/files/bulk/preview\", async (c) => {\n        try {\n            const tableInfo = await params.ensureFilesTable(params.rawSql);\n            const body = await c.req.json().catch(() => null);\n            const request = parseBulkRequest(body);\n            if (request.target.mode === \"filter\") {\n                return c.json(await buildFilterPreview({\n                    rawSql: params.rawSql,\n                    target: request.target,\n                    hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n                }));\n            }\n            const targetRows = await selectBulkRows({\n                rawSql: params.rawSql,\n                target: request.target,\n                hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n            });\n            const totalBytes = targetRows.reduce((sum, row) => sum + Number(row.size || 0), 0);\n            return c.json(buildBulkPreview(targetRows, targetRows.length, totalBytes));\n        }\n        catch (error) {\n            const routeError = error instanceof AdminFilesBulkRouteError\n                ? error\n                : new AdminFilesBulkRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File bulk preview unavailable\", {\n                    cause: error,\n                });\n            return c.json({ error: routeError.message, code: routeError.code }, routeError.status);\n        }\n    });\n    params.admin.post(\"/files/bulk\", async (c) => {\n        if (!params.storage) {\n            return c.json({ error: \"Storage not initialized\" }, 500);\n        }\n        try {\n            const tableInfo = await params.ensureFilesTable(params.rawSql);\n            const body = await c.req.json().catch(() => null);\n            const request = parseBulkRequest(body);\n            const targetSize = request.target.mode === \"selected\"\n                ? request.target.storageIds.length\n                : (await countBulkTarget({\n                    rawSql: params.rawSql,\n                    target: request.target,\n                    hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n                })).count;\n            if (request.target.mode === \"filter\") {\n                if (request.expectedCount !== undefined && request.expectedCount !== targetSize) {\n                    throw invalidBulkRequest(\"Bulk target changed. Refresh the preview and try again.\", 409, \"FILES_BULK_TARGET_CHANGED\");\n                }\n                if (targetSize > FILTER_BULK_LIMIT) {\n                    throw invalidBulkRequest(`Filter bulk action supports at most ${FILTER_BULK_LIMIT} files`, 400, \"BULK_OPERATION_TOO_LARGE\");\n                }\n            }\n            const rows = await selectBulkRows({\n                rawSql: params.rawSql,\n                target: request.target,\n                hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n                limit: request.target.mode === \"filter\" ? FILTER_BULK_LIMIT + 1 : undefined,\n            });\n            if (request.target.mode === \"filter\" && rows.length > FILTER_BULK_LIMIT) {\n                throw invalidBulkRequest(`Filter bulk action supports at most ${FILTER_BULK_LIMIT} files`, 400, \"BULK_OPERATION_TOO_LARGE\");\n            }\n            return c.json(await executeBulkAction({\n                rawSql: params.rawSql,\n                storage: params.storage,\n                rows,\n                targetSize,\n                action: request.action,\n            }));\n        }\n        catch (error) {\n            const routeError = error instanceof AdminFilesBulkRouteError\n                ? error\n                : new AdminFilesBulkRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File bulk action failed\", {\n                    cause: error,\n                });\n            return c.json({ error: routeError.message, code: routeError.code }, routeError.status);\n        }\n    });\n}\n", "import { applyAdminAccessMiddleware } from \"./server-admin-access.js\";\nimport { preflightStorageApiUploadContentLength } from \"./storage-adapter-limits.js\";\nimport { clampStorageListLimit, decodeStorageListCursor, encodeStorageListCursor, } from \"./storage-system-files-catalog.js\";\nimport { normalizeStorageVisibility } from \"./storage-visibility.js\";\nimport { registerAdminFileBulkRoutes } from \"./server-admin-files-bulk.js\";\nimport { AdminFilesFilterError, buildAdminFilesFilterSql, getAdminFilesFilterFingerprint, parseAdminFilesFilters, } from \"./server-admin-files-query.js\";\nclass AdminFilesRouteError extends Error {\n    code;\n    status;\n    constructor(code, message, options) {\n        super(message);\n        this.name = \"AdminFilesRouteError\";\n        this.code = code;\n        this.status = options?.status ?? 500;\n        this.cause = options?.cause;\n    }\n}\nconst CREATE_FILES_TABLE_SQL = `\n    DO $$\n    BEGIN\n        IF NOT EXISTS (\n            SELECT 1 FROM information_schema.tables\n            WHERE table_schema = current_schema()\n            AND table_name = '_system_files'\n        ) THEN\n            CREATE TABLE _system_files (\n                id SERIAL PRIMARY KEY,\n                storage_id TEXT NOT NULL,\n                name TEXT NOT NULL,\n                size TEXT NOT NULL,\n                type TEXT NOT NULL DEFAULT 'application/octet-stream',\n                visibility TEXT NOT NULL DEFAULT 'private',\n                storage_backend TEXT NOT NULL DEFAULT 'local-filesystem',\n                object_key TEXT,\n                etag TEXT,\n                content_hash TEXT,\n                migrated_at TIMESTAMP,\n                uploaded_by TEXT DEFAULT 'dashboard',\n                created_at TIMESTAMP DEFAULT NOW()\n            );\n        END IF;\n    END$$;\n`;\nlet filesTableInitialized = false;\nlet filesTableHasVisibilityColumn = false;\nconst FILE_TABLE_COLUMN_ALTERS = [\n    {\n        name: \"visibility\",\n        sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS visibility TEXT NOT NULL DEFAULT 'private'`,\n    },\n    {\n        name: \"storage_backend\",\n        sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS storage_backend TEXT NOT NULL DEFAULT 'local-filesystem'`,\n    },\n    { name: \"object_key\", sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS object_key TEXT` },\n    { name: \"etag\", sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS etag TEXT` },\n    { name: \"content_hash\", sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS content_hash TEXT` },\n    { name: \"migrated_at\", sql: `ALTER TABLE _system_files ADD COLUMN IF NOT EXISTS migrated_at TIMESTAMP` },\n];\nexport function resetFilesTableInitializationForTests() {\n    filesTableInitialized = false;\n    filesTableHasVisibilityColumn = false;\n}\nexport async function ensureFilesTable(rawSql) {\n    if (filesTableInitialized)\n        return { hasVisibilityColumn: filesTableHasVisibilityColumn };\n    await rawSql(CREATE_FILES_TABLE_SQL);\n    const columnRows = await rawSql(`SELECT column_name\n       FROM information_schema.columns\n      WHERE table_schema = current_schema()\n        AND table_name = '_system_files'\n        AND column_name IN ('visibility', 'storage_backend', 'object_key', 'etag', 'content_hash', 'migrated_at')`);\n    const existingColumns = new Set(columnRows\n        .map((row) => row.column_name)\n        .filter((value) => typeof value === \"string\"));\n    filesTableHasVisibilityColumn = existingColumns.has(\"visibility\");\n    for (const alter of FILE_TABLE_COLUMN_ALTERS) {\n        if (existingColumns.has(alter.name))\n            continue;\n        try {\n            await rawSql(alter.sql);\n            if (alter.name === \"visibility\")\n                filesTableHasVisibilityColumn = true;\n        }\n        catch {\n            if (alter.name === \"visibility\")\n                filesTableHasVisibilityColumn = false;\n        }\n    }\n    filesTableInitialized = true;\n    return { hasVisibilityColumn: filesTableHasVisibilityColumn };\n}\nexport function normalizeUploadedBy(value) {\n    const validSources = new Set([\"cli\", \"dashboard\", \"api\"]);\n    return validSources.has(value || \"\") ? value : \"dashboard\";\n}\nexport function isValidStorageId(storageId) {\n    return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(storageId);\n}\nfunction parseStorageVisibility(value) {\n    return value === \"public\" || value === \"private\" ? value : null;\n}\nfunction sanitizeContentDispositionFilename(value) {\n    const safe = value.replace(/[\\\\/\\r\\n\"]/g, \"_\").trim();\n    return safe.slice(0, 160) || \"file\";\n}\nfunction invalidFilesCursor(message = \"Invalid files cursor\", cause) {\n    return new AdminFilesRouteError(\"FILES_INVALID_CURSOR\", message, { cause, status: 400 });\n}\nfunction parseAdminFilesPageQuery(c, filterFingerprint) {\n    const limitRaw = c.req.query(\"limit\");\n    const cursorRaw = c.req.query(\"cursor\");\n    const orderRaw = c.req.query(\"order\");\n    const pageRaw = c.req.query(\"page\");\n    const includeTotalRaw = c.req.query(\"includeTotal\");\n    const paginated = limitRaw !== undefined ||\n        cursorRaw !== undefined ||\n        orderRaw !== undefined ||\n        pageRaw !== undefined ||\n        includeTotalRaw !== undefined;\n    if (pageRaw !== undefined && pageRaw !== \"\" && pageRaw !== \"1\") {\n        throw invalidFilesCursor(\"Invalid files page\");\n    }\n    let order = \"desc\";\n    if (orderRaw === \"asc\" || orderRaw === \"desc\") {\n        order = orderRaw;\n    }\n    else if (orderRaw !== undefined && orderRaw !== \"\") {\n        throw invalidFilesCursor(\"Invalid files order\");\n    }\n    const limit = clampStorageListLimit(limitRaw === undefined ? undefined : Number(limitRaw));\n    let cursor = null;\n    if (cursorRaw) {\n        try {\n            cursor = decodeStorageListCursor(cursorRaw, order);\n            if ((cursor.f ?? null) !== filterFingerprint) {\n                throw new Error(\"Invalid cursor filter\");\n            }\n        }\n        catch (error) {\n            throw invalidFilesCursor(\"Invalid files cursor\", error);\n        }\n    }\n    return {\n        paginated,\n        limit,\n        cursor,\n        order,\n        includeTotal: includeTotalRaw === \"1\" || includeTotalRaw === \"true\",\n    };\n}\nfunction readAdminFilesFilters(c) {\n    try {\n        return parseAdminFilesFilters({\n            visibility: c.req.query(\"visibility\"),\n            typeFamily: c.req.query(\"typeFamily\"),\n            mime: c.req.query(\"mime\"),\n            mimePrefix: c.req.query(\"mimePrefix\"),\n            q: c.req.query(\"q\"),\n            uploadedBy: c.req.query(\"uploadedBy\"),\n        });\n    }\n    catch (error) {\n        if (error instanceof AdminFilesFilterError) {\n            throw new AdminFilesRouteError(\"FILES_INVALID_FILTER\", error.message, { cause: error, status: 400 });\n        }\n        throw error;\n    }\n}\nfunction buildAdminFilesWhere(input) {\n    const filterSql = buildAdminFilesFilterSql(input.filters, {\n        hasVisibilityColumn: input.hasVisibilityColumn,\n        startingParamIndex: 1,\n    });\n    const params = [...filterSql.params];\n    const clauses = [\"storage_id IS NOT NULL\", ...filterSql.clauses];\n    if (input.cursor && input.order) {\n        const comparator = input.order === \"asc\" ? \">\" : \"<\";\n        params.push(input.cursor.t, input.cursor.s);\n        const createdAtParam = `$${params.length - 1}`;\n        const storageIdParam = `$${params.length}`;\n        clauses.push(`(created_at, storage_id) ${comparator} (${createdAtParam}::timestamp, ${storageIdParam})`);\n    }\n    return { whereClause: `WHERE ${clauses.join(\" AND \")}`, params };\n}\nasync function readFilteredTotal(input) {\n    const where = buildAdminFilesWhere({\n        filters: input.filters,\n        hasVisibilityColumn: input.hasVisibilityColumn,\n    });\n    const rows = await input.rawSql(`SELECT COUNT(*)::text AS total\n       FROM _system_files\n      ${where.whereClause}`, where.params);\n    const total = Number(rows[0]?.total ?? 0);\n    return Number.isFinite(total) ? total : undefined;\n}\nasync function buildFileAccessUrls(storage, storageId, visibility) {\n    const publicUrl = storage?.getPublicUrl?.(storageId) ?? `/api/storage/${storageId}`;\n    if (visibility === \"public\" || !storage?.createReadGrant) {\n        return { url: publicUrl, download_url: publicUrl };\n    }\n    const [inlineGrant, attachmentGrant] = await Promise.all([\n        storage.createReadGrant(storageId, { ttlSeconds: 300, disposition: \"inline\" }),\n        storage.createReadGrant(storageId, { ttlSeconds: 300, disposition: \"attachment\" }),\n    ]).catch((error) => {\n        throw new AdminFilesRouteError(\"FILES_ACCESS_URL_UNAVAILABLE\", \"File access URL unavailable\", {\n            cause: error,\n        });\n    });\n    return { url: inlineGrant.url, download_url: attachmentGrant.url };\n}\nasync function deleteStorageObject(storage, storageId) {\n    const deleteFn = typeof storage.remove === \"function\"\n        ? storage.remove.bind(storage)\n        : typeof storage.delete === \"function\"\n            ? storage.delete.bind(storage)\n            : null;\n    if (!deleteFn)\n        return;\n    try {\n        await deleteFn(storageId);\n    }\n    catch {\n        throw new Error(\"Storage object delete failed\");\n    }\n}\nexport function registerAdminFileRoutes(params) {\n    applyAdminAccessMiddleware(params.admin, params.accessPolicy);\n    params.admin.get(\"/files\", async (c) => {\n        try {\n            const tableInfo = await ensureFilesTable(params.rawSql);\n            const filters = readAdminFilesFilters(c);\n            const filterFingerprint = getAdminFilesFilterFingerprint(filters);\n            const pageQuery = parseAdminFilesPageQuery(c, filterFingerprint);\n            const where = buildAdminFilesWhere({\n                filters,\n                hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n                cursor: pageQuery.cursor,\n                order: pageQuery.order,\n            });\n            const sqlParams = [...where.params];\n            let limitClause = \"\";\n            let orderClause = \"ORDER BY created_at DESC\";\n            if (pageQuery.paginated) {\n                const direction = pageQuery.order === \"asc\" ? \"ASC\" : \"DESC\";\n                sqlParams.push(pageQuery.limit + 1);\n                limitClause = `LIMIT $${sqlParams.length}`;\n                orderClause = `ORDER BY created_at ${direction}, storage_id ${direction}`;\n            }\n            let total;\n            if (pageQuery.includeTotal) {\n                total = await readFilteredTotal({\n                    rawSql: params.rawSql,\n                    filters,\n                    hasVisibilityColumn: tableInfo.hasVisibilityColumn,\n                }).catch(() => undefined);\n            }\n            const rows = await params.rawSql(tableInfo.hasVisibilityColumn\n                ? `SELECT id, storage_id, name, size, type, visibility, uploaded_by, created_at${pageQuery.paginated ? \", created_at::text AS created_at_text\" : \"\"}\n               FROM _system_files\n              ${where.whereClause}\n              ${orderClause}\n              ${limitClause}`\n                : `SELECT id, storage_id, name, size, type, uploaded_by, created_at${pageQuery.paginated ? \", created_at::text AS created_at_text\" : \"\"}\n               FROM _system_files\n              ${where.whereClause}\n              ${orderClause}\n              ${limitClause}`, sqlParams);\n            const pageRows = pageQuery.paginated ? rows.slice(0, pageQuery.limit) : rows;\n            const files = await Promise.all(pageRows.map(async (row) => {\n                const storageId = String(row.storage_id);\n                let visibility = normalizeStorageVisibility(row.visibility);\n                if (!tableInfo.hasVisibilityColumn && params.storage?.getMeta) {\n                    const meta = await params.storage.getMeta(storageId).catch((error) => {\n                        throw new AdminFilesRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File catalog metadata unavailable\", { cause: error });\n                    });\n                    visibility = normalizeStorageVisibility(meta?.visibility);\n                }\n                const urls = await buildFileAccessUrls(params.storage, storageId, visibility);\n                const { created_at_text: _createdAtText, ...file } = row;\n                return { ...file, visibility, ...urls };\n            }));\n            if (pageQuery.paginated) {\n                const last = pageRows[pageRows.length - 1];\n                const nextCursor = rows.length > pageQuery.limit && last\n                    ? encodeStorageListCursor({\n                        v: 1,\n                        o: pageQuery.order,\n                        t: String(last.created_at_text ?? last.created_at ?? \"\"),\n                        s: String(last.storage_id),\n                        ...(filterFingerprint ? { f: filterFingerprint } : {}),\n                    })\n                    : null;\n                return c.json({\n                    files,\n                    nextCursor,\n                    limit: pageQuery.limit,\n                    order: pageQuery.order,\n                    filters,\n                    ...(total === undefined ? {} : { total }),\n                });\n            }\n            return c.json(files);\n        }\n        catch (error) {\n            const routeError = error instanceof AdminFilesRouteError\n                ? error\n                : new AdminFilesRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File catalog unavailable\", {\n                    cause: error,\n                });\n            const cause = routeError.cause instanceof Error ? routeError.cause.message : String(routeError.cause ?? \"\");\n            console.warn(`[admin-files] GET /files failed code=${routeError.code} message=${routeError.message}${cause ? ` cause=${cause}` : \"\"}`);\n            return c.json({ error: routeError.message, code: routeError.code }, routeError.status);\n        }\n    });\n    registerAdminFileBulkRoutes({\n        admin: params.admin,\n        rawSql: params.rawSql,\n        storage: params.storage,\n        ensureFilesTable,\n    });\n    params.admin.get(\"/files/:storageId/meta\", async (c) => {\n        try {\n            const tableInfo = await ensureFilesTable(params.rawSql);\n            const storageId = c.req.param(\"storageId\");\n            if (!storageId) {\n                return c.json({ error: \"storageId is required\" }, 400);\n            }\n            if (!isValidStorageId(storageId)) {\n                return c.json({ error: \"Invalid storageId format\" }, 400);\n            }\n            const rows = await params.rawSql(tableInfo.hasVisibilityColumn\n                ? `SELECT id, storage_id, name, size, type, visibility, uploaded_by, created_at\n               FROM _system_files\n              WHERE storage_id = $1\n              LIMIT 1`\n                : `SELECT id, storage_id, name, size, type, uploaded_by, created_at\n               FROM _system_files\n              WHERE storage_id = $1\n              LIMIT 1`, [storageId]);\n            if (rows.length === 0) {\n                return c.json({ error: \"File not found\" }, 404);\n            }\n            const row = rows[0];\n            const storageMeta = params.storage?.getMeta\n                ? await params.storage.getMeta(storageId).catch((error) => {\n                    throw new AdminFilesRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File catalog metadata unavailable\", {\n                        cause: error,\n                    });\n                })\n                : null;\n            const visibility = tableInfo.hasVisibilityColumn\n                ? normalizeStorageVisibility(row.visibility)\n                : normalizeStorageVisibility(storageMeta?.visibility);\n            return c.json({\n                storageId: String(row.storage_id),\n                name: typeof storageMeta?.name === \"string\" && storageMeta.name ? storageMeta.name : String(row.name),\n                size: Number(storageMeta?.size ?? row.size ?? 0),\n                type: typeof storageMeta?.type === \"string\" && storageMeta.type\n                    ? storageMeta.type\n                    : String(row.type || \"application/octet-stream\"),\n                visibility,\n                uploadedBy: typeof row.uploaded_by === \"string\" ? row.uploaded_by : null,\n                createdAt: row.created_at ? String(row.created_at) : null,\n            });\n        }\n        catch (error) {\n            const routeError = error instanceof AdminFilesRouteError\n                ? error\n                : new AdminFilesRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File catalog unavailable\", {\n                    cause: error,\n                });\n            return c.json({ error: routeError.message, code: routeError.code }, routeError.status === 400 ? 400 : 500);\n        }\n    });\n    params.admin.get(\"/files/:storageId/content\", async (c) => {\n        if (!params.storage?.get) {\n            return c.json({ error: \"Storage content read unavailable\" }, 500);\n        }\n        try {\n            await ensureFilesTable(params.rawSql);\n            const storageId = c.req.param(\"storageId\");\n            if (!storageId) {\n                return c.json({ error: \"storageId is required\" }, 400);\n            }\n            if (!isValidStorageId(storageId)) {\n                return c.json({ error: \"Invalid storageId format\" }, 400);\n            }\n            const rows = await params.rawSql(`SELECT id, storage_id, name FROM _system_files WHERE storage_id = $1 LIMIT 1`, [storageId]);\n            if (rows.length === 0) {\n                return c.json({ error: \"File not found\" }, 404);\n            }\n            const stored = await params.storage.get(storageId);\n            if (!stored) {\n                return c.json({ error: \"File not found\" }, 404);\n            }\n            const type = typeof stored.type === \"string\" && stored.type ? stored.type : \"application/octet-stream\";\n            const name = typeof stored.name === \"string\" && stored.name ? stored.name : storageId;\n            const body = new ArrayBuffer(stored.buffer.byteLength);\n            new Uint8Array(body).set(stored.buffer);\n            return new Response(body, {\n                status: 200,\n                headers: {\n                    \"content-type\": type,\n                    \"content-length\": String(stored.buffer.length),\n                    \"content-disposition\": `attachment; filename=\"${sanitizeContentDispositionFilename(name)}\"`,\n                    \"cache-control\": \"no-store\",\n                },\n            });\n        }\n        catch (error) {\n            const routeError = error instanceof AdminFilesRouteError\n                ? error\n                : new AdminFilesRouteError(\"FILES_CATALOG_UNAVAILABLE\", \"File content unavailable\", {\n                    cause: error,\n                });\n            return c.json({ error: routeError.message, code: routeError.code }, routeError.status === 400 ? 400 : 500);\n        }\n    });\n    params.admin.post(\"/files/upload\", async (c) => {\n        if (!params.storage) {\n            return c.json({ error: \"Storage not initialized\" }, 500);\n        }\n        const preflight = preflightStorageApiUploadContentLength(c.req.header(\"content-length\"), params.storage.apiUploadMaxFileSizeBytes);\n        if (!preflight.ok)\n            return c.json({ error: preflight.error }, preflight.status);\n        try {\n            const tableInfo = await ensureFilesTable(params.rawSql);\n            const body = await c.req.parseBody();\n            const file = body.file;\n            if (!file || !(file instanceof File)) {\n                return c.json({ error: \"No file provided. Send as multipart with field name 'file'\" }, 400);\n            }\n            const visibility = parseStorageVisibility(body.visibility) ?? \"private\";\n            const storageId = await params.storage.store(file, { filename: file.name, visibility });\n            const uploadedBy = normalizeUploadedBy(c.req.header(\"x-uploaded-by\"));\n            try {\n                if (tableInfo.hasVisibilityColumn) {\n                    await params.rawSql(`UPDATE _system_files SET uploaded_by = $1, visibility = $2 WHERE storage_id = $3`, [uploadedBy, visibility, storageId]);\n                }\n                else {\n                    await params.rawSql(`UPDATE _system_files SET uploaded_by = $1 WHERE storage_id = $2`, [\n                        uploadedBy,\n                        storageId,\n                    ]);\n                }\n            }\n            catch {\n                /* ignore */\n            }\n            const urls = await buildFileAccessUrls(params.storage, storageId, visibility);\n            return c.json({\n                storageId,\n                name: file.name,\n                size: file.size,\n                type: file.type,\n                visibility,\n                ...urls,\n            }, 201);\n        }\n        catch (error) {\n            return c.json({ error: error.message || \"Upload failed\" }, 500);\n        }\n    });\n    params.admin.patch(\"/files/:storageId/visibility\", async (c) => {\n        if (!params.storage) {\n            return c.json({ error: \"Storage not initialized\" }, 500);\n        }\n        try {\n            await ensureFilesTable(params.rawSql);\n            const storageId = c.req.param(\"storageId\");\n            if (!storageId) {\n                return c.json({ error: \"storageId is required\" }, 400);\n            }\n            if (!isValidStorageId(storageId)) {\n                return c.json({ error: \"Invalid storageId format\" }, 400);\n            }\n            const body = await c.req.json().catch(() => ({}));\n            const visibility = parseStorageVisibility(body?.visibility);\n            if (!visibility) {\n                return c.json({ error: \"visibility must be 'private' or 'public'\" }, 400);\n            }\n            const rows = await params.rawSql(`SELECT id, storage_id, name FROM _system_files WHERE storage_id = $1`, [storageId]);\n            if (rows.length === 0) {\n                return c.json({ error: \"File not found\" }, 404);\n            }\n            if (typeof params.storage.setVisibility === \"function\") {\n                await params.storage.setVisibility(storageId, visibility);\n            }\n            else {\n                await params.rawSql(`UPDATE _system_files SET visibility = $1 WHERE storage_id = $2`, [\n                    visibility,\n                    storageId,\n                ]);\n            }\n            const urls = await buildFileAccessUrls(params.storage, storageId, visibility);\n            return c.json({ success: true, storageId, visibility, ...urls });\n        }\n        catch (error) {\n            return c.json({ error: error.message || \"Visibility update failed\" }, 500);\n        }\n    });\n    params.admin.delete(\"/files/:storageId\", async (c) => {\n        if (!params.storage) {\n            return c.json({ error: \"Storage not initialized\" }, 500);\n        }\n        try {\n            await ensureFilesTable(params.rawSql);\n            const storageId = c.req.param(\"storageId\");\n            if (!storageId) {\n                return c.json({ error: \"storageId is required\" }, 400);\n            }\n            if (!isValidStorageId(storageId)) {\n                return c.json({ error: \"Invalid storageId format\" }, 400);\n            }\n            const rows = await params.rawSql(`SELECT id, storage_id, name FROM _system_files WHERE storage_id = $1`, [storageId]);\n            if (rows.length === 0) {\n                return c.json({ error: \"File not found\" }, 404);\n            }\n            await deleteStorageObject(params.storage, storageId);\n            await params.rawSql(`DELETE FROM _system_files WHERE storage_id = $1`, [storageId]);\n            return c.json({ success: true, deleted: storageId });\n        }\n        catch (error) {\n            return c.json({ error: error.message || \"Delete failed\" }, 500);\n        }\n    });\n}\n", "let logId = 0;\nconst logBuffer = [];\nconst MAX_LOG_BUFFER = 1000;\nconst logSubscribers = new Set();\nfunction parseBooleanQuery(value) {\n    if (!value)\n        return false;\n    return value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\nexport function detectLogSource(message) {\n    if (message.includes(\"[workflow:verbose]\") || message.includes(\"[workflow]\"))\n        return \"workflow\";\n    if (message.includes(\"[scheduler]\"))\n        return \"scheduler\";\n    if (message.includes(\"[cron]\") || message.includes(\"[crons]\") || message.includes(\"[usage-cron]\")) {\n        return \"cron\";\n    }\n    if (message.includes(\"[notification]\"))\n        return \"notification\";\n    if (message.includes(\"-->\") || message.includes(\"<--\"))\n        return \"http\";\n    return undefined;\n}\nexport function isVerboseLogEntry(message, level, source) {\n    if (message.includes(\"[workflow:verbose]\"))\n        return true;\n    if (source === \"http\")\n        return true;\n    if (source === \"scheduler\") {\n        return (message.includes('Scheduled \"') ||\n            message.includes('Persisted \"') ||\n            message.includes(\"Cancelled job \") ||\n            message.includes('Registered cron \"') ||\n            (message.includes('Cron \"') && message.includes(\" triggered\")) ||\n            message.includes('onError handler \"') ||\n            (level === \"info\" && message.includes('Action \"') && message.includes(\" completed\")));\n    }\n    if (source === \"cron\") {\n        return (message.includes(\"No due jobs\") ||\n            message.includes(\" due \") ||\n            message.includes(\"apps need wake\") ||\n            message.includes(\": restoring (\") ||\n            message.includes(\"DB-based provision success\") ||\n            (level === \"info\" && message.includes(\": success (\")));\n    }\n    return false;\n}\nexport function subscribeToLogs(ws) {\n    logSubscribers.add(ws);\n    try {\n        ws.send(JSON.stringify({ type: \"log:subscribed\" }));\n    }\n    catch {\n        /* ignore */\n    }\n}\nexport function unsubscribeFromLogs(ws) {\n    logSubscribers.delete(ws);\n}\nfunction pushLog(level, args) {\n    const message = args.map((arg) => (typeof arg === \"string\" ? arg : JSON.stringify(arg))).join(\" \");\n    const source = detectLogSource(message);\n    const entry = {\n        id: ++logId,\n        timestamp: new Date().toISOString(),\n        level,\n        message,\n        verbose: isVerboseLogEntry(message, level, source),\n        source,\n    };\n    logBuffer.push(entry);\n    if (logBuffer.length > MAX_LOG_BUFFER) {\n        logBuffer.splice(0, logBuffer.length - MAX_LOG_BUFFER);\n    }\n    if (logSubscribers.size > 0) {\n        const payload = JSON.stringify({ type: \"log:entry\", ...entry });\n        for (const ws of logSubscribers) {\n            try {\n                ws.send(payload);\n            }\n            catch {\n                logSubscribers.delete(ws);\n            }\n        }\n    }\n}\nconst originalConsoleLog = console.log;\nconst originalConsoleWarn = console.warn;\nconst originalConsoleError = console.error;\nconsole.log = (...args) => {\n    pushLog(\"info\", args);\n    originalConsoleLog.apply(console, args);\n};\nconsole.warn = (...args) => {\n    pushLog(\"warn\", args);\n    originalConsoleWarn.apply(console, args);\n};\nconsole.error = (...args) => {\n    pushLog(\"error\", args);\n    originalConsoleError.apply(console, args);\n};\nexport function getLogBuffer(limit, level, includeVerbose) {\n    let filtered = logBuffer;\n    if (level !== \"all\") {\n        filtered = filtered.filter((entry) => entry.level === level);\n    }\n    if (!includeVerbose) {\n        filtered = filtered.filter((entry) => !entry.verbose);\n    }\n    return filtered.slice(-limit).reverse();\n}\nexport function createAdminLogsHandler() {\n    return (c) => {\n        const limit = Number(c.req.query(\"limit\") || \"100\");\n        const level = c.req.query(\"level\") || \"all\";\n        const verbose = parseBooleanQuery(c.req.query(\"verbose\"));\n        return c.json(getLogBuffer(limit, level, verbose));\n    };\n}\n", "import { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { isAdminIdentifier, quoteAdminIdentifier } from \"./admin-sql-guard.js\";\nimport { applyAdminAccessMiddleware } from \"./server-admin-access.js\";\nimport { redactAdminLogValue } from \"./server-admin-redaction.js\";\nconst SYSTEM_TABLES = new Set([\n    \"user\",\n    \"session\",\n    \"account\",\n    \"verification\",\n    \"_system_files\",\n    \"_system_settings\",\n    \"__drizzle_migrations\",\n    \"drizzle_migrations\",\n]);\nexport function validateResetConfirmation(confirm) {\n    return confirm === \"delete all data\";\n}\nexport function filterResettableTables(tableRows) {\n    return tableRows\n        .map((row) => row.table_name)\n        .filter((tableName) => !SYSTEM_TABLES.has(tableName))\n        .filter(isAdminIdentifier);\n}\nexport function resolveSeedFile(functionsPath) {\n    const seedTs = resolve(functionsPath, \"seed.ts\");\n    const seedJs = resolve(functionsPath, \"seed.js\");\n    let seedFile = existsSync(seedTs) ? seedTs : existsSync(seedJs) ? seedJs : null;\n    if (!seedFile && functionsPath.endsWith(\"gencow-bc\")) {\n        const originalDir = resolve(functionsPath, \"..\", \"gencow\");\n        const origTs = resolve(originalDir, \"seed.ts\");\n        const origJs = resolve(originalDir, \"seed.js\");\n        seedFile = existsSync(origTs) ? origTs : existsSync(origJs) ? origJs : null;\n    }\n    return seedFile;\n}\nexport async function runSeedFile(functionsPath, getCtx, importModule = (path) => import(path)) {\n    const seedFile = resolveSeedFile(functionsPath);\n    if (!seedFile) {\n        console.log(\"[seed] gencow/seed.ts not found \u2014 skipping\");\n        return false;\n    }\n    console.log(`[seed] Running ${seedFile}...`);\n    const seedModule = await importModule(seedFile);\n    const seedFn = seedModule.default;\n    if (typeof seedFn !== \"function\") {\n        console.warn(\"[seed] seed.ts has no default export function \u2014 skipping\");\n        return false;\n    }\n    await seedFn(getCtx());\n    console.log(\"[seed] Seed completed \u2713\");\n    return true;\n}\nexport function registerAdminMaintenanceRoutes(params) {\n    applyAdminAccessMiddleware(params.admin, params.accessPolicy);\n    params.admin.post(\"/reset\", async (c) => {\n        const body = (await c.req.json().catch(() => ({})));\n        if (!validateResetConfirmation(body.confirm)) {\n            return c.json({\n                error: 'Safety check: body must include { \"confirm\": \"delete all data\" }',\n            }, 400);\n        }\n        try {\n            const tableRows = await params.rawSql(`\n                SELECT table_name FROM information_schema.tables\n                WHERE table_schema = 'public'\n                AND table_type = 'BASE TABLE'\n            `);\n            const userTables = filterResettableTables(tableRows);\n            const truncated = [];\n            for (const table of userTables) {\n                await params.rawSql(`TRUNCATE TABLE ${quoteAdminIdentifier(table)} CASCADE`);\n                truncated.push(table);\n            }\n            console.log(`[admin] TRUNCATE ${truncated.length} tables: ${truncated.join(\", \")}`);\n            let seeded = false;\n            if (params.functionsPath) {\n                seeded = await runSeedFile(params.functionsPath, params.getCtx);\n            }\n            return c.json({ success: true, truncated, seeded });\n        }\n        catch (error) {\n            const message = redactAdminLogValue(error);\n            console.error(\"[admin] reset failed:\", message);\n            return c.json({ error: message }, 500);\n        }\n    });\n    params.admin.post(\"/seed\", async (c) => {\n        if (!params.functionsPath) {\n            return c.json({ error: \"Functions path not configured\" }, 500);\n        }\n        try {\n            const seeded = await runSeedFile(params.functionsPath, params.getCtx);\n            if (!seeded) {\n                return c.json({\n                    success: false,\n                    error: \"gencow/seed.ts not found. Create it to define seed data.\",\n                    hint: \"export default async function seed(ctx) { await ctx.db.insert(...) }\",\n                }, 404);\n            }\n            return c.json({ success: true });\n        }\n        catch (error) {\n            const message = redactAdminLogValue(error);\n            console.error(\"[admin] seed failed:\", message);\n            return c.json({ error: message }, 500);\n        }\n    });\n}\n", "function stringifyAdminLogValue(value) {\n    if (value instanceof Error)\n        return value.message;\n    if (typeof value === \"string\")\n        return value;\n    try {\n        return JSON.stringify(value);\n    }\n    catch {\n        return String(value);\n    }\n}\nexport function redactAdminLogValue(value) {\n    return stringifyAdminLogValue(value)\n        .replace(/([a-z][a-z0-9+.-]*:\\/\\/)([^:/@\\s]+):([^/@\\s]+)@/gi, \"$1<redacted>:<redacted>@\")\n        .replace(/\\b(bearer)\\s+[a-z0-9._~+/=-]+/gi, \"$1 <redacted>\")\n        .replace(/\\b([a-z0-9_]*(?:token|secret|password|passwd|pwd|api[_-]?key)[a-z0-9_]*)\\s*[:=]\\s*(\"[^\"]*\"|'[^']*'|[^\\s,;]+)/gi, \"$1=<redacted>\");\n}\n", "import { getRegisteredCrudCodegenMeta } from \"@gencow/core\";\nexport function buildDeprecatedRuntimeUsage(params) {\n    const overriddenKeys = params.overriddenHttpRouteKeys ?? new Set();\n    return {\n        legacyQueries: params.inventory.legacyQueries.map((operation) => operation.key),\n        legacyMutations: params.inventory.legacyMutations.map((operation) => operation.key),\n        legacyHttpActions: (params.legacyHttpActions ?? []).map((route) => ({\n            method: route.method,\n            path: route.path,\n            isPublic: route.isPublic,\n            overriddenByHttpRoute: overriddenKeys.has(`${route.method} ${route.path}`),\n        })),\n        legacyCrud: (params.legacyCrud ?? []).map((entry) => ({\n            prefix: entry.prefix,\n            tableName: entry.tableName,\n            methods: [...entry.methods],\n            isPublic: entry.isPublic,\n        })),\n    };\n}\nexport function createDeprecatedRuntimeUsageReader(params) {\n    const getCrudMeta = params.getCrudCodegenMeta ?? getRegisteredCrudCodegenMeta;\n    return () => buildDeprecatedRuntimeUsage({\n        inventory: params.getOperationInventory(),\n        legacyHttpActions: params.legacyHttpActions,\n        overriddenHttpRouteKeys: params.overriddenHttpRouteKeys,\n        legacyCrud: getCrudMeta(),\n    });\n}\n", "import { createAdminRoutes } from \"./admin\";\nimport { createAdminAccessMiddleware, createAdminAccessPolicy, } from \"./server-admin-access.js\";\nexport { createAdminAccessPolicy, resolveAdminSurfaceAccess, shouldAllowAdminSurfaceHost, } from \"./server-admin-access.js\";\nexport function resolveStorageTierConfig(tierConfigEnv) {\n    if (!tierConfigEnv) {\n        return undefined;\n    }\n    try {\n        const parsed = JSON.parse(tierConfigEnv);\n        return {\n            autoWebp: parsed.imageAutoWebp ?? true,\n            autoMaxWidth: parsed.imageAutoMaxWidth,\n            resize: parsed.imageResize ?? true,\n            formats: parsed.imageFormats ?? [\"webp\", \"avif\", \"jpeg\", \"png\"],\n            qualityControl: parsed.imageQuality ?? true,\n            cacheMaxMB: parsed.imageCacheMaxMB ?? 1024,\n            transformsPerMonth: parsed.imageTransformsPerMonth ?? -1,\n        };\n    }\n    catch {\n        return undefined;\n    }\n}\nexport function summarizeFunctionSecurity(params) {\n    const queryDefs = params.queryNames.map((name) => params.getQueryDef(name)).filter(Boolean);\n    const procedureQueries = params.procedureQueries ?? [];\n    const procedureMutations = params.procedureMutations ?? [];\n    const publicQueries = [\n        ...queryDefs.filter((queryDef) => queryDef.isPublic).map((queryDef) => queryDef.key),\n        ...procedureQueries.filter((operation) => operation.allowAnonymous).map((operation) => operation.key),\n    ];\n    const publicMutations = [\n        ...params.mutations.filter((mutation) => mutation.isPublic).map((mutation) => mutation.name),\n        ...procedureMutations.filter((operation) => operation.allowAnonymous).map((operation) => operation.key),\n    ];\n    const mutationNames = params.mutations.map((mutation) => mutation.name);\n    const totalQueries = params.queryNames.length + procedureQueries.length;\n    const totalMutations = mutationNames.length + procedureMutations.length;\n    return {\n        mutationNames,\n        publicQueries,\n        publicMutations,\n        protectedQueryCount: totalQueries - publicQueries.length,\n        protectedMutationCount: totalMutations - publicMutations.length,\n    };\n}\nexport function logRegisteredRpcEndpoints(params) {\n    const logger = params.logger ?? console;\n    logger.log(\"[gencow] \uD83D\uDCE1 RPC: POST /api/query, POST /api/mutation (unified legacy + procedure)\");\n    if (params.queryNames.length > 0) {\n        logger.log(`[gencow]   legacy queries (${params.queryNames.length}):   ${params.queryNames.join(\", \")}`);\n    }\n    if (params.mutationNames.length > 0) {\n        logger.log(`[gencow]   legacy mutations (${params.mutationNames.length}): ${params.mutationNames.join(\", \")}`);\n    }\n    const procedureQueryNames = params.procedureQueryNames ?? [];\n    const procedureMutationNames = params.procedureMutationNames ?? [];\n    if (procedureQueryNames.length > 0) {\n        logger.log(`[gencow]   procedure queries (${procedureQueryNames.length}):   ${procedureQueryNames.join(\", \")}`);\n    }\n    if (procedureMutationNames.length > 0) {\n        logger.log(`[gencow]   procedure mutations (${procedureMutationNames.length}): ${procedureMutationNames.join(\", \")}`);\n    }\n}\nexport function logFunctionSecuritySummary(params) {\n    const logger = params.logger ?? console;\n    if (params.summary.publicQueries.length > 0 || params.summary.publicMutations.length > 0) {\n        logger.log(\"\");\n        logger.log(\"[gencow] \u26A0\uFE0F  PUBLIC FUNCTIONS (no auth required):\");\n        if (params.summary.publicQueries.length > 0) {\n            logger.log(`[gencow]   queries:   ${params.summary.publicQueries.join(\", \")}`);\n            logger.log(\"[gencow]   \uD83D\uDD13 These queries return data WITHOUT authentication.\");\n            logger.log(\"[gencow]      Ensure no PII (personal data) is exposed.\");\n            logger.log(\"[gencow]      Add .limit() to prevent full table scans on large datasets.\");\n        }\n        if (params.summary.publicMutations.length > 0) {\n            logger.log(`[gencow]   mutations: ${params.summary.publicMutations.join(\", \")}`);\n        }\n        logger.log(\"[gencow]   \u2192 Remove { public: true } if auth is intended.\");\n        logger.log(\"[gencow]   \u2192 \uD83D\uDCC4 gencow/SECURITY.md \uCC38\uACE0\");\n    }\n    logger.log(`[gencow] \uD83D\uDD12 Secure by Default: ${params.summary.protectedQueryCount} queries + ${params.summary.protectedMutationCount} mutations require auth`);\n}\nexport function logOwnerRlsSummary(params) {\n    if (params.rlsTables.length === 0) {\n        return;\n    }\n    const logger = params.logger ?? console;\n    logger.log(\"\");\n    logger.log(\"[gencow] \uD83D\uDEE1\uFE0F  ownerRls \u2014 2-Layer Data Isolation:\");\n    for (const table of params.rlsTables) {\n        const mode = table.readPublic ? \"read: public, CUD: owner\" : \"full owner isolation\";\n        logger.log(`[gencow]   \u2713 ${table.tableName} (${table.columnName}) \u2014 ${mode}`);\n    }\n    logger.log(\"[gencow]   Layer 1: createCrud() auto-filters all queries by userId\");\n    logger.log(\"[gencow]   Layer 2: PostgreSQL RLS policies (set_config in transactions)\");\n}\nfunction registerAdminSurfaceGuard(app, policy) {\n    if (policy.mode !== \"local-dev\" || policy.allowPublicDevHost) {\n        return;\n    }\n    if (!app.use) {\n        throw new Error(\"registerAdminSurfaceRoutes: local-only admin surface requires app.use()\");\n    }\n    app.use(\"/_admin/*\", createAdminAccessMiddleware(policy));\n}\nexport function registerAdminSurfaceRoutes(params) {\n    const access = params.access ?? \"public\";\n    if (access === \"disabled\") {\n        return;\n    }\n    const accessPolicy = createAdminAccessPolicy(access);\n    registerAdminSurfaceGuard(params.app, accessPolicy);\n    const createAdminRoutesImpl = params.createAdminRoutesImpl ?? createAdminRoutes;\n    const adminRoutes = createAdminRoutesImpl(params.db, params.rawSql, params.driver, params.buildCtx, params.storage, params.functionsPath, {\n        accessPolicy,\n        adminDataRawSql: (params.adminDataRawSql ?? params.rawSql),\n        dataAccessInternalToken: params.dataAccessInternalToken,\n        requireDataAccessInternalToken: params.requireDataAccessInternalToken,\n        scheduler: params.scheduler,\n        getOperationInventory: params.getOperationInventory,\n        getFunctionDetails: params.getFunctionDetails,\n        getDeprecatedRuntimeUsage: params.getDeprecatedRuntimeUsage,\n    });\n    params.app.route(\"/_admin\", adminRoutes);\n    params.app.route(\"/_admin/settings\", params.settingsRoutes);\n}\n", "import { resolve } from \"path\";\nfunction buildRuntimeIdentityHeaders(identity) {\n    return {\n        ...(identity?.appDbId ? { \"X-Gencow-App-Id\": String(identity.appDbId) } : {}),\n        ...(identity?.appName ? { \"X-Gencow-App-Name\": identity.appName } : {}),\n    };\n}\nexport function buildUsageReportRequest(metrics, internalToken, identity, backendRouteUsage = []) {\n    return {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\",\n            \"X-Internal-Token\": internalToken,\n            ...buildRuntimeIdentityHeaders(identity),\n        },\n        body: JSON.stringify({\n            metrics,\n            ...(backendRouteUsage.length > 0 ? { backendRouteUsage } : {}),\n        }),\n    };\n}\nexport async function flushRuntimeMetrics(params) {\n    if (params.runtimeBuffer.isEmpty) {\n        return false;\n    }\n    const logger = params.logger ?? console;\n    const metrics = params.runtimeBuffer.drain();\n    const backendRouteUsage = params.runtimeBuffer.drainBackendRouteUsage?.() ?? [];\n    try {\n        const response = await params.fetchPlatformInternal(\"/internal/usage/report\", buildUsageReportRequest(metrics, params.internalToken, {\n            appName: params.appName,\n            appDbId: params.appDbId,\n        }, backendRouteUsage), params.label);\n        if (!response.ok) {\n            logger.warn(`[metering] flush failed: ${response.status}`);\n        }\n        return true;\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.warn(`[metering] flush error:`, message);\n        return true;\n    }\n}\nexport function startUsageMeteringFlush(params) {\n    if (!params.isBaas) {\n        return;\n    }\n    const logger = params.logger ?? console;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const randomImpl = params.randomImpl ?? Math.random;\n    const intervalMs = params.intervalMs ?? 10_000;\n    logger.log(`[metering] BaaS mode \u2014 flushing to ${params.meteringUrl} every ${intervalMs / 1000}s`);\n    let flushing = false;\n    const runFlush = () => {\n        if (flushing)\n            return;\n        flushing = true;\n        void flushRuntimeMetrics({\n            runtimeBuffer: params.runtimeBuffer,\n            fetchPlatformInternal: params.fetchPlatformInternal,\n            internalToken: params.internalToken,\n            appName: params.appName,\n            appDbId: params.appDbId,\n            label: \"usage-report-flush\",\n            logger,\n        }).finally(() => {\n            flushing = false;\n        });\n    };\n    const firstDelayMs = Math.floor(Math.max(0, Math.min(1, randomImpl())) * intervalMs);\n    setTimeoutImpl(() => {\n        runFlush();\n        setIntervalImpl(runFlush, intervalMs);\n    }, firstDelayMs);\n}\nexport function buildShutdownLogLine(params) {\n    const shutdownReason = params.marker?.reason || params.env.GENCOW_START_REASON || \"unknown\";\n    const restartId = params.marker?.restartId || params.env.GENCOW_RESTART_ID || \"unknown\";\n    const appName = params.env.GENCOW_APP_NAME || \"unknown\";\n    const markerAt = params.marker?.at ? `, markerAt=${params.marker.at}` : \"\";\n    return `\\n[server] ${params.signal} received \u2014 shutting down... (app=${appName}, reason=${shutdownReason}, restartId=${restartId}${markerAt})`;\n}\nexport async function shutdownWarmPoolIfPlatform(params) {\n    if (!params.isPlatform) {\n        return;\n    }\n    const logger = params.logger ?? console;\n    const importProvisioner = params.importProvisioner ?? ((path) => import(path));\n    try {\n        const provisioner = await importProvisioner(resolve(params.functionsPath, \"../src/provisioner.ts\"));\n        provisioner.markAllRunningAppsForPlatformShutdown();\n        await provisioner.shutdownWarmPoolForPlatform();\n    }\n    catch (error) {\n        logger.error(`[server] Failed to shutdown warm pool:`, error instanceof Error ? error.message : String(error));\n    }\n}\nexport function createShutdownHandler(params) {\n    const logger = params.logger ?? console;\n    const exit = params.exit ?? process.exit;\n    return async (signal) => {\n        const marker = params.readShutdownReasonFromMarker();\n        logger.log(buildShutdownLogLine({\n            signal,\n            marker,\n            env: params.env,\n        }));\n        await shutdownWarmPoolIfPlatform({\n            isPlatform: params.isPlatform,\n            functionsPath: params.functionsPath,\n            logger,\n            importProvisioner: params.importProvisioner,\n        });\n        if (params.isBaas) {\n            await flushRuntimeMetrics({\n                runtimeBuffer: params.runtimeBuffer,\n                fetchPlatformInternal: params.fetchPlatformInternal,\n                internalToken: params.internalToken,\n                appName: params.env.GENCOW_APP_NAME,\n                appDbId: params.env.GENCOW_APP_DB_ID,\n                label: \"usage-report-shutdown\",\n                logger: {\n                    log: logger.log.bind(logger),\n                    error: logger.error.bind(logger),\n                    warn() { },\n                },\n            });\n        }\n        await params.close();\n        exit(0);\n    };\n}\nexport function registerShutdownSignals(params) {\n    params.processLike.on(\"SIGTERM\", () => {\n        void params.shutdown(\"SIGTERM\");\n    });\n    params.processLike.on(\"SIGINT\", () => {\n        void params.shutdown(\"SIGINT\");\n    });\n}\n", "import { buildRealtimeCtx, createRlsDb, withRetry } from \"@gencow/core\";\nimport { buildRlsSessionContextFromAuthConfig, emptyRlsSessionContextFromAuthConfig, } from \"./build-rls-session-context.js\";\nimport { emitRagOperationMetric } from \"./rag-operations-metrics.js\";\nimport { createGroundingRuntime } from \"./server-grounded-answer-runtime.js\";\nimport { parseSearchTierConfig } from \"./server-search-config.js\";\nimport { createSearchRuntime } from \"./server-search-runtime.js\";\nimport { createServerServices } from \"./server-document-runtime.js\";\nimport { buildPlatformRequestRlsContext } from \"./server-platform-rls.js\";\nfunction resolveRequestRlsContext(params) {\n    if (params.isPlatform) {\n        return buildPlatformRequestRlsContext({\n            userId: params.user?.id ?? \"\",\n            role: params.user?.role,\n            isPlatform: true,\n        });\n    }\n    const build = params.buildRlsSessionContextImpl ?? ((user, auth) => buildRlsSessionContextFromAuthConfig(user, auth));\n    return build(params.user, params.authConfig);\n}\nexport function createUnavailableScheduler(isBaas) {\n    return {\n        runAfter: () => {\n            throw new Error(isBaas\n                ? \"Scheduler not initialized \u2014 add defineApi({ crons }) or legacy gencow/crons.ts to enable. Note: In BaaS mode, scheduler.runAfter() is sleep-unsafe (timers are lost when app goes idle). Recommended: split into separate mutations and call sequentially from frontend.\"\n                : \"Scheduler not initialized \u2014 add defineApi({ crons }) or legacy gencow/crons.ts to enable.\");\n        },\n        runAt: () => {\n            throw new Error(isBaas\n                ? \"Scheduler not initialized \u2014 add defineApi({ crons }) or legacy gencow/crons.ts to enable. Note: In BaaS mode, scheduler.runAt() is sleep-unsafe.\"\n                : \"Scheduler not initialized \u2014 add defineApi({ crons }) or legacy gencow/crons.ts to enable.\");\n        },\n        cancel: () => false,\n        cron: () => { },\n        registerAction: () => { },\n        executeAction: async () => { },\n    };\n}\nexport function createRequestContextBuilder(params) {\n    const buildRealtimeCtxImpl = params.buildRealtimeCtxImpl ?? buildRealtimeCtx;\n    const createRlsDbImpl = params.createRlsDbImpl ?? createRlsDb;\n    const buildRlsSessionContextImpl = params.buildRlsSessionContextImpl ?? buildRlsSessionContextFromAuthConfig;\n    const withRetryImpl = params.withRetryImpl ?? withRetry;\n    const systemDb = params.systemDb ?? params.db;\n    // Search capability is captured once per app process. Plan/extension changes require restart or redeploy.\n    const searchTierConfig = parseSearchTierConfig(process.env.__GENCOW_SEARCH_TIER_CONFIG);\n    const createServicesImpl = params.createServicesImpl ?? createServerServices;\n    const unavailableScheduler = params.scheduler ?? createUnavailableScheduler(params.isBaas);\n    const services = createServicesImpl({\n        appName: params.appName,\n        db: params.db,\n        storage: params.storage,\n        appToken: params.internalToken,\n        documentProxyUrl: process.env.GENCOW_DOCUMENT_PROXY_URL ?? null,\n        allowPrivateExternalCorpora: (process.env.GENCOW_DOCUMENT_EXTERNAL_PRIVATE_CORPORA ?? \"\")\n            .split(\",\")\n            .map((value) => value.trim())\n            .filter(Boolean),\n        fetchImpl: fetch,\n    });\n    const noopRealtime = {\n        emit: () => { },\n        invalidate: () => { },\n        refresh: () => { },\n        channel: () => ({\n            authorize: () => {\n                throw new Error(\"Authorized realtime channel tokens are not available in refresh context\");\n            },\n            publish: () => { },\n            invalidate: () => { },\n            revoke: () => { },\n        }),\n        query: () => ({\n            authorize: () => {\n                throw new Error(\"Authorized realtime query tokens are not available in refresh context\");\n            },\n            invalidate: () => { },\n            revoke: () => { },\n        }),\n        invalidateScoped: () => { },\n    };\n    const observeRagMetric = (event) => emitRagOperationMetric(params.db, {\n        appId: params.appName,\n        ...event,\n    });\n    const buildRefreshCtx = () => {\n        const refreshAuth = {\n            getUserIdentity: () => null,\n            requireAuth: () => {\n                throw new Error(\"Auth not available in refresh context\");\n            },\n        };\n        const searchRuntime = createSearchRuntime({\n            db: params.db,\n            auth: refreshAuth,\n            config: searchTierConfig,\n            observeRagOperation: observeRagMetric,\n        });\n        const refreshRls = params.isPlatform\n            ? buildPlatformRequestRlsContext({ userId: \"\", isPlatform: true })\n            : emptyRlsSessionContextFromAuthConfig(params.authConfig);\n        const partialCtx = {\n            db: createRlsDbImpl(params.db, refreshRls),\n            unsafeDb: systemDb,\n            rawSql: params.rawSql,\n            analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n            auth: refreshAuth,\n            storage: params.storage,\n            realtime: noopRealtime,\n            scheduler: unavailableScheduler,\n            retry: withRetryImpl,\n            services,\n            ...searchRuntime,\n            grounding: createGroundingRuntime({\n                db: params.db,\n                auth: refreshAuth,\n                search: searchRuntime.search,\n                observeRagAnswer: observeRagMetric,\n            }),\n        };\n        return partialCtx;\n    };\n    return (honoCtx) => {\n        const authCtx = honoCtx.get(\"auth\") ?? {\n            getUserIdentity: () => null,\n            requireAuth: () => {\n                throw new Error(\"Authentication required\");\n            },\n        };\n        const searchRuntime = createSearchRuntime({\n            db: params.db,\n            auth: authCtx,\n            config: searchTierConfig,\n            observeRagOperation: observeRagMetric,\n        });\n        const partialCtx = {\n            auth: authCtx,\n            storage: params.storage,\n            realtime: buildRealtimeCtxImpl({\n                fanout: params.realtimeFanout,\n                buildCtxForRefresh: buildRefreshCtx,\n                appName: params.appName,\n                channelTokenSecret: params.internalToken,\n                auth: authCtx,\n                deferFanout: params.deferRealtimeFanout,\n                generatedCrudRealtimeEmitMode: params.generatedCrudRealtimeEmitMode,\n                getProcedureQuery: (key) => {\n                    const proc = params.procedureQueryMap?.get(key);\n                    if (!proc)\n                        return undefined;\n                    return { handler: proc.handler, inputSchema: proc.inputSchema };\n                },\n            }),\n            scheduler: unavailableScheduler,\n            retry: withRetryImpl,\n            services,\n            ...searchRuntime,\n            grounding: createGroundingRuntime({\n                db: params.db,\n                auth: authCtx,\n                search: searchRuntime.search,\n                observeRagAnswer: observeRagMetric,\n            }),\n        };\n        partialCtx.db = createRlsDbImpl(params.db, resolveRequestRlsContext({\n            user: authCtx.getUserIdentity(),\n            isPlatform: params.isPlatform,\n            authConfig: params.authConfig,\n            buildRlsSessionContextImpl,\n        }));\n        partialCtx.unsafeDb = systemDb;\n        partialCtx.rawSql = params.rawSql;\n        partialCtx.analyticsRawSql = params.analyticsRawSql ?? params.rawSql;\n        return partialCtx;\n    };\n}\n", "import { defaultRlsSessionContext, hasMapSessionToContext, validateRlsSessionContext, } from \"@gencow/core\";\n/**\n * Maps `AppUser` \u2192 `RlsSessionContext` for `createRlsDb`.\n */\nexport function buildRlsSessionContextFromAuthConfig(user, authConfig) {\n    const rls = authConfig?.rls;\n    if (!rls) {\n        return defaultRlsSessionContext(String(user?.id ?? \"\"));\n    }\n    if (hasMapSessionToContext(rls)) {\n        const mapped = rls.mapSessionToContext({ user });\n        if (mapped instanceof Promise) {\n            throw new Error(\"buildRlsSessionContextFromAuthConfig: async mapSessionToContext is not supported \u2014 return RlsSessionContext synchronously\");\n        }\n        validateRlsSessionContext(mapped);\n        return mapped;\n    }\n    return defaultRlsSessionContext(String(user?.id ?? \"\"));\n}\n/** Fail-closed session for refresh / unauthenticated request paths. */\nexport function emptyRlsSessionContextFromAuthConfig(authConfig) {\n    return buildRlsSessionContextFromAuthConfig(null, authConfig);\n}\n", "import { sql } from \"drizzle-orm\";\nexport function resolveRagMetricAppId(appId) {\n    return appId?.trim() || process.env.GENCOW_APP_NAME?.trim() || \"app\";\n}\nexport function rowsFromMetricResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function emitRagOperationMetric(db, input) {\n    if (!Number.isFinite(input.metricValue))\n        return;\n    await db.execute(sql `\n    INSERT INTO rag_operation_metrics (\n      id,\n      app_id,\n      corpus,\n      visibility_scope,\n      owner_user_id,\n      operation,\n      job_id,\n      workflow_id,\n      source_id,\n      metric_name,\n      metric_value,\n      unit,\n      metadata\n    )\n    VALUES (\n      ${crypto.randomUUID()},\n      ${resolveRagMetricAppId(input.appId)},\n      ${input.corpus},\n      ${input.visibility},\n      ${input.ownerUserId ?? null},\n      ${input.operation},\n      ${input.jobId ?? null},\n      ${input.workflowId ?? null},\n      ${input.sourceId ?? null},\n      ${input.metricName},\n      ${input.metricValue},\n      ${input.unit ?? null},\n      ${JSON.stringify(input.metadata ?? {})}::jsonb\n    )\n  `);\n}\nexport async function emitRagOperationMetrics(db, inputs) {\n    for (const input of inputs) {\n        await emitRagOperationMetric(db, input);\n    }\n}\nexport function mapRagMetricRow(row) {\n    return {\n        id: row.id,\n        appId: row.app_id,\n        corpus: row.corpus,\n        visibility: row.visibility_scope,\n        ownerUserId: row.owner_user_id,\n        operation: row.operation,\n        jobId: row.job_id,\n        workflowId: row.workflow_id,\n        sourceId: row.source_id,\n        metricName: row.metric_name,\n        metricValue: Number(row.metric_value),\n        unit: row.unit,\n        metadata: row.metadata && typeof row.metadata === \"object\" && !Array.isArray(row.metadata)\n            ? row.metadata\n            : {},\n        recordedAt: row.recorded_at instanceof Date ? row.recorded_at.toISOString() : String(row.recorded_at),\n    };\n}\n", "export function buildTargetedResearchQueries(params) {\n    const queries = [];\n    for (const claim of params.claims) {\n        if (claim.status === \"supported\")\n            continue;\n        queries.push(claim.claimText);\n        if (params.mode === \"compare\" && params.compare) {\n            queries.push(`${params.compare.left} ${claim.claimText}`);\n            queries.push(`${params.compare.right} ${claim.claimText}`);\n        }\n        for (const reason of claim.missingEvidenceReasons ?? []) {\n            queries.push(`${params.question} ${reason}`);\n        }\n    }\n    return dedupeQueries(queries).slice(0, params.budget.maxResearchQueriesPerLoop);\n}\nfunction dedupeQueries(queries) {\n    const seen = new Set();\n    const result = [];\n    for (const query of queries) {\n        const normalized = query.replace(/\\s+/g, \" \").trim();\n        const key = normalized.toLowerCase();\n        if (!normalized || seen.has(key))\n            continue;\n        seen.add(key);\n        result.push(normalized);\n    }\n    return result;\n}\n", "import { DEFAULT_GROUNDING_BUDGET } from \"@gencow/core\";\nconst SNIPPET_MAX_CHARS = 400;\nconst MAX_VERIFY_LOOPS = 5;\nconst MAX_RESEARCH_QUERIES_PER_LOOP = 10;\nconst MAX_CITATIONS_PER_CLAIM = 10;\nconst MAX_CLAIMS_PER_ANSWER = 30;\nconst STOP_WORDS = new Set([\n    \"about\",\n    \"after\",\n    \"again\",\n    \"allowed\",\n    \"also\",\n    \"common\",\n    \"could\",\n    \"does\",\n    \"for\",\n    \"from\",\n    \"has\",\n    \"have\",\n    \"higher\",\n    \"into\",\n    \"than\",\n    \"that\",\n    \"the\",\n    \"this\",\n    \"what\",\n    \"when\",\n    \"where\",\n    \"with\",\n]);\nexport function rowsFromExecute(result) {\n    if (Array.isArray(result)) {\n        return result;\n    }\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport function resolveGroundingBudget(input) {\n    return {\n        maxVerifyLoops: positiveInteger(input?.maxVerifyLoops, DEFAULT_GROUNDING_BUDGET.maxVerifyLoops, MAX_VERIFY_LOOPS),\n        maxResearchQueriesPerLoop: positiveInteger(input?.maxResearchQueriesPerLoop, DEFAULT_GROUNDING_BUDGET.maxResearchQueriesPerLoop, MAX_RESEARCH_QUERIES_PER_LOOP),\n        maxCitationsPerClaim: positiveInteger(input?.maxCitationsPerClaim, DEFAULT_GROUNDING_BUDGET.maxCitationsPerClaim, MAX_CITATIONS_PER_CLAIM),\n        maxClaimsPerAnswer: positiveInteger(input?.maxClaimsPerAnswer, DEFAULT_GROUNDING_BUDGET.maxClaimsPerAnswer, MAX_CLAIMS_PER_ANSWER),\n    };\n}\nexport function clampConfidence(value) {\n    if (!Number.isFinite(value))\n        return 0;\n    return Math.max(0, Math.min(1, value));\n}\nexport function truncateSnippet(text, maxChars = SNIPPET_MAX_CHARS) {\n    const normalized = text.replace(/\\s+/g, \" \").trim();\n    if (normalized.length <= maxChars)\n        return normalized;\n    return `${normalized.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\nexport function extractSignalTerms(text) {\n    const tokens = text.toLowerCase().match(/[\\p{L}\\p{N}]+/gu) ?? [];\n    return [...new Set(tokens.filter((token) => token.length > 1 && !STOP_WORDS.has(token)))];\n}\nexport function citationKey(citation) {\n    return [citation.sourceId, citation.sectionId ?? \"\", citation.chunkIds.join(\",\"), citation.snippet].join(\"::\");\n}\nexport function dedupeCitations(citations) {\n    const seen = new Set();\n    const result = [];\n    for (const citation of citations) {\n        const key = citationKey(citation);\n        if (seen.has(key))\n            continue;\n        seen.add(key);\n        result.push(citation);\n    }\n    return result;\n}\nfunction positiveInteger(value, fallback, max) {\n    if (!Number.isInteger(value) || value === undefined || value <= 0) {\n        return fallback;\n    }\n    return Math.min(value, max);\n}\n", "import { clampConfidence, dedupeCitations, extractSignalTerms } from \"./server-grounding-common.js\";\nconst NEGATION_TERMS = new Set([\"not\", \"no\", \"never\", \"cannot\", \"cant\", \"can't\", \"wont\", \"won't\", \"without\"]);\nconst POLARITY_STOP_WORDS = new Set([\n    \"a\",\n    \"an\",\n    \"and\",\n    \"are\",\n    \"as\",\n    \"at\",\n    \"be\",\n    \"been\",\n    \"being\",\n    \"by\",\n    \"for\",\n    \"from\",\n    \"in\",\n    \"is\",\n    \"it\",\n    \"of\",\n    \"on\",\n    \"or\",\n    \"that\",\n    \"the\",\n    \"this\",\n    \"to\",\n    \"was\",\n    \"were\",\n    \"with\",\n    \"within\",\n]);\nexport function verifyClaims(params) {\n    return params.claims.map((claim, index) => {\n        const rankedAll = rankCitationsForClaim(claim, params.citations);\n        const hasContradiction = params.citations.some((citation) => hasContradictionRisk(claim.claimText, citation.snippet));\n        const ranked = rankedAll\n            .filter((citation) => citation.coverage !== \"context\")\n            .slice(0, params.budget.maxCitationsPerClaim);\n        const base = {\n            claimId: claim.claimId ?? `claim-${index + 1}`,\n            claimText: claim.claimText,\n            citations: ranked,\n        };\n        if (params.mode === \"compare\" && params.compare) {\n            return {\n                ...base,\n                ...withContradictionReason(verifyCompareClaim(params.compare, ranked), hasContradiction),\n            };\n        }\n        if (params.mode === \"topic\") {\n            return {\n                ...base,\n                ...withContradictionReason(verifyTopicClaim(params.topic, ranked), hasContradiction),\n            };\n        }\n        return { ...base, ...withContradictionReason(verifyGenericClaim(ranked), hasContradiction) };\n    });\n}\nfunction rankCitationsForClaim(claim, citations) {\n    const terms = [\n        ...extractSignalTerms(claim.claimText),\n        ...(claim.requiredTerms ?? []).map((term) => term.toLowerCase()),\n    ];\n    if (terms.length === 0)\n        return citations;\n    return dedupeCitations(citations)\n        .map((citation) => {\n        const snippet = citation.snippet.toLowerCase();\n        const matched = terms.filter((term) => snippet.includes(term)).length;\n        const ratio = matched / terms.length;\n        const contradictionRisk = hasContradictionRisk(claim.claimText, citation.snippet);\n        const coverage = contradictionRisk\n            ? \"context\"\n            : matched >= 2 || ratio >= 0.5\n                ? \"direct\"\n                : matched > 0\n                    ? \"partial\"\n                    : \"context\";\n        return {\n            ...citation,\n            coverage,\n            confidence: contradictionRisk ? 0 : clampConfidence(Math.max(ratio, matched > 0 ? 0.35 : 0)),\n        };\n    })\n        .sort((left, right) => right.confidence - left.confidence);\n}\nfunction withContradictionReason(result, hasContradiction) {\n    if (!hasContradiction || result.status === \"supported\")\n        return result;\n    return {\n        ...result,\n        missingEvidenceReasons: [\n            ...(result.missingEvidenceReasons ?? []),\n            \"Potential contradiction or negation mismatch found in retrieved evidence\",\n        ],\n    };\n}\nfunction verifyGenericClaim(citations) {\n    if (citations.some((citation) => citation.coverage === \"direct\")) {\n        return { status: \"supported\" };\n    }\n    if (citations.length > 0) {\n        return {\n            status: \"partially_supported\",\n            missingEvidenceReasons: [\"Only partial citation coverage is available for this claim\"],\n        };\n    }\n    return {\n        status: \"insufficient_evidence\",\n        missingEvidenceReasons: [\"No direct citation found for this claim\"],\n    };\n}\nfunction verifyCompareClaim(compare, citations) {\n    const leftCovered = sideCovered(compare.left, citations);\n    const rightCovered = sideCovered(compare.right, citations);\n    if (leftCovered && rightCovered && citations.some((citation) => citation.coverage === \"direct\")) {\n        return { status: \"supported\" };\n    }\n    const missing = [\n        ...(!leftCovered ? [`Missing compare-side evidence for ${compare.left}`] : []),\n        ...(!rightCovered ? [`Missing compare-side evidence for ${compare.right}`] : []),\n    ];\n    return {\n        status: citations.length > 0 ? \"partially_supported\" : \"insufficient_evidence\",\n        missingEvidenceReasons: missing.length > 0 ? missing : [\"Compare evidence is not balanced across both sides\"],\n    };\n}\nfunction verifyTopicClaim(topic, citations) {\n    const minDistinctSections = topic?.minDistinctSections ?? 2;\n    const distinctSections = new Set(citations.map((citation) => citation.sectionId ?? citation.chunkIds[0]))\n        .size;\n    if (distinctSections >= minDistinctSections) {\n        return { status: \"supported\" };\n    }\n    if (citations.length > 0) {\n        return {\n            status: \"partially_supported\",\n            missingEvidenceReasons: [`Topic section coverage is ${distinctSections}/${minDistinctSections}`],\n        };\n    }\n    return {\n        status: \"insufficient_evidence\",\n        missingEvidenceReasons: [\"No topic evidence found\"],\n    };\n}\nfunction sideCovered(side, citations) {\n    const terms = extractSignalTerms(side);\n    if (terms.length === 0)\n        return false;\n    return citations.some((citation) => {\n        const snippet = citation.snippet.toLowerCase();\n        return terms.some((term) => snippet.includes(term));\n    });\n}\nfunction hasContradictionRisk(claimText, snippet) {\n    const claimTokens = tokenizeForPolarity(claimText);\n    const snippetTokens = tokenizeForPolarity(snippet);\n    const sharedTerms = meaningfulSharedTerms(claimTokens, snippetTokens);\n    if (sharedTerms.length < 2)\n        return false;\n    return sharedTerms.some((term) => {\n        const claimNegated = isTermNegated(claimTokens, term);\n        const snippetNegated = isTermNegated(snippetTokens, term);\n        return claimNegated !== snippetNegated && (claimNegated || snippetNegated);\n    });\n}\nfunction meaningfulSharedTerms(leftTokens, rightTokens) {\n    const right = new Set(rightTokens);\n    return [\n        ...new Set(leftTokens.filter((token) => token.length > 1 &&\n            right.has(token) &&\n            !NEGATION_TERMS.has(token) &&\n            !POLARITY_STOP_WORDS.has(token))),\n    ];\n}\nfunction isTermNegated(tokens, term) {\n    return tokens.some((token, index) => {\n        if (token !== term)\n            return false;\n        const windowStart = Math.max(0, index - 3);\n        return tokens.slice(windowStart, index).some((candidate) => NEGATION_TERMS.has(candidate));\n    });\n}\nfunction tokenizeForPolarity(text) {\n    return text.toLowerCase().match(/[\\p{L}\\p{N}']+/gu) ?? [];\n}\n", "import { dedupeCitations } from \"./server-grounding-common.js\";\nexport function finalizeGroundedAnswer(claims) {\n    const citations = dedupeCitations(claims.flatMap((claim) => claim.citations));\n    const insufficient = claims.filter((claim) => claim.status === \"insufficient_evidence\");\n    const partial = claims.filter((claim) => claim.status === \"partially_supported\");\n    const warnings = [\n        ...(insufficient.length > 0 ? [`${insufficient.length} claim(s) have insufficient evidence`] : []),\n        ...(partial.length > 0 ? [`${partial.length} claim(s) are partially supported`] : []),\n    ];\n    return {\n        answer: buildAnswerText(claims),\n        claims,\n        citations,\n        warnings,\n        grounded: insufficient.length === 0,\n    };\n}\nfunction buildAnswerText(claims) {\n    const visibleClaims = claims.filter((claim) => claim.status !== \"insufficient_evidence\");\n    if (visibleClaims.length === 0) {\n        return \"I could not find enough evidence to answer confidently.\";\n    }\n    return visibleClaims\n        .map((claim) => claim.status === \"partially_supported\" ? `${claim.claimText} (partially supported)` : claim.claimText)\n        .join(\"\\n\");\n}\n", "import { sql } from \"drizzle-orm\";\nimport { rowsFromExecute, truncateSnippet } from \"./server-grounding-common.js\";\nexport async function buildCanonicalCitations(params) {\n    const chunkIds = [...new Set(params.hits.map((hit) => String(hit.row.id ?? hit.id)))];\n    if (chunkIds.length === 0)\n        return [];\n    const rows = await params.db.execute(buildCanonicalCitationQuery(params.scope, params.auth, chunkIds));\n    const rowsByChunkId = new Map(rowsFromExecute(rows).map((row) => [row.chunk_id, row]));\n    const citations = [];\n    for (const hit of params.hits) {\n        const row = rowsByChunkId.get(String(hit.row.id ?? hit.id));\n        if (!row)\n            continue;\n        citations.push({\n            sourceId: row.source_id,\n            sourceTitle: row.source_title,\n            ...(row.section_id ? { sectionId: row.section_id } : {}),\n            ...(toStringArray(row.section_path).length > 0 ? { sectionPath: toStringArray(row.section_path) } : {}),\n            ...numberRange(row.chunk_page_start ?? row.section_page_start, row.chunk_page_end ?? row.section_page_end),\n            chunkIds: [row.chunk_id],\n            snippet: truncateSnippet(row.chunk_text),\n            coverage: \"context\",\n            confidence: 0,\n        });\n    }\n    return citations;\n}\nfunction buildCanonicalCitationQuery(scope, auth, chunkIds) {\n    return sql `\n    SELECT\n      c.id AS chunk_id,\n      c.chunk_text AS chunk_text,\n      c.source_id AS source_id,\n      s.source_title AS source_title,\n      sec.id AS section_id,\n      sec.section_path AS section_path,\n      c.page_start AS chunk_page_start,\n      c.page_end AS chunk_page_end,\n      sec.page_start AS section_page_start,\n      sec.page_end AS section_page_end\n    FROM rag_chunks c\n    JOIN rag_sources s\n      ON s.id = c.source_id\n      AND s.corpus = c.corpus\n      AND s.visibility_scope = c.visibility_scope\n      AND COALESCE(s.owner_user_id, '') = COALESCE(c.owner_user_id, '')\n    LEFT JOIN rag_sections sec\n      ON sec.id = c.section_id\n      AND sec.corpus = c.corpus\n      AND sec.visibility_scope = c.visibility_scope\n      AND COALESCE(sec.owner_user_id, '') = COALESCE(c.owner_user_id, '')\n    WHERE c.id IN (${joinSql(chunkIds.map((chunkId) => sql `${chunkId}`), \", \")})\n      AND c.corpus = ${scope.corpus}\n      AND c.visibility_scope = ${scope.visibility}\n      AND ${buildOwnerClause(scope, auth)}\n  `;\n}\nfunction joinSql(chunks, separator) {\n    if (chunks.length === 0) {\n        return sql `true`;\n    }\n    let current = chunks[0];\n    for (const chunk of chunks.slice(1)) {\n        current = sql `${current}${sql.raw(separator)}${chunk}`;\n    }\n    return current;\n}\nfunction buildOwnerClause(scope, auth) {\n    if (scope.visibility === \"private\") {\n        const identity = auth.requireAuth();\n        const ownerUserId = scope.ownerUserId ?? identity.id;\n        if (ownerUserId !== identity.id) {\n            return sql `false`;\n        }\n        return sql `c.owner_user_id = ${ownerUserId}`;\n    }\n    if (scope.ownerUserId) {\n        return sql `c.owner_user_id = ${scope.ownerUserId}`;\n    }\n    return sql `c.owner_user_id IS NULL`;\n}\nfunction numberRange(start, end) {\n    return {\n        ...(typeof start === \"number\" ? { pageStart: start } : {}),\n        ...(typeof end === \"number\" ? { pageEnd: end } : {}),\n    };\n}\nfunction toStringArray(value) {\n    if (!Array.isArray(value))\n        return [];\n    return value.filter((item) => typeof item === \"string\" && item.length > 0);\n}\n", "import { buildTargetedResearchQueries } from \"./server-claim-gap-analysis.js\";\nimport { verifyClaims } from \"./server-claim-verifier.js\";\nimport { finalizeGroundedAnswer } from \"./server-grounded-answer-finalizer.js\";\nimport { buildCanonicalCitations } from \"./server-grounding-citations.js\";\nimport { dedupeCitations, resolveGroundingBudget } from \"./server-grounding-common.js\";\nexport function createGroundingRuntime(params) {\n    return {\n        async answer(input) {\n            const startedAt = Date.now();\n            const budget = resolveGroundingBudget(input.budget);\n            const claims = normalizeClaims(input.claims, input.question, budget.maxClaimsPerAnswer);\n            const mode = input.mode ?? \"qa\";\n            let citations = await retrieveCitations(params, input, input.question, budget);\n            let verified = verifyClaims({\n                claims,\n                citations,\n                mode,\n                compare: input.compare,\n                topic: input.topic,\n                budget,\n            });\n            for (let loop = 0; loop < budget.maxVerifyLoops && hasGaps(verified); loop += 1) {\n                const queries = buildTargetedResearchQueries({\n                    question: input.question,\n                    claims: verified,\n                    mode,\n                    compare: input.compare,\n                    budget,\n                });\n                if (queries.length === 0)\n                    break;\n                const extra = await retrieveQueries(params, input, queries, budget);\n                citations = dedupeCitations([...citations, ...extra]);\n                verified = verifyClaims({\n                    claims,\n                    citations,\n                    mode,\n                    compare: input.compare,\n                    topic: input.topic,\n                    budget,\n                });\n            }\n            const answer = finalizeGroundedAnswer(verified);\n            await observeAnswerMetrics(params, {\n                input,\n                answer,\n                mode,\n                startedAt,\n            });\n            return answer;\n        },\n    };\n}\nfunction normalizeClaims(rawClaims, question, maxClaims) {\n    const claims = rawClaims?.length ? rawClaims : [{ claimText: question }];\n    const normalized = claims\n        .map((claim, index) => ({\n        claimId: claim.claimId ?? `claim-${index + 1}`,\n        claimText: claim.claimText.trim(),\n        ...(claim.requiredTerms ? { requiredTerms: claim.requiredTerms } : {}),\n    }))\n        .filter((claim) => claim.claimText.length > 0)\n        .slice(0, maxClaims);\n    if (normalized.length === 0) {\n        throw new Error(\"Grounded answer requires at least one non-empty claim\");\n    }\n    return normalized;\n}\nasync function retrieveQueries(deps, input, queries, budget) {\n    const batches = await Promise.all(queries.map((query) => retrieveCitations(deps, input, query, budget)));\n    return dedupeCitations(batches.flat());\n}\nasync function retrieveCitations(deps, input, query, budget) {\n    const response = await deps.search(\"rag_chunks\", query, {\n        fields: [\"chunk_text\", \"lexical_text\"],\n        limit: Math.max(8, budget.maxCitationsPerClaim * 4),\n        scope: input.scope,\n        filters: input.filters,\n    });\n    return buildCanonicalCitations({\n        db: deps.db,\n        auth: deps.auth,\n        scope: input.scope,\n        hits: response.items,\n    });\n}\nfunction hasGaps(claims) {\n    return claims.some((claim) => claim.status !== \"supported\");\n}\nfunction resolveMetricScope(auth, scope) {\n    if (scope.visibility === \"private\") {\n        return {\n            corpus: scope.corpus.trim(),\n            visibility: scope.visibility,\n            ownerUserId: scope.ownerUserId ?? auth.requireAuth().id,\n        };\n    }\n    return {\n        corpus: scope.corpus.trim(),\n        visibility: scope.visibility,\n        ownerUserId: scope.ownerUserId ?? null,\n    };\n}\nasync function observeAnswerMetrics(params, args) {\n    if (!params.observeRagAnswer)\n        return;\n    const claimCount = args.answer.claims.length;\n    const groundedClaimCount = args.answer.claims.filter((claim) => claim.status === \"supported\").length;\n    const base = {\n        ...resolveMetricScope(params.auth, args.input.scope),\n        operation: \"answer\",\n        metadata: {\n            mode: args.mode,\n            grounded: args.answer.grounded,\n            warningCount: args.answer.warnings.length,\n        },\n    };\n    try {\n        await Promise.all([\n            params.observeRagAnswer({\n                ...base,\n                metricName: \"latency_ms\",\n                metricValue: Math.max(0, Date.now() - args.startedAt),\n                unit: \"ms\",\n            }),\n            params.observeRagAnswer({\n                ...base,\n                metricName: \"claim_count\",\n                metricValue: claimCount,\n                unit: \"count\",\n            }),\n            params.observeRagAnswer({\n                ...base,\n                metricName: \"grounded_claim_count\",\n                metricValue: groundedClaimCount,\n                unit: \"count\",\n            }),\n            params.observeRagAnswer({\n                ...base,\n                metricName: \"citation_count\",\n                metricValue: args.answer.citations.length,\n                unit: \"count\",\n            }),\n            params.observeRagAnswer({\n                ...base,\n                metricName: \"citation_attached_ratio\",\n                metricValue: claimCount === 0 ? 0 : groundedClaimCount / claimCount,\n            }),\n        ]);\n    }\n    catch {\n        // Observability must not change grounding behavior.\n    }\n}\n", "export const DEFAULT_SEARCH_TIER_CONFIG = {\n    plan: \"free\",\n    engine: \"tsvector\",\n    hybridSearch: false,\n    locale: \"english\",\n    extensions: {\n        vector: true,\n        pgroonga: false,\n    },\n};\nfunction sanitizePlan(value) {\n    return value === \"pro\" || value === \"scale\" ? value : \"free\";\n}\nfunction sanitizeEngine(value) {\n    return value === \"pgroonga\" ? \"pgroonga\" : \"tsvector\";\n}\nfunction sanitizeLocale(value) {\n    return value === \"multilingual\" ? \"multilingual\" : \"english\";\n}\nfunction cloneDefault() {\n    return {\n        ...DEFAULT_SEARCH_TIER_CONFIG,\n        extensions: { ...DEFAULT_SEARCH_TIER_CONFIG.extensions },\n    };\n}\nexport function parseSearchTierConfig(tierConfigEnv) {\n    if (!tierConfigEnv) {\n        return cloneDefault();\n    }\n    try {\n        const parsed = JSON.parse(tierConfigEnv);\n        if (!parsed || typeof parsed !== \"object\") {\n            return cloneDefault();\n        }\n        return {\n            plan: sanitizePlan(parsed.plan),\n            engine: sanitizeEngine(parsed.engine),\n            hybridSearch: parsed.hybridSearch === true,\n            locale: sanitizeLocale(parsed.locale),\n            extensions: {\n                vector: parsed.extensions?.vector !== false,\n                pgroonga: parsed.extensions?.pgroonga === true,\n            },\n            ...(typeof parsed.degradedReason === \"string\" && parsed.degradedReason.trim()\n                ? { degradedReason: parsed.degradedReason.trim() }\n                : {}),\n        };\n    }\n    catch {\n        return cloneDefault();\n    }\n}\n", "import { sql } from \"drizzle-orm\";\nimport { buildLexicalClause, buildLexicalScore, createLexicalPlan, } from \"./server-search-lexical-plan.js\";\nconst DEFAULT_SEARCH_LIMIT = 20;\nconst MAX_SEARCH_LIMIT = 100;\nconst RRF_K = 60;\nconst IDENTIFIER_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\nconst DEFAULT_FUSION_WEIGHT = 1;\nconst INTERNAL_SEARCH_ROW_KEYS = [\"score\", \"keyword_score\", \"vector_score\", \"fused_score\"];\nexport class SearchRuntimeError extends Error {\n    status;\n    code;\n    constructor(status, code, message) {\n        super(message);\n        this.name = \"SearchRuntimeError\";\n        this.status = status;\n        this.code = code;\n    }\n}\nfunction rowsFromExecute(result) {\n    if (Array.isArray(result)) {\n        return result;\n    }\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction quoteIdentifier(identifier) {\n    return `\"${identifier}\"`;\n}\nfunction requireSafeIdentifier(identifier, errorCode = \"SEARCH_INVALID_IDENTIFIER\") {\n    if (!IDENTIFIER_RE.test(identifier)) {\n        throw new SearchRuntimeError(400, errorCode, `Invalid identifier: ${identifier}`);\n    }\n    return quoteIdentifier(identifier);\n}\nfunction resolveLexicalPlan(config, query) {\n    const plan = createLexicalPlan(config, query);\n    if (!plan.normalizedQuery) {\n        throw new SearchRuntimeError(400, \"SEARCH_QUERY_REQUIRED\", \"Search query is required\");\n    }\n    return plan;\n}\nfunction normalizeLimit(limit) {\n    if (limit === undefined)\n        return DEFAULT_SEARCH_LIMIT;\n    if (!Number.isInteger(limit) || limit <= 0) {\n        throw new SearchRuntimeError(400, \"SEARCH_INVALID_LIMIT\", \"limit must be a positive integer\");\n    }\n    return Math.min(limit, MAX_SEARCH_LIMIT);\n}\nfunction normalizeOffset(offset) {\n    if (offset === undefined)\n        return 0;\n    if (!Number.isInteger(offset) || offset < 0) {\n        throw new SearchRuntimeError(400, \"SEARCH_INVALID_OFFSET\", \"offset must be a non-negative integer\");\n    }\n    return offset;\n}\nfunction normalizePositiveInteger(value, errorCode, label) {\n    if (value === undefined)\n        return undefined;\n    if (!Number.isInteger(value) || value <= 0) {\n        throw new SearchRuntimeError(400, errorCode, `${label} must be a positive integer`);\n    }\n    return value;\n}\nfunction normalizeFiniteNumber(value, errorCode, label) {\n    if (value === undefined)\n        return undefined;\n    if (typeof value !== \"number\" || !Number.isFinite(value)) {\n        throw new SearchRuntimeError(400, errorCode, `${label} must be a finite number`);\n    }\n    return value;\n}\nfunction normalizePositiveNumber(value, errorCode, label) {\n    const normalized = normalizeFiniteNumber(value, errorCode, label);\n    if (normalized === undefined)\n        return undefined;\n    if (normalized <= 0) {\n        throw new SearchRuntimeError(400, errorCode, `${label} must be greater than 0`);\n    }\n    return normalized;\n}\nfunction joinSql(chunks, separator) {\n    if (chunks.length === 0) {\n        return sql `true`;\n    }\n    let current = chunks[0];\n    for (const chunk of chunks.slice(1)) {\n        current = sql `${current}${sql.raw(separator)}${chunk}`;\n    }\n    return current;\n}\nfunction buildScopeClauses(auth, scope) {\n    if (!scope.corpus.trim()) {\n        throw new SearchRuntimeError(400, \"SEARCH_SCOPE_REQUIRED\", \"scope.corpus is required\");\n    }\n    if (![\"private\", \"shared\", \"public\"].includes(scope.visibility)) {\n        throw new SearchRuntimeError(400, \"SEARCH_INVALID_SCOPE\", `Invalid visibility: ${scope.visibility}`);\n    }\n    const clauses = [\n        sql `${sql.raw(requireSafeIdentifier(\"corpus\", \"SEARCH_INVALID_SCOPE_IDENTIFIER\"))} = ${scope.corpus.trim()}`,\n        sql `${sql.raw(requireSafeIdentifier(\"visibility_scope\", \"SEARCH_INVALID_SCOPE_IDENTIFIER\"))} = ${scope.visibility}`,\n    ];\n    if (scope.visibility === \"private\") {\n        const identity = auth.requireAuth();\n        const effectiveOwnerUserId = scope.ownerUserId ?? identity.id;\n        if (effectiveOwnerUserId !== identity.id) {\n            throw new SearchRuntimeError(400, \"SEARCH_SCOPE_OWNER_MISMATCH\", \"scope.ownerUserId must match the authenticated user for private searches\");\n        }\n        clauses.push(sql `${sql.raw(requireSafeIdentifier(\"owner_user_id\", \"SEARCH_INVALID_SCOPE_IDENTIFIER\"))} = ${effectiveOwnerUserId}`);\n        return clauses;\n    }\n    if (scope.ownerUserId) {\n        clauses.push(sql `${sql.raw(requireSafeIdentifier(\"owner_user_id\", \"SEARCH_INVALID_SCOPE_IDENTIFIER\"))} = ${scope.ownerUserId}`);\n    }\n    else {\n        clauses.push(sql `${sql.raw(requireSafeIdentifier(\"owner_user_id\", \"SEARCH_INVALID_SCOPE_IDENTIFIER\"))} IS NULL`);\n    }\n    return clauses;\n}\nfunction buildFilterClauses(filters) {\n    if (!filters) {\n        return [];\n    }\n    const clauses = [];\n    for (const [field, value] of Object.entries(filters.eq ?? {})) {\n        clauses.push(sql `${sql.raw(requireSafeIdentifier(field))} = ${value}`);\n    }\n    for (const [field, values] of Object.entries(filters.in ?? {})) {\n        if (!Array.isArray(values) || values.length === 0) {\n            throw new SearchRuntimeError(400, \"SEARCH_INVALID_FILTER\", `${field} filter \"in\" requires at least one value`);\n        }\n        const placeholders = joinSql(values.map((value) => sql `${value}`), \", \");\n        clauses.push(sql `${sql.raw(requireSafeIdentifier(field))} in (${placeholders})`);\n    }\n    for (const [field, rawRange] of Object.entries(filters.range ?? {})) {\n        const column = sql.raw(requireSafeIdentifier(field));\n        const range = rawRange ?? {};\n        if (range.gte !== undefined) {\n            clauses.push(sql `${column} >= ${range.gte}`);\n        }\n        if (range.lte !== undefined) {\n            clauses.push(sql `${column} <= ${range.lte}`);\n        }\n    }\n    return clauses;\n}\nfunction buildVectorLiteral(vector) {\n    if (!Array.isArray(vector) || vector.length === 0) {\n        throw new SearchRuntimeError(400, \"SEARCH_VECTOR_REQUIRED\", \"vector search requires a non-empty vector\");\n    }\n    if (vector.some((value) => typeof value !== \"number\" || !Number.isFinite(value))) {\n        throw new SearchRuntimeError(400, \"SEARCH_INVALID_VECTOR\", \"vector must contain only finite numbers\");\n    }\n    return `[${vector.join(\",\")}]`;\n}\nfunction buildVectorScore(vectorField, vectorLiteral) {\n    return sql `(1 - (${vectorField} <=> CAST(${vectorLiteral} AS vector)))::double precision`;\n}\nfunction buildVectorOrder(vectorField, vectorLiteral) {\n    return sql `${vectorField} <=> CAST(${vectorLiteral} AS vector)`;\n}\nfunction buildRrfFusedScore(rrfK, keywordWeight, vectorWeight) {\n    return sql `(\n    COALESCE(${keywordWeight}::double precision / (${rrfK} + ${sql.raw(\"kc.keyword_rank\")}), 0) +\n    COALESCE(${vectorWeight}::double precision / (${rrfK} + ${sql.raw(\"vc.vector_rank\")}), 0)\n  )::double precision`;\n}\nfunction normalizeScore(value) {\n    if (value === null || value === undefined)\n        return undefined;\n    const numeric = typeof value === \"number\" ? value : Number(value);\n    return Number.isFinite(numeric) ? numeric : undefined;\n}\nfunction sanitizeSearchRow(row, hiddenColumns) {\n    const sanitizedRow = { ...row };\n    const omittedKeys = new Set([...INTERNAL_SEARCH_ROW_KEYS, ...hiddenColumns]);\n    for (const key of omittedKeys) {\n        delete sanitizedRow[key];\n    }\n    return sanitizedRow;\n}\nfunction applyMinimumScore(rows, scoreKey, minScore) {\n    if (minScore === undefined) {\n        return rows;\n    }\n    return rows.filter((row) => (normalizeScore(row[scoreKey]) ?? Number.NEGATIVE_INFINITY) >= minScore);\n}\nfunction mapSearchRows(rows, meta, scoreKey, mode, hiddenColumns = []) {\n    return {\n        items: rows.map((row) => {\n            const score = normalizeScore(row[scoreKey]) ?? 0;\n            const keywordScore = normalizeScore(row.keyword_score);\n            const vectorScore = normalizeScore(row.vector_score);\n            const itemRow = sanitizeSearchRow(row, hiddenColumns);\n            const matchedBy = mode === \"keyword\"\n                ? [\"keyword\"]\n                : mode === \"vector\"\n                    ? [\"vector\"]\n                    : [\n                        ...(keywordScore !== undefined ? [\"keyword\"] : []),\n                        ...(vectorScore !== undefined ? [\"vector\"] : []),\n                    ];\n            return {\n                id: row.id,\n                row: itemRow,\n                score,\n                ...(mode === \"hybrid\"\n                    ? {\n                        scores: {\n                            ...(keywordScore !== undefined ? { keyword: keywordScore } : {}),\n                            ...(vectorScore !== undefined ? { vector: vectorScore } : {}),\n                            fused: score,\n                        },\n                    }\n                    : {}),\n                matchedBy,\n            };\n        }),\n        meta,\n    };\n}\nfunction createBaseMeta(config, limit, offset, options) {\n    return {\n        engine: config.engine,\n        tier: config.plan,\n        limit,\n        offset,\n        ...(options?.itemCount === limit ? { nextOffset: offset + limit } : {}),\n        ...(options?.fusion ? { fusion: options.fusion } : {}),\n        ...(options?.mode ? { mode: options.mode } : {}),\n        ...(options?.lexicalStrategy ? { lexicalStrategy: options.lexicalStrategy } : {}),\n        ...(options?.keywordCandidateCount !== undefined\n            ? { keywordCandidateCount: options.keywordCandidateCount }\n            : {}),\n        ...(options?.vectorCandidateCount !== undefined\n            ? { vectorCandidateCount: options.vectorCandidateCount }\n            : {}),\n        ...(options?.fusedCandidateCount !== undefined\n            ? { fusedCandidateCount: options.fusedCandidateCount }\n            : {}),\n        ...(options?.minScoreApplied !== undefined ? { minScoreApplied: options.minScoreApplied } : {}),\n    };\n}\nfunction getVectorHiddenColumns(vectorField) {\n    return [\"embedding\", vectorField ?? \"embedding\"];\n}\nfunction resolveMetricScope(auth, scope) {\n    if (scope.visibility === \"private\") {\n        return {\n            corpus: scope.corpus.trim(),\n            visibility: scope.visibility,\n            ownerUserId: scope.ownerUserId ?? auth.requireAuth().id,\n        };\n    }\n    return {\n        corpus: scope.corpus.trim(),\n        visibility: scope.visibility,\n        ownerUserId: scope.ownerUserId ?? null,\n    };\n}\nasync function observeRetrieveMetrics(params, input) {\n    if (!params.observeRagOperation)\n        return;\n    const base = {\n        ...resolveMetricScope(params.auth, input.scope),\n        operation: \"retrieve\",\n        metadata: {\n            table: input.table,\n            mode: input.meta.mode,\n            engine: input.meta.engine,\n            tier: input.meta.tier,\n        },\n    };\n    try {\n        await Promise.all([\n            params.observeRagOperation({\n                ...base,\n                metricName: \"latency_ms\",\n                metricValue: Math.max(0, Date.now() - input.startedAt),\n                unit: \"ms\",\n            }),\n            params.observeRagOperation({\n                ...base,\n                metricName: \"result_count\",\n                metricValue: input.itemCount,\n                unit: \"count\",\n            }),\n        ]);\n    }\n    catch {\n        // Observability must not change search behavior.\n    }\n}\nfunction getVectorSearchAvailabilityError(config) {\n    if (config.extensions.vector) {\n        return null;\n    }\n    return new SearchRuntimeError(503, \"SEARCH_CAPABILITY_DEGRADED\", config.degradedReason ?? \"Vector search extension is unavailable\");\n}\nfunction getHybridSearchAvailabilityError(config) {\n    if (config.plan === \"free\" && config.hybridSearch === false) {\n        return new SearchRuntimeError(402, \"SEARCH_HYBRID_REQUIRES_UPGRADE\", \"Hybrid search requires a plan with lexical + vector search enabled\");\n    }\n    const vectorError = getVectorSearchAvailabilityError(config);\n    if (vectorError) {\n        return vectorError;\n    }\n    if (!config.hybridSearch) {\n        return new SearchRuntimeError(402, \"SEARCH_HYBRID_REQUIRES_UPGRADE\", \"Hybrid search requires a plan with lexical + vector search enabled\");\n    }\n    return null;\n}\nfunction normalizeVectorTuning(options) {\n    return {\n        minScore: normalizeFiniteNumber(options.tuning?.minScore, \"SEARCH_INVALID_MIN_SCORE\", \"tuning.minScore\"),\n    };\n}\nfunction normalizeHybridTuning(options, limit) {\n    const fusion = options.tuning?.fusion?.mode ?? options.fusion ?? \"rrf\";\n    if (fusion !== \"rrf\") {\n        throw new SearchRuntimeError(400, \"SEARCH_INVALID_FUSION\", `Unsupported fusion mode: ${fusion}`);\n    }\n    return {\n        fusion,\n        rrfK: normalizePositiveInteger(options.tuning?.fusion?.rrfK, \"SEARCH_INVALID_RRF_K\", \"tuning.fusion.rrfK\") ??\n            RRF_K,\n        keywordWeight: normalizePositiveNumber(options.tuning?.fusion?.keywordWeight, \"SEARCH_INVALID_FUSION_WEIGHT\", \"tuning.fusion.keywordWeight\") ?? DEFAULT_FUSION_WEIGHT,\n        vectorWeight: normalizePositiveNumber(options.tuning?.fusion?.vectorWeight, \"SEARCH_INVALID_FUSION_WEIGHT\", \"tuning.fusion.vectorWeight\") ?? DEFAULT_FUSION_WEIGHT,\n        keywordCandidateLimit: Math.max(limit, normalizePositiveInteger(options.tuning?.keywordCandidateLimit ?? options.keywordCandidateLimit, \"SEARCH_INVALID_CANDIDATE_LIMIT\", \"keywordCandidateLimit\") ?? limit * 2),\n        vectorCandidateLimit: Math.max(limit, normalizePositiveInteger(options.tuning?.vectorCandidateLimit ?? options.vectorCandidateLimit, \"SEARCH_INVALID_CANDIDATE_LIMIT\", \"vectorCandidateLimit\") ?? limit * 2),\n        minFusedScore: normalizeFiniteNumber(options.tuning?.minFusedScore, \"SEARCH_INVALID_MIN_FUSED_SCORE\", \"tuning.minFusedScore\"),\n    };\n}\nexport function createSearchRuntime(params) {\n    return {\n        async search(table, query, options) {\n            const startedAt = Date.now();\n            const lexicalPlan = resolveLexicalPlan(params.config, query);\n            const limit = normalizeLimit(options.limit);\n            const offset = normalizeOffset(options.offset);\n            const tableIdent = sql.raw(requireSafeIdentifier(table));\n            const clauses = [\n                buildLexicalClause(lexicalPlan, options.fields, requireSafeIdentifier),\n                ...buildScopeClauses(params.auth, options.scope),\n                ...buildFilterClauses(options.filters),\n            ];\n            const lexicalScore = buildLexicalScore(lexicalPlan, options.fields, requireSafeIdentifier);\n            const whereClause = joinSql(clauses, \" AND \");\n            const result = await params.db.execute(sql `\n        SELECT *, ${lexicalScore} AS score\n        FROM ${tableIdent}\n        WHERE ${whereClause}\n        ORDER BY score DESC\n        LIMIT ${limit} OFFSET ${offset}\n      `);\n            const rows = rowsFromExecute(result);\n            const response = mapSearchRows(rows, createBaseMeta(params.config, limit, offset, {\n                itemCount: rows.length,\n                keywordCandidateCount: rows.length,\n                lexicalStrategy: lexicalPlan.strategy,\n                mode: \"keyword\",\n            }), \"score\", \"keyword\", getVectorHiddenColumns());\n            await observeRetrieveMetrics(params, {\n                scope: options.scope,\n                table,\n                meta: response.meta,\n                itemCount: response.items.length,\n                startedAt,\n            });\n            return response;\n        },\n        async vectorSearch(table, options) {\n            const startedAt = Date.now();\n            const vectorError = getVectorSearchAvailabilityError(params.config);\n            if (vectorError) {\n                throw vectorError;\n            }\n            const limit = normalizeLimit(options.limit);\n            const offset = normalizeOffset(options.offset);\n            const tuning = normalizeVectorTuning(options);\n            const tableIdent = sql.raw(requireSafeIdentifier(table));\n            const vectorField = sql.raw(requireSafeIdentifier(options.vectorField ?? \"embedding\"));\n            const vectorLiteral = buildVectorLiteral(options.vector);\n            const vectorScore = buildVectorScore(vectorField, vectorLiteral);\n            const vectorOrder = buildVectorOrder(vectorField, vectorLiteral);\n            const whereClause = joinSql([\n                ...buildScopeClauses(params.auth, options.scope),\n                ...buildFilterClauses(options.filters),\n                ...(tuning.minScore !== undefined ? [sql `${vectorScore} >= ${tuning.minScore}`] : []),\n            ], \" AND \");\n            const result = await params.db.execute(sql `\n        SELECT *, ${vectorScore} AS score\n        FROM ${tableIdent}\n        WHERE ${whereClause}\n        ORDER BY ${vectorOrder}\n        LIMIT ${limit} OFFSET ${offset}\n      `);\n            const rows = applyMinimumScore(rowsFromExecute(result), \"score\", tuning.minScore);\n            const response = mapSearchRows(rows, createBaseMeta(params.config, limit, offset, {\n                itemCount: rows.length,\n                minScoreApplied: tuning.minScore,\n                mode: \"vector\",\n                vectorCandidateCount: rows.length,\n            }), \"score\", \"vector\", getVectorHiddenColumns(options.vectorField));\n            await observeRetrieveMetrics(params, {\n                scope: options.scope,\n                table,\n                meta: response.meta,\n                itemCount: response.items.length,\n                startedAt,\n            });\n            return response;\n        },\n        async hybridSearch(table, query, options) {\n            const startedAt = Date.now();\n            const hybridError = getHybridSearchAvailabilityError(params.config);\n            if (hybridError) {\n                throw hybridError;\n            }\n            const lexicalPlan = resolveLexicalPlan(params.config, query);\n            const limit = normalizeLimit(options.limit);\n            const offset = normalizeOffset(options.offset);\n            const tuning = normalizeHybridTuning(options, limit);\n            const tableIdent = sql.raw(requireSafeIdentifier(table));\n            const vectorField = sql.raw(requireSafeIdentifier(options.vectorField ?? \"embedding\"));\n            const vectorLiteral = buildVectorLiteral(options.vector);\n            const vectorScoreExpr = buildVectorScore(vectorField, vectorLiteral);\n            const vectorOrderExpr = buildVectorOrder(vectorField, vectorLiteral);\n            const fusedScoreExpr = buildRrfFusedScore(tuning.rrfK, tuning.keywordWeight, tuning.vectorWeight);\n            const sharedClauses = [\n                ...buildScopeClauses(params.auth, options.scope),\n                ...buildFilterClauses(options.filters),\n            ];\n            const keywordWhere = joinSql([buildLexicalClause(lexicalPlan, options.fields, requireSafeIdentifier), ...sharedClauses], \" AND \");\n            const vectorWhere = joinSql(sharedClauses, \" AND \");\n            const keywordScore = buildLexicalScore(lexicalPlan, options.fields, requireSafeIdentifier);\n            const rankedWhereClause = joinSql(tuning.minFusedScore !== undefined ? [sql `fused_score >= ${tuning.minFusedScore}`] : [], \" AND \");\n            const result = await params.db.execute(sql `\n        WITH keyword_candidates AS (\n          SELECT id,\n                 ${keywordScore} AS keyword_score,\n                 ROW_NUMBER() OVER (ORDER BY ${keywordScore} DESC) AS keyword_rank\n          FROM ${tableIdent}\n          WHERE ${keywordWhere}\n          LIMIT ${tuning.keywordCandidateLimit}\n        ),\n        vector_candidates AS (\n          SELECT id,\n                 ${vectorScoreExpr} AS vector_score,\n                 ROW_NUMBER() OVER (ORDER BY ${vectorOrderExpr}) AS vector_rank\n          FROM ${tableIdent}\n          WHERE ${vectorWhere}\n          LIMIT ${tuning.vectorCandidateLimit}\n        ),\n        ranked AS (\n          SELECT t.*,\n                 kc.keyword_score,\n                 vc.vector_score,\n                 ${fusedScoreExpr} AS fused_score\n          FROM ${tableIdent} t\n          LEFT JOIN keyword_candidates kc ON kc.id = t.id\n          LEFT JOIN vector_candidates vc ON vc.id = t.id\n          WHERE kc.id IS NOT NULL OR vc.id IS NOT NULL\n        )\n        SELECT *\n        FROM ranked\n        WHERE ${rankedWhereClause}\n        ORDER BY fused_score DESC\n        LIMIT ${limit} OFFSET ${offset}\n      `);\n            const rows = applyMinimumScore(rowsFromExecute(result), \"fused_score\", tuning.minFusedScore);\n            const keywordCandidateCount = rows.filter((row) => normalizeScore(row.keyword_score) !== undefined).length;\n            const vectorCandidateCount = rows.filter((row) => normalizeScore(row.vector_score) !== undefined).length;\n            const response = mapSearchRows(rows, createBaseMeta(params.config, limit, offset, {\n                fusedCandidateCount: rows.length,\n                fusion: tuning.fusion,\n                itemCount: rows.length,\n                keywordCandidateCount,\n                lexicalStrategy: lexicalPlan.strategy,\n                minScoreApplied: tuning.minFusedScore,\n                mode: \"hybrid\",\n                vectorCandidateCount,\n            }), \"fused_score\", \"hybrid\", getVectorHiddenColumns(options.vectorField));\n            await observeRetrieveMetrics(params, {\n                scope: options.scope,\n                table,\n                meta: response.meta,\n                itemCount: response.items.length,\n                startedAt,\n            });\n            return response;\n        },\n    };\n}\n", "import { sql } from \"drizzle-orm\";\nconst RELAXED_STOP_TERMS = new Set([\n    \"about\",\n    \"info\",\n    \"information\",\n    \"me\",\n    \"please\",\n    \"summary\",\n    \"summarize\",\n    \"tell\",\n    \"\uAD00\uB828\",\n    \"\uAD00\uB828\uB41C\",\n    \"\uB300\uD574\",\n    \"\uB300\uD55C\",\n    \"\uC124\uBA85\",\n    \"\uC124\uBA85\uD574\uC918\",\n    \"\uC124\uBA85\uD574\uC8FC\uC138\uC694\",\n    \"\uC54C\uB824\uC918\",\n    \"\uC54C\uB824\uC8FC\uC138\uC694\",\n    \"\uC694\uC57D\",\n    \"\uC694\uC57D\uD574\uC918\",\n    \"\uC694\uC57D\uD574\uC8FC\uC138\uC694\",\n    \"\uC815\uBCF4\",\n    \"\uC815\uB9AC\",\n    \"\uC815\uB9AC\uD574\uC918\",\n    \"\uC815\uB9AC\uD574\uC8FC\uC138\uC694\",\n    \"\uC880\",\n    \"\uD574\uC918\",\n    \"\uD574\uC8FC\uC138\uC694\",\n]);\nexport function normalizeSearchQuery(query) {\n    return query.normalize(\"NFC\").trim().replace(/\\s+/g, \" \");\n}\nexport function extractRelaxedLexicalTerms(query) {\n    const matches = query.match(/[\\p{L}\\p{N}_-]+/gu) ?? [];\n    const seen = new Set();\n    const terms = [];\n    for (const rawTerm of matches) {\n        const term = rawTerm.normalize(\"NFC\").trim();\n        const termKey = term.toLocaleLowerCase();\n        if (!term || RELAXED_STOP_TERMS.has(termKey) || seen.has(termKey)) {\n            continue;\n        }\n        seen.add(termKey);\n        terms.push(term);\n    }\n    return terms;\n}\nexport function createLexicalPlan(config, query) {\n    const normalizedQuery = normalizeSearchQuery(query);\n    const strategy = config.engine === \"pgroonga\"\n        ? \"pgroonga\"\n        : config.locale === \"multilingual\"\n            ? \"tsvector_relaxed\"\n            : \"tsvector_strict\";\n    const shouldExtractTerms = config.locale === \"multilingual\" && strategy !== \"tsvector_strict\";\n    const extractedTerms = shouldExtractTerms ? extractRelaxedLexicalTerms(normalizedQuery) : [];\n    const terms = (extractedTerms.length > 0 ? extractedTerms : [normalizedQuery]);\n    return {\n        normalizedQuery,\n        strategy,\n        terms,\n        textSearchConfig: strategy === \"tsvector_relaxed\" ? \"simple\" : \"english\",\n    };\n}\nfunction joinSql(chunks, separator) {\n    if (chunks.length === 0) {\n        return sql `true`;\n    }\n    let current = chunks[0];\n    for (const chunk of chunks.slice(1)) {\n        current = sql `${current}${sql.raw(separator)}${chunk}`;\n    }\n    return current;\n}\nfunction buildFieldConcat(fields, safeIdentifier) {\n    const chunks = fields.map((field) => sql.raw(`coalesce(${safeIdentifier(field)}::text, '')`));\n    return joinSql(chunks, ` || ' ' || `);\n}\nfunction buildTextSearchConfig(config) {\n    return sql.raw(config === \"simple\" ? \"'simple'\" : \"'english'\");\n}\nfunction buildTextQuery(plan) {\n    const textSearchConfig = buildTextSearchConfig(plan.textSearchConfig);\n    if (plan.strategy === \"tsvector_relaxed\" && plan.terms.length > 1) {\n        return sql `(${joinSql(plan.terms.map((term) => sql `plainto_tsquery(${textSearchConfig}, ${term})`), \" || \")})`;\n    }\n    return sql `plainto_tsquery(${textSearchConfig}, ${plan.terms[0]})`;\n}\nexport function buildLexicalClause(plan, fields, safeIdentifier) {\n    if (plan.strategy === \"pgroonga\") {\n        const queries = plan.terms[0] === plan.normalizedQuery ? [plan.normalizedQuery] : [plan.normalizedQuery, ...plan.terms];\n        const fieldClauses = fields.flatMap((field) => queries.map((query) => sql `${sql.raw(safeIdentifier(field))} &@~ ${query}`));\n        return sql `(${joinSql(fieldClauses, \" OR \")})`;\n    }\n    const fieldConcat = buildFieldConcat(fields, safeIdentifier);\n    const textSearchConfig = buildTextSearchConfig(plan.textSearchConfig);\n    return sql `to_tsvector(${textSearchConfig}, ${fieldConcat}) @@ ${buildTextQuery(plan)}`;\n}\nexport function buildLexicalScore(plan, fields, safeIdentifier) {\n    if (plan.strategy === \"pgroonga\") {\n        return sql `pgroonga_score(tableoid, ctid)::double precision`;\n    }\n    const fieldConcat = buildFieldConcat(fields, safeIdentifier);\n    const textSearchConfig = buildTextSearchConfig(plan.textSearchConfig);\n    return sql `ts_rank(to_tsvector(${textSearchConfig}, ${fieldConcat}), ${buildTextQuery(plan)})::double precision`;\n}\n", "import { GencowValidationError, createRealtimeChannelToken, getRealtimeChannelDef, normalizeRealtimeChannelEpoch, parseArgs, resolveRealtimeChannelKey, } from \"@gencow/core\";\nconst DEFAULT_CHANNEL_GRANT_TTL_SECONDS = 300;\nconst MAX_CHANNEL_GRANT_TTL_SECONDS = 3600;\nfunction resolveStatus(error) {\n    if (error instanceof GencowValidationError)\n        return 400;\n    if (!error || typeof error !== \"object\")\n        return 403;\n    const status = error.status;\n    const statusCode = error.statusCode;\n    const candidate = typeof status === \"number\" ? status : typeof statusCode === \"number\" ? statusCode : 403;\n    return Number.isInteger(candidate) && candidate >= 400 && candidate <= 499 ? candidate : 403;\n}\nfunction resolveTtlSeconds(value) {\n    if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n        return DEFAULT_CHANNEL_GRANT_TTL_SECONDS;\n    }\n    return Math.floor(Math.min(value, MAX_CHANNEL_GRANT_TTL_SECONDS));\n}\nfunction resolveAuthorizeErrorBody(error) {\n    const status = resolveStatus(error);\n    if (status === 400) {\n        const message = error instanceof Error && error.message ? error.message : \"Invalid channel arguments\";\n        return { body: { error: message }, status };\n    }\n    if (status === 401)\n        return { body: { error: \"Authentication required\" }, status };\n    return { body: { error: \"Realtime channel authorization failed\" }, status };\n}\nexport function registerRealtimeChannelRoute(params) {\n    params.app.post(\"/api/realtime/channel/authorize\", async (c) => {\n        c.header(\"Cache-Control\", \"no-store\");\n        c.header(\"Pragma\", \"no-cache\");\n        const body = (await c.req.json().catch(() => ({})));\n        if (typeof body.channel !== \"string\" || body.channel.length === 0) {\n            return c.json({ error: \"channel required\" }, 400);\n        }\n        const def = getRealtimeChannelDef(body.channel);\n        if (!def) {\n            return c.json({ error: \"Realtime channel not found\" }, 404);\n        }\n        const ctx = params.buildCtx(c);\n        const user = ctx.auth.getUserIdentity();\n        if (!user) {\n            return c.json({ error: \"Authentication required\" }, 401);\n        }\n        try {\n            const args = parseArgs(def.argsSchema, body.args);\n            const result = await def.authorize(ctx, args);\n            const channelKey = resolveRealtimeChannelKey({ channel: body.channel, args, result });\n            if (!channelKey) {\n                return c.json({ error: \"Realtime channel authorization failed\" }, 403);\n            }\n            const objectResult = result && typeof result === \"object\" && !Array.isArray(result) ? result : null;\n            const ttlSeconds = objectResult ? resolveTtlSeconds(objectResult.ttlSeconds) : DEFAULT_CHANNEL_GRANT_TTL_SECONDS;\n            const epoch = objectResult ? normalizeRealtimeChannelEpoch(objectResult.epoch) : undefined;\n            const nowMs = params.nowMs?.() ?? Date.now();\n            const token = createRealtimeChannelToken({\n                appName: params.appName,\n                channel: body.channel,\n                channelKey,\n                args,\n                userId: String(user.id),\n                secret: params.internalToken,\n                ttlSeconds,\n                nowMs,\n                epoch,\n            });\n            return c.json({\n                token,\n                channel: body.channel,\n                channelKey,\n                userId: String(user.id),\n                expiresAt: nowMs + ttlSeconds * 1000,\n                ...(epoch ? { epoch } : {}),\n            });\n        }\n        catch (error) {\n            const { body: errorBody, status } = resolveAuthorizeErrorBody(error);\n            return c.json(errorBody, status);\n        }\n    });\n}\n", "import { createSingleFlightWake } from \"../wake-signal/single-flight-wake.js\";\nimport { LEGACY_REALTIME_OUTBOX_WAKE_CHANNEL, buildWakeNotifySql, normalizeWakeSignalChannel, parseWakeSignalPayload, } from \"../wake-signal/wake-signal-types.js\";\nexport const DEFAULT_REALTIME_OUTBOX_WAKE_CHANNEL = LEGACY_REALTIME_OUTBOX_WAKE_CHANNEL;\nexport const REALTIME_OUTBOX_POLL_INTERVAL = 5_000;\nexport const REALTIME_OUTBOX_MIN_POLL_INTERVAL = 1_000;\nexport const REALTIME_OUTBOX_MAX_POLL_INTERVAL = 300_000;\nexport const REALTIME_OUTBOX_POLL_INTERVAL_ENV = \"GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS\";\nconst REALTIME_OUTBOX_TABLE_SQL = `\nCREATE TABLE IF NOT EXISTS _gencow_realtime_outbox (\n  id BIGSERIAL PRIMARY KEY,\n  event_id TEXT NOT NULL,\n  kind TEXT NOT NULL,\n  app_name TEXT NOT NULL,\n  channel_key TEXT,\n  subscription_key TEXT,\n  payload_json TEXT,\n  status TEXT NOT NULL DEFAULT 'pending',\n  attempt_count INT NOT NULL DEFAULT 0,\n  next_attempt_at TIMESTAMP NOT NULL DEFAULT NOW(),\n  last_error TEXT,\n  created_at TIMESTAMP NOT NULL DEFAULT NOW(),\n  sent_at TIMESTAMP\n)`;\nconst REALTIME_OUTBOX_DROP_EVENT_ID_UNIQUE_SQL = `\nALTER TABLE IF EXISTS _gencow_realtime_outbox\n  DROP CONSTRAINT IF EXISTS _gencow_realtime_outbox_event_id_key`;\nconst REALTIME_OUTBOX_DROP_EVENT_ID_UNIQUE_INDEX_SQL = `\nDROP INDEX IF EXISTS _gencow_realtime_outbox_event_id_key`;\nconst REALTIME_OUTBOX_KIND_EVENT_ID_INDEX_SQL = `\nCREATE UNIQUE INDEX IF NOT EXISTS idx_gencow_realtime_outbox_kind_event_id\n  ON _gencow_realtime_outbox (kind, event_id)`;\nconst REALTIME_OUTBOX_PENDING_INDEX_SQL = `\nCREATE INDEX IF NOT EXISTS idx_gencow_realtime_outbox_pending\n  ON _gencow_realtime_outbox (status, next_attempt_at, id)\n  WHERE status IN ('pending', 'retry')`;\nexport const REALTIME_OUTBOX_SYSTEM_SCHEMA_STATEMENTS = [\n    REALTIME_OUTBOX_TABLE_SQL,\n    REALTIME_OUTBOX_DROP_EVENT_ID_UNIQUE_SQL,\n    REALTIME_OUTBOX_DROP_EVENT_ID_UNIQUE_INDEX_SQL,\n    REALTIME_OUTBOX_KIND_EVENT_ID_INDEX_SQL,\n    REALTIME_OUTBOX_PENDING_INDEX_SQL,\n];\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction toCount(value) {\n    if (typeof value === \"number\")\n        return value;\n    if (typeof value === \"bigint\")\n        return Number(value);\n    if (typeof value === \"string\")\n        return Number(value);\n    return 0;\n}\nfunction clampRealtimeOutboxPollIntervalMs(value) {\n    return Math.min(REALTIME_OUTBOX_MAX_POLL_INTERVAL, Math.max(REALTIME_OUTBOX_MIN_POLL_INTERVAL, value));\n}\nexport function resolveRealtimeOutboxPollIntervalMs(env, override) {\n    if (typeof override === \"number\" && Number.isFinite(override) && override > 0)\n        return override;\n    const rawValue = env?.[REALTIME_OUTBOX_POLL_INTERVAL_ENV];\n    if (!rawValue)\n        return REALTIME_OUTBOX_POLL_INTERVAL;\n    const parsedValue = Number(rawValue);\n    if (!Number.isInteger(parsedValue) || parsedValue <= 0)\n        return REALTIME_OUTBOX_POLL_INTERVAL;\n    return clampRealtimeOutboxPollIntervalMs(parsedValue);\n}\nfunction toPgTimestamp(date) {\n    return date.toISOString().replace(\"T\", \" \").replace(\"Z\", \"\");\n}\nfunction toIsoString(value) {\n    if (!value)\n        return null;\n    if (value instanceof Date)\n        return value.toISOString();\n    const parsed = new Date(String(value));\n    return Number.isNaN(parsed.getTime()) ? null : parsed.toISOString();\n}\nfunction createEventId() {\n    const randomUUID = globalThis.crypto?.randomUUID;\n    if (typeof randomUUID === \"function\")\n        return `rt_${randomUUID.call(globalThis.crypto)}`;\n    return `rt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;\n}\nfunction serializeEvent(appName, event) {\n    if (event.type === \"emit\") {\n        return {\n            eventId: createEventId(),\n            kind: \"emit\",\n            appName,\n            subscriptionKey: event.queryKey,\n            channelKey: null,\n            payloadJson: JSON.stringify({ data: event.data }),\n        };\n    }\n    if (event.type === \"invalidate\") {\n        return {\n            eventId: createEventId(),\n            kind: \"invalidate\",\n            appName,\n            subscriptionKey: null,\n            channelKey: null,\n            payloadJson: JSON.stringify({ queryKeys: event.queryKeys }),\n        };\n    }\n    if (event.type === \"query_invalidate\") {\n        return {\n            eventId: event.eventId,\n            kind: \"query_invalidate\",\n            appName,\n            subscriptionKey: event.subscriptionKey,\n            channelKey: null,\n            payloadJson: JSON.stringify({\n                query: event.query,\n                scopeHash: event.scopeHash,\n                eventId: event.eventId,\n                legacyQueryKey: event.legacyQueryKey,\n                crudRealtimeEmitMode: event.crudRealtimeEmitMode,\n            }),\n        };\n    }\n    if (event.type === \"query_revoke\") {\n        return {\n            eventId: createEventId(),\n            kind: \"query_revoke\",\n            appName,\n            subscriptionKey: event.subscriptionKey,\n            channelKey: null,\n            payloadJson: JSON.stringify({\n                query: event.query,\n                scopeHash: event.scopeHash,\n                epoch: event.epoch,\n                reason: event.reason,\n            }),\n        };\n    }\n    if (event.type === \"channel_publish\") {\n        return {\n            eventId: event.eventId,\n            kind: \"channel_publish\",\n            appName,\n            subscriptionKey: null,\n            channelKey: event.channelKey,\n            payloadJson: JSON.stringify({ data: event.data, eventId: event.eventId }),\n        };\n    }\n    if (event.type === \"channel_revoke\") {\n        return {\n            eventId: createEventId(),\n            kind: \"channel_revoke\",\n            appName,\n            subscriptionKey: null,\n            channelKey: event.channelKey,\n            payloadJson: JSON.stringify({ epoch: event.epoch, reason: event.reason }),\n        };\n    }\n    return {\n        eventId: createEventId(),\n        kind: \"channel_invalidate\",\n        appName,\n        subscriptionKey: null,\n        channelKey: event.channelKey,\n        payloadJson: null,\n    };\n}\nfunction parsePayload(row) {\n    if (!row.payload_json)\n        return {};\n    const parsed = JSON.parse(row.payload_json);\n    return parsed && typeof parsed === \"object\" ? parsed : {};\n}\nfunction rowToEvent(row) {\n    const payload = parsePayload(row);\n    if (row.kind === \"emit\") {\n        return { type: \"emit\", queryKey: row.subscription_key ?? \"\", data: payload.data };\n    }\n    if (row.kind === \"invalidate\") {\n        const queryKeys = Array.isArray(payload.queryKeys)\n            ? payload.queryKeys.filter((key) => typeof key === \"string\")\n            : [];\n        return { type: \"invalidate\", queryKeys };\n    }\n    if (row.kind === \"query_invalidate\") {\n        return {\n            type: \"query_invalidate\",\n            query: typeof payload.query === \"string\" ? payload.query : \"\",\n            subscriptionKey: row.subscription_key ?? \"\",\n            scopeHash: typeof payload.scopeHash === \"string\" ? payload.scopeHash : \"\",\n            eventId: typeof payload.eventId === \"string\" ? payload.eventId : row.event_id,\n            legacyQueryKey: typeof payload.legacyQueryKey === \"string\" ? payload.legacyQueryKey : undefined,\n            crudRealtimeEmitMode: payload.crudRealtimeEmitMode === \"legacy\" ||\n                payload.crudRealtimeEmitMode === \"scoped\" ||\n                payload.crudRealtimeEmitMode === \"dual\"\n                ? payload.crudRealtimeEmitMode\n                : undefined,\n        };\n    }\n    if (row.kind === \"query_revoke\") {\n        return {\n            type: \"query_revoke\",\n            query: typeof payload.query === \"string\" ? payload.query : \"\",\n            subscriptionKey: row.subscription_key ?? \"\",\n            scopeHash: typeof payload.scopeHash === \"string\" ? payload.scopeHash : \"\",\n            epoch: typeof payload.epoch === \"string\" ? payload.epoch : undefined,\n            reason: typeof payload.reason === \"string\" ? payload.reason : undefined,\n        };\n    }\n    if (row.kind === \"channel_publish\") {\n        return {\n            type: \"channel_publish\",\n            channelKey: row.channel_key ?? \"\",\n            data: payload.data,\n            eventId: typeof payload.eventId === \"string\" ? payload.eventId : row.event_id,\n        };\n    }\n    if (row.kind === \"channel_revoke\") {\n        return {\n            type: \"channel_revoke\",\n            channelKey: row.channel_key ?? \"\",\n            epoch: typeof payload.epoch === \"string\" ? payload.epoch : undefined,\n            reason: typeof payload.reason === \"string\" ? payload.reason : undefined,\n        };\n    }\n    return { type: \"channel_invalidate\", channelKey: row.channel_key ?? \"\" };\n}\nexport async function ensureRealtimeOutbox(rawSql) {\n    if (process.env.GENCOW_METERING_URL)\n        return;\n    for (const stmt of REALTIME_OUTBOX_SYSTEM_SCHEMA_STATEMENTS) {\n        await rawSql(stmt);\n    }\n}\nexport async function notifyRealtimeOutboxWake(params) {\n    const statement = buildWakeNotifySql({\n        kind: \"realtime\",\n        channel: params.channel,\n        defaultChannel: DEFAULT_REALTIME_OUTBOX_WAKE_CHANNEL,\n    });\n    await params.rawSql(statement.query, statement.params);\n}\nexport async function enqueueRealtimeOutboxEventsInTransaction(params) {\n    const eventIds = [];\n    for (const event of params.events) {\n        const row = serializeEvent(params.appName, event);\n        await params.rawSql(`INSERT INTO _gencow_realtime_outbox\n         (event_id, kind, app_name, channel_key, subscription_key, payload_json)\n       VALUES ($1, $2, $3, $4, $5, $6)\n       ON CONFLICT (kind, event_id) DO NOTHING`, [row.eventId, row.kind, row.appName, row.channelKey, row.subscriptionKey, row.payloadJson]);\n        eventIds.push(row.eventId);\n    }\n    if (eventIds.length > 0 && params.wakeSignal) {\n        await notifyRealtimeOutboxWake({\n            rawSql: params.rawSql,\n            channel: params.wakeSignal.channel,\n        });\n    }\n    return eventIds;\n}\nexport async function enqueueRealtimeOutboxEvent(params) {\n    await ensureRealtimeOutbox(params.rawSql);\n    const [eventId] = await enqueueRealtimeOutboxEventsInTransaction({\n        rawSql: params.rawSql,\n        appName: params.appName,\n        events: [params.event],\n    });\n    return eventId;\n}\nexport async function drainRealtimeOutboxBatch(params) {\n    await ensureRealtimeOutbox(params.rawSql);\n    if (params.isActiveWorker) {\n        try {\n            if (!(await params.isActiveWorker()))\n                return 0;\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger?.warn(`[realtime-outbox] active worker check failed; continuing: ${message.slice(0, 160)}`);\n        }\n    }\n    const batchSize = Math.max(1, Math.min(params.batchSize ?? 100, 500));\n    const rows = rowsFromResult(await params.rawSql(`WITH picked AS (\n         SELECT id FROM _gencow_realtime_outbox\n          WHERE status IN ('pending', 'retry') AND next_attempt_at <= NOW()\n          ORDER BY id\n          LIMIT $1\n          FOR UPDATE SKIP LOCKED\n       )\n       UPDATE _gencow_realtime_outbox AS outbox\n          SET status = 'sending',\n              attempt_count = attempt_count + 1\n         FROM picked\n        WHERE outbox.id = picked.id\n        RETURNING outbox.id, outbox.event_id, outbox.kind, outbox.channel_key,\n                  outbox.subscription_key, outbox.payload_json`, [batchSize]));\n    let sent = 0;\n    for (const row of rows) {\n        try {\n            await params.fanout.notify(rowToEvent(row));\n            await params.rawSql(`UPDATE _gencow_realtime_outbox\n            SET status = 'sent', sent_at = NOW(), last_error = NULL\n          WHERE id = $1`, [row.id]);\n            sent++;\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger?.warn(`[realtime-outbox] delivery failed: ${message.slice(0, 160)}`);\n            await params.rawSql(`UPDATE _gencow_realtime_outbox\n            SET status = CASE WHEN attempt_count >= 5 THEN 'dropped' ELSE 'retry' END,\n                next_attempt_at = NOW() + INTERVAL '5 seconds',\n                last_error = $2\n          WHERE id = $1`, [row.id, message.slice(0, 500)]);\n        }\n    }\n    return sent;\n}\nexport async function getRealtimeOutboxDiagnostics(params) {\n    await ensureRealtimeOutbox(params.rawSql);\n    const counts = rowsFromResult(await params.rawSql(`SELECT status, COUNT(*) AS count FROM _gencow_realtime_outbox GROUP BY status`));\n    const stats = {\n        pending: 0,\n        retry: 0,\n        sending: 0,\n        sent: 0,\n        dropped: 0,\n    };\n    for (const row of counts) {\n        if (row.status in stats)\n            stats[row.status] = toCount(row.count);\n    }\n    const now = toPgTimestamp(params.now ?? new Date());\n    const [lag] = rowsFromResult(await params.rawSql(`SELECT\n         COUNT(*) FILTER (WHERE next_attempt_at <= $1::timestamp) AS due_count,\n         MIN(created_at) AS oldest_pending_created_at,\n         COALESCE(EXTRACT(EPOCH FROM ($1::timestamp - MIN(created_at))) * 1000, 0) AS oldest_pending_age_ms\n       FROM _gencow_realtime_outbox\n       WHERE status IN ('pending', 'retry')`, [now]));\n    return {\n        total: stats.pending + stats.retry + stats.sending + stats.sent + stats.dropped,\n        ...stats,\n        due: toCount(lag?.due_count),\n        oldestPendingAgeMs: Math.max(0, Math.floor(toCount(lag?.oldest_pending_age_ms))),\n        oldestPendingCreatedAt: toIsoString(lag?.oldest_pending_created_at),\n    };\n}\nexport async function cleanupRealtimeOutbox(params) {\n    await ensureRealtimeOutbox(params.rawSql);\n    const nowMs = (params.now ?? new Date()).getTime();\n    const sentRetentionMs = Math.max(0, params.sentRetentionMs ?? 24 * 60 * 60 * 1000);\n    const droppedRetentionMs = Math.max(0, params.droppedRetentionMs ?? 7 * 24 * 60 * 60 * 1000);\n    const limit = Math.max(1, Math.min(params.limit ?? 1_000, 10_000));\n    const rows = rowsFromResult(await params.rawSql(`DELETE FROM _gencow_realtime_outbox\n        WHERE id IN (\n          SELECT id FROM _gencow_realtime_outbox\n           WHERE (status = 'sent' AND COALESCE(sent_at, created_at) < $1::timestamp)\n              OR (status = 'dropped' AND created_at < $2::timestamp)\n           ORDER BY id\n           LIMIT $3\n        )\n        RETURNING id`, [\n        toPgTimestamp(new Date(nowMs - sentRetentionMs)),\n        toPgTimestamp(new Date(nowMs - droppedRetentionMs)),\n        limit,\n    ]));\n    return rows.length;\n}\nexport function createRealtimeOutboxWorker(params) {\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const clearIntervalImpl = params.clearIntervalImpl ?? clearInterval;\n    const intervalMs = resolveRealtimeOutboxPollIntervalMs(process.env, params.intervalMs);\n    let timer = null;\n    const tick = createSingleFlightWake(() => drainRealtimeOutboxBatch({\n        rawSql: params.rawSql,\n        fanout: params.fanout,\n        batchSize: params.batchSize,\n        logger: params.logger,\n        isActiveWorker: params.isActiveWorker,\n    }));\n    return {\n        start() {\n            if (timer)\n                return;\n            timer = setIntervalImpl(() => {\n                void tick().catch((error) => {\n                    const message = error instanceof Error ? error.message : String(error);\n                    params.logger?.warn(`[realtime-outbox] worker tick failed: ${message.slice(0, 160)}`);\n                });\n            }, intervalMs);\n        },\n        stop() {\n            if (!timer)\n                return;\n            clearIntervalImpl(timer);\n            timer = null;\n        },\n        wake: tick,\n        tick,\n    };\n}\nexport async function startRealtimeOutboxWakeListener(params) {\n    const channel = normalizeWakeSignalChannel(params.channel, DEFAULT_REALTIME_OUTBOX_WAKE_CHANNEL);\n    return params.source.listen(channel, async (payloadText) => {\n        const signal = parseWakeSignalPayload(payloadText);\n        if (signal.kind !== \"unknown\" && signal.kind !== \"realtime\")\n            return;\n        if (params.appName && signal.legacyAppName && signal.legacyAppName !== params.appName)\n            return;\n        try {\n            await params.wakeWorker();\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger?.warn(`[realtime-outbox] wake signal failed: ${message.slice(0, 160)}`);\n        }\n    });\n}\nexport async function startRealtimeOutboxWakeBusListener(params) {\n    const runStartupScan = async () => {\n        await params.wakeWorker().catch((error) => {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger?.warn(`[realtime-outbox] startup wake scan failed: ${message.slice(0, 160)}`);\n        });\n    };\n    return params.bus.listen([\"realtime\"], async (signal) => {\n        if (params.appName && signal.legacyAppName && signal.legacyAppName !== params.appName)\n            return;\n        try {\n            await params.wakeWorker();\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            params.logger?.warn(`[realtime-outbox] wake signal failed: ${message.slice(0, 160)}`);\n        }\n    }, { onListen: runStartupScan });\n}\nexport function createRealtimeOutboxFanout(params) {\n    return {\n        async notify(event) {\n            await ensureRealtimeOutbox(params.rawSql);\n            await enqueueRealtimeOutboxEventsInTransaction({\n                rawSql: params.rawSql,\n                appName: params.appName,\n                events: [event],\n                wakeSignal: params.postgresWakeSignal,\n            });\n            if (params.wakeWorker) {\n                await params.wakeWorker();\n                return;\n            }\n            await drainRealtimeOutboxBatch({ rawSql: params.rawSql, fanout: params.inner, logger: params.logger });\n        },\n    };\n}\n", "import { getRealtimeOutboxDiagnostics } from \"./realtime/realtime-outbox.js\";\nimport { createDisabledWakeSignalDiagnostics, } from \"./wake-signal/wake-signal-diagnostics.js\";\nconst REALTIME_OUTBOX_DIAGNOSTICS_INTERNAL_ERROR = \"Internal realtime outbox diagnostics failed\";\nfunction isAuthorizedInternalToken(token, internalToken) {\n    return Boolean(internalToken && token === internalToken);\n}\nexport function createRealtimeOutboxDiagnosticsRouteHandler(params) {\n    const logger = params.logger ?? console;\n    return async (c) => {\n        if (!isAuthorizedInternalToken(c.req.header(\"X-Internal-Token\"), params.internalToken)) {\n            return c.json({ error: \"Forbidden\" }, 403);\n        }\n        try {\n            const diagnostics = await getRealtimeOutboxDiagnostics({\n                rawSql: params.rawSql,\n                now: params.now?.(),\n            });\n            const wakeSignal = (await params.getWakeSignalDiagnostics?.()) ?? createDisabledWakeSignalDiagnostics(\"disabled\");\n            return c.json({\n                ok: true,\n                realtimeOutbox: diagnostics,\n                wakeSignal,\n            });\n        }\n        catch (error) {\n            logger.error(\"[realtime-outbox] diagnostics failed\");\n            return c.json({ error: REALTIME_OUTBOX_DIAGNOSTICS_INTERNAL_ERROR }, 500);\n        }\n    };\n}\nexport function registerRealtimeOutboxDiagnosticsRoute(params) {\n    params.app.get(\"/internal/realtime-outbox/diagnostics\", createRealtimeOutboxDiagnosticsRouteHandler({\n        rawSql: params.rawSql,\n        internalToken: params.internalToken,\n        getWakeSignalDiagnostics: params.getWakeSignalDiagnostics,\n        logger: params.logger,\n    }));\n}\n", "import { GencowValidationError, createRealtimeQuerySubscriptionToken, getRealtimeSubscriptionDef, normalizeRealtimeQuerySubscriptionEpoch, parseArgs, resolveRealtimeQueryScopeHash, resolveRealtimeQuerySubscriptionKey, } from \"@gencow/core\";\nconst DEFAULT_QUERY_GRANT_TTL_SECONDS = 300;\nconst MAX_QUERY_GRANT_TTL_SECONDS = 3600;\nconst PUBLIC_REALTIME_USER_ID = \"__public__\";\nfunction resolveStatus(error) {\n    if (error instanceof GencowValidationError)\n        return 400;\n    if (!error || typeof error !== \"object\")\n        return 403;\n    const status = error.status;\n    const statusCode = error.statusCode;\n    const candidate = typeof status === \"number\" ? status : typeof statusCode === \"number\" ? statusCode : 403;\n    return Number.isInteger(candidate) && candidate >= 400 && candidate <= 499 ? candidate : 403;\n}\nfunction resolveTtlSeconds(value) {\n    if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n        return DEFAULT_QUERY_GRANT_TTL_SECONDS;\n    }\n    return Math.floor(Math.min(value, MAX_QUERY_GRANT_TTL_SECONDS));\n}\nfunction resolveAuthorizeErrorBody(error) {\n    const status = resolveStatus(error);\n    if (status === 400) {\n        const message = error instanceof Error && error.message ? error.message : \"Invalid query arguments\";\n        return { body: { error: message }, status };\n    }\n    if (status === 401)\n        return { body: { error: \"Authentication required\" }, status };\n    return { body: { error: \"Realtime query authorization failed\" }, status };\n}\nexport function registerRealtimeQueryRoute(params) {\n    params.app.post(\"/api/realtime/query/authorize\", async (c) => {\n        c.header(\"Cache-Control\", \"no-store\");\n        c.header(\"Pragma\", \"no-cache\");\n        const body = (await c.req.json().catch(() => ({})));\n        if (typeof body.query !== \"string\" || body.query.length === 0) {\n            return c.json({ error: \"query required\" }, 400);\n        }\n        const def = getRealtimeSubscriptionDef(body.query);\n        if (!def) {\n            return c.json({ error: \"Realtime query subscription not found\" }, 404);\n        }\n        const ctx = params.buildCtx(c);\n        const user = ctx.auth.getUserIdentity();\n        if (def.policy !== \"public\" && !user) {\n            return c.json({ error: \"Authentication required\" }, 401);\n        }\n        try {\n            const args = parseArgs(def.argsSchema, body.args);\n            const result = def.authorize ? await def.authorize(ctx, args) : undefined;\n            const subscriptionKey = resolveRealtimeQuerySubscriptionKey({ query: body.query, args, result });\n            if (!subscriptionKey || result === false || result === null) {\n                return c.json({ error: \"Realtime query authorization failed\" }, 403);\n            }\n            const objectResult = result && typeof result === \"object\" && !Array.isArray(result) ? result : null;\n            const ttlSeconds = objectResult ? resolveTtlSeconds(objectResult.ttlSeconds) : DEFAULT_QUERY_GRANT_TTL_SECONDS;\n            const epoch = objectResult ? normalizeRealtimeQuerySubscriptionEpoch(objectResult.epoch) : undefined;\n            const scopeHash = resolveRealtimeQueryScopeHash({\n                query: body.query,\n                args,\n                subscriptionKey,\n                result,\n            });\n            const nowMs = params.nowMs?.() ?? Date.now();\n            const token = createRealtimeQuerySubscriptionToken({\n                appName: params.appName,\n                query: body.query,\n                subscriptionKey,\n                args,\n                scopeHash,\n                policy: def.policy,\n                userId: user ? String(user.id) : PUBLIC_REALTIME_USER_ID,\n                secret: params.internalToken,\n                ttlSeconds,\n                nowMs,\n                epoch,\n            });\n            return c.json({\n                token,\n                query: body.query,\n                subscriptionKey,\n                policy: def.policy,\n                userId: user ? String(user.id) : PUBLIC_REALTIME_USER_ID,\n                expiresAt: nowMs + ttlSeconds * 1000,\n                ...(epoch ? { epoch } : {}),\n            });\n        }\n        catch (error) {\n            const { body: errorBody, status } = resolveAuthorizeErrorBody(error);\n            return c.json(errorBody, status);\n        }\n    });\n}\n", "import { createRealtimeTicket, } from \"@gencow/core\";\nconst DEFAULT_REALTIME_TICKET_TTL_SECONDS = 60;\nconst DEFAULT_CRUD_REALTIME_MODE_POLICY = {\n    crudRealtimeMode: \"scoped\",\n};\nfunction readSessionId(user) {\n    if (!user || typeof user !== \"object\")\n        return null;\n    const record = user;\n    const candidates = [record.sessionId, record.session_id, record.sid];\n    const sessionId = candidates.find((value) => typeof value === \"string\" && value.length > 0);\n    return sessionId ?? null;\n}\nexport function registerRealtimeTicketRoute(params) {\n    params.app.post(\"/api/realtime/ticket\", async (c) => {\n        c.header(\"Cache-Control\", \"no-store\");\n        c.header(\"Pragma\", \"no-cache\");\n        await c.req?.json?.().catch(() => ({}));\n        const ctx = params.buildCtx(c);\n        const user = ctx.auth.getUserIdentity();\n        if (!user) {\n            return c.json({ error: \"Authentication required\" }, 401);\n        }\n        const ttlSeconds = params.ttlSeconds ?? DEFAULT_REALTIME_TICKET_TTL_SECONDS;\n        const nowMs = Date.now();\n        const crudRealtimeModePolicy = {\n            ...DEFAULT_CRUD_REALTIME_MODE_POLICY,\n            ...params.crudRealtimeModePolicy,\n        };\n        const realtime = {\n            crudRealtimeMode: crudRealtimeModePolicy.crudRealtimeMode,\n        };\n        const ticket = createRealtimeTicket({\n            appName: params.appName,\n            userId: String(user.id),\n            sessionId: readSessionId(user),\n            secret: params.internalToken,\n            realtime,\n            ttlSeconds,\n            nowMs,\n        });\n        return c.json({\n            ticket,\n            authMode: \"authenticated\",\n            expiresAt: nowMs + ttlSeconds * 1000,\n            realtime,\n        });\n    });\n}\n", "import { createHash } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { assertWorkflowPayloadWithinLimit, createGencowProcedureBuilders, createWorkflowRealtimeToken, getWorkflowResumeActionName, serializeWorkflowValue, v, workflow, } from \"@gencow/core\";\nimport { resolveDocumentSourceKey } from \"./document-convert-local.js\";\nimport { RAG_EMBEDDING_BATCH_SIZE } from \"./rag-embedding-runtime.js\";\nimport { persistRagChunkEmbeddingsForWorkflow } from \"./rag-chunk-embedding-persistence.js\";\nimport { emitCompletedRagIngestMetrics } from \"./rag-ingest-metrics.js\";\nimport { ensureRagCorpusPolicy } from \"./rag-ingest-policy.js\";\nimport { registerRagCorporaRuntime } from \"./rag-corpora-runtime.js\";\nimport { registerRagOperationsRuntime } from \"./rag-operations-runtime.js\";\nimport { createQueuedRagIngestJob, finalizeRagIngestJob, findLatestRagIngestJobBySourceId, findRagSourceByScopeAndKey, listAccessibleRagIngestJobs, loadAccessibleRagIngestJob, loadAccessibleRagSource, markRagSourceFailed, persistConvertedRagSource, upsertRagSectionsAndChunks, resetRagIngestJobForRetry, setRagIngestJobStage, upsertQueuedRagSource, } from \"./rag-ingest-jobs.js\";\nimport { RAG_BUILTIN_OPERATION_NAMES, ragBuiltinInputSchemas, ragBuiltinOutputSchemas, } from \"./builtins/rag/schemas.js\";\nconst INTERNAL_RAG_INGEST_WORKFLOW = \"__gencow.documents.ingest.run\";\nconst SUPPORTED_VISIBILITIES = new Set([\"private\", \"shared\", \"public\"]);\nconst SUPPORTED_REINDEX_MODES = new Set([\"if_changed\", \"force\"]);\nconst SUPPORTED_MODES = new Set([\n    \"auto\",\n    \"text-only\",\n    \"no-external-provider\",\n    \"prefer-external\",\n    \"force-external\",\n    \"force-ocr\",\n]);\nconst SUPPORTED_PROVIDERS = new Set([\n    \"auto\",\n    \"local_text\",\n    \"gemini\",\n    \"openai\",\n    \"ocr\",\n    \"custom_vlm\",\n]);\nconst SUPPORTED_JOB_STATUSES = new Set([\n    \"queued\",\n    \"converting\",\n    \"chunking\",\n    \"embedding\",\n    \"upserting\",\n    \"completed\",\n    \"failed\",\n    \"canceled\",\n]);\nconst CHUNK_TARGET_CHARS = 1400;\nconst CHUNK_OVERLAP_CHARS = 180;\nconst procedure = createGencowProcedureBuilders();\nfunction normalizeVisibility(value) {\n    if (!SUPPORTED_VISIBILITIES.has(value)) {\n        throw new Error(`Unsupported visibility \"${value}\"`);\n    }\n    return value;\n}\nfunction normalizeReindexMode(value) {\n    if (!value)\n        return \"if_changed\";\n    if (!SUPPORTED_REINDEX_MODES.has(value)) {\n        throw new Error(`Unsupported reindexMode \"${value}\"`);\n    }\n    return value;\n}\nfunction normalizeMode(value) {\n    if (!value)\n        return undefined;\n    if (!SUPPORTED_MODES.has(value)) {\n        throw new Error(`Unsupported convert mode \"${value}\"`);\n    }\n    return value;\n}\nfunction normalizeProvider(value) {\n    if (!value)\n        return undefined;\n    if (!SUPPORTED_PROVIDERS.has(value)) {\n        throw new Error(`Unsupported convert provider \"${value}\"`);\n    }\n    return value;\n}\nfunction normalizeMetadata(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n        return {};\n    }\n    return value;\n}\nfunction normalizeJobStatus(value) {\n    if (!value)\n        return undefined;\n    if (!SUPPORTED_JOB_STATUSES.has(value)) {\n        throw new Error(`Unsupported ingest status \"${value}\"`);\n    }\n    return value;\n}\nfunction resolveOwnerUserId(input) {\n    if (input.visibility !== \"private\") {\n        return input.ownerUserId?.trim() || null;\n    }\n    const requestedOwner = input.ownerUserId?.trim();\n    if (requestedOwner && requestedOwner !== input.viewerUserId) {\n        throw new Error(\"ownerUserId must match the authenticated user for private ingest\");\n    }\n    return requestedOwner ?? input.viewerUserId;\n}\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction sanitizeText(value) {\n    return value\n        .replace(/\\r\\n/g, \"\\n\")\n        .replace(/\\r/g, \"\\n\")\n        .replace(/[ \\t]+\\n/g, \"\\n\")\n        .replace(/\\n{3,}/g, \"\\n\\n\")\n        .trim();\n}\nfunction resolveChunkPages(section) {\n    return { pageStart: section?.pageStart ?? null, pageEnd: section?.pageEnd ?? null };\n}\nfunction createStableSections(sourceId, sections, textLength) {\n    const safeSections = sections.length > 0\n        ? sections\n        : [\n            {\n                id: \"section-1\",\n                depth: 1,\n                path: [],\n                charStart: 0,\n                charEnd: textLength,\n            },\n        ];\n    return safeSections.map((section, index) => ({\n        ...section,\n        id: `${sourceId}:section:${index + 1}`,\n    }));\n}\nfunction createChunkPlan(sourceId, markdown, sections) {\n    const chunks = [];\n    for (const section of sections) {\n        const sectionStart = Math.max(0, section.charStart);\n        const sectionEnd = Math.max(sectionStart, Math.min(markdown.length, section.charEnd));\n        const rawSectionText = sanitizeText(markdown.slice(sectionStart, sectionEnd));\n        if (!rawSectionText)\n            continue;\n        const pages = resolveChunkPages(section);\n        let localIndex = 0;\n        let cursor = 0;\n        while (cursor < rawSectionText.length) {\n            const next = Math.min(rawSectionText.length, cursor + CHUNK_TARGET_CHARS);\n            const rawChunk = sanitizeText(rawSectionText.slice(cursor, next));\n            if (rawChunk) {\n                const chunkIndex = chunks.length;\n                chunks.push({\n                    id: `${sourceId}:chunk:${chunkIndex + 1}`,\n                    sectionId: section.id,\n                    chunkIndex,\n                    chunkText: rawChunk,\n                    lexicalText: rawChunk.toLowerCase(),\n                    pageStart: pages.pageStart,\n                    pageEnd: pages.pageEnd,\n                    chunkChecksum: createHash(\"sha256\").update(rawChunk).digest(\"hex\"),\n                    metadata: {\n                        sectionPath: section.path,\n                        sectionDepth: section.depth,\n                        localIndex,\n                    },\n                });\n                localIndex += 1;\n            }\n            if (next >= rawSectionText.length)\n                break;\n            cursor = Math.max(next - CHUNK_OVERLAP_CHARS, cursor + 1);\n        }\n    }\n    return chunks.length > 0\n        ? chunks\n        : [\n            {\n                id: `${sourceId}:chunk:1`,\n                sectionId: sections[0]?.id ?? null,\n                chunkIndex: 0,\n                chunkText: sanitizeText(markdown),\n                lexicalText: sanitizeText(markdown).toLowerCase(),\n                pageStart: sections[0]?.pageStart ?? null,\n                pageEnd: sections[0]?.pageEnd ?? null,\n                chunkChecksum: createHash(\"sha256\").update(markdown).digest(\"hex\"),\n                metadata: {},\n            },\n        ];\n}\nfunction boundedProviderTrace(trace) {\n    return {\n        provider: trace.provider,\n        route: trace.route,\n        external: trace.external,\n        durationMs: trace.durationMs,\n        bytes: trace.bytes,\n    };\n}\nfunction currentProvider(provider) {\n    if (!provider || provider === \"auto\")\n        return \"local_text\";\n    return provider;\n}\nasync function insertWorkflowRun(ctx, params) {\n    const persistedArgs = serializeWorkflowValue(params.args);\n    const realtimeToken = createWorkflowRealtimeToken();\n    await ctx.unsafeDb.execute(sql `\n        INSERT INTO _gencow_workflows (\n          id,\n          name,\n          args,\n          realtime_token,\n          status,\n          retry_count,\n          max_retries,\n          max_duration_ms,\n          user_id\n        )\n        VALUES (\n          ${params.workflowId},\n          ${INTERNAL_RAG_INGEST_WORKFLOW},\n          ${JSON.stringify(persistedArgs)}::jsonb,\n          ${realtimeToken},\n          'pending',\n          0,\n          3,\n          1800000,\n          ${params.viewerUserId}\n        )\n    `);\n    return ctx.scheduler.runAfter(0, getWorkflowResumeActionName(INTERNAL_RAG_INGEST_WORKFLOW), {\n        workflowId: params.workflowId,\n    });\n}\nasync function startRagIngestJob(ctx, input) {\n    const viewer = ctx.auth.requireAuth();\n    if (!input.corpus?.trim()) {\n        throw new Error(\"corpus is required\");\n    }\n    const visibility = input.visibility;\n    const ownerUserId = resolveOwnerUserId({\n        visibility,\n        ownerUserId: input.ownerUserId,\n        viewerUserId: viewer.id,\n    });\n    const stored = (await ctx.storage.get(input.storageId));\n    if (!stored) {\n        throw new Error(`storageId not found: ${input.storageId}`);\n    }\n    const sourceKey = resolveDocumentSourceKey({ storageId: input.storageId, filename: input.sourceKey?.trim() || undefined }, stored.name);\n    const checksum = createHash(\"sha256\").update(stored.buffer).digest(\"hex\");\n    const existingSource = await findRagSourceByScopeAndKey(ctx.unsafeDb, {\n        corpus: input.corpus,\n        visibility,\n        ownerUserId,\n        sourceKey,\n    });\n    const reindexMode = input.reindexMode ?? \"if_changed\";\n    if (reindexMode === \"if_changed\" && existingSource && existingSource.source_checksum === checksum) {\n        const existingJob = await findLatestRagIngestJobBySourceId(ctx.unsafeDb, existingSource.id);\n        if (existingJob) {\n            return {\n                workflowId: existingJob.workflowId,\n                jobId: existingJob.id,\n                sourceId: existingSource.id,\n                status: \"queued\",\n            };\n        }\n    }\n    const workflowId = crypto.randomUUID();\n    const sourceId = existingSource?.id ?? crypto.randomUUID();\n    const metadata = normalizeMetadata(input.metadata);\n    const workflowArgs = {\n        jobId: workflowId,\n        sourceId,\n        storageId: input.storageId,\n        corpus: input.corpus,\n        visibility,\n        ownerUserId: ownerUserId ?? undefined,\n        sourceKey,\n        reindexMode,\n        mode: input.mode,\n        provider: input.provider,\n    };\n    assertWorkflowPayloadWithinLimit({\n        workflowName: INTERNAL_RAG_INGEST_WORKFLOW,\n        kind: \"args\",\n        serializedValue: serializeWorkflowValue(workflowArgs),\n    });\n    await ensureRagCorpusPolicy({\n        db: ctx.unsafeDb,\n        corpus: input.corpus,\n        visibility,\n        ownerUserId,\n        metadata,\n    });\n    await upsertQueuedRagSource(ctx.unsafeDb, {\n        sourceId,\n        corpus: input.corpus,\n        visibility,\n        ownerUserId,\n        storageId: input.storageId,\n        sourceKey,\n        sourceTitle: stored.name,\n        mimeType: stored.type || \"application/octet-stream\",\n        byteSize: stored.size,\n        checksum,\n        provider: currentProvider(input.provider),\n        metadata,\n    });\n    await createQueuedRagIngestJob(ctx.unsafeDb, {\n        jobId: workflowId,\n        workflowId,\n        sourceId,\n        corpus: input.corpus,\n        visibility,\n        ownerUserId,\n    });\n    try {\n        await insertWorkflowRun(ctx, {\n            workflowId,\n            viewerUserId: viewer.id,\n            args: workflowArgs,\n        });\n    }\n    catch (error) {\n        await ctx.unsafeDb.execute(sql `DELETE FROM rag_ingest_jobs WHERE id = ${workflowId}`);\n        if (!existingSource) {\n            await ctx.unsafeDb.execute(sql `DELETE FROM rag_sources WHERE id = ${sourceId}`);\n        }\n        await ctx.unsafeDb.execute(sql `DELETE FROM _gencow_workflows WHERE id = ${workflowId}`);\n        throw error;\n    }\n    return {\n        workflowId,\n        jobId: workflowId,\n        sourceId,\n        status: \"queued\",\n    };\n}\nasync function setWorkflowStatusAndSchedule(ctx, params) {\n    const result = await ctx.unsafeDb.execute(params.updateSql);\n    const row = rowsFromResult(result)[0] ?? null;\n    if (!row) {\n        return { ok: false, workflowId: params.workflowId, scheduledJobId: null, action: params.action };\n    }\n    const scheduledJobId = ctx.scheduler.runAfter(0, getWorkflowResumeActionName(INTERNAL_RAG_INGEST_WORKFLOW), {\n        workflowId: params.workflowId,\n    });\n    return { ok: true, workflowId: params.workflowId, scheduledJobId, action: params.action };\n}\nexport const ragIngestProcedures = {\n    start: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.documentsIngestStart)\n        .input(ragBuiltinInputSchemas.documentsIngestStart)\n        .output(ragBuiltinOutputSchemas.documentsIngestStart)\n        .handler(async ({ context: ctx, input: rawArgs }) => {\n        const input = {\n            storageId: rawArgs.storageId,\n            corpus: rawArgs.corpus.trim(),\n            visibility: normalizeVisibility(rawArgs.visibility),\n            ownerUserId: rawArgs.ownerUserId?.trim() || undefined,\n            sourceKey: rawArgs.sourceKey?.trim() || undefined,\n            metadata: normalizeMetadata(rawArgs.metadata),\n            reindexMode: normalizeReindexMode(rawArgs.reindexMode),\n            mode: normalizeMode(rawArgs.mode),\n            provider: normalizeProvider(rawArgs.provider),\n        };\n        return startRagIngestJob(ctx, input);\n    }),\n    reindex: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.documentsIngestReindex)\n        .input(ragBuiltinInputSchemas.documentsIngestReindex)\n        .output(ragBuiltinOutputSchemas.documentsIngestReindex)\n        .handler(async ({ context: ctx, input: rawArgs }) => {\n        const viewer = ctx.auth.requireAuth();\n        const source = await loadAccessibleRagSource(ctx.unsafeDb, {\n            sourceId: rawArgs.sourceId,\n            viewerUserId: viewer.id,\n        });\n        if (!source) {\n            throw new Error(`rag source not found: ${rawArgs.sourceId}`);\n        }\n        return startRagIngestJob(ctx, {\n            storageId: source.storage_id,\n            corpus: source.corpus,\n            visibility: source.visibility_scope,\n            ownerUserId: source.owner_user_id ?? undefined,\n            sourceKey: source.source_key,\n            metadata: source.metadata,\n            reindexMode: \"force\",\n            mode: normalizeMode(rawArgs.mode),\n            provider: normalizeProvider(rawArgs.provider),\n        });\n    }),\n    getJob: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragIngestJobsGet)\n        .input(ragBuiltinInputSchemas.ragIngestJobsGet)\n        .output(ragBuiltinOutputSchemas.ragIngestJobsGet)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        return loadAccessibleRagIngestJob(ctx.unsafeDb, {\n            jobId: args.id,\n            viewerUserId: viewer.id,\n        });\n    }),\n    listJobs: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragIngestJobsList)\n        .input(ragBuiltinInputSchemas.ragIngestJobsList)\n        .output(ragBuiltinOutputSchemas.ragIngestJobsList)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        const limit = args.limit == null ? 20 : Math.max(1, Math.min(100, Math.floor(args.limit)));\n        const status = normalizeJobStatus(args.status);\n        return listAccessibleRagIngestJobs(ctx.unsafeDb, {\n            viewerUserId: viewer.id,\n            limit,\n            status,\n            corpus: args.corpus?.trim() || undefined,\n        });\n    }),\n    cancelJob: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragIngestJobsCancel)\n        .input(ragBuiltinInputSchemas.ragIngestJobsById)\n        .output(ragBuiltinOutputSchemas.ragIngestJobsCancel)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        const job = await loadAccessibleRagIngestJob(ctx.unsafeDb, {\n            jobId: args.id,\n            viewerUserId: viewer.id,\n        });\n        if (!job) {\n            return { ok: false, workflowId: null };\n        }\n        const updated = await ctx.unsafeDb.execute(sql `\n            UPDATE _gencow_workflows\n            SET\n              status = 'failed',\n              error = 'Cancelled by user', error_code = NULL,\n              completed_at = NOW(),\n              updated_at = NOW()\n            WHERE id = ${job.workflowId}\n              AND status IN ('pending', 'running')\n            RETURNING id\n        `);\n        const row = rowsFromResult(updated)[0] ?? null;\n        if (!row) {\n            return { ok: false, workflowId: job.workflowId };\n        }\n        await finalizeRagIngestJob(ctx.unsafeDb, {\n            jobId: job.id,\n            status: \"canceled\",\n            error: \"Cancelled by user\",\n            metrics: job.metrics,\n            providerTrace: job.providerTrace,\n        });\n        await markRagSourceFailed(ctx.unsafeDb, {\n            sourceId: job.sourceId,\n            provider: String(job.providerTrace?.provider ?? \"local_text\"),\n            error: \"Cancelled by user\",\n        });\n        return { ok: true, workflowId: job.workflowId };\n    }),\n    retryJob: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragIngestJobsRetry)\n        .input(ragBuiltinInputSchemas.ragIngestJobsById)\n        .output(ragBuiltinOutputSchemas.ragIngestJobsRetry)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        const job = await loadAccessibleRagIngestJob(ctx.unsafeDb, {\n            jobId: args.id,\n            viewerUserId: viewer.id,\n        });\n        if (!job) {\n            return { ok: false, workflowId: null, scheduledJobId: null, action: \"retry\" };\n        }\n        await resetRagIngestJobForRetry(ctx.unsafeDb, {\n            jobId: job.id,\n            metrics: job.metrics,\n            providerTrace: job.providerTrace,\n        });\n        return setWorkflowStatusAndSchedule(ctx, {\n            workflowId: job.workflowId,\n            action: \"retry\",\n            updateSql: sql `\n              UPDATE _gencow_workflows\n              SET\n                status = 'pending',\n                retry_count = 0,\n                result = NULL,\n                error = NULL, error_code = NULL,\n                current_step = NULL,\n                handler_started_at = NULL,\n                last_resume_attempt_at = NULL,\n                started_at = NOW(),\n                completed_at = NULL,\n                updated_at = NOW()\n              WHERE id = ${job.workflowId}\n                AND status = 'failed'\n              RETURNING id\n          `,\n        });\n    }),\n    resumeJob: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragIngestJobsResume)\n        .input(ragBuiltinInputSchemas.ragIngestJobsById)\n        .output(ragBuiltinOutputSchemas.ragIngestJobsResume)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        const job = await loadAccessibleRagIngestJob(ctx.unsafeDb, {\n            jobId: args.id,\n            viewerUserId: viewer.id,\n        });\n        if (!job) {\n            return { ok: false, workflowId: null, scheduledJobId: null, action: \"resume\" };\n        }\n        return setWorkflowStatusAndSchedule(ctx, {\n            workflowId: job.workflowId,\n            action: \"resume\",\n            updateSql: sql `\n              UPDATE _gencow_workflows\n              SET updated_at = NOW()\n              WHERE id = ${job.workflowId}\n                AND status = 'pending'\n              RETURNING id\n          `,\n        });\n    }),\n};\nexport function registerRagIngestRuntime() {\n    registerRagCorporaRuntime();\n    registerRagOperationsRuntime();\n    workflow(INTERNAL_RAG_INGEST_WORKFLOW, {\n        public: false,\n        args: {\n            jobId: v.string(),\n            sourceId: v.string(),\n            storageId: v.string(),\n            corpus: v.string(),\n            visibility: v.string(),\n            ownerUserId: v.optional(v.string()),\n            sourceKey: v.optional(v.string()),\n            metadata: v.optional(v.any()),\n            reindexMode: v.optional(v.string()),\n            mode: v.optional(v.string()),\n            provider: v.optional(v.string()),\n        },\n        handler: async (wf, rawArgs) => {\n            const visibility = normalizeVisibility(rawArgs.visibility);\n            const mode = normalizeMode(rawArgs.mode);\n            const provider = normalizeProvider(rawArgs.provider);\n            await wf.step(\"validateInput\", async () => {\n                await setRagIngestJobStage(wf.unsafeDb, {\n                    jobId: rawArgs.jobId,\n                    status: \"queued\",\n                    stage: \"validateInput\",\n                });\n            });\n            const stored = await wf.step(\"loadStoredFile\", async () => {\n                const loaded = await wf.storage.getMeta(rawArgs.storageId);\n                if (!loaded) {\n                    throw new Error(`storageId not found: ${rawArgs.storageId}`);\n                }\n                return loaded;\n            });\n            const preparation = await wf.step(\"convertAndPersistSource\", async () => {\n                await setRagIngestJobStage(wf.unsafeDb, {\n                    jobId: rawArgs.jobId,\n                    status: \"converting\",\n                    stage: \"convertAndPersistSource\",\n                });\n                const converted = await wf.services.document.convert({\n                    storageId: rawArgs.storageId,\n                    filename: stored.name,\n                    mimeType: stored.type,\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId,\n                    mode,\n                    provider,\n                });\n                const canonicalText = converted.markdown || converted.text;\n                const sections = createStableSections(rawArgs.sourceId, converted.sections, canonicalText.length);\n                const plannedChunks = createChunkPlan(rawArgs.sourceId, canonicalText, sections);\n                const source = await findRagSourceByScopeAndKey(wf.unsafeDb, {\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId ?? null,\n                    sourceKey: rawArgs.sourceKey?.trim() || stored.name || rawArgs.storageId,\n                });\n                if (!source || source.id !== rawArgs.sourceId) {\n                    throw new Error(`RAG source not found or out of scope for source \"${rawArgs.sourceId}\"`);\n                }\n                const metadata = normalizeMetadata(source.metadata);\n                await setRagIngestJobStage(wf.unsafeDb, {\n                    jobId: rawArgs.jobId,\n                    status: \"upserting\",\n                    stage: \"convertAndPersistSource\",\n                    providerTrace: converted.providerTrace,\n                });\n                await persistConvertedRagSource(wf.unsafeDb, {\n                    sourceId: rawArgs.sourceId,\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId ?? null,\n                    provider: converted.providerTrace.provider,\n                    result: converted,\n                    metadata: {\n                        ...metadata,\n                        storageId: rawArgs.storageId,\n                        sourceKey: rawArgs.sourceKey?.trim() || stored.name || rawArgs.storageId,\n                    },\n                });\n                await upsertRagSectionsAndChunks(wf.unsafeDb, {\n                    sourceId: rawArgs.sourceId,\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId ?? null,\n                    sections,\n                    chunks: plannedChunks,\n                });\n                return {\n                    storageBytes: stored.size,\n                    sectionCount: sections.length,\n                    chunkCount: plannedChunks.length,\n                    warningCount: converted.warnings.length,\n                    providerTrace: boundedProviderTrace(converted.providerTrace),\n                };\n            });\n            const embeddingSummary = await wf.step(\"embedChunkBatch\", async () => {\n                await setRagIngestJobStage(wf.unsafeDb, {\n                    jobId: rawArgs.jobId,\n                    status: \"embedding\",\n                    stage: \"embedChunkBatch\",\n                    metrics: {\n                        chunkCount: preparation.chunkCount,\n                        batchCount: Math.ceil(preparation.chunkCount / RAG_EMBEDDING_BATCH_SIZE),\n                    },\n                });\n                return persistRagChunkEmbeddingsForWorkflow(wf, {\n                    sourceId: rawArgs.sourceId,\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId ?? null,\n                });\n            });\n            await wf.step(\"recordUsageAndFinalize\", async () => {\n                await finalizeRagIngestJob(wf.unsafeDb, {\n                    jobId: rawArgs.jobId,\n                    status: \"completed\",\n                    metrics: {\n                        bytes: preparation.storageBytes,\n                        sectionCount: preparation.sectionCount,\n                        chunkCount: preparation.chunkCount,\n                        embeddedChunkCount: embeddingSummary.embeddedCount,\n                        warningCount: preparation.warningCount,\n                        externalProvider: preparation.providerTrace.external,\n                    },\n                });\n                await emitCompletedRagIngestMetrics({\n                    db: wf.unsafeDb,\n                    corpus: rawArgs.corpus,\n                    visibility,\n                    ownerUserId: rawArgs.ownerUserId ?? null,\n                    jobId: rawArgs.jobId,\n                    workflowId: rawArgs.jobId,\n                    sourceId: rawArgs.sourceId,\n                    storageBytes: preparation.storageBytes,\n                    sectionCount: preparation.sectionCount,\n                    chunkCount: preparation.chunkCount,\n                    warningCount: preparation.warningCount,\n                    providerTrace: preparation.providerTrace,\n                    reindexMode: rawArgs.reindexMode,\n                });\n            });\n            return {\n                sourceId: rawArgs.sourceId,\n                jobId: rawArgs.jobId,\n                chunkCount: preparation.chunkCount,\n            };\n        },\n    });\n}\n", "import { isPlaceholderAiKey } from \"./server-ai-runtime.js\";\nimport { ProviderRateLimitRetryableError, parseRetryAfterHeaderMs } from \"./provider-rate-limit-retry.js\";\nexport const RAG_EMBEDDING_MODEL = \"text-embedding-3-small\";\nexport const RAG_EMBEDDING_DIMENSION = 1536;\nexport const RAG_EMBEDDING_BATCH_SIZE = 16;\nexport function createRagEmbeddingBatches(items, size = RAG_EMBEDDING_BATCH_SIZE) {\n    const result = [];\n    for (let index = 0; index < items.length; index += size) {\n        result.push(items.slice(index, index + size));\n    }\n    return result;\n}\nfunction appendEmbeddingsPath(baseUrl) {\n    const normalized = baseUrl.replace(/\\/+$/, \"\");\n    return normalized.endsWith(\"/embeddings\") ? normalized : `${normalized}/embeddings`;\n}\nfunction uniqueEmbeddingTargets(targets) {\n    const seen = new Set();\n    return targets.filter((target) => {\n        const key = `${target.endpoint}\\n${target.token}`;\n        if (seen.has(key))\n            return false;\n        seen.add(key);\n        return true;\n    });\n}\nexport function resolveRagEmbeddingTargets(env = process.env) {\n    const proxyToken = env.GENCOW_AI_PROXY_TOKEN?.trim();\n    const proxyUrls = [env.GENCOW_AI_PROXY_URL, env.GENCOW_AI_PROXY_URL_ALT]\n        .map((value) => value?.trim())\n        .filter((value) => !!value);\n    const targets = [];\n    const hasProxyConfig = proxyUrls.length > 0 || !!proxyToken;\n    if (proxyToken) {\n        for (const proxyUrl of proxyUrls) {\n            targets.push({ endpoint: appendEmbeddingsPath(proxyUrl), token: proxyToken });\n        }\n    }\n    const directKey = env.OPENAI_API_KEY?.trim();\n    const allowDirectOpenAiFallback = env.GENCOW_RAG_ALLOW_DIRECT_OPENAI_FALLBACK === \"1\";\n    if (!hasProxyConfig && allowDirectOpenAiFallback && directKey && !isPlaceholderAiKey(directKey)) {\n        targets.push({ endpoint: \"https://api.openai.com/v1/embeddings\", token: directKey });\n    }\n    return uniqueEmbeddingTargets(targets);\n}\nfunction shouldRetryEmbeddingResponse(status) {\n    return status === 404 || status === 408 || status >= 500;\n}\nfunction extractEmbeddingError(json) {\n    if (!json || typeof json !== \"object\")\n        return null;\n    const error = json.error;\n    if (typeof error === \"string\")\n        return error;\n    if (error && typeof error === \"object\" && typeof error.message === \"string\") {\n        return error.message;\n    }\n    return null;\n}\nfunction extractEmbeddingErrorCode(json) {\n    if (!json || typeof json !== \"object\")\n        return null;\n    const error = json.error;\n    if (!error || typeof error !== \"object\")\n        return null;\n    const code = error.code;\n    return typeof code === \"string\" && code.trim() ? code : null;\n}\nfunction validateEmbeddingList(json, inputCount) {\n    if (!json || typeof json !== \"object\" || !Array.isArray(json.data)) {\n        throw new Error(\"AI embeddings endpoint returned JSON without data[]\");\n    }\n    const data = json.data;\n    const embeddings = new Array(inputCount);\n    let validCount = 0;\n    data.forEach((item, fallbackIndex) => {\n        if (!item || typeof item !== \"object\")\n            return;\n        const rawIndex = item.index;\n        const index = Number.isInteger(rawIndex) ? rawIndex : fallbackIndex;\n        const embedding = item.embedding;\n        if (index < 0 ||\n            index >= inputCount ||\n            !Array.isArray(embedding) ||\n            !embedding.every((value) => typeof value === \"number\")) {\n            return;\n        }\n        if (embedding.length !== RAG_EMBEDDING_DIMENSION) {\n            throw new Error(`AI embeddings endpoint returned ${embedding.length}-dimension embedding at index ${index}; expected ${RAG_EMBEDDING_DIMENSION}`);\n        }\n        embeddings[index] = embedding;\n        validCount += 1;\n    });\n    if (embeddings.some((embedding) => !embedding)) {\n        throw new Error(`AI embeddings endpoint returned ${validCount} valid embedding(s) for ${inputCount} input(s)`);\n    }\n    return embeddings;\n}\nasync function parseEmbeddingResponse(response, endpoint, inputCount) {\n    const contentType = response.headers.get(\"content-type\") ?? \"\";\n    const raw = await response.text();\n    let json;\n    try {\n        json = raw ? JSON.parse(raw) : {};\n    }\n    catch {\n        throw new Error(`AI embeddings endpoint returned non-JSON (${response.status}, ${contentType || \"missing content-type\"}) from ${endpoint}: ${raw.slice(0, 200)}`);\n    }\n    if (!response.ok) {\n        const message = extractEmbeddingError(json) ?? (raw.slice(0, 200) || response.statusText);\n        if (response.status === 429) {\n            throw new ProviderRateLimitRetryableError(message, {\n                errorCode: response.headers.get(\"x-gencow-error-code\") ?? extractEmbeddingErrorCode(json),\n                retryAfterMs: parseRetryAfterHeaderMs(response.headers.get(\"retry-after\")),\n                status: response.status,\n            });\n        }\n        throw new Error(`AI embeddings endpoint failed (${response.status}) from ${endpoint}: ${message}`);\n    }\n    return validateEmbeddingList(json, inputCount);\n}\nexport async function fetchOpenAICompatibleEmbeddings(params) {\n    if (params.texts.length === 0)\n        return [];\n    const fetchImpl = params.fetchImpl ?? fetch;\n    let lastError = null;\n    for (let index = 0; index < params.targets.length; index += 1) {\n        const target = params.targets[index];\n        let response;\n        try {\n            response = await fetchImpl(target.endpoint, {\n                method: \"POST\",\n                headers: {\n                    Authorization: `Bearer ${target.token}`,\n                    \"Content-Type\": \"application/json\",\n                },\n                body: JSON.stringify({\n                    model: RAG_EMBEDDING_MODEL,\n                    input: params.texts,\n                }),\n            });\n        }\n        catch (error) {\n            lastError = error instanceof Error ? error : new Error(String(error));\n            if (index < params.targets.length - 1)\n                continue;\n            throw lastError;\n        }\n        if (!response.ok && shouldRetryEmbeddingResponse(response.status) && index < params.targets.length - 1) {\n            lastError = new Error(`AI embeddings endpoint returned retryable status ${response.status} from ${target.endpoint}`);\n            continue;\n        }\n        return parseEmbeddingResponse(response, target.endpoint, params.texts.length);\n    }\n    throw lastError ?? new Error(\"AI embeddings endpoint is not configured\");\n}\n", "import { createHash } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { RAG_EMBEDDING_DIMENSION, RAG_EMBEDDING_MODEL, createRagEmbeddingBatches, fetchOpenAICompatibleEmbeddings, resolveRagEmbeddingTargets, } from \"./rag-embedding-runtime.js\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function loadScopedRagEmbeddingChunks(db, params) {\n    const ownerFilter = params.ownerUserId == null ? sql `owner_user_id IS NULL` : sql `owner_user_id = ${params.ownerUserId}`;\n    const sourceResult = await db.execute(sql `\n    SELECT id\n    FROM rag_sources\n    WHERE id = ${params.sourceId}\n      AND corpus = ${params.corpus}\n      AND visibility_scope = ${params.visibility}\n      AND ${ownerFilter}\n    LIMIT 1\n  `);\n    if (rowsFromResult(sourceResult).length !== 1) {\n        throw new Error(`RAG embedding source not found or out of scope for source \"${params.sourceId}\"`);\n    }\n    const result = await db.execute(sql `\n    SELECT\n      id,\n      chunk_text,\n      chunk_checksum,\n      embedding IS NOT NULL AS has_embedding\n    FROM rag_chunks\n    WHERE source_id = ${params.sourceId}\n      AND corpus = ${params.corpus}\n      AND visibility_scope = ${params.visibility}\n      AND ${ownerFilter}\n    ORDER BY chunk_index ASC, id ASC\n  `);\n    return rowsFromResult(result).map((row) => ({\n        id: row.id,\n        chunkText: row.chunk_text,\n        chunkChecksum: row.chunk_checksum,\n        hasEmbedding: row.has_embedding,\n    }));\n}\nexport async function persistRagChunkEmbeddings(db, params) {\n    let persisted = 0;\n    const ownerFilter = params.ownerUserId == null ? sql `owner_user_id IS NULL` : sql `owner_user_id = ${params.ownerUserId}`;\n    for (const item of params.embeddings) {\n        const result = await db.execute(sql `\n      UPDATE rag_chunks\n      SET\n        embedding = ${JSON.stringify(item.embedding)}::vector,\n        updated_at = NOW()\n      WHERE id = ${item.id}\n        AND source_id = ${params.sourceId}\n        AND corpus = ${params.corpus}\n        AND visibility_scope = ${params.visibility}\n        AND ${ownerFilter}\n        AND chunk_checksum = ${item.chunkChecksum}\n      RETURNING id\n    `);\n        const rows = rowsFromResult(result);\n        if (rows.length !== 1) {\n            throw new Error(`RAG chunk embedding target is stale or out of scope for chunk \"${item.id}\"`);\n        }\n        persisted += 1;\n    }\n    return persisted;\n}\nexport function checksumRagChunkEmbeddingTargets(chunks) {\n    const input = chunks.map((chunk) => `${chunk.id}:${chunk.chunkChecksum}`).join(\"\\n\");\n    return createHash(\"sha256\").update(input).digest(\"hex\");\n}\nexport async function persistRagChunkEmbeddingsForWorkflow(wf, params) {\n    const chunks = await loadScopedRagEmbeddingChunks(wf.unsafeDb, params);\n    const checksum = checksumRagChunkEmbeddingTargets(chunks);\n    const summaryBase = {\n        ok: true,\n        chunkCount: chunks.length,\n        dimension: RAG_EMBEDDING_DIMENSION,\n        model: RAG_EMBEDDING_MODEL,\n        target: \"rag_chunks.embedding\",\n        checksum,\n    };\n    if (chunks.length === 0) {\n        return {\n            ...summaryBase,\n            embeddedCount: 0,\n            persistedCount: 0,\n            skippedExistingCount: 0,\n            providerConfigured: false,\n        };\n    }\n    const pendingChunks = chunks.filter((chunk) => !chunk.hasEmbedding);\n    const skippedExistingCount = chunks.length - pendingChunks.length;\n    const targets = resolveRagEmbeddingTargets();\n    if (targets.length === 0 || pendingChunks.length === 0) {\n        return {\n            ...summaryBase,\n            embeddedCount: skippedExistingCount,\n            persistedCount: 0,\n            skippedExistingCount,\n            providerConfigured: targets.length > 0,\n        };\n    }\n    let persistedCount = 0;\n    for (const batch of createRagEmbeddingBatches(pendingChunks)) {\n        const embeddings = await fetchOpenAICompatibleEmbeddings({\n            targets,\n            texts: batch.map((chunk) => chunk.chunkText),\n        });\n        const writes = batch.map((chunk, index) => {\n            const embedding = embeddings[index];\n            if (!embedding) {\n                throw new Error(`RAG embedding response missing vector for chunk \"${chunk.id}\"`);\n            }\n            return { id: chunk.id, chunkChecksum: chunk.chunkChecksum, embedding };\n        });\n        persistedCount += await persistRagChunkEmbeddings(wf.unsafeDb, {\n            sourceId: params.sourceId,\n            corpus: params.corpus,\n            visibility: params.visibility,\n            ownerUserId: params.ownerUserId,\n            embeddings: writes,\n        });\n    }\n    return {\n        ...summaryBase,\n        embeddedCount: skippedExistingCount + persistedCount,\n        persistedCount,\n        skippedExistingCount,\n        providerConfigured: true,\n    };\n}\n", "import { emitRagOperationMetrics } from \"./rag-operations-metrics.js\";\nexport async function emitCompletedRagIngestMetrics(params) {\n    const base = {\n        corpus: params.corpus,\n        visibility: params.visibility,\n        ownerUserId: params.ownerUserId ?? null,\n        operation: \"ingest\",\n        jobId: params.jobId,\n        workflowId: params.workflowId,\n        sourceId: params.sourceId,\n    };\n    const providerMetadata = {\n        provider: params.providerTrace.provider,\n        route: params.providerTrace.route,\n        external: params.providerTrace.external,\n        reindexMode: params.reindexMode ?? \"if_changed\",\n    };\n    await emitRagOperationMetrics(params.db, [\n        {\n            ...base,\n            metricName: \"source_bytes\",\n            metricValue: params.storageBytes,\n            unit: \"count\",\n            metadata: providerMetadata,\n        },\n        {\n            ...base,\n            metricName: \"section_count\",\n            metricValue: params.sectionCount,\n            unit: \"count\",\n        },\n        {\n            ...base,\n            metricName: \"chunk_count\",\n            metricValue: params.chunkCount,\n            unit: \"count\",\n        },\n        {\n            ...base,\n            metricName: \"warning_count\",\n            metricValue: params.warningCount,\n            unit: \"count\",\n        },\n        {\n            ...base,\n            metricName: \"convert_latency_ms\",\n            metricValue: params.providerTrace.durationMs,\n            unit: \"ms\",\n        },\n        {\n            ...base,\n            metricName: \"external_provider_count\",\n            metricValue: params.providerTrace.external ? 1 : 0,\n            unit: \"count\",\n        },\n    ]);\n}\n", "import { parsePrivateExternalCorpusAllowlist, resolveAllowExternalProvidersPolicy, } from \"./rag-corpus-policy.js\";\nimport { upsertRagCorpus } from \"./rag-ingest-jobs.js\";\nexport function configuredPrivateExternalCorpora(envValue = process.env.GENCOW_DOCUMENT_EXTERNAL_PRIVATE_CORPORA) {\n    return parsePrivateExternalCorpusAllowlist(envValue);\n}\nexport async function ensureRagCorpusPolicy(params) {\n    const allowExternalProviders = await resolveAllowExternalProvidersPolicy({\n        db: params.db,\n        corpus: params.corpus,\n        visibility: params.visibility,\n        ownerUserId: params.ownerUserId,\n        allowPrivateExternalCorpora: configuredPrivateExternalCorpora(),\n    });\n    await upsertRagCorpus(params.db, {\n        corpus: params.corpus,\n        visibility: params.visibility,\n        ownerUserId: params.ownerUserId,\n        allowExternalProviders,\n        metadata: params.metadata,\n    });\n    return allowExternalProviders;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { GENCOW_APP_WAKE_CHANNEL, buildWakeSignalPayload } from \"./wake-signal/wake-signal-types.js\";\nconst RAG_INGEST_WAKE_SIGNAL_PAYLOAD = buildWakeSignalPayload(\"rag_ingest\");\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction parseJsonField(value, fallback) {\n    if (value == null)\n        return fallback;\n    if (typeof value === \"string\") {\n        try {\n            return JSON.parse(value);\n        }\n        catch {\n            return fallback;\n        }\n    }\n    if (typeof value === \"object\") {\n        return value;\n    }\n    return fallback;\n}\nfunction toIsoString(value) {\n    if (value instanceof Date)\n        return value.toISOString();\n    const parsed = new Date(value);\n    return Number.isFinite(parsed.getTime()) ? parsed.toISOString() : String(value);\n}\nfunction toOptionalIsoString(value) {\n    return value ? toIsoString(value) : null;\n}\nfunction matchesOwner(viewerUserId, ownerUserId) {\n    return ownerUserId == null || ownerUserId === viewerUserId;\n}\nfunction normalizeJobStatus(row) {\n    if (row.workflow_status === \"completed\")\n        return \"completed\";\n    if (row.workflow_status === \"failed\") {\n        return row.workflow_error === \"Cancelled by user\" ? \"canceled\" : \"failed\";\n    }\n    if (row.status === \"completed\" || row.status === \"failed\" || row.status === \"canceled\") {\n        return row.status;\n    }\n    return (row.status || \"queued\");\n}\nfunction mapJobRow(row) {\n    const status = normalizeJobStatus(row);\n    return {\n        id: row.id,\n        workflowId: row.workflow_id,\n        sourceId: row.source_id,\n        corpus: row.corpus,\n        visibility: row.visibility_scope,\n        ownerUserId: row.owner_user_id,\n        status,\n        stage: status === \"completed\"\n            ? \"completed\"\n            : status === \"failed\"\n                ? \"failed\"\n                : status === \"canceled\"\n                    ? \"canceled\"\n                    : row.stage,\n        providerTrace: parseJsonField(row.provider_trace, {}),\n        metrics: parseJsonField(row.metrics, {}),\n        error: row.workflow_error ?? row.error,\n        startedAt: toIsoString(row.started_at),\n        completedAt: toOptionalIsoString(row.completed_at),\n    };\n}\nexport async function findRagSourceByScopeAndKey(db, params) {\n    const ownerFilter = params.ownerUserId == null\n        ? sql `AND owner_user_id IS NULL`\n        : sql `AND owner_user_id = ${params.ownerUserId}`;\n    const result = await db.execute(sql `\n        SELECT *\n        FROM rag_sources\n        WHERE corpus = ${params.corpus}\n          AND visibility_scope = ${params.visibility}\n          AND source_key = ${params.sourceKey}\n          ${ownerFilter}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function loadAccessibleRagSource(db, params) {\n    const result = await db.execute(sql `\n        SELECT *\n        FROM rag_sources\n        WHERE id = ${params.sourceId}\n        LIMIT 1\n    `);\n    const row = rowsFromResult(result)[0] ?? null;\n    if (!row || !matchesOwner(params.viewerUserId, row.owner_user_id)) {\n        return null;\n    }\n    return row;\n}\nexport async function findLatestRagIngestJobBySourceId(db, sourceId) {\n    const result = await db.execute(sql `\n        SELECT\n          j.*,\n          w.status AS workflow_status,\n          w.error AS workflow_error\n        FROM rag_ingest_jobs j\n        LEFT JOIN _gencow_workflows w ON w.id = j.workflow_id\n        WHERE j.source_id = ${sourceId}\n        ORDER BY j.started_at DESC\n        LIMIT 1\n    `);\n    const row = rowsFromResult(result)[0] ?? null;\n    return row ? mapJobRow(row) : null;\n}\nexport async function upsertQueuedRagSource(db, params) {\n    await db.execute(sql `\n        INSERT INTO rag_sources (\n          id,\n          corpus,\n          visibility_scope,\n          owner_user_id,\n          storage_id,\n          source_key,\n          source_title,\n          mime_type,\n          byte_size,\n          source_checksum,\n          convert_provider,\n          convert_status,\n          markdown,\n          text,\n          warnings,\n          metadata\n        )\n        VALUES (\n          ${params.sourceId},\n          ${params.corpus},\n          ${params.visibility},\n          ${params.ownerUserId},\n          ${params.storageId},\n          ${params.sourceKey},\n          ${params.sourceTitle},\n          ${params.mimeType},\n          ${params.byteSize},\n          ${params.checksum},\n          ${params.provider},\n          'queued',\n          '',\n          '',\n          ${JSON.stringify([])}::jsonb,\n          ${JSON.stringify(params.metadata)}::jsonb\n        )\n        ON CONFLICT (id)\n        DO UPDATE SET\n          corpus = EXCLUDED.corpus,\n          visibility_scope = EXCLUDED.visibility_scope,\n          owner_user_id = EXCLUDED.owner_user_id,\n          storage_id = EXCLUDED.storage_id,\n          source_key = EXCLUDED.source_key,\n          source_title = EXCLUDED.source_title,\n          mime_type = EXCLUDED.mime_type,\n          byte_size = EXCLUDED.byte_size,\n          source_checksum = EXCLUDED.source_checksum,\n          convert_provider = EXCLUDED.convert_provider,\n          convert_status = 'queued',\n          warnings = '[]'::jsonb,\n          metadata = EXCLUDED.metadata,\n          updated_at = NOW()\n    `);\n}\nexport async function upsertRagCorpus(db, params) {\n    const corpusId = `${params.corpus}:${params.visibility}:${params.ownerUserId ?? \"shared\"}`;\n    await db.execute(sql `\n        INSERT INTO rag_corpora (\n          id,\n          corpus,\n          visibility_scope,\n          owner_user_id,\n          title,\n          allow_external_providers,\n          metadata\n        )\n        VALUES (\n          ${corpusId},\n          ${params.corpus},\n          ${params.visibility},\n          ${params.ownerUserId},\n          ${params.corpus},\n          ${params.allowExternalProviders},\n          ${JSON.stringify(params.metadata)}::jsonb\n        )\n        ON CONFLICT (id)\n        DO UPDATE SET\n          allow_external_providers = EXCLUDED.allow_external_providers,\n          metadata = EXCLUDED.metadata,\n          updated_at = NOW()\n    `);\n}\nexport async function createQueuedRagIngestJob(db, params) {\n    await db.execute(sql `\n      WITH inserted AS (\n        INSERT INTO rag_ingest_jobs (\n          id,\n          corpus,\n          visibility_scope,\n          owner_user_id,\n          workflow_id,\n          source_id,\n          status,\n          stage,\n          provider_trace,\n          metrics\n        )\n        VALUES (\n          ${params.jobId},\n          ${params.corpus},\n          ${params.visibility},\n          ${params.ownerUserId},\n          ${params.workflowId},\n          ${params.sourceId},\n          'queued',\n          'queued',\n          '{}'::jsonb,\n          '{}'::jsonb\n        )\n        RETURNING id\n      ),\n      wake_notified AS (\n        SELECT pg_notify(${GENCOW_APP_WAKE_CHANNEL}, ${RAG_INGEST_WAKE_SIGNAL_PAYLOAD})\n        FROM inserted\n      )\n      SELECT inserted.id\n      FROM inserted\n      LEFT JOIN wake_notified ON TRUE\n    `);\n}\nexport async function setRagIngestJobStage(db, params) {\n    const metricsValue = params.metrics ? sql `${JSON.stringify(params.metrics)}::jsonb` : sql `metrics`;\n    const providerTraceValue = params.providerTrace\n        ? sql `${JSON.stringify(params.providerTrace)}::jsonb`\n        : sql `provider_trace`;\n    await db.execute(sql `\n        UPDATE rag_ingest_jobs\n        SET\n          status = ${params.status},\n          stage = ${params.stage},\n          metrics = ${metricsValue},\n          provider_trace = ${providerTraceValue},\n          updated_at = NOW()\n        WHERE id = ${params.jobId}\n    `);\n}\nexport async function resetRagIngestJobForRetry(db, params) {\n    await db.execute(sql `\n      WITH updated AS (\n        UPDATE rag_ingest_jobs\n        SET\n          status = 'queued',\n          stage = 'queued',\n          metrics = ${JSON.stringify(params.metrics ?? {})}::jsonb,\n          provider_trace = ${JSON.stringify(params.providerTrace ?? {})}::jsonb,\n          error = NULL,\n          completed_at = NULL,\n          updated_at = NOW()\n        WHERE id = ${params.jobId}\n        RETURNING id\n      ),\n      wake_notified AS (\n        SELECT pg_notify(${GENCOW_APP_WAKE_CHANNEL}, ${RAG_INGEST_WAKE_SIGNAL_PAYLOAD})\n        FROM updated\n      )\n      SELECT updated.id\n      FROM updated\n      LEFT JOIN wake_notified ON TRUE\n    `);\n}\nexport async function finalizeRagIngestJob(db, params) {\n    const providerTraceValue = params.providerTrace\n        ? sql `${JSON.stringify(params.providerTrace)}::jsonb`\n        : sql `provider_trace`;\n    await db.execute(sql `\n        UPDATE rag_ingest_jobs\n        SET\n          status = ${params.status},\n          stage = ${params.status},\n          error = ${params.error ?? null},\n          metrics = ${JSON.stringify(params.metrics ?? {})}::jsonb,\n          provider_trace = ${providerTraceValue},\n          completed_at = NOW(),\n          updated_at = NOW()\n        WHERE id = ${params.jobId}\n    `);\n}\nexport async function persistConvertedRagSource(db, params) {\n    const ownerFilter = params.ownerUserId == null\n        ? sql `owner_user_id IS NULL`\n        : sql `owner_user_id = ${params.ownerUserId}`;\n    const result = await db.execute(sql `\n        UPDATE rag_sources\n        SET\n          convert_provider = ${params.provider},\n          convert_status = 'ready',\n          markdown = ${params.result.markdown},\n          text = ${params.result.text},\n          warnings = ${JSON.stringify(params.result.warnings)}::jsonb,\n          metadata = ${JSON.stringify(params.metadata)}::jsonb,\n          updated_at = NOW()\n        WHERE id = ${params.sourceId}\n          AND corpus = ${params.corpus}\n          AND visibility_scope = ${params.visibility}\n          AND ${ownerFilter}\n        RETURNING id\n    `);\n    if (rowsFromResult(result).length !== 1) {\n        throw new Error(`RAG source not found or out of scope for source \"${params.sourceId}\"`);\n    }\n}\nexport async function upsertRagSectionsAndChunks(db, params) {\n    const run = async (tx) => {\n        const ownerFilter = params.ownerUserId == null\n            ? sql `owner_user_id IS NULL`\n            : sql `owner_user_id = ${params.ownerUserId}`;\n        const sourceRows = rowsFromResult(await tx.execute(sql `\n        SELECT id\n        FROM rag_sources\n        WHERE id = ${params.sourceId}\n          AND corpus = ${params.corpus}\n          AND visibility_scope = ${params.visibility}\n          AND ${ownerFilter}\n        LIMIT 1\n      `));\n        if (sourceRows.length !== 1) {\n            throw new Error(`RAG section/chunk source not found or out of scope for source \"${params.sourceId}\"`);\n        }\n        const existingSectionIds = new Set(rowsFromResult(await tx.execute(sql `SELECT id FROM rag_sections WHERE source_id = ${params.sourceId}`)).map((row) => row.id));\n        const existingChunkIds = new Set(rowsFromResult(await tx.execute(sql `SELECT id FROM rag_chunks WHERE source_id = ${params.sourceId}`)).map((row) => row.id));\n        const desiredSectionIds = new Set(params.sections.map((section) => section.id));\n        const desiredChunkIds = new Set(params.chunks.map((chunk) => chunk.id));\n        for (let index = 0; index < params.sections.length; index += 1) {\n            const section = params.sections[index];\n            const result = await tx.execute(sql `\n            INSERT INTO rag_sections (\n              id,\n              corpus,\n              visibility_scope,\n              owner_user_id,\n              source_id,\n              section_index,\n              section_path,\n              title,\n              depth,\n              page_start,\n              page_end,\n              char_start,\n              char_end\n            )\n            VALUES (\n              ${section.id},\n              ${params.corpus},\n              ${params.visibility},\n              ${params.ownerUserId},\n              ${params.sourceId},\n              ${index},\n              ${JSON.stringify(section.path)}::jsonb,\n              ${section.title ?? null},\n              ${section.depth},\n              ${section.pageStart ?? null},\n              ${section.pageEnd ?? null},\n              ${section.charStart},\n              ${section.charEnd}\n            )\n            ON CONFLICT (id)\n            DO UPDATE SET\n              corpus = EXCLUDED.corpus,\n              visibility_scope = EXCLUDED.visibility_scope,\n              owner_user_id = EXCLUDED.owner_user_id,\n              section_index = EXCLUDED.section_index,\n              section_path = EXCLUDED.section_path,\n              title = EXCLUDED.title,\n              depth = EXCLUDED.depth,\n              page_start = EXCLUDED.page_start,\n              page_end = EXCLUDED.page_end,\n              char_start = EXCLUDED.char_start,\n              char_end = EXCLUDED.char_end,\n              updated_at = NOW()\n            WHERE rag_sections.source_id = EXCLUDED.source_id\n            RETURNING id\n        `);\n            if (rowsFromResult(result).length !== 1) {\n                throw new Error(`RAG section id collision outside source scope for section \"${section.id}\"`);\n            }\n        }\n        for (const chunk of params.chunks) {\n            const result = await tx.execute(sql `\n            INSERT INTO rag_chunks (\n              id,\n              corpus,\n              visibility_scope,\n              owner_user_id,\n              source_id,\n              section_id,\n              chunk_index,\n              chunk_text,\n              lexical_text,\n              embedding,\n              page_start,\n              page_end,\n              chunk_checksum,\n              metadata\n            )\n            VALUES (\n              ${chunk.id},\n              ${params.corpus},\n              ${params.visibility},\n              ${params.ownerUserId},\n              ${params.sourceId},\n              ${chunk.sectionId},\n              ${chunk.chunkIndex},\n              ${chunk.chunkText},\n              ${chunk.lexicalText},\n              ${chunk.embedding == null ? null : sql `${JSON.stringify(chunk.embedding)}::vector`},\n              ${chunk.pageStart},\n              ${chunk.pageEnd},\n              ${chunk.chunkChecksum},\n              ${JSON.stringify(chunk.metadata)}::jsonb\n            )\n            ON CONFLICT (id)\n            DO UPDATE SET\n              corpus = EXCLUDED.corpus,\n              visibility_scope = EXCLUDED.visibility_scope,\n              owner_user_id = EXCLUDED.owner_user_id,\n              section_id = EXCLUDED.section_id,\n              chunk_index = EXCLUDED.chunk_index,\n              chunk_text = EXCLUDED.chunk_text,\n              lexical_text = EXCLUDED.lexical_text,\n              embedding = CASE\n                WHEN rag_chunks.chunk_checksum = EXCLUDED.chunk_checksum\n                  AND EXCLUDED.embedding IS NULL\n                THEN rag_chunks.embedding\n                ELSE EXCLUDED.embedding\n              END,\n              page_start = EXCLUDED.page_start,\n              page_end = EXCLUDED.page_end,\n              chunk_checksum = EXCLUDED.chunk_checksum,\n              metadata = EXCLUDED.metadata,\n              updated_at = NOW()\n            WHERE rag_chunks.source_id = EXCLUDED.source_id\n            RETURNING id\n        `);\n            if (rowsFromResult(result).length !== 1) {\n                throw new Error(`RAG chunk id collision outside source scope for chunk \"${chunk.id}\"`);\n            }\n        }\n        for (const chunkId of existingChunkIds) {\n            if (desiredChunkIds.has(chunkId))\n                continue;\n            await tx.execute(sql `\n        DELETE FROM rag_chunks\n        WHERE id = ${chunkId}\n          AND source_id = ${params.sourceId}\n      `);\n        }\n        for (const sectionId of existingSectionIds) {\n            if (desiredSectionIds.has(sectionId))\n                continue;\n            await tx.execute(sql `\n        DELETE FROM rag_sections\n        WHERE id = ${sectionId}\n          AND source_id = ${params.sourceId}\n      `);\n        }\n    };\n    if (typeof db.transaction === \"function\") {\n        await db.transaction(run);\n        return;\n    }\n    await run(db);\n}\nexport async function markRagSourceFailed(db, params) {\n    await db.execute(sql `\n        UPDATE rag_sources\n        SET\n          convert_provider = ${params.provider},\n          convert_status = 'failed',\n          warnings = ${JSON.stringify([params.error])}::jsonb,\n          updated_at = NOW()\n        WHERE id = ${params.sourceId}\n    `);\n}\nexport async function loadAccessibleRagIngestJob(db, params) {\n    const result = await db.execute(sql `\n        SELECT\n          j.*,\n          w.status AS workflow_status,\n          w.error AS workflow_error\n        FROM rag_ingest_jobs j\n        LEFT JOIN _gencow_workflows w ON w.id = j.workflow_id\n        WHERE j.id = ${params.jobId}\n        LIMIT 1\n    `);\n    const row = rowsFromResult(result)[0] ?? null;\n    if (!row || !matchesOwner(params.viewerUserId, row.owner_user_id)) {\n        return null;\n    }\n    return mapJobRow(row);\n}\nexport async function listAccessibleRagIngestJobs(db, params) {\n    const statusFilter = params.status ? sql `AND j.status = ${params.status}` : sql ``;\n    const corpusFilter = params.corpus ? sql `AND j.corpus = ${params.corpus}` : sql ``;\n    const result = await db.execute(sql `\n        SELECT\n          j.*,\n          w.status AS workflow_status,\n          w.error AS workflow_error\n        FROM rag_ingest_jobs j\n        LEFT JOIN _gencow_workflows w ON w.id = j.workflow_id\n        WHERE (j.owner_user_id IS NULL OR j.owner_user_id = ${params.viewerUserId})\n          ${statusFilter}\n          ${corpusFilter}\n        ORDER BY j.started_at DESC\n        LIMIT ${params.limit}\n    `);\n    return rowsFromResult(result).map(mapJobRow);\n}\n", "import { createGencowProcedureBuilders } from \"@gencow/core\";\nimport { loadAccessibleRagCorpusPolicy, parsePrivateExternalCorpusAllowlist, resolveAllowExternalProvidersPolicy, } from \"./rag-corpus-policy.js\";\nimport { upsertRagCorpus } from \"./rag-ingest-jobs.js\";\nimport { RAG_BUILTIN_OPERATION_NAMES, ragBuiltinInputSchemas, ragBuiltinOutputSchemas, } from \"./builtins/rag/schemas.js\";\nconst SUPPORTED_VISIBILITIES = new Set([\"private\", \"shared\", \"public\"]);\nconst procedure = createGencowProcedureBuilders();\nfunction normalizeVisibility(value) {\n    if (!SUPPORTED_VISIBILITIES.has(value)) {\n        throw new Error(`Unsupported visibility \"${value}\"`);\n    }\n    return value;\n}\nfunction normalizeMetadata(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n        return {};\n    }\n    return value;\n}\nfunction resolveOwnerUserId(input) {\n    if (input.visibility !== \"private\") {\n        return input.ownerUserId?.trim() || null;\n    }\n    const requestedOwner = input.ownerUserId?.trim();\n    if (requestedOwner && requestedOwner !== input.viewerUserId) {\n        throw new Error(\"ownerUserId must match the authenticated user for private corpus policy\");\n    }\n    return requestedOwner ?? input.viewerUserId;\n}\nfunction mapCorpusPolicy(row) {\n    return {\n        corpus: row.corpus,\n        visibility: row.visibility_scope,\n        ownerUserId: row.owner_user_id,\n        allowExternalProviders: !!row.allow_external_providers,\n        metadata: normalizeMetadata(row.metadata),\n    };\n}\nexport const ragCorporaProcedures = {\n    get: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragCorporaGet)\n        .input(ragBuiltinInputSchemas.ragCorporaGet)\n        .output(ragBuiltinOutputSchemas.ragCorporaGet)\n        .handler(async ({ context: ctx, input: rawArgs }) => {\n        const viewer = ctx.auth.requireAuth();\n        const visibility = normalizeVisibility(rawArgs.visibility);\n        const ownerUserId = resolveOwnerUserId({\n            visibility,\n            ownerUserId: rawArgs.ownerUserId?.trim() || undefined,\n            viewerUserId: viewer.id,\n        });\n        const row = await loadAccessibleRagCorpusPolicy(ctx.unsafeDb, {\n            corpus: rawArgs.corpus.trim(),\n            visibility,\n            ownerUserId,\n            viewerUserId: viewer.id,\n        });\n        if (row) {\n            return {\n                ...mapCorpusPolicy(row),\n                exists: true,\n            };\n        }\n        return {\n            corpus: rawArgs.corpus.trim(),\n            visibility,\n            ownerUserId,\n            allowExternalProviders: await resolveAllowExternalProvidersPolicy({\n                db: ctx.unsafeDb,\n                corpus: rawArgs.corpus.trim(),\n                visibility,\n                ownerUserId,\n                allowPrivateExternalCorpora: parsePrivateExternalCorpusAllowlist(process.env.GENCOW_DOCUMENT_EXTERNAL_PRIVATE_CORPORA),\n            }),\n            metadata: {},\n            exists: false,\n        };\n    }),\n    setPolicy: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragCorporaSetPolicy)\n        .input(ragBuiltinInputSchemas.ragCorporaSetPolicy)\n        .output(ragBuiltinOutputSchemas.ragCorporaSetPolicy)\n        .handler(async ({ context: ctx, input: rawArgs }) => {\n        const viewer = ctx.auth.requireAuth();\n        const visibility = normalizeVisibility(rawArgs.visibility);\n        const ownerUserId = resolveOwnerUserId({\n            visibility,\n            ownerUserId: rawArgs.ownerUserId?.trim() || undefined,\n            viewerUserId: viewer.id,\n        });\n        const metadata = normalizeMetadata(rawArgs.metadata);\n        await upsertRagCorpus(ctx.unsafeDb, {\n            corpus: rawArgs.corpus.trim(),\n            visibility,\n            ownerUserId,\n            allowExternalProviders: rawArgs.allowExternalProviders,\n            metadata,\n        });\n        return {\n            corpus: rawArgs.corpus.trim(),\n            visibility,\n            ownerUserId,\n            allowExternalProviders: rawArgs.allowExternalProviders,\n            metadata,\n            exists: true,\n        };\n    }),\n};\nexport function registerRagCorporaRuntime() { }\n", "import { v } from \"@gencow/core\";\nexport const RAG_BUILTIN_OPERATION_NAMES = {\n    documentsIngestStart: \"documents.ingest.start\",\n    documentsIngestReindex: \"documents.ingest.reindex\",\n    ragIngestJobsGet: \"rag_ingest_jobs.get\",\n    ragIngestJobsList: \"rag_ingest_jobs.list\",\n    ragIngestJobsCancel: \"rag_ingest_jobs.cancel\",\n    ragIngestJobsRetry: \"rag_ingest_jobs.retry\",\n    ragIngestJobsResume: \"rag_ingest_jobs.resume\",\n    ragCorporaGet: \"rag_corpora.get\",\n    ragCorporaSetPolicy: \"rag_corpora.setPolicy\",\n    ragOperationsSummary: \"rag_operations.summary\",\n    ragOperationsMetrics: \"rag_operations.metrics\",\n    ragEvaluationsRun: \"rag_evaluations.run\",\n    ragReindexPlan: \"rag_reindex.plan\",\n};\nexport const ragBuiltinInputSchemas = {\n    documentsIngestStart: v.object({\n        storageId: v.string(),\n        corpus: v.string(),\n        visibility: v.string(),\n        ownerUserId: v.optional(v.string()),\n        sourceKey: v.optional(v.string()),\n        metadata: v.optional(v.any()),\n        reindexMode: v.optional(v.string()),\n        mode: v.optional(v.string()),\n        provider: v.optional(v.string()),\n    }),\n    documentsIngestReindex: v.object({\n        sourceId: v.string(),\n        mode: v.optional(v.string()),\n        provider: v.optional(v.string()),\n    }),\n    ragIngestJobsGet: v.object({ id: v.string() }),\n    ragIngestJobsList: v.object({\n        limit: v.optional(v.number()),\n        status: v.optional(v.string()),\n        corpus: v.optional(v.string()),\n    }),\n    ragIngestJobsById: v.object({ id: v.string() }),\n    ragCorporaGet: v.object({\n        corpus: v.string(),\n        visibility: v.string(),\n        ownerUserId: v.optional(v.string()),\n    }),\n    ragCorporaSetPolicy: v.object({\n        corpus: v.string(),\n        visibility: v.string(),\n        ownerUserId: v.optional(v.string()),\n        allowExternalProviders: v.boolean(),\n        metadata: v.optional(v.any()),\n    }),\n    ragOperationsSummary: v.object({ corpus: v.optional(v.string()) }),\n    ragOperationsMetrics: v.object({\n        corpus: v.optional(v.string()),\n        operation: v.optional(v.string()),\n        limit: v.optional(v.number()),\n    }),\n    ragEvaluationsRun: v.object({ fixtures: v.array(v.any()) }),\n    ragReindexPlan: v.object({\n        corpus: v.string(),\n        visibility: v.string(),\n        mode: v.string(),\n        reason: v.string(),\n        sourceIds: v.optional(v.array(v.string())),\n        confirmFullRebuild: v.optional(v.boolean()),\n    }),\n};\nconst ragIngestStartOutput = v.object({\n    workflowId: v.string(),\n    jobId: v.string(),\n    sourceId: v.string(),\n    status: v.string(),\n});\nconst ragIngestJobOutput = v.object({\n    id: v.string(),\n    workflowId: v.string(),\n    sourceId: v.string(),\n    corpus: v.string(),\n    visibility: v.string(),\n    ownerUserId: v.nullable(v.string()),\n    status: v.string(),\n    stage: v.string(),\n    providerTrace: v.any(),\n    metrics: v.any(),\n    error: v.nullable(v.string()),\n    startedAt: v.string(),\n    completedAt: v.nullable(v.string()),\n});\nconst ragJobActionOutput = v.object({\n    ok: v.boolean(),\n    workflowId: v.nullable(v.string()),\n});\nconst ragJobScheduleActionOutput = v.object({\n    ok: v.boolean(),\n    workflowId: v.nullable(v.string()),\n    scheduledJobId: v.nullable(v.string()),\n    action: v.nullable(v.string()),\n});\nconst ragCorpusPolicyOutput = v.object({\n    corpus: v.string(),\n    visibility: v.string(),\n    ownerUserId: v.nullable(v.string()),\n    allowExternalProviders: v.boolean(),\n    metadata: v.any(),\n    exists: v.boolean(),\n});\nconst ragLatestJobOutput = v.object({\n    id: v.string(),\n    status: v.string(),\n    stage: v.string(),\n    updatedAt: v.string(),\n});\nconst ragOperationsSummaryOutput = v.object({\n    corpus: v.string(),\n    visibility: v.string(),\n    ownerUserId: v.nullable(v.string()),\n    sourceCount: v.number(),\n    sectionCount: v.number(),\n    chunkCount: v.number(),\n    jobCounts: v.any(),\n    latestJob: v.nullable(ragLatestJobOutput),\n    recentMetricCounts: v.any(),\n    averageLatencyMs: v.nullable(v.number()),\n    indexHealth: v.string(),\n});\nconst ragOperationMetricOutput = v.object({\n    id: v.string(),\n    appId: v.string(),\n    corpus: v.string(),\n    visibility: v.string(),\n    ownerUserId: v.nullable(v.string()),\n    operation: v.string(),\n    jobId: v.nullable(v.string()),\n    workflowId: v.nullable(v.string()),\n    sourceId: v.nullable(v.string()),\n    metricName: v.string(),\n    metricValue: v.number(),\n    unit: v.nullable(v.string()),\n    metadata: v.any(),\n    recordedAt: v.string(),\n});\nconst ragEvaluationClaimStatusOutput = v.object({\n    claim: v.string(),\n    expected: v.string(),\n    actual: v.nullable(v.string()),\n});\nconst ragEvaluationFixtureResultOutput = v.object({\n    name: v.string(),\n    ok: v.boolean(),\n    failures: v.array(v.string()),\n    matchedSourceIds: v.array(v.string()),\n    citationCount: v.number(),\n    claimStatuses: v.array(ragEvaluationClaimStatusOutput),\n});\nconst ragEvaluationRunOutput = v.object({\n    ok: v.boolean(),\n    total: v.number(),\n    passed: v.number(),\n    failed: v.number(),\n    results: v.array(ragEvaluationFixtureResultOutput),\n});\nconst ragReindexPlanOutput = v.object({\n    corpus: v.string(),\n    visibility: v.string(),\n    ownerUserId: v.nullable(v.string()),\n    mode: v.string(),\n    reason: v.string(),\n    sourceIds: v.array(v.string()),\n    sourceCount: v.number(),\n    estimatedChunkCount: v.number(),\n    requiresConfirmation: v.boolean(),\n});\nexport const ragBuiltinOutputSchemas = {\n    documentsIngestStart: ragIngestStartOutput,\n    documentsIngestReindex: ragIngestStartOutput,\n    ragIngestJobsGet: v.nullable(ragIngestJobOutput),\n    ragIngestJobsList: v.array(ragIngestJobOutput),\n    ragIngestJobsCancel: ragJobActionOutput,\n    ragIngestJobsRetry: ragJobScheduleActionOutput,\n    ragIngestJobsResume: ragJobScheduleActionOutput,\n    ragCorporaGet: ragCorpusPolicyOutput,\n    ragCorporaSetPolicy: ragCorpusPolicyOutput,\n    ragOperationsSummary: v.array(ragOperationsSummaryOutput),\n    ragOperationsMetrics: v.array(ragOperationMetricOutput),\n    ragEvaluationsRun: ragEvaluationRunOutput,\n    ragReindexPlan: ragReindexPlanOutput,\n};\n", "import { createGencowProcedureBuilders } from \"@gencow/core\";\nimport { sql } from \"drizzle-orm\";\nimport { RAG_BUILTIN_OPERATION_NAMES, ragBuiltinInputSchemas, ragBuiltinOutputSchemas, } from \"./builtins/rag/schemas.js\";\nimport { emitRagOperationMetric, mapRagMetricRow, rowsFromMetricResult, } from \"./rag-operations-metrics.js\";\nconst REINDEX_MODES = new Set([\n    \"source-changed\",\n    \"section-changed\",\n    \"corpus-policy-changed\",\n    \"full-rebuild\",\n]);\nconst procedure = createGencowProcedureBuilders();\nfunction toNumber(value) {\n    const numeric = Number(value ?? 0);\n    return Number.isFinite(numeric) ? numeric : 0;\n}\nfunction toIsoString(value) {\n    return value instanceof Date ? value.toISOString() : String(value);\n}\nfunction normalizeVisibility(value) {\n    if (value === \"private\" || value === \"shared\" || value === \"public\")\n        return value;\n    throw new Error(`Unsupported visibility: ${value}`);\n}\nfunction normalizeOperation(value) {\n    if (!value)\n        return undefined;\n    if ([\"ingest\", \"retrieve\", \"answer\", \"reindex\", \"evaluate\"].includes(value)) {\n        return value;\n    }\n    throw new Error(`Unsupported RAG operation: ${value}`);\n}\nfunction normalizeReindexMode(value) {\n    if (REINDEX_MODES.has(value))\n        return value;\n    throw new Error(`Unsupported reindex mode: ${value}`);\n}\nfunction scopeFilter(scope) {\n    const ownerFilter = scope.ownerUserId == null ? sql `owner_user_id IS NULL` : sql `owner_user_id = ${scope.ownerUserId}`;\n    return sql `corpus = ${scope.corpus} AND visibility_scope = ${scope.visibility} AND ${ownerFilter}`;\n}\nfunction indexHealth(row, jobCounts) {\n    if (jobCounts.failed > 0)\n        return \"failed\";\n    if (toNumber(row.source_count) === 0 || toNumber(row.chunk_count) === 0)\n        return \"empty\";\n    if ((jobCounts.queued ?? 0) > 0 || (jobCounts.converting ?? 0) > 0 || (jobCounts.embedding ?? 0) > 0) {\n        return \"degraded\";\n    }\n    return \"ready\";\n}\nfunction normalizeFixture(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n        throw new Error(\"evaluation fixture must be an object\");\n    }\n    const raw = value;\n    const scope = raw.scope;\n    if (!scope || typeof scope !== \"object\")\n        throw new Error(\"evaluation fixture scope is required\");\n    const fixture = {\n        name: String(raw.name ?? \"\").trim(),\n        query: String(raw.query ?? \"\").trim(),\n        scope: {\n            corpus: String(scope.corpus ?? \"\").trim(),\n            visibility: normalizeVisibility(String(scope.visibility ?? \"\")),\n            ...(typeof scope.ownerUserId === \"string\" && scope.ownerUserId.trim()\n                ? { ownerUserId: scope.ownerUserId.trim() }\n                : {}),\n        },\n        expectedSourceIds: Array.isArray(raw.expectedSourceIds)\n            ? raw.expectedSourceIds.filter((item) => typeof item === \"string\" && item.length > 0)\n            : undefined,\n        expectedCitationCountMin: typeof raw.expectedCitationCountMin === \"number\"\n            ? Math.max(0, raw.expectedCitationCountMin)\n            : undefined,\n        expectedClaims: Array.isArray(raw.expectedClaims)\n            ? raw.expectedClaims.map((claim) => {\n                const item = claim;\n                return {\n                    claim: String(item.claim ?? \"\").trim(),\n                    verdict: item.verdict === \"partial\" || item.verdict === \"unsupported\" ? item.verdict : \"supported\",\n                };\n            })\n            : undefined,\n    };\n    if (!fixture.name)\n        throw new Error(\"evaluation fixture name is required\");\n    if (!fixture.query)\n        throw new Error(`evaluation fixture ${fixture.name} query is required`);\n    if (!fixture.scope.corpus)\n        throw new Error(`evaluation fixture ${fixture.name} scope.corpus is required`);\n    return fixture;\n}\nfunction expectedStatus(verdict) {\n    if (verdict === \"partial\")\n        return \"partially_supported\";\n    if (verdict === \"unsupported\")\n        return \"insufficient_evidence\";\n    return \"supported\";\n}\nasync function mapSummary(db, row) {\n    const scope = {\n        corpus: row.corpus,\n        visibility: row.visibility_scope,\n        ownerUserId: row.owner_user_id,\n    };\n    const [jobCounts, metricCounts, latestJobs, latencyRows] = await Promise.all([\n        db.execute(sql `\n      SELECT status, COUNT(*) AS count\n      FROM rag_ingest_jobs\n      WHERE ${scopeFilter(scope)}\n      GROUP BY status\n    `),\n        db.execute(sql `\n      SELECT operation, COUNT(*) AS count\n      FROM rag_operation_metrics\n      WHERE ${scopeFilter(scope)}\n      GROUP BY operation\n    `),\n        db.execute(sql `\n      SELECT id, status, stage, updated_at\n      FROM rag_ingest_jobs\n      WHERE ${scopeFilter(scope)}\n      ORDER BY updated_at DESC\n      LIMIT 1\n    `),\n        db.execute(sql `\n      SELECT AVG(metric_value) AS avg_latency_ms\n      FROM rag_operation_metrics\n      WHERE ${scopeFilter(scope)}\n        AND metric_name = 'latency_ms'\n    `),\n    ]);\n    const jobs = Object.fromEntries(rowsFromMetricResult(jobCounts).map((item) => [item.status, toNumber(item.count)]));\n    const metrics = Object.fromEntries(rowsFromMetricResult(metricCounts).map((item) => [item.operation, toNumber(item.count)]));\n    const latest = rowsFromMetricResult(latestJobs)[0] ?? null;\n    const latency = rowsFromMetricResult(latencyRows)[0]?.avg_latency_ms ?? null;\n    return {\n        corpus: row.corpus,\n        visibility: row.visibility_scope,\n        ownerUserId: row.owner_user_id,\n        sourceCount: toNumber(row.source_count),\n        sectionCount: toNumber(row.section_count),\n        chunkCount: toNumber(row.chunk_count),\n        jobCounts: jobs,\n        latestJob: latest\n            ? {\n                id: latest.id,\n                status: latest.status,\n                stage: latest.stage,\n                updatedAt: toIsoString(latest.updated_at),\n            }\n            : null,\n        recentMetricCounts: metrics,\n        averageLatencyMs: latency == null ? null : toNumber(latency),\n        indexHealth: indexHealth(row, jobs),\n    };\n}\nasync function listSummaries(ctx, corpus) {\n    const viewer = ctx.auth.requireAuth();\n    const corpusFilter = corpus?.trim() ? sql `AND c.corpus = ${corpus.trim()}` : sql ``;\n    const result = await ctx.unsafeDb.execute(sql `\n    SELECT\n      c.corpus,\n      c.visibility_scope,\n      c.owner_user_id,\n      COUNT(DISTINCT s.id) AS source_count,\n      COUNT(DISTINCT sec.id) AS section_count,\n      COUNT(DISTINCT ch.id) AS chunk_count\n    FROM rag_corpora c\n    LEFT JOIN rag_sources s ON s.corpus = c.corpus\n      AND s.visibility_scope = c.visibility_scope\n      AND COALESCE(s.owner_user_id, '') = COALESCE(c.owner_user_id, '')\n    LEFT JOIN rag_sections sec ON sec.corpus = c.corpus\n      AND sec.visibility_scope = c.visibility_scope\n      AND COALESCE(sec.owner_user_id, '') = COALESCE(c.owner_user_id, '')\n    LEFT JOIN rag_chunks ch ON ch.corpus = c.corpus\n      AND ch.visibility_scope = c.visibility_scope\n      AND COALESCE(ch.owner_user_id, '') = COALESCE(c.owner_user_id, '')\n    WHERE (c.owner_user_id IS NULL OR c.owner_user_id = ${viewer.id})\n      ${corpusFilter}\n    GROUP BY c.corpus, c.visibility_scope, c.owner_user_id, c.updated_at\n    ORDER BY c.updated_at DESC\n  `);\n    return Promise.all(rowsFromMetricResult(result).map((row) => mapSummary(ctx.unsafeDb, row)));\n}\nasync function runEvaluation(ctx, rawFixtures) {\n    if (!ctx.grounding)\n        throw new Error(\"ctx.grounding is required for RAG evaluation\");\n    const fixtures = rawFixtures.map(normalizeFixture);\n    const results = [];\n    const metricBuckets = new Map();\n    for (const fixture of fixtures) {\n        const failures = [];\n        const search = await ctx.search(\"rag_chunks\", fixture.query, {\n            fields: [\"chunk_text\", \"lexical_text\"],\n            scope: fixture.scope,\n            limit: 20,\n        });\n        const matchedSourceIds = [\n            ...new Set(search.items.map((item) => String(item.row.source_id ?? \"\")).filter(Boolean)),\n        ];\n        for (const expectedSourceId of fixture.expectedSourceIds ?? []) {\n            if (!matchedSourceIds.includes(expectedSourceId))\n                failures.push(`missing source ${expectedSourceId}`);\n        }\n        const expectedClaims = fixture.expectedClaims ?? [];\n        const answerNeeded = expectedClaims.length > 0 || fixture.expectedCitationCountMin !== undefined;\n        const answer = answerNeeded\n            ? await ctx.grounding.answer({\n                question: fixture.query,\n                scope: fixture.scope,\n                claims: expectedClaims.length > 0\n                    ? expectedClaims.map((claim) => ({ claimText: claim.claim }))\n                    : undefined,\n            })\n            : null;\n        const citationCount = answer?.citations.length ?? search.items.length;\n        if (fixture.expectedCitationCountMin !== undefined && citationCount < fixture.expectedCitationCountMin) {\n            failures.push(`citation count ${citationCount} < ${fixture.expectedCitationCountMin}`);\n        }\n        const claimStatuses = expectedClaims.map((claim, index) => {\n            const actual = answer?.claims[index]?.status ?? null;\n            const expected = expectedStatus(claim.verdict);\n            if (actual !== expected)\n                failures.push(`claim \"${claim.claim}\" expected ${expected}, got ${actual}`);\n            return { claim: claim.claim, expected: claim.verdict, actual };\n        });\n        const ok = failures.length === 0;\n        const key = `${fixture.scope.corpus}:${fixture.scope.visibility}:${fixture.scope.ownerUserId ?? \"\"}`;\n        const bucket = metricBuckets.get(key) ?? { scope: fixture.scope, passed: 0, failed: 0 };\n        if (ok)\n            bucket.passed += 1;\n        else\n            bucket.failed += 1;\n        metricBuckets.set(key, bucket);\n        results.push({ name: fixture.name, ok, failures, matchedSourceIds, citationCount, claimStatuses });\n    }\n    const passed = results.filter((result) => result.ok).length;\n    await Promise.all([...metricBuckets.values()].map((bucket) => emitRagEvaluationMetrics(ctx.unsafeDb, bucket.scope, bucket.passed, bucket.failed)));\n    return {\n        ok: passed === results.length,\n        total: results.length,\n        passed,\n        failed: results.length - passed,\n        results,\n    };\n}\nasync function emitRagEvaluationMetrics(db, scope, passed, failed) {\n    const base = { corpus: scope.corpus, visibility: scope.visibility, ownerUserId: scope.ownerUserId ?? null };\n    await emitRagOperationMetric(db, {\n        ...base,\n        operation: \"evaluate\",\n        metricName: \"fixture_pass_count\",\n        metricValue: passed,\n        unit: \"count\",\n    });\n    await emitRagOperationMetric(db, {\n        ...base,\n        operation: \"evaluate\",\n        metricName: \"fixture_fail_count\",\n        metricValue: failed,\n        unit: \"count\",\n    });\n}\nasync function planReindex(ctx, args) {\n    const viewer = ctx.auth.requireAuth();\n    const visibility = normalizeVisibility(args.visibility);\n    const mode = normalizeReindexMode(args.mode);\n    if (mode === \"full-rebuild\" && args.confirmFullRebuild !== true) {\n        throw new Error(\"full-rebuild requires confirmFullRebuild=true\");\n    }\n    if ((mode === \"source-changed\" || mode === \"section-changed\") &&\n        (!args.sourceIds || args.sourceIds.length === 0)) {\n        throw new Error(`${mode} requires sourceIds`);\n    }\n    const ownerUserId = visibility === \"private\" ? viewer.id : null;\n    const sourceFilter = args.sourceIds?.length\n        ? sql `AND s.id IN (${joinSql(args.sourceIds.map((id) => sql `${id}`), \", \")})`\n        : sql ``;\n    const result = await ctx.unsafeDb.execute(sql `\n    SELECT s.id, COUNT(ch.id) AS chunk_count\n    FROM rag_sources s\n    LEFT JOIN rag_chunks ch ON ch.source_id = s.id\n    WHERE s.corpus = ${args.corpus}\n      AND s.visibility_scope = ${visibility}\n      AND ${ownerUserId == null ? sql `s.owner_user_id IS NULL` : sql `s.owner_user_id = ${ownerUserId}`}\n      ${sourceFilter}\n    GROUP BY s.id\n    ORDER BY s.id\n  `);\n    const rows = rowsFromMetricResult(result);\n    return {\n        corpus: args.corpus,\n        visibility,\n        ownerUserId,\n        mode,\n        reason: args.reason,\n        sourceIds: rows.map((row) => row.id),\n        sourceCount: rows.length,\n        estimatedChunkCount: rows.reduce((sum, row) => sum + toNumber(row.chunk_count), 0),\n        requiresConfirmation: mode === \"full-rebuild\",\n    };\n}\nfunction joinSql(chunks, separator) {\n    if (chunks.length === 0)\n        return sql `true`;\n    let current = chunks[0];\n    for (const chunk of chunks.slice(1))\n        current = sql `${current}${sql.raw(separator)}${chunk}`;\n    return current;\n}\nexport const ragOperationsProcedures = {\n    summary: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragOperationsSummary)\n        .input(ragBuiltinInputSchemas.ragOperationsSummary)\n        .output(ragBuiltinOutputSchemas.ragOperationsSummary)\n        .handler(async ({ context: ctx, input: args }) => listSummaries(ctx, args.corpus)),\n    metrics: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragOperationsMetrics)\n        .input(ragBuiltinInputSchemas.ragOperationsMetrics)\n        .output(ragBuiltinOutputSchemas.ragOperationsMetrics)\n        .handler(async ({ context: ctx, input: args }) => {\n        const viewer = ctx.auth.requireAuth();\n        const corpusFilter = args.corpus?.trim() ? sql `AND corpus = ${args.corpus.trim()}` : sql ``;\n        const operation = normalizeOperation(args.operation);\n        const operationFilter = operation ? sql `AND operation = ${operation}` : sql ``;\n        const limit = Math.max(1, Math.min(args.limit ?? 50, 200));\n        const result = await ctx.unsafeDb.execute(sql `\n        SELECT *\n        FROM rag_operation_metrics\n        WHERE (owner_user_id IS NULL OR owner_user_id = ${viewer.id})\n          ${corpusFilter}\n          ${operationFilter}\n        ORDER BY recorded_at DESC\n        LIMIT ${limit}\n      `);\n        return rowsFromMetricResult(result).map(mapRagMetricRow);\n    }),\n    evaluate: procedure.mutation\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragEvaluationsRun)\n        .input(ragBuiltinInputSchemas.ragEvaluationsRun)\n        .output(ragBuiltinOutputSchemas.ragEvaluationsRun)\n        .handler(async ({ context: ctx, input: args }) => runEvaluation(ctx, args.fixtures)),\n    reindexPlan: procedure.query\n        .name(RAG_BUILTIN_OPERATION_NAMES.ragReindexPlan)\n        .input(ragBuiltinInputSchemas.ragReindexPlan)\n        .output(ragBuiltinOutputSchemas.ragReindexPlan)\n        .handler(async ({ context: ctx, input: args }) => planReindex(ctx, args)),\n};\nexport function registerRagOperationsRuntime() { }\n", "export function isCloudFeatureEnabled(config, featureId) {\n    const value = config?.cloudFeatures?.[featureId];\n    return value === true || (!!value && typeof value === \"object\" && !Array.isArray(value));\n}\n", "import { ragCorporaProcedures } from \"../../rag-corpora-runtime.js\";\nimport { ragIngestProcedures } from \"../../rag-ingest-runtime.js\";\nimport { ragOperationsProcedures } from \"../../rag-operations-runtime.js\";\nexport const ragBuiltinProcedures = {\n    ...ragIngestProcedures,\n    ...ragCorporaProcedures,\n    ...ragOperationsProcedures,\n};\nexport function collectRagBuiltinProcedureMaps() {\n    const queryProcedureMap = new Map();\n    const mutationProcedureMap = new Map();\n    for (const proc of Object.values(ragBuiltinProcedures)) {\n        if (proc.kind === \"query\") {\n            queryProcedureMap.set(proc.name, proc);\n        }\n        else {\n            mutationProcedureMap.set(proc.name, proc);\n        }\n    }\n    return { queryProcedureMap, mutationProcedureMap };\n}\n", "import { isCloudFeatureEnabled } from \"../cloud-features.js\";\nimport { collectRagBuiltinProcedureMaps } from \"./rag/procedures.js\";\nexport function collectBuiltinProcedureMaps(config) {\n    const queryProcedureMap = new Map();\n    const mutationProcedureMap = new Map();\n    if (isCloudFeatureEnabled(config, \"rag\")) {\n        mergeInto({ queryProcedureMap, mutationProcedureMap }, collectRagBuiltinProcedureMaps());\n    }\n    return { queryProcedureMap, mutationProcedureMap };\n}\nfunction mergeInto(target, source) {\n    for (const [name, def] of source.queryProcedureMap)\n        target.queryProcedureMap.set(name, def);\n    for (const [name, def] of source.mutationProcedureMap)\n        target.mutationProcedureMap.set(name, def);\n}\n", "/**\n * Procedure RPC wire codec \u2014 unified `POST /api/query`, `POST /api/mutation`.\n * Consumed by `@gencow/react` hooks and by `@gencow/server` via `@gencow/client/procedure-rpc`.\n * Uses `objectHasOwn` instead of `Object.hasOwn` for ES2020 `tsc` target compatibility.\n */\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ProcedureRpcLinkCodec_instances, _ProcedureRpcLinkCodec_deserializeFormData;\nexport const MAX_RPC_BLOBS = 16;\nconst MAX_RPC_META_ITEMS = 2048;\nconst MAX_RPC_META_PATH_DEPTH = 64;\nconst PROCEDURE_RPC_DATA_FIELD = \"data\";\nconst RPC_BUILT_IN_TYPES = {\n    BIGINT: 0,\n    DATE: 1,\n    NAN: 2,\n    UNDEFINED: 3,\n    URL: 4,\n    REGEXP: 5,\n    SET: 6,\n    MAP: 7,\n};\nfunction objectHasOwn(o, key) {\n    return Object.prototype.hasOwnProperty.call(o, key);\n}\nfunction isRecord(value) {\n    return typeof value === \"object\" && value !== null;\n}\nfunction isRpcSerializedPayload(value) {\n    if (!isRecord(value))\n        return false;\n    if (!objectHasOwn(value, \"json\"))\n        return false;\n    if (!objectHasOwn(value, \"meta\"))\n        return true;\n    return value.meta === undefined || Array.isArray(value.meta);\n}\nfunction formDataToRecord(form) {\n    const record = {};\n    for (const [key, value] of form.entries()) {\n        if (!objectHasOwn(record, key)) {\n            record[key] = value;\n            continue;\n        }\n        const existing = record[key];\n        record[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n    }\n    return record;\n}\nexport class ProcedureRpcDecodeError extends Error {\n    constructor(message) {\n        super(message);\n        this.status = 400;\n        this.code = \"RPC_DECODE_ERROR\";\n        this.name = \"ProcedureRpcDecodeError\";\n    }\n}\nclass ProcedureRpcJsonSerializer {\n    serialize(data, path = [], meta = [], maps = [], blobs = []) {\n        if (typeof FormData !== \"undefined\" && data instanceof FormData) {\n            return this.serialize(formDataToRecord(data), path, meta, maps, blobs);\n        }\n        if (data instanceof Blob) {\n            maps.push(path);\n            blobs.push(data);\n            // Placeholder in JSON tree \u2014 hydrated from indexed multipart parts via `maps`.\n            return [null, meta, maps, blobs];\n        }\n        if (typeof data === \"bigint\") {\n            meta.push([RPC_BUILT_IN_TYPES.BIGINT, ...path]);\n            return [data.toString(), meta, maps, blobs];\n        }\n        if (data instanceof Date) {\n            meta.push([RPC_BUILT_IN_TYPES.DATE, ...path]);\n            return [Number.isNaN(data.getTime()) ? null : data.toISOString(), meta, maps, blobs];\n        }\n        if (Number.isNaN(data)) {\n            meta.push([RPC_BUILT_IN_TYPES.NAN, ...path]);\n            return [null, meta, maps, blobs];\n        }\n        if (data instanceof URL) {\n            meta.push([RPC_BUILT_IN_TYPES.URL, ...path]);\n            return [data.toString(), meta, maps, blobs];\n        }\n        if (data instanceof RegExp) {\n            meta.push([RPC_BUILT_IN_TYPES.REGEXP, ...path]);\n            return [data.toString(), meta, maps, blobs];\n        }\n        if (data instanceof Set) {\n            const result = this.serialize(Array.from(data), path, meta, maps, blobs);\n            meta.push([RPC_BUILT_IN_TYPES.SET, ...path]);\n            return result;\n        }\n        if (data instanceof Map) {\n            const result = this.serialize(Array.from(data.entries()), path, meta, maps, blobs);\n            meta.push([RPC_BUILT_IN_TYPES.MAP, ...path]);\n            return result;\n        }\n        if (Array.isArray(data)) {\n            const json = data.map((item, index) => {\n                if (item === undefined) {\n                    meta.push([RPC_BUILT_IN_TYPES.UNDEFINED, ...path, index]);\n                    return null;\n                }\n                return this.serialize(item, [...path, index], meta, maps, blobs)[0];\n            });\n            return [json, meta, maps, blobs];\n        }\n        if (isRecord(data)) {\n            const json = {};\n            for (const key in data) {\n                if (key === \"toJSON\" && typeof data[key] === \"function\") {\n                    continue;\n                }\n                json[key] = this.serialize(data[key], [...path, key], meta, maps, blobs)[0];\n            }\n            return [json, meta, maps, blobs];\n        }\n        return [data, meta, maps, blobs];\n    }\n    deserialize(json, meta, maps, getBlob) {\n        if (meta.length > MAX_RPC_META_ITEMS) {\n            throw new ProcedureRpcDecodeError(`RPC payload meta exceeds maximum item count (${MAX_RPC_META_ITEMS}).`);\n        }\n        const ref = { data: json };\n        if (maps && getBlob) {\n            if (maps.length > MAX_RPC_BLOBS) {\n                throw new ProcedureRpcDecodeError(`RPC payload exceeds maximum blob count (${MAX_RPC_BLOBS}).`);\n            }\n            maps.forEach((segments, index) => {\n                let currentRef = ref;\n                let prevSegment = \"data\";\n                for (const segment of segments) {\n                    currentRef = currentRef[prevSegment];\n                    prevSegment = segment;\n                    if (!objectHasOwn(currentRef, prevSegment)) {\n                        throw new ProcedureRpcDecodeError(`Invalid RPC payload path during blob deserialization. Path segment: ${String(prevSegment)}`);\n                    }\n                }\n                currentRef[prevSegment] = getBlob(index);\n            });\n        }\n        for (const item of meta) {\n            if (item.length - 1 > MAX_RPC_META_PATH_DEPTH) {\n                throw new ProcedureRpcDecodeError(`RPC payload meta path exceeds maximum depth (${MAX_RPC_META_PATH_DEPTH}).`);\n            }\n            const type = item[0];\n            let currentRef = ref;\n            let prevSegment = \"data\";\n            for (let index = 1; index < item.length; index++) {\n                currentRef = currentRef[prevSegment];\n                prevSegment = item[index];\n                if (!objectHasOwn(currentRef, prevSegment)) {\n                    throw new ProcedureRpcDecodeError(`Invalid RPC payload path during deserialization. Path segment: ${String(prevSegment)}`);\n                }\n            }\n            switch (type) {\n                case RPC_BUILT_IN_TYPES.BIGINT:\n                    currentRef[prevSegment] = BigInt(currentRef[prevSegment]);\n                    break;\n                case RPC_BUILT_IN_TYPES.DATE:\n                    currentRef[prevSegment] = new Date(currentRef[prevSegment] ?? \"Invalid Date\");\n                    break;\n                case RPC_BUILT_IN_TYPES.NAN:\n                    currentRef[prevSegment] = Number.NaN;\n                    break;\n                case RPC_BUILT_IN_TYPES.UNDEFINED:\n                    currentRef[prevSegment] = undefined;\n                    break;\n                case RPC_BUILT_IN_TYPES.URL:\n                    currentRef[prevSegment] = new URL(currentRef[prevSegment]);\n                    break;\n                case RPC_BUILT_IN_TYPES.REGEXP: {\n                    const rawValue = currentRef[prevSegment];\n                    if (typeof rawValue !== \"string\") {\n                        throw new ProcedureRpcDecodeError(\"Invalid RPC payload for RegExp deserialization.\");\n                    }\n                    const match = rawValue.match(/^\\/(.*)\\/([a-z]*)$/);\n                    if (!match) {\n                        throw new ProcedureRpcDecodeError(\"Invalid RPC payload for RegExp deserialization.\");\n                    }\n                    const [, pattern, flags] = match;\n                    currentRef[prevSegment] = new RegExp(pattern, flags);\n                    break;\n                }\n                case RPC_BUILT_IN_TYPES.SET:\n                    currentRef[prevSegment] = new Set(currentRef[prevSegment]);\n                    break;\n                case RPC_BUILT_IN_TYPES.MAP:\n                    currentRef[prevSegment] = new Map(currentRef[prevSegment]);\n                    break;\n            }\n        }\n        return ref.data;\n    }\n}\nexport class ProcedureRpcLinkCodec {\n    constructor(_options = {}) {\n        _ProcedureRpcLinkCodec_instances.add(this);\n        this.serializer = new ProcedureRpcJsonSerializer();\n    }\n    /** Deserialize wire JSON (`{ json, meta }` or plain JSON) to a JavaScript value. */\n    decodeWirePayload(body) {\n        if (body instanceof FormData) {\n            return __classPrivateFieldGet(this, _ProcedureRpcLinkCodec_instances, \"m\", _ProcedureRpcLinkCodec_deserializeFormData).call(this, body);\n        }\n        if (isRpcSerializedPayload(body)) {\n            return this.serializer.deserialize(body.json, body.meta ?? []);\n        }\n        return body;\n    }\n    /** Serialize a value to procedure RPC wire shape (`{ json, meta? }`). */\n    encodeWirePayload(value) {\n        const [json, meta, _maps, _blobs] = this.serializer.serialize(value);\n        return { json, meta: meta.length > 0 ? meta : undefined };\n    }\n    /**\n     * Encode a procedure call for `POST /api/mutation` (procedure multipart when blobs present).\n     * Returns JSON `{ json, meta? }` when no blobs are present, otherwise `multipart/form-data`.\n     */\n    encodeProcedureCall(payload) {\n        const [json, meta, maps, blobs] = this.serializer.serialize(payload);\n        if (blobs.length === 0) {\n            return { json, meta: meta.length > 0 ? meta : undefined };\n        }\n        if (blobs.length > MAX_RPC_BLOBS) {\n            throw new ProcedureRpcDecodeError(`RPC payload exceeds maximum blob count (${MAX_RPC_BLOBS}).`);\n        }\n        const form = new FormData();\n        form.set(PROCEDURE_RPC_DATA_FIELD, JSON.stringify({\n            json,\n            meta: meta.length > 0 ? meta : undefined,\n            maps,\n        }));\n        blobs.forEach((blob, index) => {\n            form.set(String(index), blob);\n        });\n        return form;\n    }\n    /**\n     * Parse an incoming procedure call body (JSON, wire-wrapped JSON, or multipart FormData).\n     */\n    decodeProcedureRpcBody(body) {\n        const decoded = this.decodeWirePayload(body);\n        if (!isRecord(decoded))\n            return { name: undefined, args: undefined };\n        return { name: decoded.name, args: decoded.args };\n    }\n    /** Decode `multipart/form-data` procedure RPC envelope (`data` + indexed blob parts). */\n    decodeProcedureMultipart(form) {\n        return this.decodeProcedureRpcBody(form);\n    }\n}\n_ProcedureRpcLinkCodec_instances = new WeakSet(), _ProcedureRpcLinkCodec_deserializeFormData = function _ProcedureRpcLinkCodec_deserializeFormData(form) {\n    const dataField = form.get(PROCEDURE_RPC_DATA_FIELD);\n    if (dataField === null) {\n        if (form.has(\"_mutation\")) {\n            throw new ProcedureRpcDecodeError('Legacy multipart layout is not supported for procedure RPC. Use the \"data\" field envelope.');\n        }\n        throw new ProcedureRpcDecodeError('Missing required multipart field \"data\".');\n    }\n    if (typeof dataField !== \"string\") {\n        throw new ProcedureRpcDecodeError('Multipart field \"data\" must be a JSON string.');\n    }\n    let parsed;\n    try {\n        parsed = JSON.parse(dataField);\n    }\n    catch {\n        throw new ProcedureRpcDecodeError('Invalid JSON in multipart field \"data\".');\n    }\n    const maps = parsed.maps ?? [];\n    if (!Array.isArray(maps)) {\n        throw new ProcedureRpcDecodeError('Multipart field \"data\" must include a \"maps\" array.');\n    }\n    const allowedKeys = new Set([PROCEDURE_RPC_DATA_FIELD]);\n    for (let index = 0; index < maps.length; index++) {\n        allowedKeys.add(String(index));\n    }\n    for (const key of form.keys()) {\n        if (!allowedKeys.has(key)) {\n            throw new ProcedureRpcDecodeError(`Unexpected multipart field \"${key}\".`);\n        }\n    }\n    for (let index = 0; index < maps.length; index++) {\n        const part = form.get(String(index));\n        if (part === null || !(part instanceof Blob)) {\n            throw new ProcedureRpcDecodeError(`Missing blob part \"${index}\".`);\n        }\n    }\n    return this.serializer.deserialize(parsed.json, parsed.meta ?? [], maps, (index) => form.get(String(index)));\n};\n", "import { ProcedureRpcLinkCodec } from \"./codec.js\";\n/**\n * oRPC-style handler wrapper that composes codec internals behind a single interface.\n * Keeps route handlers focused on auth/dispatch concerns rather than wire-format details.\n */\nexport class ProcedureRpcHandler {\n    constructor(options = {}) {\n        const codec = new ProcedureRpcLinkCodec(options);\n        this.codec = codec;\n    }\n    decodeProcedureRpcBody(body) {\n        return this.codec.decodeProcedureRpcBody(body);\n    }\n    decodeProcedureMultipart(form) {\n        return this.codec.decodeProcedureMultipart(form);\n    }\n    encodeWirePayload(value) {\n        return this.codec.encodeWirePayload(value);\n    }\n    encodeProcedureCall(payload) {\n        return this.codec.encodeProcedureCall(payload);\n    }\n}\n", "const RECYCLED_DB_ERROR_CODES = new Set([\n    \"GENCOW_DB_CONNECTION_CLOSED\",\n    \"GENCOW_DB_CONNECTION_TIMEOUT\",\n    \"GENCOW_DB_OPERATION_TIMEOUT\",\n    \"GENCOW_DB_SOCKET_CLOSED\",\n]);\nconst TRANSIENT_DB_ERROR_CODES = new Set([\n    \"ERR_POSTGRES_IDLE_TIMEOUT\",\n    \"08000\",\n    \"08001\",\n    \"08003\",\n    \"08004\",\n    \"08006\",\n    \"08P01\",\n    \"40001\",\n    \"40P01\",\n    \"53300\",\n    \"55P03\",\n    \"57P01\",\n    \"57P02\",\n    \"57P03\",\n]);\nconst TRANSIENT_DB_MESSAGE_PATTERNS = [\n    \"idle timeout reached\",\n    \"connection terminated\",\n    \"server closed the connection\",\n    \"connection reset\",\n    \"econnreset\",\n    \"etimedout\",\n];\nexport function collectDbRetryErrorSignals(error, signals = [], depth = 0) {\n    if (!error || depth > 4)\n        return signals;\n    if (typeof error === \"string\") {\n        signals.push(error);\n        return signals;\n    }\n    if (typeof error !== \"object\")\n        return signals;\n    const record = error;\n    if (typeof record.code === \"string\")\n        signals.push(record.code);\n    if (typeof record.message === \"string\")\n        signals.push(record.message);\n    if (record.cause)\n        collectDbRetryErrorSignals(record.cause, signals, depth + 1);\n    return signals;\n}\nfunction hasExplicitNonRetryableStatus(error) {\n    if (typeof error !== \"object\" || error === null)\n        return false;\n    const record = error;\n    return typeof record.status === \"number\" || record.code === \"FUNCTION_TIMEOUT\";\n}\nfunction classifyRetryableDbFailure(error) {\n    if (hasExplicitNonRetryableStatus(error))\n        return null;\n    for (const signal of collectDbRetryErrorSignals(error)) {\n        if (RECYCLED_DB_ERROR_CODES.has(signal))\n            return \"stale_connection_recycled\";\n        if (TRANSIENT_DB_ERROR_CODES.has(signal))\n            return \"transient_db_failure\";\n        const lowerSignal = signal.toLowerCase();\n        if (TRANSIENT_DB_MESSAGE_PATTERNS.some((pattern) => lowerSignal.includes(pattern))) {\n            return \"transient_db_failure\";\n        }\n    }\n    return null;\n}\nexport function decideDbOperationRetry(params) {\n    if (params.operationKind !== \"read\") {\n        return { action: \"fail\", reason: \"non_idempotent\" };\n    }\n    if (params.attempt >= params.maxAttempts) {\n        return { action: \"fail\", reason: \"budget_exhausted\" };\n    }\n    const reason = classifyRetryableDbFailure(params.error);\n    return reason ? { action: \"retry\", reason } : { action: \"fail\", reason: \"unknown\" };\n}\nexport function describeDbRetryFailure(error) {\n    const signals = collectDbRetryErrorSignals(error);\n    return (signals.find((signal) => RECYCLED_DB_ERROR_CODES.has(signal) || TRANSIENT_DB_ERROR_CODES.has(signal)) ??\n        signals[0] ??\n        \"unknown transient failure\");\n}\n", "const DIAGNOSTIC_FIELD_NAMES = [\n    \"code\",\n    \"detail\",\n    \"hint\",\n    \"constraint\",\n    \"table\",\n    \"column\",\n    \"routine\",\n    \"severity\",\n];\nfunction asRecord(value) {\n    return value && typeof value === \"object\" ? value : undefined;\n}\nfunction redactDiagnosticValue(value) {\n    return value\n        .replace(/postgres(?:ql)?:\\/\\/[^\\s\"']+/gi, \"postgres://[redacted]\")\n        .replace(/\\b(password|token|secret)=([^&\\s]+)/gi, \"$1=[redacted]\");\n}\nfunction collectDiagnosticFields(value) {\n    const record = asRecord(value);\n    if (!record) {\n        return {};\n    }\n    const result = {};\n    for (const fieldName of DIAGNOSTIC_FIELD_NAMES) {\n        const fieldValue = record[fieldName];\n        if (typeof fieldValue === \"string\" && fieldValue.length > 0) {\n            result[fieldName] = redactDiagnosticValue(fieldValue);\n        }\n    }\n    return result;\n}\nfunction hasDiagnosticFields(fields) {\n    return Object.keys(fields).length > 0;\n}\nfunction hasNonCodeDiagnosticFields(fields) {\n    return Object.keys(fields).some((key) => key !== \"code\");\n}\nfunction isJobAdmissionCode(code) {\n    return typeof code === \"string\" && code.startsWith(\"job_\");\n}\nfunction sanitizeRpcDetailValue(value, depth = 0) {\n    if (value == null || typeof value === \"number\" || typeof value === \"boolean\") {\n        return value;\n    }\n    if (typeof value === \"string\") {\n        return redactDiagnosticValue(value);\n    }\n    if (depth >= 2) {\n        return undefined;\n    }\n    if (Array.isArray(value)) {\n        return value.slice(0, 20).map((item) => sanitizeRpcDetailValue(item, depth + 1));\n    }\n    const record = asRecord(value);\n    if (!record) {\n        return undefined;\n    }\n    const result = {};\n    for (const [key, item] of Object.entries(record).slice(0, 20)) {\n        const sanitized = sanitizeRpcDetailValue(item, depth + 1);\n        if (sanitized !== undefined) {\n            result[key] = sanitized;\n        }\n    }\n    return result;\n}\nfunction collectJobAdmissionDetails(record) {\n    const sanitized = sanitizeRpcDetailValue(record?.details);\n    return sanitized && typeof sanitized === \"object\" && !Array.isArray(sanitized)\n        ? sanitized\n        : undefined;\n}\nexport function buildRpcErrorBody(error, messageOverride) {\n    const record = asRecord(error);\n    const message = messageOverride ??\n        (error instanceof Error ? error.message : typeof error === \"string\" ? error : \"Unknown error\");\n    const body = { error: message };\n    if (typeof record?.code === \"string\" && record.code.length > 0) {\n        body.code = record.code;\n    }\n    if (isJobAdmissionCode(body.code)) {\n        if (typeof record?.retryAfterMs === \"number\" && Number.isFinite(record.retryAfterMs)) {\n            body.retryAfterMs = Math.max(0, Math.trunc(record.retryAfterMs));\n        }\n        const details = collectJobAdmissionDetails(record);\n        if (details) {\n            body.details = details;\n        }\n    }\n    const diagnostics = collectDiagnosticFields(error);\n    const causeDiagnostics = collectDiagnosticFields(record?.cause);\n    if (hasDiagnosticFields(causeDiagnostics)) {\n        diagnostics.cause = causeDiagnostics;\n    }\n    if (hasNonCodeDiagnosticFields(diagnostics) || diagnostics.cause) {\n        body.diagnostics = diagnostics;\n    }\n    return body;\n}\n", "import { Hono } from \"hono\";\nimport { ProcedureRpcDecodeError, ProcedureRpcHandler } from \"@gencow/client/procedure-rpc\";\nimport { decideDbOperationRetry, describeDbRetryFailure } from \"./db-retry-policy.js\";\nimport { buildRpcErrorBody } from \"./server-rpc-error.js\";\nfunction formatRpcLogPrefix(rpcLogContext, fallback) {\n    if (rpcLogContext) {\n        return `[${rpcLogContext.routePath} rpcMode=${rpcLogContext.rpcMode}]`;\n    }\n    return `[${fallback}]`;\n}\nfunction resolveRpcRoutePath(c, fallback) {\n    return c.req.path ?? fallback;\n}\nfunction withRpcLogContext(c, rpcMode, routePath) {\n    return { ...c, rpcLogContext: { rpcMode, routePath } };\n}\nfunction procedureRpcDecodeErrorMessage(error) {\n    if (error instanceof ProcedureRpcDecodeError) {\n        return error.message;\n    }\n    if (error &&\n        typeof error === \"object\" &&\n        error.code === \"RPC_DECODE_ERROR\" &&\n        typeof error.message === \"string\") {\n        return error.message;\n    }\n    return undefined;\n}\nconst INTERNAL_MUTATION_PREFIX = \"__gencow.\";\nconst QUERY_TRANSIENT_RETRY_ATTEMPTS = 2;\nconst DEFAULT_QUERY_RETRY_ATTEMPT_TIMEOUT_MS = 5_000;\nclass QueryRetryAttemptTimeoutError extends Error {\n    timeoutMs;\n    code = \"FUNCTION_TIMEOUT\";\n    constructor(timeoutMs) {\n        super(`Query retry attempt timed out after ${timeoutMs}ms`);\n        this.timeoutMs = timeoutMs;\n        this.name = \"QueryRetryAttemptTimeoutError\";\n    }\n}\nasync function sleep(ms) {\n    await new Promise((resolve) => setTimeout(resolve, ms));\n}\nasync function withQueryRetryAttemptTimeout(work, timeoutMs) {\n    if (timeoutMs <= 0) {\n        return work;\n    }\n    let timeout;\n    work.catch(() => {\n        /* The timeout race may settle first; keep late rejections handled. */\n    });\n    try {\n        return await Promise.race([\n            work,\n            new Promise((_, reject) => {\n                timeout = setTimeout(() => reject(new QueryRetryAttemptTimeoutError(timeoutMs)), timeoutMs);\n                timeout.unref?.();\n            }),\n        ]);\n    }\n    finally {\n        if (timeout) {\n            clearTimeout(timeout);\n        }\n    }\n}\nasync function executeQueryWithTransientRetry(params) {\n    let attempt = 0;\n    let lastError;\n    while (attempt < QUERY_TRANSIENT_RETRY_ATTEMPTS) {\n        attempt += 1;\n        try {\n            const work = params.executeWithTimeout(params.fn, \"query\", params.name);\n            return attempt > 1\n                ? await withQueryRetryAttemptTimeout(work, params.retryAttemptTimeoutMs ?? DEFAULT_QUERY_RETRY_ATTEMPT_TIMEOUT_MS)\n                : await work;\n        }\n        catch (error) {\n            lastError = error;\n            const decision = decideDbOperationRetry({\n                operationKind: \"read\",\n                attempt,\n                maxAttempts: QUERY_TRANSIENT_RETRY_ATTEMPTS,\n                error,\n            });\n            if (decision.action !== \"retry\") {\n                throw error;\n            }\n            params.logger.warn(`${params.logPrefix} ${params.name} ${decision.reason}; retrying once: ${describeDbRetryFailure(error)}`);\n            await sleep(25);\n        }\n    }\n    throw lastError;\n}\nexport function createMixedUserIdChecker(params) {\n    const warnedQueries = params.warnedQueries ?? new Set();\n    const logger = params.logger ?? console;\n    return (queryName, result) => {\n        if (warnedQueries.has(queryName)) {\n            return;\n        }\n        const userIdKeys = [\"userId\", \"user_id\", \"ownerId\", \"owner_id\", \"authorId\", \"author_id\"];\n        for (const key of userIdKeys) {\n            const values = new Set();\n            for (const row of result) {\n                if (row && typeof row === \"object\" && key in row && row[key] != null) {\n                    values.add(String(row[key]));\n                }\n            }\n            if (values.size >= 2) {\n                warnedQueries.add(queryName);\n                logger.warn(`[gencow] \u26A0\uFE0F  \"${queryName}\" returned rows with ${values.size} different ${key} values.`);\n                logger.warn(`[gencow]    \uD83D\uDCA1 This may indicate missing data isolation. Use pgTable + ownerRls() + createCrud() to auto-isolate user data.`);\n                return;\n            }\n        }\n    };\n}\nfunction isRecord(value) {\n    return typeof value === \"object\" && value !== null;\n}\nfunction objectHasOwn(o, key) {\n    return Object.prototype.hasOwnProperty.call(o, key);\n}\n/** Procedure wire: top-level `json` without top-level `name` (see unified RPC spec). */\nexport function isProcedureJsonWire(body) {\n    return isRecord(body) && objectHasOwn(body, \"json\") && !objectHasOwn(body, \"name\");\n}\nfunction isAmbiguousJsonWire(body) {\n    return isRecord(body) && objectHasOwn(body, \"json\") && objectHasOwn(body, \"name\");\n}\nconst AMBIGUOUS_JSON_RPC_ERROR = 'Ambiguous request body: cannot include both top-level \"name\" and top-level \"json\".';\nconst UNKNOWN_RPC_NAME_ERROR = \"Unknown RPC operation: name is not registered in legacy or procedure map.\";\nfunction detectMutationMultipartMode(form) {\n    const hasData = form.has(\"data\");\n    const hasMutation = form.has(\"_mutation\");\n    if (hasData && hasMutation) {\n        return \"ambiguous\";\n    }\n    if (hasData) {\n        return \"procedure\";\n    }\n    if (hasMutation) {\n        return \"legacy\";\n    }\n    return \"missing\";\n}\nexport function resolveQueryJsonRpcMode(params) {\n    if (isAmbiguousJsonWire(params.body)) {\n        return \"ambiguous\";\n    }\n    if (isProcedureJsonWire(params.body)) {\n        return \"procedure\";\n    }\n    if (isRecord(params.body) && typeof params.body.name === \"string\") {\n        const name = params.body.name;\n        if (params.getQueryDef(name)) {\n            return \"legacy\";\n        }\n        if (params.queryProcedureMap.has(name)) {\n            return \"procedure\";\n        }\n        return \"unknown\";\n    }\n    return \"legacy\";\n}\nexport function resolveMutationJsonRpcMode(params) {\n    if (isAmbiguousJsonWire(params.body)) {\n        return \"ambiguous\";\n    }\n    if (isProcedureJsonWire(params.body)) {\n        return \"procedure\";\n    }\n    if (isRecord(params.body) && typeof params.body.name === \"string\") {\n        const name = params.body.name;\n        if (params.mutationMap.has(name)) {\n            return \"legacy\";\n        }\n        if (params.mutationProcedureMap.has(name)) {\n            return \"procedure\";\n        }\n        return \"unknown\";\n    }\n    return \"legacy\";\n}\nexport async function parseMutationRequest(params) {\n    if ((params.contentType ?? \"\").includes(\"multipart/form-data\")) {\n        const body = await params.parseBody();\n        const name = body._mutation;\n        delete body._mutation;\n        return { name, args: body };\n    }\n    const body = (await params.json().catch(() => ({})));\n    return { name: body.name, args: body.args };\n}\nexport function createApiRootPayload(uptimeSeconds = () => process.uptime()) {\n    return {\n        status: \"running\",\n        version: \"0.1.0\",\n        uptime: Math.floor(uptimeSeconds()),\n        endpoints: {\n            query: \"POST /api/query\",\n            mutation: \"POST /api/mutation\",\n            storage: \"GET /api/storage/:id\",\n            auth: \"/api/auth/*\",\n        },\n    };\n}\nexport function createQueryRouteHandler(params) {\n    const publicQueryWarned = params.publicQueryWarned ?? new Set();\n    const checkMixedUserIds = params.checkMixedUserIds ?? (() => { });\n    const logger = params.logger ?? console;\n    return async (c) => {\n        const logPrefix = formatRpcLogPrefix(c.rpcLogContext, \"query\");\n        const body = (await c.req.json().catch(() => ({})));\n        const name = body.name;\n        if (!name) {\n            return c.json({ error: \"Missing query name\" }, 400);\n        }\n        const queryDef = params.getQueryDef(name);\n        if (!queryDef) {\n            return c.json({ error: `Query not found: ${name}` }, 404);\n        }\n        const ctx = params.buildCtx(c);\n        if (!queryDef.isPublic) {\n            const user = ctx.auth.getUserIdentity();\n            if (!user) {\n                return c.json({ error: \"Authentication required\" }, 401);\n            }\n        }\n        try {\n            const validatedArgs = params.parseArgs(queryDef.argsSchema, body.args);\n            const result = await executeQueryWithTransientRetry({\n                executeWithTimeout: params.executeWithTimeout,\n                name,\n                logPrefix,\n                logger,\n                retryAttemptTimeoutMs: params.queryRetryAttemptTimeoutMs,\n                fn: () => queryDef.handler(ctx, validatedArgs),\n            });\n            if (queryDef.isPublic && !params.isBaas && Array.isArray(result) && result.length >= 100) {\n                if (!publicQueryWarned.has(name)) {\n                    publicQueryWarned.add(name);\n                    logger.warn(`[gencow] \u26A0\uFE0F  \"${name}\" (isPublic) returned ${result.length} rows without pagination.`);\n                    logger.warn(\"[gencow]    \uD83D\uDCA1 Add .limit(100) to prevent full table scans. See SECURITY.md\");\n                }\n            }\n            if (!params.isBaas && Array.isArray(result) && result.length >= 2) {\n                checkMixedUserIds(name, result);\n            }\n            return c.json(result ?? null);\n        }\n        catch (error) {\n            const status = typeof error?.status === \"number\"\n                ? error.status\n                : error?.code === \"FUNCTION_TIMEOUT\"\n                    ? 408\n                    : error instanceof params.validationErrorCtor\n                        ? 400\n                        : 500;\n            if (status === 500) {\n                logger.error(`${logPrefix} ${name} failed:`, error.message);\n                if (error.cause) {\n                    logger.error(`${logPrefix}   cause:`, error.cause);\n                }\n            }\n            return c.json(buildRpcErrorBody(error), status);\n        }\n    };\n}\nexport function createMutationRouteHandler(params) {\n    const logger = params.logger ?? console;\n    return async (c) => {\n        const logPrefix = formatRpcLogPrefix(c.rpcLogContext, \"mutation\");\n        const { name, args } = await parseMutationRequest({\n            contentType: c.req.header(\"content-type\") || \"\",\n            parseBody: () => c.req.parseBody(),\n            json: () => c.req.json(),\n        });\n        if (!name) {\n            return c.json({ error: \"Missing mutation name\" }, 400);\n        }\n        if (String(name).startsWith(INTERNAL_MUTATION_PREFIX)) {\n            return c.json({ error: `Mutation not found: ${name}` }, 404);\n        }\n        const mutation = params.mutationMap.get(name);\n        if (!mutation) {\n            return c.json({ error: `Mutation not found: ${name}` }, 404);\n        }\n        const ctx = params.buildCtx(c);\n        if (!mutation.isPublic) {\n            const user = ctx.auth.getUserIdentity();\n            if (!user) {\n                return c.json({ error: \"Authentication required\" }, 401);\n            }\n        }\n        try {\n            const validatedArgs = params.parseArgs(mutation.argsSchema, args);\n            const result = await params.executeWithTimeout(() => mutation.handler(ctx, validatedArgs), \"mutation\", name);\n            const realtime = ctx.realtime;\n            if (realtime._flushRefresh) {\n                await realtime._flushRefresh();\n            }\n            if (realtime._flushRealtimeEvents) {\n                await realtime._flushRealtimeEvents();\n            }\n            if (realtime._hasEmitted !== undefined && !realtime._hasEmitted) {\n                logger.warn(`[gencow] \u26A0\uFE0F  mutation \"${name}\" completed without ctx.realtime.emit(), ctx.realtime.invalidate(), or ctx.realtime.refresh(). Subscribed clients won't see updates. \uD83D\uDCA1 Use ctx.realtime.invalidate(\"queryKey\") for private/RLS queries.`);\n            }\n            return c.json(result ?? null, 201);\n        }\n        catch (error) {\n            logger.error(`${logPrefix} \"${name}\" failed:`, error.message);\n            if (error.cause) {\n                logger.error(`${logPrefix}   cause:`, error.cause);\n            }\n            const status = typeof error?.status === \"number\"\n                ? error.status\n                : error?.code === \"FUNCTION_TIMEOUT\"\n                    ? 408\n                    : error instanceof params.validationErrorCtor\n                        ? 400\n                        : 500;\n            return c.json(buildRpcErrorBody(error), status);\n        }\n    };\n}\n/**\n * procedure.query procedures from `defineApi({ procedures })` \u2014 Standard Schema validation runs inside the handler chain;\n * request body args are passed through without legacy parseArgs().\n */\nexport function createProcedureQueryRouteHandler(params) {\n    const publicQueryWarned = params.publicQueryWarned ?? new Set();\n    const checkMixedUserIds = params.checkMixedUserIds ?? (() => { });\n    const logger = params.logger ?? console;\n    const procedureRpcHandler = params.procedureRpcHandler ?? new ProcedureRpcHandler();\n    return async (c) => {\n        const logPrefix = formatRpcLogPrefix(c.rpcLogContext, \"procedure.query\");\n        let step;\n        let queryNameForLogs = \"unknown\";\n        try {\n            step = \"decode_input\";\n            const body = procedureRpcHandler.decodeProcedureRpcBody(await c.req.json());\n            const name = body.name;\n            queryNameForLogs = String(name ?? \"unknown\");\n            if (!name) {\n                return c.json({ error: \"Missing query name\" }, 400);\n            }\n            const proc = params.queryProcedureMap.get(name);\n            if (!proc) {\n                return c.json({ error: `Query not found: ${name}` }, 404);\n            }\n            const ctx = params.buildCtx(c);\n            if (!proc.allowAnonymous) {\n                const user = ctx.auth.getUserIdentity();\n                if (!user) {\n                    return c.json({ error: \"Authentication required\" }, 401);\n                }\n            }\n            step = \"call_procedure\";\n            const result = await executeQueryWithTransientRetry({\n                executeWithTimeout: params.executeWithTimeout,\n                name,\n                logPrefix,\n                logger,\n                retryAttemptTimeoutMs: params.queryRetryAttemptTimeoutMs,\n                fn: () => proc.handler(ctx, body.args),\n            });\n            step = undefined;\n            if (proc.allowAnonymous && !params.isBaas && Array.isArray(result) && result.length >= 100) {\n                if (!publicQueryWarned.has(name)) {\n                    publicQueryWarned.add(name);\n                    logger.warn(`[gencow] \u26A0\uFE0F  \"${name}\" (allowAnonymous) returned ${result.length} rows without pagination.`);\n                    logger.warn(\"[gencow]    \uD83D\uDCA1 Add .limit(100) to prevent full table scans. See SECURITY.md\");\n                }\n            }\n            if (!params.isBaas && Array.isArray(result) && result.length >= 2) {\n                checkMixedUserIds(name, result);\n            }\n            return c.json(procedureRpcHandler.encodeWirePayload(result ?? null));\n        }\n        catch (error) {\n            const status = step === \"decode_input\"\n                ? 400\n                : typeof error?.status === \"number\"\n                    ? error.status\n                    : error?.code === \"FUNCTION_TIMEOUT\"\n                        ? 408\n                        : error instanceof params.validationErrorCtor\n                            ? 400\n                            : 500;\n            if (status === 500) {\n                logger.error(`${logPrefix} ${queryNameForLogs} failed:`, error.message);\n                if (error.cause) {\n                    logger.error(`${logPrefix}   cause:`, error.cause);\n                }\n            }\n            const message = step === \"decode_input\"\n                ? \"Malformed request. Ensure the request body is properly formatted and the 'Content-Type' header is set correctly.\"\n                : error.message;\n            return c.json(buildRpcErrorBody(error, message), status);\n        }\n    };\n}\nexport function createProcedureMutationRouteHandler(params) {\n    const logger = params.logger ?? console;\n    const procedureRpcHandler = params.procedureRpcHandler ?? new ProcedureRpcHandler();\n    return async (c) => {\n        const logPrefix = formatRpcLogPrefix(c.rpcLogContext, \"procedure.mutation\");\n        let step;\n        let mutationNameForLogs = \"unknown\";\n        let rpcFormat = \"json\";\n        let blobCount = 0;\n        try {\n            step = \"decode_input\";\n            const contentType = c.req.header(\"content-type\") ?? \"\";\n            let decoded;\n            if (contentType.includes(\"multipart/form-data\")) {\n                rpcFormat = \"multipart\";\n                const form = await c.req.formData();\n                blobCount = [...form.keys()].filter((key) => /^\\d+$/.test(key)).length;\n                decoded = procedureRpcHandler.decodeProcedureMultipart(form);\n            }\n            else {\n                decoded = procedureRpcHandler.decodeProcedureRpcBody(await c.req.json());\n            }\n            const { name, args } = decoded;\n            mutationNameForLogs = String(name ?? \"unknown\");\n            if (!name) {\n                return c.json({ error: \"Missing mutation name\" }, 400);\n            }\n            if (String(name).startsWith(INTERNAL_MUTATION_PREFIX)) {\n                return c.json({ error: `Mutation not found: ${name}` }, 404);\n            }\n            const proc = params.mutationProcedureMap.get(name);\n            if (!proc) {\n                return c.json({ error: `Mutation not found: ${name}` }, 404);\n            }\n            const ctx = params.buildCtx(c);\n            if (!proc.allowAnonymous) {\n                const user = ctx.auth.getUserIdentity();\n                if (!user) {\n                    return c.json({ error: \"Authentication required\" }, 401);\n                }\n            }\n            step = \"call_procedure\";\n            const result = await params.executeWithTimeout(() => proc.handler(ctx, args), \"mutation\", name);\n            step = undefined;\n            const realtime = ctx.realtime;\n            if (realtime._flushRefresh) {\n                await realtime._flushRefresh();\n            }\n            if (realtime._flushRealtimeEvents) {\n                await realtime._flushRealtimeEvents();\n            }\n            if (realtime._hasEmitted !== undefined && !realtime._hasEmitted) {\n                logger.warn(`[gencow] \u26A0\uFE0F  mutation \"${name}\" completed without ctx.realtime.emit(), ctx.realtime.invalidate(), or ctx.realtime.refresh(). Subscribed clients won't see updates. \uD83D\uDCA1 Use ctx.realtime.invalidate(\"queryKey\") for private/RLS queries.`);\n            }\n            return c.json(procedureRpcHandler.encodeWirePayload(result ?? null), 201);\n        }\n        catch (error) {\n            const decodeDetail = rpcFormat === \"multipart\" ? ` rpcFormat=multipart blobCount=${blobCount}` : \"\";\n            logger.error(`${logPrefix} \"${mutationNameForLogs}\" failed${decodeDetail}:`, error.message);\n            if (error.cause) {\n                logger.error(`${logPrefix}   cause:`, error.cause);\n            }\n            const status = step === \"decode_input\"\n                ? 400\n                : typeof error?.status === \"number\"\n                    ? error.status\n                    : error?.code === \"FUNCTION_TIMEOUT\"\n                        ? 408\n                        : error instanceof params.validationErrorCtor\n                            ? 400\n                            : 500;\n            const decodeMessage = procedureRpcDecodeErrorMessage(error);\n            const message = step === \"decode_input\"\n                ? (decodeMessage ??\n                    \"Malformed request. Ensure the request body is properly formatted and the 'Content-Type' header is set correctly.\")\n                : error.message;\n            return c.json(buildRpcErrorBody(error, message), status);\n        }\n    };\n}\nexport function createUnifiedQueryRouteHandler(params) {\n    const legacyHandler = createQueryRouteHandler({\n        getQueryDef: params.getQueryDef,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        parseArgs: params.parseArgs,\n        validationErrorCtor: params.validationErrorCtor,\n        isBaas: params.isBaas,\n        publicQueryWarned: params.publicQueryWarned,\n        checkMixedUserIds: params.checkMixedUserIds,\n        logger: params.logger,\n    });\n    const procedureHandler = createProcedureQueryRouteHandler({\n        queryProcedureMap: params.queryProcedureMap,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        validationErrorCtor: params.validationErrorCtor,\n        isBaas: params.isBaas,\n        procedureRpcHandler: params.procedureRpcHandler,\n        publicQueryWarned: params.publicQueryWarned,\n        checkMixedUserIds: params.checkMixedUserIds,\n        logger: params.logger,\n    });\n    return async (c) => {\n        const routePath = resolveRpcRoutePath(c, \"/api/query\");\n        const body = await c.req.json().catch(() => ({}));\n        const mode = resolveQueryJsonRpcMode({\n            body,\n            getQueryDef: params.getQueryDef,\n            queryProcedureMap: params.queryProcedureMap,\n        });\n        if (mode === \"ambiguous\") {\n            return c.json({ error: AMBIGUOUS_JSON_RPC_ERROR, code: \"RPC_DECODE_ERROR\" }, 400);\n        }\n        if (mode === \"unknown\") {\n            return c.json({ error: UNKNOWN_RPC_NAME_ERROR, code: \"RPC_DECODE_ERROR\" }, 400);\n        }\n        const jsonReq = { json: async () => body };\n        if (mode === \"legacy\") {\n            return legacyHandler(withRpcLogContext({ ...c, req: { ...c.req, ...jsonReq } }, \"legacy\", routePath));\n        }\n        return procedureHandler(withRpcLogContext({ ...c, req: { ...c.req, ...jsonReq } }, \"procedure\", routePath));\n    };\n}\nexport function createUnifiedMutationRouteHandler(params) {\n    const legacyHandler = createMutationRouteHandler({\n        mutationMap: params.mutationMap,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        parseArgs: params.parseArgs,\n        validationErrorCtor: params.validationErrorCtor,\n        logger: params.logger,\n    });\n    const procedureHandler = createProcedureMutationRouteHandler({\n        mutationProcedureMap: params.mutationProcedureMap,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        validationErrorCtor: params.validationErrorCtor,\n        procedureRpcHandler: params.procedureRpcHandler,\n        logger: params.logger,\n    });\n    return async (c) => {\n        const routePath = resolveRpcRoutePath(c, \"/api/mutation\");\n        const contentType = c.req.header(\"content-type\") ?? \"\";\n        if (contentType.includes(\"multipart/form-data\")) {\n            const form = await c.req.formData();\n            const multipartMode = detectMutationMultipartMode(form);\n            if (multipartMode === \"ambiguous\") {\n                return c.json({\n                    error: 'Ambiguous multipart request: cannot include both \"data\" and \"_mutation\" fields.',\n                    code: \"RPC_DECODE_ERROR\",\n                }, 400);\n            }\n            if (multipartMode === \"missing\") {\n                return c.json({\n                    error: 'Multipart mutation must include either \"data\" (procedure) or \"_mutation\" (legacy).',\n                    code: \"RPC_DECODE_ERROR\",\n                }, 400);\n            }\n            if (multipartMode === \"procedure\") {\n                return procedureHandler(withRpcLogContext({\n                    ...c,\n                    req: {\n                        ...c.req,\n                        header: () => contentType,\n                        formData: async () => form,\n                        parseBody: async () => {\n                            throw new Error(\"parseBody must not be used for procedure multipart\");\n                        },\n                        json: async () => {\n                            throw new Error(\"json must not be used for procedure multipart\");\n                        },\n                    },\n                }, \"procedure\", routePath));\n            }\n            return legacyHandler(withRpcLogContext({\n                ...c,\n                req: {\n                    ...c.req,\n                    header: () => contentType,\n                    formData: async () => form,\n                    parseBody: async () => {\n                        const record = {};\n                        for (const [key, value] of form.entries()) {\n                            record[key] = value;\n                        }\n                        return record;\n                    },\n                    json: async () => {\n                        throw new Error(\"json must not be used for legacy multipart\");\n                    },\n                },\n            }, \"legacy\", routePath));\n        }\n        const body = await c.req.json().catch(() => ({}));\n        const mode = resolveMutationJsonRpcMode({\n            body,\n            mutationMap: params.mutationMap,\n            mutationProcedureMap: params.mutationProcedureMap,\n        });\n        if (mode === \"ambiguous\") {\n            return c.json({ error: AMBIGUOUS_JSON_RPC_ERROR, code: \"RPC_DECODE_ERROR\" }, 400);\n        }\n        if (mode === \"unknown\") {\n            return c.json({ error: UNKNOWN_RPC_NAME_ERROR, code: \"RPC_DECODE_ERROR\" }, 400);\n        }\n        const jsonReq = { json: async () => body };\n        if (mode === \"legacy\") {\n            return legacyHandler(withRpcLogContext({\n                ...c,\n                req: {\n                    ...c.req,\n                    header: () => contentType,\n                    ...jsonReq,\n                    parseBody: () => c.req.parseBody(),\n                },\n            }, \"legacy\", routePath));\n        }\n        return procedureHandler(withRpcLogContext({\n            ...c,\n            req: {\n                ...c.req,\n                header: () => contentType,\n                ...jsonReq,\n                parseBody: () => c.req.parseBody(),\n                formData: () => c.req.formData(),\n            },\n        }, \"procedure\", routePath));\n    };\n}\nexport function buildApiRouter(params) {\n    const mixedUserIdChecker = createMixedUserIdChecker({ logger: params.logger });\n    const queryProcedureMap = params.queryProcedureMap ?? new Map();\n    const mutationProcedureMap = params.mutationProcedureMap ?? new Map();\n    const procedureRpcHandler = new ProcedureRpcHandler();\n    const unifiedQueryHandler = createUnifiedQueryRouteHandler({\n        getQueryDef: params.getQueryDef,\n        queryProcedureMap,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        parseArgs: params.parseArgs,\n        validationErrorCtor: params.validationErrorCtor,\n        isBaas: params.isBaas,\n        procedureRpcHandler,\n        checkMixedUserIds: mixedUserIdChecker,\n        logger: params.logger,\n    });\n    const unifiedMutationHandler = createUnifiedMutationRouteHandler({\n        mutationMap: params.mutationMap,\n        mutationProcedureMap,\n        buildCtx: params.buildCtx,\n        executeWithTimeout: params.executeWithTimeout,\n        parseArgs: params.parseArgs,\n        validationErrorCtor: params.validationErrorCtor,\n        procedureRpcHandler,\n        logger: params.logger,\n    });\n    return new Hono()\n        .get(\"/\", (c) => c.json(createApiRootPayload()))\n        .post(\"/query\", unifiedQueryHandler)\n        .post(\"/mutation\", unifiedMutationHandler)\n        .get(\"/storage/:id\", params.storageRouteHandler)\n        .put(\"/storage/upload/:uploadId\", (params.storageUploadRouteHandler ??\n        ((c) => c.json({ error: \"Direct upload is not supported\" }, 501))));\n}\n", "import { getWorkflowResumeActionName } from \"@gencow/core\";\nimport { allResolvableActionTokens, allResolvableProcedureNames, executeScheduledAction, } from \"./scheduled-action-resolver\";\nimport { extractWorkflowResumeArgs, getWorkflowResumeDeliveryJobId } from \"./workflow-resume-args\";\nimport { requeueRecoverableWorkflowRuns } from \"./workflow-runner\";\nimport { resumeWorkflowRunWithV2 } from \"./workflow-kernel-v2-dispatcher\";\nexport function formatWorkflowResumeArgsPreview(rawArgs) {\n    try {\n        return JSON.stringify(rawArgs).slice(0, 200) || \"empty\";\n    }\n    catch {\n        return String(rawArgs) || \"empty\";\n    }\n}\nexport function registerSchedulerMutationActions(params) {\n    const maps = {\n        internalProcedureMap: params.internalProcedureMap ?? new Map(),\n        mutationProcedureMap: params.mutationProcedureMap ?? new Map(),\n        mutationMap: params.mutationMap,\n    };\n    const registered = new Set();\n    for (const name of allResolvableProcedureNames(maps)) {\n        if (registered.has(name))\n            continue;\n        registered.add(name);\n        params.scheduler.registerAction(name, async (args) => {\n            await executeScheduledAction({\n                action: name,\n                rawArgs: args ?? {},\n                maps,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                invoker: \"scheduler\",\n            });\n        });\n    }\n    for (const actionToken of allResolvableActionTokens(params.actionTokenMap ?? new Map())) {\n        if (registered.has(actionToken))\n            continue;\n        registered.add(actionToken);\n        params.scheduler.registerAction(actionToken, async (args) => {\n            await executeScheduledAction({\n                action: actionToken,\n                rawArgs: args ?? {},\n                actionTokenMap: params.actionTokenMap,\n                maps,\n                buildCtx: params.buildCtx,\n                parseArgs: params.parseArgs,\n                executeWithTimeout: params.executeWithTimeout,\n                invoker: \"scheduler\",\n            });\n        });\n    }\n    console.log(`[scheduler] Registered ${registered.size} scheduled action(s)`);\n}\nexport async function registerWorkflowResumeActions(params) {\n    const resumeWorkflowRunImpl = params.resumeWorkflowRunImpl || resumeWorkflowRunWithV2;\n    const requeueRecoverableWorkflowRunsImpl = params.requeueRecoverableWorkflowRunsImpl || requeueRecoverableWorkflowRuns;\n    if (params.workflows.length === 0)\n        return;\n    for (const workflow of params.workflows) {\n        const resumeAction = getWorkflowResumeActionName(workflow.name);\n        params.scheduler.registerAction(resumeAction, async (rawArgs) => {\n            const { workflowId } = extractWorkflowResumeArgs(rawArgs);\n            if (!workflowId) {\n                throw new Error(`workflowId missing for ${resumeAction} (args=${formatWorkflowResumeArgsPreview(rawArgs)})`);\n            }\n            await params.executeWithTimeout(() => resumeWorkflowRunImpl({\n                db: params.db,\n                workflowId,\n                buildCtx: () => params.buildCtx(),\n                capacityPolicy: params.workflowCapacityPolicy,\n                scheduleResume: (resumeWorkflowId, delayMs) => params.scheduler.runAfter(delayMs, resumeAction, { workflowId: resumeWorkflowId }, { id: getWorkflowResumeDeliveryJobId(resumeWorkflowId) }),\n            }), \"cron\", resumeAction);\n        });\n    }\n    console.log(`[workflow] Registered ${params.workflows.length} workflow resume action(s)`);\n    const recoverable = await requeueRecoverableWorkflowRunsImpl({\n        db: params.db,\n        workflowNames: params.workflows.map((workflow) => workflow.name),\n        scheduleResume: (workflowName, workflowId, delayMs) => {\n            const resumeAction = getWorkflowResumeActionName(workflowName);\n            return params.scheduler.runAfter(delayMs, resumeAction, { workflowId }, { id: getWorkflowResumeDeliveryJobId(workflowId) });\n        },\n    });\n    if (recoverable.length > 0) {\n        console.log(`[workflow] Requeued ${recoverable.length} recoverable workflow run(s)` +\n            `${params.isBaas ? \" via durable scheduler\" : \"\"}`);\n    }\n}\n", "import { resumeWorkflowRun } from \"./workflow-runner.js\";\nimport { fireDueWorkflowV2Timers } from \"./workflow-kernel-v2-durable.js\";\nimport { collectWorkflowV2ErrorCodes, collectWorkflowV2ErrorMessages } from \"./workflow-kernel-v2-db.js\";\nimport { resumeWorkflowV2Run } from \"./workflow-kernel-v2-runner.js\";\nimport { getWorkflowV2Run } from \"./workflow-kernel-v2-store.js\";\nfunction isMissingWorkflowV2SchemaError(error) {\n    const codes = new Set(collectWorkflowV2ErrorCodes(error));\n    const message = collectWorkflowV2ErrorMessages(error).join(\"\\n\");\n    return (codes.has(\"42P01\") ||\n        (codes.has(\"42703\") && message.includes(\"_gencow_workflow\")) ||\n        message.includes('relation \"_gencow_workflow_runs_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_runs_v2 does not exist\") ||\n        message.includes('relation \"_gencow_workflow_timers_v2\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_timers_v2 does not exist\"));\n}\nasync function getOptionalWorkflowV2Run(options) {\n    try {\n        await fireDueWorkflowV2Timers(options.db);\n        return (await getWorkflowV2Run(options.db, options.workflowId)) != null;\n    }\n    catch (error) {\n        if (isMissingWorkflowV2SchemaError(error))\n            return false;\n        throw error;\n    }\n}\nfunction scheduleWorkflowV2Followup(options, result) {\n    if (result.status === \"sleeping\") {\n        const wakeAtMs = new Date(result.wakeAt).getTime();\n        const delayMs = Number.isFinite(wakeAtMs) ? Math.max(0, wakeAtMs - Date.now()) : 0;\n        options.scheduleResume(result.runId, delayMs);\n        return;\n    }\n    if (result.status === \"waiting\" && result.wakeAt) {\n        const wakeAtMs = new Date(result.wakeAt).getTime();\n        const delayMs = Number.isFinite(wakeAtMs) ? Math.max(0, wakeAtMs - Date.now()) : 0;\n        options.scheduleResume(result.runId, delayMs);\n        return;\n    }\n    if (result.status === \"requeued\") {\n        options.scheduleResume(result.runId, result.nextDelayMs);\n        return;\n    }\n    if (result.status === \"capacity_deferred\") {\n        options.scheduleResume(result.runId, result.nextDelayMs);\n    }\n}\nexport async function resumeWorkflowRunWithV2(options) {\n    const hasV2Run = await getOptionalWorkflowV2Run(options);\n    if (!hasV2Run)\n        return resumeWorkflowRun(options);\n    const result = await resumeWorkflowV2Run({\n        db: options.db,\n        runId: options.workflowId,\n        workerId: `workflow-v2:${options.workflowId}`,\n        capacityPolicy: options.capacityPolicy,\n        buildCtx: options.buildCtx,\n        logger: options.logger,\n    });\n    scheduleWorkflowV2Followup(options, result);\n    return result;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { executeWorkflowV2Query } from \"./workflow-kernel-v2-db.js\";\nimport { workflowV2Jsonb } from \"./workflow-kernel-v2-json.js\";\nimport { GENCOW_APP_WAKE_CHANNEL, buildWakeSignalPayload } from \"./wake-signal/wake-signal-types.js\";\nconst WORKFLOW_WAKE_SIGNAL_PAYLOAD = buildWakeSignalPayload(\"workflow\");\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function createWorkflowV2Timer(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        INSERT INTO _gencow_workflow_timers_v2 (\n            id,\n            run_id,\n            kind,\n            fire_at,\n            dedupe_key\n        )\n        VALUES (\n            ${options.id},\n            ${options.runId},\n            ${options.kind},\n            ${options.fireAt}::timestamptz,\n            ${options.dedupeKey ?? null}\n        )\n        ON CONFLICT (run_id, dedupe_key)\n        DO UPDATE SET\n            fire_at = EXCLUDED.fire_at,\n            status = 'pending',\n            updated_at = NOW()\n        RETURNING *\n    `);\n    const row = rowsFromResult(result)[0];\n    if (!row)\n        throw new Error(`failed to create workflow v2 timer \"${options.id}\"`);\n    return row;\n}\nexport async function getWorkflowV2TimerByDedupe(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        SELECT *\n        FROM _gencow_workflow_timers_v2\n        WHERE run_id = ${options.runId}\n          AND dedupe_key = ${options.dedupeKey}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function fireDueWorkflowV2Timers(db, limit = 100) {\n    const result = await executeWorkflowV2Query(db, sql `\n        WITH due AS (\n            SELECT id\n            FROM _gencow_workflow_timers_v2\n            WHERE status = 'pending'\n              AND fire_at <= NOW()\n            ORDER BY fire_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        ),\n        fired AS (\n            UPDATE _gencow_workflow_timers_v2 timer\n            SET\n                status = 'fired',\n                updated_at = NOW()\n            FROM due\n            WHERE timer.id = due.id\n            RETURNING timer.*\n        ),\n        queued_runs AS (\n            UPDATE _gencow_workflow_runs_v2 run\n            SET\n                status = 'queued',\n                runnable_at = NOW(),\n                lease_owner = NULL,\n                lease_expires_at = NULL,\n                heartbeat_at = NULL,\n                updated_at = NOW()\n            FROM fired\n            WHERE run.id = fired.run_id\n              AND fired.kind IN ('sleep', 'retry_backoff')\n              AND run.status IN ('queued', 'running', 'sleeping', 'waiting')\n              AND run.completed_at IS NULL\n              AND run.cancel_requested_at IS NULL\n            RETURNING run.id AS run_id, fired.id AS timer_id\n        ),\n        timed_out_runs AS (\n            UPDATE _gencow_workflow_runs_v2 run\n            SET\n                status = 'failed',\n                error_code = CASE\n                    WHEN fired.kind = 'wait_timeout' THEN 'wait_timeout'\n                    ELSE 'lifecycle_timeout'\n                END,\n                error_json = jsonb_build_object('timerId', fired.id, 'kind', fired.kind),\n                lease_owner = NULL,\n                lease_expires_at = NULL,\n                heartbeat_at = NULL,\n                completed_at = NOW(),\n                updated_at = NOW()\n            FROM fired\n            WHERE run.id = fired.run_id\n              AND fired.kind IN ('wait_timeout', 'lifecycle_deadline')\n              AND run.status IN ('queued', 'running', 'sleeping', 'waiting')\n              AND run.completed_at IS NULL\n              AND NOT (\n                fired.kind = 'lifecycle_deadline'\n                AND run.status IN ('queued', 'running')\n                AND run.current_step_key IS NULL\n                AND run.active_started_at IS NULL\n              )\n            RETURNING run.id AS run_id, fired.id AS timer_id\n        ),\n        wake_outbox AS (\n            INSERT INTO _gencow_workflow_outbox_v2 (\n                id,\n                run_id,\n                kind,\n                available_at,\n                status\n            )\n            SELECT\n                'timer:' || timer_id,\n                run_id,\n                'wake_timer',\n                NOW(),\n                'pending'\n            FROM queued_runs\n            ON CONFLICT (id) DO NOTHING\n            RETURNING id\n        )\n        SELECT *\n        FROM fired\n        ORDER BY fire_at ASC\n    `);\n    return rowsFromResult(result);\n}\nexport async function recordWorkflowV2Signal(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        WITH inserted AS (\n            INSERT INTO _gencow_workflow_signals_v2 (\n                id,\n                run_id,\n                event_name,\n                payload_json,\n                idempotency_key\n            )\n            VALUES (\n                ${options.id},\n                ${options.runId},\n                ${options.eventName},\n                ${workflowV2Jsonb(options.payload ?? {})},\n                ${options.idempotencyKey ?? null}\n            )\n            ON CONFLICT (run_id, event_name, idempotency_key)\n            DO NOTHING\n            RETURNING *\n        ),\n        queued_run AS (\n            UPDATE _gencow_workflow_runs_v2 run\n            SET\n                status = 'queued',\n                runnable_at = NOW(),\n                lease_owner = NULL,\n                lease_expires_at = NULL,\n                heartbeat_at = NULL,\n                updated_at = NOW()\n            FROM inserted\n            WHERE run.id = inserted.run_id\n              AND run.status = 'waiting'\n              AND run.completed_at IS NULL\n              AND run.cancel_requested_at IS NULL\n            RETURNING run.id\n        ),\n        wake_outbox AS (\n            INSERT INTO _gencow_workflow_outbox_v2 (\n                id,\n                run_id,\n                kind,\n                available_at,\n                status\n            )\n            SELECT\n                'signal:' || inserted.id,\n                inserted.run_id,\n                'wake_signal',\n                NOW(),\n                'pending'\n            FROM inserted\n            JOIN queued_run ON queued_run.id = inserted.run_id\n            ON CONFLICT (id) DO NOTHING\n            RETURNING id\n        ),\n        wake_notified AS (\n            SELECT pg_notify(${GENCOW_APP_WAKE_CHANNEL}, ${WORKFLOW_WAKE_SIGNAL_PAYLOAD})\n            FROM wake_outbox\n        )\n        SELECT inserted.*\n        FROM inserted\n        LEFT JOIN wake_notified ON TRUE\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function claimWorkflowV2Signal(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        WITH candidate AS (\n            SELECT id\n            FROM _gencow_workflow_signals_v2\n            WHERE run_id = ${options.runId}\n              AND event_name = ${options.eventName}\n              AND consumed_at IS NULL\n            ORDER BY received_at ASC, id ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT 1\n        )\n        UPDATE _gencow_workflow_signals_v2 signal\n        SET consumed_at = NOW()\n        WHERE signal.id = (SELECT id FROM candidate)\n        RETURNING *\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function enqueueWorkflowV2Outbox(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        INSERT INTO _gencow_workflow_outbox_v2 (\n            id,\n            run_id,\n            kind,\n            available_at\n        )\n        VALUES (\n            ${options.id},\n            ${options.runId},\n            ${options.kind},\n            ${options.availableAt ?? sql `NOW()`}\n        )\n        ON CONFLICT (id)\n        DO UPDATE SET\n            available_at = EXCLUDED.available_at,\n            status = 'pending',\n            updated_at = NOW()\n        RETURNING *\n    `);\n    const row = rowsFromResult(result)[0];\n    if (!row)\n        throw new Error(`failed to enqueue workflow v2 outbox \"${options.id}\"`);\n    return row;\n}\nexport async function enqueueMissingQueuedWorkflowV2Outbox(options) {\n    const allowedNames = new Set(options.workflowNames);\n    if (allowedNames.size === 0)\n        return [];\n    const candidateResult = await executeWorkflowV2Query(options.db, sql `\n        SELECT run.id, run.workflow_name\n        FROM _gencow_workflow_runs_v2 run\n        WHERE run.status = 'queued'\n          AND run.completed_at IS NULL\n          AND run.cancel_requested_at IS NULL\n          AND run.runnable_at <= NOW()\n          AND run.updated_at <= NOW() - INTERVAL '10 seconds'\n          AND NOT EXISTS (\n            SELECT 1\n            FROM _gencow_workflow_outbox_v2 outbox\n            WHERE outbox.run_id = run.id\n              AND outbox.status IN ('pending', 'sending')\n          )\n          AND NOT EXISTS (\n            SELECT 1\n            FROM _gencow_workflow_outbox_v2 outbox\n            WHERE outbox.run_id = run.id\n              AND outbox.status = 'sent'\n              AND outbox.updated_at >= NOW() - INTERVAL '60 seconds'\n          )\n        ORDER BY run.runnable_at ASC, run.created_at ASC\n        LIMIT ${options.limit ?? 100}\n    `);\n    const candidates = rowsFromResult(candidateResult).filter((run) => allowedNames.has(run.workflow_name));\n    const repaired = [];\n    for (const run of candidates) {\n        const outbox = await enqueueWorkflowV2Outbox({\n            db: options.db,\n            id: `repair:${run.id}`,\n            runId: run.id,\n            kind: \"wake_repair\",\n        });\n        await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_runs_v2\n        SET updated_at = NOW()\n        WHERE id = ${run.id}\n          AND status = 'queued'\n          AND completed_at IS NULL\n    `);\n        repaired.push(outbox);\n    }\n    return repaired;\n}\nexport async function claimDueWorkflowV2Outbox(db, limit = 100, workflowNames) {\n    const allowedNames = workflowNames ? [...new Set(workflowNames)] : [];\n    const workflowFilter = allowedNames.length === 0\n        ? sql ``\n        : sql `\n              AND EXISTS (\n                  SELECT 1\n                  FROM _gencow_workflow_runs_v2 run\n                  WHERE run.id = outbox.run_id\n                    AND run.workflow_name IN (${sql.join(allowedNames.map((name) => sql `${name}`), sql `, `)})\n              )\n          `;\n    const result = await executeWorkflowV2Query(db, sql `\n        WITH candidate AS (\n            SELECT outbox.id\n            FROM _gencow_workflow_outbox_v2 outbox\n            WHERE outbox.status = 'pending'\n              AND outbox.available_at <= NOW()\n              ${workflowFilter}\n            ORDER BY outbox.available_at ASC, outbox.created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        )\n        UPDATE _gencow_workflow_outbox_v2 outbox\n        SET\n            status = 'sending',\n            attempt_count = attempt_count + 1,\n            updated_at = NOW()\n        FROM candidate\n        WHERE outbox.id = candidate.id\n        RETURNING outbox.*\n    `);\n    return rowsFromResult(result);\n}\nexport async function markWorkflowV2OutboxSent(db, outboxId) {\n    const result = await executeWorkflowV2Query(db, sql `\n        UPDATE _gencow_workflow_outbox_v2\n        SET\n            status = 'sent',\n            updated_at = NOW()\n        WHERE id = ${outboxId}\n          AND status = 'sending'\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\n", "import { deserializeWorkflowValue, getWorkflowDef, parseWorkflowDurationMs } from \"@gencow/core\";\nimport { claimWorkflowV2RunById, cancelClaimedWorkflowV2Run, completeWorkflowV2Run, deferWorkflowV2RunForCapacity, failWorkflowV2Run, getWorkflowV2CapacitySnapshot, getWorkflowV2Run, heartbeatWorkflowV2Run, markWorkflowV2RunCurrentStep, pauseWorkflowV2Run, requeueWorkflowV2Run, } from \"./workflow-kernel-v2-store.js\";\nimport { decideWorkflowV2Capacity } from \"./workflow-kernel-v2-capacity.js\";\nimport { claimWorkflowV2Step, completeWorkflowV2Step, failWorkflowV2Step, getWorkflowV2Step, } from \"./workflow-kernel-v2-steps.js\";\nimport { claimWorkflowV2Signal, createWorkflowV2Timer, getWorkflowV2TimerByDedupe, } from \"./workflow-kernel-v2-durable.js\";\nimport { mirrorWorkflowV2RunClaimed, mirrorWorkflowV2RunCompleted, mirrorWorkflowV2RunFailed, mirrorWorkflowV2RunPending, mirrorWorkflowV2StepCompleted, mirrorWorkflowV2StepFailed, mirrorWorkflowV2StepRunning, } from \"./workflow-kernel-v2-read-model.js\";\nimport { attachWorkflowDocumentServices } from \"./server-document-runtime.js\";\nimport { WorkflowCheckpointPolicyError, WorkflowResultPolicyError, createWorkflowCheckpointError, createWorkflowResultError, measureWorkflowCheckpointJson, resolveWorkflowCheckpointPolicyConfig, shouldEnforceWorkflowCheckpointLimit, } from \"./workflow-checkpoint-policy.js\";\nimport { workflowV2JsonString } from \"./workflow-kernel-v2-json.js\";\nfunction writeWorkflowV2CheckpointPolicyLog(params) {\n    if (params.decision.level === \"ok\")\n        return;\n    const message = `[workflow:v2] ${params.workflowName} step ${params.stepKey} checkpoint ${params.decision.level} (sizeBytes=${params.decision.sizeBytes}, softLimitBytes=${params.config.softLimitBytes}, hardLimitBytes=${params.config.hardLimitBytes}, mode=${params.config.mode})`;\n    params.logger[params.decision.level === \"hard_limit\" ? \"warn\" : \"log\"](message);\n}\nfunction errorToJson(error) {\n    if (error instanceof WorkflowCheckpointPolicyError) {\n        return { message: error.message, name: error.name };\n    }\n    if (error instanceof Error) {\n        return { message: error.message, name: error.name };\n    }\n    return { message: String(error) };\n}\nfunction errorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nfunction storedRunErrorMessage(error) {\n    const decoded = parseJsonField(error);\n    if (decoded &&\n        typeof decoded === \"object\" &&\n        typeof decoded.message === \"string\") {\n        return decoded.message;\n    }\n    try {\n        return JSON.stringify(decoded);\n    }\n    catch {\n        return String(decoded);\n    }\n}\nfunction parseJsonField(value) {\n    if (typeof value !== \"string\") {\n        return value;\n    }\n    try {\n        return JSON.parse(value);\n    }\n    catch {\n        return value;\n    }\n}\nfunction decodeWorkflowV2StoredValue(value) {\n    return deserializeWorkflowValue(parseJsonField(value));\n}\nfunction restoreWorkflowAuth(baseAuth, workflowUserId) {\n    if (baseAuth.getUserIdentity()) {\n        return baseAuth;\n    }\n    if (!workflowUserId) {\n        return baseAuth;\n    }\n    const restoredUser = {\n        id: workflowUserId,\n        email: `${workflowUserId}@workflow.local`,\n    };\n    return {\n        getUserIdentity: () => restoredUser,\n        requireAuth: () => restoredUser,\n    };\n}\nfunction isTerminalStatus(status) {\n    return status === \"completed\" || status === \"failed\" || status === \"cancelled\";\n}\nfunction computeWorkflowV2RetryDelayMs(nextRetryCount) {\n    return 30_000 * 3 ** Math.max(0, nextRetryCount - 1);\n}\nfunction startWorkflowV2Heartbeat(options) {\n    const intervalMs = Math.max(1_000, Math.floor(options.leaseMs / 3));\n    const interval = setInterval(() => {\n        void heartbeatWorkflowV2Run({\n            db: options.db,\n            runId: options.run.id,\n            leaseOwner: options.run.lease_owner ?? \"\",\n            leaseEpoch: options.run.lease_epoch,\n            leaseMs: options.leaseMs,\n        });\n    }, intervalMs);\n    if (typeof interval.unref === \"function\") {\n        interval.unref();\n    }\n    return () => clearInterval(interval);\n}\nasync function deferWorkflowV2RunIfCapacityExhausted(options) {\n    if (!options.policy)\n        return null;\n    const existing = await getWorkflowV2Run(options.db, options.runId);\n    if (!existing || existing.status !== \"queued\")\n        return null;\n    const now = new Date();\n    const runnableAtMs = new Date(existing.runnable_at).getTime();\n    if (Number.isFinite(runnableAtMs) && runnableAtMs > now.getTime())\n        return null;\n    const snapshot = await getWorkflowV2CapacitySnapshot(options.db);\n    const decision = decideWorkflowV2Capacity({\n        candidate: {\n            id: existing.id,\n            userId: existing.user_id,\n            workflowName: existing.workflow_name,\n            priority: existing.priority,\n            runnableAt: existing.runnable_at,\n        },\n        snapshot: {\n            ...snapshot,\n            now,\n        },\n        policy: options.policy,\n    });\n    if (decision.allowed)\n        return null;\n    const deferred = await deferWorkflowV2RunForCapacity({\n        db: options.db,\n        runId: existing.id,\n        retryAfterMs: decision.retryAfterMs,\n        reason: decision.reason,\n        signal: decision.signal,\n    });\n    if (!deferred)\n        return null;\n    await mirrorWorkflowV2RunPending({\n        db: options.db,\n        runId: deferred.id,\n        stepKey: deferred.current_step_key,\n    });\n    return {\n        status: \"capacity_deferred\",\n        runId: deferred.id,\n        workflowName: deferred.workflow_name,\n        reason: decision.reason,\n        signal: decision.signal,\n        nextDelayMs: decision.retryAfterMs,\n    };\n}\nclass WorkflowV2PauseSignal extends Error {\n    status;\n    stepKey;\n    wakeAt;\n    eventName;\n    constructor(status, stepKey, wakeAt, eventName) {\n        super(`workflow v2 ${status} at ${stepKey}`);\n        this.status = status;\n        this.stepKey = stepKey;\n        this.wakeAt = wakeAt;\n        this.eventName = eventName;\n        this.name = \"WorkflowV2PauseSignal\";\n    }\n}\nclass WorkflowV2CancelledSignal extends Error {\n    constructor() {\n        super(\"Cancelled by user\");\n        this.name = \"WorkflowV2CancelledSignal\";\n    }\n}\nfunction buildWorkflowV2Ctx(options) {\n    let stepIndex = 0;\n    let sleepIndex = 0;\n    let waitIndex = 0;\n    const step = async (stepKey, fn) => {\n        stepIndex += 1;\n        const runBeforeStep = await getWorkflowV2Run(options.db, options.run.id);\n        if (runBeforeStep?.cancel_requested_at) {\n            throw new WorkflowV2CancelledSignal();\n        }\n        const existing = await getWorkflowV2Step(options.db, options.run.id, stepKey);\n        if (existing?.status === \"completed\") {\n            return decodeWorkflowV2StoredValue(existing.output_json);\n        }\n        const claimedStep = await claimWorkflowV2Step({\n            db: options.db,\n            runId: options.run.id,\n            stepKey,\n            stepIndex,\n            workerId: options.run.lease_owner ?? \"\",\n            leaseEpoch: options.run.lease_epoch,\n            leaseMs: options.leaseMs,\n        });\n        if (!claimedStep) {\n            const refreshed = await getWorkflowV2Step(options.db, options.run.id, stepKey);\n            if (refreshed?.status === \"completed\") {\n                return decodeWorkflowV2StoredValue(refreshed.output_json);\n            }\n            throw new Error(`workflow v2 step \"${stepKey}\" could not be claimed`);\n        }\n        await markWorkflowV2RunCurrentStep({\n            db: options.db,\n            runId: options.run.id,\n            leaseOwner: options.run.lease_owner ?? \"\",\n            leaseEpoch: options.run.lease_epoch,\n            stepKey,\n        });\n        await mirrorWorkflowV2StepRunning({ db: options.db, runId: options.run.id, stepKey });\n        try {\n            const output = await fn();\n            const serializedOutputJson = workflowV2JsonString(output ?? null);\n            const checkpointDecision = measureWorkflowCheckpointJson(serializedOutputJson, options.checkpointPolicyConfig);\n            writeWorkflowV2CheckpointPolicyLog({\n                logger: options.logger,\n                workflowName: options.run.workflow_name,\n                stepKey,\n                decision: checkpointDecision,\n                config: options.checkpointPolicyConfig,\n            });\n            if (checkpointDecision.level === \"hard_limit\" &&\n                shouldEnforceWorkflowCheckpointLimit({\n                    mode: options.checkpointPolicyConfig.mode,\n                    workflowName: options.run.workflow_name,\n                })) {\n                throw createWorkflowCheckpointError({\n                    workflowName: options.run.workflow_name,\n                    stepKey,\n                    decision: checkpointDecision,\n                    hardLimitBytes: options.checkpointPolicyConfig.hardLimitBytes,\n                });\n            }\n            const committed = await completeWorkflowV2Step({\n                db: options.db,\n                runId: options.run.id,\n                stepKey,\n                leaseOwner: options.run.lease_owner ?? \"\",\n                leaseEpoch: options.run.lease_epoch,\n                output,\n                serializedOutputJson,\n            });\n            if (!committed) {\n                throw new Error(`workflow v2 step \"${stepKey}\" lost its lease before checkpoint commit`);\n            }\n            await mirrorWorkflowV2StepCompleted({ db: options.db, runId: options.run.id, stepKey });\n            return output;\n        }\n        catch (error) {\n            const errorJson = errorToJson(error);\n            const errorCode = error instanceof WorkflowCheckpointPolicyError ? error.errorCode : \"step_error\";\n            await failWorkflowV2Step({\n                db: options.db,\n                runId: options.run.id,\n                stepKey,\n                leaseOwner: options.run.lease_owner ?? \"\",\n                leaseEpoch: options.run.lease_epoch,\n                error: errorJson,\n                errorCode,\n            });\n            await mirrorWorkflowV2StepFailed({ db: options.db, runId: options.run.id, stepKey, error: errorJson });\n            throw error;\n        }\n    };\n    const sleep = async (duration) => {\n        sleepIndex += 1;\n        const stepKey = `sleep#${sleepIndex}`;\n        const existingTimer = await getWorkflowV2TimerByDedupe({\n            db: options.db,\n            runId: options.run.id,\n            dedupeKey: stepKey,\n        });\n        if (existingTimer?.status === \"fired\")\n            return;\n        const durationMs = parseWorkflowDurationMs(duration, \"wf.sleep() duration\");\n        const wakeAt = new Date(Date.now() + durationMs).toISOString();\n        await createWorkflowV2Timer({\n            db: options.db,\n            id: `${options.run.id}:${stepKey}`,\n            runId: options.run.id,\n            kind: \"sleep\",\n            fireAt: wakeAt,\n            dedupeKey: stepKey,\n        });\n        const paused = await pauseWorkflowV2Run({\n            db: options.db,\n            runId: options.run.id,\n            leaseOwner: options.run.lease_owner ?? \"\",\n            leaseEpoch: options.run.lease_epoch,\n            status: \"sleeping\",\n            currentStepKey: stepKey,\n            runnableAt: wakeAt,\n        });\n        if (!paused) {\n            throw new Error(`workflow v2 run \"${options.run.id}\" lost its lease before sleep checkpoint`);\n        }\n        await mirrorWorkflowV2RunPending({ db: options.db, runId: options.run.id, stepKey });\n        throw new WorkflowV2PauseSignal(\"sleeping\", stepKey, wakeAt, null);\n    };\n    const waitForEvent = async (eventName, timeout) => {\n        waitIndex += 1;\n        const stepKey = `wait:${eventName}#${waitIndex}`;\n        const signal = await claimWorkflowV2Signal({ db: options.db, runId: options.run.id, eventName });\n        if (signal)\n            return decodeWorkflowV2StoredValue(signal.payload_json);\n        let timeoutAt = null;\n        if (timeout != null) {\n            const timeoutMs = parseWorkflowDurationMs(timeout, \"wf.waitForEvent() timeout\");\n            timeoutAt = new Date(Date.now() + timeoutMs).toISOString();\n            await createWorkflowV2Timer({\n                db: options.db,\n                id: `${options.run.id}:${stepKey}:timeout`,\n                runId: options.run.id,\n                kind: \"wait_timeout\",\n                fireAt: timeoutAt,\n                dedupeKey: `${stepKey}:timeout`,\n            });\n        }\n        const paused = await pauseWorkflowV2Run({\n            db: options.db,\n            runId: options.run.id,\n            leaseOwner: options.run.lease_owner ?? \"\",\n            leaseEpoch: options.run.lease_epoch,\n            status: \"waiting\",\n            currentStepKey: stepKey,\n            runnableAt: timeoutAt,\n        });\n        if (!paused) {\n            throw new Error(`workflow v2 run \"${options.run.id}\" lost its lease before wait checkpoint`);\n        }\n        await mirrorWorkflowV2RunPending({ db: options.db, runId: options.run.id, stepKey });\n        throw new WorkflowV2PauseSignal(\"waiting\", stepKey, timeoutAt, eventName);\n    };\n    return {\n        ...options.baseCtx,\n        workflowId: options.run.id,\n        workflowName: options.run.workflow_name,\n        runId: options.run.id,\n        attempt: options.run.attempt_count,\n        stepAttempt: 0,\n        services: attachWorkflowDocumentServices(options.baseCtx.services, {\n            workflowId: options.run.id,\n            workflowName: options.run.workflow_name,\n            auth: options.baseCtx.auth,\n        }),\n        step,\n        sleep,\n        waitForEvent,\n        parallel: async (tasks) => Promise.all(tasks.map((task) => task())),\n    };\n}\nexport async function resumeWorkflowV2Run(options) {\n    const leaseMs = options.leaseMs ?? 30_000;\n    const checkpointPolicyConfig = options.checkpointPolicyConfig ?? resolveWorkflowCheckpointPolicyConfig();\n    const logger = options.logger ?? console;\n    const capacityDeferred = await deferWorkflowV2RunIfCapacityExhausted({\n        db: options.db,\n        runId: options.runId,\n        policy: options.capacityPolicy,\n    });\n    if (capacityDeferred)\n        return capacityDeferred;\n    const claimed = await claimWorkflowV2RunById({\n        db: options.db,\n        runId: options.runId,\n        workerId: options.workerId,\n        leaseMs,\n        capacityPolicy: options.capacityPolicy,\n    });\n    if (!claimed) {\n        const existing = await getWorkflowV2Run(options.db, options.runId);\n        if (!existing)\n            return { status: \"not_found\", runId: options.runId };\n        if (existing.status === \"completed\") {\n            await mirrorWorkflowV2RunCompleted({\n                db: options.db,\n                runId: existing.id,\n            });\n            return { status: \"completed\", runId: existing.id, workflowName: existing.workflow_name };\n        }\n        if (existing.status === \"failed\") {\n            const errorJson = parseJsonField(existing.error_json);\n            await mirrorWorkflowV2RunFailed({\n                db: options.db,\n                runId: existing.id,\n                retryCount: existing.retry_count,\n                error: errorJson,\n                errorCode: existing.error_code,\n            });\n            return {\n                status: \"failed\",\n                runId: existing.id,\n                workflowName: existing.workflow_name,\n                errorCode: existing.error_code ?? \"workflow_failed\",\n                error: storedRunErrorMessage(existing.error_json),\n            };\n        }\n        if (existing.status === \"cancelled\") {\n            return { status: \"cancelled\", runId: existing.id, workflowName: existing.workflow_name };\n        }\n        const capacityDeferredAfterClaimRace = await deferWorkflowV2RunIfCapacityExhausted({\n            db: options.db,\n            runId: existing.id,\n            policy: options.capacityPolicy,\n        });\n        if (capacityDeferredAfterClaimRace)\n            return capacityDeferredAfterClaimRace;\n        return {\n            status: isTerminalStatus(existing.status) ? \"skipped\" : \"skipped\",\n            runId: existing.id,\n            workflowName: existing.workflow_name,\n        };\n    }\n    await mirrorWorkflowV2RunClaimed(options.db, claimed);\n    const def = getWorkflowDef(claimed.workflow_name);\n    if (!def) {\n        const error = `workflow \"${claimed.workflow_name}\" is not registered in this runtime`;\n        const errorJson = { message: error };\n        await failWorkflowV2Run({\n            db: options.db,\n            runId: claimed.id,\n            leaseOwner: claimed.lease_owner ?? \"\",\n            leaseEpoch: claimed.lease_epoch,\n            error: errorJson,\n            errorCode: \"definition_missing\",\n        });\n        await mirrorWorkflowV2RunFailed({\n            db: options.db,\n            runId: claimed.id,\n            retryCount: claimed.retry_count,\n            error: errorJson,\n            errorCode: \"definition_missing\",\n        });\n        return {\n            status: \"failed\",\n            runId: claimed.id,\n            workflowName: claimed.workflow_name,\n            errorCode: \"definition_missing\",\n            error,\n        };\n    }\n    const baseCtx = options.buildCtx();\n    const workflowAuth = restoreWorkflowAuth(baseCtx.auth, claimed.user_id);\n    const wf = buildWorkflowV2Ctx({\n        baseCtx: { ...baseCtx, auth: workflowAuth },\n        db: options.db,\n        run: claimed,\n        leaseMs,\n        checkpointPolicyConfig,\n        logger,\n    });\n    const workflowArgs = decodeWorkflowV2StoredValue(claimed.args_json);\n    const stopHeartbeat = startWorkflowV2Heartbeat({ db: options.db, run: claimed, leaseMs });\n    try {\n        try {\n            const result = await def.handler(wf, (workflowArgs ?? {}));\n            const runBeforeCompletion = await getWorkflowV2Run(options.db, claimed.id);\n            if (runBeforeCompletion?.cancel_requested_at) {\n                throw new WorkflowV2CancelledSignal();\n            }\n            const serializedResultJson = workflowV2JsonString(result ?? null);\n            const resultDecision = measureWorkflowCheckpointJson(serializedResultJson, checkpointPolicyConfig);\n            writeWorkflowV2CheckpointPolicyLog({\n                logger,\n                workflowName: claimed.workflow_name,\n                stepKey: \"$result\",\n                decision: resultDecision,\n                config: checkpointPolicyConfig,\n            });\n            if (resultDecision.level === \"hard_limit\" &&\n                shouldEnforceWorkflowCheckpointLimit({\n                    mode: checkpointPolicyConfig.mode,\n                    workflowName: claimed.workflow_name,\n                })) {\n                throw createWorkflowResultError({\n                    workflowName: claimed.workflow_name,\n                    decision: resultDecision,\n                    hardLimitBytes: checkpointPolicyConfig.hardLimitBytes,\n                });\n            }\n            const committed = await completeWorkflowV2Run({\n                db: options.db,\n                runId: claimed.id,\n                leaseOwner: claimed.lease_owner ?? \"\",\n                leaseEpoch: claimed.lease_epoch,\n                result,\n                serializedResultJson,\n            });\n            if (!committed) {\n                const refreshed = await getWorkflowV2Run(options.db, claimed.id);\n                if (refreshed?.cancel_requested_at) {\n                    throw new WorkflowV2CancelledSignal();\n                }\n                throw new Error(`workflow v2 run \"${claimed.id}\" lost its lease before completion commit`);\n            }\n            await mirrorWorkflowV2RunCompleted({ db: options.db, runId: claimed.id });\n            return { status: \"completed\", runId: claimed.id, workflowName: claimed.workflow_name };\n        }\n        catch (error) {\n            if (error instanceof WorkflowV2PauseSignal) {\n                if (error.status === \"sleeping\") {\n                    return {\n                        status: \"sleeping\",\n                        runId: claimed.id,\n                        workflowName: claimed.workflow_name,\n                        stepKey: error.stepKey,\n                        wakeAt: error.wakeAt ?? \"\",\n                    };\n                }\n                return {\n                    status: \"waiting\",\n                    runId: claimed.id,\n                    workflowName: claimed.workflow_name,\n                    stepKey: error.stepKey,\n                    eventName: error.eventName ?? \"\",\n                    wakeAt: error.wakeAt ?? undefined,\n                };\n            }\n            const errorJson = errorToJson(error);\n            if (error instanceof WorkflowV2CancelledSignal ||\n                (await getWorkflowV2Run(options.db, claimed.id))?.cancel_requested_at) {\n                const cancelled = await cancelClaimedWorkflowV2Run({\n                    db: options.db,\n                    runId: claimed.id,\n                    leaseOwner: claimed.lease_owner ?? \"\",\n                    leaseEpoch: claimed.lease_epoch,\n                    error: errorJson,\n                });\n                if (cancelled) {\n                    await mirrorWorkflowV2RunFailed({\n                        db: options.db,\n                        runId: claimed.id,\n                        retryCount: claimed.retry_count,\n                        error: errorJson,\n                        errorCode: \"cancelled\",\n                    });\n                }\n                return { status: \"cancelled\", runId: claimed.id, workflowName: claimed.workflow_name };\n            }\n            if (error instanceof WorkflowCheckpointPolicyError || error instanceof WorkflowResultPolicyError) {\n                await failWorkflowV2Run({\n                    db: options.db,\n                    runId: claimed.id,\n                    leaseOwner: claimed.lease_owner ?? \"\",\n                    leaseEpoch: claimed.lease_epoch,\n                    error: errorJson,\n                    errorCode: error.errorCode,\n                });\n                await mirrorWorkflowV2RunFailed({\n                    db: options.db,\n                    runId: claimed.id,\n                    retryCount: claimed.retry_count,\n                    error: errorJson,\n                    errorCode: error.errorCode,\n                });\n                return {\n                    status: \"failed\",\n                    runId: claimed.id,\n                    workflowName: claimed.workflow_name,\n                    errorCode: error.errorCode,\n                    error: error.message,\n                };\n            }\n            const nextRetry = claimed.retry_count + 1;\n            if (nextRetry <= claimed.max_retries) {\n                const nextDelayMs = computeWorkflowV2RetryDelayMs(nextRetry);\n                const retryAt = new Date(Date.now() + nextDelayMs).toISOString();\n                const requeued = await requeueWorkflowV2Run({\n                    db: options.db,\n                    runId: claimed.id,\n                    leaseOwner: claimed.lease_owner ?? \"\",\n                    leaseEpoch: claimed.lease_epoch,\n                    retryCount: nextRetry,\n                    error: errorJson,\n                    errorCode: \"workflow_error\",\n                    runnableAt: retryAt,\n                });\n                if (requeued) {\n                    await mirrorWorkflowV2RunPending({\n                        db: options.db,\n                        runId: claimed.id,\n                        stepKey: claimed.current_step_key,\n                        retryCount: nextRetry,\n                        error: errorJson,\n                        errorCode: \"workflow_error\",\n                    });\n                    return {\n                        status: \"requeued\",\n                        runId: claimed.id,\n                        workflowName: claimed.workflow_name,\n                        retryCount: nextRetry,\n                        nextDelayMs,\n                        errorCode: \"workflow_error\",\n                    };\n                }\n            }\n            await failWorkflowV2Run({\n                db: options.db,\n                runId: claimed.id,\n                leaseOwner: claimed.lease_owner ?? \"\",\n                leaseEpoch: claimed.lease_epoch,\n                error: errorJson,\n                errorCode: \"workflow_error\",\n            });\n            await mirrorWorkflowV2RunFailed({\n                db: options.db,\n                runId: claimed.id,\n                retryCount: nextRetry,\n                error: errorJson,\n                errorCode: \"workflow_error\",\n            });\n            return {\n                status: \"failed\",\n                runId: claimed.id,\n                workflowName: claimed.workflow_name,\n                errorCode: \"workflow_error\",\n                error: errorMessage(error),\n            };\n        }\n    }\n    finally {\n        stopHeartbeat();\n    }\n}\n", "const DEFAULT_PRIORITY_AGING_INTERVAL_MS = 60_000;\nconst DEFAULT_PRIORITY_AGING_MAX_BOOST = 10;\nconst DEFAULT_QUEUE_SLA_WARN_MS = 60_000;\nconst DEFAULT_QUEUE_SLA_DEGRADED_MS = 300_000;\nconst DEFAULT_RETRY_AFTER_MS = 1_000;\nconst DEFAULT_CAPACITY_POLICY = {\n    globalConcurrency: 20,\n    perAppConcurrency: 8,\n    perUserConcurrency: 3,\n    perWorkflowNameConcurrency: 3,\n    priorityAgingIntervalMs: DEFAULT_PRIORITY_AGING_INTERVAL_MS,\n    priorityAgingMaxBoost: DEFAULT_PRIORITY_AGING_MAX_BOOST,\n    queueSlaWarnMs: DEFAULT_QUEUE_SLA_WARN_MS,\n    queueSlaDegradedMs: DEFAULT_QUEUE_SLA_DEGRADED_MS,\n    retryAfterMs: DEFAULT_RETRY_AFTER_MS,\n};\nfunction toTime(value) {\n    const ms = value instanceof Date ? value.getTime() : new Date(value).getTime();\n    return Number.isFinite(ms) ? ms : 0;\n}\nfunction isFinitePositive(value) {\n    return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\nfunction readPositiveInteger(env, key) {\n    const raw = env[key];\n    if (!raw)\n        return undefined;\n    const value = Number(raw);\n    if (!Number.isInteger(value) || value <= 0)\n        return undefined;\n    return value;\n}\nfunction hasExplicitCapacityEnv(env) {\n    return [\n        \"GENCOW_WORKFLOW_GLOBAL_CONCURRENCY\",\n        \"GENCOW_WORKFLOW_PER_APP_CONCURRENCY\",\n        \"GENCOW_WORKFLOW_PER_USER_CONCURRENCY\",\n        \"GENCOW_WORKFLOW_PER_NAME_CONCURRENCY\",\n        \"GENCOW_WORKFLOW_QUEUE_SLA_WARN_MS\",\n        \"GENCOW_WORKFLOW_QUEUE_SLA_DEGRADED_MS\",\n        \"GENCOW_WORKFLOW_PRIORITY_AGING_INTERVAL_MS\",\n        \"GENCOW_WORKFLOW_PRIORITY_AGING_MAX_BOOST\",\n        \"GENCOW_WORKFLOW_CAPACITY_RETRY_AFTER_MS\",\n    ].some((key) => env[key] != null && env[key] !== \"\");\n}\nexport function loadWorkflowV2CapacityPolicyFromEnv(env = process.env, options = {}) {\n    if (env.GENCOW_WORKFLOW_CAPACITY_DISABLED === \"true\")\n        return undefined;\n    if (!options.useDefaults && !hasExplicitCapacityEnv(env))\n        return undefined;\n    const base = options.useDefaults ? DEFAULT_CAPACITY_POLICY : {};\n    return {\n        globalConcurrency: readPositiveInteger(env, \"GENCOW_WORKFLOW_GLOBAL_CONCURRENCY\") ?? base.globalConcurrency,\n        perAppConcurrency: readPositiveInteger(env, \"GENCOW_WORKFLOW_PER_APP_CONCURRENCY\") ?? base.perAppConcurrency,\n        perUserConcurrency: readPositiveInteger(env, \"GENCOW_WORKFLOW_PER_USER_CONCURRENCY\") ?? base.perUserConcurrency,\n        perWorkflowNameConcurrency: readPositiveInteger(env, \"GENCOW_WORKFLOW_PER_NAME_CONCURRENCY\") ?? base.perWorkflowNameConcurrency,\n        queueSlaWarnMs: readPositiveInteger(env, \"GENCOW_WORKFLOW_QUEUE_SLA_WARN_MS\") ?? base.queueSlaWarnMs,\n        queueSlaDegradedMs: readPositiveInteger(env, \"GENCOW_WORKFLOW_QUEUE_SLA_DEGRADED_MS\") ?? base.queueSlaDegradedMs,\n        priorityAgingIntervalMs: readPositiveInteger(env, \"GENCOW_WORKFLOW_PRIORITY_AGING_INTERVAL_MS\") ?? base.priorityAgingIntervalMs,\n        priorityAgingMaxBoost: readPositiveInteger(env, \"GENCOW_WORKFLOW_PRIORITY_AGING_MAX_BOOST\") ?? base.priorityAgingMaxBoost,\n        retryAfterMs: readPositiveInteger(env, \"GENCOW_WORKFLOW_CAPACITY_RETRY_AFTER_MS\") ?? base.retryAfterMs,\n    };\n}\nexport function getWorkflowV2QueueAgeMs(candidate, now) {\n    return Math.max(0, toTime(now) - toTime(candidate.runnableAt));\n}\nexport function classifyWorkflowV2QueueSla(ageMs, policy = {}) {\n    const degradedMs = Math.max(0, policy.queueSlaDegradedMs ?? DEFAULT_QUEUE_SLA_DEGRADED_MS);\n    const warnMs = Math.max(0, policy.queueSlaWarnMs ?? DEFAULT_QUEUE_SLA_WARN_MS);\n    if (ageMs >= degradedMs)\n        return \"degraded\";\n    if (ageMs >= warnMs)\n        return \"warn\";\n    return \"ok\";\n}\nexport function getWorkflowV2EffectivePriority(candidate, policy, now) {\n    const ageMs = getWorkflowV2QueueAgeMs(candidate, now);\n    const intervalMs = Math.max(1, policy.priorityAgingIntervalMs ?? DEFAULT_PRIORITY_AGING_INTERVAL_MS);\n    const maxBoost = Math.max(0, policy.priorityAgingMaxBoost ?? DEFAULT_PRIORITY_AGING_MAX_BOOST);\n    return candidate.priority + Math.min(maxBoost, Math.floor(ageMs / intervalMs));\n}\nexport function decideWorkflowV2Capacity(options) {\n    const policy = options.policy ?? {};\n    const queueAgeMs = getWorkflowV2QueueAgeMs(options.candidate, options.snapshot.now);\n    const sla = classifyWorkflowV2QueueSla(queueAgeMs, policy);\n    const effectivePriority = getWorkflowV2EffectivePriority(options.candidate, policy, options.snapshot.now);\n    const retryAfterMs = Math.max(0, policy.retryAfterMs ?? DEFAULT_RETRY_AFTER_MS);\n    if (isFinitePositive(policy.globalConcurrency) &&\n        options.snapshot.globalRunning >= policy.globalConcurrency) {\n        return {\n            allowed: false,\n            reason: \"global_concurrency\",\n            signal: \"workflow_capacity_deferred\",\n            retryAfterMs,\n            effectivePriority,\n            queueAgeMs,\n            sla,\n        };\n    }\n    const appId = options.candidate.appId;\n    const runningForApp = appId ? (options.snapshot.runningByAppId?.[appId] ?? 0) : 0;\n    if (appId && isFinitePositive(policy.perAppConcurrency) && runningForApp >= policy.perAppConcurrency) {\n        return {\n            allowed: false,\n            reason: \"app_concurrency\",\n            signal: \"workflow_fairness_throttled\",\n            retryAfterMs,\n            effectivePriority,\n            queueAgeMs,\n            sla,\n        };\n    }\n    const userId = options.candidate.userId;\n    const runningForUser = userId ? (options.snapshot.runningByUserId?.[userId] ?? 0) : 0;\n    if (userId && isFinitePositive(policy.perUserConcurrency) && runningForUser >= policy.perUserConcurrency) {\n        return {\n            allowed: false,\n            reason: \"user_concurrency\",\n            signal: \"workflow_fairness_throttled\",\n            retryAfterMs,\n            effectivePriority,\n            queueAgeMs,\n            sla,\n        };\n    }\n    const runningForName = options.snapshot.runningByWorkflowName[options.candidate.workflowName] ?? 0;\n    if (isFinitePositive(policy.perWorkflowNameConcurrency) &&\n        runningForName >= policy.perWorkflowNameConcurrency) {\n        return {\n            allowed: false,\n            reason: \"workflow_name_concurrency\",\n            signal: \"workflow_fairness_throttled\",\n            retryAfterMs,\n            effectivePriority,\n            queueAgeMs,\n            sla,\n        };\n    }\n    return { allowed: true, effectivePriority, queueAgeMs, sla };\n}\nexport function sortWorkflowV2CandidatesByFairness(candidates, policy, now) {\n    return [...candidates].sort((a, b) => {\n        const priorityDiff = getWorkflowV2EffectivePriority(b, policy, now) - getWorkflowV2EffectivePriority(a, policy, now);\n        if (priorityDiff !== 0)\n            return priorityDiff;\n        const runnableDiff = toTime(a.runnableAt) - toTime(b.runnableAt);\n        if (runnableDiff !== 0)\n            return runnableDiff;\n        return a.id.localeCompare(b.id);\n    });\n}\n", "import { sql } from \"drizzle-orm\";\nimport { executeWorkflowV2Query } from \"./workflow-kernel-v2-db.js\";\nimport { workflowV2Jsonb, workflowV2JsonbFromString } from \"./workflow-kernel-v2-json.js\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function getWorkflowV2Step(db, runId, stepKey) {\n    const result = await executeWorkflowV2Query(db, sql `\n        SELECT *\n        FROM _gencow_workflow_steps_v2\n        WHERE run_id = ${runId}\n          AND step_key = ${stepKey}\n        LIMIT 1\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function claimWorkflowV2Step(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        INSERT INTO _gencow_workflow_steps_v2 (\n            run_id,\n            step_key,\n            step_index,\n            status,\n            input_hash,\n            attempt_count,\n            lease_owner,\n            lease_epoch,\n            lease_expires_at,\n            started_at,\n            heartbeat_at,\n            updated_at\n        )\n        VALUES (\n            ${options.runId},\n            ${options.stepKey},\n            ${options.stepIndex},\n            'running',\n            ${options.inputHash ?? null},\n            1,\n            ${options.workerId},\n            ${options.leaseEpoch},\n            NOW() + (${options.leaseMs} * INTERVAL '1 millisecond'),\n            NOW(),\n            NOW(),\n            NOW()\n        )\n        ON CONFLICT (run_id, step_key)\n        DO UPDATE SET\n            status = 'running',\n            input_hash = COALESCE(_gencow_workflow_steps_v2.input_hash, EXCLUDED.input_hash),\n            error_json = NULL,\n            error_code = NULL,\n            attempt_count = _gencow_workflow_steps_v2.attempt_count + 1,\n            lease_owner = EXCLUDED.lease_owner,\n            lease_epoch = EXCLUDED.lease_epoch,\n            lease_expires_at = EXCLUDED.lease_expires_at,\n            started_at = COALESCE(_gencow_workflow_steps_v2.started_at, NOW()),\n            heartbeat_at = NOW(),\n            completed_at = NULL,\n            updated_at = NOW()\n        WHERE _gencow_workflow_steps_v2.status <> 'completed'\n          AND (\n            _gencow_workflow_steps_v2.status <> 'running'\n            OR (\n              _gencow_workflow_steps_v2.lease_owner = EXCLUDED.lease_owner\n              AND _gencow_workflow_steps_v2.lease_epoch = EXCLUDED.lease_epoch\n            )\n            OR _gencow_workflow_steps_v2.lease_expires_at IS NULL\n            OR _gencow_workflow_steps_v2.lease_expires_at < NOW()\n          )\n        RETURNING *\n    `);\n    return rowsFromResult(result)[0] ?? null;\n}\nexport async function completeWorkflowV2Step(options) {\n    const outputJson = options.serializedOutputJson == null\n        ? workflowV2Jsonb(options.output ?? null)\n        : workflowV2JsonbFromString(options.serializedOutputJson);\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_steps_v2\n        SET\n            status = 'completed',\n            output_json = ${outputJson},\n            error_json = NULL,\n            error_code = NULL,\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE run_id = ${options.runId}\n          AND step_key = ${options.stepKey}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\nexport async function failWorkflowV2Step(options) {\n    const result = await executeWorkflowV2Query(options.db, sql `\n        UPDATE _gencow_workflow_steps_v2\n        SET\n            status = 'failed',\n            output_json = NULL,\n            error_json = ${workflowV2Jsonb(options.error)},\n            error_code = ${options.errorCode ?? null},\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            completed_at = NULL,\n            updated_at = NOW()\n        WHERE run_id = ${options.runId}\n          AND step_key = ${options.stepKey}\n          AND status = 'running'\n          AND lease_owner = ${options.leaseOwner}\n          AND lease_epoch = ${options.leaseEpoch}\n        RETURNING id\n    `);\n    return rowsFromResult(result).length === 1;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { collectWorkflowV2ErrorCodes, collectWorkflowV2ErrorMessages, executeWorkflowV2Query, isTransientWorkflowV2DbError, } from \"./workflow-kernel-v2-db.js\";\nfunction isMissingWorkflowV1ReadModelError(error) {\n    const codes = new Set(collectWorkflowV2ErrorCodes(error));\n    const message = collectWorkflowV2ErrorMessages(error).join(\"\\n\");\n    return (codes.has(\"42P01\") ||\n        (codes.has(\"23503\") && message.includes(\"_gencow_workflow_steps\")) ||\n        message.includes('relation \"_gencow_workflows\" does not exist') ||\n        message.includes(\"relation _gencow_workflows does not exist\") ||\n        message.includes('relation \"_gencow_workflow_steps\" does not exist') ||\n        message.includes(\"relation _gencow_workflow_steps does not exist\"));\n}\nasync function ignoreMissingV1ReadModel(run) {\n    try {\n        await run();\n    }\n    catch (error) {\n        if (!isMissingWorkflowV1ReadModelError(error) && !isTransientWorkflowV2DbError(error))\n            throw error;\n    }\n}\nfunction messageFromErrorJson(error) {\n    if (error && typeof error === \"object\" && typeof error.message === \"string\") {\n        return error.message;\n    }\n    try {\n        return JSON.stringify(error);\n    }\n    catch {\n        return String(error);\n    }\n}\nexport async function mirrorWorkflowV2RunClaimed(db, run) {\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'running',\n        error = NULL,\n        error_code = NULL,\n        retry_count = ${run.retry_count},\n        first_claimed_at = COALESCE(first_claimed_at, NOW()),\n        handler_started_at = COALESCE(handler_started_at, NOW()),\n        last_resume_attempt_at = NOW(),\n        updated_at = NOW(),\n        completed_at = NULL\n      WHERE id = ${run.id}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2StepRunning(options) {\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      INSERT INTO _gencow_workflow_steps (\n        workflow_id,\n        step_name,\n        status,\n        output,\n        error,\n        started_at,\n        updated_at,\n        completed_at\n      )\n      VALUES (\n        ${options.runId},\n        ${options.stepKey},\n        'running',\n        NULL,\n        NULL,\n        NOW(),\n        NOW(),\n        NULL\n      )\n      ON CONFLICT (workflow_id, step_name)\n      DO UPDATE SET\n        status = 'running',\n        error = NULL,\n        started_at = COALESCE(_gencow_workflow_steps.started_at, NOW()),\n        updated_at = NOW(),\n        completed_at = NULL\n    `);\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'running',\n        current_step = ${options.stepKey},\n        error = NULL,\n        error_code = NULL,\n        updated_at = NOW()\n      WHERE id = ${options.runId}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2StepCompleted(options) {\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflow_steps\n      SET\n        status = 'completed',\n        output = NULL,\n        error = NULL,\n        updated_at = NOW(),\n        completed_at = NOW()\n      WHERE workflow_id = ${options.runId}\n        AND step_name = ${options.stepKey}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2StepFailed(options) {\n    const message = messageFromErrorJson(options.error);\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflow_steps\n      SET\n        status = 'failed',\n        error = ${message},\n        updated_at = NOW(),\n        completed_at = NULL\n      WHERE workflow_id = ${options.runId}\n        AND step_name = ${options.stepKey}\n    `);\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'running',\n        current_step = ${options.stepKey},\n        error = ${message},\n        updated_at = NOW()\n      WHERE id = ${options.runId}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2RunPending(options) {\n    const message = options.error == null ? null : messageFromErrorJson(options.error);\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'pending',\n        current_step = ${options.stepKey},\n        retry_count = COALESCE(${options.retryCount ?? null}, retry_count),\n        error = ${message},\n        error_code = ${options.errorCode ?? null},\n        updated_at = NOW(),\n        completed_at = NULL\n      WHERE id = ${options.runId}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2RunCompleted(options) {\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'completed',\n        result = NULL,\n        error = NULL,\n        error_code = NULL,\n        current_step = NULL,\n        completed_at = NOW(),\n        updated_at = NOW()\n      WHERE id = ${options.runId}\n    `);\n    });\n}\nexport async function mirrorWorkflowV2RunFailed(options) {\n    const message = messageFromErrorJson(options.error);\n    await ignoreMissingV1ReadModel(async () => {\n        await executeWorkflowV2Query(options.db, sql `\n      UPDATE _gencow_workflows\n      SET\n        status = 'failed',\n        error = ${message},\n        error_code = ${options.errorCode},\n        retry_count = ${options.retryCount},\n        completed_at = NOW(),\n        updated_at = NOW()\n      WHERE id = ${options.runId}\n    `);\n    });\n}\n", "import { sql } from \"drizzle-orm\";\nimport { claimDueWorkflowV2Outbox, enqueueMissingQueuedWorkflowV2Outbox, fireDueWorkflowV2Timers, markWorkflowV2OutboxSent, } from \"./workflow-kernel-v2-durable.js\";\nimport { collectWorkflowV2ErrorCodes, collectWorkflowV2ErrorMessages, executeWorkflowV2Query, } from \"./workflow-kernel-v2-db.js\";\nimport { getWorkflowV2Run } from \"./workflow-kernel-v2-store.js\";\nimport { mirrorWorkflowV2RunFailed, mirrorWorkflowV2RunPending } from \"./workflow-kernel-v2-read-model.js\";\nimport { processWorkflowV2ExpiredDeadlines, terminalizeRequestedWorkflowV2Cancellations, } from \"./workflow-kernel-v2-terminalizers.js\";\nimport { getWorkflowResumeDeliveryJobId } from \"./workflow-resume-args.js\";\nimport { createSingleFlightWake } from \"./wake-signal/single-flight-wake.js\";\nexport const WORKFLOW_V2_RECONCILER_INTERVAL_MS = 5_000;\nexport const WORKFLOW_V2_RECONCILER_MIN_INTERVAL_MS = 1_000;\nexport const WORKFLOW_V2_RECONCILER_MAX_INTERVAL_MS = 300_000;\nexport const WORKFLOW_V2_RECONCILER_INTERVAL_ENV = \"GENCOW_WORKFLOW_RECONCILER_INTERVAL_MS\";\nconst EMPTY_WORKFLOW_V2_RECONCILE_RESULT = {\n    cancelled: 0,\n    deadlinesRequeued: 0,\n    deadlinesFailed: 0,\n    timersFired: 0,\n    orphanWakeRepaired: 0,\n    wakeSignalsSent: 0,\n};\nfunction isMissingWorkflowV2SchemaError(error) {\n    const codes = new Set(collectWorkflowV2ErrorCodes(error));\n    const message = collectWorkflowV2ErrorMessages(error).join(\"\\n\");\n    return (codes.has(\"42P01\") ||\n        (codes.has(\"42703\") && message.includes(\"_gencow_workflow\")) ||\n        message.includes(\"_gencow_workflow_runs_v2\") ||\n        message.includes(\"_gencow_workflow_timers_v2\") ||\n        message.includes(\"_gencow_workflow_outbox_v2\"));\n}\nexport async function reconcileWorkflowV2(options) {\n    const allowedNames = new Set(options.workflowNames);\n    if (allowedNames.size === 0) {\n        return {\n            cancelled: 0,\n            deadlinesRequeued: 0,\n            deadlinesFailed: 0,\n            timersFired: 0,\n            orphanWakeRepaired: 0,\n            wakeSignalsSent: 0,\n        };\n    }\n    try {\n        const cancelledRuns = (await terminalizeRequestedWorkflowV2Cancellations(options.db, options.limit ?? 100)).filter((run) => allowedNames.has(run.workflow_name));\n        const deadlineResult = await processWorkflowV2ExpiredDeadlines(options.db, options.limit ?? 100);\n        const deadlineRequeues = deadlineResult.requeued.filter((run) => allowedNames.has(run.workflow_name));\n        const deadlineFailures = deadlineResult.failed.filter((run) => allowedNames.has(run.workflow_name));\n        const firedTimers = await fireDueWorkflowV2Timers(options.db, options.limit ?? 100);\n        const repairedOutbox = await enqueueMissingQueuedWorkflowV2Outbox({\n            db: options.db,\n            workflowNames: allowedNames,\n            limit: options.limit ?? 100,\n        });\n        const dueOutbox = await claimDueWorkflowV2Outbox(options.db, options.limit ?? 100, allowedNames);\n        let wakeSignalsSent = 0;\n        for (const run of deadlineRequeues) {\n            await mirrorWorkflowV2RunPending({\n                db: options.db,\n                runId: run.id,\n                stepKey: run.current_step_key,\n                retryCount: run.retry_count,\n                error: run.error_json,\n                errorCode: run.error_code,\n            });\n        }\n        for (const run of [...cancelledRuns, ...deadlineFailures]) {\n            await mirrorWorkflowV2RunFailed({\n                db: options.db,\n                runId: run.id,\n                retryCount: run.retry_count,\n                error: run.error_json,\n                errorCode: run.error_code,\n            });\n        }\n        for (const outbox of dueOutbox) {\n            const run = await getWorkflowV2Run(options.db, outbox.run_id);\n            if (!run || !allowedNames.has(run.workflow_name))\n                continue;\n            options.scheduleResume(run.workflow_name, run.id, 0, outbox.id);\n            await markWorkflowV2OutboxSent(options.db, outbox.id);\n            wakeSignalsSent += 1;\n        }\n        return {\n            cancelled: cancelledRuns.length,\n            deadlinesRequeued: deadlineRequeues.length,\n            deadlinesFailed: deadlineFailures.length,\n            timersFired: firedTimers.length,\n            orphanWakeRepaired: repairedOutbox.length,\n            wakeSignalsSent,\n        };\n    }\n    catch (error) {\n        if (isMissingWorkflowV2SchemaError(error)) {\n            return EMPTY_WORKFLOW_V2_RECONCILE_RESULT;\n        }\n        throw error;\n    }\n}\nfunction workflowV2ErrorMessage(error) {\n    return error instanceof Error ? error.message : String(error);\n}\nfunction clampWorkflowV2ReconcilerIntervalMs(value) {\n    return Math.min(WORKFLOW_V2_RECONCILER_MAX_INTERVAL_MS, Math.max(WORKFLOW_V2_RECONCILER_MIN_INTERVAL_MS, value));\n}\nexport function resolveWorkflowV2ReconcilerIntervalMs(env, override) {\n    if (typeof override === \"number\" && Number.isFinite(override) && override > 0)\n        return override;\n    const rawValue = env?.[WORKFLOW_V2_RECONCILER_INTERVAL_ENV];\n    if (!rawValue)\n        return WORKFLOW_V2_RECONCILER_INTERVAL_MS;\n    const parsedValue = Number(rawValue);\n    if (!Number.isInteger(parsedValue) || parsedValue <= 0)\n        return WORKFLOW_V2_RECONCILER_INTERVAL_MS;\n    return clampWorkflowV2ReconcilerIntervalMs(parsedValue);\n}\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction timestampMs(value) {\n    if (value instanceof Date) {\n        const ms = value.getTime();\n        return Number.isFinite(ms) ? ms : null;\n    }\n    if (typeof value === \"string\" || typeof value === \"number\") {\n        const ms = new Date(value).getTime();\n        return Number.isFinite(ms) ? ms : null;\n    }\n    return null;\n}\nasync function getNextWorkflowV2WakeDueAtMs(options) {\n    const workflowNames = [...new Set(options.workflowNames)];\n    if (workflowNames.length === 0)\n        return null;\n    const result = await executeWorkflowV2Query(options.db, sql `\n      WITH next_candidates AS (\n        SELECT outbox.available_at AS due_at\n        FROM _gencow_workflow_outbox_v2 outbox\n        JOIN _gencow_workflow_runs_v2 run ON run.id = outbox.run_id\n        WHERE outbox.status = 'pending'\n          AND outbox.available_at > NOW()\n          AND run.workflow_name IN (${sql.join(workflowNames.map((name) => sql `${name}`), sql `, `)})\n\n        UNION ALL\n\n        SELECT timer.fire_at AS due_at\n        FROM _gencow_workflow_timers_v2 timer\n        JOIN _gencow_workflow_runs_v2 run ON run.id = timer.run_id\n        WHERE timer.status = 'pending'\n          AND timer.fire_at > NOW()\n          AND run.workflow_name IN (${sql.join(workflowNames.map((name) => sql `${name}`), sql `, `)})\n      )\n      SELECT MIN(due_at) AS next_due_at\n      FROM next_candidates\n    `);\n    return timestampMs(rowsFromResult(result)[0]?.next_due_at);\n}\nexport function startWorkflowV2Reconciler(params) {\n    if (params.workflows.length === 0)\n        return;\n    const logger = params.logger ?? console;\n    const intervalMs = resolveWorkflowV2ReconcilerIntervalMs(process.env, params.intervalMs);\n    const setIntervalImpl = params.setIntervalImpl ?? setInterval;\n    const setTimeoutImpl = params.setTimeoutImpl ?? setTimeout;\n    const clearTimeoutImpl = params.clearTimeoutImpl ?? clearTimeout;\n    const now = params.now ?? (() => new Date());\n    const workflowNames = params.workflows.map((workflow) => workflow.name);\n    let nextDueTimer = null;\n    function clearNextDueTimer() {\n        if (!nextDueTimer)\n            return;\n        clearTimeoutImpl(nextDueTimer);\n        nextDueTimer = null;\n    }\n    let tick;\n    async function scheduleNextDueTimer() {\n        if (!params.wakeSignalBus)\n            return;\n        const nextDueAtMs = await getNextWorkflowV2WakeDueAtMs({\n            db: params.db,\n            workflowNames,\n        }).catch((error) => {\n            if (isMissingWorkflowV2SchemaError(error))\n                return null;\n            logger.warn(`[workflow:v2] next wake lookup failed: ${workflowV2ErrorMessage(error)}`);\n            return null;\n        });\n        if (nextDueAtMs === null) {\n            clearNextDueTimer();\n            return;\n        }\n        const delayMs = nextDueAtMs - now().getTime();\n        if (delayMs < 0 || delayMs >= intervalMs) {\n            clearNextDueTimer();\n            return;\n        }\n        clearNextDueTimer();\n        nextDueTimer = setTimeoutImpl(() => {\n            nextDueTimer = null;\n            tick().catch((error) => {\n                logger.error(`[workflow:v2] next-due timer failed: ${workflowV2ErrorMessage(error)}`);\n            });\n        }, delayMs);\n        if (typeof nextDueTimer.unref === \"function\") {\n            nextDueTimer.unref();\n        }\n    }\n    tick = createSingleFlightWake(async () => {\n        clearNextDueTimer();\n        try {\n            const result = await reconcileWorkflowV2({\n                db: params.db,\n                workflowNames,\n                scheduleResume: (workflowName, runId, delayMs) => params.scheduler.runAfter(delayMs, params.getWorkflowResumeActionName(workflowName), { workflowId: runId }, {\n                    id: getWorkflowResumeDeliveryJobId(runId),\n                }),\n            });\n            if (result.cancelled > 0 ||\n                result.deadlinesRequeued > 0 ||\n                result.deadlinesFailed > 0 ||\n                result.timersFired > 0 ||\n                result.orphanWakeRepaired > 0 ||\n                result.wakeSignalsSent > 0) {\n                logger.log(`[workflow:v2] reconciled cancelled=${result.cancelled} deadlineRetries=${result.deadlinesRequeued} deadlines=${result.deadlinesFailed} timers=${result.timersFired} orphanWakes=${result.orphanWakeRepaired} wakeSignals=${result.wakeSignalsSent}`);\n            }\n            await scheduleNextDueTimer();\n            return result;\n        }\n        catch (error) {\n            logger.warn(`[workflow:v2] reconciler failed: ${workflowV2ErrorMessage(error)}`);\n            await scheduleNextDueTimer();\n            return EMPTY_WORKFLOW_V2_RECONCILE_RESULT;\n        }\n    });\n    const interval = setIntervalImpl(tick, intervalMs);\n    if (typeof interval.unref === \"function\") {\n        interval.unref();\n    }\n    if (params.wakeSignalBus) {\n        const runStartupScan = async () => {\n            await tick().catch((error) => {\n                logger.warn(`[workflow:v2] startup scan failed: ${workflowV2ErrorMessage(error)}`);\n            });\n        };\n        void params.wakeSignalBus\n            .listen(params.wakeSignalKinds ?? [\"workflow\"], async () => {\n            await tick();\n        }, { onListen: runStartupScan })\n            .then(() => {\n            logger.log(\"[workflow:v2] wake listener registered\");\n        })\n            .catch((error) => {\n            logger.warn(`[workflow:v2] wake listener disabled: ${workflowV2ErrorMessage(error)}`);\n        });\n    }\n}\n", "import { sql } from \"drizzle-orm\";\nimport { executeWorkflowV2Query } from \"./workflow-kernel-v2-db.js\";\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nexport async function terminalizeRequestedWorkflowV2Cancellations(db, limit = 100) {\n    const result = await executeWorkflowV2Query(db, sql `\n        WITH candidate AS (\n            SELECT id\n            FROM _gencow_workflow_runs_v2\n            WHERE cancel_requested_at IS NOT NULL\n              AND completed_at IS NULL\n              AND (\n                  status IN ('queued', 'sleeping', 'waiting')\n                  OR (\n                      status = 'running'\n                      AND (lease_expires_at IS NULL OR lease_expires_at < NOW())\n                  )\n              )\n            ORDER BY cancel_requested_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        )\n        UPDATE _gencow_workflow_runs_v2 run\n        SET\n            status = 'cancelled',\n            error_code = 'cancelled',\n            error_json = jsonb_build_object('message', 'Cancelled by user'),\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE run.id IN (SELECT id FROM candidate)\n        RETURNING run.*\n    `);\n    return rowsFromResult(result);\n}\nexport async function processWorkflowV2ExpiredDeadlines(db, limit = 100) {\n    const activeRetryResult = await executeWorkflowV2Query(db, sql `\n        WITH candidate AS (\n            SELECT id, retry_count\n            FROM _gencow_workflow_runs_v2\n            WHERE status = 'running'\n              AND active_deadline_at IS NOT NULL\n              AND active_deadline_at <= NOW()\n              AND retry_count < max_retries\n              AND completed_at IS NULL\n            ORDER BY active_deadline_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        ),\n        requeued AS (\n            UPDATE _gencow_workflow_runs_v2 run\n            SET\n                status = 'queued',\n                retry_count = run.retry_count + 1,\n                error_code = 'active_timeout',\n                error_json = jsonb_build_object(\n                    'message',\n                    'Workflow active execution deadline exceeded; retry scheduled',\n                    'activeDeadlineAt',\n                    run.active_deadline_at,\n                    'retryable',\n                    true\n                ),\n                runnable_at = NOW() + (\n                    (30000 * POWER(3, GREATEST(0, candidate.retry_count))) * INTERVAL '1 millisecond'\n                ),\n                lease_owner = NULL,\n                lease_expires_at = NULL,\n                heartbeat_at = NULL,\n                active_started_at = NULL,\n                active_deadline_at = NULL,\n                completed_at = NULL,\n                updated_at = NOW()\n            FROM candidate\n            WHERE run.id = candidate.id\n            RETURNING run.*\n        ),\n        wake_outbox AS (\n            INSERT INTO _gencow_workflow_outbox_v2 (\n                id,\n                run_id,\n                kind,\n                available_at,\n                status\n            )\n            SELECT\n                'deadline-retry:' || id || ':' || retry_count,\n                id,\n                'wake_retry',\n                runnable_at,\n                'pending'\n            FROM requeued\n            ON CONFLICT (id) DO NOTHING\n            RETURNING id\n        )\n        SELECT *\n        FROM requeued\n    `);\n    const activeFailureResult = await executeWorkflowV2Query(db, sql `\n        WITH candidate AS (\n            SELECT id\n            FROM _gencow_workflow_runs_v2\n            WHERE status = 'running'\n              AND active_deadline_at IS NOT NULL\n              AND active_deadline_at <= NOW()\n              AND retry_count >= max_retries\n              AND completed_at IS NULL\n            ORDER BY active_deadline_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        )\n        UPDATE _gencow_workflow_runs_v2 run\n        SET\n            status = 'failed',\n            error_code = 'active_timeout',\n            error_json = jsonb_build_object(\n                'message',\n                'Workflow active execution deadline exceeded',\n                'activeDeadlineAt',\n                active_deadline_at,\n                'retryable',\n                false\n            ),\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE run.id IN (SELECT id FROM candidate)\n        RETURNING run.*\n    `);\n    const lifecycleResult = await executeWorkflowV2Query(db, sql `\n        WITH candidate AS (\n            SELECT id\n            FROM _gencow_workflow_runs_v2\n            WHERE status IN ('queued', 'running', 'sleeping', 'waiting')\n              AND lifecycle_deadline_at IS NOT NULL\n              AND lifecycle_deadline_at <= NOW()\n              AND completed_at IS NULL\n              AND NOT (\n                status IN ('queued', 'running')\n                AND current_step_key IS NULL\n                AND active_started_at IS NULL\n              )\n            ORDER BY lifecycle_deadline_at ASC, created_at ASC\n            FOR UPDATE SKIP LOCKED\n            LIMIT ${limit}\n        )\n        UPDATE _gencow_workflow_runs_v2 run\n        SET\n            status = 'failed',\n            error_code = 'lifecycle_timeout',\n            error_json = jsonb_build_object(\n                'message',\n                'Workflow lifecycle deadline exceeded',\n                'lifecycleDeadlineAt',\n                lifecycle_deadline_at\n            ),\n            lease_owner = NULL,\n            lease_expires_at = NULL,\n            heartbeat_at = NULL,\n            active_started_at = NULL,\n            active_deadline_at = NULL,\n            completed_at = NOW(),\n            updated_at = NOW()\n        WHERE run.id IN (SELECT id FROM candidate)\n        RETURNING run.*\n    `);\n    return {\n        requeued: rowsFromResult(activeRetryResult),\n        failed: [\n            ...rowsFromResult(activeFailureResult),\n            ...rowsFromResult(lifecycleResult),\n        ],\n    };\n}\nexport async function failWorkflowV2ExpiredDeadlines(db, limit = 100) {\n    const result = await processWorkflowV2ExpiredDeadlines(db, limit);\n    return result.failed;\n}\n", "import { readFileSync } from \"fs\";\nimport { resolve } from \"path\";\nimport { CLOUD_DASHBOARD_EXPLICIT_ROUTES, CLOUD_DASHBOARD_SYSTEM_PATH_PREFIXES, createCloudDashboardHandler, registerCloudDashboardRoutes, shouldServeCloudDashboardSpaFallback, } from \"./server-cloud-dashboard-static.js\";\nfunction collectLegacyOnlyReadinessInventory(params) {\n    const legacyQueries = params.getRegisteredQueries();\n    const legacyMutations = params.getRegisteredMutations();\n    return {\n        legacyQueries: legacyQueries.map((query, index) => ({\n            key: typeof query === \"string\" ? query : String(index),\n            allowAnonymous: false,\n        })),\n        legacyMutations: legacyMutations.map((mutation, index) => ({\n            key: typeof mutation === \"string\" ? mutation : String(index),\n            allowAnonymous: false,\n        })),\n        procedureQueries: [],\n        procedureMutations: [],\n        totalQueries: legacyQueries.length,\n        totalMutations: legacyMutations.length,\n        totalOperations: legacyQueries.length + legacyMutations.length,\n    };\n}\nexport const SYSTEM_PATH_PREFIXES = CLOUD_DASHBOARD_SYSTEM_PATH_PREFIXES;\nexport { CLOUD_DASHBOARD_EXPLICIT_ROUTES };\nexport function buildEmbeddedDashboardSearchPaths(params) {\n    return [\n        ...(params.envDashboardDir ? [params.envDashboardDir] : []),\n        resolve(params.importMetaDirname, \"../../../apps/system/dashboard/dist\"),\n        resolve(params.cwd, \"apps/system/dashboard/dist\"),\n        resolve(params.importMetaDirname, \"../dashboard\"),\n        resolve(params.importMetaDirname, \"dashboard\"),\n        resolve(params.cwd, \"node_modules/gencow/dashboard\"),\n        ...(params.functionsPath ? [resolve(params.functionsPath, \"../node_modules/gencow/dashboard\")] : []),\n    ];\n}\nexport function buildCloudDashboardSearchPaths(params) {\n    return [\n        resolve(params.importMetaDirname, \"../../../apps/system/cloud-dashboard/dist\"),\n        resolve(params.cwd, \"apps/system/cloud-dashboard/dist\"),\n        resolve(params.importMetaDirname, \"../cloud-dashboard\"),\n        resolve(params.importMetaDirname, \"cloud-dashboard\"),\n    ];\n}\nexport function findExistingPath(paths, existsSyncImpl) {\n    return paths.find((path) => existsSyncImpl(path));\n}\nexport async function registerEmbeddedDashboardRoutes(params) {\n    if (params.isBaas || params.isPlatform) {\n        return false;\n    }\n    const existsSyncImpl = params.existsSyncImpl ?? ((path) => false);\n    const bunFileFactory = params.bunFileFactory ?? ((path) => Bun.file(path));\n    const logger = params.logger ?? console;\n    const dashboardDir = findExistingPath(buildEmbeddedDashboardSearchPaths({\n        envDashboardDir: params.envDashboardDir,\n        importMetaDirname: params.importMetaDirname,\n        cwd: params.cwd,\n        functionsPath: params.functionsPath,\n    }), existsSyncImpl);\n    if (!dashboardDir) {\n        return false;\n    }\n    logger.log(`[dashboard] Serving embedded dashboard from: ${dashboardDir}`);\n    params.app.use(\"/_dashboard/*\", params.serveStaticImpl({\n        root: dashboardDir,\n        rewriteRequestPath: (path) => path.replace(/^\\/_dashboard/, \"\"),\n    }));\n    params.app.get(\"/_dashboard/*\", async (c) => {\n        const file = bunFileFactory(resolve(dashboardDir, \"index.html\"));\n        if (await file.exists()) {\n            return c.html(await file.text());\n        }\n        return c.notFound();\n    });\n    return true;\n}\nexport function loadCloudDashboardState(params) {\n    if (!params.isPlatform) {\n        return {};\n    }\n    const existsSyncImpl = params.existsSyncImpl ?? ((path) => false);\n    const readFileSyncImpl = params.readFileSyncImpl ?? readFileSync;\n    const logger = params.logger ?? console;\n    const dir = findExistingPath(buildCloudDashboardSearchPaths({\n        importMetaDirname: params.importMetaDirname,\n        cwd: params.cwd,\n    }), existsSyncImpl);\n    if (!dir) {\n        return {};\n    }\n    logger.log(`[cloud-dashboard] Serving from: ${dir}`);\n    const indexPath = resolve(dir, \"index.html\");\n    const html = existsSyncImpl(indexPath) ? readFileSyncImpl(indexPath, \"utf-8\") : undefined;\n    return { dir, html };\n}\nexport function shouldServeSpaFallback(path, prefixes = SYSTEM_PATH_PREFIXES) {\n    return shouldServeCloudDashboardSpaFallback(path, prefixes);\n}\nexport function registerCloudDashboardSpa(params) {\n    if (!params.dir || !params.html) {\n        return;\n    }\n    registerCloudDashboardRoutes({\n        app: params.app,\n        handler: createCloudDashboardHandler({\n            cloudDashboardDir: params.dir,\n            indexHtml: params.html,\n            canServeSpaFallback: shouldServeSpaFallback,\n        }),\n    });\n}\nexport function createDashboardWebSocketHandlers(params) {\n    return {\n        onOpen(_, ws) {\n            params.registerClient(ws);\n            if (params.isBaas) {\n                params.wsTimers.set(ws, Date.now());\n            }\n        },\n        onMessage(event, ws) {\n            const data = typeof event.data === \"string\" ? event.data : String(event.data);\n            try {\n                const message = JSON.parse(data);\n                if (message.type === \"log:subscribe\") {\n                    params.subscribeToLogs(ws);\n                    return;\n                }\n                if (message.type === \"log:unsubscribe\") {\n                    params.unsubscribeFromLogs(ws);\n                    return;\n                }\n            }\n            catch {\n                /* fall through */\n            }\n            params.handleWsMessage(ws, data);\n        },\n        onClose(_, ws) {\n            if (params.isBaas) {\n                const openedAt = params.wsTimers.get(ws);\n                if (openedAt) {\n                    params.runtimeBuffer.add(\"realtime_ms\", Date.now() - openedAt);\n                    params.wsTimers.delete(ws);\n                }\n            }\n            params.unsubscribeFromLogs(ws);\n            params.deregisterClient(ws);\n        },\n    };\n}\nexport function createReadinessHandler(params) {\n    const uptimeSeconds = params.uptimeSeconds ?? (() => process.uptime());\n    return async (c) => {\n        try {\n            await params.rawSql(\"SELECT 1 AS ok\");\n            const inventory = params.getOperationInventory?.() ?? collectLegacyOnlyReadinessInventory(params);\n            return c.json({\n                status: \"ready\",\n                pid: process.pid,\n                db: \"ok\",\n                queries: inventory.totalQueries,\n                mutations: inventory.totalMutations,\n                legacyQueries: inventory.legacyQueries.length,\n                legacyMutations: inventory.legacyMutations.length,\n                procedureQueries: inventory.procedureQueries.length,\n                procedureMutations: inventory.procedureMutations.length,\n                uptime: Math.floor(uptimeSeconds()),\n            });\n        }\n        catch (error) {\n            const message = error instanceof Error ? error.message : String(error);\n            return c.json({\n                status: \"not_ready\",\n                pid: process.pid,\n                error: message,\n                uptime: Math.floor(uptimeSeconds()),\n            }, 503);\n        }\n    };\n}\nexport function buildRootStatusPayload(uptimeSeconds = () => process.uptime()) {\n    return {\n        status: \"running\",\n        version: \"0.1.0\",\n        uptime: Math.floor(uptimeSeconds()),\n    };\n}\nexport function ensureInternalUrl(env, port) {\n    if (!env.GENCOW_INTERNAL_URL) {\n        env.GENCOW_INTERNAL_URL = `http://localhost:${port}`;\n    }\n}\nexport function assertBaasPortEnv(params) {\n    if (!params.isBaas || params.env.PORT) {\n        return;\n    }\n    (params.logger ?? console).error(\"[FATAL] BaaS app started without PORT env var. All apps would collide on :5456. Exiting.\");\n    (params.exit ?? process.exit)(1);\n}\nexport function buildServerStartupBanner(params) {\n    const apiUrl = `http://localhost:${params.port}`;\n    const wsUrl = `ws://localhost:${params.port}/ws`;\n    const stackStr = `Bun + Hono + Drizzle + ${params.driver === \"postgres\" ? \"PostgreSQL\" : \"PGlite\"}`;\n    const width = 58;\n    const pad = (value) => \"  \" + value.padEnd(width);\n    const line = \"\u2550\".repeat(width + 2);\n    const dashboardLine = params.dashboardEmbedded\n        ? `\\n\u2551${pad(`Dashboard: http://localhost:${params.port}/_dashboard`)}\u2551`\n        : \"\";\n    return `\n\u2554${line}\u2557\n\u2551${pad(\"\uD83D\uDE80 Gencow API Server Running\")}\u2551\n\u2551${pad(\"\")}\u2551\n\u2551${pad(`API:       ${apiUrl}`)}\u2551\n\u2551${pad(`WebSocket: ${wsUrl}`)}\u2551${dashboardLine}\n\u2551${pad(\"\")}\u2551\n\u2551${pad(`Stack: ${stackStr}`)}\u2551\n\u255A${line}\u255D\n`;\n}\n", "import { existsSync, readFileSync, statSync } from \"fs\";\nimport { extname, isAbsolute, relative, resolve } from \"path\";\nimport { brotliCompressSync, gzipSync } from \"zlib\";\nexport const DASHBOARD_MIME_MAP = {\n    \".html\": \"text/html\",\n    \".js\": \"application/javascript\",\n    \".mjs\": \"application/javascript\",\n    \".css\": \"text/css\",\n    \".json\": \"application/json\",\n    \".png\": \"image/png\",\n    \".jpg\": \"image/jpeg\",\n    \".jpeg\": \"image/jpeg\",\n    \".svg\": \"image/svg+xml\",\n    \".ico\": \"image/x-icon\",\n    \".woff\": \"font/woff\",\n    \".woff2\": \"font/woff2\",\n    \".ttf\": \"font/ttf\",\n    \".map\": \"application/json\",\n    \".txt\": \"text/plain\",\n    \".webmanifest\": \"application/manifest+json\",\n    \".xml\": \"application/xml\",\n    \".wasm\": \"application/wasm\",\n};\nexport const CLOUD_DASHBOARD_EXPLICIT_ROUTES = [\"/\", \"/login\", \"/signup\"];\nexport const CLOUD_DASHBOARD_SYSTEM_PATH_PREFIXES = [\n    \"/api/\",\n    \"/health\",\n    \"/ws\",\n    \"/_gencow/\",\n    \"/_admin\",\n    \"/_dashboard\",\n    \"/_proxy/\",\n    \"/internal/\",\n    \"/platform/\",\n];\nconst COMPRESSIBLE_DASHBOARD_EXTENSIONS = new Set([\n    \".css\",\n    \".html\",\n    \".js\",\n    \".json\",\n    \".mjs\",\n    \".svg\",\n    \".txt\",\n    \".webmanifest\",\n    \".xml\",\n]);\nconst STATIC_ASSET_PATH_PREFIXES = [\"/assets/\"];\nconst STATIC_ASSET_FILE_NAMES = new Set([\n    \"/apple-touch-icon.png\",\n    \"/favicon.ico\",\n    \"/manifest.json\",\n    \"/robots.txt\",\n    \"/site.webmanifest\",\n]);\nconst encodedDashboardBodyCache = new Map();\nconst encodedDashboardBodyCacheTtlMs = 10 * 60 * 1000;\nconst encodedDashboardBodyCacheMaxEntries = 120;\nfunction acceptsEncoding(value, encoding) {\n    return value\n        .toLowerCase()\n        .split(\",\")\n        .map((part) => part.trim())\n        .some((token) => {\n        if (!token.startsWith(encoding))\n            return false;\n        const q = token.match(/;\\s*q=([0-9.]+)/)?.[1];\n        return q === undefined || Number(q) > 0;\n    });\n}\nfunction preferredDashboardEncoding(acceptEncoding, ext) {\n    if (!COMPRESSIBLE_DASHBOARD_EXTENSIONS.has(ext.toLowerCase()))\n        return null;\n    if (acceptsEncoding(acceptEncoding, \"br\"))\n        return \"br\";\n    if (acceptsEncoding(acceptEncoding, \"gzip\"))\n        return \"gzip\";\n    return null;\n}\nfunction toBuffer(content) {\n    return Buffer.isBuffer(content) ? content : Buffer.from(content);\n}\nfunction pruneEncodedDashboardBodyCache(now = Date.now()) {\n    for (const [key, value] of encodedDashboardBodyCache) {\n        if (now - value.createdAt > encodedDashboardBodyCacheTtlMs)\n            encodedDashboardBodyCache.delete(key);\n    }\n    while (encodedDashboardBodyCache.size > encodedDashboardBodyCacheMaxEntries) {\n        const oldest = encodedDashboardBodyCache.keys().next().value;\n        if (!oldest)\n            break;\n        encodedDashboardBodyCache.delete(oldest);\n    }\n}\nfunction dashboardCacheKey(filePath, bodySize, encoding) {\n    let mtimeMs = 0;\n    try {\n        mtimeMs = statSync(filePath).mtimeMs;\n    }\n    catch {\n        mtimeMs = 0;\n    }\n    return `${filePath}:${mtimeMs}:${bodySize}:${encoding}`;\n}\nfunction encodeDashboardBody(body, encoding, cacheKey) {\n    if (!encoding || body.byteLength === 0)\n        return { body, encoding: null };\n    pruneEncodedDashboardBodyCache();\n    if (cacheKey) {\n        const cached = encodedDashboardBodyCache.get(cacheKey);\n        if (cached)\n            return { body: cached.body, encoding };\n    }\n    const encoded = encoding === \"br\" ? brotliCompressSync(body) : gzipSync(body);\n    if (encoded.byteLength >= body.byteLength)\n        return { body, encoding: null };\n    if (cacheKey)\n        encodedDashboardBodyCache.set(cacheKey, { body: encoded, createdAt: Date.now() });\n    return { body: encoded, encoding };\n}\nfunction requestHeader(c, name) {\n    const direct = c.req?.header?.(name);\n    if (typeof direct === \"string\")\n        return direct;\n    const fromHeaders = c.req?.headers?.get?.(name);\n    return typeof fromHeaders === \"string\" ? fromHeaders : \"\";\n}\nfunction normalizeRequestPath(path) {\n    if (!path)\n        return \"/\";\n    return path.startsWith(\"/\") ? path : `/${path}`;\n}\nfunction resolveDashboardFilePath(root, requestPath) {\n    const trimmedPath = normalizeRequestPath(requestPath).replace(/^\\/+/, \"\") || \"index.html\";\n    let decodedPath;\n    try {\n        decodedPath = decodeURIComponent(trimmedPath);\n    }\n    catch {\n        return null;\n    }\n    if (decodedPath.includes(\"\\0\") || decodedPath.split(/[\\\\/]+/).includes(\"..\")) {\n        return null;\n    }\n    const filePath = resolve(root, decodedPath);\n    const relativePath = relative(root, filePath);\n    if (!relativePath || relativePath.startsWith(\"..\") || isAbsolute(relativePath)) {\n        return null;\n    }\n    return filePath;\n}\nexport function resolveCloudDashboardDocumentPath(params) {\n    const requestPath = normalizeRequestPath(params.requestPath);\n    if (requestPath === \"/\")\n        return null;\n    const exactPath = resolveDashboardFilePath(params.root, requestPath);\n    if (!exactPath)\n        return null;\n    if (params.fileExists(exactPath) && params.isFile(exactPath))\n        return exactPath;\n    const directoryIndexPath = resolveDashboardFilePath(params.root, `${requestPath.replace(/\\/$/, \"\")}/index.html`);\n    if (directoryIndexPath &&\n        params.fileExists(directoryIndexPath) &&\n        params.isFile(directoryIndexPath)) {\n        return directoryIndexPath;\n    }\n    return null;\n}\nexport function shouldServeCloudDashboardSpaFallback(path, prefixes = CLOUD_DASHBOARD_SYSTEM_PATH_PREFIXES) {\n    const normalizedPath = normalizeRequestPath(path);\n    return !prefixes.some((prefix) => normalizedPath.startsWith(prefix));\n}\nexport function isCloudDashboardStaticAssetPath(path, mimeMap = DASHBOARD_MIME_MAP) {\n    const normalizedPath = normalizeRequestPath(path);\n    if (STATIC_ASSET_PATH_PREFIXES.some((prefix) => normalizedPath.startsWith(prefix)))\n        return true;\n    if (STATIC_ASSET_FILE_NAMES.has(normalizedPath))\n        return true;\n    const ext = extname(normalizedPath).toLowerCase();\n    return Boolean(ext && mimeMap[ext]);\n}\nexport function findCloudDashboardDir(searchPaths, fileExists = existsSync) {\n    return searchPaths.find((candidate) => fileExists(candidate));\n}\nfunction buildDashboardResponse(params) {\n    const encoded = encodeDashboardBody(params.body, params.encoding, params.cacheKey);\n    const headers = new Headers({\n        \"Content-Type\": params.contentType,\n        \"Cache-Control\": params.cacheControl,\n        \"Content-Length\": String(encoded.body.byteLength),\n    });\n    if (encoded.encoding) {\n        headers.set(\"Content-Encoding\", encoded.encoding);\n        headers.set(\"Vary\", \"Accept-Encoding\");\n    }\n    const body = new Blob([\n        encoded.body.buffer.slice(encoded.body.byteOffset, encoded.body.byteOffset + encoded.body.byteLength),\n    ]);\n    return new Response(params.method === \"HEAD\" ? null : body, { headers });\n}\nexport function createCloudDashboardHandler(params) {\n    const fileExists = params.fileExists ?? existsSync;\n    const isFile = params.isFile ?? ((path) => statSync(path).isFile());\n    const readFile = params.readFile ?? readFileSync;\n    const mimeMap = params.mimeMap ?? DASHBOARD_MIME_MAP;\n    const canServeSpaFallback = params.canServeSpaFallback ?? shouldServeCloudDashboardSpaFallback;\n    return (c) => {\n        const reqPath = normalizeRequestPath(c.req.path);\n        const method = String(c.req.method ?? \"\").toUpperCase();\n        if (!canServeSpaFallback(reqPath)) {\n            return c.notFound();\n        }\n        const requestedFilePath = resolveDashboardFilePath(params.cloudDashboardDir, reqPath);\n        if (!requestedFilePath) {\n            return c.notFound();\n        }\n        const documentPath = resolveCloudDashboardDocumentPath({\n            root: params.cloudDashboardDir,\n            requestPath: reqPath,\n            fileExists,\n            isFile,\n        });\n        if (documentPath) {\n            const ext = extname(documentPath).toLowerCase();\n            const body = toBuffer(readFile(documentPath));\n            const encoding = preferredDashboardEncoding(requestHeader(c, \"Accept-Encoding\"), ext);\n            return buildDashboardResponse({\n                body,\n                contentType: mimeMap[ext] || \"application/octet-stream\",\n                cacheControl: ext === \".html\" ? \"no-cache\" : \"public, max-age=31536000, immutable\",\n                method,\n                encoding,\n                cacheKey: encoding ? dashboardCacheKey(documentPath, body.byteLength, encoding) : undefined,\n            });\n        }\n        if (isCloudDashboardStaticAssetPath(reqPath, mimeMap)) {\n            return c.notFound();\n        }\n        return buildDashboardResponse({\n            body: Buffer.from(params.indexHtml),\n            contentType: \"text/html\",\n            cacheControl: \"no-cache\",\n            method,\n            encoding: preferredDashboardEncoding(requestHeader(c, \"Accept-Encoding\"), \".html\"),\n        });\n    };\n}\nexport function registerCloudDashboardRoutes(params) {\n    for (const route of CLOUD_DASHBOARD_EXPLICIT_ROUTES) {\n        params.app.get(route, params.handler);\n    }\n    params.app.get(\"/*\", params.handler);\n}\n", "export function createHttpGatewayFanout(deps) {\n    return {\n        async notify(event) {\n            if (deps.notifyGatewayAsync) {\n                await deps.notifyGatewayAsync(event);\n                return;\n            }\n            deps.notifyGateway?.(event);\n        },\n    };\n}\n", "import { subscriptionKeyMatchesQueryKey, verifyRealtimeChannelToken, verifyRealtimeQuerySubscriptionToken, } from \"@gencow/core\";\nexport function createLocalRealtimeFanout(options) {\n    const generatedCrudRealtimeEmitMode = options?.generatedCrudRealtimeEmitMode ?? \"dual\";\n    const subscribers = new Map();\n    const authorizedQuerySubscribers = new Map();\n    const channelSubscribers = new Map();\n    const connectedClients = new Set();\n    const nowMs = options?.nowMs ?? Date.now;\n    function deregisterClient(ws) {\n        connectedClients.delete(ws);\n        for (const clients of subscribers.values()) {\n            clients.delete(ws);\n        }\n        for (const clients of authorizedQuerySubscribers.values()) {\n            clients.delete(ws);\n        }\n        for (const clients of channelSubscribers.values()) {\n            clients.delete(ws);\n        }\n    }\n    function sendEmit(queryKey, data) {\n        const clients = subscribers.get(queryKey);\n        if (!clients || clients.size === 0)\n            return;\n        const message = JSON.stringify({\n            type: \"query:updated\",\n            query: queryKey,\n            data,\n        });\n        for (const ws of clients) {\n            try {\n                ws.send(message);\n            }\n            catch {\n                clients.delete(ws);\n            }\n        }\n    }\n    function sendInvalidate(queryKeys) {\n        const targets = new Map();\n        collectLegacyInvalidateTargets(subscribers, queryKeys, targets);\n        for (const [ws, keys] of targets) {\n            try {\n                ws.send(JSON.stringify({ type: \"invalidate\", queries: [...keys] }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n    }\n    function collectLegacyInvalidateTargets(registry, queryKeys, targets) {\n        for (const queryKey of queryKeys) {\n            for (const [subscriptionKey, clients] of registry) {\n                if (!subscriptionKeyMatchesQueryKey(subscriptionKey, queryKey))\n                    continue;\n                for (const ws of clients) {\n                    if (!targets.has(ws))\n                        targets.set(ws, new Set());\n                    targets.get(ws).add(subscriptionKey);\n                }\n            }\n        }\n    }\n    function sendQueryInvalidate(query, subscriptionKey, scopeHash, eventId, legacyQueryKey, crudRealtimeEmitMode = generatedCrudRealtimeEmitMode) {\n        const sendLegacy = legacyQueryKey !== undefined && crudRealtimeEmitMode !== \"scoped\";\n        const sendScoped = crudRealtimeEmitMode !== \"legacy\";\n        if (sendLegacy && legacyQueryKey)\n            sendInvalidate([legacyQueryKey]);\n        if (!sendScoped || scopeHash.length === 0)\n            return;\n        const clients = authorizedQuerySubscribers.get(subscriptionKey);\n        if (!clients || clients.size === 0)\n            return;\n        for (const [ws, auth] of [...clients]) {\n            if (auth.expiresAt <= nowMs()) {\n                clients.delete(ws);\n                continue;\n            }\n            if (auth.scopeHash !== scopeHash)\n                continue;\n            try {\n                ws.send(JSON.stringify({\n                    type: \"query:invalidate\",\n                    query: auth.query || query,\n                    subscriptionKey,\n                    eventId,\n                }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n    }\n    function sendQueryRevoke(query, subscriptionKey, scopeHash, epoch, reason) {\n        if (scopeHash.length === 0)\n            return;\n        const clients = authorizedQuerySubscribers.get(subscriptionKey);\n        if (!clients || clients.size === 0)\n            return;\n        for (const [ws, auth] of [...clients]) {\n            if (auth.scopeHash !== scopeHash)\n                continue;\n            if (epoch !== undefined && auth.epoch === epoch)\n                continue;\n            clients.delete(ws);\n            try {\n                ws.send(JSON.stringify({\n                    type: \"query:revoked\",\n                    query: auth.query || query,\n                    subscriptionKey,\n                    ...(reason ? { reason } : {}),\n                }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n        if (clients.size === 0)\n            authorizedQuerySubscribers.delete(subscriptionKey);\n    }\n    function sendChannel(channelKey, data, eventId) {\n        const clients = channelSubscribers.get(channelKey);\n        if (!clients || clients.size === 0)\n            return;\n        for (const [ws, auth] of [...clients]) {\n            if (auth.expiresAt <= nowMs()) {\n                clients.delete(ws);\n                continue;\n            }\n            try {\n                ws.send(JSON.stringify({ type: \"channel:event\", channel: auth.channel, channelKey, eventId, data }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n    }\n    function sendChannelInvalidate(channelKey) {\n        const clients = channelSubscribers.get(channelKey);\n        if (!clients || clients.size === 0)\n            return;\n        for (const [ws, auth] of [...clients]) {\n            if (auth.expiresAt <= nowMs()) {\n                clients.delete(ws);\n                continue;\n            }\n            try {\n                ws.send(JSON.stringify({ type: \"channel:invalidate\", channel: auth.channel, channelKey }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n    }\n    function sendChannelRevoke(channelKey, epoch, reason) {\n        const clients = channelSubscribers.get(channelKey);\n        if (!clients || clients.size === 0)\n            return;\n        for (const [ws, auth] of [...clients]) {\n            if (epoch !== undefined && auth.epoch === epoch)\n                continue;\n            clients.delete(ws);\n            try {\n                ws.send(JSON.stringify({\n                    type: \"channel:revoked\",\n                    channel: auth.channel,\n                    channelKey,\n                    ...(reason ? { reason } : {}),\n                }));\n            }\n            catch {\n                deregisterClient(ws);\n            }\n        }\n        if (clients.size === 0)\n            channelSubscribers.delete(channelKey);\n    }\n    function subscribeChannel(ws, token) {\n        if (!options?.appName || !options?.channelTokenSecret || typeof token !== \"string\") {\n            ws.send(JSON.stringify({ type: \"channel:error\", error: \"invalid_token\" }));\n            return;\n        }\n        const verified = verifyRealtimeChannelToken(token, {\n            appName: options.appName,\n            secret: options.channelTokenSecret,\n            nowMs: nowMs(),\n        });\n        if (!verified.ok) {\n            ws.send(JSON.stringify({ type: \"channel:error\", error: verified.reason }));\n            return;\n        }\n        connectedClients.add(ws);\n        let clients = channelSubscribers.get(verified.channelKey);\n        if (!clients) {\n            clients = new Map();\n            channelSubscribers.set(verified.channelKey, clients);\n        }\n        clients.set(ws, { channel: verified.channel, expiresAt: verified.expiresAt, epoch: verified.epoch });\n        ws.send(JSON.stringify({\n            type: \"channel:subscribed\",\n            channel: verified.channel,\n            channelKey: verified.channelKey,\n            ...(verified.epoch ? { epoch: verified.epoch } : {}),\n        }));\n    }\n    function subscribeQuery(ws, token) {\n        if (!options?.appName || !options?.channelTokenSecret || typeof token !== \"string\") {\n            ws.send(JSON.stringify({ type: \"query:error\", error: \"invalid_token\" }));\n            return;\n        }\n        const verified = verifyRealtimeQuerySubscriptionToken(token, {\n            appName: options.appName,\n            secret: options.channelTokenSecret,\n            nowMs: nowMs(),\n        });\n        if (!verified.ok) {\n            ws.send(JSON.stringify({ type: \"query:error\", error: verified.reason }));\n            return;\n        }\n        connectedClients.add(ws);\n        let clients = authorizedQuerySubscribers.get(verified.subscriptionKey);\n        if (!clients) {\n            clients = new Map();\n            authorizedQuerySubscribers.set(verified.subscriptionKey, clients);\n        }\n        clients.set(ws, {\n            query: verified.query,\n            subscriptionKey: verified.subscriptionKey,\n            scopeHash: verified.scopeHash,\n            expiresAt: verified.expiresAt,\n            epoch: verified.epoch,\n        });\n        ws.send(JSON.stringify({\n            type: \"query:subscribed\",\n            query: verified.query,\n            subscriptionKey: verified.subscriptionKey,\n            ...(verified.epoch ? { epoch: verified.epoch } : {}),\n        }));\n    }\n    const registry = {\n        notify(event) {\n            if (event.type === \"emit\") {\n                sendEmit(event.queryKey, event.data);\n                return;\n            }\n            if (event.type === \"channel_publish\") {\n                sendChannel(event.channelKey, event.data, event.eventId);\n                return;\n            }\n            if (event.type === \"query_invalidate\") {\n                sendQueryInvalidate(event.query, event.subscriptionKey, event.scopeHash, event.eventId, event.legacyQueryKey, event.crudRealtimeEmitMode);\n                return;\n            }\n            if (event.type === \"query_revoke\") {\n                sendQueryRevoke(event.query, event.subscriptionKey, event.scopeHash, event.epoch, event.reason);\n                return;\n            }\n            if (event.type === \"channel_invalidate\") {\n                sendChannelInvalidate(event.channelKey);\n                return;\n            }\n            if (event.type === \"channel_revoke\") {\n                sendChannelRevoke(event.channelKey, event.epoch, event.reason);\n                return;\n            }\n            sendInvalidate(event.queryKeys);\n        },\n        subscribe(queryKey, ws) {\n            connectedClients.add(ws);\n            if (!subscribers.has(queryKey))\n                subscribers.set(queryKey, new Set());\n            subscribers.get(queryKey).add(ws);\n        },\n        registerClient(ws) {\n            connectedClients.add(ws);\n        },\n        deregisterClient,\n        unsubscribeAll: deregisterClient,\n        handleWsMessage(ws, raw) {\n            try {\n                const msg = typeof raw === \"string\" ? JSON.parse(raw) : JSON.parse(raw.toString());\n                if (msg.type === \"subscribe\" && msg.query) {\n                    registry.subscribe(msg.query, ws);\n                    ws.send(JSON.stringify({ type: \"subscribed\", query: msg.query }));\n                }\n                if (msg.type === \"unsubscribe\" && msg.query) {\n                    subscribers.get(msg.query)?.delete(ws);\n                }\n                if (msg.type === \"subscribeChannel\") {\n                    subscribeChannel(ws, msg.token);\n                }\n                if (msg.type === \"subscribeQuery\") {\n                    subscribeQuery(ws, msg.token);\n                }\n                if (msg.type === \"unsubscribeQuery\" && typeof msg.token === \"string\") {\n                    const verified = options?.appName && options?.channelTokenSecret\n                        ? verifyRealtimeQuerySubscriptionToken(msg.token, {\n                            appName: options.appName,\n                            secret: options.channelTokenSecret,\n                            nowMs: nowMs(),\n                        })\n                        : { ok: false };\n                    if (verified.ok) {\n                        authorizedQuerySubscribers.get(verified.subscriptionKey)?.delete(ws);\n                    }\n                }\n                if (msg.type === \"unsubscribeChannel\" && typeof msg.token === \"string\") {\n                    const verified = options?.appName && options?.channelTokenSecret\n                        ? verifyRealtimeChannelToken(msg.token, {\n                            appName: options.appName,\n                            secret: options.channelTokenSecret,\n                            nowMs: nowMs(),\n                        })\n                        : { ok: false };\n                    if (verified.ok) {\n                        channelSubscribers.get(verified.channelKey)?.delete(ws);\n                    }\n                }\n            }\n            catch {\n                // ignore malformed messages\n            }\n        },\n    };\n    return registry;\n}\n", "import { resolve } from \"path\";\nconst PLATFORM_ANALYTICS_SCRIPT_PATH = \"/_gencow/analytics.js\";\nconst PLATFORM_ANALYTICS_EVENT_PATH = \"/_gencow/analytics/event\";\nconst PLATFORM_ANALYTICS_SCRIPT_TAG = `<script defer src=\"${PLATFORM_ANALYTICS_SCRIPT_PATH}\" data-site=\"platform\"></script>`;\nexport function injectPlatformAnalyticsScript(html) {\n    if (!html || html.includes(PLATFORM_ANALYTICS_SCRIPT_PATH))\n        return html;\n    if (/<\\/head\\s*>/i.test(html)) {\n        return html.replace(/<\\/head\\s*>/i, `  ${PLATFORM_ANALYTICS_SCRIPT_TAG}\\n</head>`);\n    }\n    return `${PLATFORM_ANALYTICS_SCRIPT_TAG}\\n${html}`;\n}\nexport function registerPlatformAnalyticsRoutes(params) {\n    const serve = async (c) => {\n        const analytics = await import(resolve(params.functionsPath, \"analytics-platform.ts\"));\n        const host = c.req.header?.(\"host\") ?? new URL(c.req.url).host;\n        return await analytics.servePlatformAnalyticsRequest({\n            c,\n            host,\n            rawSql: params.rawSql,\n            analyticsRawSql: params.analyticsRawSql ?? params.rawSql,\n            logger: params.logger,\n        });\n    };\n    params.app.get(PLATFORM_ANALYTICS_SCRIPT_PATH, serve);\n    params.app.post(PLATFORM_ANALYTICS_EVENT_PATH, serve);\n}\n", "export function shouldUsePlatformSystemDbForHttpActionPath(path) {\n    return (path.startsWith(\"/internal/\") ||\n        path.startsWith(\"/platform/ai/\") ||\n        path.startsWith(\"/platform/billing/\") ||\n        path.startsWith(\"/platform/document/\") ||\n        path.startsWith(\"/platform/domain/\"));\n}\nexport function resolveAdminDataRawSql(params) {\n    if ((params.isBaas || params.isPlatform) && !params.systemRawSql) {\n        params.logger.warn(\"[gencow] admin data surface is falling back to rawSql because systemRawSql is unavailable; RLS-protected tables may appear empty and BYPASSRLS admin semantics are disabled.\");\n    }\n    return params.systemRawSql ?? params.rawSql;\n}\n", "export function shouldAutoCreateScheduler(params) {\n    return params.isBaas || params.hasCrons || params.hasDefineApiCrons || params.hasWorkflows;\n}\nexport function buildBunFetchEnv(server, req) {\n    return {\n        server,\n        ip: typeof server?.requestIP === \"function\" ? server.requestIP(req) : undefined,\n    };\n}\nexport function collectTransitionCronProcedureNames(cronSchedules, internalProcedureMap) {\n    return [\n        ...new Set(cronSchedules\n            .map((schedule) => schedule.procedureName)\n            .filter((procedureName) => !internalProcedureMap.has(procedureName))),\n    ];\n}\n", "import { ensurePlatformAnalyticsSchema } from \"./server-platform-analytics-bootstrap.js\";\nfunction isDisabledAnalyticsEnv(env) {\n    const enabled = env.GENCOW_ANALYTICS_ENABLED?.trim().toLowerCase();\n    const backend = env.GENCOW_ANALYTICS_BACKEND?.trim().toLowerCase();\n    return [\"0\", \"false\", \"off\", \"disabled\", \"no\"].includes(enabled ?? \"\") || backend === \"disabled\";\n}\nfunction redactPostgresDsn(value) {\n    return value.replace(/postgres(?:ql)?:\\/\\/[^\\s\"']+/gi, \"postgres://[redacted]\");\n}\nasync function connectPostgresAnalytics(url) {\n    const mod = await import(\"postgres\");\n    return mod.default(url, {\n        max: Number(process.env.GENCOW_ANALYTICS_DB_POOL_MAX || 3),\n        idle_timeout: Number(process.env.GENCOW_ANALYTICS_DB_IDLE_TIMEOUT_SEC || 20),\n        connect_timeout: Number(process.env.GENCOW_ANALYTICS_DB_CONNECT_TIMEOUT_SEC || 5),\n    });\n}\nfunction createUnavailableRawSql(reason) {\n    return (async () => {\n        throw new Error(`analytics database unavailable: ${redactPostgresDsn(reason).slice(0, 160)}`);\n    });\n}\nexport async function createAnalyticsSqlRuntime(params) {\n    const env = params.env ?? process.env;\n    const logger = params.logger ?? console;\n    const analyticsDatabaseUrl = env.ANALYTICS_DATABASE_URL?.trim();\n    if (!analyticsDatabaseUrl || isDisabledAnalyticsEnv(env)) {\n        return {\n            rawSql: params.fallbackRawSql,\n            source: \"platform-fallback\",\n            close: async () => { },\n        };\n    }\n    const connect = params.connect ?? connectPostgresAnalytics;\n    const ensureSchema = params.ensureSchema ?? ensurePlatformAnalyticsSchema;\n    let client = null;\n    try {\n        client = await connect(analyticsDatabaseUrl);\n        const rawSql = (async (query, sqlParams) => {\n            const result = sqlParams && sqlParams.length > 0\n                ? await client.unsafe(query, sqlParams)\n                : await client.unsafe(query);\n            return Array.from(result);\n        });\n        rawSql.transaction = async (callback) => {\n            if (typeof client?.begin !== \"function\")\n                return callback(rawSql);\n            return client.begin(async (tx) => {\n                const txRawSql = (async (query, sqlParams) => {\n                    const result = sqlParams && sqlParams.length > 0\n                        ? await tx.unsafe(query, sqlParams)\n                        : await tx.unsafe(query);\n                    return Array.from(result);\n                });\n                return callback(txRawSql);\n            });\n        };\n        await ensureSchema({ rawSql });\n        logger.log(\"[analytics] using dedicated Postgres analytics store (ANALYTICS_DATABASE_URL configured)\");\n        return {\n            rawSql,\n            source: \"dedicated-postgres\",\n            close: async () => {\n                await client?.end?.();\n            },\n        };\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        try {\n            await client?.end?.();\n        }\n        catch {\n            // Ignore close failures while falling back to fail-open analytics behavior.\n        }\n        logger.warn(`[analytics] dedicated analytics DB unavailable; collector/provider will fail open: ${redactPostgresDsn(message).slice(0, 160)}`);\n        return {\n            rawSql: createUnavailableRawSql(message),\n            source: \"unavailable\",\n            close: async () => { },\n        };\n    }\n}\n", "import { createBunWebSocket } from \"hono/bun\";\nexport function createServerWebsocketRuntime(options = {}) {\n    const { upgradeWebSocket, websocket: baseWebsocket } = createBunWebSocket();\n    const platformGateway = options.platformGateway;\n    const nodeProxyTunnel = options.nodeProxyTunnel;\n    const websocket = {\n        ...baseWebsocket,\n        open(ws) {\n            if (nodeProxyTunnel?.handleOpen(ws)) {\n                return;\n            }\n            if (ws.data?.gatewayAppName) {\n                platformGateway?.handleOpen(ws);\n                return;\n            }\n            baseWebsocket.open?.(ws);\n        },\n        message(ws, msg) {\n            if (nodeProxyTunnel?.handleMessage(ws, msg)) {\n                return;\n            }\n            if (ws.data?.gatewayAppName) {\n                platformGateway?.handleMessage(ws, msg);\n                return;\n            }\n            baseWebsocket.message?.(ws, msg);\n        },\n        close(ws, code, reason) {\n            if (nodeProxyTunnel?.handleClose(ws, code, reason)) {\n                return;\n            }\n            if (ws.data?.gatewayAppName) {\n                platformGateway?.handleClose(ws);\n                return;\n            }\n            baseWebsocket.close?.(ws, code, reason);\n        },\n    };\n    return { upgradeWebSocket, websocket };\n}\n", "const SENSITIVE_QUERY_KEYS = [\n    \"grant\",\n    \"sig\",\n    \"se\",\n    \"sp\",\n    \"sv\",\n    \"skoid\",\n    \"sktid\",\n    \"skt\",\n    \"ske\",\n    \"sks\",\n    \"skv\",\n    \"token\",\n    \"apiKey\",\n    \"apikey\",\n    \"key\",\n    \"password\",\n];\nconst SENSITIVE_QUERY_PARAM_PATTERN = new RegExp(`([?&](?:${SENSITIVE_QUERY_KEYS.join(\"|\")})=)[^&\\\\s]+`, \"gi\");\nconst MEDIA_WORKER_STORAGE_PATH_PATTERN = /(\\/internal\\/media-worker\\/files\\/)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\\/|[?\\s]|$)/gi;\nconst AUDIO_JOB_PATH_PATTERN = /(\\/platform\\/ai\\/v1\\/(?:audio\\/jobs|speech\\/transcriptions)\\/)audjob_[a-zA-Z0-9_.:-]+(?=\\/|[?\\s]|$)/g;\nexport function redactRequestLogMessage(message) {\n    return message\n        .replace(SENSITIVE_QUERY_PARAM_PATTERN, \"$1REDACTED\")\n        .replace(MEDIA_WORKER_STORAGE_PATH_PATTERN, \"$1:storageId\")\n        .replace(AUDIO_JOB_PATH_PATTERN, \"$1:jobId\");\n}\n", "/**\n * packages/server/src/auth-schema.ts\n *\n * better-auth\uAC00 \uC0AC\uC6A9\uD558\uB294 Drizzle \uC2A4\uD0A4\uB9C8 \uD14C\uC774\uBE14 \uC815\uC758.\n * better-auth\uB294 user, session, account, verification 4\uAC1C \uD14C\uC774\uBE14\uC744 \uD544\uC694\uB85C \uD569\uB2C8\uB2E4.\n *\n * @see https://www.better-auth.com/docs/adapters/drizzle\n */\nimport { pgTable, text, boolean, timestamp } from \"drizzle-orm/pg-core\";\n// \u2500\u2500\u2500 user \uD14C\uC774\uBE14 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const user = pgTable(\"user\", {\n    id: text(\"id\").primaryKey(),\n    name: text(\"name\").notNull(),\n    email: text(\"email\").notNull().unique(),\n    emailVerified: boolean(\"email_verified\").notNull().default(false),\n    image: text(\"image\"),\n    createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\").notNull().defaultNow(),\n});\n// \u2500\u2500\u2500 session \uD14C\uC774\uBE14 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const session = pgTable(\"session\", {\n    id: text(\"id\").primaryKey(),\n    expiresAt: timestamp(\"expires_at\").notNull(),\n    token: text(\"token\").notNull().unique(),\n    createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\").notNull().defaultNow(),\n    ipAddress: text(\"ip_address\"),\n    userAgent: text(\"user_agent\"),\n    userId: text(\"user_id\")\n        .notNull()\n        .references(() => user.id, { onDelete: \"cascade\" }),\n});\n// \u2500\u2500\u2500 account \uD14C\uC774\uBE14 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const account = pgTable(\"account\", {\n    id: text(\"id\").primaryKey(),\n    accountId: text(\"account_id\").notNull(),\n    providerId: text(\"provider_id\").notNull(),\n    userId: text(\"user_id\")\n        .notNull()\n        .references(() => user.id, { onDelete: \"cascade\" }),\n    accessToken: text(\"access_token\"),\n    refreshToken: text(\"refresh_token\"),\n    idToken: text(\"id_token\"),\n    accessTokenExpiresAt: timestamp(\"access_token_expires_at\"),\n    refreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\"),\n    scope: text(\"scope\"),\n    password: text(\"password\"),\n    createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\").notNull().defaultNow(),\n});\n// \u2500\u2500\u2500 verification \uD14C\uC774\uBE14 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const verification = pgTable(\"verification\", {\n    id: text(\"id\").primaryKey(),\n    identifier: text(\"identifier\").notNull(),\n    value: text(\"value\").notNull(),\n    expiresAt: timestamp(\"expires_at\").notNull(),\n    createdAt: timestamp(\"created_at\").defaultNow(),\n    updatedAt: timestamp(\"updated_at\").defaultNow(),\n});\n", "import * as defaultAuthSchema from \"./auth-schema.js\";\nimport { sql } from \"drizzle-orm\";\nimport { adminVerificationHookDb, captureAdminVerificationDelivery, runAdminVerificationDelivery, } from \"./admin-verification-email-delivery.js\";\nimport { handleAuditedBetterAuthDelegate } from \"./auth-better-auth-delegate-audit.js\";\nimport { recordAuthActivity } from \"./auth-activity-log.js\";\nimport { isTrustedOAuthCallbackURL } from \"./auth-oauth-callback.js\";\nimport { consumeOAuthExchangeCode, createOAuthExchangeCode } from \"./auth-oauth-exchange-store.js\";\nimport { resolveOAuthReturnMode } from \"./auth-oauth-return-mode.js\";\nimport { presentSafeAuthSessionUser } from \"./auth-session-presenter.js\";\nimport { buildGencowBetterAuthOptions, getAuthUserAdditionalFieldNames } from \"./better-auth-options.js\";\nimport { listEnabledSocialProviderIds, resolveSocialAuthConfig } from \"./auth-social-config.js\";\nimport { resolveBetterAuthTrustedOrigins } from \"./better-auth-trusted-origins.js\";\nimport { getPublicAuthErrorMessage } from \"./auth-error-sanitization.js\";\nimport { redactAuthLogValue } from \"./auth-log-redaction.js\";\nimport { buildSessionLookupHeaders, resolveRequestSession, sessionTokenToCookieHeader, } from \"./auth-session-resolution.js\";\nimport { finalizeOAuthInviteReservation } from \"./auth-oauth-invite-reservation.js\";\nimport { consumeOAuthSignUpHandoff } from \"./auth-oauth-signup-handoff.js\";\nimport { copySessionUserFieldsForRuntimeIdentity, lookupRuntimeAuthUser, } from \"./better-auth-identity.js\";\nimport { enforceAuthRateLimit } from \"./auth-rate-limit.js\";\nimport { isInviteOnlyMode, releaseInviteCode, reserveInviteCode } from \"./invite-code.js\";\nimport { resolveDelegatedNodeProxyUser } from \"./server-node-proxy-delegated-auth.js\";\nimport { authAccountStatusReasonCode, isAuthAccountStatusErrorCode, transformAuthResponseForAccountStatus, } from \"./auth-account-status.js\";\nimport { denyEmailSignupIfAccountBlocked, denyEmailVerificationIfAccountBlocked, denyInactiveAuthSessionWithJson, denyInactiveAuthSessionWithRedirect, getInactiveAuthAccountError, revokeInactiveAuthSession, } from \"./auth-account-status-route-guards.js\";\nimport { startSocialSignInRoute } from \"./auth-social-signin-route.js\";\nimport { handlePlatformLegacyAuth } from \"./platform-legacy-auth.js\";\nexport { resolveBetterAuthTrustedOrigins } from \"./better-auth-trusted-origins.js\";\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet authInstance = null;\nlet authInitPromise = null;\nlet hasEmailVerification = false;\nlet dbInstance = null;\nlet pendingAuthConfig;\nlet pendingProjectConfig;\nlet runtimeAuthSchema = defaultAuthSchema;\nlet capturedSecret;\nlet capturedBaseURL;\nlet capturedManagedPublicOrigins;\nfunction buildAuthHookContext(request) {\n    return { db: adminVerificationHookDb(dbInstance), request };\n}\nasync function runAuthEventHook(label, fn) {\n    try {\n        await fn();\n    }\n    catch (error) {\n        console.error(`[auth] ${label} hook failed:`, redactAuthLogValue(error));\n    }\n}\nasync function runAfterSignUpHook(user, inviteCode, request) {\n    const hook = pendingAuthConfig?.events?.afterSignUp;\n    if (!hook)\n        return;\n    await runAuthEventHook(\"afterSignUp\", () => hook({ user, inviteCode }, buildAuthHookContext(request)));\n}\nfunction getCustomUserFieldNames() {\n    return getAuthUserAdditionalFieldNames(pendingAuthConfig);\n}\nfunction resolvePlatformBaseDomain() {\n    return process.env.BASE_DOMAIN || (process.env.IS_PLATFORM === \"true\" ? \"gencow.app\" : undefined);\n}\nfunction getOAuthCallbackResolverOptions(requestedCallbackURL) {\n    return {\n        requestedCallbackURL,\n        authConfig: pendingAuthConfig,\n        baseURL: capturedBaseURL || `http://localhost:${process.env.PORT || \"5456\"}`,\n        appPublicDomain: process.env.APP_PUBLIC_DOMAIN,\n        trustedOrigins: resolveBetterAuthTrustedOrigins({\n            baseDomain: resolvePlatformBaseDomain(),\n            appPublicDomain: process.env.APP_PUBLIC_DOMAIN,\n            capturedBaseURL,\n            managedPublicOrigins: capturedManagedPublicOrigins ?? process.env.GENCOW_MANAGED_PUBLIC_ORIGINS,\n            frontendOrigins: pendingProjectConfig?.frontendOrigins,\n            projectTrustedOrigins: pendingProjectConfig?.trustedOrigins,\n            corsOriginsEnv: process.env.CORS_ORIGINS,\n            authConfig: pendingAuthConfig,\n        }),\n    };\n}\nexport function initAuth(db, authConfig, projectConfig, options = {}) {\n    hasEmailVerification = !!authConfig?.emailVerification;\n    authInstance = null;\n    authInitPromise = null;\n    dbInstance = db;\n    pendingAuthConfig = authConfig;\n    pendingProjectConfig = projectConfig;\n    runtimeAuthSchema = options.authSchema ?? defaultAuthSchema;\n    capturedSecret = process.env.BETTER_AUTH_SECRET;\n    capturedBaseURL = process.env.BETTER_AUTH_URL;\n    capturedManagedPublicOrigins = process.env.GENCOW_MANAGED_PUBLIC_ORIGINS;\n}\nexport function resetAuthForTests() {\n    authInstance = null;\n    authInitPromise = null;\n    hasEmailVerification = false;\n    dbInstance = null;\n    pendingAuthConfig = undefined;\n    pendingProjectConfig = undefined;\n    runtimeAuthSchema = defaultAuthSchema;\n    capturedSecret = undefined;\n    capturedBaseURL = undefined;\n    capturedManagedPublicOrigins = undefined;\n}\nasync function ensureAuth() {\n    if (authInstance)\n        return authInstance;\n    if (authInitPromise)\n        return authInitPromise;\n    if (!dbInstance) {\n        throw new Error(\"[auth] initAuth() not called yet \u2014 DB instance required\");\n    }\n    authInitPromise = (async () => {\n        try {\n            const _t = performance.now();\n            const { betterAuth } = await import(\"better-auth\");\n            const { drizzleAdapter } = await import(\"better-auth/adapters/drizzle\");\n            const { bearer, genericOAuth } = await import(\"better-auth/plugins\");\n            const authConfig = pendingAuthConfig;\n            const database = drizzleAdapter(dbInstance, {\n                provider: \"pg\",\n                schema: runtimeAuthSchema,\n            });\n            const { socialProviders, customOAuthConfig } = resolveSocialAuthConfig(authConfig?.socialProviders);\n            authInstance = betterAuth(buildGencowBetterAuthOptions({\n                authConfig,\n                database,\n                secret: capturedSecret,\n                baseURL: capturedBaseURL,\n                port: process.env.PORT,\n                authHookContext: buildAuthHookContext,\n                captureEmailVerificationDelivery: captureAdminVerificationDelivery,\n                runAuthEventHook,\n                socialProviders,\n                plugins: [\n                    bearer(),\n                    ...(customOAuthConfig.length > 0 ? [genericOAuth({ config: customOAuthConfig })] : []),\n                ],\n                trustedOrigins: resolveBetterAuthTrustedOrigins({\n                    baseDomain: resolvePlatformBaseDomain(),\n                    appPublicDomain: process.env.APP_PUBLIC_DOMAIN,\n                    capturedBaseURL,\n                    managedPublicOrigins: capturedManagedPublicOrigins ?? process.env.GENCOW_MANAGED_PUBLIC_ORIGINS,\n                    frontendOrigins: pendingProjectConfig?.frontendOrigins,\n                    projectTrustedOrigins: pendingProjectConfig?.trustedOrigins,\n                    corsOriginsEnv: process.env.CORS_ORIGINS,\n                    authConfig,\n                }),\n            }));\n            console.log(`[auth] better-auth lazy-initialized in ${(performance.now() - _t).toFixed(0)}ms \u2713`);\n            return authInstance;\n        }\n        catch (e) {\n            authInitPromise = null;\n            console.error(`[auth] \u274C better-auth lazy-init failed:`, redactAuthLogValue(e));\n            throw e;\n        }\n    })();\n    return authInitPromise;\n}\nexport async function sendAdminVerificationEmail(input) {\n    if (!hasEmailVerification || !pendingAuthConfig?.emailVerification?.sendVerificationEmail) {\n        throw new Error(\"VERIFICATION_EMAIL_NOT_ENABLED\");\n    }\n    const auth = await ensureAuth();\n    const { result, receipt } = await runAdminVerificationDelivery(input.db, () => auth.api.sendVerificationEmail({\n        body: {\n            email: input.email,\n            callbackURL: input.callbackURL ?? \"/login\",\n        },\n    }));\n    if (!result?.status ||\n        !receipt?.queued ||\n        receipt.inserted !== true ||\n        (typeof receipt.deliveryId !== \"string\" && typeof receipt.deliveryId !== \"number\")) {\n        throw new Error(\"VERIFICATION_EMAIL_SEND_FAILED\");\n    }\n    return { status: true, outboxId: receipt.deliveryId };\n}\nexport function getAuth() { return authInstance; }\nexport function isAuthLoaded() { return authInstance !== null; }\nimport { sign, verify } from \"hono/jwt\";\nimport { getSecretKey } from \"./crypto.js\";\nconst JWT_ALG = \"HS256\";\nconst JWT_EXPIRES_IN_SEC = 5 * 60;\nfunction pickCustomUserFields(user) {\n    const custom = {};\n    for (const name of getCustomUserFieldNames()) {\n        if (user[name] instanceof Date) {\n            custom[name] = user[name].toISOString();\n        }\n        else if (user[name] !== undefined) {\n            custom[name] = user[name];\n        }\n    }\n    return custom;\n}\nfunction toCurrentUser(user) {\n    return {\n        ...copySessionUserFieldsForRuntimeIdentity(user),\n        ...pickCustomUserFields(user),\n        id: String(user.id),\n        email: String(user.email),\n        name: typeof user.name === \"string\" ? user.name : undefined,\n    };\n}\nexport function betterAuthMiddleware(db) {\n    return async (c, next) => {\n        let currentUser = null;\n        let authError = null;\n        const reqAuthHeader = c.req.header(\"Authorization\") || \"\";\n        const bearerToken = reqAuthHeader.startsWith(\"Bearer \") ? reqAuthHeader.substring(7) : \"\";\n        const isCliToken = bearerToken.startsWith(\"gk_\") ||\n            (process.env.IS_PLATFORM === \"true\" && bearerToken.startsWith(\"sk_\"));\n        if (db) {\n            if (isCliToken) {\n                try {\n                    const rows = await db.execute(sql `SELECT \"user_id\" FROM \"cli_tokens\" WHERE \"token\" = ${bearerToken} AND \"expires_at\" > NOW() LIMIT 1`);\n                    const row = (rows?.rows?.[0] ?? rows?.[0]);\n                    if (row?.user_id) {\n                        currentUser = await lookupRuntimeAuthUser(db, row.user_id);\n                    }\n                }\n                catch { }\n            }\n            if (!currentUser) {\n                currentUser = await resolveDelegatedNodeProxyUser(db, c);\n            }\n        }\n        if (!currentUser) {\n            const cookieHeader = c.req.header(\"cookie\") || \"\";\n            const hasAuthSignal = cookieHeader.includes(\"better-auth.session_token\") ||\n                (reqAuthHeader.startsWith(\"Bearer \") && !isCliToken);\n            if (hasAuthSignal) {\n                await ensureAuth();\n                const AUTH_TIMEOUT_MS = 8000;\n                try {\n                    await Promise.race([\n                        (async () => {\n                            if (reqAuthHeader.startsWith(\"Bearer \")) {\n                                const token = reqAuthHeader.substring(7);\n                                try {\n                                    const secret = getSecretKey().toString(\"base64\");\n                                    const payload = await verify(token, secret, JWT_ALG);\n                                    if (payload &&\n                                        typeof payload === \"object\" &&\n                                        typeof payload.sub === \"string\" &&\n                                        typeof payload.email === \"string\") {\n                                        currentUser = toCurrentUser({ ...payload, id: payload.sub });\n                                    }\n                                }\n                                catch (e) {\n                                    try {\n                                        const session = await authInstance.api.getSession({\n                                            headers: new Headers({\n                                                cookie: sessionTokenToCookieHeader(token),\n                                            }),\n                                        });\n                                        if (session?.user) {\n                                            currentUser = toCurrentUser(session.user);\n                                        }\n                                        else {\n                                            authError = e instanceof Error ? e : new Error(String(e));\n                                        }\n                                    }\n                                    catch {\n                                        authError = e instanceof Error ? e : new Error(String(e));\n                                    }\n                                }\n                            }\n                            if (!currentUser && !authError) {\n                                if (cookieHeader.includes(\"better-auth.session_token\")) {\n                                    const session = await authInstance.api.getSession({\n                                        headers: buildSessionLookupHeaders(c.req.raw.headers, cookieHeader),\n                                    });\n                                    if (session?.user) {\n                                        currentUser = toCurrentUser(session.user);\n                                    }\n                                }\n                            }\n                        })(),\n                        new Promise((_, reject) => setTimeout(() => reject(new Error(\"Auth session timeout\")), AUTH_TIMEOUT_MS)),\n                    ]);\n                }\n                catch (e) {\n                    if (e instanceof Error && e.message === \"Auth session timeout\") {\n                        console.warn(\"[auth] \u26A0\uFE0F Session check timed out \u2014 DB connection pool may be exhausted\");\n                    }\n                }\n            }\n        }\n        if (currentUser && db) {\n            const code = await getInactiveAuthAccountError(db, currentUser.id);\n            if (code) {\n                currentUser = null;\n                authError = new Error(code);\n            }\n        }\n        c.set(\"auth\", {\n            getUserIdentity: () => currentUser,\n            requireAuth: () => {\n                if (authError)\n                    throw authError;\n                if (!currentUser)\n                    throw new Error(\"Authentication required\");\n                return currentUser;\n            },\n        });\n        await next();\n    };\n}\nasync function handleAuditedBetterAuthRoute(c, request, options = {}) {\n    return handleAuditedBetterAuthDelegate({\n        request,\n        audit: options.audit,\n        delegate: (delegateRequest) => authInstance.handler(delegateRequest),\n        transformResponse: (params) => transformAuthResponseForAccountStatus({ db: dbInstance, ...params }),\n        resolveSessionBeforeDelegate: () => resolveSessionFromRequest(c),\n        recordActivity: (params) => recordAuthActivity(dbInstance, c, params),\n    });\n}\nasync function startSocialSignIn(c, url, input) {\n    return startSocialSignInRoute({\n        c,\n        url,\n        input,\n        db: dbInstance,\n        authConfig: pendingAuthConfig,\n        capturedBaseURL,\n        getOAuthCallbackResolverOptions,\n        handleAuditedBetterAuthRoute: (request) => handleAuditedBetterAuthRoute(c, request),\n    });\n}\nasync function issueJWT(user) {\n    const now = Math.floor(Date.now() / 1000);\n    const u = user;\n    const payload = {\n        ...copySessionUserFieldsForRuntimeIdentity(u),\n        ...pickCustomUserFields(u),\n        sub: user.id,\n        email: user.email,\n        name: user.name,\n        iat: now,\n        exp: now + JWT_EXPIRES_IN_SEC,\n        iss: \"gencow-auth\",\n    };\n    const secret = getSecretKey().toString(\"base64\");\n    const token = await sign(payload, secret, JWT_ALG);\n    return { token, expires_in: JWT_EXPIRES_IN_SEC };\n}\nasync function resolveSessionFromRequest(c) {\n    return resolveRequestSession({\n        authorizationHeader: c.req.header(\"Authorization\"),\n        cookieHeader: c.req.header(\"cookie\"),\n        headers: c.req.raw.headers,\n        getSession: (headers) => authInstance.api.getSession({ headers }),\n    });\n}\nasync function getSessionFromRequest(c) { return (await resolveSessionFromRequest(c)).session; }\nasync function readEmailFromVerificationToken(token) {\n    if (!token || !capturedSecret)\n        return null;\n    try {\n        const payload = await verify(token, capturedSecret, JWT_ALG);\n        const email = typeof payload?.email === \"string\" ? payload.email.trim() : \"\";\n        return email || null;\n    }\n    catch {\n        return null;\n    }\n}\nfunction isTrustedAuthCallbackURL(value) {\n    return isTrustedOAuthCallbackURL(value, getOAuthCallbackResolverOptions());\n}\n/** better-auth auth endpoints plus Gencow token handoff routes. */\nexport async function betterAuthHandler(c) {\n    const url = new URL(c.req.url);\n    const pathname = url.pathname;\n    const rateLimitResponse = enforceAuthRateLimit(c, pathname);\n    if (rateLimitResponse)\n        return rateLimitResponse;\n    // \u2B50 Lazy Auth: /api/auth/* \uC694\uCCAD\uC774 \uC624\uBA74 \uADF8\uB54C ensureAuth()\n    await ensureAuth();\n    if (!authInstance)\n        return c.json({ error: \"Auth not initialized\" }, 500);\n    const legacyPlatformResponse = await handlePlatformLegacyAuth(c, dbInstance, (request) => handleAuditedBetterAuthRoute(c, request));\n    if (legacyPlatformResponse)\n        return legacyPlatformResponse;\n    if (c.req.method === \"GET\" && pathname.endsWith(\"/social-providers\")) {\n        return c.json({ providers: listEnabledSocialProviderIds(pendingAuthConfig?.socialProviders) });\n    }\n    if (c.req.method === \"GET\" && pathname.endsWith(\"/sign-in/social/redirect\")) {\n        try {\n            const scopes = url.searchParams.getAll(\"scope\");\n            const response = await startSocialSignIn(c, url, {\n                provider: url.searchParams.get(\"provider\") ?? undefined,\n                callbackURL: url.searchParams.get(\"callbackURL\") ?? undefined,\n                oauthReturnMode: url.searchParams.get(\"oauthReturnMode\") ?? undefined,\n                errorCallbackURL: url.searchParams.get(\"errorCallbackURL\") ?? undefined,\n                newUserCallbackURL: url.searchParams.get(\"newUserCallbackURL\") ?? undefined,\n                scopes: scopes.length > 0 ? scopes : undefined,\n                requestSignUp: url.searchParams.get(\"requestSignUp\") === \"true\" ? true : undefined,\n                inviteCode: url.searchParams.get(\"inviteCode\") ?? undefined,\n            });\n            const data = (await response\n                .clone()\n                .json()\n                .catch(() => ({})));\n            if (response.ok && data.url)\n                return c.redirect(data.url, 302);\n            const errorCallbackURL = url.searchParams.get(\"errorCallbackURL\");\n            if (errorCallbackURL &&\n                isTrustedOAuthCallbackURL(errorCallbackURL, getOAuthCallbackResolverOptions())) {\n                const redirectURL = new URL(errorCallbackURL);\n                redirectURL.searchParams.set(\"error\", response.status === 403 ? \"oauth_invite_invalid\" : \"oauth_start_failed\");\n                return c.redirect(redirectURL.toString(), 302);\n            }\n            return response;\n        }\n        catch (error) {\n            console.error(\"[auth] social sign-in redirect failed:\", redactAuthLogValue(error));\n            return c.json({ error: getPublicAuthErrorMessage(error) }, 500);\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/sign-in/social\")) {\n        try {\n            return startSocialSignIn(c, url, (await c.req.json()));\n        }\n        catch (error) {\n            console.error(\"[auth] social sign-in failed:\", redactAuthLogValue(error));\n            return c.json({ error: getPublicAuthErrorMessage(error) }, 500);\n        }\n    }\n    if (c.req.method === \"GET\" && pathname.endsWith(\"/oauth/handoff\")) {\n        const callbackURL = url.searchParams.get(\"callbackURL\");\n        const inviteReservationToken = url.searchParams.get(\"inviteReservation\");\n        const signUpHandoffToken = url.searchParams.get(\"signupHandoff\");\n        if (!callbackURL || !isTrustedOAuthCallbackURL(callbackURL, getOAuthCallbackResolverOptions())) {\n            return c.json({ error: \"Invalid callbackURL\" }, 400);\n        }\n        const returnMode = resolveOAuthReturnMode(url.searchParams.get(\"mode\"), pendingAuthConfig?.oauth);\n        if (!returnMode.ok)\n            return c.json({ error: returnMode.error }, 400);\n        const { session, sessionToken } = await resolveSessionFromRequest(c);\n        if (!session?.user) {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_login_failure\",\n                outcome: \"failure\",\n                actorType: \"anonymous\",\n                reasonCode: \"oauth_session_missing\",\n            });\n            const errorURL = new URL(callbackURL);\n            errorURL.searchParams.set(\"error\", \"oauth_session_missing\");\n            return c.redirect(errorURL.toString(), 302);\n        }\n        const inactiveRedirect = await denyInactiveAuthSessionWithRedirect({\n            db: dbInstance,\n            c,\n            userId: session.user.id,\n            sessionToken,\n            action: \"oauth_login_failure\",\n            callbackURL,\n        });\n        if (inactiveRedirect)\n            return inactiveRedirect;\n        if (inviteReservationToken) {\n            const finalized = await finalizeOAuthInviteReservation(dbInstance, inviteReservationToken, {\n                id: session.user.id,\n                email: session.user.email,\n            });\n            if (!finalized.ok) {\n                const errorURL = new URL(callbackURL);\n                errorURL.searchParams.set(\"error\", \"oauth_invite_invalid\");\n                return c.redirect(errorURL.toString(), 302);\n            }\n            await runAfterSignUpHook(session.user, finalized.code, c.req.raw);\n        }\n        else if (signUpHandoffToken) {\n            const consumed = await consumeOAuthSignUpHandoff(dbInstance, signUpHandoffToken, {\n                id: session.user.id,\n                email: session.user.email,\n            });\n            if (!consumed) {\n                const errorURL = new URL(callbackURL);\n                errorURL.searchParams.set(\"error\", \"oauth_signup_invalid\");\n                return c.redirect(errorURL.toString(), 302);\n            }\n            await runAfterSignUpHook(session.user, null, c.req.raw);\n        }\n        if (returnMode.mode === \"cookie\") {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_login_success\",\n                outcome: \"success\",\n                actorUserId: session.user.id,\n                actorSessionToken: sessionToken,\n                metadata: { source: \"oauth_handoff_cookie\" },\n            });\n            const redirectURL = new URL(callbackURL);\n            redirectURL.searchParams.set(\"oauth\", \"success\");\n            return c.redirect(redirectURL.toString(), 302);\n        }\n        if (!sessionToken) {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_login_failure\",\n                outcome: \"failure\",\n                actorUserId: session.user.id,\n                reasonCode: \"oauth_session_missing\",\n            });\n            const errorURL = new URL(callbackURL);\n            errorURL.searchParams.set(\"error\", \"oauth_session_missing\");\n            return c.redirect(errorURL.toString(), 302);\n        }\n        const code = await createOAuthExchangeCode(dbInstance, {\n            sessionToken,\n            user: {\n                id: session.user.id,\n                email: session.user.email,\n                name: session.user.name ?? undefined,\n            },\n        });\n        const redirectURL = new URL(callbackURL);\n        redirectURL.searchParams.set(\"code\", code);\n        await recordAuthActivity(dbInstance, c, {\n            action: \"oauth_login_success\",\n            outcome: \"success\",\n            actorUserId: session.user.id,\n            actorSessionToken: sessionToken,\n            metadata: { source: \"oauth_handoff_token\" },\n        });\n        return c.redirect(redirectURL.toString(), 302);\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/oauth/exchange\")) {\n        const exchangeMode = resolveOAuthReturnMode(\"token\", pendingAuthConfig?.oauth);\n        if (!exchangeMode.ok) {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_token_exchange_failure\",\n                outcome: \"denied\",\n                actorType: \"anonymous\",\n                reasonCode: \"oauth_token_exchange_denied\",\n            });\n            return c.json({ error: exchangeMode.error }, 403);\n        }\n        const { code } = (await c.req.json().catch(() => ({})));\n        if (!code) {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_token_exchange_failure\",\n                outcome: \"failure\",\n                actorType: \"anonymous\",\n                reasonCode: \"oauth_code_missing\",\n            });\n            return c.json({ error: \"Code is required\" }, 400);\n        }\n        const record = await consumeOAuthExchangeCode(dbInstance, code);\n        if (!record) {\n            await recordAuthActivity(dbInstance, c, {\n                action: \"oauth_token_exchange_failure\",\n                outcome: \"failure\",\n                actorType: \"anonymous\",\n                reasonCode: \"oauth_code_invalid\",\n            });\n            return c.json({ error: \"Invalid or expired OAuth code\" }, 401);\n        }\n        const inactiveResponse = await denyInactiveAuthSessionWithJson({\n            db: dbInstance,\n            c,\n            userId: record.user.id,\n            sessionToken: record.sessionToken,\n            action: \"oauth_token_exchange_failure\",\n        });\n        if (inactiveResponse)\n            return inactiveResponse;\n        const jwt = await issueJWT(record.user);\n        await recordAuthActivity(dbInstance, c, {\n            action: \"oauth_token_exchange\",\n            outcome: \"success\",\n            actorUserId: record.user.id,\n            actorSessionToken: record.sessionToken,\n        });\n        return c.json({\n            user: { id: record.user.id, email: record.user.email, name: record.user.name },\n            sessionToken: record.sessionToken,\n            token: jwt.token,\n            expires_in: jwt.expires_in,\n        });\n    }\n    if (c.req.method === \"GET\" && pathname.endsWith(\"/me\")) {\n        c.header(\"Cache-Control\", \"no-store\");\n        try {\n            const session = await getSessionFromRequest(c);\n            const user = presentSafeAuthSessionUser(session?.user, getCustomUserFieldNames());\n            if (!user) {\n                return c.json({ error: \"Unauthorized: Invalid session\" }, 401);\n            }\n            const accountStatusCode = await revokeInactiveAuthSession(dbInstance, user.id);\n            if (accountStatusCode)\n                return c.json({ error: accountStatusCode }, 403);\n            return c.json({ user });\n        }\n        catch (error) {\n            console.error(\"[auth] Session lookup failed:\", error);\n            return c.json({ error: \"Internal Server Error\" }, 500);\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/sign-in\") && !pathname.includes(\"/sign-in/\")) {\n        try {\n            const { email, password } = await c.req.json();\n            if (!email || !password) {\n                return c.json({ error: \"Email and password are required\" }, 400);\n            }\n            const fakeReq = new Request(`${url.origin}/api/auth/sign-in/email`, {\n                method: \"POST\",\n                headers: { \"Content-Type\": \"application/json\" },\n                body: JSON.stringify({ email, password }),\n            });\n            const authResponse = await handleAuditedBetterAuthRoute(c, fakeReq, { audit: false });\n            if (!authResponse.ok) {\n                const errData = await authResponse.json().catch(() => ({}));\n                const statusCode = isAuthAccountStatusErrorCode(errData?.error) ? errData.error : null;\n                await recordAuthActivity(dbInstance, c, {\n                    action: \"login_failure\",\n                    outcome: statusCode ? \"denied\" : \"failure\",\n                    actorType: \"anonymous\",\n                    reasonCode: statusCode ? authAccountStatusReasonCode(statusCode) : \"invalid_credentials\",\n                    metadata: { reason: getPublicAuthErrorMessage(errData, \"Login failed\") },\n                    authAttempt: { attemptedEmail: email, provider: \"email\" },\n                    httpStatus: authResponse.status,\n                });\n                const error = statusCode ?? getPublicAuthErrorMessage(errData, \"Login failed\");\n                return c.json({ error }, authResponse.status);\n            }\n            const sessionToken = authResponse.headers.get(\"set-auth-token\");\n            if (!sessionToken) {\n                return c.json({ error: \"Failed to extract session token\" }, 500);\n            }\n            const responseData = (await authResponse.json().catch(() => ({})));\n            const user = responseData.user;\n            if (!user) {\n                return c.json({ error: \"Failed to get user data\" }, 500);\n            }\n            const jwt = await issueJWT(user);\n            await recordAuthActivity(dbInstance, c, {\n                action: \"login_success\",\n                outcome: \"success\",\n                actorUserId: user.id,\n                actorSessionToken: sessionToken,\n                authAttempt: { attemptedEmail: email, matchedUserId: user.id, provider: \"email\" },\n                httpStatus: 200,\n            });\n            return c.json({ user, sessionToken, token: jwt.token, expires_in: jwt.expires_in });\n        }\n        catch (error) {\n            console.error(\"[auth] sign-in failed:\", redactAuthLogValue(error));\n            return c.json({ error: getPublicAuthErrorMessage(error) }, 500);\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/sign-up\") && !pathname.includes(\"/sign-up/\")) {\n        let reservedInviteCode = null;\n        let keepInviteReservation = false;\n        try {\n            const { email, password, name, inviteCode } = await c.req.json();\n            if (!email || !password) {\n                return c.json({ error: \"Email and password are required\" }, 400);\n            }\n            const signupDenied = await denyEmailSignupIfAccountBlocked({ db: dbInstance, c, email });\n            if (signupDenied)\n                return signupDenied;\n            if (isInviteOnlyMode()) {\n                const inviteResult = await reserveInviteCode(dbInstance, inviteCode);\n                if (!inviteResult.ok) {\n                    await recordAuthActivity(dbInstance, c, {\n                        action: \"signup_denied\",\n                        outcome: \"denied\",\n                        actorType: \"anonymous\",\n                        reasonCode: \"invite_invalid\",\n                        authAttempt: { attemptedEmail: email, provider: \"email\" },\n                        httpStatus: 403,\n                    });\n                    return c.json({ error: inviteResult.error }, 403);\n                }\n                reservedInviteCode = inviteResult.code;\n            }\n            const fakeReq = new Request(`${url.origin}/api/auth/sign-up/email`, {\n                method: \"POST\",\n                headers: { \"Content-Type\": \"application/json\" },\n                body: JSON.stringify({ email, password, name: name ?? email.split(\"@\")[0] }),\n            });\n            const authResponse = await handleAuditedBetterAuthRoute(c, fakeReq, { audit: false });\n            if (!authResponse.ok) {\n                if (reservedInviteCode) {\n                    await releaseInviteCode(dbInstance, reservedInviteCode);\n                    reservedInviteCode = null;\n                }\n                const errData = await authResponse.json().catch(() => ({}));\n                await recordAuthActivity(dbInstance, c, {\n                    action: authResponse.status === 403 ? \"signup_denied\" : \"signup_failure\",\n                    outcome: authResponse.status === 403 ? \"denied\" : \"failure\",\n                    actorType: \"anonymous\",\n                    reasonCode: authResponse.status === 403 ? \"signup_denied\" : \"signup_failed\",\n                    metadata: { reason: getPublicAuthErrorMessage(errData, \"Signup failed\") },\n                    authAttempt: { attemptedEmail: email, provider: \"email\" },\n                    httpStatus: authResponse.status,\n                });\n                return c.json({ error: getPublicAuthErrorMessage(errData, \"Signup failed\") }, authResponse.status);\n            }\n            keepInviteReservation = true;\n            if (reservedInviteCode)\n                console.log(`[auth] Invite code consumed: ${reservedInviteCode}`);\n            const sessionToken = authResponse.headers.get(\"set-auth-token\");\n            if (!sessionToken) {\n                if (hasEmailVerification) {\n                    const responseData = (await authResponse.json().catch(() => ({})));\n                    if (responseData.user) {\n                        await runAfterSignUpHook(responseData.user, reservedInviteCode, c.req.raw);\n                        await recordAuthActivity(dbInstance, c, {\n                            action: \"signup\",\n                            outcome: \"success\",\n                            actorUserId: responseData.user.id,\n                            reasonCode: \"email_verification_required\",\n                            authAttempt: { attemptedEmail: email, matchedUserId: responseData.user.id, provider: \"email\" },\n                            httpStatus: 200,\n                        });\n                    }\n                    return c.json({\n                        requiresVerification: true,\n                        email,\n                        user: responseData.user ? { ...responseData.user } : { email },\n                    });\n                }\n                return c.json({ error: \"Failed to extract session token\" }, 500);\n            }\n            const responseData = (await authResponse.json().catch(() => ({})));\n            const user = responseData.user;\n            if (!user) {\n                return c.json({ error: \"Failed to get user data\" }, 500);\n            }\n            await runAfterSignUpHook(user, reservedInviteCode, c.req.raw);\n            const jwt = await issueJWT(user);\n            await recordAuthActivity(dbInstance, c, {\n                action: \"signup\",\n                outcome: \"success\",\n                actorUserId: user.id,\n                actorSessionToken: sessionToken,\n                authAttempt: { attemptedEmail: email, matchedUserId: user.id, provider: \"email\" },\n                httpStatus: 200,\n            });\n            return c.json({ user, sessionToken, token: jwt.token, expires_in: jwt.expires_in });\n        }\n        catch (error) {\n            if (reservedInviteCode && !keepInviteReservation) {\n                await releaseInviteCode(dbInstance, reservedInviteCode);\n            }\n            console.error(\"[auth] sign-up failed:\", redactAuthLogValue(error));\n            return c.json({ error: getPublicAuthErrorMessage(error) }, 500);\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/token\")) {\n        try {\n            const { session, sessionToken } = await resolveSessionFromRequest(c);\n            if (!session?.user) {\n                await recordAuthActivity(dbInstance, c, {\n                    action: \"token_refresh_failure\",\n                    outcome: \"denied\",\n                    actorType: \"anonymous\",\n                    reasonCode: \"invalid_session\",\n                });\n                return c.json({ error: \"Unauthorized: Invalid session\" }, 401);\n            }\n            const inactiveResponse = await denyInactiveAuthSessionWithJson({\n                db: dbInstance,\n                c,\n                userId: session.user.id,\n                sessionToken,\n                action: \"token_refresh_failure\",\n            });\n            if (inactiveResponse)\n                return inactiveResponse;\n            const jwt = await issueJWT(session.user);\n            await recordAuthActivity(dbInstance, c, {\n                action: \"token_refresh\",\n                outcome: \"success\",\n                actorUserId: session.user.id,\n                actorSessionToken: sessionToken,\n            });\n            return c.json({ token: jwt.token, expires_in: jwt.expires_in });\n        }\n        catch (error) {\n            console.error(\"[auth] Token generation failed:\", redactAuthLogValue(error));\n            return c.json({ error: \"Internal Server Error\" }, 500);\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/sign-out\")) {\n        return handleAuditedBetterAuthRoute(c, c.req.raw);\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/sign-up/email\")) {\n        const body = (await c.req.raw\n            .clone()\n            .json()\n            .catch(() => ({})));\n        if (typeof body.email === \"string\") {\n            const signupDenied = await denyEmailSignupIfAccountBlocked({ db: dbInstance, c, email: body.email });\n            if (signupDenied)\n                return signupDenied;\n        }\n    }\n    if (c.req.method === \"POST\" && pathname.endsWith(\"/send-verification-email\")) {\n        const body = (await c.req.raw\n            .clone()\n            .json()\n            .catch(() => ({})));\n        if (typeof body.email === \"string\") {\n            const verificationDenied = await denyEmailVerificationIfAccountBlocked({\n                db: dbInstance,\n                c,\n                email: body.email,\n                action: \"verification_email_denied\",\n            });\n            if (verificationDenied)\n                return verificationDenied;\n        }\n    }\n    if (c.req.method === \"GET\" && pathname.endsWith(\"/verify-email\")) {\n        const email = await readEmailFromVerificationToken(url.searchParams.get(\"token\"));\n        if (email) {\n            const verificationDenied = await denyEmailVerificationIfAccountBlocked({\n                db: dbInstance,\n                c,\n                email,\n                action: \"email_verification_denied\",\n                callbackURL: url.searchParams.get(\"callbackURL\"),\n                isTrustedCallbackURL: isTrustedAuthCallbackURL,\n            });\n            if (verificationDenied)\n                return verificationDenied;\n        }\n    }\n    return handleAuditedBetterAuthRoute(c, c.req.raw);\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\nconst deliveryContext = new AsyncLocalStorage();\nexport function adminVerificationHookDb(defaultDb) {\n    return deliveryContext.getStore()?.db ?? defaultDb;\n}\nexport function captureAdminVerificationDelivery(receipt) {\n    const context = deliveryContext.getStore();\n    if (context)\n        context.receipt = receipt;\n}\nexport async function runAdminVerificationDelivery(db, operation) {\n    const context = { db };\n    const result = await deliveryContext.run(context, operation);\n    return { result, receipt: context.receipt };\n}\n", "export const ACTIVITY_COVERAGE_MANIFEST = [\n    {\n        id: \"auth-token-email-sign-in\",\n        method: \"POST\",\n        path: \"/api/auth/sign-in\",\n        category: \"auth\",\n        actions: [\"login_success\", \"login_failure\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"server.auth\",\n        requiredTests: [\"custom sign-in success/failure\"],\n    },\n    {\n        id: \"auth-delegated-email-sign-in\",\n        method: \"POST\",\n        path: \"/api/auth/sign-in/email\",\n        category: \"auth\",\n        actions: [\"login_success\", \"login_failure\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"server.auth\",\n        requiredTests: [\"escaped bug: direct sign-in/email invalid login is audited\"],\n    },\n    {\n        id: \"auth-token-email-sign-up\",\n        method: \"POST\",\n        path: \"/api/auth/sign-up\",\n        category: \"auth\",\n        actions: [\"signup\", \"signup_failure\", \"signup_denied\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"server.auth\",\n        requiredTests: [\"custom sign-up success/failure/denied\"],\n    },\n    {\n        id: \"auth-delegated-email-sign-up\",\n        method: \"POST\",\n        path: \"/api/auth/sign-up/email\",\n        category: \"auth\",\n        actions: [\"signup\", \"signup_failure\", \"signup_denied\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"server.auth\",\n        requiredTests: [\"direct sign-up/email success/failure is audited\"],\n    },\n    {\n        id: \"auth-sign-out\",\n        method: \"POST\",\n        path: \"/api/auth/sign-out\",\n        category: \"auth\",\n        actions: [\"logout\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"server.auth\",\n        requiredTests: [\"sign-out records the pre-logout session identity\"],\n    },\n    {\n        id: \"auth-social-sign-in-start\",\n        method: \"POST\",\n        path: \"/api/auth/sign-in/social\",\n        category: \"auth\",\n        actions: [\"oauth_login_start\", \"oauth_login_failure\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"server.auth\",\n        requiredTests: [\"social sign-in delegate start is audited\"],\n    },\n    {\n        id: \"auth-oauth-handoff\",\n        method: \"GET\",\n        path: \"/api/auth/oauth/handoff\",\n        category: \"auth\",\n        actions: [\"oauth_login_success\", \"oauth_login_failure\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"server.auth\",\n        requiredTests: [\"OAuth handoff success/failure\"],\n    },\n    {\n        id: \"auth-oauth-exchange\",\n        method: \"POST\",\n        path: \"/api/auth/oauth/exchange\",\n        category: \"auth\",\n        actions: [\"oauth_token_exchange\", \"oauth_token_exchange_failure\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"server.auth\",\n        requiredTests: [\"OAuth exchange success/failure/denied\"],\n    },\n    {\n        id: \"auth-token-refresh\",\n        method: \"POST\",\n        path: \"/api/auth/token\",\n        category: \"auth\",\n        actions: [\"token_refresh\", \"token_refresh_failure\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"server.auth\",\n        requiredTests: [\"token refresh success/failure\"],\n    },\n    {\n        id: \"deploy-lifecycle\",\n        module: \"packages/platform/gencow/apps-deploy-routes.ts\",\n        category: \"deploy\",\n        actions: [\"deploy_start\", \"deploy_success\", \"deploy_failure\", \"rollback\"],\n        outcomes: [\"queued\", \"success\", \"failure\"],\n        source: \"platform.apps.deploy\",\n        requiredTests: [\"deploy activity capture tests\"],\n    },\n    {\n        id: \"app-lifecycle\",\n        module: \"packages/platform/gencow/apps-lifecycle.ts\",\n        category: \"app\",\n        actions: [\"app_create\", \"app_delete\", \"app_resume\", \"app_sleep\", \"app_recover\"],\n        outcomes: [\"success\", \"failure\"],\n        source: \"platform.apps.lifecycle\",\n        requiredTests: [\"app lifecycle activity capture tests\"],\n    },\n    {\n        id: \"env-config\",\n        module: \"packages/platform/gencow/env-vars.ts\",\n        category: \"config\",\n        actions: [\"env_set\", \"env_unset\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"platform.env\",\n        requiredTests: [\"env var activity capture and redaction tests\"],\n    },\n    {\n        id: \"custom-domain\",\n        module: \"packages/platform/gencow/apps-custom-domain.ts\",\n        category: \"domain\",\n        actions: [\"domain_set\", \"domain_remove\", \"domain_verify\", \"domain_rebind\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"platform.domain\",\n        requiredTests: [\"custom-domain dual-write characterization\"],\n    },\n    {\n        id: \"deploy-token\",\n        module: \"packages/platform/gencow/apps-deploy-tokens.ts\",\n        category: \"token\",\n        actions: [\"deploy_token_create\", \"deploy_token_revoke\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"platform.deploy-tokens\",\n        requiredTests: [\"deploy token activity capture tests\"],\n    },\n    {\n        id: \"provider-admin\",\n        module: \"packages/platform/gencow/admin-ai-provider-helpers.ts\",\n        category: \"provider\",\n        actions: [\"provider_key_create\", \"deployment_update\", \"rate_limit_policy_update\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"platform.provider-admin\",\n        requiredTests: [\"provider admin dual-write characterization\"],\n    },\n    {\n        id: \"platform-admin\",\n        module: \"packages/platform/gencow/admin.ts\",\n        category: \"admin\",\n        actions: [\"admin_action\"],\n        outcomes: [\"success\", \"failure\", \"denied\"],\n        source: \"platform.admin\",\n        requiredTests: [\"admin activity query and boundary tests\"],\n    },\n    {\n        id: \"security-boundaries\",\n        module: \"packages/platform/gencow/apps-activity.ts\",\n        category: \"security\",\n        actions: [\"owner_mismatch_denied\", \"invalid_token\", \"forbidden_admin_action\"],\n        outcomes: [\"denied\", \"failure\"],\n        source: \"platform.security\",\n        requiredTests: [\"owner mismatch and non-admin broad query deny\"],\n    },\n];\nfunction normalizeAuthPath(pathname) {\n    if (pathname === \"/api/auth\")\n        return pathname;\n    return pathname.replace(/\\/+$/, \"\");\n}\nexport function classifyBetterAuthRoute(method, pathname) {\n    const normalizedMethod = method.toUpperCase();\n    const normalizedPath = normalizeAuthPath(pathname);\n    if (normalizedMethod === \"POST\" && normalizedPath === \"/api/auth/sign-in/email\") {\n        return {\n            successAction: \"login_success\",\n            failureAction: \"login_failure\",\n            source: \"better-auth.sign-in-email\",\n            readUserFromResponse: true,\n        };\n    }\n    if (normalizedMethod === \"POST\" && normalizedPath === \"/api/auth/sign-up/email\") {\n        return {\n            successAction: \"signup\",\n            failureAction: \"signup_failure\",\n            deniedAction: \"signup_denied\",\n            source: \"better-auth.sign-up-email\",\n            readUserFromResponse: true,\n        };\n    }\n    if (normalizedMethod === \"POST\" && normalizedPath === \"/api/auth/sign-out\") {\n        return {\n            successAction: \"logout\",\n            failureAction: \"logout\",\n            source: \"better-auth.sign-out\",\n            sessionBeforeDelegate: true,\n        };\n    }\n    if (normalizedMethod === \"POST\" && normalizedPath === \"/api/auth/sign-in/social\") {\n        return {\n            successAction: \"oauth_login_start\",\n            failureAction: \"oauth_login_failure\",\n            source: \"better-auth.sign-in-social\",\n        };\n    }\n    return null;\n}\nexport function resolveBetterAuthActivityResult(intent, status) {\n    if (status >= 200 && status < 400) {\n        return { action: intent.successAction, outcome: \"success\", reasonCode: null };\n    }\n    if (status === 401 || status === 403) {\n        return {\n            action: intent.deniedAction ?? intent.failureAction,\n            outcome: intent.deniedAction && status === 403 ? \"denied\" : \"failure\",\n            reasonCode: status === 403 ? \"auth_denied\" : \"auth_failed\",\n        };\n    }\n    return { action: intent.failureAction, outcome: \"failure\", reasonCode: \"auth_failed\" };\n}\n", "import { classifyBetterAuthRoute, resolveBetterAuthActivityResult, } from \"./auth-activity-coverage.js\";\nasync function readUserIdFromResponse(response) {\n    const payload = (await response\n        .clone()\n        .json()\n        .catch(() => null));\n    const userId = payload?.user?.id;\n    return typeof userId === \"string\" && userId.trim() ? userId : null;\n}\nasync function readAuthAttemptFromRequest(request) {\n    if (!request.headers.get(\"content-type\")?.toLowerCase().includes(\"application/json\"))\n        return undefined;\n    const payload = (await request\n        .clone()\n        .json()\n        .catch(() => null));\n    const email = typeof payload?.email === \"string\" ? payload.email : null;\n    const provider = typeof payload?.provider === \"string\" ? payload.provider : \"email\";\n    return email ? { attemptedEmail: email, provider } : undefined;\n}\nasync function recordDelegateActivity(params) {\n    const result = resolveBetterAuthActivityResult(params.intent, params.response.status);\n    const actorUserId = params.sessionBeforeDelegate?.session?.user?.id ??\n        (result.outcome === \"success\" && params.intent.readUserFromResponse\n            ? await readUserIdFromResponse(params.response)\n            : null);\n    const actorSessionToken = params.sessionBeforeDelegate?.sessionToken ?? params.response.headers.get(\"set-auth-token\");\n    await params.recordActivity({\n        action: result.action,\n        outcome: result.outcome,\n        actorType: actorUserId ? \"user\" : \"anonymous\",\n        actorUserId,\n        actorSessionToken,\n        reasonCode: result.reasonCode,\n        metadata: { source: params.intent.source },\n        authAttempt: {\n            ...params.authAttempt,\n            matchedUserId: actorUserId,\n        },\n        httpStatus: params.response.status,\n    });\n}\nexport async function handleAuditedBetterAuthDelegate(params) {\n    const intent = params.audit === false\n        ? null\n        : classifyBetterAuthRoute(params.request.method, new URL(params.request.url).pathname);\n    const authAttempt = intent\n        ? await readAuthAttemptFromRequest(params.request).catch(() => undefined)\n        : undefined;\n    const sessionBeforeDelegate = intent?.sessionBeforeDelegate\n        ? await params.resolveSessionBeforeDelegate().catch(() => null)\n        : null;\n    let response = await params.delegate(params.request);\n    if (params.transformResponse) {\n        response = await params.transformResponse({ request: params.request, response });\n    }\n    if (intent)\n        await recordDelegateActivity({ ...params, intent, response, sessionBeforeDelegate, authAttempt });\n    return response;\n}\n", "import { createHmac, randomUUID } from \"node:crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { redactAuthLogValue } from \"./auth-log-redaction.js\";\nimport { deliverTenantAuthActivity, isTenantAuthActivityRuntime } from \"./auth-activity-transport.js\";\nconst AUTH_ACTIVITY_SPOOL_DIR = \"/var/gencow/platform-data/activity-spool\";\nconst AUTH_ACTIVITY_SECRET_KEY_PATTERN = /token|secret|password|passwd|pwd|api[_-]?key|authorization|cookie|session|grant|database[_-]?url/i;\nconst AUTH_ACTIVITY_EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst AUTH_ACTIVITY_METADATA_ALLOWLIST = new Set([\"reason\", \"source\"]);\nfunction authActivityHash(value) {\n    const text = typeof value === \"string\" ? value.trim() : \"\";\n    if (!text)\n        return null;\n    const secret = process.env.GENCOW_ACTIVITY_HASH_SECRET ||\n        process.env.BETTER_AUTH_SECRET ||\n        process.env.GENCOW_PLATFORM_SECRET ||\n        \"gencow-activity-local-dev-secret\";\n    return `hmac-sha256:${createHmac(\"sha256\", secret).update(text).digest(\"hex\")}`;\n}\nfunction normalizeEmail(value) {\n    const text = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n    return AUTH_ACTIVITY_EMAIL_PATTERN.test(text) ? text : null;\n}\nfunction authActivityRequest(c) {\n    const forwardedFor = c.req.header(\"x-forwarded-for\")?.split(\",\")[0]?.trim();\n    const ipAddress = c.req.header(\"cf-connecting-ip\") ?? c.req.header(\"x-real-ip\") ?? forwardedFor ?? null;\n    const userAgent = c.req.header(\"user-agent\") ?? null;\n    const path = (() => {\n        try {\n            return new URL(c.req.url).pathname;\n        }\n        catch {\n            return c.req.path;\n        }\n    })();\n    return {\n        requestId: c.req.header(\"x-request-id\") ?? c.req.header(\"x-gencow-request-id\") ?? null,\n        ipAddress,\n        ipHash: authActivityHash(ipAddress),\n        userAgent,\n        userAgentHash: authActivityHash(userAgent),\n        country: c.req.header(\"cf-ipcountry\") ?? c.req.header(\"x-vercel-ip-country\") ?? null,\n        method: c.req.method,\n        path,\n    };\n}\nfunction sanitizeAuthActivityMetadata(metadata) {\n    const output = {};\n    for (const [key, value] of Object.entries(metadata ?? {})) {\n        if (!AUTH_ACTIVITY_METADATA_ALLOWLIST.has(key) || AUTH_ACTIVITY_SECRET_KEY_PATTERN.test(key))\n            continue;\n        if (value === null || value === undefined)\n            continue;\n        const text = String(value).trim();\n        if (!text)\n            continue;\n        output[key] = AUTH_ACTIVITY_EMAIL_PATTERN.test(text)\n            ? \"[email]\"\n            : String(redactAuthLogValue(text)).slice(0, 256);\n    }\n    return output;\n}\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    const rows = result?.rows;\n    return Array.isArray(rows) ? rows : [];\n}\nasync function loadAuthUserById(dbInstance, userId) {\n    if (!userId || !dbInstance || typeof dbInstance.execute !== \"function\")\n        return null;\n    try {\n        const result = await dbInstance.execute(sql `\n      SELECT id, email, name, email_verified\n      FROM \"user\"\n      WHERE id = ${userId}\n      LIMIT 1\n    `);\n        const row = rowsFromResult(result)[0];\n        if (!row?.id)\n            return null;\n        return {\n            id: String(row.id),\n            email: String(row.email ?? \"\"),\n            name: row.name ? String(row.name) : null,\n            role: null,\n            plan: null,\n            emailVerified: Boolean(row.email_verified),\n        };\n    }\n    catch {\n        return null;\n    }\n}\nasync function loadAuthUserByEmail(dbInstance, email) {\n    if (!email || !dbInstance || typeof dbInstance.execute !== \"function\")\n        return null;\n    try {\n        const result = await dbInstance.execute(sql `\n      SELECT id, email, name, email_verified\n      FROM \"user\"\n      WHERE lower(email) = ${email}\n      LIMIT 1\n    `);\n        const row = rowsFromResult(result)[0];\n        if (!row?.id)\n            return null;\n        return {\n            id: String(row.id),\n            email: String(row.email ?? \"\"),\n            name: row.name ? String(row.name) : null,\n            role: null,\n            plan: null,\n            emailVerified: Boolean(row.email_verified),\n        };\n    }\n    catch {\n        return null;\n    }\n}\nasync function buildAuthActivityEvent(dbInstance, c, params) {\n    const request = authActivityRequest(c);\n    const actorUser = await loadAuthUserById(dbInstance, params.actorUserId ?? null);\n    const attemptedEmail = normalizeEmail(params.authAttempt?.attemptedEmail);\n    const matchedUser = params.authAttempt?.matchedUserId\n        ? await loadAuthUserById(dbInstance, params.authAttempt.matchedUserId)\n        : await loadAuthUserByEmail(dbInstance, attemptedEmail);\n    const actorType = (params.actorType ?? (params.actorUserId ? \"user\" : \"anonymous\")).slice(0, 64);\n    const actorEmail = normalizeEmail(actorUser?.email);\n    const attemptedEmailHash = authActivityHash(attemptedEmail);\n    const actorEmailHash = authActivityHash(actorEmail);\n    const authAttemptJson = {\n        attemptedEmail,\n        attemptedEmailHash,\n        matchedUserId: params.authAttempt?.matchedUserId ?? matchedUser?.id ?? null,\n        provider: params.authAttempt?.provider ?? \"email\",\n        reasonCode: params.reasonCode ?? null,\n    };\n    const actorUserSnapshotJson = actorUser\n        ? {\n            id: actorUser.id,\n            email: actorUser.email,\n            name: actorUser.name,\n            role: actorUser.role,\n            plan: actorUser.plan,\n            emailVerified: actorUser.emailVerified,\n        }\n        : {};\n    const requestContextJson = {\n        requestId: request.requestId,\n        ipAddress: request.ipAddress,\n        ipHash: request.ipHash,\n        userAgent: request.userAgent,\n        userAgentHash: request.userAgentHash,\n        country: request.country,\n        method: request.method,\n        path: request.path,\n        status: params.httpStatus ?? null,\n    };\n    const metadataJson = sanitizeAuthActivityMetadata(params.metadata);\n    return {\n        eventId: `auth_${randomUUID()}`,\n        occurredAt: new Date(),\n        receivedAt: new Date(),\n        category: \"auth\",\n        action: params.action.slice(0, 96),\n        outcome: params.outcome,\n        severity: params.outcome === \"success\" ? \"info\" : \"warning\",\n        actorType,\n        actorUserId: params.actorUserId ?? null,\n        actorRole: null,\n        actorSessionIdHash: authActivityHash(params.actorSessionToken),\n        actorTokenId: null,\n        targetType: null,\n        targetId: null,\n        targetOwnerUserId: null,\n        appId: null,\n        appName: null,\n        environment: null,\n        deployId: null,\n        requestId: request.requestId,\n        source: \"server.auth\",\n        ipHash: request.ipHash,\n        userAgentHash: request.userAgentHash,\n        country: request.country,\n        reasonCode: params.reasonCode ?? null,\n        metadataJson,\n        searchText: [\"auth\", params.action, params.outcome, params.actorUserId, params.reasonCode]\n            .filter(Boolean)\n            .join(\" \")\n            .slice(0, 1024),\n        actorUserSnapshotJson,\n        targetUserSnapshotJson: {},\n        appSnapshotJson: {},\n        requestContextJson,\n        authAttemptJson,\n        deployContextJson: {},\n        contextStatus: actorUser ? \"full\" : actorType === \"anonymous\" ? \"anonymous\" : \"partial\",\n        actorEmail,\n        actorEmailHash,\n        targetUserEmail: null,\n        targetUserEmailHash: null,\n        attemptedEmail,\n        attemptedEmailHash,\n        ownerEmail: null,\n        ownerEmailHash: null,\n        appOwnerUserId: null,\n        routePath: request.path,\n        httpMethod: request.method,\n        httpStatus: params.httpStatus ?? null,\n    };\n}\nasync function appendAuthActivitySpool(event) {\n    const { mkdir, open } = await import(\"node:fs/promises\");\n    const { join } = await import(\"node:path\");\n    const dir = process.env.GENCOW_ACTIVITY_SPOOL_DIR ?? AUTH_ACTIVITY_SPOOL_DIR;\n    await mkdir(dir, { recursive: true, mode: 0o700 });\n    const file = join(dir, `${new Date().toISOString().slice(0, 10)}.jsonl`);\n    const handle = await open(file, \"a\", 0o600);\n    try {\n        await handle.appendFile(`${JSON.stringify(event)}\\n`, \"utf8\");\n    }\n    finally {\n        await handle.close();\n    }\n}\nexport async function recordAuthActivity(dbInstance, c, params) {\n    const event = await buildAuthActivityEvent(dbInstance, c, params);\n    if (isTenantAuthActivityRuntime()) {\n        await deliverTenantAuthActivity(event);\n        return;\n    }\n    try {\n        if (!dbInstance || typeof dbInstance.execute !== \"function\") {\n            throw new Error(\"auth activity DB handle is unavailable\");\n        }\n        await dbInstance.execute(sql `\n      INSERT INTO platform_activity_events (\n        event_id, category, action, outcome, severity, actor_type, actor_user_id,\n        actor_session_id_hash, request_id, source, ip_hash, user_agent_hash, country,\n        reason_code, metadata_json, search_text, actor_user_snapshot_json,\n        target_user_snapshot_json, app_snapshot_json, request_context_json, auth_attempt_json,\n        deploy_context_json, context_status, actor_email, actor_email_hash, target_user_email,\n        target_user_email_hash, attempted_email, attempted_email_hash, owner_email,\n        owner_email_hash, app_owner_user_id, route_path, http_method, http_status\n      ) VALUES (\n        ${event.eventId}, 'auth', ${event.action}, ${event.outcome},\n        ${event.severity},\n        ${event.actorType},\n        ${event.actorUserId},\n        ${event.actorSessionIdHash},\n        ${event.requestId},\n        'server.auth',\n        ${event.ipHash},\n        ${event.userAgentHash},\n        ${event.country},\n        ${event.reasonCode},\n        ${JSON.stringify(event.metadataJson)}::jsonb,\n        ${event.searchText},\n        ${JSON.stringify(event.actorUserSnapshotJson)}::jsonb,\n        ${JSON.stringify(event.targetUserSnapshotJson)}::jsonb,\n        ${JSON.stringify(event.appSnapshotJson)}::jsonb,\n        ${JSON.stringify(event.requestContextJson)}::jsonb,\n        ${JSON.stringify(event.authAttemptJson)}::jsonb,\n        ${JSON.stringify(event.deployContextJson)}::jsonb,\n        ${event.contextStatus},\n        ${event.actorEmail},\n        ${event.actorEmailHash},\n        ${event.targetUserEmail},\n        ${event.targetUserEmailHash},\n        ${event.attemptedEmail},\n        ${event.attemptedEmailHash},\n        ${event.ownerEmail},\n        ${event.ownerEmailHash},\n        ${event.appOwnerUserId},\n        ${event.routePath},\n        ${event.httpMethod},\n        ${event.httpStatus}\n      )\n    `);\n    }\n    catch {\n        try {\n            await appendAuthActivitySpool(event);\n        }\n        catch {\n            console.warn(`[activity-log] auth event dropped event=${event.eventId} app=platform transport=db_error spool=write_error`);\n        }\n    }\n}\n", "function stringifyAuthLogValue(value) {\n    if (value instanceof Error)\n        return value.message;\n    if (typeof value === \"string\")\n        return value;\n    try {\n        return JSON.stringify(value);\n    }\n    catch {\n        return String(value);\n    }\n}\nexport function redactAuthLogValue(value) {\n    return stringifyAuthLogValue(value)\n        .replace(/\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi, \"<email>\")\n        .replace(/\\bGOCSPX-[A-Za-z0-9_-]+\\b/g, \"<redacted>\")\n        .replace(/([a-z][a-z0-9+.-]*:\\/\\/)([^:/@\\s]+):([^/@\\s]+)@/gi, \"$1<redacted>:<redacted>@\")\n        .replace(/\\b(bearer)\\s+[a-z0-9._~+/=-]+/gi, \"$1 <redacted>\")\n        .replace(/([?&](?:code|state|token|sessionToken|session_token|access_token|refresh_token|id_token|client_secret|inviteReservation|reservation)=)[^&#\\s]+/gi, \"$1<redacted>\")\n        .replace(/\\b([a-z0-9_]*(?:token|secret|password|passwd|pwd|api[_-]?key|session[_-]?token|exchange[_-]?code|oauth[_-]?code|state|client[_-]?secret|invite[_-]?reservation|reservation|code)[a-z0-9_]*)\\s*[:=]\\s*(\"[^\"]*\"|'[^']*'|[^\\s,;]+)/gi, \"$1=<redacted>\");\n}\n", "import { mkdir, open, readdir, readFile, rename, unlink } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nconst AUTH_ACTIVITY_PATH = \"/internal/activity/auth\";\nconst DEFAULT_TIMEOUT_MS = 1_500;\nconst MAX_REPLAY_FILES_PER_DRAIN = 100;\nconst MAX_RETRY_DELAY_MS = 30_000;\nconst drainQueues = new Map();\nconst drainTimers = new Map();\nconst drainAttempts = new Map();\nfunction cleanEnv(value) {\n    return value?.trim() ?? \"\";\n}\nfunction snapshotTenantEnv(env) {\n    return {\n        GENCOW_APP_DATA_DIR: env.GENCOW_APP_DATA_DIR,\n        GENCOW_APP_DB_ID: env.GENCOW_APP_DB_ID,\n        GENCOW_APP_NAME: env.GENCOW_APP_NAME,\n        GENCOW_INTERNAL_TOKEN: env.GENCOW_INTERNAL_TOKEN,\n        GENCOW_PLATFORM_INTERNAL_URL: env.GENCOW_PLATFORM_INTERNAL_URL,\n    };\n}\nfunction resolveConfig(env) {\n    const appId = cleanEnv(env.GENCOW_APP_DB_ID);\n    const appName = cleanEnv(env.GENCOW_APP_NAME);\n    const token = cleanEnv(env.GENCOW_INTERNAL_TOKEN);\n    const platformUrl = cleanEnv(env.GENCOW_PLATFORM_INTERNAL_URL).replace(/\\/+$/, \"\");\n    if (!/^\\d+$/.test(appId) || !/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/.test(appName))\n        return null;\n    if (!token || !/^https?:\\/\\//.test(platformUrl))\n        return null;\n    return { appId, appName, token, platformUrl };\n}\nexport function isTenantAuthActivityRuntime(env = process.env) {\n    const appId = cleanEnv(env.GENCOW_APP_DB_ID);\n    const appName = cleanEnv(env.GENCOW_APP_NAME);\n    return (cleanEnv(env.GENCOW_APP_DATA_DIR) !== \"\" &&\n        /^\\d+$/.test(appId) &&\n        /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/.test(appName));\n}\nexport function resolveTenantActivitySpoolDir(env = process.env) {\n    const appDataDir = cleanEnv(env.GENCOW_APP_DATA_DIR);\n    if (!appDataDir)\n        throw new Error(\"tenant app data dir is unavailable\");\n    return resolve(appDataDir, \"data\", \".gencow\", \"activity-spool\");\n}\nfunction transportErrorCode(error) {\n    if (error instanceof DOMException && error.name === \"AbortError\")\n        return \"timeout\";\n    return \"network_error\";\n}\nasync function postEvent(payload, env, deps) {\n    const config = resolveConfig(env);\n    if (!config)\n        return { ok: false, errorCode: \"config_error\" };\n    const controller = new AbortController();\n    const timeout = setTimeout(() => controller.abort(), deps.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n    try {\n        const response = await (deps.fetchImpl ?? fetch)(`${config.platformUrl}${AUTH_ACTIVITY_PATH}`, {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"X-Internal-Token\": config.token,\n                \"X-Gencow-App-Id\": config.appId,\n                \"X-Gencow-App-Name\": config.appName,\n            },\n            body: JSON.stringify(payload),\n            signal: controller.signal,\n        });\n        if (!response.ok)\n            return { ok: false, errorCode: `http_${response.status}` };\n        return { ok: true };\n    }\n    catch (error) {\n        return { ok: false, errorCode: transportErrorCode(error) };\n    }\n    finally {\n        clearTimeout(timeout);\n    }\n}\nfunction safeEventFileName(eventId) {\n    return eventId.replace(/[^A-Za-z0-9_-]/g, \"_\");\n}\nasync function appendSpool(payload, env) {\n    const dir = resolveTenantActivitySpoolDir(env);\n    await mkdir(dir, { recursive: true, mode: 0o700 });\n    const safeEventId = safeEventFileName(payload.eventId);\n    const finalPath = join(dir, `${safeEventId}.jsonl`);\n    const temporaryPath = join(dir, `.${safeEventId}.${randomUUID()}.tmp`);\n    const handle = await open(temporaryPath, \"wx\", 0o600);\n    try {\n        await handle.writeFile(`${JSON.stringify(payload)}\\n`, \"utf8\");\n        await handle.sync();\n    }\n    finally {\n        await handle.close();\n    }\n    await rename(temporaryPath, finalPath).catch(async (error) => {\n        await unlink(temporaryPath).catch(() => undefined);\n        throw error;\n    });\n    const directoryHandle = await open(dir, \"r\");\n    try {\n        await directoryHandle.sync();\n    }\n    finally {\n        await directoryHandle.close();\n    }\n}\nfunction isValidSpooledPayload(value) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value))\n        return false;\n    const payload = value;\n    return (typeof payload.eventId === \"string\" &&\n        payload.eventId.startsWith(\"auth_\") &&\n        typeof payload.action === \"string\");\n}\nasync function quarantineCorruptFile(file) {\n    await rename(file, `${file}.corrupt`).catch(async () => {\n        await unlink(file).catch(() => undefined);\n    });\n}\nasync function drainSpoolOnce(env, deps) {\n    const dir = resolveTenantActivitySpoolDir(env);\n    let names;\n    try {\n        names = (await readdir(dir))\n            .filter((name) => name.endsWith(\".jsonl\"))\n            .sort()\n            .slice(0, MAX_REPLAY_FILES_PER_DRAIN);\n    }\n    catch {\n        return \"drained\";\n    }\n    for (const name of names) {\n        const file = join(dir, name);\n        let payload;\n        try {\n            const parsed = JSON.parse((await readFile(file, \"utf8\")).trim());\n            if (!isValidSpooledPayload(parsed))\n                throw new Error(\"invalid spool payload\");\n            payload = parsed;\n        }\n        catch {\n            await quarantineCorruptFile(file);\n            (deps.logger ?? console).warn(\"[activity-log] corrupt auth spool quarantined\");\n            continue;\n        }\n        const replayDeps = { ...deps, timeoutMs: Math.min(deps.timeoutMs ?? DEFAULT_TIMEOUT_MS, 500) };\n        if (!(await postEvent(payload, env, replayDeps)).ok)\n            return \"retry\";\n        await unlink(file).catch((error) => {\n            if (error.code !== \"ENOENT\")\n                throw error;\n        });\n    }\n    return names.length >= MAX_REPLAY_FILES_PER_DRAIN ? \"retry\" : \"drained\";\n}\nfunction enqueueDrain(env, deps) {\n    const queueKey = resolveTenantActivitySpoolDir(env);\n    const previous = drainQueues.get(queueKey) ?? Promise.resolve(\"drained\");\n    const current = previous.catch(() => undefined).then(() => drainSpoolOnce(env, deps));\n    drainQueues.set(queueKey, current);\n    return current.finally(() => {\n        if (drainQueues.get(queueKey) === current)\n            drainQueues.delete(queueKey);\n    });\n}\nfunction scheduleBackgroundDrain(env, deps, delayMs = 0) {\n    const queueKey = resolveTenantActivitySpoolDir(env);\n    const existing = drainTimers.get(queueKey);\n    if (existing && delayMs > 0)\n        return;\n    if (existing)\n        clearTimeout(existing);\n    const timer = setTimeout(async () => {\n        drainTimers.delete(queueKey);\n        const outcome = await enqueueDrain(env, deps).catch(() => \"retry\");\n        if (outcome === \"drained\") {\n            drainAttempts.delete(queueKey);\n            return;\n        }\n        const attempt = (drainAttempts.get(queueKey) ?? 0) + 1;\n        drainAttempts.set(queueKey, attempt);\n        scheduleBackgroundDrain(env, deps, Math.min(250 * 2 ** Math.min(attempt, 7), MAX_RETRY_DELAY_MS));\n    }, delayMs);\n    timer.unref?.();\n    drainTimers.set(queueKey, timer);\n}\nexport async function drainTenantAuthActivitySpool(env, deps = {}) {\n    await enqueueDrain(env, deps);\n}\nexport async function deliverTenantAuthActivity(payload, deps = {}) {\n    const env = snapshotTenantEnv(deps.env ?? process.env);\n    try {\n        await (deps.appendSpoolImpl ?? appendSpool)(payload, env);\n    }\n    catch {\n        (deps.logger ?? console).warn(`[activity-log] auth event dropped event=${payload.eventId} app=${cleanEnv(env.GENCOW_APP_NAME) || \"unknown\"} transport=not_attempted spool=write_error`);\n        return { eventId: payload.eventId, stored: \"dropped\", errorCode: \"spool_write_error\" };\n    }\n    scheduleBackgroundDrain(env, deps);\n    return { eventId: payload.eventId, stored: \"spool\", errorCode: \"queued\" };\n}\n", "import { normalizeFrontendOrigin } from \"@gencow/internal/config\";\nexport { normalizeFrontendOrigin } from \"@gencow/internal/config\";\nconst LOCALHOST_WILDCARD_RE = /^https?:\\/\\/localhost:\\*$/;\nfunction normalizeDomain(value) {\n    const raw = value?.trim();\n    if (!raw)\n        return null;\n    return (raw\n        .replace(/^https?:\\/\\//, \"\")\n        .split(\"/\")[0]\n        ?.trim() || null);\n}\nfunction splitEnvOrigins(value) {\n    return (value\n        ?.split(\",\")\n        .map((entry) => entry.trim())\n        .filter(Boolean) ?? []);\n}\nfunction addDomainOrigins(origins, value) {\n    const domain = normalizeDomain(value);\n    if (!domain || domain.includes(\"*\"))\n        return;\n    origins.add(`https://${domain}`);\n    origins.add(`http://${domain}`);\n    if (domain.startsWith(\"www.\") || domain.includes(\":\")) {\n        return;\n    }\n    origins.add(`https://www.${domain}`);\n    origins.add(`http://www.${domain}`);\n}\nfunction hasURLDecoration(url) {\n    return (url.username !== \"\" || url.password !== \"\" || url.pathname !== \"/\" || url.search !== \"\" || url.hash !== \"\");\n}\nfunction addExactPublicOrigin(origins, value) {\n    if (!value?.trim())\n        return;\n    try {\n        origins.add(normalizeFrontendOrigin(value));\n    }\n    catch {\n        /* Invalid managed/operator origins are ignored by policy resolution. */\n    }\n}\nfunction addConfiguredOrigin(origins, value) {\n    const raw = value?.trim();\n    if (!raw)\n        return;\n    if (LOCALHOST_WILDCARD_RE.test(raw)) {\n        origins.add(raw);\n        return;\n    }\n    if (raw.includes(\"*\"))\n        return;\n    try {\n        const url = new URL(raw);\n        if (![\"http:\", \"https:\"].includes(url.protocol) || hasURLDecoration(url))\n            return;\n        origins.add(url.origin);\n        return;\n    }\n    catch {\n        if (raw.includes(\"/\") || raw.includes(\"?\") || raw.includes(\"#\") || raw.includes(\"@\"))\n            return;\n        addDomainOrigins(origins, raw);\n    }\n}\nfunction addURLOrigin(origins, value) {\n    const raw = value?.trim();\n    if (!raw)\n        return;\n    try {\n        const url = new URL(raw);\n        if ([\"http:\", \"https:\"].includes(url.protocol) && url.username === \"\" && url.password === \"\") {\n            origins.add(url.origin);\n        }\n    }\n    catch {\n        addDomainOrigins(origins, raw);\n    }\n}\nfunction addAuthCallbackOrigins(origins, authConfig) {\n    addURLOrigin(origins, authConfig?.oauth?.callbackURL);\n    for (const callbackURL of authConfig?.oauth?.allowedCallbackURLs ?? []) {\n        addURLOrigin(origins, callbackURL);\n    }\n}\nexport function resolveOriginPolicy(params = {}) {\n    const publicOrigins = new Set();\n    addDomainOrigins(publicOrigins, params.baseDomain);\n    addDomainOrigins(publicOrigins, params.appPublicDomain);\n    addURLOrigin(publicOrigins, params.capturedBaseURL);\n    const managedPublicOrigins = Array.isArray(params.managedPublicOrigins)\n        ? params.managedPublicOrigins\n        : splitEnvOrigins(params.managedPublicOrigins);\n    for (const origin of managedPublicOrigins) {\n        addExactPublicOrigin(publicOrigins, origin);\n    }\n    for (const origin of params.frontendOrigins ?? []) {\n        addExactPublicOrigin(publicOrigins, origin);\n    }\n    for (const origin of params.projectTrustedOrigins ?? []) {\n        addConfiguredOrigin(publicOrigins, origin);\n    }\n    for (const origin of splitEnvOrigins(params.corsOriginsEnv)) {\n        addConfiguredOrigin(publicOrigins, origin);\n    }\n    const authOrigins = new Set(publicOrigins);\n    addAuthCallbackOrigins(authOrigins, params.authConfig);\n    return {\n        publicOrigins: [...publicOrigins],\n        apiAllowedOrigins: [...publicOrigins],\n        authTrustedOrigins: [...authOrigins],\n    };\n}\nexport function originMatchesAllowedOrigin(origin, allowedOrigin) {\n    if (origin === allowedOrigin)\n        return true;\n    if (!LOCALHOST_WILDCARD_RE.test(allowedOrigin))\n        return false;\n    try {\n        const url = new URL(origin);\n        const allowed = new URL(allowedOrigin.replace(\":*\", \":1\"));\n        return url.protocol === allowed.protocol && url.hostname === \"localhost\";\n    }\n    catch {\n        return false;\n    }\n}\nexport function isOriginAllowed(origin, allowedOrigins) {\n    return allowedOrigins.some((allowedOrigin) => originMatchesAllowedOrigin(origin, allowedOrigin));\n}\nexport function resolveCorsOrigin(origin, policy) {\n    if (!origin)\n        return \"\";\n    return isOriginAllowed(origin, policy.apiAllowedOrigins) ? origin : \"\";\n}\n", "import { isOriginAllowed } from \"./server-origin-policy.js\";\nfunction normalizeConfiguredDomain(value) {\n    const raw = value?.trim();\n    if (!raw)\n        return null;\n    return (raw\n        .replace(/^https?:\\/\\//, \"\")\n        .split(\"/\")[0]\n        ?.trim() || null);\n}\nfunction addDomainOrigins(origins, value) {\n    const domain = normalizeConfiguredDomain(value);\n    if (!domain)\n        return;\n    origins.add(`https://${domain}`);\n    origins.add(`http://${domain}`);\n    if (domain.startsWith(\"www.\") || domain.includes(\"*\") || domain.includes(\":\")) {\n        return;\n    }\n    origins.add(`https://www.${domain}`);\n    origins.add(`http://www.${domain}`);\n}\nfunction addConfiguredOrigin(origins, value) {\n    const raw = value?.trim();\n    if (!raw)\n        return;\n    try {\n        origins.add(new URL(raw).origin);\n    }\n    catch {\n        addDomainOrigins(origins, raw);\n    }\n}\nfunction buildOAuthCallbackURLFromOrigin(origin) {\n    const url = new URL(origin);\n    url.pathname = \"/auth/callback\";\n    url.search = \"\";\n    url.hash = \"\";\n    return url.toString();\n}\nexport function resolveOAuthTrustedOrigins(baseTrustedOrigins, authConfig) {\n    const origins = new Set(baseTrustedOrigins);\n    addConfiguredOrigin(origins, authConfig?.oauth?.callbackURL);\n    for (const callbackURL of authConfig?.oauth?.allowedCallbackURLs ?? []) {\n        addConfiguredOrigin(origins, callbackURL);\n    }\n    return [...origins];\n}\nexport function resolveOAuthCallbackURL(options) {\n    const trustedOrigins = resolveOAuthTrustedOrigins(options.trustedOrigins, options.authConfig);\n    const base = options.baseURL;\n    const configured = options.authConfig?.oauth?.callbackURL?.trim();\n    const appPublicDomain = normalizeConfiguredDomain(options.appPublicDomain);\n    const candidate = options.requestedCallbackURL?.trim() ||\n        (configured ? new URL(configured, base).toString() : null) ||\n        (appPublicDomain ? buildOAuthCallbackURLFromOrigin(`https://${appPublicDomain}`) : null) ||\n        buildOAuthCallbackURLFromOrigin(new URL(base).origin);\n    try {\n        const url = new URL(candidate, base);\n        if (![\"http:\", \"https:\"].includes(url.protocol))\n            return null;\n        return isOriginAllowed(url.origin, trustedOrigins) ? url.toString() : null;\n    }\n    catch {\n        return null;\n    }\n}\nexport function isTrustedOAuthCallbackURL(value, options) {\n    return resolveOAuthCallbackURL({ ...options, requestedCallbackURL: value }) !== null;\n}\n", "import { createHash } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { decrypt, encrypt } from \"./crypto.js\";\nexport { OAUTH_EXCHANGE_SYSTEM_SCHEMA_STATEMENTS } from \"./auth-oauth-exchange-schema.js\";\nexport const OAUTH_EXCHANGE_CODE_TTL_MS = 5 * 60 * 1000;\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction hashOAuthExchangeCode(code) {\n    return createHash(\"sha256\").update(code).digest(\"hex\");\n}\nexport async function createOAuthExchangeCode(db, record) {\n    const code = crypto.randomUUID();\n    const codeHash = hashOAuthExchangeCode(code);\n    const encrypted = encrypt(record.sessionToken);\n    const expiresAt = new Date(Date.now() + OAUTH_EXCHANGE_CODE_TTL_MS);\n    await db.execute(sql `DELETE FROM _gencow_oauth_codes WHERE expires_at <= NOW() OR used_at IS NOT NULL`);\n    await db.execute(sql `\n    INSERT INTO _gencow_oauth_codes (\n      code_hash,\n      session_token_encrypted,\n      token_iv,\n      user_id,\n      user_email,\n      user_name,\n      expires_at\n    )\n    VALUES (\n      ${codeHash},\n      ${encrypted.encrypted},\n      ${encrypted.iv},\n      ${record.user.id},\n      ${record.user.email},\n      ${record.user.name ?? null},\n      ${expiresAt}\n    )\n  `);\n    return code;\n}\nexport async function consumeOAuthExchangeCode(db, code) {\n    const codeHash = hashOAuthExchangeCode(code);\n    const result = await db.execute(sql `\n    UPDATE _gencow_oauth_codes\n    SET used_at = NOW()\n    WHERE code_hash = ${codeHash}\n      AND used_at IS NULL\n      AND expires_at > NOW()\n    RETURNING session_token_encrypted, token_iv, user_id, user_email, user_name\n  `);\n    const row = rowsFromResult(result)[0];\n    if (!row?.session_token_encrypted || !row.token_iv || !row.user_id || !row.user_email) {\n        return null;\n    }\n    return {\n        sessionToken: decrypt(row.session_token_encrypted, row.token_iv),\n        user: {\n            id: row.user_id,\n            email: row.user_email,\n            name: row.user_name ?? undefined,\n        },\n    };\n}\n", "/**\n * packages/server/src/crypto.ts\n *\n * AES-256-GCM \uC554\uD638\uD654/\uBCF5\uD638\uD654 \u2014 API Key \uB4F1 \uBBFC\uAC10 \uB370\uC774\uD130 \uBCF4\uD638.\n *\n * \uC554\uD638\uD654 \uD0A4: .gencow/secret.key (\uC790\uB3D9 \uC0DD\uC131, 32 bytes)\n * \uC54C\uACE0\uB9AC\uC998: AES-256-GCM (\uC778\uC99D \uD0DC\uADF8 \uD3EC\uD568 \u2192 \uBCC0\uC870 \uD0D0\uC9C0)\n */\nimport { createCipheriv, createDecipheriv, randomBytes } from \"crypto\";\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from \"fs\";\nimport { dirname, isAbsolute, resolve } from \"path\";\nimport { resolveRuntimeBaseDir } from \"./server-bootstrap.js\";\nconst ALGORITHM = \"aes-256-gcm\";\nconst KEY_LENGTH = 32; // 256 bits\nconst IV_LENGTH = 16; // 128 bits\nconst AUTH_TAG_LENGTH = 16; // 128 bits\n// \u2500\u2500\u2500 Secret Key Management \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet cachedKey = null;\n/**\n * .gencow/secret.key \uACBD\uB85C \uACB0\uC815\n * \uD658\uACBD\uBCC0\uC218 GENCOW_SECRET_KEY_PATH \uB610\uB294 \uC571 \uB7F0\uD0C0\uC784 \uB370\uC774\uD130 \uB514\uB809\uD1A0\uB9AC\uC758 .gencow/secret.key\n */\nexport function resolveSecretKeyPath(envSecretKeyPath = process.env.GENCOW_SECRET_KEY_PATH, envAppDataDir = process.env.GENCOW_APP_DATA_DIR) {\n    const configuredPath = envSecretKeyPath?.trim();\n    if (configuredPath) {\n        return isAbsolute(configuredPath)\n            ? configuredPath\n            : resolve(resolveRuntimeBaseDir(envAppDataDir), configuredPath);\n    }\n    return resolve(resolveRuntimeBaseDir(envAppDataDir), \".gencow\", \"secret.key\");\n}\n/**\n * \uC554\uD638\uD654 \uD0A4 \uB85C\uB4DC\n *\n * BaaS \uBAA8\uB4DC: GENCOW_INTERNAL_TOKEN\uC5D0\uC11C deterministic key \uD30C\uC0DD (\uD30C\uC77C \uBD88\uD544\uC694)\n *   \u2192 cowbox \uC0CC\uB4DC\uBC15\uC2A4\uC5D0\uC11C .gencow/ \uB514\uB809\uD1A0\uB9AC \uC4F0\uAE30 \uBD88\uAC00\uD558\uBBC0\uB85C \uD30C\uC77C \uAE30\uBC18 key \uC0AC\uC6A9 \uBD88\uAC00\n * \uB85C\uCEEC dev: \uAE30\uC874 \uD30C\uC77C \uAE30\uBC18 key \uAD00\uB9AC (.gencow/secret.key \uC790\uB3D9 \uC0DD\uC131)\n */\nexport function getSecretKey() {\n    if (cachedKey)\n        return cachedKey;\n    // BaaS \uBAA8\uB4DC: GENCOW_INTERNAL_TOKEN \u2192 deterministic HMAC key \uD30C\uC0DD\n    // cowbox \uD658\uACBD\uC5D0\uC11C\uB294 .gencow/ \uB514\uB809\uD1A0\uB9AC\uC5D0 \uC4F0\uAE30 \uBD88\uAC00 \u2192 \uD30C\uC77C \uAE30\uBC18 key \uBD88\uAC00\n    const internalToken = process.env.GENCOW_INTERNAL_TOKEN;\n    if (internalToken) {\n        const { createHash } = require(\"crypto\");\n        cachedKey = createHash(\"sha256\")\n            .update(`gencow-settings-key:${internalToken}`)\n            .digest()\n            .subarray(0, KEY_LENGTH);\n        return cachedKey;\n    }\n    // \uB85C\uCEEC dev: \uAE30\uC874 \uD30C\uC77C \uAE30\uBC18 \uD0A4 \uAD00\uB9AC\n    const keyPath = resolveSecretKeyPath();\n    try {\n        cachedKey = readFileSync(keyPath);\n        if (cachedKey.length !== KEY_LENGTH) {\n            throw new Error(`Invalid key length: ${cachedKey.length} (expected ${KEY_LENGTH})`);\n        }\n        return cachedKey;\n    }\n    catch {\n        // \uD0A4 \uD30C\uC77C\uC774 \uC5C6\uC73C\uBA74 \uC790\uB3D9 \uC0DD\uC131\n        try {\n            const dir = dirname(keyPath);\n            if (!existsSync(dir)) {\n                mkdirSync(dir, { recursive: true });\n            }\n            const newKey = randomBytes(KEY_LENGTH);\n            writeFileSync(keyPath, newKey, { mode: 0o600 }); // owner-only read/write\n            console.log(`[crypto] Generated secret key: ${keyPath}`);\n            cachedKey = newKey;\n            return cachedKey;\n        }\n        catch {\n            // fallback: \uBA54\uBAA8\uB9AC \uC804\uC6A9 \uD0A4 (\uC11C\uBC84 \uC7AC\uC2DC\uC791 \uC2DC \uBCC0\uACBD\uB428)\n            // cowbox \uC678\uBD80\uC5D0\uC11C \uD30C\uC77C \uC4F0\uAE30 \uC2E4\uD328 \uC2DC\uC5D0\uB3C4 \uC11C\uBC84\uB294 \uC2DC\uC791 \uAC00\uB2A5\n            console.warn(`[crypto] Cannot write secret.key \u2014 using ephemeral key (settings will reset on restart)`);\n            cachedKey = randomBytes(KEY_LENGTH);\n            return cachedKey;\n        }\n    }\n}\n// \u2500\u2500\u2500 Encrypt / Decrypt \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * \uD3C9\uBB38\uC744 AES-256-GCM\uC73C\uB85C \uC554\uD638\uD654\n * @returns { encrypted: hex string, iv: hex string }\n */\nexport function encrypt(plaintext) {\n    const key = getSecretKey();\n    const iv = randomBytes(IV_LENGTH);\n    const cipher = createCipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });\n    let encrypted = cipher.update(plaintext, \"utf8\", \"hex\");\n    encrypted += cipher.final(\"hex\");\n    // authTag\uB97C encrypted\uC5D0 append (\uBCF5\uD638\uD654 \uC2DC \uBD84\uB9AC)\n    const authTag = cipher.getAuthTag().toString(\"hex\");\n    encrypted += authTag;\n    return {\n        encrypted,\n        iv: iv.toString(\"hex\"),\n    };\n}\n/**\n * AES-256-GCM \uBCF5\uD638\uD654\n */\nexport function decrypt(encryptedHex, ivHex) {\n    const key = getSecretKey();\n    const iv = Buffer.from(ivHex, \"hex\");\n    // authTag\uB294 encrypted \uB05D 32\uC790 (16 bytes hex)\n    const authTagHex = encryptedHex.slice(-AUTH_TAG_LENGTH * 2);\n    const cipherTextHex = encryptedHex.slice(0, -AUTH_TAG_LENGTH * 2);\n    const decipher = createDecipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });\n    decipher.setAuthTag(Buffer.from(authTagHex, \"hex\"));\n    let decrypted = decipher.update(cipherTextHex, \"hex\", \"utf8\");\n    decrypted += decipher.final(\"utf8\");\n    return decrypted;\n}\n/**\n * API Key \uB9C8\uC2A4\uD0B9 \u2014 \uC55E 8\uC790\uB9CC \uD45C\uC2DC, \uB098\uBA38\uC9C0\uB294 \u2022\u2022\u2022\u2022\n * @example maskKey(\"sk-proj-abc123xyz\") \u2192 \"sk-proj-\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\"\n */\nexport function maskKey(key) {\n    if (key.length <= 8)\n        return \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\";\n    return key.slice(0, 8) + \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\";\n}\n", "const DEFAULT_ALLOWED_RETURN_MODES = [\"token\"];\nconst OAUTH_RETURN_MODES = new Set([\"token\", \"cookie\"]);\nfunction isOAuthReturnMode(value) {\n    return typeof value === \"string\" && OAUTH_RETURN_MODES.has(value);\n}\nfunction normalizeRequestedOAuthReturnMode(value) {\n    return isOAuthReturnMode(value) ? value : \"token\";\n}\nfunction getAllowedReturnModes(config) {\n    if (typeof config !== \"object\" || config === null)\n        return undefined;\n    return config.allowedReturnModes;\n}\nfunction normalizeAllowedOAuthReturnModes(config) {\n    const allowedReturnModes = getAllowedReturnModes(config);\n    if (!Array.isArray(allowedReturnModes))\n        return DEFAULT_ALLOWED_RETURN_MODES;\n    return allowedReturnModes.filter(isOAuthReturnMode);\n}\nexport function resolveOAuthReturnMode(requestedMode, config) {\n    const mode = normalizeRequestedOAuthReturnMode(requestedMode);\n    const allowedModes = normalizeAllowedOAuthReturnModes(config);\n    if (allowedModes.includes(mode))\n        return { ok: true, mode };\n    return {\n        ok: false,\n        mode,\n        error: `OAuth return mode \"${mode}\" is not allowed`,\n    };\n}\n", "function isRecord(value) {\n    return typeof value === \"object\" && value !== null;\n}\nfunction presentFieldValue(value) {\n    return value instanceof Date ? value.toISOString() : value;\n}\nconst SECRET_BEARING_FIELD_NAMES = new Set([\n    \"token\",\n    \"sessionToken\",\n    \"accessToken\",\n    \"refreshToken\",\n    \"idToken\",\n]);\nexport function presentSafeAuthSessionUser(user, additionalFieldNames = []) {\n    if (!isRecord(user) || typeof user.id !== \"string\" || typeof user.email !== \"string\") {\n        return null;\n    }\n    const safeUser = {\n        id: user.id,\n        email: user.email,\n    };\n    if (typeof user.name === \"string\")\n        safeUser.name = user.name;\n    if (typeof user.role === \"string\")\n        safeUser.role = user.role;\n    for (const fieldName of additionalFieldNames) {\n        if (SECRET_BEARING_FIELD_NAMES.has(fieldName))\n            continue;\n        if (fieldName in user && user[fieldName] !== undefined) {\n            safeUser[fieldName] = presentFieldValue(user[fieldName]);\n        }\n    }\n    return safeUser;\n}\n", "import { redactAuthLogValue } from \"./auth-log-redaction.js\";\nfunction toBetterAuthFieldType(type) {\n    if (type === \"boolean\")\n        return \"boolean\";\n    if (type === \"integer\" || type === \"number\")\n        return \"number\";\n    if (type === \"timestamp\")\n        return \"date\";\n    return \"string\";\n}\nfunction buildUserAdditionalFields(authConfig) {\n    const fields = authConfig?.user?.additionalFields;\n    if (!fields || Object.keys(fields).length === 0)\n        return undefined;\n    return Object.fromEntries(Object.entries(fields).map(([name, field]) => [\n        name,\n        {\n            type: toBetterAuthFieldType(field.type),\n            required: field.nullable !== true,\n            ...(field.default !== undefined ? { defaultValue: field.default } : {}),\n            ...(field.columnName ? { fieldName: field.columnName } : {}),\n            input: field.input === true,\n        },\n    ]));\n}\nfunction applyBetterAuthOverrides(defaults, authConfig) {\n    const betterAuth = authConfig?.betterAuth;\n    if (typeof betterAuth === \"function\")\n        return betterAuth(defaults);\n    return defaults;\n}\nfunction toAuthUserLike(user) {\n    return {\n        id: user.id,\n        email: user.email,\n        name: user.name || user.email.split(\"@\")[0],\n        emailVerified: user.emailVerified,\n        createdAt: user.createdAt,\n        updatedAt: user.updatedAt,\n    };\n}\nfunction logBetterAuth(level, message, ...args) {\n    const safeMessage = redactAuthLogValue(message);\n    const safeArgs = args.map((arg) => redactAuthLogValue(arg));\n    if (level === \"error\")\n        console.error(`[better-auth] ${safeMessage}`, ...safeArgs);\n    else if (level === \"warn\")\n        console.warn(`[better-auth] ${safeMessage}`, ...safeArgs);\n    else\n        console.log(`[better-auth] ${safeMessage}`, ...safeArgs);\n}\nexport function getAuthUserAdditionalFieldNames(authConfig) {\n    return Object.keys(authConfig?.user?.additionalFields ?? {});\n}\nexport function buildGencowBetterAuthOptions(params) {\n    const authConfig = params.authConfig;\n    const userAdditionalFields = buildUserAdditionalFields(authConfig);\n    const buildHookContext = params.authHookContext ?? ((request) => ({ request }));\n    const runHook = params.runAuthEventHook ??\n        (async (_label, fn) => {\n            await fn();\n        });\n    const defaults = {\n        ...(params.secret ? { secret: params.secret } : {}),\n        ...(params.database ? { database: params.database } : {}),\n        baseURL: params.baseURL || `http://localhost:${params.port || \"5456\"}`,\n        basePath: \"/api/auth\",\n        logger: { level: \"warn\", log: logBetterAuth },\n        ...(userAdditionalFields ? { user: { additionalFields: userAdditionalFields } } : {}),\n        emailAndPassword: {\n            enabled: true,\n            ...(authConfig?.emailVerification\n                ? {\n                    requireEmailVerification: authConfig.emailVerification.requireEmailVerification ?? true,\n                    autoSignIn: false,\n                }\n                : {}),\n            ...(authConfig?.passwordReset\n                ? {\n                    resetPasswordTokenExpiresIn: authConfig.passwordReset.resetPasswordTokenExpiresIn,\n                    sendResetPassword: async ({ user, url, token }, request) => {\n                        try {\n                            await authConfig.passwordReset.sendResetPassword({\n                                user: toAuthUserLike(user),\n                                url,\n                                token,\n                            }, buildHookContext(request));\n                            console.log(`[auth] Reset password email sent to ${user.email}`);\n                        }\n                        catch (e) {\n                            const error = e instanceof Error ? e : new Error(String(e));\n                            const msg = error.message;\n                            console.error(`[auth] Failed to send reset password email to ${user.email}:`, msg);\n                            throw error;\n                        }\n                    },\n                    onPasswordReset: authConfig.passwordReset.onPasswordReset\n                        ? async ({ user }, request) => {\n                            await runHook(\"onPasswordReset\", () => authConfig.passwordReset.onPasswordReset({ user: toAuthUserLike(user) }, buildHookContext(request)));\n                        }\n                        : undefined,\n                }\n                : {}),\n        },\n        ...(authConfig?.emailVerification\n            ? {\n                emailVerification: {\n                    sendOnSignUp: authConfig.emailVerification.sendOnSignUp ?? true,\n                    autoSignInAfterVerification: authConfig.emailVerification.autoSignInAfterVerification ?? true,\n                    sendVerificationEmail: async ({ user, url, token }, request) => {\n                        try {\n                            const receipt = await authConfig.emailVerification.sendVerificationEmail({\n                                user: toAuthUserLike(user),\n                                url,\n                                token,\n                            }, buildHookContext(request));\n                            params.captureEmailVerificationDelivery?.(receipt);\n                            console.log(`[auth] Verification email sent to ${user.email}`);\n                        }\n                        catch (e) {\n                            const error = e instanceof Error ? e : new Error(String(e));\n                            const msg = error.message;\n                            console.error(`[auth] Failed to send verification email to ${user.email}:`, msg);\n                            throw error;\n                        }\n                    },\n                    beforeEmailVerification: authConfig.emailVerification.beforeEmailVerification\n                        ? async (user, request) => {\n                            await runHook(\"beforeEmailVerification\", () => authConfig.emailVerification.beforeEmailVerification(toAuthUserLike(user), buildHookContext(request)));\n                        }\n                        : undefined,\n                    afterEmailVerification: authConfig.emailVerification.afterEmailVerification\n                        ? async (user, request) => {\n                            await runHook(\"afterEmailVerification\", () => authConfig.emailVerification.afterEmailVerification(toAuthUserLike(user), buildHookContext(request)));\n                        }\n                        : undefined,\n                },\n            }\n            : {}),\n        session: {\n            expiresIn: 60 * 60 * 24 * 7,\n            updateAge: 60 * 60 * 24,\n        },\n        account: {\n            encryptOAuthTokens: true,\n        },\n        socialProviders: params.socialProviders,\n        plugins: params.plugins ?? [],\n        trustedOrigins: params.trustedOrigins,\n    };\n    return applyBetterAuthOverrides(defaults, authConfig);\n}\n", "function asRecord(value) {\n    return value && typeof value === \"object\" ? value : undefined;\n}\nfunction asString(value) {\n    return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\nfunction hasNativeProviderCredentials(config) {\n    return !!asString(config.clientId) && !!asString(config.clientSecret);\n}\nfunction hasCustomProviderCredentials(config) {\n    return !!asString(config.clientId);\n}\nfunction mapKakaoProfileToUser(profile) {\n    const account = asRecord(profile.kakao_account);\n    const kakaoProfile = asRecord(account?.profile);\n    return {\n        id: String(profile.id),\n        email: asString(account?.email),\n        name: asString(kakaoProfile?.nickname),\n        image: asString(kakaoProfile?.profile_image_url),\n    };\n}\nfunction mapNaverProfileToUser(profile) {\n    const response = asRecord(profile.response);\n    return {\n        id: asString(response?.id),\n        email: asString(response?.email),\n        name: asString(response?.name),\n        image: asString(response?.profile_image),\n    };\n}\nexport const BUILT_IN_CUSTOM_OAUTH_PROVIDERS = {\n    kakao: {\n        authorizationUrl: \"https://kauth.kakao.com/oauth/authorize\",\n        tokenUrl: \"https://kauth.kakao.com/oauth/token\",\n        userInfoUrl: \"https://kapi.kakao.com/v2/user/me\",\n        scopes: [\"profile_nickname\", \"profile_image\", \"account_email\"],\n        mapProfileToUser: mapKakaoProfileToUser,\n    },\n    naver: {\n        authorizationUrl: \"https://nid.naver.com/oauth2.0/authorize\",\n        tokenUrl: \"https://nid.naver.com/oauth2.0/token\",\n        userInfoUrl: \"https://openapi.naver.com/v1/nid/me\",\n        scopes: [\"name\", \"email\", \"profile_image\"],\n        mapProfileToUser: mapNaverProfileToUser,\n    },\n};\nconst NATIVE_SOCIAL_PROVIDER_IDS = new Set([\"google\", \"apple\"]);\nfunction toNativeSocialProvider(config) {\n    return {\n        clientId: config.clientId,\n        clientSecret: config.clientSecret,\n        redirectURI: config.redirectURI,\n        disableImplicitSignUp: config.disableImplicitSignUp,\n        disableSignUp: config.disableSignUp,\n    };\n}\nfunction toGenericOAuthConfig(providerId, config) {\n    const defaults = BUILT_IN_CUSTOM_OAUTH_PROVIDERS[providerId];\n    const merged = {\n        ...defaults,\n        ...config,\n    };\n    return {\n        providerId,\n        clientId: merged.clientId,\n        clientSecret: merged.clientSecret,\n        authorizationUrl: merged.authorizationUrl,\n        tokenUrl: merged.tokenUrl,\n        userInfoUrl: merged.userInfoUrl,\n        scopes: merged.scopes,\n        pkce: merged.pkce,\n        redirectURI: merged.redirectURI,\n        mapProfileToUser: merged.mapProfileToUser,\n    };\n}\nexport function resolveSocialAuthConfig(config) {\n    const socialProviders = {};\n    const customOAuthConfig = [];\n    for (const [providerId, providerConfig] of Object.entries(config ?? {})) {\n        if (!providerConfig)\n            continue;\n        if (NATIVE_SOCIAL_PROVIDER_IDS.has(providerId)) {\n            const nativeProviderConfig = providerConfig;\n            if (!hasNativeProviderCredentials(nativeProviderConfig))\n                continue;\n            socialProviders[providerId] = toNativeSocialProvider(nativeProviderConfig);\n            continue;\n        }\n        const customProviderConfig = providerConfig;\n        if (!hasCustomProviderCredentials(customProviderConfig))\n            continue;\n        customOAuthConfig.push(toGenericOAuthConfig(providerId, customProviderConfig));\n    }\n    return { socialProviders, customOAuthConfig };\n}\nexport function listEnabledSocialProviderIds(config) {\n    const { socialProviders, customOAuthConfig } = resolveSocialAuthConfig(config);\n    return [...Object.keys(socialProviders), ...customOAuthConfig.map((provider) => provider.providerId)];\n}\n", "import { resolveOriginPolicy } from \"./server-origin-policy.js\";\nexport function resolveBetterAuthTrustedOrigins(params = {}) {\n    return resolveOriginPolicy(params).authTrustedOrigins;\n}\n", "import { redactAuthLogValue } from \"./auth-log-redaction.js\";\nfunction isRecord(value) {\n    return typeof value === \"object\" && value !== null;\n}\nfunction readAuthErrorMessage(value) {\n    if (value instanceof Error)\n        return value.message;\n    if (typeof value === \"string\")\n        return value;\n    if (!isRecord(value))\n        return null;\n    if (typeof value.message === \"string\")\n        return value.message;\n    if (typeof value.error === \"string\")\n        return value.error;\n    return null;\n}\nexport function getPublicAuthErrorMessage(value, fallback = \"Internal Server Error\") {\n    const rawMessage = readAuthErrorMessage(value)?.trim();\n    if (!rawMessage)\n        return fallback;\n    const redacted = redactAuthLogValue(rawMessage);\n    if (redacted !== rawMessage || redacted.includes(\"<redacted>\")) {\n        return fallback;\n    }\n    return redacted;\n}\nexport function sanitizePublicAuthResponsePayload(payload, fallback = \"Authentication failed\") {\n    if (!isRecord(payload))\n        return { error: fallback };\n    const sanitized = {};\n    if (typeof payload.error === \"string\") {\n        sanitized.error = getPublicAuthErrorMessage(payload.error, fallback);\n    }\n    if (typeof payload.message === \"string\") {\n        sanitized.message = getPublicAuthErrorMessage(payload.message, fallback);\n    }\n    if (!(\"error\" in sanitized) && !(\"message\" in sanitized)) {\n        sanitized.error = fallback;\n    }\n    return sanitized;\n}\n", "/**\n * Session resolution helpers shared by better-auth middleware and route handlers.\n *\n * better-auth uses the __Secure- prefix automatically when BETTER_AUTH_URL is\n * https://, but fake requests can be built against localhost. Passing both\n * names keeps bearer-token session lookups stable across HTTP and HTTPS origins.\n */\nexport function sessionTokenToCookieHeader(sessionToken) {\n    return [\n        `better-auth.session_token=${sessionToken}`,\n        `__Secure-better-auth.session_token=${sessionToken}`,\n    ].join(\"; \");\n}\nfunction decodeCookieToken(value) {\n    try {\n        const decoded = decodeURIComponent(value);\n        return decoded || null;\n    }\n    catch {\n        return null;\n    }\n}\nfunction extractSessionTokenFromCookieHeader(cookieHeader) {\n    return extractSessionTokensFromCookieHeader(cookieHeader)[0] ?? null;\n}\nexport function extractSessionTokensFromCookieHeader(cookieHeader) {\n    const tokens = [];\n    const pattern = /(?:^|;\\s*)(?:__Secure-)?better-auth\\.session_token=([^;]+)/g;\n    let match;\n    while ((match = pattern.exec(cookieHeader)) !== null) {\n        const token = decodeCookieToken(match[1]);\n        if (token)\n            tokens.push(token);\n    }\n    return tokens;\n}\nexport function buildSessionLookupHeaders(headers, cookieHeader) {\n    const sessionToken = extractSessionTokenFromCookieHeader(cookieHeader);\n    if (!sessionToken)\n        return headers;\n    return buildSessionLookupHeadersForToken(headers, sessionToken);\n}\nexport function buildSessionLookupHeadersForToken(headers, sessionToken) {\n    const nextHeaders = new Headers(headers);\n    nextHeaders.set(\"cookie\", sessionTokenToCookieHeader(sessionToken));\n    return nextHeaders;\n}\nexport function sessionCreatedAtMs(session) {\n    const value = session\n        ?.session;\n    const createdAt = value?.createdAt ?? value?.created_at;\n    if (createdAt instanceof Date)\n        return createdAt.getTime();\n    if (typeof createdAt === \"string\" || typeof createdAt === \"number\") {\n        const timestamp = new Date(createdAt).getTime();\n        return Number.isFinite(timestamp) ? timestamp : 0;\n    }\n    return 0;\n}\nexport async function resolveRequestSession(input) {\n    if (input.authorizationHeader?.startsWith(\"Bearer \")) {\n        const sessionToken = input.authorizationHeader.substring(7);\n        const session = await input.getSession(new Headers({ cookie: sessionTokenToCookieHeader(sessionToken) }));\n        return { session, sessionToken };\n    }\n    const cookieHeader = input.cookieHeader ?? \"\";\n    const sessionTokens = [...new Set(extractSessionTokensFromCookieHeader(cookieHeader))];\n    if (sessionTokens.length <= 1) {\n        const session = await input.getSession(buildSessionLookupHeaders(input.headers, cookieHeader));\n        return { session, sessionToken: sessionTokens[0] ?? null };\n    }\n    const resolved = await Promise.all(sessionTokens.map(async (sessionToken, index) => {\n        try {\n            const session = await input.getSession(buildSessionLookupHeadersForToken(input.headers, sessionToken));\n            return session ? { session, sessionToken, index } : null;\n        }\n        catch {\n            return null;\n        }\n    }));\n    const valid = resolved.filter((candidate) => candidate !== null);\n    if (valid.length === 0)\n        return { session: null, sessionToken: null };\n    valid.sort((a, b) => {\n        const createdDelta = sessionCreatedAtMs(b.session) - sessionCreatedAtMs(a.session);\n        return createdDelta || a.index - b.index;\n    });\n    const { session, sessionToken } = valid[0];\n    return { session, sessionToken };\n}\n", "import { createHash, randomUUID } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { releaseInviteCode, reserveInviteCode } from \"./invite-code.js\";\n// better-auth 1.6.x expires OAuth state after 10 minutes. Keep invite\n// reservations longer so a valid provider callback cannot outlive its slot.\nexport const BETTER_AUTH_OAUTH_STATE_TTL_MS = 10 * 60 * 1000;\nexport const OAUTH_INVITE_RESERVATION_TTL_MS = BETTER_AUTH_OAUTH_STATE_TTL_MS + 5 * 60 * 1000;\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction hashReservationToken(token) {\n    return createHash(\"sha256\").update(token).digest(\"hex\");\n}\nfunction normalizeProvider(provider) {\n    return typeof provider === \"string\" && provider.trim() ? provider.trim().toLowerCase() : \"unknown\";\n}\nexport async function releaseExpiredOAuthInviteReservations(db) {\n    if (!db)\n        return;\n    await db.execute(sql `\n    WITH released AS (\n      UPDATE _gencow_oauth_invite_reservations\n      SET status = 'released',\n          released_at = NOW()\n      WHERE status = 'pending'\n        AND expires_at <= NOW()\n      RETURNING invite_code\n    ),\n    release_counts AS (\n      SELECT UPPER(invite_code) AS code, COUNT(*)::int AS count\n      FROM released\n      GROUP BY UPPER(invite_code)\n    )\n    UPDATE invite_codes\n    SET used_count = GREATEST(used_count - release_counts.count, 0)\n    FROM release_counts\n    WHERE UPPER(invite_codes.code) = release_counts.code\n  `);\n}\nexport async function createOAuthInviteReservation(db, input) {\n    if (!db)\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC \uD655\uC778\uC774 \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4.\" };\n    await releaseExpiredOAuthInviteReservations(db);\n    const reserved = await reserveInviteCode(db, input.inviteCode);\n    if (!reserved.ok)\n        return reserved;\n    const token = randomUUID();\n    const tokenHash = hashReservationToken(token);\n    const expiresAt = new Date(Date.now() + OAUTH_INVITE_RESERVATION_TTL_MS);\n    try {\n        await db.execute(sql `\n      INSERT INTO _gencow_oauth_invite_reservations (\n        token_hash,\n        invite_code,\n        provider_id,\n        expires_at\n      )\n      VALUES (\n        ${tokenHash},\n        ${reserved.code},\n        ${normalizeProvider(input.provider)},\n        ${expiresAt}\n      )\n    `);\n        return { ok: true, token, code: reserved.code, expiresAt };\n    }\n    catch (error) {\n        await releaseInviteCode(db, reserved.code);\n        console.error(\"[auth] OAuth invite reservation error:\", error);\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC \uD655\uC778\uC774 \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4.\" };\n    }\n}\nexport async function releaseOAuthInviteReservation(db, token) {\n    if (!db || typeof token !== \"string\" || !token.trim())\n        return;\n    await db.execute(sql `\n    WITH released AS (\n      UPDATE _gencow_oauth_invite_reservations\n      SET status = 'released',\n          released_at = NOW()\n      WHERE token_hash = ${hashReservationToken(token)}\n        AND status = 'pending'\n      RETURNING invite_code\n    ),\n    release_counts AS (\n      SELECT UPPER(invite_code) AS code, COUNT(*)::int AS count\n      FROM released\n      GROUP BY UPPER(invite_code)\n    )\n    UPDATE invite_codes\n    SET used_count = GREATEST(used_count - release_counts.count, 0)\n    FROM release_counts\n    WHERE UPPER(invite_codes.code) = release_counts.code\n  `);\n}\nexport async function finalizeOAuthInviteReservation(db, token, user) {\n    if (!db || typeof token !== \"string\" || !token.trim()) {\n        return { ok: false, error: \"Invalid invite reservation\" };\n    }\n    await releaseExpiredOAuthInviteReservations(db);\n    const finalized = await db.execute(sql `\n    UPDATE _gencow_oauth_invite_reservations\n    SET status = 'completed',\n        user_id = ${user.id},\n        user_email = ${user.email},\n        completed_at = NOW()\n    WHERE token_hash = ${hashReservationToken(token)}\n      AND status = 'pending'\n      AND expires_at > NOW()\n    RETURNING invite_code\n  `);\n    const row = rowsFromResult(finalized)[0];\n    if (!row?.invite_code)\n        return { ok: false, error: \"Invalid invite reservation\" };\n    return { ok: true, code: String(row.invite_code).toUpperCase() };\n}\n", "import { sql } from \"drizzle-orm\";\nexport function isInviteOnlyMode(env) {\n    const val = env ? env.INVITE_ONLY : process.env.INVITE_ONLY;\n    if (val !== undefined && val !== \"\")\n        return val !== \"false\" && val !== \"0\";\n    return false;\n}\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction normalizeInviteCode(code) {\n    if (typeof code !== \"string\")\n        return null;\n    const normalized = code.trim().toUpperCase();\n    return normalized.length > 0 ? normalized : null;\n}\nfunction remainingFromRow(row) {\n    return Math.max(0, Number(row.max_uses ?? 1) - Number(row.used_count ?? 0));\n}\nexport async function reserveInviteCode(db, code) {\n    const normalizedCode = normalizeInviteCode(code);\n    if (!normalizedCode)\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.\" };\n    if (!db)\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC \uD655\uC778\uC774 \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4.\" };\n    try {\n        const consumed = await db.execute(sql `\n      UPDATE invite_codes\n      SET used_count = used_count + 1\n      WHERE UPPER(code) = UPPER(${normalizedCode})\n        AND used_count < max_uses\n      RETURNING code, max_uses, used_count\n    `);\n        const consumedRow = rowsFromResult(consumed)[0];\n        if (consumedRow) {\n            return {\n                ok: true,\n                code: String(consumedRow.code ?? normalizedCode).toUpperCase(),\n                remaining: remainingFromRow(consumedRow),\n            };\n        }\n        const checked = await db.execute(sql `\n      SELECT code, max_uses, used_count\n      FROM invite_codes\n      WHERE UPPER(code) = UPPER(${normalizedCode})\n      LIMIT 1\n    `);\n        const checkedRow = rowsFromResult(checked)[0];\n        if (!checkedRow)\n            return { ok: false, error: \"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uCD08\uB300 \uCF54\uB4DC\uC785\uB2C8\uB2E4.\" };\n        if (remainingFromRow(checkedRow) <= 0) {\n            return { ok: false, error: \"\uC774 \uCD08\uB300 \uCF54\uB4DC\uB294 \uC0AC\uC6A9 \uD69F\uC218\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4.\" };\n        }\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\" };\n    }\n    catch (error) {\n        console.error(\"[auth] invite code reservation error:\", error);\n        return { ok: false, error: \"\uCD08\uB300 \uCF54\uB4DC \uD655\uC778\uC774 \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4.\" };\n    }\n}\nexport async function releaseInviteCode(db, code) {\n    const normalizedCode = normalizeInviteCode(code);\n    if (!normalizedCode || !db)\n        return;\n    try {\n        await db.execute(sql `\n      UPDATE invite_codes\n      SET used_count = GREATEST(used_count - 1, 0)\n      WHERE UPPER(code) = UPPER(${normalizedCode})\n    `);\n    }\n    catch (error) {\n        console.error(\"[auth] invite code release error:\", error);\n    }\n}\n", "import { createHash, randomUUID } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { BETTER_AUTH_OAUTH_STATE_TTL_MS } from \"./auth-oauth-invite-reservation.js\";\nconst OAUTH_SIGNUP_HANDOFF_TTL_MS = BETTER_AUTH_OAUTH_STATE_TTL_MS + 5 * 60 * 1000;\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    if (result && typeof result === \"object\" && Array.isArray(result.rows)) {\n        return result.rows;\n    }\n    return [];\n}\nfunction hashHandoffToken(token) {\n    return createHash(\"sha256\").update(token).digest(\"hex\");\n}\nfunction normalizeProvider(provider) {\n    return typeof provider === \"string\" && provider.trim() ? provider.trim().toLowerCase() : \"unknown\";\n}\nexport async function releaseExpiredOAuthSignUpHandoffs(db) {\n    if (!db)\n        return;\n    await db.execute(sql `\n    UPDATE _gencow_oauth_signup_handoffs\n    SET status = 'released',\n        released_at = NOW()\n    WHERE status = 'pending'\n      AND expires_at <= NOW()\n  `);\n}\nexport async function createOAuthSignUpHandoff(db, input) {\n    if (!db)\n        return { ok: false, error: \"OAuth \uAC00\uC785 \uC0C1\uD0DC\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\" };\n    await releaseExpiredOAuthSignUpHandoffs(db);\n    const token = randomUUID();\n    const expiresAt = new Date(Date.now() + OAUTH_SIGNUP_HANDOFF_TTL_MS);\n    try {\n        await db.execute(sql `\n      INSERT INTO _gencow_oauth_signup_handoffs (\n        token_hash,\n        provider_id,\n        expires_at\n      )\n      VALUES (\n        ${hashHandoffToken(token)},\n        ${normalizeProvider(input.provider)},\n        ${expiresAt}\n      )\n    `);\n        return { ok: true, token, expiresAt };\n    }\n    catch (error) {\n        console.error(\"[auth] OAuth signup handoff error:\", error);\n        return { ok: false, error: \"OAuth \uAC00\uC785 \uC0C1\uD0DC\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\" };\n    }\n}\nexport async function releaseOAuthSignUpHandoff(db, token) {\n    if (!db || typeof token !== \"string\" || !token.trim())\n        return;\n    await db.execute(sql `\n    UPDATE _gencow_oauth_signup_handoffs\n    SET status = 'released',\n        released_at = NOW()\n    WHERE token_hash = ${hashHandoffToken(token)}\n      AND status = 'pending'\n  `);\n}\nexport async function consumeOAuthSignUpHandoff(db, token, user) {\n    if (!db || typeof token !== \"string\" || !token.trim())\n        return false;\n    await releaseExpiredOAuthSignUpHandoffs(db);\n    const consumed = await db.execute(sql `\n    UPDATE _gencow_oauth_signup_handoffs\n    SET status = 'completed',\n        user_id = ${user.id},\n        user_email = ${user.email},\n        completed_at = NOW()\n    WHERE token_hash = ${hashHandoffToken(token)}\n      AND status = 'pending'\n      AND expires_at > NOW()\n    RETURNING token_hash\n  `);\n    return rowsFromResult(consumed).length > 0;\n}\n", "import { sql } from \"drizzle-orm\";\n/** Never surface these on `ctx.auth` / JWT identity payloads (secrets + standard JWT claims). */\nconst OMIT_FROM_RUNTIME_AUTH_USER = new Set([\n    \"password\",\n    \"hashedPassword\",\n    \"salt\",\n    \"iat\",\n    \"exp\",\n    \"iss\",\n    \"nbf\",\n    \"aud\",\n    \"jti\",\n    \"sub\",\n]);\nfunction isJsonScalar(value) {\n    return value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n/**\n * Shallow copy of plugin / profile fields from a better-auth user object or verified JWT payload.\n * Drops secrets, JWT reserved claims, nested objects, and non-JSON-safe values so `ctx.auth` stays a flat JSON-like bag.\n */\nexport function copySessionUserFieldsForRuntimeIdentity(user) {\n    const out = {};\n    for (const key of Object.keys(user)) {\n        if (OMIT_FROM_RUNTIME_AUTH_USER.has(key))\n            continue;\n        const v = user[key];\n        if (v === undefined || typeof v === \"function\" || typeof v === \"symbol\")\n            continue;\n        if (v instanceof Date) {\n            out[key] = v.toISOString();\n            continue;\n        }\n        if (isJsonScalar(v)) {\n            out[key] = v;\n            continue;\n        }\n        if (Array.isArray(v) && v.every(isJsonScalar)) {\n            out[key] = v;\n        }\n    }\n    return out;\n}\nconst roleColumnSupport = new WeakMap();\nfunction getCacheKey(db) {\n    return db && (typeof db === \"object\" || typeof db === \"function\") ? db : null;\n}\nfunction isMissingRoleColumnError(error) {\n    let current = error;\n    const messages = [];\n    const seen = new Set();\n    for (let depth = 0; current && depth < 8; depth++) {\n        if (typeof current === \"object\") {\n            if (seen.has(current))\n                break;\n            seen.add(current);\n        }\n        const code = current?.code;\n        if (code === \"42703\")\n            return true;\n        if (current instanceof Error)\n            messages.push(current.message);\n        else if (typeof current === \"string\")\n            messages.push(current);\n        else if (typeof current?.message === \"string\") {\n            messages.push(current.message);\n        }\n        current = current?.cause;\n    }\n    const message = messages.join(\"\\n\");\n    return /column\\s+\"?role\"?\\s+does not exist/i.test(message);\n}\nasync function queryRuntimeAuthUser(db, userId, includeRole) {\n    const userRows = includeRole\n        ? await db.execute(sql `SELECT \"id\", \"email\", \"name\", \"role\" FROM \"user\" WHERE \"id\" = ${userId} LIMIT 1`)\n        : await db.execute(sql `SELECT \"id\", \"email\", \"name\" FROM \"user\" WHERE \"id\" = ${userId} LIMIT 1`);\n    const userRow = (userRows?.rows?.[0] ?? userRows?.[0]);\n    if (!userRow?.id || !userRow?.email)\n        return null;\n    return {\n        ...copySessionUserFieldsForRuntimeIdentity(userRow),\n        id: String(userRow.id),\n        email: String(userRow.email),\n        name: typeof userRow.name === \"string\" ? userRow.name : undefined,\n    };\n}\nexport async function lookupRuntimeAuthUser(db, userId) {\n    const cacheKey = getCacheKey(db);\n    const shouldTryExtendedColumns = cacheKey ? roleColumnSupport.get(cacheKey) !== false : true;\n    if (shouldTryExtendedColumns) {\n        try {\n            const user = await queryRuntimeAuthUser(db, userId, true);\n            if (cacheKey)\n                roleColumnSupport.set(cacheKey, true);\n            return user;\n        }\n        catch (error) {\n            if (!isMissingRoleColumnError(error))\n                throw error;\n            if (cacheKey)\n                roleColumnSupport.set(cacheKey, false);\n        }\n    }\n    return queryRuntimeAuthUser(db, userId, false);\n}\n", "const DEFAULT_RULES = {\n    \"sign-in\": { limit: 10, windowMs: 10 * 60 * 1000 },\n    \"sign-up\": { limit: 5, windowMs: 10 * 60 * 1000 },\n    token: { limit: 120, windowMs: 5 * 60 * 1000 },\n};\nconst MAX_BUCKETS = 10_000;\nlet buckets = new Map();\nexport function resetAuthRateLimitForTests() {\n    buckets = new Map();\n}\nexport function matchAuthRateLimitRoute(method, pathname) {\n    if (method.toUpperCase() !== \"POST\")\n        return null;\n    const normalized = pathname.replace(/\\/+$/, \"\");\n    if (normalized === \"/api/auth/sign-in\" || normalized === \"/api/auth/login\")\n        return \"sign-in\";\n    if (normalized === \"/api/auth/sign-up\" || normalized === \"/api/auth/register\")\n        return \"sign-up\";\n    if (normalized === \"/api/auth/token\")\n        return \"token\";\n    return null;\n}\nfunction getClientIdentity(c) {\n    const env = c.env;\n    const peerAddress = typeof env?.ip?.address === \"string\" ? env.ip.address.trim() : \"\";\n    if (peerAddress && !isLocalPeerAddress(peerAddress))\n        return peerAddress;\n    const realIp = c.req.header(\"x-real-ip\")?.trim();\n    if (realIp)\n        return realIp;\n    const forwardedChain = (c.req.header(\"x-forwarded-for\") || \"\")\n        .split(\",\")\n        .map((part) => part.trim())\n        .filter(Boolean);\n    return forwardedChain.at(-1) || peerAddress || \"unknown\";\n}\nfunction isLocalPeerAddress(address) {\n    return (address === \"127.0.0.1\" ||\n        address === \"::1\" ||\n        address === \"0:0:0:0:0:0:0:1\" ||\n        address.startsWith(\"::ffff:127.\"));\n}\nfunction pruneExpired(now) {\n    for (const [key, bucket] of buckets) {\n        if (bucket.resetAt <= now)\n            buckets.delete(key);\n    }\n}\nfunction enforceBucketCap(now) {\n    if (buckets.size <= MAX_BUCKETS)\n        return;\n    pruneExpired(now);\n    while (buckets.size > MAX_BUCKETS) {\n        const oldest = buckets.keys().next().value;\n        if (!oldest)\n            return;\n        buckets.delete(oldest);\n    }\n}\nexport function consumeAuthRateLimit(params) {\n    const now = params.now ?? Date.now();\n    const rule = params.rule ?? DEFAULT_RULES[params.route];\n    const key = `${params.route}:${params.identity}`;\n    let bucket = buckets.get(key);\n    if (!bucket || bucket.resetAt <= now) {\n        bucket = { count: 0, resetAt: now + rule.windowMs };\n        buckets.set(key, bucket);\n    }\n    enforceBucketCap(now);\n    const retryAfterSec = Math.max(1, Math.ceil((bucket.resetAt - now) / 1000));\n    if (bucket.count >= rule.limit) {\n        return { allowed: false, limit: rule.limit, remaining: 0, resetAt: bucket.resetAt, retryAfterSec };\n    }\n    bucket.count++;\n    return {\n        allowed: true,\n        limit: rule.limit,\n        remaining: Math.max(0, rule.limit - bucket.count),\n        resetAt: bucket.resetAt,\n        retryAfterSec,\n    };\n}\nfunction setRateLimitHeaders(c, result) {\n    c.header(\"X-RateLimit-Limit\", String(result.limit));\n    c.header(\"X-RateLimit-Remaining\", String(result.remaining));\n    c.header(\"X-RateLimit-Reset\", String(Math.ceil(result.resetAt / 1000)));\n}\nexport function enforceAuthRateLimit(c, pathname, options = {}) {\n    const route = matchAuthRateLimitRoute(c.req.method, pathname);\n    if (!route)\n        return null;\n    const result = consumeAuthRateLimit({\n        route,\n        identity: getClientIdentity(c),\n        now: options.now?.(),\n        rule: options.rules?.[route],\n    });\n    setRateLimitHeaders(c, result);\n    if (result.allowed)\n        return null;\n    c.header(\"Retry-After\", String(result.retryAfterSec));\n    return c.json({ error: \"Too many requests\", message: \"Too many authentication attempts. Try again later.\" }, 429);\n}\n", "import { createHash, createHmac, timingSafeEqual } from \"crypto\";\nconst NODE_PROXY_VERSION = \"v1\";\nconst DEFAULT_MAX_SKEW_MS = 30_000;\nconst STRIPPED_FORWARD_HEADER_NAMES = new Set([\"x-internal-token\", \"x-cron-token\"]);\nexport const NODE_PROXY_CONTROL_PLANE_APP_HEADER = \"X-Gencow-Control-Plane-App\";\nexport const NODE_PROXY_DELEGATED_USER_ID_HEADER = \"X-Gencow-Delegated-User-Id\";\nconst SIGNED_FORWARD_HEADER_NAMES = [\n    \"content-type\",\n    \"x-forwarded-for\",\n    \"x-forwarded-host\",\n    \"x-forwarded-proto\",\n    NODE_PROXY_CONTROL_PLANE_APP_HEADER.toLowerCase(),\n    NODE_PROXY_DELEGATED_USER_ID_HEADER.toLowerCase(),\n];\nexport function sanitizeNodeProxyForwardHeaders(headers) {\n    const sanitized = new Headers();\n    for (const [key, value] of headers.entries()) {\n        const normalized = key.toLowerCase();\n        if (normalized.startsWith(\"x-gencow-node-\") || STRIPPED_FORWARD_HEADER_NAMES.has(normalized)) {\n            continue;\n        }\n        sanitized.append(key, value);\n    }\n    return sanitized;\n}\nfunction normalizeMethod(method) {\n    return method.trim().toUpperCase();\n}\nfunction normalizeHost(host) {\n    return host.trim().toLowerCase();\n}\nfunction canonicalSignedHeaderHash(headers) {\n    const canonical = SIGNED_FORWARD_HEADER_NAMES.map((name) => {\n        const value = headers?.get(name) ?? \"\";\n        return `${name}:${value.trim()}`;\n    }).join(\"\\n\");\n    return createHash(\"sha256\").update(canonical).digest(\"base64url\");\n}\nfunction buildSignaturePayload(input) {\n    return [\n        NODE_PROXY_VERSION,\n        normalizeMethod(input.method),\n        normalizeHost(input.originalHost),\n        input.originalPath,\n        input.sourceNode,\n        input.targetNode,\n        String(input.timestampMs),\n        input.nonce,\n        canonicalSignedHeaderHash(input.forwardedHeaders),\n    ].join(\"\\n\");\n}\nfunction signPayload(payload, secret) {\n    return createHmac(\"sha256\", secret).update(payload).digest(\"base64url\");\n}\nfunction safeEqual(left, right) {\n    const leftBuffer = Buffer.from(left);\n    const rightBuffer = Buffer.from(right);\n    return leftBuffer.length === rightBuffer.length && timingSafeEqual(leftBuffer, rightBuffer);\n}\nexport function buildNodeProxySignatureHeaders(input) {\n    const payload = buildSignaturePayload(input);\n    return {\n        \"X-Gencow-Node-Proxy\": NODE_PROXY_VERSION,\n        \"X-Gencow-Node-Key-Id\": input.keyId,\n        \"X-Gencow-Source-Node\": input.sourceNode,\n        \"X-Gencow-Target-Node\": input.targetNode,\n        \"X-Gencow-Original-Host\": input.originalHost,\n        \"X-Gencow-Original-Path\": input.originalPath,\n        \"X-Gencow-Node-Timestamp\": String(input.timestampMs),\n        \"X-Gencow-Node-Nonce\": input.nonce,\n        \"X-Gencow-Node-Signature\": signPayload(payload, input.secret),\n    };\n}\nexport function verifyNodeProxyRequestSignature(input) {\n    const version = input.headers.get(\"X-Gencow-Node-Proxy\");\n    const keyId = input.headers.get(\"X-Gencow-Node-Key-Id\");\n    const sourceNode = input.headers.get(\"X-Gencow-Source-Node\");\n    const targetNode = input.headers.get(\"X-Gencow-Target-Node\");\n    const timestampRaw = input.headers.get(\"X-Gencow-Node-Timestamp\");\n    const nonce = input.headers.get(\"X-Gencow-Node-Nonce\");\n    const signature = input.headers.get(\"X-Gencow-Node-Signature\");\n    if (!version || !keyId || !sourceNode || !targetNode || !timestampRaw || !nonce || !signature) {\n        return { ok: false, reason: \"missing_header\" };\n    }\n    if (version !== NODE_PROXY_VERSION) {\n        return { ok: false, reason: \"bad_version\" };\n    }\n    if (targetNode !== input.targetNode) {\n        return { ok: false, reason: \"target_mismatch\" };\n    }\n    const timestampMs = Number(timestampRaw);\n    if (!Number.isFinite(timestampMs)) {\n        return { ok: false, reason: \"bad_timestamp\" };\n    }\n    const nowMs = input.nowMs ?? Date.now();\n    const maxSkewMs = input.maxSkewMs ?? DEFAULT_MAX_SKEW_MS;\n    if (Math.abs(nowMs - timestampMs) > maxSkewMs) {\n        return { ok: false, reason: \"stale_timestamp\" };\n    }\n    const secret = input.secretsByKeyId[keyId];\n    if (!secret) {\n        return { ok: false, reason: \"unknown_key\" };\n    }\n    const payload = buildSignaturePayload({\n        method: input.method,\n        originalHost: input.originalHost,\n        originalPath: input.originalPath,\n        sourceNode,\n        targetNode,\n        timestampMs,\n        nonce,\n        forwardedHeaders: input.headers,\n    });\n    const expected = signPayload(payload, secret);\n    if (!safeEqual(signature, expected)) {\n        return { ok: false, reason: \"bad_signature\" };\n    }\n    if (input.seenNonces) {\n        const nonceKey = `${sourceNode}:${nonce}`;\n        if (input.seenNonces.has(nonceKey)) {\n            return { ok: false, reason: \"replay\" };\n        }\n        input.seenNonces.add(nonceKey);\n    }\n    return { ok: true, keyId, sourceNode, targetNode };\n}\n", "import { lookupRuntimeAuthUser } from \"./better-auth-identity.js\";\nimport { NODE_PROXY_DELEGATED_USER_ID_HEADER, verifyNodeProxyRequestSignature, } from \"./server-node-proxy-signature.js\";\nexport async function resolveDelegatedNodeProxyUser(db, c) {\n    if (!db || c.req.header(\"X-Gencow-Node-Proxy\") !== \"v1\")\n        return null;\n    const nodeId = process.env.GENCOW_NODE_ID?.trim();\n    const keyId = process.env.GENCOW_NODE_PROXY_KEY_ID?.trim();\n    const secret = process.env.GENCOW_NODE_PROXY_SECRET?.trim();\n    const delegatedUserId = c.req.header(NODE_PROXY_DELEGATED_USER_ID_HEADER)?.trim();\n    const originalHost = c.req.header(\"X-Gencow-Original-Host\")?.trim();\n    const originalPath = c.req.header(\"X-Gencow-Original-Path\")?.trim();\n    if (!nodeId || !keyId || !secret || !delegatedUserId || !originalHost || !originalPath)\n        return null;\n    let actualPath;\n    try {\n        const url = new URL(c.req.url);\n        actualPath = `${url.pathname}${url.search}`;\n    }\n    catch {\n        return null;\n    }\n    if (actualPath !== originalPath)\n        return null;\n    const verifyResult = verifyNodeProxyRequestSignature({\n        headers: c.req.raw.headers,\n        method: c.req.method,\n        originalHost,\n        originalPath,\n        targetNode: nodeId,\n        secretsByKeyId: { [keyId]: secret },\n    });\n    if (!verifyResult.ok)\n        return null;\n    try {\n        return await lookupRuntimeAuthUser(db, delegatedUserId);\n    }\n    catch {\n        return null;\n    }\n}\n", "import { sql } from \"drizzle-orm\";\nfunction rowsFromResult(result) {\n    return (result?.rows ?? result ?? []);\n}\nfunction normalizeAccountStatus(status) {\n    if (status === \"suspended\" || status === \"deletion_pending\" || status === \"deleted\")\n        return status;\n    return \"active\";\n}\nfunction isMissingAccountStatusColumnError(error) {\n    let current = error;\n    const messages = [];\n    for (let depth = 0; current && depth < 6; depth += 1) {\n        const code = current?.code;\n        if (code === \"42703\")\n            return true;\n        if (current instanceof Error)\n            messages.push(current.message);\n        else if (typeof current === \"string\")\n            messages.push(current);\n        else if (typeof current?.message === \"string\") {\n            messages.push(current.message);\n        }\n        current = current?.cause;\n    }\n    return /column\\s+\"?account_status\"?\\s+does not exist/i.test(messages.join(\"\\n\"));\n}\nexport function getAuthAccountStatusErrorCode(status) {\n    switch (normalizeAccountStatus(status)) {\n        case \"active\":\n            return null;\n        case \"suspended\":\n            return \"ACCOUNT_SUSPENDED\";\n        case \"deletion_pending\":\n            return \"ACCOUNT_DELETION_PENDING\";\n        case \"deleted\":\n            return \"ACCOUNT_DELETED\";\n    }\n}\nexport function isAuthAccountStatusErrorCode(value) {\n    return (value === \"ACCOUNT_SUSPENDED\" ||\n        value === \"ACCOUNT_DELETION_PENDING\" ||\n        value === \"ACCOUNT_DELETED\" ||\n        value === \"ACCOUNT_ACTION_NOT_ALLOWED\");\n}\nexport function authAccountStatusReasonCode(code) {\n    return code.toLowerCase();\n}\nexport function authAccountStatusDeniedResponse(code) {\n    return Response.json({ error: code }, { status: 403 });\n}\nexport async function getAuthAccountStatusErrorForUser(db, userId) {\n    if (!db || typeof db.execute !== \"function\")\n        return null;\n    try {\n        const result = await db.execute(sql `SELECT account_status FROM \"user\" WHERE id = ${userId} LIMIT 1`);\n        const row = rowsFromResult(result)[0];\n        if (!row)\n            return \"ACCOUNT_DELETED\";\n        return getAuthAccountStatusErrorCode(row.account_status);\n    }\n    catch (error) {\n        if (isMissingAccountStatusColumnError(error))\n            return null;\n        throw error;\n    }\n}\nexport async function getSignupAccountStatusErrorForEmail(db, email) {\n    if (!db || typeof db.execute !== \"function\")\n        return null;\n    try {\n        const result = await db.execute(sql `SELECT id, account_status FROM \"user\" WHERE lower(email) = lower(${email.trim()}) LIMIT 1`);\n        const row = rowsFromResult(result)[0];\n        if (!row)\n            return null;\n        if (normalizeAccountStatus(row.account_status) === \"deleted\")\n            return null;\n        return getAuthAccountStatusErrorCode(row.account_status) ?? \"ACCOUNT_ACTION_NOT_ALLOWED\";\n    }\n    catch (error) {\n        if (isMissingAccountStatusColumnError(error))\n            return null;\n        throw error;\n    }\n}\nexport async function getAuthAccountStatusErrorForEmail(db, email) {\n    if (!db || typeof db.execute !== \"function\")\n        return null;\n    try {\n        const result = await db.execute(sql `SELECT account_status FROM \"user\" WHERE lower(email) = lower(${email.trim()}) LIMIT 1`);\n        const row = rowsFromResult(result)[0];\n        if (!row)\n            return null;\n        return getAuthAccountStatusErrorCode(row.account_status);\n    }\n    catch (error) {\n        if (isMissingAccountStatusColumnError(error))\n            return null;\n        throw error;\n    }\n}\nexport async function revokeAuthSessionsForUser(db, userId) {\n    if (!db || typeof db.execute !== \"function\")\n        return;\n    await db.execute(sql `DELETE FROM \"session\" WHERE user_id = ${userId}`).catch(() => { });\n}\nasync function readUserIdFromAuthResponse(response) {\n    const payload = (await response\n        .clone()\n        .json()\n        .catch(() => null));\n    const userId = payload?.user?.id;\n    return typeof userId === \"string\" && userId.trim() ? userId : null;\n}\nexport async function transformAuthResponseForAccountStatus(params) {\n    if (!params.response.ok)\n        return params.response;\n    const pathname = new URL(params.request.url).pathname.replace(/\\/+$/, \"\");\n    if (pathname !== \"/api/auth/sign-in/email\" && pathname !== \"/api/auth/sign-up/email\") {\n        return params.response;\n    }\n    const userId = await readUserIdFromAuthResponse(params.response);\n    if (!userId)\n        return params.response;\n    const code = await getAuthAccountStatusErrorForUser(params.db, userId);\n    if (!code)\n        return params.response;\n    await revokeAuthSessionsForUser(params.db, userId);\n    return authAccountStatusDeniedResponse(code);\n}\n", "import { recordAuthActivity } from \"./auth-activity-log.js\";\nimport { authAccountStatusReasonCode, getAuthAccountStatusErrorForEmail, getAuthAccountStatusErrorForUser, getSignupAccountStatusErrorForEmail, revokeAuthSessionsForUser, } from \"./auth-account-status.js\";\nexport async function getInactiveAuthAccountError(db, userId) {\n    return getAuthAccountStatusErrorForUser(db, userId);\n}\nexport async function revokeInactiveAuthSession(db, userId) {\n    const code = await getInactiveAuthAccountError(db, userId);\n    if (code)\n        await revokeAuthSessionsForUser(db, userId);\n    return code;\n}\nasync function recordAccountStatusDeniedActivity(params) {\n    await recordAuthActivity(params.db, params.c, {\n        action: params.action,\n        outcome: \"denied\",\n        actorType: params.actorType,\n        actorUserId: params.userId,\n        actorSessionToken: params.sessionToken,\n        reasonCode: authAccountStatusReasonCode(params.code),\n        authAttempt: params.attemptedEmail\n            ? { attemptedEmail: params.attemptedEmail, provider: params.provider ?? \"email\" }\n            : undefined,\n        httpStatus: 403,\n    });\n}\nexport async function denyEmailSignupIfAccountBlocked(params) {\n    const code = await getSignupAccountStatusErrorForEmail(params.db, params.email);\n    if (!code)\n        return null;\n    await recordAccountStatusDeniedActivity({\n        ...params,\n        action: \"signup_denied\",\n        actorType: \"anonymous\",\n        code,\n        attemptedEmail: params.email,\n        provider: \"email\",\n    });\n    return params.c.json({ error: code }, 403);\n}\nexport async function denyEmailVerificationIfAccountBlocked(params) {\n    const code = await getAuthAccountStatusErrorForEmail(params.db, params.email);\n    if (!code)\n        return null;\n    await recordAccountStatusDeniedActivity({\n        ...params,\n        actorType: \"anonymous\",\n        code,\n        attemptedEmail: params.email,\n        provider: \"email\",\n    });\n    if (params.callbackURL && params.isTrustedCallbackURL?.(params.callbackURL)) {\n        const errorURL = new URL(params.callbackURL, params.c.req.url);\n        errorURL.searchParams.set(\"error\", code);\n        return params.c.redirect(errorURL.toString(), 302);\n    }\n    return params.c.json({ error: code }, 403);\n}\nexport async function denyInactiveAuthSessionWithJson(params) {\n    const code = await revokeInactiveAuthSession(params.db, params.userId);\n    if (!code)\n        return null;\n    await recordAccountStatusDeniedActivity({ ...params, code });\n    return params.c.json({ error: code }, 403);\n}\nexport async function denyInactiveAuthSessionWithRedirect(params) {\n    const code = await revokeInactiveAuthSession(params.db, params.userId);\n    if (!code)\n        return null;\n    await recordAccountStatusDeniedActivity({ ...params, code });\n    const errorURL = new URL(params.callbackURL);\n    errorURL.searchParams.set(\"error\", code);\n    return params.c.redirect(errorURL.toString(), 302);\n}\n", "import { resolveOAuthCallbackURL } from \"./auth-oauth-callback.js\";\nimport { createOAuthInviteReservation, releaseOAuthInviteReservation, } from \"./auth-oauth-invite-reservation.js\";\nimport { resolveOAuthReturnMode } from \"./auth-oauth-return-mode.js\";\nimport { createOAuthSignUpHandoff, releaseOAuthSignUpHandoff } from \"./auth-oauth-signup-handoff.js\";\nimport { sanitizePublicAuthResponsePayload } from \"./auth-error-sanitization.js\";\nimport { isInviteOnlyMode } from \"./invite-code.js\";\nfunction forwardOAuthStateCookieHeaders(c, response) {\n    const setCookieHeaders = response.headers.getSetCookie?.() ?? [];\n    for (const cookie of setCookieHeaders) {\n        if (cookie.includes(\"better-auth.state=\"))\n            c.header(\"Set-Cookie\", cookie, { append: true });\n    }\n    if (setCookieHeaders.length === 0) {\n        const single = response.headers.get(\"set-cookie\");\n        if (single?.includes(\"better-auth.state=\"))\n            c.header(\"Set-Cookie\", single, { append: true });\n    }\n}\nfunction resolveRequestOrigin(c, url) {\n    const forwardedHost = c.req.header(\"x-forwarded-host\")?.split(\",\")[0]?.trim();\n    const host = forwardedHost || c.req.header(\"host\") || url.host;\n    const forwardedProto = c.req.header(\"x-forwarded-proto\")?.split(\",\")[0]?.trim();\n    const protocol = forwardedProto || url.protocol.replace(/:$/, \"\");\n    return `${protocol}://${host}`;\n}\nfunction callbackMatchesOrigin(callbackURL, origin) {\n    try {\n        return new URL(callbackURL).origin === origin;\n    }\n    catch {\n        return false;\n    }\n}\nfunction resolvePublicAuthOrigin(c, url, callbackURLs = [], capturedBaseURL) {\n    const requestOrigin = resolveRequestOrigin(c, url);\n    if (callbackURLs.some((callbackURL) => callbackMatchesOrigin(callbackURL, requestOrigin))) {\n        return requestOrigin;\n    }\n    if (capturedBaseURL)\n        return new URL(capturedBaseURL).origin;\n    return requestOrigin;\n}\nfunction providerRequiresInviteForExplicitSignUp(provider, authConfig) {\n    if (!isInviteOnlyMode())\n        return false;\n    const providerConfig = authConfig?.socialProviders?.[provider];\n    return providerConfig?.disableImplicitSignUp === true;\n}\nfunction buildOAuthHandoffURL(publicOrigin, callbackURL, mode, options = {}) {\n    const handoffURL = new URL(`${publicOrigin}/api/auth/oauth/handoff`);\n    handoffURL.searchParams.set(\"callbackURL\", callbackURL);\n    handoffURL.searchParams.set(\"mode\", mode);\n    if (options.inviteReservationToken)\n        handoffURL.searchParams.set(\"inviteReservation\", options.inviteReservationToken);\n    if (options.signUpHandoffToken)\n        handoffURL.searchParams.set(\"signupHandoff\", options.signUpHandoffToken);\n    return handoffURL;\n}\nexport async function startSocialSignInRoute(params) {\n    const { c, url, input } = params;\n    if (!input.provider)\n        return c.json({ error: \"Provider is required\" }, 400);\n    const callbackURL = resolveOAuthCallbackURL(params.getOAuthCallbackResolverOptions(input.callbackURL));\n    if (!callbackURL)\n        return c.json({ error: \"Invalid callbackURL\" }, 400);\n    const newUserCallbackURL = input.newUserCallbackURL\n        ? resolveOAuthCallbackURL(params.getOAuthCallbackResolverOptions(input.newUserCallbackURL))\n        : callbackURL;\n    if (!newUserCallbackURL)\n        return c.json({ error: \"Invalid newUserCallbackURL\" }, 400);\n    const errorCallbackURL = input.errorCallbackURL\n        ? resolveOAuthCallbackURL(params.getOAuthCallbackResolverOptions(input.errorCallbackURL))\n        : undefined;\n    if (input.errorCallbackURL && !errorCallbackURL)\n        return c.json({ error: \"Invalid errorCallbackURL\" }, 400);\n    const returnMode = resolveOAuthReturnMode(input.oauthReturnMode, params.authConfig?.oauth);\n    if (!returnMode.ok)\n        return c.json({ error: returnMode.error }, 400);\n    let inviteReservation = null;\n    let signUpHandoffToken = null;\n    if (input.requestSignUp && providerRequiresInviteForExplicitSignUp(input.provider, params.authConfig)) {\n        const reserved = await createOAuthInviteReservation(params.db, {\n            inviteCode: input.inviteCode,\n            provider: input.provider,\n        });\n        if (!reserved.ok)\n            return c.json({ error: reserved.error }, 403);\n        inviteReservation = reserved;\n    }\n    if (input.requestSignUp && !inviteReservation && params.authConfig?.events?.afterSignUp) {\n        const handoff = await createOAuthSignUpHandoff(params.db, { provider: input.provider });\n        if (!handoff.ok)\n            return c.json({ error: handoff.error }, 500);\n        signUpHandoffToken = handoff.token;\n    }\n    const publicOrigin = resolvePublicAuthOrigin(c, url, [callbackURL, newUserCallbackURL, ...(errorCallbackURL ? [errorCallbackURL] : [])], params.capturedBaseURL);\n    const handoffURL = buildOAuthHandoffURL(publicOrigin, callbackURL, returnMode.mode);\n    const newUserHandoffURL = buildOAuthHandoffURL(publicOrigin, newUserCallbackURL, returnMode.mode, {\n        ...(inviteReservation ? { inviteReservationToken: inviteReservation.token } : {}),\n        ...(signUpHandoffToken ? { signUpHandoffToken } : {}),\n    });\n    let authResponse;\n    try {\n        authResponse = await params.handleAuditedBetterAuthRoute(new Request(`${publicOrigin}/api/auth/sign-in/social`, {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({\n                provider: input.provider,\n                callbackURL: handoffURL.toString(),\n                errorCallbackURL,\n                newUserCallbackURL: newUserHandoffURL.toString(),\n                scopes: input.scopes,\n                requestSignUp: input.requestSignUp,\n                idToken: input.idToken,\n                loginHint: input.loginHint,\n                additionalData: input.additionalData,\n            }),\n        }));\n    }\n    catch (error) {\n        if (inviteReservation)\n            await releaseOAuthInviteReservation(params.db, inviteReservation.token);\n        if (signUpHandoffToken)\n            await releaseOAuthSignUpHandoff(params.db, signUpHandoffToken);\n        throw error;\n    }\n    // better-auth stores OAuth CSRF state in a short-lived cookie, not an auth session cookie.\n    forwardOAuthStateCookieHeaders(c, authResponse);\n    const data = (await authResponse.json().catch(() => ({})));\n    if (!authResponse.ok && inviteReservation)\n        await releaseOAuthInviteReservation(params.db, inviteReservation.token);\n    if (!authResponse.ok && signUpHandoffToken)\n        await releaseOAuthSignUpHandoff(params.db, signUpHandoffToken);\n    return c.json(authResponse.ok ? data : sanitizePublicAuthResponsePayload(data, \"Authentication failed\"), authResponse.status);\n}\n", "import { randomBytes } from \"crypto\";\nimport { sql } from \"drizzle-orm\";\nimport { getInactiveAuthAccountError } from \"./auth-account-status-route-guards.js\";\nimport { getPublicAuthErrorMessage } from \"./auth-error-sanitization.js\";\nconst API_KEY_TTL_MS = 30 * 24 * 60 * 60 * 1000;\nfunction rowsFromResult(result) {\n    if (Array.isArray(result))\n        return result;\n    const rows = result?.rows;\n    return Array.isArray(rows) ? rows : [];\n}\nasync function issueApiKey(db, userId) {\n    const apiKey = `sk_${randomBytes(32).toString(\"hex\")}`;\n    const expiresAt = new Date(Date.now() + API_KEY_TTL_MS);\n    await db.execute(sql `\n    INSERT INTO \"cli_tokens\" (\"user_id\", \"token\", \"expires_at\", \"type\")\n    VALUES (${userId}, ${apiKey}, ${expiresAt}, 'cli')\n  `);\n    return apiKey;\n}\nasync function ensureFreePlanEntitlement(db, userId) {\n    await db.execute(sql `\n    INSERT INTO \"user_credits\" (\n      \"user_id\", \"plan\", \"total_credits\", \"used_credits\", \"spend_cap_enabled\"\n    )\n    SELECT ${userId}, pt.\"id\", pt.\"monthly_credits\", 0, FALSE\n      FROM \"pricing_tiers\" pt\n     WHERE pt.\"id\" = 'free'\n    ON CONFLICT (\"user_id\") DO NOTHING\n  `);\n    const result = await db.execute(sql `\n    SELECT \"user_id\" FROM \"user_credits\" WHERE \"user_id\" = ${userId} LIMIT 1\n  `);\n    if (rowsFromResult(result).length === 0) {\n        throw new Error(\"Platform free-plan entitlement is unavailable\");\n    }\n}\nasync function resolveApiKey(db, apiKey) {\n    if (!apiKey.startsWith(\"sk_\") && !apiKey.startsWith(\"gk_\"))\n        return null;\n    const result = await db.execute(sql `\n    SELECT u.\"id\", u.\"email\"\n    FROM \"cli_tokens\" t\n    INNER JOIN \"user\" u ON u.\"id\" = t.\"user_id\"\n    WHERE t.\"token\" = ${apiKey}\n      AND t.\"expires_at\" > NOW()\n    LIMIT 1\n  `);\n    const row = rowsFromResult(result)[0];\n    if (typeof row?.id !== \"string\" || typeof row?.email !== \"string\")\n        return null;\n    return { id: row.id, email: row.email };\n}\nasync function delegateCredentials(c, delegate, route, body) {\n    const url = new URL(c.req.url);\n    const response = await delegate(new Request(`${url.origin}/api/auth/${route}/email`, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(body),\n    }));\n    const data = (await response\n        .clone()\n        .json()\n        .catch(() => ({})));\n    if (!response.ok) {\n        return {\n            response: c.json({\n                error: getPublicAuthErrorMessage(data, route === \"sign-up\" ? \"Registration failed\" : \"Login failed\"),\n            }, response.status),\n            user: null,\n        };\n    }\n    const user = data.user;\n    if (!user || typeof user.id !== \"string\" || typeof user.email !== \"string\") {\n        return { response: c.json({ error: \"Failed to get user data\" }, 500), user: null };\n    }\n    return { response: null, user: { id: user.id, email: user.email } };\n}\nexport async function handlePlatformLegacyAuth(c, db, delegate) {\n    if (process.env.IS_PLATFORM !== \"true\")\n        return null;\n    const pathname = new URL(c.req.url).pathname;\n    if (c.req.method === \"GET\" && pathname === \"/api/auth/me\") {\n        const apiKey = (c.req.header(\"Authorization\") ?? \"\").replace(\"Bearer \", \"\").trim();\n        if (!apiKey.startsWith(\"sk_\") && !apiKey.startsWith(\"gk_\"))\n            return null;\n        const user = await resolveApiKey(db, apiKey);\n        if (!user)\n            return c.json({ error: \"Unauthorized\" }, 401);\n        const accountStatusCode = await getInactiveAuthAccountError(db, user.id);\n        if (accountStatusCode)\n            return c.json({ error: accountStatusCode }, 403);\n        return c.json(user);\n    }\n    if (c.req.method !== \"POST\")\n        return null;\n    if (pathname !== \"/api/auth/register\" && pathname !== \"/api/auth/login\")\n        return null;\n    const body = (await c.req.json().catch(() => ({})));\n    const email = typeof body.email === \"string\" ? body.email.trim() : \"\";\n    const password = typeof body.password === \"string\" ? body.password : \"\";\n    if (!email || !password)\n        return c.json({ error: \"email and password required\" }, 400);\n    const isRegister = pathname === \"/api/auth/register\";\n    const delegated = await delegateCredentials(c, delegate, isRegister ? \"sign-up\" : \"sign-in\", {\n        email,\n        password,\n        ...(isRegister\n            ? { name: typeof body.name === \"string\" && body.name.trim() ? body.name.trim() : email.split(\"@\")[0] }\n            : {}),\n    });\n    if (delegated.response || !delegated.user)\n        return delegated.response;\n    if (isRegister) {\n        await db.execute(sql `\n      UPDATE \"user\" SET \"email_verified\" = TRUE, \"updated_at\" = NOW()\n      WHERE \"id\" = ${delegated.user.id}\n    `);\n        await ensureFreePlanEntitlement(db, delegated.user.id);\n    }\n    const apiKey = await issueApiKey(db, delegated.user.id);\n    return c.json(isRegister ? { email: delegated.user.email, apiKey } : { apiKey });\n}\n", "// src/utils/encode.ts\nvar decodeBase64Url = (str) => {\n  return decodeBase64(str.replace(/_|-/g, (m) => ({ _: \"/\", \"-\": \"+\" })[m] ?? m));\n};\nvar encodeBase64Url = (buf) => encodeBase64(buf).replace(/\\/|\\+/g, (m) => ({ \"/\": \"_\", \"+\": \"-\" })[m] ?? m);\nvar encodeBase64 = (buf) => {\n  let binary = \"\";\n  const bytes = new Uint8Array(buf);\n  for (let i = 0, len = bytes.length; i < len; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary);\n};\nvar decodeBase64 = (str) => {\n  const binary = atob(str);\n  const bytes = new Uint8Array(new ArrayBuffer(binary.length));\n  const half = binary.length / 2;\n  for (let i = 0, j = binary.length - 1; i <= half; i++, j--) {\n    bytes[i] = binary.charCodeAt(i);\n    bytes[j] = binary.charCodeAt(j);\n  }\n  return bytes;\n};\nexport {\n  decodeBase64,\n  decodeBase64Url,\n  encodeBase64,\n  encodeBase64Url\n};\n", "// src/utils/jwt/jwa.ts\nvar AlgorithmTypes = /* @__PURE__ */ ((AlgorithmTypes2) => {\n  AlgorithmTypes2[\"HS256\"] = \"HS256\";\n  AlgorithmTypes2[\"HS384\"] = \"HS384\";\n  AlgorithmTypes2[\"HS512\"] = \"HS512\";\n  AlgorithmTypes2[\"RS256\"] = \"RS256\";\n  AlgorithmTypes2[\"RS384\"] = \"RS384\";\n  AlgorithmTypes2[\"RS512\"] = \"RS512\";\n  AlgorithmTypes2[\"PS256\"] = \"PS256\";\n  AlgorithmTypes2[\"PS384\"] = \"PS384\";\n  AlgorithmTypes2[\"PS512\"] = \"PS512\";\n  AlgorithmTypes2[\"ES256\"] = \"ES256\";\n  AlgorithmTypes2[\"ES384\"] = \"ES384\";\n  AlgorithmTypes2[\"ES512\"] = \"ES512\";\n  AlgorithmTypes2[\"EdDSA\"] = \"EdDSA\";\n  return AlgorithmTypes2;\n})(AlgorithmTypes || {});\nexport {\n  AlgorithmTypes\n};\n", "// src/helper/adapter/index.ts\nvar env = (c, runtime) => {\n  const global = globalThis;\n  const globalEnv = global?.process?.env;\n  runtime ??= getRuntimeKey();\n  const runtimeEnvHandlers = {\n    bun: () => globalEnv,\n    node: () => globalEnv,\n    \"edge-light\": () => globalEnv,\n    deno: () => {\n      return Deno.env.toObject();\n    },\n    workerd: () => c.env,\n    // On Fastly Compute, you can use the ConfigStore to manage user-defined data.\n    fastly: () => ({}),\n    other: () => ({})\n  };\n  return runtimeEnvHandlers[runtime]();\n};\nvar knownUserAgents = {\n  deno: \"Deno\",\n  bun: \"Bun\",\n  workerd: \"Cloudflare-Workers\",\n  node: \"Node.js\"\n};\nvar getRuntimeKey = () => {\n  const global = globalThis;\n  const userAgentSupported = typeof navigator !== \"undefined\" && typeof navigator.userAgent === \"string\";\n  if (userAgentSupported) {\n    for (const [runtimeKey, userAgent] of Object.entries(knownUserAgents)) {\n      if (checkUserAgentEquals(userAgent)) {\n        return runtimeKey;\n      }\n    }\n  }\n  if (typeof global?.EdgeRuntime === \"string\") {\n    return \"edge-light\";\n  }\n  if (global?.fastly !== void 0) {\n    return \"fastly\";\n  }\n  if (global?.process?.release?.name === \"node\") {\n    return \"node\";\n  }\n  return \"other\";\n};\nvar checkUserAgentEquals = (platform) => {\n  const userAgent = navigator.userAgent;\n  return userAgent.startsWith(platform);\n};\nexport {\n  checkUserAgentEquals,\n  env,\n  getRuntimeKey,\n  knownUserAgents\n};\n", "// src/utils/jwt/types.ts\nvar JwtAlgorithmNotImplemented = class extends Error {\n  constructor(alg) {\n    super(`${alg} is not an implemented algorithm`);\n    this.name = \"JwtAlgorithmNotImplemented\";\n  }\n};\nvar JwtAlgorithmRequired = class extends Error {\n  constructor() {\n    super('JWT verification requires \"alg\" option to be specified');\n    this.name = \"JwtAlgorithmRequired\";\n  }\n};\nvar JwtAlgorithmMismatch = class extends Error {\n  constructor(expected, actual) {\n    super(`JWT algorithm mismatch: expected \"${expected}\", got \"${actual}\"`);\n    this.name = \"JwtAlgorithmMismatch\";\n  }\n};\nvar JwtTokenInvalid = class extends Error {\n  constructor(token) {\n    super(`invalid JWT token: ${token}`);\n    this.name = \"JwtTokenInvalid\";\n  }\n};\nvar JwtTokenNotBefore = class extends Error {\n  constructor(token) {\n    super(`token (${token}) is being used before it's valid`);\n    this.name = \"JwtTokenNotBefore\";\n  }\n};\nvar JwtTokenExpired = class extends Error {\n  constructor(token) {\n    super(`token (${token}) expired`);\n    this.name = \"JwtTokenExpired\";\n  }\n};\nvar JwtTokenIssuedAt = class extends Error {\n  constructor(currentTimestamp, iat) {\n    super(\n      `Invalid \"iat\" claim, must be a valid number lower than \"${currentTimestamp}\" (iat: \"${iat}\")`\n    );\n    this.name = \"JwtTokenIssuedAt\";\n  }\n};\nvar JwtTokenIssuer = class extends Error {\n  constructor(expected, iss) {\n    super(`expected issuer \"${expected}\", got ${iss ? `\"${iss}\"` : \"none\"} `);\n    this.name = \"JwtTokenIssuer\";\n  }\n};\nvar JwtHeaderInvalid = class extends Error {\n  constructor(header) {\n    super(`jwt header is invalid: ${JSON.stringify(header)}`);\n    this.name = \"JwtHeaderInvalid\";\n  }\n};\nvar JwtHeaderRequiresKid = class extends Error {\n  constructor(header) {\n    super(`required \"kid\" in jwt header: ${JSON.stringify(header)}`);\n    this.name = \"JwtHeaderRequiresKid\";\n  }\n};\nvar JwtSymmetricAlgorithmNotAllowed = class extends Error {\n  constructor(alg) {\n    super(`symmetric algorithm \"${alg}\" is not allowed for JWK verification`);\n    this.name = \"JwtSymmetricAlgorithmNotAllowed\";\n  }\n};\nvar JwtAlgorithmNotAllowed = class extends Error {\n  constructor(alg, allowedAlgorithms) {\n    super(`algorithm \"${alg}\" is not in the allowed list: [${allowedAlgorithms.join(\", \")}]`);\n    this.name = \"JwtAlgorithmNotAllowed\";\n  }\n};\nvar JwtTokenSignatureMismatched = class extends Error {\n  constructor(token) {\n    super(`token(${token}) signature mismatched`);\n    this.name = \"JwtTokenSignatureMismatched\";\n  }\n};\nvar JwtPayloadRequiresAud = class extends Error {\n  constructor(payload) {\n    super(`required \"aud\" in jwt payload: ${JSON.stringify(payload)}`);\n    this.name = \"JwtPayloadRequiresAud\";\n  }\n};\nvar JwtTokenAudience = class extends Error {\n  constructor(expected, aud) {\n    super(\n      `expected audience \"${Array.isArray(expected) ? expected.join(\", \") : expected}\", got \"${aud}\"`\n    );\n    this.name = \"JwtTokenAudience\";\n  }\n};\nvar CryptoKeyUsage = /* @__PURE__ */ ((CryptoKeyUsage2) => {\n  CryptoKeyUsage2[\"Encrypt\"] = \"encrypt\";\n  CryptoKeyUsage2[\"Decrypt\"] = \"decrypt\";\n  CryptoKeyUsage2[\"Sign\"] = \"sign\";\n  CryptoKeyUsage2[\"Verify\"] = \"verify\";\n  CryptoKeyUsage2[\"DeriveKey\"] = \"deriveKey\";\n  CryptoKeyUsage2[\"DeriveBits\"] = \"deriveBits\";\n  CryptoKeyUsage2[\"WrapKey\"] = \"wrapKey\";\n  CryptoKeyUsage2[\"UnwrapKey\"] = \"unwrapKey\";\n  return CryptoKeyUsage2;\n})(CryptoKeyUsage || {});\nexport {\n  CryptoKeyUsage,\n  JwtAlgorithmMismatch,\n  JwtAlgorithmNotAllowed,\n  JwtAlgorithmNotImplemented,\n  JwtAlgorithmRequired,\n  JwtHeaderInvalid,\n  JwtHeaderRequiresKid,\n  JwtPayloadRequiresAud,\n  JwtSymmetricAlgorithmNotAllowed,\n  JwtTokenAudience,\n  JwtTokenExpired,\n  JwtTokenInvalid,\n  JwtTokenIssuedAt,\n  JwtTokenIssuer,\n  JwtTokenNotBefore,\n  JwtTokenSignatureMismatched\n};\n", "// src/utils/jwt/utf8.ts\nvar utf8Encoder = new TextEncoder();\nvar utf8Decoder = new TextDecoder();\nexport {\n  utf8Decoder,\n  utf8Encoder\n};\n", "// src/utils/jwt/jws.ts\nimport { getRuntimeKey } from \"../../helper/adapter/index.js\";\nimport { decodeBase64 } from \"../encode.js\";\nimport { CryptoKeyUsage, JwtAlgorithmNotImplemented } from \"./types.js\";\nimport { utf8Encoder } from \"./utf8.js\";\nasync function signing(privateKey, alg, data) {\n  const algorithm = getKeyAlgorithm(alg);\n  const cryptoKey = await importPrivateKey(privateKey, algorithm);\n  return await crypto.subtle.sign(algorithm, cryptoKey, data);\n}\nasync function verifying(publicKey, alg, signature, data) {\n  const algorithm = getKeyAlgorithm(alg);\n  const cryptoKey = await importPublicKey(publicKey, algorithm);\n  return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n}\nfunction pemToBinary(pem) {\n  return decodeBase64(pem.replace(/-+(BEGIN|END).*?-+/g, \"\").replace(/\\s/g, \"\"));\n}\nasync function importPrivateKey(key, alg) {\n  if (!crypto.subtle || !crypto.subtle.importKey) {\n    throw new Error(\"`crypto.subtle.importKey` is undefined. JWT auth middleware requires it.\");\n  }\n  if (isCryptoKey(key)) {\n    if (key.type !== \"private\" && key.type !== \"secret\") {\n      throw new Error(\n        `unexpected key type: CryptoKey.type is ${key.type}, expected private or secret`\n      );\n    }\n    return key;\n  }\n  const usages = [CryptoKeyUsage.Sign];\n  if (typeof key === \"object\") {\n    return await crypto.subtle.importKey(\"jwk\", key, alg, false, usages);\n  }\n  if (key.includes(\"PRIVATE\")) {\n    return await crypto.subtle.importKey(\"pkcs8\", pemToBinary(key), alg, false, usages);\n  }\n  return await crypto.subtle.importKey(\"raw\", utf8Encoder.encode(key), alg, false, usages);\n}\nasync function importPublicKey(key, alg) {\n  if (!crypto.subtle || !crypto.subtle.importKey) {\n    throw new Error(\"`crypto.subtle.importKey` is undefined. JWT auth middleware requires it.\");\n  }\n  if (isCryptoKey(key)) {\n    if (key.type === \"public\" || key.type === \"secret\") {\n      return key;\n    }\n    key = await exportPublicJwkFrom(key);\n  }\n  if (typeof key === \"string\" && key.includes(\"PRIVATE\")) {\n    const privateKey = await crypto.subtle.importKey(\"pkcs8\", pemToBinary(key), alg, true, [\n      CryptoKeyUsage.Sign\n    ]);\n    key = await exportPublicJwkFrom(privateKey);\n  }\n  const usages = [CryptoKeyUsage.Verify];\n  if (typeof key === \"object\") {\n    return await crypto.subtle.importKey(\"jwk\", key, alg, false, usages);\n  }\n  if (key.includes(\"PUBLIC\")) {\n    return await crypto.subtle.importKey(\"spki\", pemToBinary(key), alg, false, usages);\n  }\n  return await crypto.subtle.importKey(\"raw\", utf8Encoder.encode(key), alg, false, usages);\n}\nasync function exportPublicJwkFrom(privateKey) {\n  if (privateKey.type !== \"private\") {\n    throw new Error(`unexpected key type: ${privateKey.type}`);\n  }\n  if (!privateKey.extractable) {\n    throw new Error(\"unexpected private key is unextractable\");\n  }\n  const jwk = await crypto.subtle.exportKey(\"jwk\", privateKey);\n  const { kty } = jwk;\n  const { alg, e, n } = jwk;\n  const { crv, x, y } = jwk;\n  return { kty, alg, e, n, crv, x, y, key_ops: [CryptoKeyUsage.Verify] };\n}\nfunction getKeyAlgorithm(name) {\n  switch (name) {\n    case \"HS256\":\n      return {\n        name: \"HMAC\",\n        hash: {\n          name: \"SHA-256\"\n        }\n      };\n    case \"HS384\":\n      return {\n        name: \"HMAC\",\n        hash: {\n          name: \"SHA-384\"\n        }\n      };\n    case \"HS512\":\n      return {\n        name: \"HMAC\",\n        hash: {\n          name: \"SHA-512\"\n        }\n      };\n    case \"RS256\":\n      return {\n        name: \"RSASSA-PKCS1-v1_5\",\n        hash: {\n          name: \"SHA-256\"\n        }\n      };\n    case \"RS384\":\n      return {\n        name: \"RSASSA-PKCS1-v1_5\",\n        hash: {\n          name: \"SHA-384\"\n        }\n      };\n    case \"RS512\":\n      return {\n        name: \"RSASSA-PKCS1-v1_5\",\n        hash: {\n          name: \"SHA-512\"\n        }\n      };\n    case \"PS256\":\n      return {\n        name: \"RSA-PSS\",\n        hash: {\n          name: \"SHA-256\"\n        },\n        saltLength: 32\n        // 256 >> 3\n      };\n    case \"PS384\":\n      return {\n        name: \"RSA-PSS\",\n        hash: {\n          name: \"SHA-384\"\n        },\n        saltLength: 48\n        // 384 >> 3\n      };\n    case \"PS512\":\n      return {\n        name: \"RSA-PSS\",\n        hash: {\n          name: \"SHA-512\"\n        },\n        saltLength: 64\n        // 512 >> 3,\n      };\n    case \"ES256\":\n      return {\n        name: \"ECDSA\",\n        hash: {\n          name: \"SHA-256\"\n        },\n        namedCurve: \"P-256\"\n      };\n    case \"ES384\":\n      return {\n        name: \"ECDSA\",\n        hash: {\n          name: \"SHA-384\"\n        },\n        namedCurve: \"P-384\"\n      };\n    case \"ES512\":\n      return {\n        name: \"ECDSA\",\n        hash: {\n          name: \"SHA-512\"\n        },\n        namedCurve: \"P-521\"\n      };\n    case \"EdDSA\":\n      return {\n        name: \"Ed25519\",\n        namedCurve: \"Ed25519\"\n      };\n    default:\n      throw new JwtAlgorithmNotImplemented(name);\n  }\n}\nfunction isCryptoKey(key) {\n  const runtime = getRuntimeKey();\n  if (runtime === \"node\" && !!crypto.webcrypto) {\n    return key instanceof crypto.webcrypto.CryptoKey;\n  }\n  return key instanceof CryptoKey;\n}\nexport {\n  signing,\n  verifying\n};\n", "// src/utils/jwt/jwt.ts\nimport { decodeBase64Url, encodeBase64Url } from \"../../utils/encode.js\";\nimport { AlgorithmTypes } from \"./jwa.js\";\nimport { signing, verifying } from \"./jws.js\";\nimport {\n  JwtAlgorithmMismatch,\n  JwtAlgorithmNotAllowed,\n  JwtAlgorithmRequired,\n  JwtHeaderInvalid,\n  JwtHeaderRequiresKid,\n  JwtPayloadRequiresAud,\n  JwtSymmetricAlgorithmNotAllowed,\n  JwtTokenAudience,\n  JwtTokenExpired,\n  JwtTokenInvalid,\n  JwtTokenIssuedAt,\n  JwtTokenIssuer,\n  JwtTokenNotBefore,\n  JwtTokenSignatureMismatched\n} from \"./types.js\";\nimport { utf8Decoder, utf8Encoder } from \"./utf8.js\";\nvar encodeJwtPart = (part) => encodeBase64Url(utf8Encoder.encode(JSON.stringify(part)).buffer).replace(/=/g, \"\");\nvar encodeSignaturePart = (buf) => encodeBase64Url(buf).replace(/=/g, \"\");\nvar decodeJwtPart = (part) => JSON.parse(utf8Decoder.decode(decodeBase64Url(part)));\nfunction isTokenHeader(obj) {\n  if (typeof obj === \"object\" && obj !== null) {\n    const objWithAlg = obj;\n    return \"alg\" in objWithAlg && Object.values(AlgorithmTypes).includes(objWithAlg.alg) && (!(\"typ\" in objWithAlg) || objWithAlg.typ === \"JWT\");\n  }\n  return false;\n}\nvar sign = async (payload, privateKey, alg = \"HS256\") => {\n  const encodedPayload = encodeJwtPart(payload);\n  let encodedHeader;\n  if (typeof privateKey === \"object\" && \"alg\" in privateKey) {\n    alg = privateKey.alg;\n    encodedHeader = encodeJwtPart({ alg, typ: \"JWT\", kid: privateKey.kid });\n  } else {\n    encodedHeader = encodeJwtPart({ alg, typ: \"JWT\" });\n  }\n  const partialToken = `${encodedHeader}.${encodedPayload}`;\n  const signaturePart = await signing(privateKey, alg, utf8Encoder.encode(partialToken));\n  const signature = encodeSignaturePart(signaturePart);\n  return `${partialToken}.${signature}`;\n};\nvar verify = async (token, publicKey, algOrOptions) => {\n  if (!algOrOptions) {\n    throw new JwtAlgorithmRequired();\n  }\n  const {\n    alg,\n    iss,\n    nbf = true,\n    exp = true,\n    iat = true,\n    aud\n  } = typeof algOrOptions === \"string\" ? { alg: algOrOptions } : algOrOptions;\n  if (!alg) {\n    throw new JwtAlgorithmRequired();\n  }\n  const tokenParts = token.split(\".\");\n  if (tokenParts.length !== 3) {\n    throw new JwtTokenInvalid(token);\n  }\n  const { header, payload } = decode(token);\n  if (!isTokenHeader(header)) {\n    throw new JwtHeaderInvalid(header);\n  }\n  if (header.alg !== alg) {\n    throw new JwtAlgorithmMismatch(alg, header.alg);\n  }\n  const now = Math.floor(Date.now() / 1e3);\n  if (nbf && payload.nbf !== void 0) {\n    if (typeof payload.nbf !== \"number\" || !Number.isFinite(payload.nbf) || payload.nbf > now) {\n      throw new JwtTokenNotBefore(token);\n    }\n  }\n  if (exp && payload.exp !== void 0) {\n    if (typeof payload.exp !== \"number\" || !Number.isFinite(payload.exp) || payload.exp <= now) {\n      throw new JwtTokenExpired(token);\n    }\n  }\n  if (iat && payload.iat !== void 0) {\n    if (typeof payload.iat !== \"number\" || !Number.isFinite(payload.iat) || now < payload.iat) {\n      throw new JwtTokenIssuedAt(now, payload.iat);\n    }\n  }\n  if (iss) {\n    if (!payload.iss) {\n      throw new JwtTokenIssuer(iss, null);\n    }\n    if (typeof iss === \"string\" && payload.iss !== iss) {\n      throw new JwtTokenIssuer(iss, payload.iss);\n    }\n    if (iss instanceof RegExp && !iss.test(payload.iss)) {\n      throw new JwtTokenIssuer(iss, payload.iss);\n    }\n  }\n  if (aud) {\n    if (!payload.aud) {\n      throw new JwtPayloadRequiresAud(payload);\n    }\n    const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n    const matched = audiences.some(\n      (payloadAud) => aud instanceof RegExp ? aud.test(payloadAud) : typeof aud === \"string\" ? payloadAud === aud : Array.isArray(aud) && aud.includes(payloadAud)\n    );\n    if (!matched) {\n      throw new JwtTokenAudience(aud, payload.aud);\n    }\n  }\n  const headerPayload = token.substring(0, token.lastIndexOf(\".\"));\n  const verified = await verifying(\n    publicKey,\n    alg,\n    decodeBase64Url(tokenParts[2]),\n    utf8Encoder.encode(headerPayload)\n  );\n  if (!verified) {\n    throw new JwtTokenSignatureMismatched(token);\n  }\n  return payload;\n};\nvar symmetricAlgorithms = [\n  AlgorithmTypes.HS256,\n  AlgorithmTypes.HS384,\n  AlgorithmTypes.HS512\n];\nvar verifyWithJwks = async (token, options, init) => {\n  const verifyOpts = options.verification || {};\n  const header = decodeHeader(token);\n  if (!isTokenHeader(header)) {\n    throw new JwtHeaderInvalid(header);\n  }\n  if (!header.kid) {\n    throw new JwtHeaderRequiresKid(header);\n  }\n  if (symmetricAlgorithms.includes(header.alg)) {\n    throw new JwtSymmetricAlgorithmNotAllowed(header.alg);\n  }\n  if (!options.allowedAlgorithms.includes(header.alg)) {\n    throw new JwtAlgorithmNotAllowed(header.alg, options.allowedAlgorithms);\n  }\n  let verifyKeys = options.keys ? [...options.keys] : void 0;\n  if (options.jwks_uri) {\n    const response = await fetch(options.jwks_uri, init);\n    if (!response.ok) {\n      throw new Error(`failed to fetch JWKS from ${options.jwks_uri}`);\n    }\n    const data = await response.json();\n    if (!data.keys) {\n      throw new Error('invalid JWKS response. \"keys\" field is missing');\n    }\n    if (!Array.isArray(data.keys)) {\n      throw new Error('invalid JWKS response. \"keys\" field is not an array');\n    }\n    verifyKeys ??= [];\n    verifyKeys.push(...data.keys);\n  } else if (!verifyKeys) {\n    throw new Error('verifyWithJwks requires options for either \"keys\" or \"jwks_uri\" or both');\n  }\n  const matchingKey = verifyKeys.find((key) => key.kid === header.kid);\n  if (!matchingKey) {\n    throw new JwtTokenInvalid(token);\n  }\n  if (matchingKey.alg && matchingKey.alg !== header.alg) {\n    throw new JwtAlgorithmMismatch(matchingKey.alg, header.alg);\n  }\n  return await verify(token, matchingKey, {\n    alg: header.alg,\n    ...verifyOpts\n  });\n};\nvar decode = (token) => {\n  const parts = token.split(\".\");\n  if (parts.length !== 3) {\n    throw new JwtTokenInvalid(token);\n  }\n  try {\n    const header = decodeJwtPart(parts[0]);\n    const payload = decodeJwtPart(parts[1]);\n    return {\n      header,\n      payload\n    };\n  } catch {\n    throw new JwtTokenInvalid(token);\n  }\n};\nvar decodeHeader = (token) => {\n  const parts = token.split(\".\");\n  if (parts.length !== 3) {\n    throw new JwtTokenInvalid(token);\n  }\n  try {\n    return decodeJwtPart(parts[0]);\n  } catch {\n    throw new JwtTokenInvalid(token);\n  }\n};\nexport {\n  decode,\n  decodeHeader,\n  isTokenHeader,\n  sign,\n  verify,\n  verifyWithJwks\n};\n", "// src/utils/jwt/index.ts\nimport { decode, sign, verify, verifyWithJwks } from \"./jwt.js\";\nvar Jwt = { sign, verify, decode, verifyWithJwks };\nexport {\n  Jwt\n};\n", "// src/middleware/jwt/jwt.ts\nimport { getCookie, getSignedCookie } from \"../../helper/cookie/index.js\";\nimport { HTTPException } from \"../../http-exception.js\";\nimport { Jwt } from \"../../utils/jwt/index.js\";\nimport \"../../context.js\";\nvar jwt = (options) => {\n  const verifyOpts = options.verification || {};\n  if (!options || !options.secret) {\n    throw new Error('JWT auth middleware requires options for \"secret\"');\n  }\n  if (!options.alg) {\n    throw new Error('JWT auth middleware requires options for \"alg\"');\n  }\n  if (!crypto.subtle || !crypto.subtle.importKey) {\n    throw new Error(\"`crypto.subtle.importKey` is undefined. JWT auth middleware requires it.\");\n  }\n  return async function jwt2(ctx, next) {\n    const headerName = options.headerName || \"Authorization\";\n    const credentials = ctx.req.raw.headers.get(headerName);\n    let token;\n    if (credentials) {\n      const parts = credentials.split(/\\s+/);\n      if (parts.length !== 2) {\n        const errDescription = \"invalid credentials structure\";\n        throw new HTTPException(401, {\n          message: errDescription,\n          res: unauthorizedResponse({\n            ctx,\n            error: \"invalid_request\",\n            errDescription\n          })\n        });\n      } else {\n        token = parts[1];\n      }\n    } else if (options.cookie) {\n      if (typeof options.cookie == \"string\") {\n        token = getCookie(ctx, options.cookie);\n      } else if (options.cookie.secret) {\n        if (options.cookie.prefixOptions) {\n          token = await getSignedCookie(\n            ctx,\n            options.cookie.secret,\n            options.cookie.key,\n            options.cookie.prefixOptions\n          );\n        } else {\n          token = await getSignedCookie(ctx, options.cookie.secret, options.cookie.key);\n        }\n      } else {\n        if (options.cookie.prefixOptions) {\n          token = getCookie(ctx, options.cookie.key, options.cookie.prefixOptions);\n        } else {\n          token = getCookie(ctx, options.cookie.key);\n        }\n      }\n    }\n    if (!token) {\n      const errDescription = \"no authorization included in request\";\n      throw new HTTPException(401, {\n        message: errDescription,\n        res: unauthorizedResponse({\n          ctx,\n          error: \"invalid_request\",\n          errDescription\n        })\n      });\n    }\n    let payload;\n    let cause;\n    try {\n      payload = await Jwt.verify(token, options.secret, {\n        alg: options.alg,\n        ...verifyOpts\n      });\n    } catch (e) {\n      cause = e;\n    }\n    if (!payload) {\n      throw new HTTPException(401, {\n        message: \"Unauthorized\",\n        res: unauthorizedResponse({\n          ctx,\n          error: \"invalid_token\",\n          statusText: \"Unauthorized\",\n          errDescription: \"token verification failure\"\n        }),\n        cause\n      });\n    }\n    ctx.set(\"jwtPayload\", payload);\n    await next();\n  };\n};\nfunction unauthorizedResponse(opts) {\n  return new Response(\"Unauthorized\", {\n    status: 401,\n    statusText: opts.statusText,\n    headers: {\n      \"WWW-Authenticate\": `Bearer realm=\"${opts.ctx.req.url}\",error=\"${opts.error}\",error_description=\"${opts.errDescription}\"`\n    }\n  });\n}\nvar verifyWithJwks = Jwt.verifyWithJwks;\nvar verify = Jwt.verify;\nvar decode = Jwt.decode;\nvar sign = Jwt.sign;\nexport {\n  decode,\n  jwt,\n  sign,\n  verify,\n  verifyWithJwks\n};\n", "import { classifyPostgresClientFailure, } from \"./runtime-postgres-client.js\";\nexport const BOOT_DB_CONNECTION_TIMEOUT_STATUS_REASON = \"boot_db_connection_timeout\";\nconst DEFAULT_BOOT_DB_MAX_ATTEMPTS = 2;\nconst DEFAULT_BOOT_DB_RETRY_DELAY_MS = 250;\nconst DEFAULT_BOOT_DB_MAX_RETRY_DELAY_MS = 5_000;\nconst DEFAULT_BOOT_DB_RETRY_JITTER_MS = 100;\nconst BOOT_DB_SETTINGS_FAILURE_PHASE = \"settings_db_env\";\nexport class BootDbSettingsLoadError extends Error {\n    code = \"GENCOW_RUNTIME_BOOT_FAILURE\";\n    phase = BOOT_DB_SETTINGS_FAILURE_PHASE;\n    statusReason;\n    postgresReason;\n    retryable = true;\n    constructor(params) {\n        super(`GENCOW_RUNTIME_BOOT_FAILURE phase=${BOOT_DB_SETTINGS_FAILURE_PHASE} reason=${params.statusReason} retryable=true`);\n        this.name = \"BootDbSettingsLoadError\";\n        this.statusReason = params.statusReason;\n        this.postgresReason = params.postgresReason;\n    }\n}\nexport function mapPostgresFailureToBootDbSettingsReason(reason) {\n    switch (reason) {\n        case \"connection_closed\":\n            return \"boot_db_connection_closed\";\n        case \"connection_timeout\":\n            return BOOT_DB_CONNECTION_TIMEOUT_STATUS_REASON;\n        case \"operation_timeout\":\n            return \"boot_db_operation_timeout\";\n        case \"socket_closed\":\n            return \"boot_db_socket_closed\";\n    }\n}\nexport function wrapBootDbSettingsLoadFailure(error) {\n    const postgresReason = classifyPostgresClientFailure(error);\n    if (!postgresReason)\n        return null;\n    return new BootDbSettingsLoadError({\n        postgresReason,\n        statusReason: mapPostgresFailureToBootDbSettingsReason(postgresReason),\n    });\n}\nfunction normalizeMaxAttempts(value) {\n    if (value === undefined || !Number.isFinite(value))\n        return DEFAULT_BOOT_DB_MAX_ATTEMPTS;\n    return Math.max(1, Math.min(5, Math.floor(value)));\n}\nfunction normalizeRetryDelayMs(value) {\n    if (value === undefined || !Number.isFinite(value))\n        return DEFAULT_BOOT_DB_RETRY_DELAY_MS;\n    return Math.max(0, Math.min(5_000, Math.floor(value)));\n}\nfunction normalizeJitterMs(value) {\n    if (value === undefined || !Number.isFinite(value))\n        return DEFAULT_BOOT_DB_RETRY_JITTER_MS;\n    return Math.max(0, Math.min(1_000, Math.floor(value)));\n}\nfunction buildRetryDelayMs(attempt, retryDelayMs, maxRetryDelayMs, retryJitterMs, random) {\n    const backoffDelayMs = Math.min(maxRetryDelayMs, retryDelayMs * 2 ** (attempt - 1));\n    if (backoffDelayMs <= 0 || retryJitterMs <= 0)\n        return backoffDelayMs;\n    const sample = random();\n    const boundedSample = Number.isFinite(sample) ? Math.max(0, Math.min(sample, 0.999_999)) : 0;\n    const jitterMs = Math.floor(boundedSample * (retryJitterMs + 1));\n    return Math.min(maxRetryDelayMs, backoffDelayMs + jitterMs);\n}\nasync function sleep(ms) {\n    if (ms <= 0)\n        return;\n    await new Promise((resolve) => setTimeout(resolve, ms));\n}\nexport async function runBootDbOperationWithRetry(operation, options = {}) {\n    const maxAttempts = normalizeMaxAttempts(options.maxAttempts);\n    const retryDelayMs = normalizeRetryDelayMs(options.retryDelayMs);\n    const maxRetryDelayMs = normalizeRetryDelayMs(options.maxRetryDelayMs ?? DEFAULT_BOOT_DB_MAX_RETRY_DELAY_MS);\n    const retryJitterMs = normalizeJitterMs(options.retryJitterMs);\n    const logger = options.logger ?? console;\n    const operationLabel = options.operationLabel ?? \"db env load\";\n    const sleepFn = options.sleep ?? sleep;\n    const random = options.random ?? Math.random;\n    for (let attempt = 1;; attempt++) {\n        try {\n            return await operation();\n        }\n        catch (error) {\n            const reason = classifyPostgresClientFailure(error);\n            if (!reason || attempt >= maxAttempts) {\n                throw error;\n            }\n            logger.warn(`[settings] ${operationLabel} hit recoverable ${reason} during boot attempt ${attempt}/${maxAttempts}; retrying`);\n            await sleepFn(buildRetryDelayMs(attempt, retryDelayMs, maxRetryDelayMs, retryJitterMs, random));\n        }\n    }\n}\n", "import { decrypt } from \"./crypto.js\";\nimport { runBootDbOperationWithRetry, wrapBootDbSettingsLoadFailure, } from \"./settings-db-retry.js\";\nexport const CREATE_SETTINGS_TABLE_SQL = `\n    DO $$\n    BEGIN\n        IF NOT EXISTS (\n            SELECT 1 FROM information_schema.tables\n            WHERE table_schema = current_schema()\n            AND table_name = '_system_settings'\n        ) THEN\n            CREATE TABLE _system_settings (\n                key TEXT PRIMARY KEY,\n                value TEXT NOT NULL,\n                iv TEXT NOT NULL,\n                created_at TIMESTAMP DEFAULT NOW(),\n                updated_at TIMESTAMP DEFAULT NOW()\n            );\n        END IF;\n    END$$;\n`;\nlet tableInitialized = false;\nasync function ensureTable(rawSql) {\n    if (tableInitialized)\n        return;\n    await rawSql(CREATE_SETTINGS_TABLE_SQL);\n    tableInitialized = true;\n}\nasync function getAllSettings(rawSql) {\n    await ensureTable(rawSql);\n    return (await rawSql(\"SELECT key, value, iv, created_at::text, updated_at::text FROM _system_settings ORDER BY key\"));\n}\nexport async function loadDbEnvVars(rawSql, options) {\n    let rows;\n    try {\n        rows = await runBootDbOperationWithRetry(() => getAllSettings(rawSql), {\n            ...options,\n            operationLabel: options?.operationLabel ?? \"_system_settings load\",\n        });\n    }\n    catch (error) {\n        throw wrapBootDbSettingsLoadFailure(error) ?? error;\n    }\n    let loaded = 0;\n    for (const row of rows) {\n        if (!process.env[row.key]) {\n            try {\n                process.env[row.key] = decrypt(row.value, row.iv);\n                loaded++;\n            }\n            catch {\n                console.warn(`[settings] Failed to decrypt ${row.key} \u2014 skipping`);\n            }\n        }\n    }\n    return loaded;\n}\n", "/**\n * packages/server/src/settings.ts\n *\n * System Settings \u2014 \uBC94\uC6A9 \uD658\uACBD\uBCC0\uC218 \uAD00\uB9AC (Convex \uC2A4\uD0C0\uC77C).\n *\n * _system_settings \uD14C\uC774\uBE14\uC740 DB migration \uC5C6\uC774 \uC790\uB3D9 \uC0DD\uC131 (CREATE TABLE IF NOT EXISTS).\n * \uC2DC\uC2A4\uD15C \uB0B4\uBD80 \uD14C\uC774\uBE14\uC774\uBBC0\uB85C \uC0AC\uC6A9\uC790 \uC2A4\uD0A4\uB9C8(schema.ts)\uC5D0 \uD3EC\uD568\uD558\uC9C0 \uC54A\uB294\uB2E4.\n *\n * Admin API:\n *   GET    /_admin/settings/env-vars           \u2192 \uC804\uCCB4 \uBAA9\uB85D (.env + DB, \uAC12 \uB9C8\uC2A4\uD0B9)\n *   POST   /_admin/settings/env-vars           \u2192 \uCD94\uAC00/\uC218\uC815 { name, value }\n *   DELETE /_admin/settings/env-vars/:name     \u2192 \uC0AD\uC81C\n */\nimport { Hono } from \"hono\";\nimport { encrypt, decrypt, maskKey } from \"./crypto.js\";\nimport { applyAdminAccessMiddleware } from \"./server-admin-access.js\";\nimport { CREATE_SETTINGS_TABLE_SQL, loadDbEnvVars } from \"./settings-db-env.js\";\nexport { loadDbEnvVars };\n// \u2500\u2500\u2500 DB Table (auto-created) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// \uD604\uC7AC \uC2A4\uD0A4\uB9C8(search_path \uAE30\uC900)\uC5D0 _system_settings \uD14C\uC774\uBE14\uC774 \uC5C6\uC73C\uBA74 \uC0DD\uC131.\n// \uC77C\uBC18 CREATE TABLE IF NOT EXISTS\uB294 search_path\uC758 \uBAA8\uB4E0 \uC2A4\uD0A4\uB9C8\uB97C \uD0D0\uC0C9\uD558\uBBC0\uB85C,\n// public \uC2A4\uD0A4\uB9C8\uC5D0 \uB3D9\uBA85 \uD14C\uC774\uBE14\uC774 \uC788\uC73C\uBA74 \uC571 \uC2A4\uD0A4\uB9C8\uC5D0 \uC0DD\uC131\uD558\uC9C0 \uC54A\uB294 \uBB38\uC81C\uAC00 \uC788\uC74C.\n// \uC774\uB97C \uBC29\uC9C0\uD558\uAE30 \uC704\uD574 current_schema() \uAE30\uC900\uC73C\uB85C \uBA85\uC2DC\uC801 \uCCB4\uD06C.\nlet tableInitialized = false;\nasync function ensureTable(rawSql) {\n    if (tableInitialized)\n        return;\n    await rawSql(CREATE_SETTINGS_TABLE_SQL);\n    tableInitialized = true;\n}\n// \u2500\u2500\u2500 CRUD \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function getAllSettings(rawSql) {\n    await ensureTable(rawSql);\n    return (await rawSql(\"SELECT key, value, iv, created_at::text, updated_at::text FROM _system_settings ORDER BY key\"));\n}\nasync function upsertSetting(rawSql, key, plainValue) {\n    await ensureTable(rawSql);\n    const { encrypted, iv } = encrypt(plainValue);\n    await rawSql(`INSERT INTO _system_settings (key, value, iv, updated_at)\n         VALUES ($1, $2, $3, NOW())\n         ON CONFLICT (key) DO UPDATE SET value = $2, iv = $3, updated_at = NOW()`, [key, encrypted, iv]);\n}\nasync function deleteSetting(rawSql, key) {\n    await ensureTable(rawSql);\n    const rows = (await rawSql(\"SELECT key FROM _system_settings WHERE key = $1\", [key]));\n    if (rows.length === 0)\n        return false;\n    await rawSql(\"DELETE FROM _system_settings WHERE key = $1\", [key]);\n    return true;\n}\n// \u2500\u2500\u2500 Env Var Collection (for API response) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * .env \uD30C\uC77C \uBCC0\uC218 \uBAA9\uB85D \uC218\uC9D1.\n * CLI\uC758 buildEnv\uC5D0\uC11C \uB85C\uB4DC\uD55C .env \uBCC0\uC218\uB4E4\uC740 \uC774\uBBF8 process.env\uC5D0 \uC788\uC9C0\uB9CC,\n * \"\uC5B4\uB5A4 \uAC83\uC774 .env\uC5D0\uC11C \uC628 \uAC74\uC9C0\" \uAD6C\uBD84\uD558\uB824\uBA74 .env \uD30C\uC77C\uC744 \uC9C1\uC811 \uD30C\uC2F1\uD574\uC57C \uD55C\uB2E4.\n *\n * \uC5EC\uAE30\uC11C\uB294 \uAC04\uB7B5\uD558\uAC8C: DB\uC5D0 \uC800\uC7A5\uB41C \uD0A4\uC640 process.env\uB97C \uBE44\uAD50\uD558\uC5EC source \uAD6C\uBD84.\n */\n// \u2500\u2500\u2500 Admin Routes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport function createSettingsRoutes(rawSql, options) {\n    const settings = new Hono();\n    applyAdminAccessMiddleware(settings, options?.accessPolicy);\n    // GET /_admin/settings/env-vars \u2014 \uC804\uCCB4 \uBAA9\uB85D (.env + DB \uBCD1\uD569, \uAC12 \uB9C8\uC2A4\uD0B9)\n    settings.get(\"/env-vars\", async (c) => {\n        await ensureTable(rawSql);\n        const dbRows = await getAllSettings(rawSql);\n        const dbKeys = new Set(dbRows.map((r) => r.key));\n        const result = [];\n        // 1. DB\uC5D0 \uC800\uC7A5\uB41C \uBCC0\uC218\n        for (const row of dbRows) {\n            let maskedValue = \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\";\n            try {\n                const plainValue = decrypt(row.value, row.iv);\n                maskedValue = maskKey(plainValue);\n            }\n            catch {\n                /* \uBCF5\uD638\uD654 \uC2E4\uD328 */\n            }\n            // .env\uC5D0\uB3C4 \uAC19\uC740 \uD0A4\uAC00 \uC788\uC73C\uBA74 \"both\" (env \uC6B0\uC120)\n            const envValue = getOriginalEnvValue(row.key);\n            result.push({\n                name: row.key,\n                source: envValue !== undefined ? \"both\" : \"db\",\n                maskedValue: envValue !== undefined ? maskKey(envValue) : maskedValue,\n            });\n        }\n        // 2. .env\uC5D0\uB9CC \uC788\uB294 \uBCC0\uC218 (DB\uC5D0 \uC5C6\uB294 \uAC83)\n        //    process.env\uB294 \uB108\uBB34 \uB9CE\uC73C\uBBC0\uB85C, \uC8FC\uC694 \uD328\uD134\uB9CC \uD45C\uC2DC\n        for (const [key, value] of Object.entries(envSnapshot)) {\n            if (!dbKeys.has(key) && value !== undefined) {\n                result.push({\n                    name: key,\n                    source: \"env\",\n                    maskedValue: maskKey(value),\n                });\n            }\n        }\n        return c.json(result);\n    });\n    // POST /_admin/settings/env-vars \u2014 \uCD94\uAC00/\uC218\uC815\n    settings.post(\"/env-vars\", async (c) => {\n        const body = (await c.req.json());\n        const { name, value } = body;\n        if (!name || value === undefined || value === null) {\n            return c.json({ error: \"name and value are required\" }, 400);\n        }\n        // \uC774\uB984 \uC720\uD6A8\uC131 \uAC80\uC0AC (\uD658\uACBD\uBCC0\uC218 \uB124\uC774\uBC0D \uADDC\uCE59)\n        if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {\n            return c.json({ error: \"Invalid variable name. Use letters, numbers, and underscores only.\" }, 400);\n        }\n        await upsertSetting(rawSql, name, value);\n        // \uC989\uC2DC process.env\uC5D0\uB3C4 \uBC18\uC601 (\uC11C\uBC84 \uC7AC\uC2DC\uC791 \uC5C6\uC774 \uC0AC\uC6A9 \uAC00\uB2A5)\n        process.env[name] = value;\n        return c.json({\n            success: true,\n            name,\n            maskedValue: maskKey(value),\n        });\n    });\n    // DELETE /_admin/settings/env-vars/:name \u2014 \uC0AD\uC81C\n    settings.delete(\"/env-vars/:name\", async (c) => {\n        const name = c.req.param(\"name\");\n        const deleted = await deleteSetting(rawSql, name);\n        if (!deleted) {\n            return c.json({ error: \"No stored variable with this name\" }, 404);\n        }\n        // process.env\uC5D0\uC11C\uB3C4 \uC81C\uAC70 (.env\uC5D0 \uC788\uC73C\uBA74 \uC6D0\uB798 \uAC12 \uBCF5\uC6D0)\n        const envOriginal = envSnapshot[name];\n        if (envOriginal !== undefined) {\n            process.env[name] = envOriginal; // .env \uC6D0\uB798 \uAC12 \uBCF5\uC6D0\n        }\n        else {\n            delete process.env[name];\n        }\n        return c.json({ success: true, name });\n    });\n    return settings;\n}\n// \u2500\u2500\u2500 System Variable Protection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// \uC2DC\uC2A4\uD15C \uD658\uACBD\uBCC0\uC218\uB294 \uC11C\uBC84 \uB0B4\uBD80\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD558\uACE0 \uC0AC\uC6A9\uC790 \uCF54\uB4DC\uC5D0 \uB178\uCD9C\uD558\uBA74 \uC548 \uB41C\uB2E4.\n// DATABASE_URL\uC5D0\uB294 DB \uBE44\uBC00\uBC88\uD638\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC5B4, \uC720\uCD9C \uC2DC \uB2E4\uB978 \uD14C\uB10C\uD2B8 \uB370\uC774\uD130 \uC811\uADFC \uAC00\uB2A5.\n//\n// \uBC29\uC5B4 \uC804\uB7B5:\n// 1. captureEnvSnapshot()\uC5D0\uC11C \uC2DC\uC2A4\uD15C \uBCC0\uC218\uB97C \uC2A4\uB0C5\uC0F7\uC5D0 \uD3EC\uD568\uD558\uC9C0 \uC54A\uC74C (Dashboard \uBBF8\uB178\uCD9C)\n// 2. sanitizeSystemEnvVars()\uC5D0\uC11C process.env\uC5D0\uC11C \uC0AD\uC81C (\uC0AC\uC6A9\uC790 \uCF54\uB4DC \uC811\uADFC \uCC28\uB2E8)\n/** \uC2DC\uC2A4\uD15C \uBCC0\uC218 \u2014 process.env\uC5D0\uC11C \uC0AD\uC81C + Dashboard\uC5D0 \uB178\uCD9C\uD558\uC9C0 \uC54A\uC74C */\nconst SYSTEM_ENV_KEYS = [\n    \"DATABASE_URL\", // DB \uBE44\uBC00\uBC88\uD638 \uD3EC\uD568 \u2192 \uC720\uCD9C \uC2DC \uB2E4\uB978 \uD14C\uB10C\uD2B8 \uC811\uADFC \uAC00\uB2A5\n    \"GENCOW_SYSTEM_DATABASE_URL\", // system-plane DB \uBE44\uBC00\uBC88\uD638 \uD3EC\uD568 \u2192 \uC720\uCD9C \uC2DC \uB2E4\uB978 \uD14C\uB10C\uD2B8/\uC2DC\uC2A4\uD15C \uC811\uADFC \uAC00\uB2A5\n    \"GENCOW_SYSTEM_USER_PASS\", // system-plane role password\n    \"ANALYTICS_DATABASE_URL\", // Analytics \uC804\uC6A9 DB \uBE44\uBC00\uBC88\uD638 \uD3EC\uD568 \u2192 \uC11C\uBC84 \uB0B4\uBD80 store\uB9CC \uC0AC\uC6A9\n    \"GENCOW_WAKE_SIGNAL_DATABASE_URL\", // LISTEN \uC804\uC6A9 DB URL \u2192 DB \uBE44\uBC00\uBC88\uD638 \uD3EC\uD568\n    \"GENCOW_REALTIME_OUTBOX_POLL_INTERVAL_MS\", // BaaS realtime worker \uC6B4\uC601 \uC124\uC815\n    \"GENCOW_WORKFLOW_RECONCILER_INTERVAL_MS\", // BaaS workflow/RAG wake fallback \uC6B4\uC601 \uC124\uC815\n    \"GENCOW_WORKFLOW_CHECKPOINT_LIMIT_MODE\", // workflow checkpoint size enforcement mode\n    \"GENCOW_WORKFLOW_CHECKPOINT_SOFT_LIMIT_BYTES\", // workflow checkpoint soft-limit metric threshold\n    \"GENCOW_WORKFLOW_CHECKPOINT_HARD_LIMIT_BYTES\", // workflow checkpoint hard-limit failure threshold\n    \"GENCOW_STORAGE_BACKEND\", // hosted storage backend selection \u2014 operator only\n    \"GENCOW_STORAGE_LEGACY_LOCAL_FALLBACK\", // migration-only fallback flag\n    \"GENCOW_PLATFORM_STORAGE_DIRECT_SERVE\", // platform-only public storage direct-serve switch\n    \"GENCOW_PLATFORM_STORAGE_AZURE_ACCOUNT_NAME\", // platform storage account config\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CONTAINER\", // platform storage container config\n    \"GENCOW_PLATFORM_STORAGE_AZURE_ENDPOINT\", // platform storage endpoint\n    \"GENCOW_PLATFORM_STORAGE_AZURE_AUTH\", // platform storage auth mode\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_ID\", // service principal / user-assigned MI id\n    \"GENCOW_PLATFORM_STORAGE_AZURE_TENANT_ID\", // service principal tenant\n    \"GENCOW_PLATFORM_STORAGE_AZURE_CLIENT_SECRET\", // service principal secret\n    \"GENCOW_PLATFORM_STORAGE_AZURE_PREFIX\", // environment prefix\n    \"GENCOW_PLATFORM_STORAGE_AZURE_DIRECT_UPLOAD\", // direct-upload transport mode\n    \"GENCOW_BACKUP_RETENTION_V2_MODE\", // platform backup retention rollout mode\n    \"GENCOW_BACKUP_RETENTION_V2_EFFECTIVE_AT\", // platform backup retention effective timestamp\n    \"BETTER_AUTH_SECRET\", // \uC778\uC99D \uD1A0\uD070 \uC704\uC870 \uAC00\uB2A5\n    \"GENCOW_BILLING_DISCOUNT_TOKEN_SECRET\", // \uACB0\uC81C \uD560\uC778 \uB300\uC0C1\uAD70 preview \uC11C\uBA85 \uC804\uC6A9 secret\n    \"BETTER_AUTH_URL\", // \uB0B4\uBD80 \uC778\uC99D URL\n    \"PLATFORM_OPENAI_KEY\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 AI \uD0A4\n    \"PLATFORM_GOOGLE_KEY\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 Gemini/OCR \uD0A4\n    \"PLATFORM_GOOGLE_CLIENT_ID\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 Google OAuth client\n    \"PLATFORM_GOOGLE_CLIENT_SECRET\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 Google OAuth secret\n    \"GENCOW_DOCUMENT_CUSTOM_VLM_TOKEN\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 \uCEE4\uC2A4\uD140 VLM \uD1A0\uD070\n    \"GENCOW_DOCUMENT_CUSTOM_VLM_HEADERS_JSON\", // \uD50C\uB7AB\uD3FC \uC804\uC6A9 \uCEE4\uC2A4\uD140 VLM \uC778\uC99D \uD5E4\uB354\n    \"RESEND_API_KEY\", // \uD50C\uB7AB\uD3FC \uC774\uBA54\uC77C \uBC1C\uC1A1 \uD0A4 \u2192 server bootstrap\uC5D0\uC11C \uCEA1\uCC98\uD55C \uB4A4 \uC0AD\uC81C\n    // NOTE: IS_PLATFORM\uC740 \uB7F0\uD0C0\uC784 \uB0B4\uB0B4 \uCC38\uC870 (subdomain proxy, provisioner \uB4F1) \u2192 \uC0AD\uC81C \uBD88\uAC00\n];\n/** \uC2DC\uC2A4\uD15C \uBCC0\uC218 \uD328\uD134 \u2014 Dashboard\uC5D0 \uB178\uCD9C\uD558\uC9C0 \uC54A\uC74C (\uC0AD\uC81C\uB294 \uC548 \uD568) */\nconst SYSTEM_ENV_PATTERNS = [\n    /^GENCOW_/, // \uB0B4\uBD80 \uC2DC\uC2A4\uD15C \uC124\uC815\n    /^(MAX_CONCURRENT_RUNNING|MAX_CONCURRENT_WAKE|MAX_WAKE_QUEUE_MS)$/,\n    /^(MIN_AVAILABLE_RAM_MB|WAKE_RETRY_AFTER_SEC|EVICTION_THRESHOLD_MB)$/,\n    /^(WARM_POOL_MIN_IDLE|WARM_POOL_MAX|WARM_POOL_BACKEND|WARM_POOL_DISABLED)$/,\n    /^(DEPLOY_CANDIDATE_RESERVE|COWBOX_WARM_POOL_PORT_RANGE)$/,\n    /^BUN_JSC_/, // Bun \uB7F0\uD0C0\uC784 \uC124\uC815\n    /^NODE_PATH$/, // \uBAA8\uB4C8 \uACBD\uB85C\n    /^NEXT_PUBLIC_/, // \uD504\uB860\uD2B8\uC5D4\uB4DC\uC6A9\n    /^PORT$/, // \uC11C\uBC84 \uD3EC\uD2B8\n];\n// \u2500\u2500\u2500 Env Snapshot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// \uC11C\uBC84 \uC2DC\uC791 \uC2DC\uC810\uC758 .env \uBCC0\uC218 \uCEA1\uCC98 (CLI buildEnv\uC5D0\uC11C \uB85C\uB4DC\uD55C \uAC12)\n// DB \uBCC0\uC218 \uB85C\uB4DC \uC804\uC5D0 \uD638\uCD9C\uD558\uC5EC, .env \uC6D0\uBCF8 \uAC12\uC744 \uBCF4\uC874.\nconst envSnapshot = {};\nconst CAPTURE_PLATFORM_PROVIDER_SECRET_ENV_SNAPSHOT_KEY = \"__gencowCapturePlatformProviderSecretEnvSnapshot\";\nconst CAPTURE_ENV_CRYPTO_DB_MASTER_SECRET_SNAPSHOT_KEY = \"__gencowCaptureEnvCryptoDbMasterSecretSnapshot\";\nconst CAPTURE_BACKUP_RETENTION_CONFIG_SNAPSHOT_KEY = \"__gencowCaptureBackupRetentionConfigSnapshot\";\n/**\n * \uC11C\uBC84 \uC2DC\uC791 \uC2DC \uD638\uCD9C \u2014 .env\uC5D0\uC11C \uB85C\uB4DC\uB41C \uD658\uACBD\uBCC0\uC218\uB97C \uC2A4\uB0C5\uC0F7.\n * \uC2DC\uC2A4\uD15C \uBCC0\uC218\uB294 \uD3EC\uD568\uD558\uC9C0 \uC54A\uC74C (Dashboard\uC5D0 \uB178\uCD9C \uBC29\uC9C0).\n */\nexport function captureEnvSnapshot() {\n    // _API_KEY, _SECRET, _TOKEN \uB4F1 \uC0AC\uC6A9\uC790\uAC00 \uAD00\uC2EC\uC788\uB294 \uD328\uD134\uB9CC \uCEA1\uCC98\n    const patterns = [\n        /_API_KEY$/i,\n        /_SECRET$/i,\n        /_TOKEN$/i,\n        /_URL$/i,\n        /_DSN$/i,\n        /_KEY$/i,\n        /_PASSWORD$/i,\n        /^DATABASE_/,\n        /^REDIS_/,\n        /^OPENAI_/,\n        /^ANTHROPIC_/,\n        /^GOOGLE_/,\n        /^AZURE_/,\n        /^AWS_/,\n        /^STRIPE_/,\n        /^WEBHOOK_/,\n        /^SMTP_/,\n        /^MAIL_/,\n    ];\n    // \uC2DC\uC2A4\uD15C \uBCC0\uC218 \uC644\uC804 \uC81C\uC678 (\uD0A4 \uC774\uB984 + \uD328\uD134 \uB458 \uB2E4 \uCCB4\uD06C)\n    const systemKeySet = new Set(SYSTEM_ENV_KEYS);\n    for (const [key, value] of Object.entries(process.env)) {\n        if (!value)\n            continue;\n        if (systemKeySet.has(key))\n            continue;\n        if (SYSTEM_ENV_PATTERNS.some((p) => p.test(key)))\n            continue;\n        if (patterns.some((p) => p.test(key))) {\n            envSnapshot[key] = value;\n        }\n    }\n}\n/**\n * DB \uC5F0\uACB0 \uC644\uB8CC \uD6C4 \uD638\uCD9C \u2014 process.env\uC5D0\uC11C \uC2DC\uC2A4\uD15C \uBCC0\uC218\uB97C \uC0AD\uC81C.\n * \uC0AC\uC6A9\uC790 \uD568\uC218\uC5D0\uC11C process.env.DATABASE_URL \uB4F1\uC5D0 \uC811\uADFC\uD560 \uC218 \uC5C6\uAC8C \uB41C\uB2E4.\n *\n * \uC548\uC804\uC131:\n * - postgres.js\uB294 \uC5F0\uACB0 \uC2DC\uC810\uC5D0\uB9CC URL\uC744 \uC77D\uACE0 \uC774\uD6C4\uC5D4 TCP \uC18C\uCF13\uB9CC \uC720\uC9C0\n * - better-auth\uB3C4 \uCD08\uAE30\uD654 \uC2DC\uC810\uC5D0 \uC2DC\uD06C\uB9BF\uC744 \uC77D\uACE0 \uC774\uD6C4\uC5D4 \uBA54\uBAA8\uB9AC\uC5D0 \uBCF4\uAD00\n * - \uC0AD\uC81C \uD6C4\uC5D0\uB3C4 \uAE30\uC874 \uC5F0\uACB0/\uC778\uC99D\uC740 \uC815\uC0C1 \uB3D9\uC791\n */\nconst CAPTURE_AI_STREAM_CONFIG_SNAPSHOT_KEY = \"__gencowCaptureAiStreamConfigSnapshot\";\nconst CAPTURE_BILLING_DISCOUNT_SECRET_SNAPSHOT_KEY = \"__gencowCaptureBillingDiscountAudienceSecretSnapshot\";\nexport function sanitizeSystemEnvVars() {\n    const captureEnvCryptoDbMasterSecret = globalThis[CAPTURE_ENV_CRYPTO_DB_MASTER_SECRET_SNAPSHOT_KEY];\n    if (typeof captureEnvCryptoDbMasterSecret === \"function\") {\n        captureEnvCryptoDbMasterSecret(process.env);\n    }\n    const captureProviderSecrets = globalThis[CAPTURE_PLATFORM_PROVIDER_SECRET_ENV_SNAPSHOT_KEY];\n    if (typeof captureProviderSecrets === \"function\") {\n        captureProviderSecrets(process.env);\n    }\n    const captureBillingDiscountSecret = globalThis[CAPTURE_BILLING_DISCOUNT_SECRET_SNAPSHOT_KEY];\n    if (typeof captureBillingDiscountSecret === \"function\") {\n        captureBillingDiscountSecret(process.env);\n    }\n    const captureAiStreamConfig = globalThis[CAPTURE_AI_STREAM_CONFIG_SNAPSHOT_KEY];\n    if (typeof captureAiStreamConfig === \"function\") {\n        captureAiStreamConfig(process.env);\n    }\n    const captureBackupRetentionConfig = globalThis[CAPTURE_BACKUP_RETENTION_CONFIG_SNAPSHOT_KEY];\n    if (typeof captureBackupRetentionConfig === \"function\") {\n        captureBackupRetentionConfig(process.env);\n    }\n    let sanitizedCount = 0;\n    for (const key of SYSTEM_ENV_KEYS) {\n        if (process.env[key] !== undefined) {\n            delete process.env[key];\n            sanitizedCount++;\n        }\n    }\n    if (sanitizedCount > 0) {\n        console.log(`[security] ${sanitizedCount} system env var(s) removed from process.env \u2713`);\n    }\n}\nfunction getOriginalEnvValue(key) {\n    return envSnapshot[key];\n}\n", "export function buildFailoverTargets(primary, alt) {\n    const targets = [];\n    if (primary)\n        targets.push(primary);\n    if (alt && alt !== primary)\n        targets.push(alt);\n    return targets;\n}\nexport function shouldRetryPlatformResponse(status) {\n    return status >= 500 || status === 408;\n}\nexport async function fetchWithBaseFailover(targets, path, init, options) {\n    let lastError = null;\n    let lastResponse = null;\n    const label = options?.label || path;\n    const retryOnStatus = options?.retryOnStatus || shouldRetryPlatformResponse;\n    for (let index = 0; index < targets.length; index += 1) {\n        const base = targets[index];\n        try {\n            const response = await fetch(`${base}${path}`, init);\n            if (!retryOnStatus(response.status) || index === targets.length - 1) {\n                return response;\n            }\n            lastResponse = response;\n            console.warn(`[platform-failover] ${label}: retrying alt target after ${response.status} from ${base}`);\n        }\n        catch (error) {\n            lastError = error instanceof Error ? error : new Error(String(error));\n            if (index === targets.length - 1)\n                break;\n            console.warn(`[platform-failover] ${label}: primary target failed (${base}) \u2014 retrying alt: ${lastError.message}`);\n        }\n    }\n    if (lastResponse)\n        return lastResponse;\n    throw lastError || new Error(`All platform targets failed for ${label}`);\n}\nexport function createPlatformFailoverClients(params) {\n    async function fetchPlatformInternal(path, init, label) {\n        const targets = buildFailoverTargets(params.platformInternalUrl, params.platformInternalUrlAlt);\n        if (targets.length === 0) {\n            throw new Error(`No platform internal URL configured for ${label}`);\n        }\n        return fetchWithBaseFailover(targets, path, init, { label });\n    }\n    function notifyGateway(payload) {\n        if (!params.platformInternalUrl || !params.appName)\n            return;\n        void fetchPlatformInternal(\"/internal/realtime-notify\", {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"X-Internal-Token\": params.internalToken,\n            },\n            body: JSON.stringify({ appName: params.appName, ...payload }),\n        }, \"realtime-notify\").catch((e) => {\n            console.warn(`[realtime] Gateway notify failed:`, e.message);\n        });\n    }\n    return { fetchPlatformInternal, notifyGateway };\n}\nexport class RuntimeBuffer {\n    buf = {};\n    backendRoutes = new Map();\n    add(key, value) {\n        this.buf[key] = (this.buf[key] || 0) + value;\n    }\n    addBackendRouteUsage(delta) {\n        const key = [delta.category, delta.routePattern, delta.statusClass].join(\"\\u001f\");\n        const current = this.backendRoutes.get(key);\n        if (!current) {\n            this.backendRoutes.set(key, { ...delta });\n            return;\n        }\n        current.requestCount += delta.requestCount;\n        current.observedMs += delta.observedMs;\n        current.billableMs += delta.billableMs;\n        current.cappedRequests += delta.cappedRequests;\n        current.maxObservedMs = Math.max(current.maxObservedMs, delta.maxObservedMs);\n    }\n    drain() {\n        const snapshot = { ...this.buf };\n        this.buf = {};\n        return snapshot;\n    }\n    drainBackendRouteUsage() {\n        const snapshot = [...this.backendRoutes.values()];\n        this.backendRoutes.clear();\n        return snapshot;\n    }\n    get isEmpty() {\n        return Object.keys(this.buf).length === 0 && this.backendRoutes.size === 0;\n    }\n}\n", "import { existsSync, readFileSync } from \"fs\";\nimport { resolve } from \"path\";\nexport const DEFAULT_PLATFORM_CONFIG_PATH = \"/etc/gencow/platform-config.json\";\nconst LOCAL_PLATFORM_CONFIG_FILE = \"platform.config.json\";\nconst ENV_KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;\nconst DENIED_ENV_KEYS = new Set([\n    \"DATABASE_URL\",\n    \"BETTER_AUTH_SECRET\",\n    \"BETTER_AUTH_URL\",\n    \"PORT\",\n    \"PATH\",\n    \"HOME\",\n    \"PWD\",\n    \"NODE_PATH\",\n]);\nfunction isObject(value) {\n    return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction asString(value) {\n    return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\nfunction asScalarEnvValue(value) {\n    if (typeof value === \"string\")\n        return value;\n    if (typeof value === \"number\" && Number.isFinite(value))\n        return String(value);\n    if (typeof value === \"boolean\")\n        return value ? \"true\" : \"false\";\n    return undefined;\n}\nfunction setEnv(target, key, value) {\n    if (!ENV_KEY_PATTERN.test(key)) {\n        throw new Error(`Invalid platform config env key: ${key}`);\n    }\n    if (DENIED_ENV_KEYS.has(key)) {\n        throw new Error(`Platform config cannot override core runtime env key: ${key}`);\n    }\n    const normalized = asScalarEnvValue(value);\n    if (normalized === undefined) {\n        throw new Error(`Platform config env \"${key}\" must be string, number, or boolean`);\n    }\n    target[key] = normalized;\n}\nfunction flattenStringMap(value) {\n    if (!isObject(value))\n        return undefined;\n    const normalized = {};\n    for (const [key, raw] of Object.entries(value)) {\n        const envValue = asScalarEnvValue(raw);\n        if (envValue !== undefined)\n            normalized[key] = envValue;\n    }\n    return Object.keys(normalized).length > 0 ? JSON.stringify(normalized) : undefined;\n}\nfunction flattenDocumentConfig(config, target) {\n    const document = config.document;\n    if (!isObject(document))\n        return;\n    const prompts = document.prompts;\n    if (isObject(prompts)) {\n        const ocr = asString(prompts.ocr);\n        const openai = asString(prompts.openai);\n        const gemini = asString(prompts.gemini);\n        if (ocr)\n            target.GENCOW_DOCUMENT_OCR_PROMPT = ocr;\n        if (openai)\n            target.GENCOW_DOCUMENT_OPENAI_PROMPT = openai;\n        if (gemini)\n            target.GENCOW_DOCUMENT_GEMINI_PROMPT = gemini;\n    }\n    const openai = document.openai;\n    if (isObject(openai)) {\n        const model = asString(openai.model);\n        if (model)\n            target.GENCOW_DOCUMENT_OPENAI_MODEL = model;\n        if (openai.maxOutputTokens !== undefined) {\n            setEnv(target, \"GENCOW_DOCUMENT_OPENAI_MAX_OUTPUT_TOKENS\", openai.maxOutputTokens);\n        }\n    }\n    const gemini = document.gemini;\n    if (isObject(gemini)) {\n        const model = asString(gemini.model);\n        if (model)\n            target.GENCOW_DOCUMENT_GEMINI_MODEL = model;\n    }\n    const ocr = document.ocr;\n    if (isObject(ocr)) {\n        const model = asString(ocr.model);\n        if (model)\n            target.GENCOW_DOCUMENT_OCR_MODEL = model;\n    }\n    const safeAuto = document.safeAuto;\n    if (isObject(safeAuto) && safeAuto.maxPaidFallbackCredits !== undefined) {\n        setEnv(target, \"GENCOW_DOCUMENT_AUTO_PAID_FALLBACK_MAX_CREDITS\", safeAuto.maxPaidFallbackCredits);\n    }\n    const providers = document.providers;\n    if (!isObject(providers))\n        return;\n    if (Array.isArray(providers.forceOcrOrder)) {\n        target.GENCOW_DOCUMENT_FORCE_OCR_PROVIDERS = providers.forceOcrOrder\n            .map((value) => String(value).trim())\n            .filter(Boolean)\n            .join(\",\");\n    }\n    const kordoc = providers.kordoc;\n    if (isObject(kordoc)) {\n        const url = asString(kordoc.url);\n        const token = asString(kordoc.token);\n        if (url)\n            target.GENCOW_DOCUMENT_KORDOC_URL = url;\n        if (token)\n            target.GENCOW_DOCUMENT_KORDOC_TOKEN = token;\n        if (kordoc.timeoutMs !== undefined) {\n            setEnv(target, \"GENCOW_DOCUMENT_KORDOC_TIMEOUT_MS\", kordoc.timeoutMs);\n        }\n    }\n    const customVlm = providers.customVlm;\n    if (!isObject(customVlm))\n        return;\n    const url = asString(customVlm.url);\n    const token = asString(customVlm.token);\n    const model = asString(customVlm.model);\n    const headers = flattenStringMap(customVlm.headers);\n    if (url)\n        target.GENCOW_DOCUMENT_CUSTOM_VLM_URL = url;\n    if (token)\n        target.GENCOW_DOCUMENT_CUSTOM_VLM_TOKEN = token;\n    if (model)\n        target.GENCOW_DOCUMENT_CUSTOM_VLM_MODEL = model;\n    if (headers)\n        target.GENCOW_DOCUMENT_CUSTOM_VLM_HEADERS_JSON = headers;\n    if (customVlm.timeoutMs !== undefined) {\n        setEnv(target, \"GENCOW_DOCUMENT_CUSTOM_VLM_TIMEOUT_MS\", customVlm.timeoutMs);\n    }\n}\nfunction flattenTemplateConfig(config, target) {\n    const template = config.template;\n    if (!isObject(template))\n        return;\n    const preview = template.preview;\n    if (isObject(preview)) {\n        const adminEmail = asString(preview.adminEmail);\n        const adminUserId = asString(preview.adminUserId);\n        if (adminEmail)\n            target.GENCOW_TEMPLATE_PREVIEW_ADMIN_EMAIL = adminEmail;\n        if (adminUserId)\n            target.GENCOW_TEMPLATE_PREVIEW_ADMIN_USER_ID = adminUserId;\n    }\n    const limits = template.limits;\n    if (isObject(limits)) {\n        if (limits.maxSourceBytes !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_MAX_SOURCE_BYTES\", limits.maxSourceBytes);\n        }\n        if (limits.maxStaticBytes !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_MAX_STATIC_BYTES\", limits.maxStaticBytes);\n        }\n    }\n    const screenshots = template.screenshots;\n    if (isObject(screenshots)) {\n        const captureBaseUrl = asString(screenshots.captureBaseUrl);\n        const captureToken = asString(screenshots.captureToken);\n        if (captureBaseUrl)\n            target.GENCOW_TEMPLATE_CAPTURE_BASE_URL = captureBaseUrl;\n        if (captureToken)\n            target.GENCOW_TEMPLATE_PREVIEW_CAPTURE_TOKEN = captureToken;\n        if (screenshots.timeoutMs !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_SCREENSHOT_TIMEOUT_MS\", screenshots.timeoutMs);\n        }\n        if (screenshots.maxConcurrency !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_SCREENSHOT_MAX_CONCURRENCY\", screenshots.maxConcurrency);\n        }\n        if (screenshots.workerTimeoutMs !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_SCREENSHOT_WORKER_TIMEOUT_MS\", screenshots.workerTimeoutMs);\n        }\n        if (screenshots.nice !== undefined) {\n            setEnv(target, \"GENCOW_TEMPLATE_SCREENSHOT_NICE\", screenshots.nice);\n        }\n    }\n    const storage = template.storage;\n    if (isObject(storage)) {\n        const dir = asString(storage.dir);\n        if (dir)\n            target.GENCOW_TEMPLATE_STORAGE_DIR = dir;\n    }\n    const checkout = template.checkout;\n    if (isObject(checkout)) {\n        const successUrl = asString(checkout.successUrl);\n        const cancelUrl = asString(checkout.cancelUrl);\n        if (successUrl)\n            target.GENCOW_TEMPLATE_CHECKOUT_SUCCESS_URL = successUrl;\n        if (cancelUrl)\n            target.GENCOW_TEMPLATE_CHECKOUT_CANCEL_URL = cancelUrl;\n    }\n}\nexport function flattenPlatformRuntimeConfig(config) {\n    if (!isObject(config)) {\n        throw new Error(\"Platform config JSON must be an object\");\n    }\n    const env = {};\n    if (isObject(config.env)) {\n        for (const [key, value] of Object.entries(config.env)) {\n            setEnv(env, key, value);\n        }\n    }\n    flattenDocumentConfig(config, env);\n    flattenTemplateConfig(config, env);\n    return env;\n}\nfunction resolvePlatformConfigPath(params) {\n    const explicit = params.env.GENCOW_PLATFORM_CONFIG_FILE?.trim();\n    if (explicit)\n        return { path: resolve(params.cwd, explicit), explicit: true };\n    const localPath = resolve(params.cwd, LOCAL_PLATFORM_CONFIG_FILE);\n    if (params.existsSyncImpl(localPath))\n        return { path: localPath, explicit: false };\n    if (params.existsSyncImpl(DEFAULT_PLATFORM_CONFIG_PATH)) {\n        return { path: DEFAULT_PLATFORM_CONFIG_PATH, explicit: false };\n    }\n    return { path: null, explicit: false };\n}\nexport function loadPlatformRuntimeConfigFile(options = {}) {\n    const env = options.env ?? process.env;\n    if (env.IS_PLATFORM !== \"true\")\n        return {};\n    const cwd = options.cwd ?? process.cwd();\n    const existsSyncImpl = options.existsSyncImpl ?? existsSync;\n    const readFileSyncImpl = options.readFileSyncImpl ?? readFileSync;\n    const resolved = resolvePlatformConfigPath({ env, cwd, existsSyncImpl });\n    if (!resolved.path)\n        return {};\n    if (!existsSyncImpl(resolved.path)) {\n        if (resolved.explicit)\n            throw new Error(`Platform config file not found: ${resolved.path}`);\n        return {};\n    }\n    const config = JSON.parse(readFileSyncImpl(resolved.path, \"utf-8\"));\n    const flattened = flattenPlatformRuntimeConfig(config);\n    for (const [key, value] of Object.entries(flattened)) {\n        env[key] = value;\n    }\n    options.logger?.log(`[platform-config] loaded ${Object.keys(flattened).length} setting(s) from ${resolved.path}`);\n    return flattened;\n}\n", "export function resolveAuthRuntimeDb(params) {\n    if (params.isPlatform)\n        return params.platformSystemDb;\n    if (params.isBaas && params.systemDb)\n        return params.systemDb;\n    return params.db;\n}\n", "import { cors } from \"hono/cors\";\nimport { shouldRouteThroughPlatformAppProxy } from \"./server-platform-app-proxy-domain.js\";\nexport function shouldDeferPlatformCorsToTenantRuntime(params) {\n    return (params.isPlatform &&\n        shouldRouteThroughPlatformAppProxy(params.hostHeader, params.platformDomain));\n}\nexport function createRuntimeCorsMiddleware(options) {\n    const corsMiddleware = cors({\n        origin: (origin) => options.resolveOrigin(origin),\n        credentials: true,\n    });\n    return async (c, next) => {\n        if (shouldDeferPlatformCorsToTenantRuntime({\n            isPlatform: options.isPlatform,\n            hostHeader: c.req.header(\"host\"),\n            platformDomain: options.platformDomain,\n        })) {\n            return next();\n        }\n        return corsMiddleware(c, next);\n    };\n}\n", "export function resolveServerRuntimeMode(env = process.env) {\n    const isBaas = Boolean(env.GENCOW_METERING_URL);\n    const isPlatform = env.IS_PLATFORM === \"true\";\n    const isTenantApp = Boolean(env.GENCOW_APP_NAME);\n    return {\n        isBaas,\n        isPlatform,\n        isTenantApp,\n        isDeployedRuntime: isBaas || isTenantApp,\n    };\n}\n", "function normalizeHost(value) {\n    const raw = (value || \"\").trim().toLowerCase().replace(/\\.+$/, \"\");\n    if (!raw)\n        return \"\";\n    if (raw.startsWith(\"[\") && raw.includes(\"]\"))\n        return raw.slice(1, raw.indexOf(\"]\"));\n    return raw.split(\":\")[0] || \"\";\n}\nfunction normalizePlatformDomain(value) {\n    return normalizeHost(value) || \"gencow.app\";\n}\nexport function buildOfficialDomainCanonicalURL(requestURL, hostHeader, platformDomain) {\n    const officialDomain = normalizePlatformDomain(platformDomain);\n    const requestHost = normalizeHost(hostHeader || new URL(requestURL).host);\n    if (requestHost !== `www.${officialDomain}`)\n        return null;\n    const target = new URL(requestURL);\n    target.protocol = \"https:\";\n    target.host = officialDomain;\n    return target.toString();\n}\nexport function createOfficialDomainCanonicalRedirectMiddleware(platformDomain) {\n    return async (c, next) => {\n        const canonicalURL = buildOfficialDomainCanonicalURL(c.req.url, c.req.header(\"host\"), platformDomain);\n        if (!canonicalURL) {\n            await next();\n            return;\n        }\n        return new Response(null, {\n            status: 308,\n            headers: { Location: canonicalURL },\n        });\n    };\n}\n", "export const SERVER_STARTUP_TIMING_STAGES = [\n    \"module_graph\",\n    \"startup_audits\",\n    \"app_import\",\n    \"app_registry\",\n    \"database_auth\",\n    \"system_schema\",\n    \"runtime_setup\",\n    \"settings_env\",\n    \"platform_runtime\",\n    \"realtime_runtime\",\n    \"scheduler\",\n    \"runtime_wiring\",\n    \"route_registration\",\n    \"listen_ready\",\n];\nfunction defaultNow() {\n    return performance.now();\n}\nfunction normalizeDuration(durationMs) {\n    if (!Number.isFinite(durationMs) || durationMs < 0)\n        return 0;\n    return durationMs;\n}\nexport function createServerStartupTimingRecorder(options) {\n    const now = options.now ?? defaultNow;\n    const startedAt = now();\n    const processStartElapsedMs = normalizeDuration(options.processStartElapsedMs ?? 0);\n    const stages = {};\n    let result = \"ready\";\n    let reasonCode = \"none\";\n    let summary;\n    const record = (stage, durationMs) => {\n        const current = stages[stage] ?? { calls: 0, durationMs: 0 };\n        stages[stage] = {\n            calls: current.calls + 1,\n            durationMs: current.durationMs + normalizeDuration(durationMs),\n        };\n    };\n    if (processStartElapsedMs > 0) {\n        record(\"module_graph\", processStartElapsedMs);\n    }\n    const markFailure = (stage) => {\n        result = \"error\";\n        if (reasonCode === \"none\")\n            reasonCode = `${stage}_error`;\n    };\n    const start = (stage) => {\n        const stageStartedAt = now();\n        let recorded = false;\n        return () => {\n            if (recorded)\n                return;\n            recorded = true;\n            record(stage, now() - stageStartedAt);\n        };\n    };\n    const measure = async (stage, operation) => {\n        const stop = start(stage);\n        try {\n            return await operation();\n        }\n        catch (error) {\n            markFailure(stage);\n            throw error;\n        }\n        finally {\n            stop();\n        }\n    };\n    const measureSync = (stage, operation) => {\n        const stop = start(stage);\n        try {\n            return operation();\n        }\n        catch (error) {\n            markFailure(stage);\n            throw error;\n        }\n        finally {\n            stop();\n        }\n    };\n    return {\n        start,\n        measure,\n        measureSync,\n        record,\n        finish() {\n            if (summary)\n                return summary;\n            const totalMs = processStartElapsedMs + normalizeDuration(now() - startedAt);\n            const measuredMs = Object.values(stages).reduce((total, stage) => total + normalizeDuration(stage?.durationMs ?? 0), 0);\n            summary = {\n                runtimePath: options.runtimePath,\n                result,\n                reasonCode,\n                totalMs,\n                residualMs: Math.max(0, totalMs - measuredMs),\n                stages: { ...stages },\n            };\n            return summary;\n        },\n    };\n}\nfunction roundMs(value) {\n    return Math.round(normalizeDuration(value));\n}\nfunction sanitizeLogValue(value) {\n    return value.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n}\nexport function formatServerStartupTimingLog(appName, summary) {\n    const stageValues = SERVER_STARTUP_TIMING_STAGES.flatMap((stage) => {\n        const timing = summary.stages[stage];\n        return timing ? [`${stage}:${roundMs(timing.durationMs)}ms/${timing.calls}`] : [];\n    });\n    return [\n        \"[startup-timing]\",\n        `app=${sanitizeLogValue(appName)}`,\n        `runtime_path=${summary.runtimePath}`,\n        `result=${summary.result}`,\n        `reason_code=${summary.reasonCode}`,\n        `total_ms=${roundMs(summary.totalMs)}`,\n        `residual_ms=${roundMs(summary.residualMs)}`,\n        `stages=${stageValues.join(\",\") || \"none\"}`,\n    ].join(\" \");\n}\n", "export function createPlatformSpendCapCache() {\n    return { allowed: true, expiresAtMs: 0 };\n}\nconst DEFAULT_BACKEND_REQUEST_MAX_BILLABLE_MS = 60_000;\nfunction normalizePath(path) {\n    if (!path)\n        return \"/\";\n    try {\n        return new URL(path, \"http://gencow.local\").pathname || \"/\";\n    }\n    catch {\n        return path.split(\"?\")[0] || \"/\";\n    }\n}\nfunction sanitizeRoutePattern(path) {\n    const segments = path.split(\"/\").filter(Boolean);\n    if (segments.length === 0)\n        return \"/\";\n    const sanitized = segments.slice(0, 8).map((segment) => {\n        let decoded;\n        try {\n            decoded = decodeURIComponent(segment);\n        }\n        catch {\n            return \":value\";\n        }\n        if (/^\\d+$/.test(decoded))\n            return \":id\";\n        if (/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(decoded)) {\n            return \":id\";\n        }\n        if (/^[A-Za-z0-9_-]{24,}$/.test(decoded))\n            return \":token\";\n        if (decoded.length > 48)\n            return \":token\";\n        if (decoded.includes(\"@\"))\n            return \":value\";\n        return decoded.replace(/[^A-Za-z0-9._~:-]/g, \":\");\n    });\n    if (segments.length > sanitized.length)\n        sanitized.push(\":path*\");\n    return `/${sanitized.join(\"/\")}`;\n}\nfunction infraPattern(path) {\n    if (path.startsWith(\"/_admin\"))\n        return \"/_admin/:path*\";\n    if (path.startsWith(\"/_dashboard\"))\n        return \"/_dashboard/:path*\";\n    if (path.startsWith(\"/_proxy/\"))\n        return \"/_proxy/:path*\";\n    if (path === \"/ws\")\n        return \"/ws\";\n    if (path === \"/health\" || path.startsWith(\"/health/\"))\n        return \"/health/:path*\";\n    if (path.startsWith(\"/internal/\"))\n        return \"/internal/:path*\";\n    if (path === \"/api/auth\" || path.startsWith(\"/api/auth/\"))\n        return \"/api/auth/:path*\";\n    return null;\n}\nfunction classification(category, routePattern, options = {}) {\n    return {\n        category,\n        routePattern,\n        meterApiCall: options.meterApiCall ?? false,\n        meterFunctionMs: options.meterFunctionMs ?? false,\n        meterBandwidth: options.meterBandwidth ?? false,\n        recordRouteUsage: options.recordRouteUsage ?? category !== \"infra\",\n    };\n}\nexport function classifyPlatformRequestPath(path) {\n    const normalized = normalizePath(path);\n    const infra = infraPattern(normalized);\n    if (infra)\n        return classification(\"infra\", infra);\n    if (normalized === \"/api/query\") {\n        return classification(\"rpc_query\", \"/api/query\", {\n            meterApiCall: true,\n            meterFunctionMs: true,\n            meterBandwidth: true,\n        });\n    }\n    if (normalized === \"/api/mutation\") {\n        return classification(\"rpc_mutation\", \"/api/mutation\", {\n            meterApiCall: true,\n            meterFunctionMs: true,\n            meterBandwidth: true,\n        });\n    }\n    if (normalized === \"/api/storage\" || normalized.startsWith(\"/api/storage/\")) {\n        return classification(\"hosted_storage\", \"/api/storage/:id\", { meterBandwidth: true });\n    }\n    if (normalized === \"/platform/ai\" || normalized.startsWith(\"/platform/ai/\")) {\n        return classification(\"platform_ai_proxy\", \"/platform/ai/:path*\");\n    }\n    if (normalized.startsWith(\"/api/\")) {\n        return classification(\"custom_http_action\", sanitizeRoutePattern(normalized), {\n            meterApiCall: true,\n            meterFunctionMs: true,\n            meterBandwidth: true,\n        });\n    }\n    return classification(\"app_route\", sanitizeRoutePattern(normalized), {\n        meterApiCall: true,\n        meterFunctionMs: true,\n        meterBandwidth: true,\n    });\n}\nexport function shouldMeterPlatformRequestPath(path) {\n    return shouldEnforcePlatformSpendCap(classifyPlatformRequestPath(path));\n}\nexport function shouldProcessPlatformRequestClassification(classification) {\n    return (classification.meterApiCall ||\n        classification.meterFunctionMs ||\n        classification.meterBandwidth ||\n        classification.recordRouteUsage);\n}\nexport function shouldEnforcePlatformSpendCap(classification) {\n    return classification.meterApiCall || classification.meterFunctionMs || classification.meterBandwidth;\n}\nexport function readBackendRequestMaxBillableMs(env = process.env) {\n    const value = Number(env.GENCOW_BACKEND_REQUEST_MAX_BILLABLE_MS);\n    return Number.isFinite(value) && value > 0 ? Math.floor(value) : DEFAULT_BACKEND_REQUEST_MAX_BILLABLE_MS;\n}\nexport function calculateBackendRequestBillableMs(durationMs, maxBillableMs) {\n    if (!Number.isFinite(durationMs) || durationMs <= 0)\n        return 0;\n    return Math.min(Math.floor(durationMs), Math.max(0, Math.floor(maxBillableMs)));\n}\nexport function backendStatusClass(status) {\n    if (!Number.isFinite(status))\n        return \"unknown\";\n    const normalized = Math.floor(Number(status));\n    if (normalized < 100 || normalized > 599)\n        return \"unknown\";\n    return `${Math.floor(normalized / 100)}xx`;\n}\nexport async function checkPlatformSpendCapForRequest(params) {\n    const nowMs = params.nowMs ?? Date.now();\n    if (params.cache.expiresAtMs > nowMs) {\n        return { allowed: params.cache.allowed, remaining: params.cache.remaining };\n    }\n    if (!params.internalToken) {\n        return { allowed: true };\n    }\n    const logger = params.logger ?? console;\n    try {\n        const response = await params.fetchPlatformInternal(\"/internal/spend-cap\", {\n            method: \"GET\",\n            headers: {\n                \"X-Internal-Token\": params.internalToken,\n                ...(params.appDbId ? { \"X-Gencow-App-Id\": String(params.appDbId) } : {}),\n                ...(params.appName ? { \"X-Gencow-App-Name\": params.appName } : {}),\n            },\n        }, \"spend-cap-check\");\n        if (!response.ok) {\n            logger.warn(`[metering] spend-cap check failed: ${response.status}`);\n            return { allowed: true };\n        }\n        const body = (await response.json());\n        const allowed = body.allowed !== false;\n        params.cache.allowed = allowed;\n        params.cache.remaining = Number.isFinite(body.remaining) ? Number(body.remaining) : undefined;\n        params.cache.expiresAtMs = nowMs + (allowed ? 5_000 : 30_000);\n        return { allowed, remaining: params.cache.remaining };\n    }\n    catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        logger.warn(`[metering] spend-cap check error: ${message}`);\n        return { allowed: true };\n    }\n}\n", "function readContentLength(response) {\n    const raw = response.headers.get(\"content-length\");\n    if (!raw || !/^\\d+$/.test(raw))\n        return null;\n    const parsed = Number(raw);\n    return Number.isSafeInteger(parsed) ? parsed : null;\n}\nfunction chunkByteLength(chunk) {\n    if (typeof chunk === \"string\")\n        return new TextEncoder().encode(chunk).byteLength;\n    if (chunk instanceof ArrayBuffer)\n        return chunk.byteLength;\n    if (ArrayBuffer.isView(chunk))\n        return chunk.byteLength;\n    if (chunk instanceof Blob)\n        return chunk.size;\n    return 0;\n}\nexport function meterResponseBandwidth(response, recordBytes) {\n    const contentLength = readContentLength(response);\n    if (contentLength !== null) {\n        if (contentLength > 0)\n            recordBytes(contentLength);\n        return response;\n    }\n    if (!response.body)\n        return response;\n    let totalBytes = 0;\n    const meteredBody = response.body.pipeThrough(new TransformStream({\n        transform(chunk, controller) {\n            totalBytes += chunkByteLength(chunk);\n            controller.enqueue(chunk);\n        },\n        flush() {\n            if (totalBytes > 0)\n                recordBytes(totalBytes);\n        },\n    }));\n    return new Response(meteredBody, {\n        status: response.status,\n        statusText: response.statusText,\n        headers: response.headers,\n    });\n}\n"],
  "mappings": "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AE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MACzH,EAAE,iBAAiB,YAAY,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU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AAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC5H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;A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,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EA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MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC1H,EAAE,iBAAiB,eAAe,eAAe,MAAM,eAAe,MAAM,eAAe,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Ae,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,SAAS,eAAe,OAAO;AAAA,MAC3H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAAe,MAAM,eAAe,UAAU,eAAe,QAAQ;AAAA,MAC7H,EAAE,iBAAiB,eAAe,eAAe,OAAO,eAA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AAA;AAAA,MAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA;AAAA;AA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",
  "names": ["result", "env", "createHash", "query", "record", "createHmac", "randomBytes", "timingSafeEqual", "normalizeForStableJson", "isEmptyPlainObject", "encodeBase64Url", "decodeBase64Url", "signSegment", "safeEqual", "resolveTtlMs", "DEFAULT_TTL_SECONDS", "MAX_TTL_SECONDS", "randomNonce", "validateRequiredString", "MAX_TOKEN_LENGTH", "channelKey", "randomUUID", "user", "query", "result", "def", "raw", "required", "config", "parse", "result", "result", "output", "createHmac", "randomBytes", "timingSafeEqual", "encodeBase64Url", "signSegment", "validateRequiredString", "resolveTtlMs", "DEFAULT_TTL_SECONDS", "MAX_TTL_SECONDS", "randomNonce", "record", "error", "env", "raw", "date", "result", "error", "env", "sql", "json", "env", "config", "errorCode", "sql", "result", "error", "workflow", "sql", "error", "raw", "match", "duration", "isMissingWorkflowV2SchemaError", "rows", "result", "numberFrom", "error", "resolve", "createHash", "sql", "sql", "sql", "pairs", "session", "result", "c", "v", "rest", "getTableName", "and", "eq", "gt", "gte", "ilike", "inArray", "like", "lt", "lte", "ne", "notInArray", "or", "getTableName", "getTableColumns", "getTableConfig", "getTableConfig", "sql", "eq", "desc", "asc", "ilike", "or", "and", "drizzleCount", "getTableName", "getTableColumns", "existsSync", "join", "resolve", "ALLOWED_NODE_MODULES", "FORBIDDEN_MODULES", "existsSync", "readdirSync", "readFileSync", "dirname", "join", "relative", "resolve", "findSourceFiles", "match", "basename", "dirname", "join", "resolve", "existsSync", "readFileSync", "path", "file", "findSourceFiles", "match", "result", "isAbsolute", "resolve", "path", "result", "results", "artifacts", "artifactPaths", "values", "version", "result", "error", "record", "basename", "relative", "resolve", "readFileSync", "issue", "file", "findSourceFiles", "isSeedFile", "UNSAFE_PATTERNS", "maskComments", "findPublicOperationRanges", "range", "hasCompleteAllowComment", "maskCommentsAndStrings", "match", "findMatchingParen", "lineNumberAt", "start", "ALLOW_COMMENT", "SYSTEM_TABLE_PATTERN", "config", "issue", "existsSync", "readFileSync", "basename", "relative", "resolve", "ALLOWED_NODE_MODULES", "FORBIDDEN_MODULES", "result", "match", "file", "findSourceFiles", "issue", "WORKFLOW_SHADOW_FILENAMES", "WORKFLOW_SHADOW_RUNTIME_MARKERS", "WORKFLOW_RELATIVE_IMPORT_PATTERN", "log", "readFileSync", "findSourceFiles", "result", "registry", "query", "mutation", "env", "error", "record", "logger", "result", "_", "reject", "elapsedMs", "sql", "rowsFromResult", "result", "error", "errorCode", "module", "setVerbosityLevel", "level", "Number", "isInteger", "verbosity", "getVerbosityLevel", "info", "msg", "VerbosityLevel", "INFOS", "console", "warn", "WARNINGS", "unreachable", "Error", "assert", "cond", "_isValidProtocol", "url", "protocol", "createValidAbsoluteUrl", "baseUrl", "options", "addDefaultProtocol", "startsWith", "dots", "match", "length", "tryConvertEncoding", "stringToUTF8String", "absoluteUrl", "URL", "parse", "updateUrlHash", "hash", "allowRel", "res", "href", "split", "shadow", "obj", "prop", "value", "nonSerializable", "Object", "defineProperty", "enumerable", "configurable", "writable", "bytesToString", "bytes", "undefined", "MAX_ARGUMENT_COUNT", "String", "fromCharCode", "apply", "strBuf", "i", "chunkEnd", "Math", "min", "chunk", "subarray", "push", "join", "stringToBytes", "str", "Uint8Array", "charCodeAt", "string32", "isLittleEndian", "buffer8", "view32", "Uint32Array", "buffer", "isEvalSupported", "Function", "decodeURIComponent", "escape", "normalizeUnicode", "NormalizeRegex", "NormalizationMap", "Map", "replaceAll", "_", "p1", "p2", "normalize", "get", "getUuid", "crypto", "randomUUID", "buf", "getRandomValues", "_isValidExplicitDest", "validRef", "validName", "dest", "Array", "isArray", "page", "zoom", "args", "argsLen", "allowNull", "name", "arg", "MathClamp", "v", "max", "toBase64Util", "arr", "prototype", "toBase64", "btoa", "fromBase64Util", "fromBase64", "atob", "fetchData", "type", "isValidFetchUrl", "document", "baseURI", "response", "fetch", "ok", "statusText", "arrayBuffer", "blob", "json", "text", "Promise", "resolve", "reject", "request", "XMLHttpRequest", "open", "responseType", "onreadystatechange", "readyState", "DONE", "status", "responseText", "send", "isDataScheme", "ii", "trim", "substring", "toLowerCase", "isPdfFile", "filename", "test", "getFilenameFromUrl", "lastIndexOf", "getPdfFilenameFromUrl", "defaultFilename", "getURL", "urlString", "newURL", "decode", "decoded", "includes", "at", "pdfRegex", "pathname", "searchParams", "size", "values", "from", "reverse", "keys", "key", "reFilename", "hashFilename", "exec", "noContextMenu", "e", "preventDefault", "stopEvent", "stopPropagation", "deprecated", "details", "log", "getXfaPageViewport", "xfaPage", "scale", "rotation", "width", "height", "attributes", "style", "viewBox", "parseInt", "PageViewport", "userUnit", "getRGB", "color", "colorRGB", "slice", "map", "x", "getColorValues", "colors", "span", "createElement", "visibility", "colorScheme", "body", "append", "computedColor", "window", "getComputedStyle", "set", "remove", "getCurrentTransform", "ctx", "a", "b", "c", "d", "f", "getTransform", "getCurrentTransformInverse", "invertSelf", "setLayerDimensions", "div", "viewport", "mustFlip", "mustRotate", "pageWidth", "pageHeight", "rawDims", "useRound", "FeatureTest", "isCSSRoundSupported", "w", "h", "widthStr", "heightStr", "setAttribute", "applyOpacity", "r", "g", "opacity", "white", "round", "RGBToHSL", "rgb", "output", "l", "HSLToRGB", "hsl", "s", "abs", "m", "floor", "computeLuminance", "contrastRatio", "hsl1", "hsl2", "lum1", "lum2", "findContrastColor", "baseColor", "fixedColor", "cachedValue", "contrastCache", "array", "Float32Array", "baseHSL", "fixedHSL", "isFixedColorDark", "minContrast", "sqrt", "start", "end", "PRECISION", "mid", "Util", "makeHexColor", "renderRichText", "html", "dir", "className", "container", "fragment", "createDocumentFragment", "p", "lines", "line", "createTextNode", "XfaLayer", "render", "xfaHtml", "intent", "firstChild", "classList", "add", "bindEvents", "element", "names", "addEventListener", "bind", "getUrlProp", "val", "isNodeJS", "location", "getDataProp", "Buffer", "byteLength", "ArrayBuffer", "isView", "isNaN", "getFactoryUrlProp", "endsWith", "onFn", "wrapReason", "ex", "AbortException", "InvalidPDFException", "PasswordException", "ResponseException", "UnknownErrorException", "message", "code", "missing", "toString", "fs", "process", "getBuiltinModule", "data", "promises", "readFile", "expandBBox", "index", "minX", "minY", "maxX", "maxY", "applyBoundingBox", "bbox", "region", "Path2D", "rect", "clip", "drawTriangle", "context", "p3", "c1", "c2", "c3", "coords", "rowSize", "tmp", "x1", "offsetX", "scaleX", "y1", "offsetY", "scaleY", "x2", "y2", "x3", "y3", "c1r", "c1g", "c1b", "c2r", "c2g", "c2b", "c3r", "c3g", "c3b", "xa", "car", "cag", "cab", "xb", "cbr", "cbg", "cbb", "y", "k", "x1_", "x2_", "j", "drawFigure", "figure", "ps", "cs", "verticesPerRow", "rows", "cols", "q", "getShadingPattern", "IR", "RadialAxialShadingPattern", "MeshShadingPattern", "DummyShadingPattern", "convertBlackAndWhiteToRGBA", "src", "srcPos", "nonBlackColor", "inverseDecode", "black", "zeroMapping", "oneMapping", "widthInSource", "widthRemainder", "srcLength", "destPos", "elem", "mirrorContextOperations", "destCtx", "_removeMirroring", "__originalSave", "save", "__originalRestore", "restore", "__originalRotate", "rotate", "__originalScale", "__originalTranslate", "translate", "__originalTransform", "transform", "__originalSetTransform", "setTransform", "__originalResetTransform", "resetTransform", "__originalClip", "__originalMoveTo", "moveTo", "__originalLineTo", "lineTo", "__originalBezierCurveTo", "bezierCurveTo", "__originalRect", "__originalClosePath", "closePath", "__originalBeginPath", "beginPath", "angle", "rule", "cp1x", "cp1y", "cp2x", "cp2y", "drawImageAtIntegerCoords", "srcImg", "srcX", "srcY", "srcW", "srcH", "destX", "destY", "destW", "destH", "tx", "ty", "tlX", "rTlX", "tlY", "rTlY", "brX", "rWidth", "brY", "rHeight", "sign", "drawImage", "hypot", "putBinaryImageData", "imgData", "ImageData", "putImageData", "partialChunkHeight", "FULL_CHUNK_HEIGHT", "fullChunks", "totalChunks", "chunkImgData", "createImageData", "thisChunkHeight", "elemsInThisChunk", "kind", "ImageKind", "GRAYSCALE_1BPP", "dest32", "dest32DataLength", "fullSrcDiff", "srcDiff", "kEnd", "kEndUnrolled", "mask", "srcByte", "RGBA_32BPP", "RGB_24BPP", "putBinaryImageMask", "bitmap", "copyCtxState", "sourceCtx", "properties", "property", "setLineDash", "getLineDash", "lineDashOffset", "resetCtxToDefault", "strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter", "getImageSmoothingEnabled", "interpolate", "singularValueDecompose2dScale", "XY", "actualScale", "fround", "OutputScale", "pixelRatio", "PixelsPerInch", "PDF_TO_CSS_UNITS", "getFilenameFromContentDispositionHeader", "contentDisposition", "needsEncodingFixup", "toParamRegExp", "rfc2616unquote", "unescape", "rfc5987decode", "rfc2047decode", "fixupEncoding", "rfc2231getparam", "attributePattern", "flags", "RegExp", "textdecode", "encoding", "decoder", "TextDecoder", "fatal", "contentDispositionStr", "matches", "iter", "n", "quot", "part", "parts", "quotindex", "indexOf", "extvalue", "encodingend", "langvalue", "replace", "charset", "hex", "createHeaders", "isHttp", "httpHeaders", "headers", "Headers", "getResponseOrigin", "origin", "validateRangeRequestCapabilities", "responseHeaders", "rangeChunkSize", "disableRange", "returnValues", "allowRangeRequests", "suggestedLength", "contentEncoding", "extractFilenameFromHeader", "createResponseError", "validateResponseStatus", "createFetchOptions", "withCredentials", "abortController", "method", "signal", "mode", "credentials", "redirect", "getArrayBuffer", "xhr", "parseUrlOrPath", "sourceUrl", "urlRegex", "pathToFileURL", "getDocument", "task", "PDFDocumentLoadingTask", "docId", "password", "rangeTransport", "range", "PDFDataRangeTransport", "worker", "PDFWorker", "docBaseUrl", "cMapUrl", "cMapPacked", "CMapReaderFactory", "NodeCMapReaderFactory", "DOMCMapReaderFactory", "iccUrl", "standardFontDataUrl", "StandardFontDataFactory", "NodeStandardFontDataFactory", "DOMStandardFontDataFactory", "wasmUrl", "WasmFactory", "NodeWasmFactory", "DOMWasmFactory", "ignoreErrors", "stopAtErrors", "maxImageSize", "isOffscreenCanvasSupported", "isImageDecoderSupported", "platform", "isFirefox", "globalThis", "chrome", "canvasMaxAreaInBytes", "disableFontFace", "fontExtraProperties", "enableXfa", "ownerDocument", "disableStream", "disableAutoFetch", "pdfBug", "CanvasFactory", "NodeCanvasFactory", "DOMCanvasFactory", "FilterFactory", "NodeFilterFactory", "DOMFilterFactory", "enableHWA", "useWasm", "NaN", "useSystemFonts", "useWorkerFetch", "styleElement", "transportFactory", "canvasFactory", "filterFactory", "cMapReaderFactory", "isCompressed", "standardFontDataFactory", "wasmFactory", "create", "port", "GlobalWorkerOptions", "workerPort", "_worker", "docParams", "apiVersion", "evaluatorOptions", "transportParams", "loadingParams", "promise", "then", "destroyed", "workerIdPromise", "messageHandler", "sendWithPromise", "networkStream", "PDFDataTransportStream", "NetworkStream", "PDFFetchStream", "PDFNodeStream", "PDFNetworkStream", "workerId", "MessageHandler", "transport", "WorkerTransport", "_transport", "catch", "_capability", "makeColorComp", "padStart", "scaleAndClamp", "FONT_IDENTITY_MATRIX", "LINE_FACTOR", "LINE_DESCENT_FACTOR", "BASELINE_FACTOR", "RenderingIntentFlag", "AnnotationMode", "AnnotationEditorPrefix", "AnnotationEditorType", "AnnotationEditorParamsType", "PermissionFlag", "TextRenderingMode", "AnnotationType", "AnnotationBorderStyleType", "OPS", "DrawOPS", "PasswordResponses", "BaseException", "FormatError", "hexNumbers", "AnnotationPrefix", "XfaText", "SVG_NS", "RenderingCancelledException", "StatTimer", "PDFDateString", "SupportedImageMimeTypes", "ColorScheme", "CSSConstants", "EditorToolbar", "FloatingToolbar", "IdManager", "ImageManager", "CommandManager", "KeyboardManager", "ColorManager", "AnnotationEditorUIManager", "AltText", "Comment", "TouchManager", "AnnotationEditor", "FakeEditor", "SEED", "MASK_HIGH", "MASK_LOW", "MurmurHash3_64", "SerializableEmpty", "AnnotationStorage", "PrintAnnotationStorage", "FontLoader", "FontFaceObject", "isRefProxy", "isNameProxy", "isValidExplicitDest", "LoopbackPort", "CallbackKind", "StreamKind", "BaseCanvasFactory", "BaseCMapReaderFactory", "BaseFilterFactory", "BaseStandardFontDataFactory", "BaseWasmFactory", "FORCED_DEPENDENCY_LABEL", "ceil", "EMPTY_BBOX", "BBoxReader", "ensureDebugMetadata", "CanvasDependencyTracker", "CanvasNestedDependencyTracker", "Dependencies", "PathType", "BaseShadingPattern", "PaintType", "TilingPattern", "MIN_FONT_SIZE", "MAX_FONT_SIZE", "EXECUTION_TIME", "EXECUTION_STEPS", "SCALE_MATRIX", "MIN_MAX_INIT", "CachedCanvases", "CanvasExtraState", "LINE_CAP_STYLES", "LINE_JOIN_STYLES", "NORMAL_CLIP", "EO_CLIP", "CanvasGraphics", "CssFontInfo", "SystemFontInfo", "FontInfo", "Metadata", "INTERNAL", "OptionalContentGroup", "OptionalContentConfig", "PDFDataTransportStreamReader", "PDFDataTransportStreamRangeReader", "PDFFetchStreamReader", "PDFFetchStreamRangeReader", "OK_RESPONSE", "PARTIAL_CONTENT_RESPONSE", "NetworkManager", "PDFNetworkStreamFullRequestReader", "PDFNetworkStreamRangeRequestReader", "PDFNodeStreamFsFullReader", "PDFNodeStreamFsRangeReader", "INITIAL_DATA", "PDFObjects", "MAX_TEXT_DIVS_TO_RENDER", "DEFAULT_FONT_SIZE", "TextLayer", "RENDERING_CANCELLED_TIMEOUT", "PDFDocumentProxy", "PDFPageProxy", "RenderTask", "InternalRenderTask", "version", "build", "ColorPicker", "BasicColorPicker", "ColorConverters", "BaseSVGFactory", "DOMSVGFactory", "GetElementsByNameSet", "TIMEZONE_OFFSET", "AnnotationElementFactory", "AnnotationElement", "EditorAnnotationElement", "LinkAnnotationElement", "TextAnnotationElement", "WidgetAnnotationElement", "TextWidgetAnnotationElement", "SignatureWidgetAnnotationElement", "CheckboxWidgetAnnotationElement", "RadioButtonWidgetAnnotationElement", "PushButtonWidgetAnnotationElement", "ChoiceWidgetAnnotationElement", "PopupAnnotationElement", "PopupElement", "FreeTextAnnotationElement", "LineAnnotationElement", "SquareAnnotationElement", "CircleAnnotationElement", "PolylineAnnotationElement", "PolygonAnnotationElement", "CaretAnnotationElement", "InkAnnotationElement", "HighlightAnnotationElement", "UnderlineAnnotationElement", "SquigglyAnnotationElement", "StrikeOutAnnotationElement", "StampAnnotationElement", "FileAttachmentAnnotationElement", "AnnotationLayer", "EOL_PATTERN", "FreeTextEditor", "Outline", "FreeDrawOutliner", "FreeDrawOutline", "HighlightOutliner", "HighlightOutline", "FreeHighlightOutliner", "FreeHighlightOutline", "HighlightEditor", "DrawingOptions", "DrawingEditor", "InkDrawOutliner", "InkDrawOutline", "InkDrawingOptions", "InkEditor", "ContourDrawOutline", "BASE_HEADER_LENGTH", "POINTS_PROPERTIES_NUMBER", "SignatureExtractor", "SignatureOptions", "DrawnSignatureOptions", "SignatureEditor", "StampEditor", "AnnotationEditorLayer", "DrawLayer", "__webpack_require__", "find", "error", "record", "result", "every", "isObject", "TypeError", "WeakMap", "has", "number", "structuredClone", "clone", "union", "object", "SyntaxError", "string", "activeXDocument", "required", "navigator", "DataView", "some", "exports", "symbol", "Iterator", "check", "Int8Array", "Uint8ClampedArray", "isTypedArray", "error2", "TypedArray", "Set", "DOMException", "constant", "integer", "intersection", "Symbol", "JSON", "Context", "root", "Node", "hasOwnProperty", "Deno", "versions", "nw", "electron", "ANY", "DISPLAY", "PRINT", "SAVE", "ANNOTATIONS_FORMS", "ANNOTATIONS_STORAGE", "ANNOTATIONS_DISABLE", "IS_EDITING", "OPLIST", "DISABLE", "ENABLE", "ENABLE_FORMS", "ENABLE_STORAGE", "NONE", "FREETEXT", "HIGHLIGHT", "STAMP", "INK", "POPUP", "SIGNATURE", "COMMENT", "RESIZE", "CREATE", "FREETEXT_SIZE", "FREETEXT_COLOR", "FREETEXT_OPACITY", "INK_COLOR", "INK_THICKNESS", "INK_OPACITY", "HIGHLIGHT_COLOR", "HIGHLIGHT_THICKNESS", "HIGHLIGHT_FREE", "HIGHLIGHT_SHOW_ALL", "DRAW_STEP", "MODIFY_CONTENTS", "COPY", "MODIFY_ANNOTATIONS", "FILL_INTERACTIVE_FORMS", "COPY_FOR_ACCESSIBILITY", "ASSEMBLE", "PRINT_HIGH_QUALITY", "FILL", "STROKE", "FILL_STROKE", "INVISIBLE", "FILL_ADD_TO_PATH", "STROKE_ADD_TO_PATH", "FILL_STROKE_ADD_TO_PATH", "ADD_TO_PATH", "FILL_STROKE_MASK", "ADD_TO_PATH_FLAG", "TEXT", "LINK", "LINE", "SQUARE", "CIRCLE", "POLYGON", "POLYLINE", "UNDERLINE", "SQUIGGLY", "STRIKEOUT", "CARET", "FILEATTACHMENT", "SOUND", "MOVIE", "WIDGET", "SCREEN", "PRINTERMARK", "TRAPNET", "WATERMARK", "THREED", "REDACT", "SOLID", "DASHED", "BEVELED", "INSET", "ERRORS", "dependency", "setLineWidth", "setLineCap", "setLineJoin", "setMiterLimit", "setDash", "setRenderingIntent", "setFlatness", "setGState", "curveTo", "curveTo2", "curveTo3", "rectangle", "stroke", "closeStroke", "fill", "eoFill", "fillStroke", "eoFillStroke", "closeFillStroke", "closeEOFillStroke", "endPath", "eoClip", "beginText", "endText", "setCharSpacing", "setWordSpacing", "setHScale", "setLeading", "setFont", "setTextRenderingMode", "setTextRise", "moveText", "setLeadingMoveText", "setTextMatrix", "nextLine", "showText", "showSpacedText", "nextLineShowText", "nextLineSetSpacingShowText", "setCharWidth", "setCharWidthAndBounds", "setStrokeColorSpace", "setFillColorSpace", "setStrokeColor", "setStrokeColorN", "setFillColor", "setFillColorN", "setStrokeGray", "setFillGray", "setStrokeRGBColor", "setFillRGBColor", "setStrokeCMYKColor", "setFillCMYKColor", "shadingFill", "beginInlineImage", "beginImageData", "endInlineImage", "paintXObject", "markPoint", "markPointProps", "beginMarkedContent", "beginMarkedContentProps", "endMarkedContent", "beginCompat", "endCompat", "paintFormXObjectBegin", "paintFormXObjectEnd", "beginGroup", "endGroup", "beginAnnotation", "endAnnotation", "paintImageMaskXObject", "paintImageMaskXObjectGroup", "paintImageXObject", "paintInlineImageXObject", "paintInlineImageXObjectGroup", "paintImageXObjectRepeat", "paintImageMaskXObjectRepeat", "paintSolidColorImageMask", "constructPath", "setStrokeTransparent", "setFillTransparent", "rawFillPath", "NEED_PASSWORD", "INCORRECT_PASSWORD", "BaseExceptionClosure", "constructor", "OffscreenCanvas", "ImageDecoder", "userAgent", "isAndroid", "isLinux", "isMac", "isWindows", "CSS", "supports", "domMatrixToTransform", "dm", "scaleMinMax", "minMax", "temp", "m1", "m2", "multiplyByDOMMatrix", "md", "applyTransform", "pos", "p0", "applyTransformToBezier", "m0", "m3", "m4", "m5", "pI", "pI1", "applyInverseTransform", "axialAlignedBoundingBox", "r0", "r1", "r2", "r3", "a0", "a2", "a1", "a3", "b0", "b2", "b1", "b3", "m1r0", "m1r2", "m2r1", "m2r3", "inverseTransform", "matrix", "first", "second", "normalizeRect", "intersect", "rect1", "rect2", "xLow", "xHigh", "yLow", "yHigh", "pointBoundingBox", "rectBoundingBox", "x0", "y0", "t", "mt", "tt", "ttt", "delta", "sqrtDelta", "bezierBoundingBox", "sumPrecise", "numbers", "reduce", "AbortSignal", "any", "iterable", "ac", "AbortController", "aborted", "abort", "reason", "textContent", "xfa", "items", "styles", "walk", "node", "shouldBuildText", "children", "child", "setupStorage", "id", "storage", "storedData", "getValue", "event", "setValue", "target", "xfaOn", "xfaOff", "removeAttribute", "checked", "getAttribute", "option", "selected", "selectedIndex", "setAttributes", "linkService", "isHTMLAnchorElement", "HTMLAnchorElement", "entries", "assign", "addLinkAttributes", "newWindow", "dataId", "parameters", "annotationStorage", "rootHtml", "isNotForRichText", "rootDiv", "textDivs", "stack", "parent", "pop", "childHtml", "xmlns", "createElementNS", "el", "querySelectorAll", "update", "hidden", "PDF", "dontFlip", "centerX", "centerY", "rotateA", "rotateB", "rotateC", "rotateD", "offsetCanvasX", "offsetCanvasY", "dims", "pageX", "pageY", "convertToViewportPoint", "convertToViewportRectangle", "topLeft", "bottomRight", "convertToPdfPoint", "extraDelay", "started", "times", "time", "Date", "now", "timeEnd", "outBuf", "longest", "padEnd", "toDateObject", "input", "year", "month", "day", "hour", "minute", "universalTimeRelation", "offsetHour", "offsetMinute", "UTC", "sx", "sy", "scaled", "symmetric", "limitCanvas", "maxPixels", "maxDim", "capAreaFactor", "maxAreaScale", "Infinity", "maxWidthScale", "maxHeightScale", "capPixels", "maxScale", "devicePixelRatio", "winPixels", "screen", "availWidth", "availHeight", "isDarkMode", "matchMedia", "commentForegroundColor", "display", "editor", "freeze", "freetext", "highlight", "ink", "stamp", "signature", "editToolbar", "_uiManager", "_signal", "buttons", "position", "toolbarPosition", "direction", "insetInlineEnd", "top", "_focusEventsAllowed", "capture", "hide", "hideDropdown", "show", "shown", "addDeleteButton", "editorType", "button", "tabIndex", "delete", "divider", "addAltText", "altText", "addComment", "comment", "beforeElement", "renderForToolbar", "insertBefore", "toolbar", "addColorPicker", "colorPicker", "renderButton", "addEditSignatureButton", "signatureManager", "renderEditButton", "removeButton", "removeToolbarCommentButton", "addButton", "tool", "addButtonBefore", "beforeSelector", "querySelector", "updateEditSignatureButton", "description", "title", "destroy", "uiManager", "hasCommentManager", "commentSelection", "highlightSelection", "boxes", "isLTR", "lastY", "lastX", "box", "buttonClass", "l10nId", "labelL10nId", "clickHandler", "_isSVGFittingCanvas", "svg", "canvas", "getContext", "willReadFrequently", "image", "Image", "getImageData", "rawData", "refCounter", "isSvg", "File", "file", "Blob", "mustRemoveAspectRatioPromise", "fileReader", "FileReader", "imageElement", "imagePromise", "onload", "svgUrl", "onerror", "readAsDataURL", "createImageBitmap", "getFromFile", "lastModified", "getFromUrl", "getFromBlob", "blobPromise", "getFromId", "getFromCanvas", "offscreen", "transferToImageBitmap", "getSvgUrl", "deleteId", "transferFromImageBitmap", "convertToBlob", "close", "isValidId", "maxSize", "cmd", "undo", "post", "mustExec", "overwriteIfSameType", "keepUndo", "next", "splice", "redo", "hasSomethingToUndo", "hasSomethingToRedo", "cleanType", "callbacks", "allKeys", "callback", "isMacKey", "altKey", "ctrlKey", "metaKey", "shiftKey", "self", "bubbles", "checker", "_colorsMapping", "_colors", "convert", "RGB", "getHexCode", "_editorUndoBar", "isEditing", "isEmpty", "hasSelectedEditor", "hasSelectedText", "TRANSLATE_SMALL", "TRANSLATE_BIG", "_keyboardManager", "proto", "arrowChecker", "contains", "activeElement", "tagName", "hasSomethingToControl", "textInputChecker", "_self", "HTMLInputElement", "small", "big", "selectAll", "addNewEditorFromKeyboard", "HTMLButtonElement", "isEnterHandled", "unselectAll", "translateSelectedEditors", "viewer", "viewerAlert", "altTextManager", "commentManager", "eventBus", "pdfDocument", "pageColors", "highlightColors", "enableHighlightFloatingButton", "enableUpdatedAddImage", "enableNewAltTextWhenAddingImage", "mlManager", "editorUndoBar", "supportsPinchToZoom", "_eventBus", "_on", "onEditingAction", "onPageChanging", "onScaleChanging", "onRotationChanging", "onSetPreference", "evt", "updateParams", "viewParameters", "realScale", "isShiftKeyDown", "_supportsPinchToZoom", "setSidebarUiManager", "layer", "clear", "clearTimeout", "combinedSignal", "useNewAltTextFlow", "useNewAltTextWhenAddingImage", "hcmFilter", "addHCMFilter", "foreground", "background", "_highlightColors", "pair", "toUpperCase", "hasHCM", "isNameForHCM", "highlightColorNames", "getNonHCMColor", "colorName", "getNonHCMColorName", "setCurrentDrawingSession", "disableUserSelect", "setMainHighlightColorPicker", "editAltText", "firstTime", "editComment", "posX", "posY", "showDialog", "selectComment", "pageIndex", "uid", "getEditorByUID", "toggleComment", "updateComment", "getData", "updatePopupColor", "removeComment", "removeComments", "isSelected", "toggleCommentPopup", "makeCommentColor", "getCommentDialogElement", "dialogElement", "waitForEditorsRendered", "pageNumber", "withResolvers", "onEditorsRendered", "_off", "on", "getSignature", "switchToMode", "once", "dispatch", "source", "setPreference", "focusMainContainer", "focus", "findParent", "layerX", "layerY", "getBoundingClientRect", "toggle", "addShouldRescale", "removeShouldRescale", "commitOrRemove", "pagesRotation", "anchorNode", "nodeType", "TEXT_NODE", "parentElement", "textLayer", "currentLayer", "hasTextLayer", "methodOfCreation", "selection", "getSelection", "isCollapsed", "anchorOffset", "focusNode", "focusOffset", "anchorElement", "closest", "getSelectionBoxes", "empty", "isNoneMode", "createAndAddNewEditor", "showAllEditors", "getAndRemoveDataFromAnnotationStorage", "annotationId", "storedValue", "getRawValue", "addToAnnotationStorage", "a11yAlert", "messageId", "stringify", "activeLayer", "toggleDrawing", "pointerup", "blur", "hasSelection", "lastEditor", "lastActiveElement", "keydown", "keyup", "copy", "cut", "paste", "dragOver", "drop", "addEditListeners", "removeEditListeners", "dataTransfer", "isHandlingMimeForPasting", "dropEffect", "item", "editors", "serialized", "serialize", "clipboardData", "setData", "newEditors", "deserializedEditor", "deserialize", "addCommands", "isEditorHandlingKeyboard", "hasChanged", "setEditingState", "registerEditorTypes", "types", "defaultPropertiesToUpdate", "getId", "getLayer", "currentPageIndex", "addLayer", "enable", "disable", "removeLayer", "updateMode", "editId", "isFromKeyboard", "mustEnterInEditMode", "hideSidebar", "destroyPopup", "hideStandaloneCommentButton", "addStandaloneCommentButton", "loadSignatures", "getAnnotationsByType", "editorClass", "_editorType", "elementIds", "allComments", "annotationElementId", "hasComment", "deleted", "annotation", "popupRef", "contentsObj", "showSidebar", "setSelected", "enterInEditMode", "unselect", "canCreateNewEmptyEditor", "addNewEditor", "updateToolbar", "action", "updateDefaultParams", "visible", "updateButton", "state", "enableWaiting", "mustWait", "disableClick", "enableClick", "all", "getEditors", "getEditor", "addEditor", "removeEditor", "setTimeout", "addDeletedAnnotationElement", "addChangedExistingAnnotation", "isDeletedAnnotationElement", "removeDeletedAnnotationElement", "removeChangedExistingAnnotation", "addOrRebuild", "setActiveEditor", "propertiesToUpdate", "ed", "updateUI", "updateUIForDefaultProperties", "toggleSelected", "select", "firstSelectedEditor", "params", "cleanUndoStack", "drawingEditor", "endDrawingSession", "commit", "noCommit", "totalX", "totalY", "TIME_TO_WAIT", "translateInPage", "translationDone", "setUpDragSession", "savedX", "savedY", "savedPageIndex", "newX", "newY", "newPageIndex", "endDragSession", "mustBeAddedInUndoStack", "move", "_setParentAndPosition", "dragSelectedEditors", "drag", "rebuild", "changeParent", "getActive", "shouldGetKeyboardEvents", "isActive", "getMode", "isEditingMode", "imageManager", "rangeCount", "getRangeAt", "commonAncestorContainer", "parentWidth", "parentHeight", "rotator", "collapsed", "getClientRects", "renderAnnotationElement", "editorId", "hasBeenModified", "setMissingCanvas", "setCanvas", "addMissingCanvas", "_l10n", "added", "review", "initialize", "l10n", "label", "onClick", "_reportTelemetry", "guessedText", "finish", "focusVisible", "hasData", "setGuessedText", "generatedAltText", "toggleAltTextBadge", "badge", "isForCopying", "decorative", "textWithDisclaimer", "cancel", "enabled", "disabled", "tooltip", "DELAY_TO_SHOW_TOOLTIP", "parentNode", "getElementForAltText", "renderForStandalone", "commentButtonPosition", "commentButtonColor", "backgroundColor", "focusButton", "onUpdatedColor", "commentButtonWidth", "boundingClientRect", "commentPopupPositionInLayer", "parentX", "parentY", "hasDefaultPopupPosition", "removeStandaloneCommentButton", "setCommentButtonStates", "hasPopup", "ariaExpanded", "isStandalone", "ariaHasPopup", "ariaControls", "ariaControlsElements", "edit", "parentDimensions", "isDeleted", "hasBeenEdited", "richText", "date", "setInitialText", "isPinchingDisabled", "isPinchingStopped", "onPinchStart", "onPinching", "onPinchEnd", "passive", "MIN_TOUCH_DISTANCE_TO_PINCH", "touches", "pointerDownAC", "opts", "cancelPointerDown", "pointerType", "opt", "onTouchEnd", "touch0", "touch1", "identifier", "touch0X", "screenX", "touch0Y", "screenY", "touch1X", "touch1Y", "screen0X", "screen0Y", "screen1X", "screen1Y", "touchInfo", "pTouch0X", "pTouch0Y", "pTouch1X", "pTouch1Y", "prevGapX", "prevGapY", "currGapX", "currGapY", "distance", "pDistance", "_isCopy", "_editToolbar", "_initialOptions", "_initialData", "_isVisible", "_l10nResizer", "_zIndex", "_borderLineWidth", "_colorManager", "_telemetryTimeout", "_resizerKeyboardManager", "resize", "_resizeWithKeyboard", "_stopResizingWithKeyboard", "_willKeepAspectRatio", "isCentered", "_structTreeParentId", "creationDate", "modificationDate", "pageRotation", "pageDimensions", "pageTranslation", "isAttachedToDOM", "getPrototypeOf", "_type", "isDrawer", "_defaultLineColor", "deleteAnnotationElement", "fakeEditor", "getNextId", "topMiddle", "topRight", "middleRight", "bottomMiddle", "bottomLeft", "middleLeft", "documentElement", "parseFloat", "getPropertyValue", "_value", "mime", "_isDraggable", "center", "parentRotation", "fixAndSetPosition", "setInBackground", "zIndex", "setInForeground", "setParent", "focusin", "focusout", "relatedTarget", "isMultipleSelection", "isInEditMode", "setAt", "screenToPageTranslation", "_moveAfterPaste", "baseX", "baseY", "_onTranslated", "_onTranslating", "scrollIntoView", "block", "findNewParent", "bx", "by", "getBaseTranslation", "left", "toFixed", "_hasBeenMoved", "_hasBeenResized", "_mustFixPosition", "moveInDOM", "pageTranslationToScreen", "parentScale", "setDims", "getInitialTranslation", "classes", "prepend", "savedDraggable", "togglePointerEvents", "savedWidth", "savedHeight", "savedParentCursor", "cursor", "savedCursor", "pointerUpCallback", "_onResized", "newWidth", "newHeight", "_round", "minWidth", "MIN_SIZE", "minHeight", "rotationMatrix", "transf", "invRotationMatrix", "invTransf", "getPoint", "getOpposite", "isDiagonal", "isHorizontal", "point", "oppositePoint", "transfOppositePoint", "oppositeX", "oppositeY", "ratioX", "ratioY", "deltaX", "deltaY", "fromKeyboard", "lastScreenX", "lastScreenY", "oldDiag", "_onResizing", "altTextFinish", "toolbarButtons", "addEditToolbar", "addCommentButton", "addCommentButtonInToolbar", "removeCommentButtonFromToolbar", "removeEditToolbar", "addContainer", "editToolbarDiv", "before", "getClientDimensions", "createAltText", "altTextData", "guessedAltText", "setGuessedAltText", "serializeAltText", "hasAltText", "hasAltTextData", "focusCommentButton", "setCommentData", "updateFromAnnotationLayer", "hasEditedComment", "hasDeletedComment", "setSelectedCommentButton", "setSelectedButton", "DEFAULT_POPUP_WIDTH", "DEFAULT_POPUP_HEIGHT", "trY", "blX", "blY", "trX", "popup", "contents", "parentBoundingClientRect", "defaultL10nId", "maxWidth", "maxHeight", "isResizable", "_origin", "prevDistance", "slowDownFactor", "factor", "transfCenterPoint", "newTransfCenterPoint", "pointerdown", "hasDraggingStarted", "cancelDrag", "_onStopDragging", "clientX", "clientY", "pointerId", "_onStartDragging", "isPrimary", "moveEditorInDOM", "getRect", "shiftX", "shiftY", "getRectInCurrentCoords", "getPDFRect", "onceAdded", "enableEditMode", "disableEditMode", "needsToBeRebuilt", "isOnScreen", "bottom", "right", "innerHeight", "innerWidth", "_angle", "serializeDeleted", "annotationType", "structTreeParentId", "accessibilityData", "isCopy", "timeout", "makeResizable", "commentButtonPositionInPage", "commentPopupPosition", "elementBeforePopup", "boundResizerKeydown", "boundResizerBlur", "firstPosition", "nextFirstPosition", "lastChild", "stopImmediatePropagation", "preventScroll", "disableEditing", "enableEditing", "canChangeContent", "dblclick", "nodeName", "contentDiv", "telemetryInitialData", "telemetryFinalData", "updateFakeAnnotationElement", "annotationLayer", "addFakeAnnotation", "updateEdited", "content", "resetAnnotationElement", "seed", "h1", "h2", "blockCounts", "tailLength", "dataUint32", "k1", "k2", "C1", "C2", "C1_LOW", "C2_LOW", "hexdigest", "transfer", "onSetModified", "onResetModified", "onAnnotationEditor", "defaultValue", "resetModified", "modified", "entry", "print", "serializable", "hasBitmap", "editorStats", "stats", "typeToEditor", "numberOfEditedComments", "numberOfDeletedComments", "isCommentDeleted", "counters", "count", "comments", "edited", "computeTelemetryFinalData", "resetModifiedIds", "updateEditor", "modifiedIds", "ids", "iterator", "_document", "nativeFontFaces", "loadingRequests", "loadTestFontId", "addNativeFontFace", "nativeFontFace", "fonts", "removeNativeFontFace", "insertRule", "getElementsByTagName", "styleSheet", "sheet", "cssRules", "loadSystemFont", "systemFontInfo", "_inspectFont", "loadedName", "isFontLoadingAPISupported", "fontFace", "FontFace", "load", "baseFontName", "attached", "missingFile", "createNativeFontFace", "loaded", "family", "createFontFaceRule", "isSyncFontLoadingSupported", "_queueLoadingCallback", "_prepareFontLoadEvent", "hasFonts", "completeRequest", "done", "otherRequest", "shift", "complete", "_loadTestFont", "testFont", "int32", "offset", "spliceString", "insert", "chunk1", "chunk2", "called", "isFontReady", "fillText", "imageData", "COMMENT_OFFSET", "CFF_CHECKSUM_OFFSET", "XXXX_VALUE", "checksum", "fontFamily", "translatedData", "inspectFont", "extra", "charProcOperatorList", "compiledGlyphs", "cssFontInfo", "css", "weight", "fontWeight", "italicAngle", "mimetype", "getPathGenerator", "objs", "character", "objId", "cmds", "path", "bold", "isInvalidPDFjsFont", "isType3Font", "italic", "remeasure", "vertical", "ascent", "defaultWidth", "descent", "fontMatrix", "fallbackName", "clearData", "defaultVMetrics", "num", "gen", "postMessage", "listener", "call", "rmAbort", "onAbort", "removeEventListener", "terminate", "DATA", "ERROR", "CANCEL", "CANCEL_COMPLETE", "CLOSE", "ENQUEUE", "PULL", "PULL_COMPLETE", "START_COMPLETE", "sourceName", "targetName", "comObj", "callbackId", "streamId", "streamSinks", "streamControllers", "callbackCapabilities", "actionHandler", "stream", "capability", "try", "actionName", "handler", "ah", "transfers", "sendWithStream", "queueingStrategy", "ReadableStream", "controller", "startCapability", "startCall", "pullCall", "cancelCall", "isClosed", "desiredSize", "pull", "pullCapability", "cancelCapability", "streamSink", "enqueue", "isCancelled", "lastDesiredSize", "sinkCapability", "ready", "onPull", "onCancel", "success", "streamController", "dataReason", "allSettled", "_createCanvas", "reset", "canvasAndContext", "_fetch", "cMapData", "addFilter", "maps", "fgColor", "bgColor", "addAlphaFilter", "addLuminosityFilter", "addHighlightHCMFilter", "filterName", "newFgColor", "newBgColor", "keepHCM", "contain", "mapR", "table", "mapG", "mapB", "bufferR", "bufferG", "bufferB", "tableR", "tableG", "tableB", "fgRGB", "bgRGB", "getSteps", "tableA", "fgGray", "bgGray", "newFgRGB", "newBgRGB", "fg", "bg", "step", "newStart", "newStep", "prev", "feColorMatrix", "feComponentTransfer", "func", "feFunc", "rTable", "gTable", "bTable", "aTable", "require", "createRequire", "import", "DOMMatrix", "language", "createCanvas", "bboxes", "dependencies", "isRenderingOperation", "__proto__", "sameLineText", "Float64Array", "operationsCount", "recordDebugMetadata", "growOperationsCount", "oldBBoxes", "opIdx", "previous", "lastSave", "recordOpenMarker", "idx", "getOpenMarker", "recordCloseMarker", "pushBaseTransform", "popBaseTransform", "recordSimpleData", "recordIncrementalData", "resetIncrementalData", "recordNamedData", "recordSimpleDataFromNamed", "depName", "fallbackIdx", "recordFutureForcedDependency", "inheritSimpleDataAsFutureForcedDependencies", "inheritPendingDependenciesAsFutureForcedDependencies", "dep", "resetBBox", "recordClipBox", "clipBox", "recordBBox", "recordCharacterBBox", "getMeasure", "fontBBox", "isBBoxTrustworthy", "computedBBox", "recordFullPageBBox", "measure", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "getSimpleIndex", "dependencyName", "recordDependencies", "dependencyNames", "pendingDependencies", "simple", "incremental", "forEach", "recordNamedDependency", "recordOperation", "preserve", "metadata", "depIdx", "saveIdx", "recordShowTextOperation", "deps", "bboxToClipBoxDropOperation", "_takePendingDependencies", "_extractOperation", "operation", "_pushPendingDependencies", "take", "takeDebugMetadata", "dependencyTracker", "ignoreBBoxes", "imageXObject", "transformAndFill", "SHADING", "isModifyingCurrentTransform", "getPattern", "_bbox", "_colorStops", "_p0", "_p1", "_r0", "_r1", "_createGradient", "grad", "createLinearGradient", "createRadialGradient", "colorStop", "addColorStop", "owner", "inverse", "pathType", "pattern", "ownerBBox", "current", "getClippedPathBoundingBox", "tmpCanvas", "cachedCanvases", "getCanvas", "tmpCtx", "clearRect", "baseTransform", "createPattern", "domMatrix", "_coords", "_figures", "_bounds", "_background", "_createMeshCanvas", "combinedScale", "EXPECTED_SCALE", "MAX_PATTERN_SIZE", "BORDER_SIZE", "boundsWidth", "boundsHeight", "paddedWidth", "paddedHeight", "matrixScaleX", "matrixScaleY", "temporaryPatternCanvas", "COLORED", "UNCOLORED", "canvasGraphicsFactory", "operatorList", "xstep", "ystep", "paintType", "tilingType", "createPatternCanvas", "combinedScaleX", "combinedScaleY", "canvasWidth", "canvasHeight", "redrawHorizontally", "redrawVertically", "xScaledStep", "yScaledStep", "xScaledWidth", "yScaledHeight", "dimx", "getSizeAndScale", "dimy", "graphics", "createCanvasGraphics", "groupLevel", "setFillAndStrokeStyleToContext", "clipBbox", "executeOperatorList", "endDrawing", "dimx2", "dimy2", "xSize", "ySize", "tmpCanvas2", "tmpCtx2", "jj", "realOutputSize", "bboxWidth", "bboxHeight", "fillColor", "strokeColor", "cache", "canvasEntry", "alphaIsShape", "fontSize", "fontSizeScale", "textMatrix", "textMatrixScale", "leading", "lineX", "lineY", "charSpacing", "wordSpacing", "textHScale", "textRenderingMode", "textRise", "patternFill", "patternStroke", "fillAlpha", "strokeAlpha", "activeSMask", "transferMaps", "preInit", "getPathBoundingBox", "xStrokePad", "yStrokePad", "updateClipFromPath", "startNewPathAndClipBox", "isEmptyClip", "canvasCtx", "commonObjs", "optionalContentConfig", "markedContentStack", "annotationCanvasMap", "stateStack", "pendingClip", "pendingEOFill", "xobjs", "groupStack", "baseTransformStack", "smaskStack", "smaskCounter", "tempSMask", "suspendedCtx", "contentVisible", "cachedPatterns", "viewportScale", "outputScaleX", "outputScaleY", "_cachedScaleForStroking", "_cachedGetSinglePixelWidth", "_cachedBitmapsMap", "getObject", "fallback", "beginDrawing", "transparency", "savedFillStyle", "fillRect", "transparentCanvas", "compositeCtx", "executionStartIdx", "continueCallback", "stepper", "operationsFilter", "argsArray", "fnArray", "argsArrayLen", "chunkOperations", "endTime", "steps", "fnId", "fnArgs", "nextBreakPoint", "breakIt", "depObjId", "objsPool", "inSMaskMode", "HTMLCanvasElement", "hcmFilterId", "savedFilter", "_scaleImage", "img", "displayWidth", "displayHeight", "widthScale", "heightScale", "paintWidth", "paintHeight", "tmpCanvasId", "_createMaskCanvas", "isPatternFill", "currentTransform", "cacheKey", "maskCanvas", "mainKey", "cachedImage", "maskToCanvas", "drawnWidth", "drawnHeight", "fillCanvas", "fillCtx", "imageSmoothingEnabled", "limit", "dashArray", "dashPhase", "flatness", "states", "checkSMaskState", "beginSMaskMode", "endSMaskMode", "cacheId", "scratchCanvas", "compose", "dirtyBox", "smask", "composeSMask", "layerCtx", "layerBox", "layerOffsetX", "layerOffsetY", "layerWidth", "layerHeight", "genericComposeSMask", "subtype", "backdrop", "transferMap", "maskCtx", "maskOffsetX", "maskOffsetY", "maskX", "maskY", "old", "op", "outerExtraSize", "path2d", "_pathStartIdx", "consumePath", "newPath", "addPath", "multiplySelf", "rescaleAndStroke", "needRestore", "paths", "pendingTextPaths", "preMultiplySelf", "spacing", "fontRefName", "fontObj", "fontDirection", "typeface", "browserFontSize", "rise", "paintChar", "patternFillTransform", "patternStrokeTransform", "fillStrokeMode", "isAddToPathSet", "scaledPath", "invPatternTransform", "measureText", "strokeText", "isFontSubpixelAAEnabled", "glyphs", "showType3Text", "glyphsLength", "spacingDir", "widthAdvanceScale", "simpleFillText", "getSinglePixelWidth", "chars", "glyph", "unicode", "joinedChars", "restoreNeeded", "isSpace", "fontChar", "accent", "scaledX", "scaledY", "vmetric", "vx", "vy", "measuredWidth", "characterScaleX", "isInFont", "scaledAccentX", "scaledAccentY", "charWidth", "isTextInvisible", "spacingLength", "operatorListId", "xWidth", "yWidth", "llx", "lly", "urx", "ury", "getColorN_Pattern", "renderingOpIdx", "_getPattern", "inv", "group", "currentCtx", "isolated", "knockout", "bounds", "canvasBounds", "groupCtx", "startTransformInverse", "currentMtx", "hasOwnCanvas", "annotationCanvas", "savedCtx", "skewX", "skewY", "positions", "trans", "images", "applyTransferMapsToCanvas", "applyTransferMapsToBitmap", "imgToPaint", "HTMLElement", "tag", "isVisible", "isContentVisible", "absDet", "normX", "normY", "getScaleForStroking", "scaledLineWidth", "scaledXLineWidth", "scaledYLineWidth", "baseArea", "saveRestore", "dashes", "strings", "write", "encoder", "TextEncoder", "encodedStrings", "stringsLength", "encoded", "encode", "view", "setUint32", "getUint32", "encodedStyleStyle", "encodedStyleWeight", "lengthEstimate", "setUint8", "guessFallback", "transferToFixedLength", "getUint8", "styleLength", "weightLength", "bools", "byteOffset", "bitOffset", "getFloat64", "numCoords", "getInt16", "numPoints", "numMetrics", "stringData", "systemFontInfoLength", "cssFontInfoLength", "cssFontInfoData", "systemFontInfoData", "systemFontInfoBuffer", "cssFontInfoBuffer", "numBools", "boolByte", "boolBit", "bits", "setFloat64", "coord", "setInt16", "metric", "Worker", "workerSrc", "parsedData", "getRaw", "renderingIntent", "usage", "rbGroups", "viewState", "printState", "_setVisible", "internal", "userSet", "creator", "order", "groups", "baseState", "off", "getHash", "operator", "expression", "policy", "setVisibility", "preserveRB", "rbGroup", "otherId", "setOCGState", "hasInitialVisibility", "getOrder", "getGroup", "pdfDataRangeTransport", "initialData", "progressiveDone", "contentDispositionFilename", "_queuedChunks", "_progressiveDone", "_contentDispositionFilename", "_pdfDataRangeTransport", "_isStreamingSupported", "_isRangeSupported", "_contentLength", "_fullRequestReader", "_rangeReaders", "addRangeListener", "begin", "_onReceiveData", "addProgressListener", "total", "_onProgress", "addProgressiveReadListener", "addProgressiveDoneListener", "_onProgressiveDone", "transportReady", "_enqueue", "found", "rangeReader", "_begin", "_progressiveDataLength", "_loaded", "onProgress", "_removeRangeReader", "reader", "getFullReader", "queuedChunks", "getRangeReader", "requestDataRange", "cancelAllRequests", "_stream", "_done", "_filename", "_requests", "_headersReady", "requestCapability", "headersReady", "isRangeSupported", "isStreamingSupported", "contentLength", "read", "_end", "_queuedChunk", "requestsCapability", "_responseOrigin", "_rangeRequestReaders", "_reader", "_withCredentials", "_headersCapability", "_disableRange", "_rangeChunkSize", "_abortController", "getReader", "_readCapability", "responseOrigin", "currXhrId", "pendingRequests", "xhrId", "pendingRequest", "setRequestHeader", "expectedStatus", "onError", "onStateChange", "onprogress", "onHeadersReceived", "onDone", "xhrStatus", "ok_response_on_range_request", "rangeHeader", "getResponseHeader", "getRequestXhr", "isPendingRequest", "abortRequest", "_source", "_manager", "_onRangeRequestReaderClosed", "onClosed", "manager", "_url", "_fullRequestId", "_onHeadersReceived", "_onDone", "_onError", "_cachedChunks", "_storedError", "fullRequestXhrId", "fullRequestXhr", "responseURL", "rawResponseHeaders", "getAllResponseHeaders", "trimStart", "lengthComputable", "_requestId", "_close", "_readableStream", "lstat", "stat", "_setReadableStream", "createReadStream", "_error", "readableStream", "FontInspector", "textContentSource", "finally", "fontFamilyMap", "pump", "lang", "onBefore", "abortEx", "textContentItemsStr", "geom", "textDiv", "textDivProperties", "hasText", "hasEOL", "atan2", "fontName", "PI", "fontSubstitution", "fontHeight", "fontAscent", "sin", "cos", "scaleFactorStr", "divStyle", "dataset", "fontSubstitutionLoadedName", "shouldScaleText", "absScaleX", "absScaleY", "br", "cleanup", "alpha", "cached", "lineHeight", "cachedAscent", "metrics", "fontBoundingBoxAscent", "fontBoundingBoxDescent", "ratio", "onPassword", "_pendingDestroy", "onDataRange", "onDataProgress", "onDataProgressiveRead", "onDataProgressiveDone", "pdfInfo", "_pdfInfo", "numPages", "fingerprints", "isPureXfa", "_htmlForXfa", "allXfaHtml", "getPage", "getPageIndex", "ref", "getDestinations", "getDestination", "getPageLabels", "getPageLayout", "getPageMode", "getViewerPreferences", "getOpenAction", "getAttachments", "pageIndexesToSkip", "getJSActions", "getDocJSActions", "getOutline", "getOptionalContentConfig", "getRenderingIntent", "getPermissions", "getMetadata", "getMarkInfo", "saveDocument", "getDownloadInfo", "downloadInfoCapability", "keepLoadedFonts", "startCleanup", "loadingTask", "cachedPageNumber", "getFieldObjects", "hasJSActions", "getCalculationOrderIds", "pageInfo", "_pageIndex", "_pageInfo", "_stats", "_pdfBug", "_intentStates", "recordedBBoxes", "getViewport", "getAnnotations", "getPageJSActions", "getXfa", "canvasContext", "annotationMode", "optionalContentConfigPromise", "printAnnotationStorage", "recordOperations", "intentArgs", "intentState", "streamReaderCancelTimeout", "intentPrint", "displayReadyCapability", "lastChunk", "separateAnnots", "_pumpOperatorList", "recordForDebugger", "Boolean", "StepperManager", "shouldRecordOperations", "renderTasks", "internalRenderTask", "gfx", "setOperatorBBoxes", "_abortOperatorList", "Stats", "useRequestAnimationFrame", "renderTask", "initializeGraphics", "operatorListChanged", "getOperatorList", "opListReadCapability", "opListTask", "streamTextContent", "includeMarkedContent", "disableNormalization", "TEXT_CONTENT_CHUNK_SIZE", "highWaterMark", "getTextContent", "getStructTree", "_destroy", "waitOn", "force", "completed", "resetStats", "_startRenderPage", "_renderPageChunk", "operatorListChunk", "annotationStorageSerializable", "streamReader", "delay", "curCacheKey", "curIntentState", "_isSameOrigin", "otherUrl", "base", "other", "_createCDNWrapper", "wrapper", "createObjectURL", "fromPort", "terminateEarly", "sendTest", "testObj", "_setupFakeWorkerGlobal", "WorkerMessageHandler", "workerHandler", "setup", "cachedPort", "pdfjsWorker", "loader", "factory", "fontLoader", "_params", "destroyCapability", "_networkStream", "_fullReader", "_lastProgress", "setupMessageHandler", "cachedPromise", "isOpList", "modifiedIdsHash", "cacheKeyBuf", "terminated", "sink", "readyReason", "_numPages", "htmlForXfa", "updatePassword", "err", "exportedData", "exportedError", "fontData", "fontAdded", "imageRef", "pageProxy", "dataLen", "refStr", "results", "cleanupSuccessful", "onContinue", "form", "WeakSet", "operatorListIdx", "running", "graphicsReadyCallback", "graphicsReady", "_useRequestAnimationFrame", "cancelled", "_cancelBound", "_continueBound", "_continue", "_scheduleNextBound", "_scheduleNext", "_nextBound", "_next", "_canvas", "_canvasContext", "_enableHWA", "_dependencyTracker", "_operationsFilter", "init", "getNextBreakPoint", "cancelAnimationFrame", "updateOperatorList", "requestAnimationFrame", "_hideDropdownFromKeyboard", "_colorSelectFromKeyboard", "_moveToNext", "_moveToPrevious", "_moveToBeginning", "_moveToEnd", "blue", "green", "pink", "red", "yellow", "swatch", "ariaHidden", "renderMainDropdown", "dropdown", "ariaOrientation", "ariaLabelledBy", "role", "ariaMultiSelectable", "ariaSelected", "updateColor", "nextSibling", "previousSibling", "detail", "colorType", "colorValue", "CMYK_G", "G_CMYK", "G_RGB", "G_rgb", "G_HTML", "G", "RGB_G", "RGB_rgb", "RGB_HTML", "T_HTML", "T_rgb", "CMYK_RGB", "CMYK_rgb", "CMYK_HTML", "components", "RGB_CMYK", "skipDimensions", "_createSVG", "getTimezoneOffset", "fieldType", "radioButton", "checkBox", "isRenderable", "ignoreBorder", "createQuadrilaterals", "downloadManager", "imageResourcesPath", "renderForms", "svgFactory", "enableComment", "enableScripting", "_fieldObjects", "fieldObjects", "_createContainer", "_createQuadrilaterals", "_hasPopupData", "_isEditable", "isEditable", "hasPopupData", "commentText", "commentData", "hasCommentButton", "hasPopupElement", "quadPoints", "inkLists", "inkList", "_normalizePoint", "removePopup", "newPopup", "_createPopup", "resetEdited", "currentRect", "setRotation", "alternativeText", "noRotate", "borderStyle", "borderWidth", "horizontalRadius", "horizontalCornerRadius", "verticalRadius", "verticalCornerRadius", "radius", "borderRadius", "borderBottomStyle", "borderColor", "_commonActions", "setColor", "jsName", "styleName", "colorArray", "noView", "noPrint", "userName", "readonly", "_setRequired", "textColor", "_dispatchEventFromSandbox", "actions", "jsEvent", "commonActions", "_setDefaultPropertiesFromJS", "eventProxy", "rectBlX", "rectBlY", "rectTrX", "rectTrY", "svgBuffer", "defs", "clipPath", "rectWidth", "rectHeight", "backgroundImage", "popupData", "titleObj", "parentRect", "elements", "_commentManager", "extraPopupElement", "_getElementsByName", "skipId", "fields", "fieldObj", "exportValues", "exportValue", "domElement", "getElementsByName", "maybeShow", "forceHide", "getElementsToTriggerPopup", "addHighlightArea", "triggers", "_editOnDoubleClick", "annotationEditorType", "createOrUpdatePopup", "renderCommentButton", "isTooltipOnly", "link", "isBound", "_bindNamedAction", "overlaidText", "attachment", "attachmentDest", "_bindLink", "Action", "_bindJSAction", "resetForm", "_bindResetFormAction", "destination", "getDestinationHash", "onclick", "goToDestination", "getAnchorUrl", "executeNamedAction", "openOrDownloadData", "executeSetOCGState", "otherClickAction", "resetFormFields", "refs", "resetFormRefs", "include", "allFields", "fieldIds", "fieldName", "field", "allIds", "dispatchEvent", "Event", "showElementAndHideCanvas", "_getKeyModifier", "_setEventListener", "elementData", "baseName", "eventName", "valueGetter", "modifier", "focused", "_setEventListeners", "getter", "Blur", "Focus", "_setBackgroundColor", "_setTextStyle", "TEXT_ALIGNMENT", "fontColor", "defaultAppearanceData", "computedFontSize", "roundToOneDecimal", "multiLine", "numberOfLines", "textAlignment", "textAlign", "isRequired", "hasAppearance", "fieldValue", "setPropertyOnSiblings", "keyInStorage", "maxLen", "charLimit", "fieldFormattedValues", "formattedValue", "comb", "userValue", "lastCommittedValue", "commitKey", "doNotScroll", "overflowY", "overflowX", "readOnly", "datetimeFormat", "datetimeType", "timeStep", "hasDateOrTime", "maxLength", "defaultFieldValue", "blurListener", "scrollLeft", "getHours", "getMinutes", "getSeconds", "toISOString", "selRange", "setSelectionRange", "willCommit", "selStart", "selectionStart", "selEnd", "selectionEnd", "_blurListener", "valueOf", "Keystroke", "inputType", "change", "fieldWidth", "combWidth", "letterSpacing", "verticalAlign", "checkbox", "curChecked", "buttonValue", "radio", "pdfButtonValue", "linkElement", "selectElement", "addAnEmptyEntry", "combo", "multiSelect", "multiple", "optionElement", "displayValue", "removeEmptyEntry", "noneOptionElement", "isExport", "selectedValues", "getItems", "multipleSelection", "findIndex", "selectChild", "indices", "editable", "changeEx", "keyDown", "trigger", "flatMap", "hasOwnButton", "togglePopup", "showPopup", "hidePopup", "parentContainer", "after", "outlineColor", "header", "dateObj", "dateTime", "popupLines", "popupContent", "lineAttributes", "useParentRect", "normalizedRect", "HORIZONTAL_SPACE_AFTER_ANNOTATION", "popupLeft", "popupTop", "textPosition", "lineSpan", "lineCoordinates", "square", "circle", "containerClassName", "svgElementName", "vertices", "points", "polyline", "it", "thickness", "mark", "underline", "strikeout", "accessibilityManager", "annotationEditorUIManager", "structTreeLayer", "_annotationEditorUIManager", "hasEditableAnnotations", "popupElements", "contentElement", "ariaAttributes", "getAriaAttributes", "moveElementInDOM", "annotations", "popupToElements", "elementParams", "noHTML", "isPopupAnnotation", "rendered", "addLinkAnnotations", "_defaultBorderStyle", "replaceWith", "editableAnnotation", "_hasNoCanvas", "getEditableAnnotations", "getEditableAnnotation", "htmlElement", "rawWidth", "_colorPicker", "_freeTextDefaultContent", "_internalPadding", "_defaultColor", "_defaultFontSize", "_translateEmpty", "setFontsize", "editorDiv", "savedFontsize", "col", "savedColor", "overlayDiv", "contentEditable", "editorDivKeydown", "editorDivFocus", "editorDivBlur", "editorDivInput", "editorDivPaste", "innerText", "prevChild", "childNodes", "savedDisplay", "savedVisibility", "savedText", "newText", "trimEnd", "setText", "nodeValue", "deleteFromDocument", "insertNode", "collapseToStart", "startContainer", "startOffset", "bufferBefore", "bufferAfter", "newRange", "Range", "beforeLength", "setStart", "setEnd", "removeAllRanges", "addRange", "replaceChildren", "padding", "toSVGPath", "_rotation", "_rescale", "_rescaleAndSwap", "_translate", "svgRound", "_normalizePagePoint", "createBezierPoints", "scaleFactor", "innerMargin", "lastTop", "lastBottom", "diffX", "diffY", "diffD", "K", "nX", "nY", "thX", "thY", "lastTopX", "lastTopY", "lastBottomX", "lastBottomY", "newFreeDrawOutline", "outline", "getOutlines", "last", "N", "firstPoint", "lastPoint", "firstPointX", "firstPointY", "lastPointX", "lastPointY", "ltrCallback", "bezierBbox", "newOutliner", "getNewOutline", "outliner", "NUMBER_OF_DIGITS", "EPSILON", "shiftedMinX", "shiftedMinY", "lastEdge", "edge", "sort", "outlineVerticalEdges", "edges", "allEdges", "edge1", "edge2", "outlines", "middle", "y4", "polygon", "prevX", "prevY", "classNamesForOutlining", "_defaultOpacity", "_defaultThickness", "_freeHighlightId", "_freeHighlight", "_freeHighlightClipId", "_moveCaret", "highlightId", "numberOfColors", "outlinerForOutline", "highlightOutlines", "clipPathId", "extraThickness", "drawLayer", "finalizeDraw", "drawOutline", "rootClass", "highlightOutline", "free", "updateProperties", "setColorAndOpacity", "opa", "savedOpacity", "savedThickness", "setThickness", "th", "addUndoableEditor", "mustBeSelected", "draw", "highlightDiv", "pointerover", "hovered", "pointerleave", "setPosition", "startHighlighting", "updateProperty", "updateSVGProperty", "toSVGProperties", "updateAll", "_drawId", "_currentDrawId", "_currentParent", "_INNER_MARGIN", "mustBeCommitted", "_addOutlines", "drawOutlines", "drawId", "drawingOptions", "_drawingOptions", "defaultProperties", "_mergeSVGProperties", "defaultSVGProperties", "p1Keys", "getDefaultDrawingOptions", "_options", "typesMap", "supportMultipleDrawings", "propertyName", "_defaultDrawingOptions", "_updateProperty", "savedValue", "setter", "getPathResizingSVGProperties", "getPathResizedSVGProperties", "_x", "_y", "getPathTranslatedSVGProperties", "moving", "updateParent", "pW", "pH", "updateRotation", "updateParentDimensions", "onScaleChangingWhenDrawing", "drawDiv", "createDrawerInstance", "_parentWidth", "_parentHeight", "startDrawing", "_isLTR", "_endDraw", "isCancellable", "removeLastElement", "_drawMove", "timeStamp", "startNew", "_cleanup", "lastElement", "getLastElement", "setLastElement", "isAborted", "createDrawingOptions", "_data", "deserializeDraw", "_pageX", "_pageY", "_pageWidth", "_pageHeight", "_innerWidth", "serializeDraw", "firstX", "firstY", "secondX", "secondY", "c1x", "c1y", "c2x", "c2y", "serializedLines", "serializedPoints", "rescaleFn", "newLines", "len", "margin", "marginX", "marginY", "oldMarginX", "oldMarginY", "newMarginX", "newMarginY", "diffMarginX", "diffMarginY", "rotationTransform", "s1x", "s1y", "s2x", "s2y", "newParentWidth", "newParentHeight", "viewerParameters", "_viewParameters", "sigmaSFactor", "sigmaR", "kernelSize", "i0", "j0", "Int32Array", "kk", "shiftI", "shiftJ", "threshold", "nbd", "lnbd", "contours", "ij", "pix", "i2", "j2", "isHole", "contour", "contour0", "i1", "j1", "i3", "j3", "i4", "j4", "ij3", "ax", "ay", "abx", "aby", "dist", "nabx", "naby", "aa", "invS", "phi", "atan", "cosPhi", "sinPhi", "tmax", "poly", "partialPhi", "dmax", "sigmaS", "kernel", "sigmaS2", "halfSize", "exp", "rangeValues", "sigmaR2", "out", "histogram", "sum", "norm", "neighbour", "M", "L", "spos", "originalBitmap", "prevWidth", "prevHeight", "log2", "isteps", "grayImage", "uint8Buf", "extractContoursFromText", "fontStyle", "SCALE", "contourList", "processDrawnLines", "curves", "mustSmooth", "areContours", "linesAndPoints", "xScale", "yScale", "newCurves", "reducedPoints", "newPoints", "compressSignature", "minDiff", "maxDiff", "outlinesLength", "dx", "bufferType", "Int16Array", "headerLength", "BYTES_PER_ELEMENT", "CompressionStream", "writer", "getWriter", "BufferCtor", "diffs", "Response", "readable", "decompressSignature", "signatureData", "DecompressionStream", "numberOfDrawings", "diffsOffset", "_defaultDrawnSignatureOptions", "hasDescription", "hasDescriptionStats", "hasNoAltText", "uuid", "heightInPage", "addSignature", "setUuid", "getSignaturePreview", "outlineData", "hasBeenSaved", "getFromImage", "getFromText", "fontInfo", "getDrawnSignature", "isSignature", "alt", "bitmapUrl", "bitmapFile", "pasteEditor", "getAsFile", "hasAltTextStats", "fromId", "alt_text_modal", "alt_text_type", "mlGuessAltText", "updateAltTextData", "isEnabledFor", "copyCanvas", "guess", "channels", "accept", "files", "click", "bitmapId", "MAX_RATIO", "maxDataDimension", "maxPreviewDimension", "bitmapWidth", "bitmapHeight", "outputScale", "scaledWidth", "scaledHeight", "boxDim", "boxDimWidth", "boxDimHeight", "patternCtx", "dataWidth", "dataHeight", "offscreenCtx", "toUrl", "toDataURL", "missingCanvas", "structParent", "_structTree", "changes", "isSame", "isSameAltText", "stamps", "area", "prevData", "isSamePageIndex", "_initialized", "editorTypes", "isInvisible", "disableTextSelection", "toggleAnnotationLayerPointerEvents", "enableTextSelection", "annotationElementIds", "DBL_CLICK_THRESHOLD", "lastPointerDownTimestamp", "elementsFromPoint", "regex", "changedAnnotations", "resetAnnotations", "editables", "currentActive", "attach", "detach", "removePointerInTextLayer", "currentMode", "startDrawingSession", "pause", "oldRotation", "_svgFactory", "pathId", "clipPathUse", "isPathUpdatable", "hasClip", "use", "mustRemoveSelfIntersections", "maskId", "use1", "use2", "cloneNode", "elementOrId", "pathElement", "_pdfjsTestingUtils", "pdfjsLib", "error", "InvalidPDFException", "PasswordException", "FormatError", "UnknownErrorException", "ResponseException", "AbortException", "LineDirection", "result", "text", "l", "result", "result", "last", "l", "result", "date", "DrawOPS", "PathGeometry", "isNodeJS", "result", "info", "url", "text", "error", "l", "resolve", "reject", "AbortException", "FormatError", "InvalidPDFException", "PasswordException", "ResponseException", "UnknownErrorException", "rest", "isObject", "obj", "obj", "obj", "obj", "obj", "obj", "obj", "obj", "obj", "obj", "isFinite", "obj", "isNaN", "obj", "obj", "obj", "keys", "hash", "l", "obj", "obj", "isObject", "keys", "obj", "object", "obj", "obj", "byteLength", "obj", "isObject", "keys", "obj", "keys", "obj", "values", "obj", "pairs", "obj", "result", "obj", "obj", "keys", "l", "isObject", "result", "result", "clone", "obj", "isObject", "obj", "path", "toPath", "path", "init_toPath", "obj", "path", "object", "path", "toPath", "init_toPath", "has", "obj", "path", "toPath", "init_has", "init_toPath", "obj", "path", "toPath", "obj", "init_toPath", "isObject", "obj", "iteratee", "obj", "path", "iteratee", "min", "max", "map", "match", "string", "match", "text", "matcher", "escape", "template", "obj", "path", "toPath", "init_toPath", "obj", "self", "result", "isObject", "partial", "obj", "keys", "memoize", "result", "result", "compose", "start", "result", "times", "times", "obj", "array", "array", "obj", "iteratee", "sortedIndex", "array", "isNaN", "obj", "obj", "obj", "iteratee", "map", "obj", "iteratee", "obj", "iteratee", "initial", "obj", "obj", "obj", "obj", "obj", "init_toPath", "obj", "path", "toPath", "map", "obj", "map", "obj", "obj", "iteratee", "result", "v", "obj", "iteratee", "result", "v", "obj", "map", "obj", "sample", "last", "obj", "obj", "iteratee", "map", "obj", "iteratee", "result", "result", "result", "result", "result", "obj", "obj", "obj", "keys", "result", "iteratee", "obj", "keys", "iteratee", "map", "array", "array", "array", "array", "array", "flatten", "array", "init_flatten", "array", "rest", "array", "array", "iteratee", "result", "intersection", "array", "result", "array", "result", "object", "values", "result", "start", "range", "array", "result", "obj", "obj", "obj", "clone", "map", "compose", "flatten", "has", "intersection", "isFinite", "isNaN", "isObject", "object", "init_has", "init_flatten", "_", "clone", "map", "compose", "flatten", "has", "intersection", "isFinite", "isNaN", "isObject", "object", "exports", "module", "obj", "has", "ret", "desc", "ret", "obj", "desc", "keys", "filter", "v", "promise", "self", "cb", "version", "exports", "module", "schedule", "exports", "module", "size", "ret", "exports", "module", "schedule", "self", "isNode", "promise", "exports", "module", "es5", "inherits", "notEnumerableProp", "ret", "i", "exports", "module", "Promise", "INTERNAL", "errorObj", "isObject", "obj", "ret", "promise", "result", "resolve", "reject", "exports", "module", "Promise", "INTERNAL", "values", "promise", "_", "result", "exports", "module", "Promise", "Context", "ret", "exports", "module", "Promise", "Context", "canAttachTrace", "promise", "warn", "domain", "config", "event", "resolve", "reject", "ret", "error", "deprecated", "obj", "captureStackTrace", "result", "info", "exports", "module", "Promise", "errorObj", "promise", "finallyHandler", "ret", "success", "fail", "exports", "module", "tryCatch", "errorObj", "cb", "promise", "keys", "exports", "module", "maybeWrapAsError", "es5", "obj", "ret", "keys", "promise", "exports", "module", "Promise", "INTERNAL", "tryCatch", "ret", "exports", "module", "Promise", "INTERNAL", "_", "ret", "obj", "exports", "module", "Promise", "tryCatch", "errorObj", "promise", "exports", "module", "Promise", "thrower", "exports", "module", "Promise", "promise", "exports", "module", "Promise", "INTERNAL", "canEvaluate", "tryCatch", "errorObj", "reject", "i", "last", "ret", "domain", "exports", "module", "Promise", "INTERNAL", "tryCatch", "errorObj", "domain", "values", "promise", "ret", "map", "exports", "module", "Promise", "canEvaluate", "isIdentifier", "ret", "keys", "obj", "exports", "module", "Promise", "INTERNAL", "TypeError", "inherits", "errorObj", "tryCatch", "thrower", "ret", "promise", "i", "exports", "module", "Promise", "INTERNAL", "ret", "promise", "exports", "module", "Promise", "INTERNAL", "TypeError", "errorObj", "tryCatch", "yieldHandlers", "result", "ret", "promise", "exports", "module", "Promise", "tryCatch", "errorObj", "promise", "ret", "exports", "module", "Promise", "INTERNAL", "withAppended", "maybeWrapAsError", "canEvaluate", "TypeError", "obj", "ret", "filter", "keys", "min", "parameterCount", "_", "promise", "cb", "fn", "exports", "module", "Promise", "isObject", "es5", "size", "mapToEntries", "map", "ret", "obj", "keys", "exports", "module", "Promise", "INTERNAL", "promise", "array", "ret", "reject", "exports", "module", "Promise", "INTERNAL", "tryCatch", "domain", "values", "array", "promise", "ret", "exports", "module", "Promise", "values", "ret", "exports", "module", "Promise", "RangeError", "values", "some", "ret", "promise", "exports", "module", "Promise", "INTERNAL", "exports", "module", "Promise", "INTERNAL", "exports", "module", "Promise", "any", "ret", "promise", "exports", "module", "TypeError", "Promise", "ret", "es5", "INTERNAL", "Context", "errorObj", "tryCatch", "check", "self", "promise", "result", "obj", "_", "domain", "reject", "v", "exports", "_", "resolve", "reject", "promise", "exports", "_", "Image", "Table", "exports", "_", "success", "error", "values", "first", "exports", "byteLength", "len", "i", "start", "len2", "exports", "module", "exports", "module", "toString", "exports", "module", "exports", "module", "Buffer", "size", "require_util", "exports", "isBoolean", "isNull", "isUndefined", "isObject", "isError", "isFunction", "isPrimitive", "exports", "module", "inherits", "ctor", "exports", "module", "exports", "module", "Buffer", "push", "v", "ret", "join", "obj", "exports", "module", "cb", "err", "self", "exports", "module", "exports", "module", "Buffer", "chunk", "obj", "_", "object", "cb", "ret", "last", "l", "exports", "module", "obj", "keys", "Readable", "v", "self", "cb", "exports", "module", "Readable", "Buffer", "chunk", "obj", "cb", "ret", "self", "n", "l", "exports", "module", "Transform", "cb", "chunk", "exports", "module", "Transform", "chunk", "cb", "exports", "module", "exports", "e", "exports", "exports", "module", "size", "obj", "exports", "module", "require_lib", "exports", "module", "INTERNAL", "Promise", "resolve", "reject", "promise", "self", "result", "tryCatch", "error", "obj", "values", "i", "exports", "module", "exports", "global", "undefined", "setImmediate", "html", "exports", "base64", "result", "e", "identity", "array", "chunk", "transform", "path", "self", "ctor", "promise", "resolve", "reject", "exports", "module", "chunk", "self", "exports", "i", "max", "chunk", "exports", "module", "chunk", "exports", "module", "Readable", "self", "meta", "exports", "module", "base64", "resolve", "reject", "meta", "result", "self", "chunk", "exports", "exports", "module", "self", "size", "exports", "module", "exports", "module", "chunk", "exports", "module", "chunk", "exports", "module", "exports", "module", "result", "exports", "obj", "size", "l", "chunk", "result", "exports", "desc", "v", "last", "exports", "module", "require_crc32", "exports", "module", "exports", "module", "exports", "errorCode", "last", "start", "size", "match", "ret", "wrap", "exports", "result", "max", "exports", "module", "require_deflate", "exports", "toString", "chunk", "exports", "module", "start", "last", "exports", "module", "min", "max", "root", "exports", "wrap", "ret", "exports", "module", "exports", "module", "require_inflate", "exports", "toString", "chunk", "exports", "module", "exports", "chunk", "self", "exports", "exports", "exports", "module", "hex", "result", "file", "date", "chunk", "record", "self", "e", "exports", "file", "date", "exports", "module", "self", "chunk", "exports", "module", "object", "path", "cb", "file", "result", "obj", "ret", "exports", "module", "size", "result", "exports", "module", "size", "result", "exports", "module", "size", "result", "exports", "module", "size", "result", "exports", "module", "size", "result", "exports", "module", "exports", "module", "exports", "module", "result", "file", "exports", "module", "resolve", "reject", "data", "require_lib", "exports", "module", "exports", "splitPath", "array", "write", "path", "exports", "_", "array", "exports", "find", "object", "exports", "find", "Class", "t", "DOMException", "error", "version", "root", "Node", "map", "hasDoctypeChildThatIsNotChild", "node", "Comment", "text", "start", "html", "v", "object", "exports", "exports", "parse", "errorHandler", "a", "end", "start", "text", "config", "value", "match", "exports", "sax", "errorHandler", "build", "start", "error", "l", "require_lib", "exports", "exports", "string", "error", "document", "exports", "_", "Node", "document", "error", "exports", "module", "isEmpty", "isFunction", "isObject", "isPlainObject", "slice", "ctor", "obj", "exports", "module", "XMLAttribute", "exports", "module", "isFunction", "isObject", "extend", "ctor", "XMLElement", "exports", "module", "extend", "ctor", "XMLCData", "text", "exports", "module", "extend", "ctor", "XMLComment", "text", "exports", "module", "isObject", "extend", "ctor", "XMLDeclaration", "version", "exports", "module", "extend", "ctor", "XMLDTDAttList", "exports", "module", "isObject", "extend", "ctor", "XMLDTDEntity", "exports", "module", "extend", "ctor", "XMLDTDElement", "exports", "module", "extend", "ctor", "XMLDTDNotation", "exports", "module", "isObject", "extend", "ctor", "XMLDocType", "exports", "module", "extend", "ctor", "XMLRaw", "text", "exports", "module", "extend", "ctor", "XMLText", "text", "exports", "module", "extend", "ctor", "XMLProcessingInstruction", "exports", "module", "extend", "ctor", "XMLDummy", "exports", "module", "isEmpty", "isFunction", "isObject", "XMLNode", "text", "version", "exports", "module", "XMLStringifier", "exports", "module", "XMLWriterBase", "exports", "module", "extend", "ctor", "XMLStringWriter", "exports", "module", "isPlainObject", "extend", "ctor", "XMLDocument", "exports", "module", "isFunction", "isObject", "isPlainObject", "XMLDocumentCB", "text", "version", "root", "chunk", "exports", "module", "extend", "ctor", "XMLStreamWriter", "require_lib", "exports", "module", "isFunction", "root", "exports", "_", "root", "exports", "exports", "_", "document", "path", "exports", "exports", "mod", "codePoint", "dec", "hex", "exports", "_", "transform", "exports", "exports", "_", "options", "create", "text", "rows", "path", "result", "first", "identity", "exports", "result", "exports", "exports", "path", "exports", "_", "root", "exports", "root", "exports", "exports", "exports", "module", "path", "result", "exports", "fs", "url", "dirname", "path", "readFile", "error", "exports", "result", "path", "exports", "_", "path", "exports", "text", "exports", "module", "_", "identity", "values", "exports", "write", "exports", "_", "html", "elements", "wrap", "result", "tagName", "element", "exports", "_", "result", "exports", "_", "start", "writer", "open", "text", "escapeHtmlAttribute", "html", "asString", "exports", "_", "start", "htmlToMarkdown", "open", "text", "asString", "exports", "exports", "_", "document", "html", "options", "path", "error", "values", "commentAuthorLabel", "exports", "exports", "module", "start", "exports", "exports", "exports", "module", "require_errors", "exports", "Error", "exports", "array", "result", "exports", "_", "result", "values", "source", "start", "error", "exports", "module", "string", "self", "exports", "module", "exports", "self", "name", "infixRules", "map", "result", "exports", "result", "string", "exports", "exports", "first", "exports", "string", "exports", "_", "string", "constant", "match", "error", "exports", "_", "identity", "exports", "fs", "readFile", "exports", "html", "require_lib", "exports", "_", "unzip", "document", "styleMap", "html", "text", "rows", "_", "match", "PDFParse", "error", "sql", "rowsFromResult", "result", "createHash", "result", "user", "error", "cached", "error", "record", "normalizeStatus", "workflow", "error", "sleep", "resolve", "query", "sql", "rowsFromResult", "result", "sql", "json", "sql", "rowsFromResult", "result", "rows", "normalizeLimit", "normalizeMode", "env", "BOOT_ENV_SNAPSHOT", "sql", "parseJsonField", "parseWorkflowDate", "errorMessage", "error", "logger", "duration", "result", "logger", "logger", "result", "rows", "logger", "values", "sql", "logger", "result", "rows", "rowsFromResult", "result", "logger", "error", "rows", "exports", "module", "object", "string", "number", "integer", "min", "max", "inArray", "exports", "module", "exports", "module", "fs", "readFileSync", "path", "readFile", "resolve", "reject", "_", "exports", "module", "size", "exports", "module", "readFile", "readFileSync", "resolve", "path", "family", "version", "exports", "module", "require_constants", "exports", "module", "exports", "module", "max", "exports", "module", "exports", "module", "exports", "module", "version", "match", "exports", "module", "parse", "version", "exports", "module", "parse", "version", "match", "build", "exports", "module", "exports", "module", "gte", "exports", "module", "exports", "module", "eq", "exports", "module", "exports", "module", "gt", "exports", "module", "lt", "exports", "module", "lte", "exports", "module", "eq", "gt", "gte", "lt", "lte", "exports", "module", "version", "Range", "exports", "module", "Range", "range", "first", "cached", "result", "version", "_", "ret", "z", "set", "exports", "module", "Range", "version", "range", "exports", "module", "exports", "module", "createHash", "config", "log", "globalLibvipsVersion", "logger", "exports", "module", "path", "config", "exports", "module", "clone", "debuglog", "queueListener", "exports", "module", "obj", "chunk", "metadata", "resolve", "reject", "stats", "exports", "module", "extend", "exports", "module", "composite", "exports", "module", "flip", "flop", "size", "flatten", "gamma", "negate", "threshold", "boolean", "exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "desc", "__toCommonJS", "mod", "string", "hex", "match", "l", "min", "max", "v", "z", "z2", "integer", "path", "result", "object", "keys", "self", "contrastRatio", "number", "array", "exports", "module", "require_colour", "exports", "module", "tint", "greyscale", "grayscale", "colourspace", "exports", "module", "exports", "module", "path", "toBuffer", "v", "raw", "info", "resolve", "reject", "exports", "module", "_", "concurrency", "simd", "require_lib", "exports", "module", "exports", "values", "v", "log", "timestamp", "logger", "exports", "resolve", "reject", "error", "exports", "date", "error", "resolve", "result", "reject", "exports", "exports", "exports", "exports", "exports", "text", "last", "first", "match", "exports", "date", "exports", "sign", "date", "exports", "values", "date", "exports", "initial", "exports", "date", "error", "resolve", "reject", "exports", "exports", "min", "max", "exports", "resolve", "reject", "error", "exports", "exports", "schedule", "registry", "match", "byteLength", "isObject", "result", "errorMessage", "error", "rows", "error", "url", "env", "mod", "config", "raw", "hostname", "cached", "domain", "resolve", "env", "logger", "path", "mod", "resolve", "env", "logger", "result", "url", "config", "path", "app", "rowsFromResult", "result", "rows", "error", "resolve", "dirname", "__dirname", "dirname", "resolve", "fileURLToPath", "mod", "__dirname", "extname", "isAbsolute", "relative", "resolve", "path", "extname", "join", "brotliCompressSync", "gzipSync", "stat", "html", "match", "acceptsEncoding", "requestHeader", "cached", "path", "file", "resolve", "env", "match", "query", "url", "match", "NODE_PROXY_CONTROL_PLANE_APP_HEADER", "error", "resolve", "result", "isLocalPeerAddress", "error", "logger", "match", "url", "error", "MAX_ERROR_CAUSE_DEPTH", "record", "identity", "resolve", "error", "result", "env", "rows", "errorMessage", "logger", "path", "rowsFromUnknown", "result", "env", "rows", "error", "exports", "exports", "values", "_", "exports", "values", "exports", "values", "exports", "values", "exports", "values", "LuxonError", "Error", "InvalidDateTimeError", "constructor", "reason", "toMessage", "InvalidIntervalError", "InvalidDurationError", "ConflictingSpecificationError", "InvalidUnitError", "unit", "InvalidArgumentError", "ZoneIsAbstractError", "n", "s", "l", "DATE_SHORT", "year", "month", "day", "DATE_MED", "DATE_MED_WITH_WEEKDAY", "weekday", "DATE_FULL", "DATE_HUGE", "TIME_SIMPLE", "hour", "minute", "TIME_WITH_SECONDS", "second", "TIME_WITH_SHORT_OFFSET", "timeZoneName", "TIME_WITH_LONG_OFFSET", "TIME_24_SIMPLE", "hourCycle", "TIME_24_WITH_SECONDS", "TIME_24_WITH_SHORT_OFFSET", "TIME_24_WITH_LONG_OFFSET", "DATETIME_SHORT", "DATETIME_SHORT_WITH_SECONDS", "DATETIME_MED", "DATETIME_MED_WITH_SECONDS", "DATETIME_MED_WITH_WEEKDAY", "DATETIME_FULL", "DATETIME_FULL_WITH_SECONDS", "DATETIME_HUGE", "DATETIME_HUGE_WITH_SECONDS", "Zone", "type", "name", "ianaName", "isUniversal", "offsetName", "ts", "opts", "formatOffset", "format", "offset", "equals", "otherZone", "isValid", "singleton", "SystemZone", "instance", "Intl", "DateTimeFormat", "resolvedOptions", "timeZone", "locale", "parseZoneInfo", "Date", "getTimezoneOffset", "dtfCache", "Map", "makeDTF", "zoneName", "dtf", "get", "undefined", "hour12", "era", "set", "typeToPos", "hackyOffset", "date", "formatted", "replace", "parsed", "exec", "fMonth", "fDay", "fYear", "fadOrBc", "fHour", "fMinute", "fSecond", "partsOffset", "formatToParts", "filled", "i", "length", "value", "pos", "isUndefined", "parseInt", "ianaZoneCache", "IANAZone", "create", "zone", "resetCache", "clear", "isValidSpecifier", "isValidZone", "e", "valid", "NaN", "isNaN", "adOrBc", "Math", "abs", "adjustedHour", "asUTC", "objToLocalTS", "millisecond", "asTS", "over", "intlLFCache", "getCachedLF", "locString", "key", "JSON", "stringify", "ListFormat", "intlDTCache", "getCachedDTF", "intlNumCache", "getCachedINF", "inf", "NumberFormat", "intlRelCache", "getCachedRTF", "base", "cacheKeyOpts", "RelativeTimeFormat", "sysLocaleCache", "systemLocale", "intlResolvedOptionsCache", "getCachedIntResolvedOptions", "weekInfoCache", "getCachedWeekInfo", "data", "Locale", "getWeekInfo", "weekInfo", "fallbackWeekSettings", "parseLocaleString", "localeStr", "xIndex", "indexOf", "substring", "uIndex", "options", "selectedStr", "smaller", "numberingSystem", "calendar", "intlConfigString", "outputCalendar", "includes", "mapMonths", "f", "ms", "dt", "DateTime", "utc", "push", "mapWeekdays", "listStuff", "loc", "englishFn", "intlFn", "mode", "listingMode", "supportsFastNumbers", "startsWith", "PolyNumberFormatter", "intl", "forceSimple", "padTo", "floor", "otherOpts", "Object", "keys", "intlOpts", "useGrouping", "minimumIntegerDigits", "fixed", "roundTo", "padStart", "PolyDateFormatter", "originalZone", "z", "gmtOffset", "offsetZ", "setZone", "plus", "minutes", "map", "join", "toJSDate", "parts", "part", "PolyRelFormatter", "isEnglish", "style", "hasRelative", "rtf", "count", "English", "numeric", "firstDay", "minimalDays", "weekend", "fromOpts", "weekSettings", "defaultToEN", "specifiedLocale", "Settings", "defaultLocale", "localeR", "numberingSystemR", "defaultNumberingSystem", "outputCalendarR", "defaultOutputCalendar", "weekSettingsR", "validateWeekSettings", "defaultWeekSettings", "fromObject", "numbering", "parsedLocale", "parsedNumberingSystem", "parsedOutputCalendar", "weekdaysCache", "standalone", "monthsCache", "meridiemCache", "eraCache", "fastNumbersCached", "fastNumbers", "isActuallyEn", "hasNoWeirdness", "clone", "alts", "getOwnPropertyNames", "redefaultToEN", "redefaultToSystem", "months", "monthSpecialCase", "formatStr", "mapper", "extract", "dtFormatter", "weekdays", "meridiems", "eras", "field", "df", "results", "matching", "find", "m", "toLowerCase", "numberFormatter", "relFormatter", "listFormatter", "getWeekSettings", "hasLocaleWeekInfo", "getStartOfWeek", "getMinDaysInFirstWeek", "getWeekendDays", "other", "toString", "FixedOffsetZone", "utcInstance", "parseSpecifier", "r", "match", "signedOffset", "InvalidZone", "normalizeZone", "input", "defaultZone", "isString", "lowered", "isNumber", "numberingSystems", "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "hanidec", "khmr", "knda", "laoo", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt", "latn", "numberingSystemsUTF16", "hanidecChars", "split", "parseDigits", "str", "code", "charCodeAt", "search", "min", "max", "digitRegexCache", "resetDigitRegexCache", "digitRegex", "append", "ns", "appendCache", "regex", "RegExp", "now", "twoDigitCutoffYear", "throwOnInvalid", "cutoffYear", "t", "resetCaches", "Invalid", "explanation", "nonLeapLadder", "leapLadder", "unitOutOfRange", "dayOfWeek", "d", "UTC", "setUTCFullYear", "getUTCFullYear", "js", "getUTCDay", "computeOrdinal", "isLeapYear", "uncomputeOrdinal", "ordinal", "table", "month0", "findIndex", "isoWeekdayToLocal", "isoWeekday", "startOfWeek", "gregorianToWeek", "gregObj", "minDaysInFirstWeek", "weekNumber", "weekYear", "weeksInWeekYear", "timeObject", "weekToGregorian", "weekData", "weekdayOfJan4", "yearInDays", "daysInYear", "gregorianToOrdinal", "gregData", "ordinalToGregorian", "ordinalData", "usesLocalWeekValues", "obj", "hasLocaleWeekData", "localWeekday", "localWeekNumber", "localWeekYear", "hasIsoWeekData", "hasInvalidWeekData", "validYear", "isInteger", "validWeek", "integerBetween", "validWeekday", "hasInvalidOrdinalData", "validOrdinal", "hasInvalidGregorianData", "validMonth", "validDay", "daysInMonth", "hasInvalidTimeData", "validHour", "validMinute", "validSecond", "validMillisecond", "o", "isDate", "prototype", "call", "maybeArray", "thing", "Array", "isArray", "bestBy", "arr", "by", "compare", "reduce", "best", "next", "pair", "pick", "a", "k", "hasOwnProperty", "prop", "settings", "some", "v", "from", "bottom", "top", "floorMod", "x", "isNeg", "padded", "parseInteger", "string", "parseFloating", "parseFloat", "parseMillis", "fraction", "number", "digits", "rounding", "factor", "ceil", "trunc", "round", "RangeError", "modMonth", "modYear", "firstWeekOffset", "fwdlw", "weekOffset", "weekOffsetNext", "untruncateYear", "offsetFormat", "modified", "offHourStr", "offMinuteStr", "offHour", "Number", "offMin", "offMinSigned", "is", "asNumber", "numericValue", "isFinite", "normalizeObject", "normalizer", "normalized", "u", "hours", "sign", "monthsLong", "monthsShort", "monthsNarrow", "weekdaysLong", "weekdaysShort", "weekdaysNarrow", "erasLong", "erasShort", "erasNarrow", "meridiemForDateTime", "weekdayForDateTime", "monthForDateTime", "eraForDateTime", "formatRelativeTime", "narrow", "units", "years", "quarters", "weeks", "days", "seconds", "lastable", "isDay", "isInPast", "fmtValue", "singular", "lilUnits", "fmtUnit", "stringifyTokens", "splits", "tokenToString", "token", "literal", "val", "macroTokenToFormatOpts", "D", "Formats", "DD", "DDD", "DDDD", "tt", "ttt", "tttt", "T", "TT", "TTT", "TTTT", "ff", "fff", "ffff", "F", "FF", "FFF", "FFFF", "Formatter", "parseFormat", "fmt", "current", "currentFull", "bracketed", "c", "charAt", "test", "formatOpts", "systemLoc", "formatWithSystemDefault", "formatDateTime", "formatDateTimeParts", "formatInterval", "interval", "start", "formatRange", "end", "num", "p", "signDisplay", "formatDateTimeFromString", "knownEnglish", "useDateTimeFormatter", "isOffsetFixed", "allowZ", "meridiem", "maybeMacro", "slice", "quarter", "formatDurationFromString", "dur", "invertLargest", "signMode", "tokenToField", "lildur", "info", "mapped", "inversionFactor", "isNegativeDuration", "largestUnit", "tokens", "realTokens", "found", "concat", "collapsed", "shiftTo", "filter", "durationInfo", "values", "ianaRegex", "combineRegexes", "regexes", "full", "source", "combineExtractors", "extractors", "mergedVals", "mergedZone", "cursor", "ex", "parse", "patterns", "extractor", "simpleParse", "ret", "offsetRegex", "isoExtendedZone", "isoTimeBaseRegex", "isoTimeRegex", "isoTimeExtensionRegex", "isoYmdRegex", "isoWeekRegex", "isoOrdinalRegex", "extractISOWeekData", "extractISOOrdinalData", "sqlYmdRegex", "sqlTimeRegex", "sqlTimeExtensionRegex", "int", "fallback", "extractISOYmd", "item", "extractISOTime", "milliseconds", "extractISOOffset", "local", "fullOffset", "extractIANAZone", "isoTimeOnly", "isoDuration", "extractISODuration", "yearStr", "monthStr", "weekStr", "dayStr", "hourStr", "minuteStr", "secondStr", "millisecondsStr", "hasNegativePrefix", "negativeSeconds", "maybeNegate", "force", "obsOffsets", "GMT", "EDT", "EST", "CDT", "CST", "MDT", "MST", "PDT", "PST", "fromStrings", "weekdayStr", "result", "rfc2822", "extractRFC2822", "obsOffset", "milOffset", "preprocessRFC2822", "trim", "rfc1123", "rfc850", "ascii", "extractRFC1123Or850", "extractASCII", "isoYmdWithTimeExtensionRegex", "isoWeekWithTimeExtensionRegex", "isoOrdinalWithTimeExtensionRegex", "isoTimeCombinedRegex", "extractISOYmdTimeAndOffset", "extractISOWeekTimeAndOffset", "extractISOOrdinalDateAndTime", "extractISOTimeAndOffset", "parseISODate", "parseRFC2822Date", "parseHTTPDate", "parseISODuration", "extractISOTimeOnly", "parseISOTimeOnly", "sqlYmdWithTimeExtensionRegex", "sqlTimeCombinedRegex", "extractISOTimeOffsetAndIANAZone", "parseSQL", "INVALID", "lowOrderMatrix", "casualMatrix", "daysInYearAccurate", "daysInMonthAccurate", "accurateMatrix", "orderedUnits", "reverseUnits", "reverse", "conf", "conversionAccuracy", "matrix", "Duration", "durationToMillis", "vals", "_vals$milliseconds", "sum", "normalizeValues", "reduceRight", "previous", "previousVal", "conv", "rollUp", "removeZeroes", "newVals", "entries", "config", "accurate", "invalid", "isLuxonDuration", "fromMillis", "normalizeUnit", "fromDurationLike", "durationLike", "isDuration", "fromISO", "text", "fromISOTime", "week", "toFormat", "fmtOpts", "toHuman", "showZeros", "unitDisplay", "listStyle", "toObject", "toISO", "toISOTime", "millis", "toMillis", "suppressMilliseconds", "suppressSeconds", "includePrefix", "includeOffset", "dateTime", "toJSON", "Symbol", "for", "invalidReason", "valueOf", "duration", "minus", "negate", "mapUnits", "fn", "mixed", "reconfigure", "as", "normalize", "rescale", "shiftToAll", "built", "accumulated", "lastUnit", "own", "ak", "negated", "removeZeros", "invalidExplanation", "eq", "v1", "v2", "validateStartEnd", "Interval", "isLuxonInterval", "fromDateTimes", "builtStart", "friendlyDateTime", "builtEnd", "validateError", "after", "before", "startIsValid", "endIsValid", "isInterval", "lastDateTime", "toDuration", "startOf", "useLocaleWeeks", "diff", "hasSame", "isEmpty", "isAfter", "isBefore", "contains", "splitAt", "dateTimes", "sorted", "sort", "b", "added", "splitBy", "idx", "divideEqually", "numberOfParts", "overlaps", "abutsStart", "abutsEnd", "engulfs", "intersection", "union", "merge", "intervals", "final", "sofar", "xor", "currentCount", "ends", "time", "flattened", "difference", "toLocaleString", "toISODate", "dateFormat", "separator", "mapEndpoints", "mapFn", "Info", "hasDST", "proto", "isValidIANAZone", "locObj", "getMinimumDaysInFirstWeek", "getWeekendWeekdays", "monthsFormat", "weekdaysFormat", "features", "relative", "localeWeek", "dayDiff", "earlier", "later", "utcDayStart", "toUTC", "keepLocalTime", "highOrderDiffs", "differs", "lowestOrder", "highWater", "differ", "remainingMillis", "lowerOrderUnits", "MISSING_FTP", "intUnit", "post", "deser", "NBSP", "String", "fromCharCode", "spaceOrNBSP", "spaceOrNBSPRegExp", "fixListRegex", "stripInsensitivities", "oneOf", "strings", "startIndex", "groups", "h", "simple", "escapeToken", "unitForToken", "one", "two", "three", "four", "six", "oneOrTwo", "oneToThree", "oneToSix", "oneToNine", "twoToFour", "fourToSix", "unitate", "partTypeStyleToTokenVal", "short", "long", "dayperiod", "dayPeriod", "hour24", "tokenForPart", "resolvedOpts", "isSpace", "actualType", "buildRegex", "re", "handlers", "matches", "all", "matchIndex", "dateTimeFromMatches", "toField", "specificOffset", "Z", "q", "M", "G", "y", "S", "dummyDateTimeCache", "getDummyDateTime", "maybeExpandMacroToken", "formatOptsToTokens", "expandMacroTokens", "TokenParser", "disqualifyingUnit", "regexString", "explainFromTokens", "rawMatches", "parser", "parseFromTokens", "formatter", "MAX_DATE", "unsupportedZone", "possiblyCachedWeekData", "possiblyCachedLocalWeekData", "localWeekData", "inst", "old", "fixOffset", "localTS", "tz", "utcGuess", "o2", "o3", "tsToObj", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "objToTS", "adjustTime", "oPre", "millisToAdd", "parseDataToDateTime", "parsedZone", "interpretationZone", "toTechFormat", "extended", "precision", "longFormat", "extendedZone", "showSeconds", "defaultUnitValues", "defaultWeekUnitValues", "defaultOrdinalUnitValues", "orderedWeekUnits", "orderedOrdinalUnits", "weeknumber", "weeksnumber", "weeknumbers", "weekyear", "weekyears", "normalizeUnitWithLocalWeeks", "guessOffsetForZone", "zoneOffsetTs", "offsetGuess", "zoneOffsetGuessCache", "quickDT", "offsetProvis", "diffRelative", "calendary", "lastOpts", "argList", "args", "unchanged", "ot", "_zone", "isLuxonDateTime", "arguments", "fromJSDate", "zoneToUse", "fromSeconds", "tsNow", "containsOrdinal", "containsGregorYear", "containsGregorMD", "containsGregor", "definiteWeekDef", "useWeekData", "defaultValues", "objNow", "foundFirst", "higherOrderInvalid", "gregorian", "tsFinal", "offsetFinal", "fromRFC2822", "fromHTTP", "fromFormat", "localeToUse", "fromString", "fromSQL", "isDateTime", "parseFormatForOpts", "localeOpts", "tokenList", "expandFormat", "expanded", "isWeekend", "monthShort", "monthLong", "weekdayShort", "weekdayLong", "offsetNameShort", "offsetNameLong", "isInDST", "getPossibleOffsets", "dayMs", "minuteMs", "oEarlier", "oLater", "o1", "ts1", "ts2", "c1", "c2", "isInLeapYear", "weeksInLocalWeekYear", "resolvedLocaleOptions", "toLocal", "keepCalendarTime", "newTS", "asObj", "setLocale", "settingWeekStuff", "normalizedUnit", "endOf", "toLocaleParts", "ext", "toISOWeekDate", "toRFC2822", "toHTTP", "toSQLDate", "toSQLTime", "includeZone", "includeOffsetSpace", "toSQL", "toSeconds", "toUnixInteger", "toBSON", "includeConfig", "otherDateTime", "durOpts", "otherIsLater", "diffed", "diffNow", "until", "inputMs", "adjustedToZone", "toRelative", "padding", "toRelativeCalendar", "every", "fromFormatExplain", "fromStringExplain", "buildFormatParser", "fromFormatParser", "formatParser", "dateTimeish", "VERSION", "exports", "TimeUnit", "DateMathOp", "timestamp", "exports", "values", "exports", "values", "exports", "desc", "exports", "range", "max", "_", "values", "exports", "values", "date", "isMatch", "schedule", "exports", "exports", "PredefinedExpressions", "CronUnit", "Months", "DayOfWeek", "match", "_", "min", "max", "values", "result", "constraints", "v", "exports", "desc", "v", "o", "mod", "result", "readFile", "readFileSync", "require_dist", "exports", "desc", "resolve", "error", "schedule", "env", "log", "start", "nextRun", "path", "result", "rows", "result", "numberFrom", "env", "errorMessage", "error", "WORKFLOW_RESUME_ACTION_PREFIX", "logger", "result", "APP_MEMORY_EXCEEDED_STATUS", "rows", "env", "resolve", "errorMessage", "error", "env", "timestamp", "rows", "logger", "path", "result", "resolve", "isObject", "asString", "result", "raw", "keys", "mod", "error", "email", "isAuthorizedInternalToken", "logger", "rows", "match", "resolve", "logger", "env", "config", "resolve", "logger", "env", "config", "dirname", "resolve", "fileURLToPath", "__dirname", "mod", "resolve", "resolve", "logger", "env", "config", "dirname", "resolve", "fileURLToPath", "__dirname", "mod", "platformNodeProxyWsTunnel", "resolve", "app", "logger", "rows", "error", "path", "mod", "getRuntimeMetricsSnapshot", "startRuntimeMetricsSampler", "isError", "keys", "path", "match", "url", "start", "result", "rest", "path", "v", "url", "path", "keys", "raw", "text", "v", "v2", "text", "object", "html", "html2", "path", "clone", "app", "url", "env", "rest", "path", "path2", "matcher", "Node", "Node", "path", "_", "path", "_", "map", "keys", "path2", "path", "_", "Node", "_Node", "path", "v", "matcher", "Node", "path", "Hono", "process", "Deno", "navigator", "times", "delimiter", "v", "start", "path", "url", "existsSync", "readFileSync", "resolve", "env", "error", "resolve", "rows", "result", "values", "logger", "_", "reject", "query", "env", "url", "match", "query", "hash", "sql", "result", "text", "raw", "existsSync", "readFileSync", "resolve", "resolve", "env", "existsSync", "readFileSync", "logger", "existsSync", "isAbsolute", "relative", "resolve", "pathToFileURL", "sample", "required", "optional", "mod", "crud", "meta", "mod", "existsSync", "resolve", "resolve", "resolve", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "core_exports", "cuid", "cuid2", "date", "decode", "decodeAsync", "describe", "e164", "email", "emoji", "encode", "encodeAsync", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "parse", "parseAsync", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "string", "ulid", "_undefined", "uuid", "_void", "xid", "core_exports", "_emoji", "_null", "_undefined", "process", "initializer", "_", "keys", "_a", "isObject", "isPlainObject", "_", "v", "values", "array", "set", "start", "object", "obj", "path", "keys", "isObject", "isPlainObject", "ctor", "Class", "_a", "config", "rest", "base64", "base64url", "hex", "error", "issue", "path", "result", "_a", "result", "time", "version", "delimiter", "time", "_a", "inst", "size", "result", "property", "_a", "checks", "_", "checkResult", "canary", "result", "v", "url", "time", "base64", "keys", "r", "desc", "isObject", "allowsEval", "first", "results", "map", "values", "left", "right", "isPlainObject", "rest", "keyResult", "valueResult", "output", "start", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "v", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "text", "number", "last", "last2", "error", "result", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "_a", "meta", "Class", "_emoji", "_undefined", "_null", "size", "property", "Class", "rest", "values", "v", "issue", "codec", "process", "_a", "result", "meta", "root", "id", "schema", "json", "values", "v", "file", "process", "allKeys", "rest", "registry", "ctx", "_", "process", "result", "_", "schemas_exports", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "cuid", "cuid2", "date", "describe", "e164", "email", "emoji", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "string", "ulid", "_undefined", "uuid", "_void", "xid", "checks_exports", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "parse", "parseAsync", "safeParse", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "group", "v", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "def", "meta", "check", "_default", "_catch", "json", "_emoji", "datetime", "date", "time", "duration", "string", "email", "guid", "uuid", "emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "ipv4", "mac", "ipv6", "cidrv4", "cidrv6", "base64", "base64url", "e164", "hostname", "hex", "number", "boolean", "bigint", "_undefined", "json", "_null", "json", "_void", "json", "date", "_enum", "rest", "string", "keys", "values", "v", "json", "size", "issue", "output", "nullish", "_default", "_catch", "json", "codec", "json", "describe", "meta", "string", "number", "boolean", "_null", "map", "ZodFirstPartyTypeKind", "schemas_exports", "checks_exports", "path", "zodSchema", "v", "objectSchema", "result", "rest", "version", "bigint", "boolean", "date", "number", "string", "string", "number", "boolean", "bigint", "date", "url", "raw", "v", "result", "mutation", "procedure", "existsSync", "readFileSync", "readdirSync", "join", "resolve", "match", "join", "existsSync", "result", "readFileSync", "resolve", "readdirSync", "module", "fs", "path", "SYSTEM_TABLES", "match", "l", "file", "result", "basename", "issue", "readdirSync", "readFileSync", "join", "relative", "file", "range", "issue", "result", "log", "start", "match", "readdirSync", "join", "file", "existsSync", "basename", "isAbsolute", "relative", "resolve", "resolve", "existsSync", "root", "relative", "isAbsolute", "basename", "identity", "isAbsolute", "resolve", "isAbsolute", "resolve", "existsSync", "relative", "unsafeDbResult", "workflowShadowingResult", "error", "pathToFileURL", "existsSync", "readFileSync", "set", "existsSync", "raw", "readFileSync", "error", "errorMessage", "Hono", "logger", "existsSync", "resolve", "join", "match", "result", "root", "join", "path", "serveStatic", "serveStatic2", "path", "file", "join", "upgradeWebSocket", "result", "crypto", "createRequire", "size", "raw", "error", "crypto", "chunk", "crypto", "crypto", "Readable", "get", "rows", "record", "error", "require", "Readable", "hash", "chunk", "crypto", "meta", "raw", "meta", "url", "key", "error", "finalize", "meta", "session", "url", "error", "crypto", "raw", "json", "rows", "values", "_", "last", "property", "error", "require", "createRequire", "identity", "size", "meta", "file", "crypto", "DIRECT_UPLOAD_TTL_MS", "normalizeChecksum", "cached", "raw", "stat", "meta", "normalizeUploadInput", "normalizeStoreOptions", "sha256", "recordStored", "error", "file", "options", "fs", "path", "fs", "error", "resolve", "buildCacheKey", "meta", "config", "raw", "rows", "cached", "user", "file", "error", "env", "env", "raw", "isPlainObject", "mutation", "procedure", "cron", "cronJobs", "error", "timestamp", "options", "schedule", "mod", "mod", "env", "logger", "result", "logger", "error", "existsSync", "resolve", "fileExists", "existsSync", "resolve", "log", "path", "result", "logger", "user", "error", "timingSafeEqual", "IDENTIFIER_RE", "rows", "keys", "_", "access", "raw", "host", "port", "normalizeMime", "errorMessage", "match", "error", "_", "where", "rows", "first", "isValidStorageId", "parseStorageVisibility", "error", "buildAdminFilesWhere", "where", "rows", "deleteStorageObject", "meta", "file", "last", "existsSync", "resolve", "resolve", "existsSync", "path", "error", "Hono", "timingSafeEqual", "rows", "error", "info", "resolve", "existsSync", "mutation", "logger", "app", "access", "resolve", "identity", "logger", "error", "path", "user", "sql", "result", "result", "query", "result", "text", "max", "result", "text", "partial", "sql", "rows", "sql", "chunk", "identity", "start", "query", "sql", "sql", "query", "config", "joinSql", "chunk", "IDENTIFIER_RE", "rowsFromExecute", "result", "errorCode", "config", "query", "normalizeLimit", "joinSql", "sql", "chunk", "identity", "values", "range", "rows", "meta", "resolveMetricScope", "build", "user", "error", "user", "result", "rowsFromResult", "result", "env", "date", "toIsoString", "randomUUID", "error", "rows", "rowsFromResult", "toIsoString", "error", "error", "logger", "error", "resolveStatus", "error", "resolveTtlSeconds", "resolveAuthorizeErrorBody", "user", "result", "user", "record", "createHash", "sql", "size", "result", "env", "json", "error", "raw", "createHash", "sql", "rowsFromResult", "result", "sql", "rows", "chunk", "createHash", "sql", "rowsFromResult", "result", "parseJsonField", "toIsoString", "toOptionalIsoString", "chunk", "resolveOwnerUserId", "sql", "procedure", "toIsoString", "normalizeVisibility", "sql", "raw", "result", "joinSql", "rows", "chunk", "SUPPORTED_VISIBILITIES", "procedure", "normalizeVisibility", "normalizeReindexMode", "normalizeMode", "normalizeMetadata", "normalizeJobStatus", "resolveOwnerUserId", "rowsFromResult", "result", "createHash", "sql", "error", "config", "config", "isRecord", "record", "path", "meta", "result", "json", "match", "_ProcedureRpcLinkCodec_deserializeFormData", "codec", "TRANSIENT_DB_MESSAGE_PATTERNS", "error", "record", "record", "result", "error", "error", "sleep", "resolve", "_", "reject", "logger", "result", "values", "isRecord", "objectHasOwn", "body", "user", "mutation", "record", "Hono", "sql", "WORKFLOW_WAKE_SIGNAL_PAYLOAD", "rowsFromResult", "result", "result", "sql", "rowsFromResult", "env", "raw", "sql", "rowsFromResult", "result", "sql", "error", "error", "errorMessage", "parseJsonField", "restoreWorkflowAuth", "errorCode", "sleep", "duration", "logger", "result", "isMissingWorkflowV2SchemaError", "error", "result", "workflow", "sql", "sql", "rowsFromResult", "result", "isMissingWorkflowV2SchemaError", "error", "env", "rowsFromResult", "result", "sql", "logger", "workflow", "readFileSync", "resolve", "existsSync", "readFileSync", "isAbsolute", "relative", "resolve", "cached", "path", "root", "fileExists", "existsSync", "path", "readFile", "readFileSync", "query", "mutation", "resolve", "path", "logger", "file", "readFileSync", "html", "_", "error", "env", "keys", "registry", "query", "raw", "resolve", "html", "path", "schedule", "resolve", "existsSync", "logger", "error", "mutation", "serveStatic", "env", "url", "mod", "logger", "query", "result", "error", "upgradeWebSocket", "websocket", "pgTable", "boolean", "sql", "AsyncLocalStorage", "result", "email", "result", "createHmac", "randomUUID", "sql", "mkdir", "readdir", "readFile", "rename", "unlink", "join", "resolve", "randomUUID", "env", "error", "config", "file", "env", "text", "createHmac", "path", "rowsFromResult", "result", "rows", "dbInstance", "sql", "email", "randomUUID", "mkdir", "open", "join", "file", "normalizeDomain", "raw", "domain", "url", "raw", "addDomainOrigins", "domain", "addConfiguredOrigin", "url", "createHash", "sql", "createDecipheriv", "randomBytes", "readFileSync", "writeFileSync", "mkdirSync", "existsSync", "dirname", "isAbsolute", "resolve", "isAbsolute", "resolve", "createHash", "readFileSync", "dirname", "existsSync", "mkdirSync", "randomBytes", "writeFileSync", "createDecipheriv", "rowsFromResult", "result", "createHash", "record", "sql", "config", "isRecord", "user", "user", "url", "error", "asRecord", "config", "account", "isRecord", "match", "session", "timestamp", "sessionToken", "createHash", "randomUUID", "sql", "sql", "env", "rowsFromResult", "result", "error", "rowsFromResult", "result", "createHash", "normalizeProvider", "sql", "randomUUID", "error", "user", "createHash", "randomUUID", "sql", "rowsFromResult", "result", "createHash", "normalizeProvider", "sql", "randomUUID", "error", "user", "sql", "user", "v", "error", "env", "result", "createHash", "createHmac", "timingSafeEqual", "createHash", "signPayload", "createHmac", "safeEqual", "timingSafeEqual", "version", "timestampMs", "signPayload", "safeEqual", "url", "sql", "rowsFromResult", "result", "error", "email", "url", "capturedBaseURL", "error", "randomBytes", "sql", "rowsFromResult", "result", "rows", "randomBytes", "sql", "url", "user", "apiKey", "email", "decodeBase64Url", "encodeBase64Url", "global", "encodeBase64Url", "decodeBase64Url", "obj", "decode", "decode", "verifyWithJwks", "verify", "decode", "sign", "error", "user", "result", "user", "custom", "rows", "sql", "verify", "session", "_", "reject", "url", "sign", "email", "error", "redirectURL", "record", "jwt", "responseData", "error", "random", "sample", "sleep", "resolve", "logger", "rows", "error", "tableInitialized", "ensureTable", "getAllSettings", "rows", "Hono", "result", "path", "error", "fetchPlatformInternal", "notifyGateway", "existsSync", "readFileSync", "resolve", "isObject", "asString", "raw", "config", "document", "ocr", "openai", "gemini", "model", "url", "token", "template", "env", "env", "normalizeHost", "raw", "result", "record", "start", "error", "normalizePath", "path", "classification", "env", "logger", "error", "raw", "chunk", "Hono", "path", "rest", "start", "resolve", "existsSync", "readFileSync", "platformWebsocketGateway", "platformNodeProxyWsTunnel", "upgradeWebSocket", "websocket"]
}
