Files
ospab.host/node_modules/prisma/prisma-client/runtime/binary.mjs.map
2025-09-15 18:10:26 +03:00

8 lines
2.4 MiB
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"version": 3,
"sources": ["../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js", "../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js", "../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js", "../../../node_modules/.pnpm/which@2.0.2/node_modules/which/which.js", "../../../node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/resolveCommand.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/escape.js", "../../../node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js", "../../../node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/readShebang.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/parse.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/enoent.js", "../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/index.js", "../../../node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js", "../../../node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js", "../../../node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js", "../../../node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js", "../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/src/core.js", "../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/src/realtime.js", "../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/src/signals.js", "../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/src/main.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js", "../../../node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js", "../../../node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js", "../../../node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js", "../../../node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js", "../../../node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js", "../../../node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js", "../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js", "../../internals/package.json", "../../../node_modules/.pnpm/temp-dir@2.0.0/node_modules/temp-dir/index.js", "../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry_operation.js", "../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry.js", "../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/index.js", "../../../node_modules/.pnpm/p-retry@4.6.2/node_modules/p-retry/index.js", "../../../node_modules/.pnpm/@prisma+engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43/node_modules/@prisma/engines-version/package.json", "../../../node_modules/.pnpm/@prisma+engines-version@6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43/node_modules/@prisma/engines-version/index.js", "../../../node_modules/.pnpm/min-indent@1.0.1/node_modules/min-indent/index.js", "../../../node_modules/.pnpm/indent-string@4.0.0/node_modules/indent-string/index.js", "../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/package.json", "../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/lib/main.js", "../../../node_modules/.pnpm/new-github-issue-url@0.2.1/node_modules/new-github-issue-url/index.js", "../../../node_modules/.pnpm/js-levenshtein@1.1.6/node_modules/js-levenshtein/index.js", "../../ts-builders/src/TypeBuilder.ts", "../../ts-builders/src/KeyType.ts", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/symbols.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/errors.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/constants.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/tree.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/diagnostics.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/request.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/wrap-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/dispatcher.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/unwrap-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/dispatcher-base.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/util/timers.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/core/connect.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/src/llhttp/utils.ts", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/src/llhttp/constants.ts", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/llhttp/llhttp-wasm.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/constants.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/global.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/data-url.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/webidl.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/formdata.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/formdata-parser.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/body.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/client-h1.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/client-h2.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/client.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/fixed-queue.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/pool-stats.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/pool-base.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/pool.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/balanced-pool.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/agent.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/proxy-agent.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/retry-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/dispatcher/retry-agent.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/readable.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/api-request.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/abort-signal.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/api-stream.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/api-pipeline.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/api-upgrade.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/api-connect.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/api/index.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-errors.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-symbols.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-utils.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-interceptor.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-client.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-pool.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/mock/mock-agent.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/global.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/decorator-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/redirect-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/redirect.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/response-error.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/retry.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/dump.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/dns.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/util/cache.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/util/date.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/cache-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/cache/memory-cache-store.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/handler/cache-revalidation-handler.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/interceptor/cache.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/cache/sqlite-cache-store.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/headers.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/response.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/dispatcher-weakref.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/request.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/fetch/index.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cache/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cache/cache.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cache/cachestorage.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cookies/constants.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cookies/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cookies/parse.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/cookies/index.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/events.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/constants.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/frame.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/connection.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/permessage-deflate.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/receiver.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/sender.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/websocket.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/stream/websocketerror.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/websocket/stream/websocketstream.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/eventsource/util.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/lib/web/eventsource/eventsource.js", "../../../node_modules/.pnpm/undici@7.4.0/node_modules/undici/index.js", "../src/runtime/core/extensions/index.ts", "../src/runtime/core/extensions/defineExtension.ts", "../src/runtime/core/extensions/getExtensionContext.ts", "../src/runtime/core/public/index.ts", "../src/runtime/core/public/validator.ts", "../../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs", "../../debug/src/index.ts", "../../get-platform/src/binaryTargets.ts", "../../get-platform/src/getNodeAPIName.ts", "../../get-platform/src/getPlatform.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/internals/symbols.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/internals/helpers.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/is-matching.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/patterns.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/errors.ts", "../../../node_modules/.pnpm/ts-pattern@5.6.2/node_modules/ts-pattern/src/match.ts", "../../get-platform/src/logger.ts", "../../internals/src/utils/getVersionFromPackageJson.ts", "../../internals/src/client/getClientEngineType.ts", "../../engines/src/index.ts", "../../internals/src/utils/chmodPlusX.ts", "../../../node_modules/.pnpm/strip-indent@4.0.0/node_modules/strip-indent/index.js", "../../internals/src/utils/prismaPostgres.ts", "../../internals/src/get-generators/utils/printGeneratorConfig.ts", "../../internals/src/logger.ts", "../../internals/src/utils/assertNever.ts", "../../internals/src/utils/byline.ts", "../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../../internals/src/utils/path.ts", "../../internals/src/utils/tryLoadEnvs.ts", "../../internals/src/dotenvExpand.ts", "../../internals/src/utils/hasOwnProperty.ts", "../../internals/src/utils/mapObjectValues.ts", "../../internals/src/utils/max.ts", "../../internals/src/utils/setClassName.ts", "../../internals/src/warnOnce.ts", "../src/runtime/core/errors/PrismaClientInitializationError.ts", "../src/runtime/core/errors/PrismaClientKnownRequestError.ts", "../src/runtime/core/errors/PrismaClientRustPanicError.ts", "../src/runtime/core/errors/PrismaClientUnknownRequestError.ts", "../src/runtime/core/errors/PrismaClientValidationError.ts", "../../client-common/src/Cache.ts", "../../client-common/src/casing.ts", "../../client-common/src/Dictionary.ts", "../../client-common/src/lazyProperty.ts", "../../client-common/src/runtimeDataModel.ts", "../src/runtime/utils/date.ts", "../../../node_modules/.pnpm/decimal.js@10.5.0/node_modules/decimal.js/decimal.mjs", "../src/runtime/utils/decimalJsLike.ts", "../../dmmf/src/index.ts", "../../dmmf/src/convert.ts", "../../dmmf/src/dmmf.ts", "../src/runtime/utils/createErrorMessageWithContext.ts", "../src/runtime/utils/SourceFileSlice.ts", "../src/runtime/highlight/theme.ts", "../src/runtime/highlight/prism.ts", "../src/runtime/highlight/highlight.ts", "../src/runtime/utils/dedent.ts", "../src/runtime/core/errorRendering/applyValidationError.ts", "../src/runtime/core/errorRendering/applyUnionError.ts", "../src/runtime/core/errorRendering/ObjectFieldSuggestion.ts", "../../ts-builders/src/index.ts", "../../ts-builders/src/Writer.ts", "../src/runtime/core/errorRendering/ArrayField.ts", "../src/runtime/core/errorRendering/base.ts", "../src/runtime/core/errorRendering/FormattedString.ts", "../src/runtime/core/errorRendering/Value.ts", "../src/runtime/core/errorRendering/ArrayValue.ts", "../src/runtime/core/errorRendering/ObjectValue.ts", "../src/runtime/core/errorRendering/ScalarValue.ts", "../src/runtime/core/errorRendering/SuggestionObjectValue.ts", "../src/runtime/core/model/FieldRef.ts", "../src/runtime/core/types/exported/ObjectEnums.ts", "../src/runtime/core/errorRendering/ObjectField.ts", "../src/runtime/core/errorRendering/ArgumentsRenderingTree.ts", "../src/runtime/core/errorRendering/throwValidationException.ts", "../src/runtime/core/model/utils/dmmfToJSModelName.ts", "../src/runtime/core/extensions/resultUtils.ts", "../src/runtime/core/extensions/MergedExtensionsList.ts", "../src/runtime/core/model/Param.ts", "../src/runtime/core/types/exported/Skip.ts", "../src/runtime/core/jsonProtocol/serializeJsonQuery.ts", "../src/runtime/core/metrics/MetricsClient.ts", "../src/runtime/core/runtimeDataModel.ts", "../src/runtime/core/types/exported/TypedSql.ts", "../src/runtime/getPrismaClient.ts", "../../../node_modules/.pnpm/sql-template-tag@5.2.1/node_modules/sql-template-tag/src/index.ts", "../src/runtime/core/compositeProxy/addObjectProperties.ts", "../src/runtime/core/compositeProxy/addProperty.ts", "../src/runtime/core/compositeProxy/cacheProperties.ts", "../src/runtime/core/model/utils/defaultProxyHandlers.ts", "../src/runtime/core/compositeProxy/createCompositeProxy.ts", "../src/runtime/core/compositeProxy/removeProperties.ts", "../src/runtime/core/engines/common/utils/getBatchRequestPayload.ts", "../src/runtime/core/errorRendering/prettyPrintArguments.ts", "../src/runtime/core/errors/utils/prismaGraphQLToJSError.ts", "../../../node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js", "../src/runtime/utils/CallSite.ts", "../src/runtime/core/model/aggregates/utils/aggregateMap.ts", "../src/runtime/core/model/aggregates/aggregate.ts", "../src/runtime/core/model/aggregates/count.ts", "../src/runtime/core/model/aggregates/groupBy.ts", "../src/runtime/core/model/applyAggregates.ts", "../src/runtime/core/model/applyFieldsProxy.ts", "../src/runtime/utils/deep-set.ts", "../src/runtime/core/model/applyFluent.ts", "../src/runtime/core/model/applyModel.ts", "../src/runtime/core/model/utils/jsToDMMFModelName.ts", "../src/runtime/core/model/applyModelsAndClientExtensions.ts", "../src/runtime/core/extensions/$extends.ts", "../src/runtime/core/extensions/applyResultExtensions.ts", "../src/runtime/core/extensions/visitQueryResult.ts", "../src/runtime/core/extensions/applyAllResultExtensions.ts", "../src/runtime/core/types/exported/itxClientDenyList.ts", "../src/runtime/utils/deepCloneArgs.ts", "../src/runtime/core/extensions/applyQueryExtensions.ts", "../src/runtime/core/init/checkPlatformCaching.ts", "../src/runtime/core/init/getDatasourceOverrides.ts", "../src/runtime/core/engines/binary/BinaryEngine.ts", "../../../node_modules/.pnpm/tempy@3.0.0/node_modules/tempy/index.js", "../../../node_modules/.pnpm/crypto-random-string@4.0.0/node_modules/crypto-random-string/index.js", "../../../node_modules/.pnpm/unique-string@3.0.0/node_modules/unique-string/index.js", "../src/runtime/core/engines/common/utils/log.ts", "../src/runtime/core/errors/PrismaClientRustError.ts", "../src/runtime/core/engines/common/resolveEnginePath.ts", "../src/runtime/core/engines/common/errors/engine-not-found/addRuntimeToYourBinaryTargets.ts", "../src/runtime/core/engines/common/errors/engine-not-found/queryEngineCannotBeFound.ts", "../src/runtime/core/engines/common/errors/engine-not-found/theseLocationsHaveBeenSearched.ts", "../src/runtime/core/engines/common/errors/engine-not-found/binaryTargetsWasIncorrectlyPinned.ts", "../src/runtime/core/engines/common/errors/weWouldAppreciateIfYouCouldShareInfo.ts", "../src/runtime/core/engines/common/errors/engine-not-found/howToFixEngineNotFoundNextjs.ts", "../src/runtime/core/engines/common/errors/engine-not-found/bundlerHasTamperedWithEngineCopy.ts", "../src/runtime/core/engines/common/errors/engine-not-found/nativeGeneratedOnDifferentPlatform.ts", "../src/runtime/core/engines/common/errors/engine-not-found/toolingHasTamperedWithEngineCopy.ts", "../src/runtime/core/engines/common/utils/maskQuery.ts", "../src/runtime/core/engines/common/utils/normalizeLogs.ts", "../src/runtime/core/engines/common/utils/util.ts", "../src/runtime/core/engines/common/utils/getErrorMessageWithLink.ts", "../src/runtime/core/engines/binary/Connection.ts", "../../client-engine-runtime/src/utils.ts", "../../client-engine-runtime/src/json-protocol.ts", "../package.json", "../src/runtime/utils/getRuntime.ts", "../src/runtime/core/init/resolveDatasourceUrl.ts", "../src/runtime/core/errors/PrismaClientError.ts", "../src/runtime/core/engines/data-proxy/errors/DataProxyError.ts", "../src/runtime/core/engines/data-proxy/errors/utils/setRetryable.ts", "../src/runtime/core/engines/data-proxy/errors/InvalidDatasourceError.ts", "../src/runtime/core/engines/common/accelerate/getUrlAndApiKey.ts", "../src/runtime/core/engines/common/accelerate/HeaderBuilder.ts", "../src/runtime/core/engines/data-proxy/utils/EngineTimestamp.ts", "../src/runtime/core/engines/data-proxy/errors/ForcedRetryError.ts", "../src/runtime/core/engines/data-proxy/errors/NotImplementedYetError.ts", "../src/runtime/core/engines/data-proxy/errors/DataProxyAPIError.ts", "../src/runtime/core/engines/data-proxy/errors/SchemaMissingError.ts", "../src/runtime/core/engines/data-proxy/errors/BadRequestError.ts", "../src/runtime/core/engines/data-proxy/errors/EngineHealthcheckTimeoutError.ts", "../src/runtime/core/engines/data-proxy/errors/EngineStartupError.ts", "../src/runtime/core/engines/data-proxy/errors/EngineVersionNotSupportedError.ts", "../src/runtime/core/engines/data-proxy/errors/GatewayTimeoutError.ts", "../src/runtime/core/engines/data-proxy/errors/InteractiveTransactionError.ts", "../src/runtime/core/engines/data-proxy/errors/InvalidRequestError.ts", "../src/runtime/core/engines/data-proxy/errors/NotFoundError.ts", "../src/runtime/core/engines/data-proxy/errors/ServerError.ts", "../src/runtime/core/engines/data-proxy/errors/UnauthorizedError.ts", "../src/runtime/core/engines/data-proxy/errors/UsageExceededError.ts", "../src/runtime/core/engines/data-proxy/errors/utils/responseToError.ts", "../src/runtime/core/engines/data-proxy/utils/backOff.ts", "../src/runtime/core/engines/data-proxy/utils/base64.ts", "../src/runtime/core/engines/data-proxy/utils/checkForbiddenMetrics.ts", "../../engines/package.json", "../src/runtime/core/engines/data-proxy/errors/NetworkError.ts", "../src/runtime/core/engines/data-proxy/utils/request.ts", "../src/runtime/core/engines/data-proxy/utils/getClientVersion.ts", "../src/runtime/core/engines/data-proxy/DataProxyEngine.ts", "../src/runtime/core/init/validateEngineInstanceConfig.ts", "../src/runtime/core/init/getEngineInstance.ts", "../src/runtime/core/init/getPreviewFeatures.ts", "../src/runtime/core/raw-query/rawCommandArgsMapper.ts", "../src/runtime/utils/mssqlPreparedStatement.ts", "../src/runtime/utils/serializeRawParameters.ts", "../src/runtime/core/raw-query/rawQueryArgsMapper.ts", "../src/runtime/core/request/createPrismaPromise.ts", "../src/runtime/core/tracing/TracingHelper.ts", "../src/runtime/core/transaction/utils/createLockCountPromise.ts", "../src/runtime/getLogLevel.ts", "../src/runtime/core/errors/ErrorWithBatchIndex.ts", "../src/runtime/core/jsonProtocol/getBatchId.ts", "../src/runtime/core/jsonProtocol/isWrite.ts", "../src/runtime/DataLoader.ts", "../src/runtime/utils/deserializeRawResults.ts", "../src/runtime/RequestHandler.ts", "../src/runtime/utils/clientVersion.ts", "../src/runtime/utils/validatePrismaClientOptions.ts", "../src/runtime/core/errors/PrismaClientConstructorValidationError.ts", "../src/runtime/utils/waitForBatch.ts", "../src/runtime/strictEnum.ts", "../src/runtime/warnEnvConflicts.ts"],
"sourcesContent": ["module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n", "module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n", "var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n", "const isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n const colon = opt.colon || COLON\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n : (\n [\n // windows always checks the cwd first\n ...(isWindows ? [process.cwd()] : []),\n ...(opt.path || process.env.PATH ||\n /* istanbul ignore next: very unusual */ '').split(colon),\n ]\n )\n const pathExtExe = isWindows\n ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n : ''\n const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n if (isWindows) {\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n return {\n pathEnv,\n pathExt,\n pathExtExe,\n }\n}\n\nconst which = (cmd, opt, cb) => {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n if (!opt)\n opt = {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n const step = i => new Promise((resolve, reject) => {\n if (i === pathEnv.length)\n return opt.all && found.length ? resolve(found)\n : reject(getNotFoundError(cmd))\n\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n resolve(subStep(p, i, 0))\n })\n\n const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n if (ii === pathExt.length)\n return resolve(step(i + 1))\n const ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return resolve(p + ext)\n }\n return resolve(subStep(p, i, ii + 1))\n })\n })\n\n return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n opt = opt || {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (let i = 0; i < pathEnv.length; i ++) {\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n for (let j = 0; j < pathExt.length; j ++) {\n const cur = p + pathExt[j]\n try {\n const is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n", "'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n", "'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const env = parsed.options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n // Worker threads do not have process.chdir()\n const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (shouldSwitchCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: env[getPathKey({ env })],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n if (shouldSwitchCwd) {\n process.chdir(cwd);\n }\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n", "'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n", "'use strict';\nmodule.exports = /^#!(.*)/;\n", "'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n", "'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n const buffer = Buffer.alloc(size);\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n", "'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n", "'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed, 'spawn');\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n", "'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n", "'use strict';\n\nmodule.exports = input => {\n\tconst LF = typeof input === 'string' ? '\\n' : '\\n'.charCodeAt();\n\tconst CR = typeof input === 'string' ? '\\r' : '\\r'.charCodeAt();\n\n\tif (input[input.length - 1] === LF) {\n\t\tinput = input.slice(0, input.length - 1);\n\t}\n\n\tif (input[input.length - 1] === CR) {\n\t\tinput = input.slice(0, input.length - 1);\n\t}\n\n\treturn input;\n};\n", "'use strict';\nconst path = require('path');\nconst pathKey = require('path-key');\n\nconst npmRunPath = options => {\n\toptions = {\n\t\tcwd: process.cwd(),\n\t\tpath: process.env[pathKey()],\n\t\texecPath: process.execPath,\n\t\t...options\n\t};\n\n\tlet previous;\n\tlet cwdPath = path.resolve(options.cwd);\n\tconst result = [];\n\n\twhile (previous !== cwdPath) {\n\t\tresult.push(path.join(cwdPath, 'node_modules/.bin'));\n\t\tprevious = cwdPath;\n\t\tcwdPath = path.resolve(cwdPath, '..');\n\t}\n\n\t// Ensure the running `node` binary is used\n\tconst execPathDir = path.resolve(options.cwd, options.execPath, '..');\n\tresult.push(execPathDir);\n\n\treturn result.concat(options.path).join(path.delimiter);\n};\n\nmodule.exports = npmRunPath;\n// TODO: Remove this for the next major release\nmodule.exports.default = npmRunPath;\n\nmodule.exports.env = options => {\n\toptions = {\n\t\tenv: process.env,\n\t\t...options\n\t};\n\n\tconst env = {...options.env};\n\tconst path = pathKey({env});\n\n\toptions.path = env[path];\n\tenv[path] = module.exports(options);\n\n\treturn env;\n};\n", "'use strict';\n\nconst mimicFn = (to, from) => {\n\tfor (const prop of Reflect.ownKeys(from)) {\n\t\tObject.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n\t}\n\n\treturn to;\n};\n\nmodule.exports = mimicFn;\n// TODO: Remove this for the next major release\nmodule.exports.default = mimicFn;\n", "'use strict';\nconst mimicFn = require('mimic-fn');\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFn(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nmodule.exports = onetime;\n// TODO: Remove this for the next major release\nmodule.exports.default = onetime;\n\nmodule.exports.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n", "/* eslint-disable max-lines */\n// List of known process signals with information about them\nexport const SIGNALS = [\n {\n name: 'SIGHUP',\n number: 1,\n action: 'terminate',\n description: 'Terminal closed',\n standard: 'posix',\n },\n {\n name: 'SIGINT',\n number: 2,\n action: 'terminate',\n description: 'User interruption with CTRL-C',\n standard: 'ansi',\n },\n {\n name: 'SIGQUIT',\n number: 3,\n action: 'core',\n description: 'User interruption with CTRL-\\\\',\n standard: 'posix',\n },\n {\n name: 'SIGILL',\n number: 4,\n action: 'core',\n description: 'Invalid machine instruction',\n standard: 'ansi',\n },\n {\n name: 'SIGTRAP',\n number: 5,\n action: 'core',\n description: 'Debugger breakpoint',\n standard: 'posix',\n },\n {\n name: 'SIGABRT',\n number: 6,\n action: 'core',\n description: 'Aborted',\n standard: 'ansi',\n },\n {\n name: 'SIGIOT',\n number: 6,\n action: 'core',\n description: 'Aborted',\n standard: 'bsd',\n },\n {\n name: 'SIGBUS',\n number: 7,\n action: 'core',\n description:\n 'Bus error due to misaligned, non-existing address or paging error',\n standard: 'bsd',\n },\n {\n name: 'SIGEMT',\n number: 7,\n action: 'terminate',\n description: 'Command should be emulated but is not implemented',\n standard: 'other',\n },\n {\n name: 'SIGFPE',\n number: 8,\n action: 'core',\n description: 'Floating point arithmetic error',\n standard: 'ansi',\n },\n {\n name: 'SIGKILL',\n number: 9,\n action: 'terminate',\n description: 'Forced termination',\n standard: 'posix',\n forced: true,\n },\n {\n name: 'SIGUSR1',\n number: 10,\n action: 'terminate',\n description: 'Application-specific signal',\n standard: 'posix',\n },\n {\n name: 'SIGSEGV',\n number: 11,\n action: 'core',\n description: 'Segmentation fault',\n standard: 'ansi',\n },\n {\n name: 'SIGUSR2',\n number: 12,\n action: 'terminate',\n description: 'Application-specific signal',\n standard: 'posix',\n },\n {\n name: 'SIGPIPE',\n number: 13,\n action: 'terminate',\n description: 'Broken pipe or socket',\n standard: 'posix',\n },\n {\n name: 'SIGALRM',\n number: 14,\n action: 'terminate',\n description: 'Timeout or timer',\n standard: 'posix',\n },\n {\n name: 'SIGTERM',\n number: 15,\n action: 'terminate',\n description: 'Termination',\n standard: 'ansi',\n },\n {\n name: 'SIGSTKFLT',\n number: 16,\n action: 'terminate',\n description: 'Stack is empty or overflowed',\n standard: 'other',\n },\n {\n name: 'SIGCHLD',\n number: 17,\n action: 'ignore',\n description: 'Child process terminated, paused or unpaused',\n standard: 'posix',\n },\n {\n name: 'SIGCLD',\n number: 17,\n action: 'ignore',\n description: 'Child process terminated, paused or unpaused',\n standard: 'other',\n },\n {\n name: 'SIGCONT',\n number: 18,\n action: 'unpause',\n description: 'Unpaused',\n standard: 'posix',\n forced: true,\n },\n {\n name: 'SIGSTOP',\n number: 19,\n action: 'pause',\n description: 'Paused',\n standard: 'posix',\n forced: true,\n },\n {\n name: 'SIGTSTP',\n number: 20,\n action: 'pause',\n description: 'Paused using CTRL-Z or \"suspend\"',\n standard: 'posix',\n },\n {\n name: 'SIGTTIN',\n number: 21,\n action: 'pause',\n description: 'Background process cannot read terminal input',\n standard: 'posix',\n },\n {\n name: 'SIGBREAK',\n number: 21,\n action: 'terminate',\n description: 'User interruption with CTRL-BREAK',\n standard: 'other',\n },\n {\n name: 'SIGTTOU',\n number: 22,\n action: 'pause',\n description: 'Background process cannot write to terminal output',\n standard: 'posix',\n },\n {\n name: 'SIGURG',\n number: 23,\n action: 'ignore',\n description: 'Socket received out-of-band data',\n standard: 'bsd',\n },\n {\n name: 'SIGXCPU',\n number: 24,\n action: 'core',\n description: 'Process timed out',\n standard: 'bsd',\n },\n {\n name: 'SIGXFSZ',\n number: 25,\n action: 'core',\n description: 'File too big',\n standard: 'bsd',\n },\n {\n name: 'SIGVTALRM',\n number: 26,\n action: 'terminate',\n description: 'Timeout or timer',\n standard: 'bsd',\n },\n {\n name: 'SIGPROF',\n number: 27,\n action: 'terminate',\n description: 'Timeout or timer',\n standard: 'bsd',\n },\n {\n name: 'SIGWINCH',\n number: 28,\n action: 'ignore',\n description: 'Terminal window size changed',\n standard: 'bsd',\n },\n {\n name: 'SIGIO',\n number: 29,\n action: 'terminate',\n description: 'I/O is available',\n standard: 'other',\n },\n {\n name: 'SIGPOLL',\n number: 29,\n action: 'terminate',\n description: 'Watched event',\n standard: 'other',\n },\n {\n name: 'SIGINFO',\n number: 29,\n action: 'ignore',\n description: 'Request for process information',\n standard: 'other',\n },\n {\n name: 'SIGPWR',\n number: 30,\n action: 'terminate',\n description: 'Device running out of power',\n standard: 'systemv',\n },\n {\n name: 'SIGSYS',\n number: 31,\n action: 'core',\n description: 'Invalid system call',\n standard: 'other',\n },\n {\n name: 'SIGUNUSED',\n number: 31,\n action: 'terminate',\n description: 'Invalid system call',\n standard: 'other',\n },\n]\n/* eslint-enable max-lines */\n", "// List of realtime signals with information about them\nexport const getRealtimeSignals = function() {\n const length = SIGRTMAX - SIGRTMIN + 1\n return Array.from({ length }, getRealtimeSignal)\n}\n\nconst getRealtimeSignal = function(value, index) {\n return {\n name: `SIGRT${index + 1}`,\n number: SIGRTMIN + index,\n action: 'terminate',\n description: 'Application-specific signal (realtime)',\n standard: 'posix',\n }\n}\n\nconst SIGRTMIN = 34\nexport const SIGRTMAX = 64\n", "import { constants } from 'os'\n\nimport { SIGNALS } from './core.js'\nimport { getRealtimeSignals } from './realtime.js'\n\n// Retrieve list of know signals (including realtime) with information about\n// them\nexport const getSignals = function() {\n const realtimeSignals = getRealtimeSignals()\n const signals = [...SIGNALS, ...realtimeSignals].map(normalizeSignal)\n return signals\n}\n\n// Normalize signal:\n// - `number`: signal numbers are OS-specific. This is taken into account by\n// `os.constants.signals`. However we provide a default `number` since some\n// signals are not defined for some OS.\n// - `forced`: set default to `false`\n// - `supported`: set value\nconst normalizeSignal = function({\n name,\n number: defaultNumber,\n description,\n action,\n forced = false,\n standard,\n}) {\n const {\n signals: { [name]: constantSignal },\n } = constants\n const supported = constantSignal !== undefined\n const number = supported ? constantSignal : defaultNumber\n return { name, number, description, supported, action, forced, standard }\n}\n", "import { constants } from 'os'\n\nimport { getSignals } from './signals.js'\nimport { SIGRTMAX } from './realtime.js'\n\n// Retrieve `signalsByName`, an object mapping signal name to signal properties.\n// We make sure the object is sorted by `number`.\nconst getSignalsByName = function() {\n const signals = getSignals()\n return signals.reduce(getSignalByName, {})\n}\n\nconst getSignalByName = function(\n signalByNameMemo,\n { name, number, description, supported, action, forced, standard },\n) {\n return {\n ...signalByNameMemo,\n [name]: { name, number, description, supported, action, forced, standard },\n }\n}\n\nexport const signalsByName = getSignalsByName()\n\n// Retrieve `signalsByNumber`, an object mapping signal number to signal\n// properties.\n// We make sure the object is sorted by `number`.\nconst getSignalsByNumber = function() {\n const signals = getSignals()\n const length = SIGRTMAX + 1\n const signalsA = Array.from({ length }, (value, number) =>\n getSignalByNumber(number, signals),\n )\n return Object.assign({}, ...signalsA)\n}\n\nconst getSignalByNumber = function(number, signals) {\n const signal = findSignalByNumber(number, signals)\n\n if (signal === undefined) {\n return {}\n }\n\n const { name, description, supported, action, forced, standard } = signal\n return {\n [number]: {\n name,\n number,\n description,\n supported,\n action,\n forced,\n standard,\n },\n }\n}\n\n// Several signals might end up sharing the same number because of OS-specific\n// numbers, in which case those prevail.\nconst findSignalByNumber = function(number, signals) {\n const signal = signals.find(({ name }) => constants.signals[name] === number)\n\n if (signal !== undefined) {\n return signal\n }\n\n return signals.find(signalA => signalA.number === number)\n}\n\nexport const signalsByNumber = getSignalsByNumber()\n", "'use strict';\nconst {signalsByName} = require('human-signals');\n\nconst getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {\n\tif (timedOut) {\n\t\treturn `timed out after ${timeout} milliseconds`;\n\t}\n\n\tif (isCanceled) {\n\t\treturn 'was canceled';\n\t}\n\n\tif (errorCode !== undefined) {\n\t\treturn `failed with ${errorCode}`;\n\t}\n\n\tif (signal !== undefined) {\n\t\treturn `was killed with ${signal} (${signalDescription})`;\n\t}\n\n\tif (exitCode !== undefined) {\n\t\treturn `failed with exit code ${exitCode}`;\n\t}\n\n\treturn 'failed';\n};\n\nconst makeError = ({\n\tstdout,\n\tstderr,\n\tall,\n\terror,\n\tsignal,\n\texitCode,\n\tcommand,\n\tescapedCommand,\n\ttimedOut,\n\tisCanceled,\n\tkilled,\n\tparsed: {options: {timeout}}\n}) => {\n\t// `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.\n\t// We normalize them to `undefined`\n\texitCode = exitCode === null ? undefined : exitCode;\n\tsignal = signal === null ? undefined : signal;\n\tconst signalDescription = signal === undefined ? undefined : signalsByName[signal].description;\n\n\tconst errorCode = error && error.code;\n\n\tconst prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});\n\tconst execaMessage = `Command ${prefix}: ${command}`;\n\tconst isError = Object.prototype.toString.call(error) === '[object Error]';\n\tconst shortMessage = isError ? `${execaMessage}\\n${error.message}` : execaMessage;\n\tconst message = [shortMessage, stderr, stdout].filter(Boolean).join('\\n');\n\n\tif (isError) {\n\t\terror.originalMessage = error.message;\n\t\terror.message = message;\n\t} else {\n\t\terror = new Error(message);\n\t}\n\n\terror.shortMessage = shortMessage;\n\terror.command = command;\n\terror.escapedCommand = escapedCommand;\n\terror.exitCode = exitCode;\n\terror.signal = signal;\n\terror.signalDescription = signalDescription;\n\terror.stdout = stdout;\n\terror.stderr = stderr;\n\n\tif (all !== undefined) {\n\t\terror.all = all;\n\t}\n\n\tif ('bufferedData' in error) {\n\t\tdelete error.bufferedData;\n\t}\n\n\terror.failed = true;\n\terror.timedOut = Boolean(timedOut);\n\terror.isCanceled = isCanceled;\n\terror.killed = killed && !timedOut;\n\n\treturn error;\n};\n\nmodule.exports = makeError;\n", "'use strict';\nconst aliases = ['stdin', 'stdout', 'stderr'];\n\nconst hasAlias = options => aliases.some(alias => options[alias] !== undefined);\n\nconst normalizeStdio = options => {\n\tif (!options) {\n\t\treturn;\n\t}\n\n\tconst {stdio} = options;\n\n\tif (stdio === undefined) {\n\t\treturn aliases.map(alias => options[alias]);\n\t}\n\n\tif (hasAlias(options)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${aliases.map(alias => `\\`${alias}\\``).join(', ')}`);\n\t}\n\n\tif (typeof stdio === 'string') {\n\t\treturn stdio;\n\t}\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst length = Math.max(stdio.length, aliases.length);\n\treturn Array.from({length}, (value, index) => stdio[index]);\n};\n\nmodule.exports = normalizeStdio;\n\n// `ipc` is pushed unless it is already present\nmodule.exports.node = options => {\n\tconst stdio = normalizeStdio(options);\n\n\tif (stdio === 'ipc') {\n\t\treturn 'ipc';\n\t}\n\n\tif (stdio === undefined || typeof stdio === 'string') {\n\t\treturn [stdio, stdio, stdio, 'ipc'];\n\t}\n\n\tif (stdio.includes('ipc')) {\n\t\treturn stdio;\n\t}\n\n\treturn [...stdio, 'ipc'];\n};\n", "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n", "'use strict';\nconst os = require('os');\nconst onExit = require('signal-exit');\n\nconst DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;\n\n// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior\nconst spawnedKill = (kill, signal = 'SIGTERM', options = {}) => {\n\tconst killResult = kill(signal);\n\tsetKillTimeout(kill, signal, options, killResult);\n\treturn killResult;\n};\n\nconst setKillTimeout = (kill, signal, options, killResult) => {\n\tif (!shouldForceKill(signal, options, killResult)) {\n\t\treturn;\n\t}\n\n\tconst timeout = getForceKillAfterTimeout(options);\n\tconst t = setTimeout(() => {\n\t\tkill('SIGKILL');\n\t}, timeout);\n\n\t// Guarded because there's no `.unref()` when `execa` is used in the renderer\n\t// process in Electron. This cannot be tested since we don't run tests in\n\t// Electron.\n\t// istanbul ignore else\n\tif (t.unref) {\n\t\tt.unref();\n\t}\n};\n\nconst shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => {\n\treturn isSigterm(signal) && forceKillAfterTimeout !== false && killResult;\n};\n\nconst isSigterm = signal => {\n\treturn signal === os.constants.signals.SIGTERM ||\n\t\t(typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM');\n};\n\nconst getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => {\n\tif (forceKillAfterTimeout === true) {\n\t\treturn DEFAULT_FORCE_KILL_TIMEOUT;\n\t}\n\n\tif (!Number.isFinite(forceKillAfterTimeout) || forceKillAfterTimeout < 0) {\n\t\tthrow new TypeError(`Expected the \\`forceKillAfterTimeout\\` option to be a non-negative integer, got \\`${forceKillAfterTimeout}\\` (${typeof forceKillAfterTimeout})`);\n\t}\n\n\treturn forceKillAfterTimeout;\n};\n\n// `childProcess.cancel()`\nconst spawnedCancel = (spawned, context) => {\n\tconst killResult = spawned.kill();\n\n\tif (killResult) {\n\t\tcontext.isCanceled = true;\n\t}\n};\n\nconst timeoutKill = (spawned, signal, reject) => {\n\tspawned.kill(signal);\n\treject(Object.assign(new Error('Timed out'), {timedOut: true, signal}));\n};\n\n// `timeout` option handling\nconst setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => {\n\tif (timeout === 0 || timeout === undefined) {\n\t\treturn spawnedPromise;\n\t}\n\n\tlet timeoutId;\n\tconst timeoutPromise = new Promise((resolve, reject) => {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimeoutKill(spawned, killSignal, reject);\n\t\t}, timeout);\n\t});\n\n\tconst safeSpawnedPromise = spawnedPromise.finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n\n\treturn Promise.race([timeoutPromise, safeSpawnedPromise]);\n};\n\nconst validateTimeout = ({timeout}) => {\n\tif (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {\n\t\tthrow new TypeError(`Expected the \\`timeout\\` option to be a non-negative integer, got \\`${timeout}\\` (${typeof timeout})`);\n\t}\n};\n\n// `cleanup` option handling\nconst setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => {\n\tif (!cleanup || detached) {\n\t\treturn timedPromise;\n\t}\n\n\tconst removeExitHandler = onExit(() => {\n\t\tspawned.kill();\n\t});\n\n\treturn timedPromise.finally(() => {\n\t\tremoveExitHandler();\n\t});\n};\n\nmodule.exports = {\n\tspawnedKill,\n\tspawnedCancel,\n\tsetupTimeout,\n\tvalidateTimeout,\n\tsetExitHandler\n};\n", "'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n", "'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n", "'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst stream = require('stream');\nconst {promisify} = require('util');\nconst bufferStream = require('./buffer-stream');\n\nconst streamPipelinePromisified = promisify(stream.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n", "'use strict';\n\nconst { PassThrough } = require('stream');\n\nmodule.exports = function (/*streams...*/) {\n var sources = []\n var output = new PassThrough({objectMode: true})\n\n output.setMaxListeners(0)\n\n output.add = add\n output.isEmpty = isEmpty\n\n output.on('unpipe', remove)\n\n Array.prototype.slice.call(arguments).forEach(add)\n\n return output\n\n function add (source) {\n if (Array.isArray(source)) {\n source.forEach(add)\n return this\n }\n\n sources.push(source);\n source.once('end', remove.bind(null, source))\n source.once('error', output.emit.bind(output, 'error'))\n source.pipe(output, {end: false})\n return this\n }\n\n function isEmpty () {\n return sources.length == 0;\n }\n\n function remove (source) {\n sources = sources.filter(function (it) { return it !== source })\n if (!sources.length && output.readable) { output.end() }\n }\n}\n", "'use strict';\nconst isStream = require('is-stream');\nconst getStream = require('get-stream');\nconst mergeStream = require('merge-stream');\n\n// `input` option\nconst handleInput = (spawned, input) => {\n\t// Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852\n\t// @todo remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0\n\tif (input === undefined || spawned.stdin === undefined) {\n\t\treturn;\n\t}\n\n\tif (isStream(input)) {\n\t\tinput.pipe(spawned.stdin);\n\t} else {\n\t\tspawned.stdin.end(input);\n\t}\n};\n\n// `all` interleaves `stdout` and `stderr`\nconst makeAllStream = (spawned, {all}) => {\n\tif (!all || (!spawned.stdout && !spawned.stderr)) {\n\t\treturn;\n\t}\n\n\tconst mixed = mergeStream();\n\n\tif (spawned.stdout) {\n\t\tmixed.add(spawned.stdout);\n\t}\n\n\tif (spawned.stderr) {\n\t\tmixed.add(spawned.stderr);\n\t}\n\n\treturn mixed;\n};\n\n// On failure, `result.stdout|stderr|all` should contain the currently buffered stream\nconst getBufferedData = async (stream, streamPromise) => {\n\tif (!stream) {\n\t\treturn;\n\t}\n\n\tstream.destroy();\n\n\ttry {\n\t\treturn await streamPromise;\n\t} catch (error) {\n\t\treturn error.bufferedData;\n\t}\n};\n\nconst getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => {\n\tif (!stream || !buffer) {\n\t\treturn;\n\t}\n\n\tif (encoding) {\n\t\treturn getStream(stream, {encoding, maxBuffer});\n\t}\n\n\treturn getStream.buffer(stream, {maxBuffer});\n};\n\n// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all)\nconst getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => {\n\tconst stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer});\n\tconst stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer});\n\tconst allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2});\n\n\ttry {\n\t\treturn await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]);\n\t} catch (error) {\n\t\treturn Promise.all([\n\t\t\t{error, signal: error.signal, timedOut: error.timedOut},\n\t\t\tgetBufferedData(stdout, stdoutPromise),\n\t\t\tgetBufferedData(stderr, stderrPromise),\n\t\t\tgetBufferedData(all, allPromise)\n\t\t]);\n\t}\n};\n\nconst validateInputSync = ({input}) => {\n\tif (isStream(input)) {\n\t\tthrow new TypeError('The `input` option cannot be a stream in sync mode');\n\t}\n};\n\nmodule.exports = {\n\thandleInput,\n\tmakeAllStream,\n\tgetSpawnedResult,\n\tvalidateInputSync\n};\n\n", "'use strict';\n\nconst nativePromisePrototype = (async () => {})().constructor.prototype;\nconst descriptors = ['then', 'catch', 'finally'].map(property => [\n\tproperty,\n\tReflect.getOwnPropertyDescriptor(nativePromisePrototype, property)\n]);\n\n// The return value is a mixin of `childProcess` and `Promise`\nconst mergePromise = (spawned, promise) => {\n\tfor (const [property, descriptor] of descriptors) {\n\t\t// Starting the main `promise` is deferred to avoid consuming streams\n\t\tconst value = typeof promise === 'function' ?\n\t\t\t(...args) => Reflect.apply(descriptor.value, promise(), args) :\n\t\t\tdescriptor.value.bind(promise);\n\n\t\tReflect.defineProperty(spawned, property, {...descriptor, value});\n\t}\n\n\treturn spawned;\n};\n\n// Use promises instead of `child_process` events\nconst getSpawnedPromise = spawned => {\n\treturn new Promise((resolve, reject) => {\n\t\tspawned.on('exit', (exitCode, signal) => {\n\t\t\tresolve({exitCode, signal});\n\t\t});\n\n\t\tspawned.on('error', error => {\n\t\t\treject(error);\n\t\t});\n\n\t\tif (spawned.stdin) {\n\t\t\tspawned.stdin.on('error', error => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t}\n\t});\n};\n\nmodule.exports = {\n\tmergePromise,\n\tgetSpawnedPromise\n};\n\n", "'use strict';\nconst normalizeArgs = (file, args = []) => {\n\tif (!Array.isArray(args)) {\n\t\treturn [file];\n\t}\n\n\treturn [file, ...args];\n};\n\nconst NO_ESCAPE_REGEXP = /^[\\w.-]+$/;\nconst DOUBLE_QUOTES_REGEXP = /\"/g;\n\nconst escapeArg = arg => {\n\tif (typeof arg !== 'string' || NO_ESCAPE_REGEXP.test(arg)) {\n\t\treturn arg;\n\t}\n\n\treturn `\"${arg.replace(DOUBLE_QUOTES_REGEXP, '\\\\\"')}\"`;\n};\n\nconst joinCommand = (file, args) => {\n\treturn normalizeArgs(file, args).join(' ');\n};\n\nconst getEscapedCommand = (file, args) => {\n\treturn normalizeArgs(file, args).map(arg => escapeArg(arg)).join(' ');\n};\n\nconst SPACES_REGEXP = / +/g;\n\n// Handle `execa.command()`\nconst parseCommand = command => {\n\tconst tokens = [];\n\tfor (const token of command.trim().split(SPACES_REGEXP)) {\n\t\t// Allow spaces to be escaped by a backslash if not meant as a delimiter\n\t\tconst previousToken = tokens[tokens.length - 1];\n\t\tif (previousToken && previousToken.endsWith('\\\\')) {\n\t\t\t// Merge previous token with current one\n\t\t\ttokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`;\n\t\t} else {\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\n\treturn tokens;\n};\n\nmodule.exports = {\n\tjoinCommand,\n\tgetEscapedCommand,\n\tparseCommand\n};\n", "'use strict';\nconst path = require('path');\nconst childProcess = require('child_process');\nconst crossSpawn = require('cross-spawn');\nconst stripFinalNewline = require('strip-final-newline');\nconst npmRunPath = require('npm-run-path');\nconst onetime = require('onetime');\nconst makeError = require('./lib/error');\nconst normalizeStdio = require('./lib/stdio');\nconst {spawnedKill, spawnedCancel, setupTimeout, validateTimeout, setExitHandler} = require('./lib/kill');\nconst {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = require('./lib/stream');\nconst {mergePromise, getSpawnedPromise} = require('./lib/promise');\nconst {joinCommand, parseCommand, getEscapedCommand} = require('./lib/command');\n\nconst DEFAULT_MAX_BUFFER = 1000 * 1000 * 100;\n\nconst getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => {\n\tconst env = extendEnv ? {...process.env, ...envOption} : envOption;\n\n\tif (preferLocal) {\n\t\treturn npmRunPath.env({env, cwd: localDir, execPath});\n\t}\n\n\treturn env;\n};\n\nconst handleArguments = (file, args, options = {}) => {\n\tconst parsed = crossSpawn._parse(file, args, options);\n\tfile = parsed.command;\n\targs = parsed.args;\n\toptions = parsed.options;\n\n\toptions = {\n\t\tmaxBuffer: DEFAULT_MAX_BUFFER,\n\t\tbuffer: true,\n\t\tstripFinalNewline: true,\n\t\textendEnv: true,\n\t\tpreferLocal: false,\n\t\tlocalDir: options.cwd || process.cwd(),\n\t\texecPath: process.execPath,\n\t\tencoding: 'utf8',\n\t\treject: true,\n\t\tcleanup: true,\n\t\tall: false,\n\t\twindowsHide: true,\n\t\t...options\n\t};\n\n\toptions.env = getEnv(options);\n\n\toptions.stdio = normalizeStdio(options);\n\n\tif (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {\n\t\t// #116\n\t\targs.unshift('/q');\n\t}\n\n\treturn {file, args, options, parsed};\n};\n\nconst handleOutput = (options, value, error) => {\n\tif (typeof value !== 'string' && !Buffer.isBuffer(value)) {\n\t\t// When `execa.sync()` errors, we normalize it to '' to mimic `execa()`\n\t\treturn error === undefined ? undefined : '';\n\t}\n\n\tif (options.stripFinalNewline) {\n\t\treturn stripFinalNewline(value);\n\t}\n\n\treturn value;\n};\n\nconst execa = (file, args, options) => {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateTimeout(parsed.options);\n\n\tlet spawned;\n\ttry {\n\t\tspawned = childProcess.spawn(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\t// Ensure the returned error is always both a promise and a child process\n\t\tconst dummySpawned = new childProcess.ChildProcess();\n\t\tconst errorPromise = Promise.reject(makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t}));\n\t\treturn mergePromise(dummySpawned, errorPromise);\n\t}\n\n\tconst spawnedPromise = getSpawnedPromise(spawned);\n\tconst timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise);\n\tconst processDone = setExitHandler(spawned, parsed.options, timedPromise);\n\n\tconst context = {isCanceled: false};\n\n\tspawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned));\n\tspawned.cancel = spawnedCancel.bind(null, spawned, context);\n\n\tconst handlePromise = async () => {\n\t\tconst [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone);\n\t\tconst stdout = handleOutput(parsed.options, stdoutResult);\n\t\tconst stderr = handleOutput(parsed.options, stderrResult);\n\t\tconst all = handleOutput(parsed.options, allResult);\n\n\t\tif (error || exitCode !== 0 || signal !== null) {\n\t\t\tconst returnedError = makeError({\n\t\t\t\terror,\n\t\t\t\texitCode,\n\t\t\t\tsignal,\n\t\t\t\tstdout,\n\t\t\t\tstderr,\n\t\t\t\tall,\n\t\t\t\tcommand,\n\t\t\t\tescapedCommand,\n\t\t\t\tparsed,\n\t\t\t\ttimedOut,\n\t\t\t\tisCanceled: context.isCanceled,\n\t\t\t\tkilled: spawned.killed\n\t\t\t});\n\n\t\t\tif (!parsed.options.reject) {\n\t\t\t\treturn returnedError;\n\t\t\t}\n\n\t\t\tthrow returnedError;\n\t\t}\n\n\t\treturn {\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\texitCode: 0,\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\tall,\n\t\t\tfailed: false,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t};\n\t};\n\n\tconst handlePromiseOnce = onetime(handlePromise);\n\n\thandleInput(spawned, parsed.options.input);\n\n\tspawned.all = makeAllStream(spawned, parsed.options);\n\n\treturn mergePromise(spawned, handlePromiseOnce);\n};\n\nmodule.exports = execa;\n\nmodule.exports.sync = (file, args, options) => {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateInputSync(parsed.options);\n\n\tlet result;\n\ttry {\n\t\tresult = childProcess.spawnSync(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\tthrow makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t});\n\t}\n\n\tconst stdout = handleOutput(parsed.options, result.stdout, result.error);\n\tconst stderr = handleOutput(parsed.options, result.stderr, result.error);\n\n\tif (result.error || result.status !== 0 || result.signal !== null) {\n\t\tconst error = makeError({\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\terror: result.error,\n\t\t\tsignal: result.signal,\n\t\t\texitCode: result.status,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: result.error && result.error.code === 'ETIMEDOUT',\n\t\t\tisCanceled: false,\n\t\t\tkilled: result.signal !== null\n\t\t});\n\n\t\tif (!parsed.options.reject) {\n\t\t\treturn error;\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\treturn {\n\t\tcommand,\n\t\tescapedCommand,\n\t\texitCode: 0,\n\t\tstdout,\n\t\tstderr,\n\t\tfailed: false,\n\t\ttimedOut: false,\n\t\tisCanceled: false,\n\t\tkilled: false\n\t};\n};\n\nmodule.exports.command = (command, options) => {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execa(file, args, options);\n};\n\nmodule.exports.commandSync = (command, options) => {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execa.sync(file, args, options);\n};\n\nmodule.exports.node = (scriptPath, args, options = {}) => {\n\tif (args && !Array.isArray(args) && typeof args === 'object') {\n\t\toptions = args;\n\t\targs = [];\n\t}\n\n\tconst stdio = normalizeStdio.node(options);\n\tconst defaultExecArgv = process.execArgv.filter(arg => !arg.startsWith('--inspect'));\n\n\tconst {\n\t\tnodePath = process.execPath,\n\t\tnodeOptions = defaultExecArgv\n\t} = options;\n\n\treturn execa(\n\t\tnodePath,\n\t\t[\n\t\t\t...nodeOptions,\n\t\t\tscriptPath,\n\t\t\t...(Array.isArray(args) ? args : [])\n\t\t],\n\t\t{\n\t\t\t...options,\n\t\t\tstdin: undefined,\n\t\t\tstdout: undefined,\n\t\t\tstderr: undefined,\n\t\t\tstdio,\n\t\t\tshell: false\n\t\t}\n\t);\n};\n", "{\n \"name\": \"@prisma/internals\",\n \"version\": \"6.16.1\",\n \"description\": \"This package is intended for Prisma's internal use\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/prisma/prisma.git\",\n \"directory\": \"packages/internals\"\n },\n \"homepage\": \"https://www.prisma.io\",\n \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n \"bugs\": \"https://github.com/prisma/prisma/issues\",\n \"license\": \"Apache-2.0\",\n \"scripts\": {\n \"dev\": \"DEV=true tsx helpers/build.ts\",\n \"build\": \"tsx helpers/build.ts\",\n \"test\": \"dotenv -e ../../.db.env -- jest --silent\",\n \"prepublishOnly\": \"pnpm run build\"\n },\n \"files\": [\n \"README.md\",\n \"dist\",\n \"!**/libquery_engine*\",\n \"!dist/get-generators/engines/*\",\n \"scripts\"\n ],\n \"devDependencies\": {\n \"@babel/helper-validator-identifier\": \"7.25.9\",\n \"@opentelemetry/api\": \"1.9.0\",\n \"@swc/core\": \"1.11.5\",\n \"@swc/jest\": \"0.2.37\",\n \"@types/babel__helper-validator-identifier\": \"7.15.2\",\n \"@types/jest\": \"29.5.14\",\n \"@types/node\": \"18.19.76\",\n \"@types/resolve\": \"1.20.6\",\n \"archiver\": \"6.0.2\",\n \"checkpoint-client\": \"1.1.33\",\n \"cli-truncate\": \"4.0.0\",\n \"dotenv\": \"16.5.0\",\n \"empathic\": \"2.0.0\",\n \"escape-string-regexp\": \"5.0.0\",\n \"execa\": \"5.1.1\",\n \"fast-glob\": \"3.3.3\",\n \"find-up\": \"7.0.0\",\n \"fp-ts\": \"2.16.9\",\n \"fs-extra\": \"11.3.0\",\n \"fs-jetpack\": \"5.1.0\",\n \"global-directory\": \"4.0.0\",\n \"globby\": \"11.1.0\",\n \"identifier-regex\": \"1.0.0\",\n \"indent-string\": \"4.0.0\",\n \"is-windows\": \"1.0.2\",\n \"is-wsl\": \"3.1.0\",\n \"jest\": \"29.7.0\",\n \"jest-junit\": \"16.0.0\",\n \"kleur\": \"4.1.5\",\n \"mock-stdin\": \"1.0.0\",\n \"new-github-issue-url\": \"0.2.1\",\n \"node-fetch\": \"3.3.2\",\n \"npm-packlist\": \"5.1.3\",\n \"open\": \"7.4.2\",\n \"p-map\": \"4.0.0\",\n \"resolve\": \"1.22.10\",\n \"string-width\": \"7.2.0\",\n \"strip-indent\": \"4.0.0\",\n \"temp-dir\": \"2.0.0\",\n \"tempy\": \"1.0.1\",\n \"terminal-link\": \"4.0.0\",\n \"tmp\": \"0.2.3\",\n \"ts-pattern\": \"5.6.2\",\n \"ts-toolbelt\": \"9.6.0\",\n \"typescript\": \"5.4.5\",\n \"yarn\": \"1.22.22\"\n },\n \"dependencies\": {\n \"@prisma/config\": \"workspace:*\",\n \"@prisma/debug\": \"workspace:*\",\n \"@prisma/dmmf\": \"workspace:*\",\n \"@prisma/driver-adapter-utils\": \"workspace:*\",\n \"@prisma/engines\": \"workspace:*\",\n \"@prisma/fetch-engine\": \"workspace:*\",\n \"@prisma/generator\": \"workspace:*\",\n \"@prisma/generator-helper\": \"workspace:*\",\n \"@prisma/get-platform\": \"workspace:*\",\n \"@prisma/prisma-schema-wasm\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/schema-engine-wasm\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/schema-files-loader\": \"workspace:*\",\n \"arg\": \"5.0.2\",\n \"prompts\": \"2.4.2\"\n },\n \"peerDependencies\": {\n \"typescript\": \">=5.1.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n },\n \"sideEffects\": false\n}", "'use strict';\nconst fs = require('fs');\nconst os = require('os');\n\nconst tempDirectorySymbol = Symbol.for('__RESOLVED_TEMP_DIRECTORY__');\n\nif (!global[tempDirectorySymbol]) {\n\tObject.defineProperty(global, tempDirectorySymbol, {\n\t\tvalue: fs.realpathSync(os.tmpdir())\n\t});\n}\n\nmodule.exports = global[tempDirectorySymbol];\n", "function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n", "module.exports = require('./lib/retry');", "'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari\n\t'Network request failed' // `cross-fetch`\n];\n\nclass AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n", "{\n \"name\": \"@prisma/engines-version\",\n \"version\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"main\": \"index.js\",\n \"types\": \"index.d.ts\",\n \"license\": \"Apache-2.0\",\n \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n \"prisma\": {\n \"enginesVersion\": \"1c57fdcd7e44b29b9313256c76699e91c3ac3c43\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/prisma/engines-wrapper.git\",\n \"directory\": \"packages/engines-version\"\n },\n \"devDependencies\": {\n \"@types/node\": \"18.19.76\",\n \"typescript\": \"4.9.5\"\n },\n \"files\": [\n \"index.js\",\n \"index.d.ts\"\n ],\n \"scripts\": {\n \"build\": \"tsc -d\"\n }\n}", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enginesVersion = void 0;\nexports.enginesVersion = require('./package.json').prisma.enginesVersion;\n//# sourceMappingURL=index.js.map", "'use strict';\nmodule.exports = string => {\n\tconst match = string.match(/^[ \\t]*(?=\\S)/gm);\n\n\tif (!match) {\n\t\treturn 0;\n\t}\n\n\treturn match.reduce((r, a) => Math.min(r, a.length), Infinity);\n};\n", "'use strict';\n\nmodule.exports = (string, count = 1, options) => {\n\toptions = {\n\t\tindent: ' ',\n\t\tincludeEmptyLines: false,\n\t\t...options\n\t};\n\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof string}\\``\n\t\t);\n\t}\n\n\tif (typeof count !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof count}\\``\n\t\t);\n\t}\n\n\tif (typeof options.indent !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof options.indent}\\``\n\t\t);\n\t}\n\n\tif (count === 0) {\n\t\treturn string;\n\t}\n\n\tconst regex = options.includeEmptyLines ? /^/gm : /^(?!\\s*$)/gm;\n\n\treturn string.replace(regex, options.indent.repeat(count));\n};\n", "{\n \"name\": \"dotenv\",\n \"version\": \"16.5.0\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n const vaultPath = _vaultPath(options)\n\n // Parse .env.vault\n const result = DotenvModule.configDotenv({ path: vaultPath })\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n if (debug) {\n _debug('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "'use strict';\n\nmodule.exports = (options = {}) => {\n\tlet repoUrl;\n\tif (options.repoUrl) {\n\t\trepoUrl = options.repoUrl;\n\t} else if (options.user && options.repo) {\n\t\trepoUrl = `https://github.com/${options.user}/${options.repo}`;\n\t} else {\n\t\tthrow new Error('You need to specify either the `repoUrl` option or both the `user` and `repo` options');\n\t}\n\n\tconst url = new URL(`${repoUrl}/issues/new`);\n\n\tconst types = [\n\t\t'body',\n\t\t'title',\n\t\t'labels',\n\t\t'template',\n\t\t'milestone',\n\t\t'assignee',\n\t\t'projects'\n\t];\n\n\tfor (const type of types) {\n\t\tlet value = options[type];\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type === 'labels' || type === 'projects') {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new TypeError(`The \\`${type}\\` option should be an array`);\n\t\t\t}\n\n\t\t\tvalue = value.join(',');\n\t\t}\n\n\t\turl.searchParams.set(type, value);\n\t}\n\n\treturn url.toString();\n};\n\n// TODO: Remove this for the next major release\nmodule.exports.default = module.exports;\n", "'use strict';\nmodule.exports = (function()\n{\n function _min(d0, d1, d2, bx, ay)\n {\n return d0 < d1 || d2 < d1\n ? d0 > d2\n ? d2 + 1\n : d0 + 1\n : bx === ay\n ? d1\n : d1 + 1;\n }\n\n return function(a, b)\n {\n if (a === b) {\n return 0;\n }\n\n if (a.length > b.length) {\n var tmp = a;\n a = b;\n b = tmp;\n }\n\n var la = a.length;\n var lb = b.length;\n\n while (la > 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {\n la--;\n lb--;\n }\n\n var offset = 0;\n\n while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {\n offset++;\n }\n\n la -= offset;\n lb -= offset;\n\n if (la === 0 || lb < 3) {\n return lb;\n }\n\n var x = 0;\n var y;\n var d0;\n var d1;\n var d2;\n var d3;\n var dd;\n var dy;\n var ay;\n var bx0;\n var bx1;\n var bx2;\n var bx3;\n\n var vector = [];\n\n for (y = 0; y < la; y++) {\n vector.push(y + 1);\n vector.push(a.charCodeAt(offset + y));\n }\n\n var len = vector.length - 1;\n\n for (; x < lb - 3;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n bx1 = b.charCodeAt(offset + (d1 = x + 1));\n bx2 = b.charCodeAt(offset + (d2 = x + 2));\n bx3 = b.charCodeAt(offset + (d3 = x + 3));\n dd = (x += 4);\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n ay = vector[y + 1];\n d0 = _min(dy, d0, d1, bx0, ay);\n d1 = _min(d0, d1, d2, bx1, ay);\n d2 = _min(d1, d2, d3, bx2, ay);\n dd = _min(d2, d3, dd, bx3, ay);\n vector[y] = dd;\n d3 = d2;\n d2 = d1;\n d1 = d0;\n d0 = dy;\n }\n }\n\n for (; x < lb;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n dd = ++x;\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n d0 = dy;\n }\n }\n\n return dd;\n };\n})();\n\n", "import { BasicBuilder } from './BasicBuilder'\nimport type { KeyType } from './KeyType'\nimport { Writer } from './Writer'\n\nexport abstract class TypeBuilder implements BasicBuilder {\n // TODO(@SevInf): this should be replaced with precedence system that would\n // automatically add parenthesis where they are needed\n needsParenthesisWhenIndexed = false\n needsParenthesisInKeyof = false\n needsParenthesisInUnion = false\n needsParenthesisInIntersection = false\n\n abstract write(writer: Writer): void\n\n subKey(key: string): KeyType {\n // TODO: since we translating ESM to CommonJS during bundling, we\n // can't handle circular dependencies the same way ESM does. We have to delay KeyType import\n // to resolve it. Once we stop doing this, we can move this import to top of the file.\n const { KeyType } = require('./KeyType')\n return new KeyType(this, key)\n }\n\n writeIndexed(writer: Writer) {\n if (this.needsParenthesisWhenIndexed) {\n writer.write('(')\n }\n\n writer.write(this)\n\n if (this.needsParenthesisWhenIndexed) {\n writer.write(')')\n }\n }\n}\n", "import { TypeBuilder } from './TypeBuilder'\nimport { Writer } from './Writer'\n\nexport class KeyType extends TypeBuilder {\n constructor(\n public baseType: TypeBuilder,\n public key: string,\n ) {\n super()\n }\n write(writer: Writer): void {\n this.baseType.writeIndexed(writer)\n\n writer.write('[').write(`\"${this.key}\"`).write(']')\n }\n}\n\nexport function keyType(baseType: TypeBuilder, key: string) {\n return new KeyType(baseType, key)\n}\n", "'use strict'\n\nmodule.exports = {\n kClose: Symbol('close'),\n kDestroy: Symbol('destroy'),\n kDispatch: Symbol('dispatch'),\n kUrl: Symbol('url'),\n kWriting: Symbol('writing'),\n kResuming: Symbol('resuming'),\n kQueue: Symbol('queue'),\n kConnect: Symbol('connect'),\n kConnecting: Symbol('connecting'),\n kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),\n kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),\n kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),\n kKeepAliveTimeoutValue: Symbol('keep alive timeout'),\n kKeepAlive: Symbol('keep alive'),\n kHeadersTimeout: Symbol('headers timeout'),\n kBodyTimeout: Symbol('body timeout'),\n kServerName: Symbol('server name'),\n kLocalAddress: Symbol('local address'),\n kHost: Symbol('host'),\n kNoRef: Symbol('no ref'),\n kBodyUsed: Symbol('used'),\n kBody: Symbol('abstracted request body'),\n kRunning: Symbol('running'),\n kBlocking: Symbol('blocking'),\n kPending: Symbol('pending'),\n kSize: Symbol('size'),\n kBusy: Symbol('busy'),\n kQueued: Symbol('queued'),\n kFree: Symbol('free'),\n kConnected: Symbol('connected'),\n kClosed: Symbol('closed'),\n kNeedDrain: Symbol('need drain'),\n kReset: Symbol('reset'),\n kDestroyed: Symbol.for('nodejs.stream.destroyed'),\n kResume: Symbol('resume'),\n kOnError: Symbol('on error'),\n kMaxHeadersSize: Symbol('max headers size'),\n kRunningIdx: Symbol('running index'),\n kPendingIdx: Symbol('pending index'),\n kError: Symbol('error'),\n kClients: Symbol('clients'),\n kClient: Symbol('client'),\n kParser: Symbol('parser'),\n kOnDestroyed: Symbol('destroy callbacks'),\n kPipelining: Symbol('pipelining'),\n kSocket: Symbol('socket'),\n kHostHeader: Symbol('host header'),\n kConnector: Symbol('connector'),\n kStrictContentLength: Symbol('strict content length'),\n kMaxRedirections: Symbol('maxRedirections'),\n kMaxRequests: Symbol('maxRequestsPerClient'),\n kProxy: Symbol('proxy agent options'),\n kCounter: Symbol('socket request counter'),\n kMaxResponseSize: Symbol('max response size'),\n kHTTP2Session: Symbol('http2Session'),\n kHTTP2SessionState: Symbol('http2Session state'),\n kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),\n kConstruct: Symbol('constructable'),\n kListeners: Symbol('listeners'),\n kHTTPContext: Symbol('http context'),\n kMaxConcurrentStreams: Symbol('max concurrent streams'),\n kNoProxyAgent: Symbol('no proxy agent'),\n kHttpProxyAgent: Symbol('http proxy agent'),\n kHttpsProxyAgent: Symbol('https proxy agent')\n}\n", "'use strict'\n\nclass UndiciError extends Error {\n constructor (message, options) {\n super(message, options)\n this.name = 'UndiciError'\n this.code = 'UND_ERR'\n }\n}\n\nclass ConnectTimeoutError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'ConnectTimeoutError'\n this.message = message || 'Connect Timeout Error'\n this.code = 'UND_ERR_CONNECT_TIMEOUT'\n }\n}\n\nclass HeadersTimeoutError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'HeadersTimeoutError'\n this.message = message || 'Headers Timeout Error'\n this.code = 'UND_ERR_HEADERS_TIMEOUT'\n }\n}\n\nclass HeadersOverflowError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'HeadersOverflowError'\n this.message = message || 'Headers Overflow Error'\n this.code = 'UND_ERR_HEADERS_OVERFLOW'\n }\n}\n\nclass BodyTimeoutError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'BodyTimeoutError'\n this.message = message || 'Body Timeout Error'\n this.code = 'UND_ERR_BODY_TIMEOUT'\n }\n}\n\nclass ResponseStatusCodeError extends UndiciError {\n constructor (message, statusCode, headers, body) {\n super(message)\n this.name = 'ResponseStatusCodeError'\n this.message = message || 'Response Status Code Error'\n this.code = 'UND_ERR_RESPONSE_STATUS_CODE'\n this.body = body\n this.status = statusCode\n this.statusCode = statusCode\n this.headers = headers\n }\n}\n\nclass InvalidArgumentError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'InvalidArgumentError'\n this.message = message || 'Invalid Argument Error'\n this.code = 'UND_ERR_INVALID_ARG'\n }\n}\n\nclass InvalidReturnValueError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'InvalidReturnValueError'\n this.message = message || 'Invalid Return Value Error'\n this.code = 'UND_ERR_INVALID_RETURN_VALUE'\n }\n}\n\nclass AbortError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'AbortError'\n this.message = message || 'The operation was aborted'\n }\n}\n\nclass RequestAbortedError extends AbortError {\n constructor (message) {\n super(message)\n this.name = 'AbortError'\n this.message = message || 'Request aborted'\n this.code = 'UND_ERR_ABORTED'\n }\n}\n\nclass InformationalError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'InformationalError'\n this.message = message || 'Request information'\n this.code = 'UND_ERR_INFO'\n }\n}\n\nclass RequestContentLengthMismatchError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'RequestContentLengthMismatchError'\n this.message = message || 'Request body length does not match content-length header'\n this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'\n }\n}\n\nclass ResponseContentLengthMismatchError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'ResponseContentLengthMismatchError'\n this.message = message || 'Response body length does not match content-length header'\n this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'\n }\n}\n\nclass ClientDestroyedError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'ClientDestroyedError'\n this.message = message || 'The client is destroyed'\n this.code = 'UND_ERR_DESTROYED'\n }\n}\n\nclass ClientClosedError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'ClientClosedError'\n this.message = message || 'The client is closed'\n this.code = 'UND_ERR_CLOSED'\n }\n}\n\nclass SocketError extends UndiciError {\n constructor (message, socket) {\n super(message)\n this.name = 'SocketError'\n this.message = message || 'Socket error'\n this.code = 'UND_ERR_SOCKET'\n this.socket = socket\n }\n}\n\nclass NotSupportedError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'NotSupportedError'\n this.message = message || 'Not supported error'\n this.code = 'UND_ERR_NOT_SUPPORTED'\n }\n}\n\nclass BalancedPoolMissingUpstreamError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'MissingUpstreamError'\n this.message = message || 'No upstream has been added to the BalancedPool'\n this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'\n }\n}\n\nclass HTTPParserError extends Error {\n constructor (message, code, data) {\n super(message)\n this.name = 'HTTPParserError'\n this.code = code ? `HPE_${code}` : undefined\n this.data = data ? data.toString() : undefined\n }\n}\n\nclass ResponseExceededMaxSizeError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'ResponseExceededMaxSizeError'\n this.message = message || 'Response content exceeded max size'\n this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'\n }\n}\n\nclass RequestRetryError extends UndiciError {\n constructor (message, code, { headers, data }) {\n super(message)\n this.name = 'RequestRetryError'\n this.message = message || 'Request retry error'\n this.code = 'UND_ERR_REQ_RETRY'\n this.statusCode = code\n this.data = data\n this.headers = headers\n }\n}\n\nclass ResponseError extends UndiciError {\n constructor (message, code, { headers, body }) {\n super(message)\n this.name = 'ResponseError'\n this.message = message || 'Response error'\n this.code = 'UND_ERR_RESPONSE'\n this.statusCode = code\n this.body = body\n this.headers = headers\n }\n}\n\nclass SecureProxyConnectionError extends UndiciError {\n constructor (cause, message, options = {}) {\n super(message, { cause, ...options })\n this.name = 'SecureProxyConnectionError'\n this.message = message || 'Secure Proxy Connection failed'\n this.code = 'UND_ERR_PRX_TLS'\n this.cause = cause\n }\n}\n\nmodule.exports = {\n AbortError,\n HTTPParserError,\n UndiciError,\n HeadersTimeoutError,\n HeadersOverflowError,\n BodyTimeoutError,\n RequestContentLengthMismatchError,\n ConnectTimeoutError,\n ResponseStatusCodeError,\n InvalidArgumentError,\n InvalidReturnValueError,\n RequestAbortedError,\n ClientDestroyedError,\n ClientClosedError,\n InformationalError,\n SocketError,\n NotSupportedError,\n ResponseContentLengthMismatchError,\n BalancedPoolMissingUpstreamError,\n ResponseExceededMaxSizeError,\n RequestRetryError,\n ResponseError,\n SecureProxyConnectionError\n}\n", "'use strict'\n\n/**\n * @see https://developer.mozilla.org/docs/Web/HTTP/Headers\n */\nconst wellknownHeaderNames = /** @type {const} */ ([\n 'Accept',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Accept-Ranges',\n 'Access-Control-Allow-Credentials',\n 'Access-Control-Allow-Headers',\n 'Access-Control-Allow-Methods',\n 'Access-Control-Allow-Origin',\n 'Access-Control-Expose-Headers',\n 'Access-Control-Max-Age',\n 'Access-Control-Request-Headers',\n 'Access-Control-Request-Method',\n 'Age',\n 'Allow',\n 'Alt-Svc',\n 'Alt-Used',\n 'Authorization',\n 'Cache-Control',\n 'Clear-Site-Data',\n 'Connection',\n 'Content-Disposition',\n 'Content-Encoding',\n 'Content-Language',\n 'Content-Length',\n 'Content-Location',\n 'Content-Range',\n 'Content-Security-Policy',\n 'Content-Security-Policy-Report-Only',\n 'Content-Type',\n 'Cookie',\n 'Cross-Origin-Embedder-Policy',\n 'Cross-Origin-Opener-Policy',\n 'Cross-Origin-Resource-Policy',\n 'Date',\n 'Device-Memory',\n 'Downlink',\n 'ECT',\n 'ETag',\n 'Expect',\n 'Expect-CT',\n 'Expires',\n 'Forwarded',\n 'From',\n 'Host',\n 'If-Match',\n 'If-Modified-Since',\n 'If-None-Match',\n 'If-Range',\n 'If-Unmodified-Since',\n 'Keep-Alive',\n 'Last-Modified',\n 'Link',\n 'Location',\n 'Max-Forwards',\n 'Origin',\n 'Permissions-Policy',\n 'Pragma',\n 'Proxy-Authenticate',\n 'Proxy-Authorization',\n 'RTT',\n 'Range',\n 'Referer',\n 'Referrer-Policy',\n 'Refresh',\n 'Retry-After',\n 'Sec-WebSocket-Accept',\n 'Sec-WebSocket-Extensions',\n 'Sec-WebSocket-Key',\n 'Sec-WebSocket-Protocol',\n 'Sec-WebSocket-Version',\n 'Server',\n 'Server-Timing',\n 'Service-Worker-Allowed',\n 'Service-Worker-Navigation-Preload',\n 'Set-Cookie',\n 'SourceMap',\n 'Strict-Transport-Security',\n 'Supports-Loading-Mode',\n 'TE',\n 'Timing-Allow-Origin',\n 'Trailer',\n 'Transfer-Encoding',\n 'Upgrade',\n 'Upgrade-Insecure-Requests',\n 'User-Agent',\n 'Vary',\n 'Via',\n 'WWW-Authenticate',\n 'X-Content-Type-Options',\n 'X-DNS-Prefetch-Control',\n 'X-Frame-Options',\n 'X-Permitted-Cross-Domain-Policies',\n 'X-Powered-By',\n 'X-Requested-With',\n 'X-XSS-Protection'\n])\n\n/** @type {Record<typeof wellknownHeaderNames[number]|Lowercase<typeof wellknownHeaderNames[number]>, string>} */\nconst headerNameLowerCasedRecord = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(headerNameLowerCasedRecord, null)\n\n/**\n * @type {Record<Lowercase<typeof wellknownHeaderNames[number]>, Buffer>}\n */\nconst wellknownHeaderNameBuffers = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(wellknownHeaderNameBuffers, null)\n\n/**\n * @param {string} header Lowercased header\n * @returns {Buffer}\n */\nfunction getHeaderNameAsBuffer (header) {\n let buffer = wellknownHeaderNameBuffers[header]\n\n if (buffer === undefined) {\n buffer = Buffer.from(header)\n }\n\n return buffer\n}\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n const key = wellknownHeaderNames[i]\n const lowerCasedKey = key.toLowerCase()\n headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =\n lowerCasedKey\n}\n\nmodule.exports = {\n wellknownHeaderNames,\n headerNameLowerCasedRecord,\n getHeaderNameAsBuffer\n}\n", "'use strict'\n\nconst {\n wellknownHeaderNames,\n headerNameLowerCasedRecord\n} = require('./constants')\n\nclass TstNode {\n /** @type {any} */\n value = null\n /** @type {null | TstNode} */\n left = null\n /** @type {null | TstNode} */\n middle = null\n /** @type {null | TstNode} */\n right = null\n /** @type {number} */\n code\n /**\n * @param {string} key\n * @param {any} value\n * @param {number} index\n */\n constructor (key, value, index) {\n if (index === undefined || index >= key.length) {\n throw new TypeError('Unreachable')\n }\n const code = this.code = key.charCodeAt(index)\n // check code is ascii string\n if (code > 0x7F) {\n throw new TypeError('key must be ascii string')\n }\n if (key.length !== ++index) {\n this.middle = new TstNode(key, value, index)\n } else {\n this.value = value\n }\n }\n\n /**\n * @param {string} key\n * @param {any} value\n * @returns {void}\n */\n add (key, value) {\n const length = key.length\n if (length === 0) {\n throw new TypeError('Unreachable')\n }\n let index = 0\n /**\n * @type {TstNode}\n */\n let node = this\n while (true) {\n const code = key.charCodeAt(index)\n // check code is ascii string\n if (code > 0x7F) {\n throw new TypeError('key must be ascii string')\n }\n if (node.code === code) {\n if (length === ++index) {\n node.value = value\n break\n } else if (node.middle !== null) {\n node = node.middle\n } else {\n node.middle = new TstNode(key, value, index)\n break\n }\n } else if (node.code < code) {\n if (node.left !== null) {\n node = node.left\n } else {\n node.left = new TstNode(key, value, index)\n break\n }\n } else if (node.right !== null) {\n node = node.right\n } else {\n node.right = new TstNode(key, value, index)\n break\n }\n }\n }\n\n /**\n * @param {Uint8Array} key\n * @return {TstNode | null}\n */\n search (key) {\n const keylength = key.length\n let index = 0\n /**\n * @type {TstNode|null}\n */\n let node = this\n while (node !== null && index < keylength) {\n let code = key[index]\n // A-Z\n // First check if it is bigger than 0x5a.\n // Lowercase letters have higher char codes than uppercase ones.\n // Also we assume that headers will mostly contain lowercase characters.\n if (code <= 0x5a && code >= 0x41) {\n // Lowercase for uppercase.\n code |= 32\n }\n while (node !== null) {\n if (code === node.code) {\n if (keylength === ++index) {\n // Returns Node since it is the last key.\n return node\n }\n node = node.middle\n break\n }\n node = node.code < code ? node.left : node.right\n }\n }\n return null\n }\n}\n\nclass TernarySearchTree {\n /** @type {TstNode | null} */\n node = null\n\n /**\n * @param {string} key\n * @param {any} value\n * @returns {void}\n * */\n insert (key, value) {\n if (this.node === null) {\n this.node = new TstNode(key, value, 0)\n } else {\n this.node.add(key, value)\n }\n }\n\n /**\n * @param {Uint8Array} key\n * @returns {any}\n */\n lookup (key) {\n return this.node?.search(key)?.value ?? null\n }\n}\n\nconst tree = new TernarySearchTree()\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]\n tree.insert(key, key)\n}\n\nmodule.exports = {\n TernarySearchTree,\n tree\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { kDestroyed, kBodyUsed, kListeners, kBody } = require('./symbols')\nconst { IncomingMessage } = require('node:http')\nconst stream = require('node:stream')\nconst net = require('node:net')\nconst { Blob } = require('node:buffer')\nconst nodeUtil = require('node:util')\nconst { stringify } = require('node:querystring')\nconst { EventEmitter: EE } = require('node:events')\nconst { InvalidArgumentError } = require('./errors')\nconst { headerNameLowerCasedRecord } = require('./constants')\nconst { tree } = require('./tree')\n\nconst [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v))\n\nclass BodyAsyncIterable {\n constructor (body) {\n this[kBody] = body\n this[kBodyUsed] = false\n }\n\n async * [Symbol.asyncIterator] () {\n assert(!this[kBodyUsed], 'disturbed')\n this[kBodyUsed] = true\n yield * this[kBody]\n }\n}\n\n/**\n * @param {*} body\n * @returns {*}\n */\nfunction wrapRequestBody (body) {\n if (isStream(body)) {\n // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n // so that it can be dispatched again?\n // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n if (bodyLength(body) === 0) {\n body\n .on('data', function () {\n assert(false)\n })\n }\n\n if (typeof body.readableDidRead !== 'boolean') {\n body[kBodyUsed] = false\n EE.prototype.on.call(body, 'data', function () {\n this[kBodyUsed] = true\n })\n }\n\n return body\n } else if (body && typeof body.pipeTo === 'function') {\n // TODO (fix): We can't access ReadableStream internal state\n // to determine whether or not it has been disturbed. This is just\n // a workaround.\n return new BodyAsyncIterable(body)\n } else if (\n body &&\n typeof body !== 'string' &&\n !ArrayBuffer.isView(body) &&\n isIterable(body)\n ) {\n // TODO: Should we allow re-using iterable if !this.opts.idempotent\n // or through some other flag?\n return new BodyAsyncIterable(body)\n } else {\n return body\n }\n}\n\n/**\n * @param {*} obj\n * @returns {obj is import('node:stream').Stream}\n */\nfunction isStream (obj) {\n return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'\n}\n\n/**\n * @param {*} object\n * @returns {object is Blob}\n * based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)\n */\nfunction isBlobLike (object) {\n if (object === null) {\n return false\n } else if (object instanceof Blob) {\n return true\n } else if (typeof object !== 'object') {\n return false\n } else {\n const sTag = object[Symbol.toStringTag]\n\n return (sTag === 'Blob' || sTag === 'File') && (\n ('stream' in object && typeof object.stream === 'function') ||\n ('arrayBuffer' in object && typeof object.arrayBuffer === 'function')\n )\n }\n}\n\n/**\n * @param {string} url The URL to add the query params to\n * @param {import('node:querystring').ParsedUrlQueryInput} queryParams The object to serialize into a URL query string\n * @returns {string} The URL with the query params added\n */\nfunction serializePathWithQuery (url, queryParams) {\n if (url.includes('?') || url.includes('#')) {\n throw new Error('Query params cannot be passed when url already contains \"?\" or \"#\".')\n }\n\n const stringified = stringify(queryParams)\n\n if (stringified) {\n url += '?' + stringified\n }\n\n return url\n}\n\n/**\n * @param {number|string|undefined} port\n * @returns {boolean}\n */\nfunction isValidPort (port) {\n const value = parseInt(port, 10)\n return (\n value === Number(port) &&\n value >= 0 &&\n value <= 65535\n )\n}\n\n/**\n * Check if the value is a valid http or https prefixed string.\n *\n * @param {string} value\n * @returns {boolean}\n */\nfunction isHttpOrHttpsPrefixed (value) {\n return (\n value != null &&\n value[0] === 'h' &&\n value[1] === 't' &&\n value[2] === 't' &&\n value[3] === 'p' &&\n (\n value[4] === ':' ||\n (\n value[4] === 's' &&\n value[5] === ':'\n )\n )\n )\n}\n\n/**\n * @param {string|URL|Record<string,string>} url\n * @returns {URL}\n */\nfunction parseURL (url) {\n if (typeof url === 'string') {\n /**\n * @type {URL}\n */\n url = new URL(url)\n\n if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n }\n\n return url\n }\n\n if (!url || typeof url !== 'object') {\n throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')\n }\n\n if (!(url instanceof URL)) {\n if (url.port != null && url.port !== '' && isValidPort(url.port) === false) {\n throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')\n }\n\n if (url.path != null && typeof url.path !== 'string') {\n throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')\n }\n\n if (url.pathname != null && typeof url.pathname !== 'string') {\n throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')\n }\n\n if (url.hostname != null && typeof url.hostname !== 'string') {\n throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')\n }\n\n if (url.origin != null && typeof url.origin !== 'string') {\n throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')\n }\n\n if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n }\n\n const port = url.port != null\n ? url.port\n : (url.protocol === 'https:' ? 443 : 80)\n let origin = url.origin != null\n ? url.origin\n : `${url.protocol || ''}//${url.hostname || ''}:${port}`\n let path = url.path != null\n ? url.path\n : `${url.pathname || ''}${url.search || ''}`\n\n if (origin[origin.length - 1] === '/') {\n origin = origin.slice(0, origin.length - 1)\n }\n\n if (path && path[0] !== '/') {\n path = `/${path}`\n }\n // new URL(path, origin) is unsafe when `path` contains an absolute URL\n // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:\n // If first parameter is a relative URL, second param is required, and will be used as the base URL.\n // If first parameter is an absolute URL, a given second param will be ignored.\n return new URL(`${origin}${path}`)\n }\n\n if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n }\n\n return url\n}\n\n/**\n * @param {string|URL|Record<string, string>} url\n * @returns {URL}\n */\nfunction parseOrigin (url) {\n url = parseURL(url)\n\n if (url.pathname !== '/' || url.search || url.hash) {\n throw new InvalidArgumentError('invalid url')\n }\n\n return url\n}\n\n/**\n * @param {string} host\n * @returns {string}\n */\nfunction getHostname (host) {\n if (host[0] === '[') {\n const idx = host.indexOf(']')\n\n assert(idx !== -1)\n return host.substring(1, idx)\n }\n\n const idx = host.indexOf(':')\n if (idx === -1) return host\n\n return host.substring(0, idx)\n}\n\n/**\n * IP addresses are not valid server names per RFC6066\n * Currently, the only server names supported are DNS hostnames\n * @param {string|null} host\n * @returns {string|null}\n */\nfunction getServerName (host) {\n if (!host) {\n return null\n }\n\n assert(typeof host === 'string')\n\n const servername = getHostname(host)\n if (net.isIP(servername)) {\n return ''\n }\n\n return servername\n}\n\n/**\n * @function\n * @template T\n * @param {T} obj\n * @returns {T}\n */\nfunction deepClone (obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * @param {*} obj\n * @returns {obj is AsyncIterable}\n */\nfunction isAsyncIterable (obj) {\n return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')\n}\n\n/**\n * @param {*} obj\n * @returns {obj is Iterable}\n */\nfunction isIterable (obj) {\n return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))\n}\n\n/**\n * @param {Blob|Buffer|import ('stream').Stream} body\n * @returns {number|null}\n */\nfunction bodyLength (body) {\n if (body == null) {\n return 0\n } else if (isStream(body)) {\n const state = body._readableState\n return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)\n ? state.length\n : null\n } else if (isBlobLike(body)) {\n return body.size != null ? body.size : null\n } else if (isBuffer(body)) {\n return body.byteLength\n }\n\n return null\n}\n\n/**\n * @param {import ('stream').Stream} body\n * @returns {boolean}\n */\nfunction isDestroyed (body) {\n return body && !!(body.destroyed || body[kDestroyed] || (stream.isDestroyed?.(body)))\n}\n\n/**\n * @param {import ('stream').Stream} stream\n * @param {Error} [err]\n * @returns {void}\n */\nfunction destroy (stream, err) {\n if (stream == null || !isStream(stream) || isDestroyed(stream)) {\n return\n }\n\n if (typeof stream.destroy === 'function') {\n if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {\n // See: https://github.com/nodejs/node/pull/38505/files\n stream.socket = null\n }\n\n stream.destroy(err)\n } else if (err) {\n queueMicrotask(() => {\n stream.emit('error', err)\n })\n }\n\n if (stream.destroyed !== true) {\n stream[kDestroyed] = true\n }\n}\n\nconst KEEPALIVE_TIMEOUT_EXPR = /timeout=(\\d+)/\n/**\n * @param {string} val\n * @returns {number | null}\n */\nfunction parseKeepAliveTimeout (val) {\n const m = val.match(KEEPALIVE_TIMEOUT_EXPR)\n return m ? parseInt(m[1], 10) * 1000 : null\n}\n\n/**\n * Retrieves a header name and returns its lowercase value.\n * @param {string | Buffer} value Header name\n * @returns {string}\n */\nfunction headerNameToString (value) {\n return typeof value === 'string'\n ? headerNameLowerCasedRecord[value] ?? value.toLowerCase()\n : tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * Receive the buffer as a string and return its lowercase value.\n * @param {Buffer} value Header name\n * @returns {string}\n */\nfunction bufferToLowerCasedHeaderName (value) {\n return tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * @param {(Buffer | string)[]} headers\n * @param {Record<string, string | string[]>} [obj]\n * @returns {Record<string, string | string[]>}\n */\nfunction parseHeaders (headers, obj) {\n if (obj === undefined) obj = {}\n\n for (let i = 0; i < headers.length; i += 2) {\n const key = headerNameToString(headers[i])\n let val = obj[key]\n\n if (val) {\n if (typeof val === 'string') {\n val = [val]\n obj[key] = val\n }\n val.push(headers[i + 1].toString('utf8'))\n } else {\n const headersValue = headers[i + 1]\n if (typeof headersValue === 'string') {\n obj[key] = headersValue\n } else {\n obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('utf8')) : headersValue.toString('utf8')\n }\n }\n }\n\n // See https://github.com/nodejs/node/pull/46528\n if ('content-length' in obj && 'content-disposition' in obj) {\n obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1')\n }\n\n return obj\n}\n\n/**\n * @param {Buffer[]} headers\n * @returns {string[]}\n */\nfunction parseRawHeaders (headers) {\n const headersLength = headers.length\n /**\n * @type {string[]}\n */\n const ret = new Array(headersLength)\n\n let hasContentLength = false\n let contentDispositionIdx = -1\n let key\n let val\n let kLen = 0\n\n for (let n = 0; n < headersLength; n += 2) {\n key = headers[n]\n val = headers[n + 1]\n\n typeof key !== 'string' && (key = key.toString())\n typeof val !== 'string' && (val = val.toString('utf8'))\n\n kLen = key.length\n if (kLen === 14 && key[7] === '-' && (key === 'content-length' || key.toLowerCase() === 'content-length')) {\n hasContentLength = true\n } else if (kLen === 19 && key[7] === '-' && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) {\n contentDispositionIdx = n + 1\n }\n ret[n] = key\n ret[n + 1] = val\n }\n\n // See https://github.com/nodejs/node/pull/46528\n if (hasContentLength && contentDispositionIdx !== -1) {\n ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1')\n }\n\n return ret\n}\n\n/**\n * @param {string[]} headers\n * @param {Buffer[]} headers\n */\nfunction encodeRawHeaders (headers) {\n if (!Array.isArray(headers)) {\n throw new TypeError('expected headers to be an array')\n }\n return headers.map(x => Buffer.from(x))\n}\n\n/**\n * @param {*} buffer\n * @returns {buffer is Buffer}\n */\nfunction isBuffer (buffer) {\n // See, https://github.com/mcollina/undici/pull/319\n return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)\n}\n\n/**\n * Asserts that the handler object is a request handler.\n *\n * @param {object} handler\n * @param {string} method\n * @param {string} [upgrade]\n * @returns {asserts handler is import('../api/api-request').RequestHandler}\n */\nfunction assertRequestHandler (handler, method, upgrade) {\n if (!handler || typeof handler !== 'object') {\n throw new InvalidArgumentError('handler must be an object')\n }\n\n if (typeof handler.onRequestStart === 'function') {\n // TODO (fix): More checks...\n return\n }\n\n if (typeof handler.onConnect !== 'function') {\n throw new InvalidArgumentError('invalid onConnect method')\n }\n\n if (typeof handler.onError !== 'function') {\n throw new InvalidArgumentError('invalid onError method')\n }\n\n if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {\n throw new InvalidArgumentError('invalid onBodySent method')\n }\n\n if (upgrade || method === 'CONNECT') {\n if (typeof handler.onUpgrade !== 'function') {\n throw new InvalidArgumentError('invalid onUpgrade method')\n }\n } else {\n if (typeof handler.onHeaders !== 'function') {\n throw new InvalidArgumentError('invalid onHeaders method')\n }\n\n if (typeof handler.onData !== 'function') {\n throw new InvalidArgumentError('invalid onData method')\n }\n\n if (typeof handler.onComplete !== 'function') {\n throw new InvalidArgumentError('invalid onComplete method')\n }\n }\n}\n\n/**\n * A body is disturbed if it has been read from and it cannot be re-used without\n * losing state or data.\n * @param {import('node:stream').Readable} body\n * @returns {boolean}\n */\nfunction isDisturbed (body) {\n // TODO (fix): Why is body[kBodyUsed] needed?\n return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]))\n}\n\n/**\n * @typedef {object} SocketInfo\n * @property {string} [localAddress]\n * @property {number} [localPort]\n * @property {string} [remoteAddress]\n * @property {number} [remotePort]\n * @property {string} [remoteFamily]\n * @property {number} [timeout]\n * @property {number} bytesWritten\n * @property {number} bytesRead\n */\n\n/**\n * @param {import('net').Socket} socket\n * @returns {SocketInfo}\n */\nfunction getSocketInfo (socket) {\n return {\n localAddress: socket.localAddress,\n localPort: socket.localPort,\n remoteAddress: socket.remoteAddress,\n remotePort: socket.remotePort,\n remoteFamily: socket.remoteFamily,\n timeout: socket.timeout,\n bytesWritten: socket.bytesWritten,\n bytesRead: socket.bytesRead\n }\n}\n\n/**\n * @param {Iterable} iterable\n * @returns {ReadableStream}\n */\nfunction ReadableStreamFrom (iterable) {\n // We cannot use ReadableStream.from here because it does not return a byte stream.\n\n let iterator\n return new ReadableStream(\n {\n async start () {\n iterator = iterable[Symbol.asyncIterator]()\n },\n pull (controller) {\n async function pull () {\n const { done, value } = await iterator.next()\n if (done) {\n queueMicrotask(() => {\n controller.close()\n controller.byobRequest?.respond(0)\n })\n } else {\n const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n if (buf.byteLength) {\n controller.enqueue(new Uint8Array(buf))\n } else {\n return await pull()\n }\n }\n }\n\n return pull()\n },\n async cancel () {\n await iterator.return()\n },\n type: 'bytes'\n }\n )\n}\n\n/**\n * The object should be a FormData instance and contains all the required\n * methods.\n * @param {*} object\n * @returns {object is FormData}\n */\nfunction isFormDataLike (object) {\n return (\n object &&\n typeof object === 'object' &&\n typeof object.append === 'function' &&\n typeof object.delete === 'function' &&\n typeof object.get === 'function' &&\n typeof object.getAll === 'function' &&\n typeof object.has === 'function' &&\n typeof object.set === 'function' &&\n object[Symbol.toStringTag] === 'FormData'\n )\n}\n\nfunction addAbortListener (signal, listener) {\n if ('addEventListener' in signal) {\n signal.addEventListener('abort', listener, { once: true })\n return () => signal.removeEventListener('abort', listener)\n }\n signal.once('abort', listener)\n return () => signal.removeListener('abort', listener)\n}\n\n/**\n * @function\n * @param {string} value\n * @returns {string}\n */\nconst toUSVString = (() => {\n if (typeof String.prototype.toWellFormed === 'function') {\n /**\n * @param {string} value\n * @returns {string}\n */\n return (value) => `${value}`.toWellFormed()\n } else {\n /**\n * @param {string} value\n * @returns {string}\n */\n return nodeUtil.toUSVString\n }\n})()\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\n// TODO: move this to webidl\nconst isUSVString = (() => {\n if (typeof String.prototype.isWellFormed === 'function') {\n /**\n * @param {*} value\n * @returns {boolean}\n */\n return (value) => `${value}`.isWellFormed()\n } else {\n /**\n * @param {*} value\n * @returns {boolean}\n */\n return (value) => toUSVString(value) === `${value}`\n }\n})()\n\n/**\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n * @param {number} c\n * @returns {boolean}\n */\nfunction isTokenCharCode (c) {\n switch (c) {\n case 0x22:\n case 0x28:\n case 0x29:\n case 0x2c:\n case 0x2f:\n case 0x3a:\n case 0x3b:\n case 0x3c:\n case 0x3d:\n case 0x3e:\n case 0x3f:\n case 0x40:\n case 0x5b:\n case 0x5c:\n case 0x5d:\n case 0x7b:\n case 0x7d:\n // DQUOTE and \"(),/:;<=>?@[\\]{}\"\n return false\n default:\n // VCHAR %x21-7E\n return c >= 0x21 && c <= 0x7e\n }\n}\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n if (characters.length === 0) {\n return false\n }\n for (let i = 0; i < characters.length; ++i) {\n if (!isTokenCharCode(characters.charCodeAt(i))) {\n return false\n }\n }\n return true\n}\n\n// headerCharRegex have been lifted from\n// https://github.com/nodejs/node/blob/main/lib/_http_common.js\n\n/**\n * Matches if val contains an invalid field-vchar\n * field-value = *( field-content / obs-fold )\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n */\nconst headerCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHeaderValue (characters) {\n return !headerCharRegex.test(characters)\n}\n\nconst rangeHeaderRegex = /^bytes (\\d+)-(\\d+)\\/(\\d+)?$/\n\n/**\n * @typedef {object} RangeHeader\n * @property {number} start\n * @property {number | null} end\n * @property {number | null} size\n */\n\n/**\n * Parse accordingly to RFC 9110\n * @see https://www.rfc-editor.org/rfc/rfc9110#field.content-range\n * @param {string} [range]\n * @returns {RangeHeader|null}\n */\nfunction parseRangeHeader (range) {\n if (range == null || range === '') return { start: 0, end: null, size: null }\n\n const m = range ? range.match(rangeHeaderRegex) : null\n return m\n ? {\n start: parseInt(m[1]),\n end: m[2] ? parseInt(m[2]) : null,\n size: m[3] ? parseInt(m[3]) : null\n }\n : null\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @param {string} name\n * @param {(...args: any[]) => void} listener\n * @returns {T}\n */\nfunction addListener (obj, name, listener) {\n const listeners = (obj[kListeners] ??= [])\n listeners.push([name, listener])\n obj.on(name, listener)\n return obj\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @returns {T}\n */\nfunction removeAllListeners (obj) {\n if (obj[kListeners] != null) {\n for (const [name, listener] of obj[kListeners]) {\n obj.removeListener(name, listener)\n }\n obj[kListeners] = null\n }\n return obj\n}\n\n/**\n * @param {import ('../dispatcher/client')} client\n * @param {import ('../core/request')} request\n * @param {Error} err\n */\nfunction errorRequest (client, request, err) {\n try {\n request.onError(err)\n assert(request.aborted)\n } catch (err) {\n client.emit('error', err)\n }\n}\n\nconst kEnumerableProperty = Object.create(null)\nkEnumerableProperty.enumerable = true\n\nconst normalizedMethodRecordsBase = {\n delete: 'DELETE',\n DELETE: 'DELETE',\n get: 'GET',\n GET: 'GET',\n head: 'HEAD',\n HEAD: 'HEAD',\n options: 'OPTIONS',\n OPTIONS: 'OPTIONS',\n post: 'POST',\n POST: 'POST',\n put: 'PUT',\n PUT: 'PUT'\n}\n\nconst normalizedMethodRecords = {\n ...normalizedMethodRecordsBase,\n patch: 'patch',\n PATCH: 'PATCH'\n}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(normalizedMethodRecordsBase, null)\nObject.setPrototypeOf(normalizedMethodRecords, null)\n\nmodule.exports = {\n kEnumerableProperty,\n isDisturbed,\n toUSVString,\n isUSVString,\n isBlobLike,\n parseOrigin,\n parseURL,\n getServerName,\n isStream,\n isIterable,\n isAsyncIterable,\n isDestroyed,\n headerNameToString,\n bufferToLowerCasedHeaderName,\n addListener,\n removeAllListeners,\n errorRequest,\n parseRawHeaders,\n encodeRawHeaders,\n parseHeaders,\n parseKeepAliveTimeout,\n destroy,\n bodyLength,\n deepClone,\n ReadableStreamFrom,\n isBuffer,\n assertRequestHandler,\n getSocketInfo,\n isFormDataLike,\n serializePathWithQuery,\n addAbortListener,\n isValidHTTPToken,\n isValidHeaderValue,\n isTokenCharCode,\n parseRangeHeader,\n normalizedMethodRecordsBase,\n normalizedMethodRecords,\n isValidPort,\n isHttpOrHttpsPrefixed,\n nodeMajor,\n nodeMinor,\n safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),\n wrapRequestBody\n}\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('node:util')\n\nconst undiciDebugLog = util.debuglog('undici')\nconst fetchDebuglog = util.debuglog('fetch')\nconst websocketDebuglog = util.debuglog('websocket')\n\nconst channels = {\n // Client\n beforeConnect: diagnosticsChannel.channel('undici:client:beforeConnect'),\n connected: diagnosticsChannel.channel('undici:client:connected'),\n connectError: diagnosticsChannel.channel('undici:client:connectError'),\n sendHeaders: diagnosticsChannel.channel('undici:client:sendHeaders'),\n // Request\n create: diagnosticsChannel.channel('undici:request:create'),\n bodySent: diagnosticsChannel.channel('undici:request:bodySent'),\n headers: diagnosticsChannel.channel('undici:request:headers'),\n trailers: diagnosticsChannel.channel('undici:request:trailers'),\n error: diagnosticsChannel.channel('undici:request:error'),\n // WebSocket\n open: diagnosticsChannel.channel('undici:websocket:open'),\n close: diagnosticsChannel.channel('undici:websocket:close'),\n socketError: diagnosticsChannel.channel('undici:websocket:socket_error'),\n ping: diagnosticsChannel.channel('undici:websocket:ping'),\n pong: diagnosticsChannel.channel('undici:websocket:pong')\n}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n if (isTrackingClientEvents) {\n return\n }\n\n isTrackingClientEvents = true\n\n diagnosticsChannel.subscribe('undici:client:beforeConnect',\n evt => {\n const {\n connectParams: { version, protocol, port, host }\n } = evt\n debugLog(\n 'connecting to %s%s using %s%s',\n host,\n port ? `:${port}` : '',\n protocol,\n version\n )\n })\n\n diagnosticsChannel.subscribe('undici:client:connected',\n evt => {\n const {\n connectParams: { version, protocol, port, host }\n } = evt\n debugLog(\n 'connected to %s%s using %s%s',\n host,\n port ? `:${port}` : '',\n protocol,\n version\n )\n })\n\n diagnosticsChannel.subscribe('undici:client:connectError',\n evt => {\n const {\n connectParams: { version, protocol, port, host },\n error\n } = evt\n debugLog(\n 'connection to %s%s using %s%s errored - %s',\n host,\n port ? `:${port}` : '',\n protocol,\n version,\n error.message\n )\n })\n\n diagnosticsChannel.subscribe('undici:client:sendHeaders',\n evt => {\n const {\n request: { method, path, origin }\n } = evt\n debugLog('sending request to %s %s/%s', method, origin, path)\n })\n}\n\nlet isTrackingRequestEvents = false\n\nfunction trackRequestEvents (debugLog = undiciDebugLog) {\n if (isTrackingRequestEvents) {\n return\n }\n\n isTrackingRequestEvents = true\n\n diagnosticsChannel.subscribe('undici:request:headers',\n evt => {\n const {\n request: { method, path, origin },\n response: { statusCode }\n } = evt\n debugLog(\n 'received response to %s %s/%s - HTTP %d',\n method,\n origin,\n path,\n statusCode\n )\n })\n\n diagnosticsChannel.subscribe('undici:request:trailers',\n evt => {\n const {\n request: { method, path, origin }\n } = evt\n debugLog('trailers received from %s %s/%s', method, origin, path)\n })\n\n diagnosticsChannel.subscribe('undici:request:error',\n evt => {\n const {\n request: { method, path, origin },\n error\n } = evt\n debugLog(\n 'request to %s %s/%s errored - %s',\n method,\n origin,\n path,\n error.message\n )\n })\n}\n\nlet isTrackingWebSocketEvents = false\n\nfunction trackWebSocketEvents (debugLog = websocketDebuglog) {\n if (isTrackingWebSocketEvents) {\n return\n }\n\n isTrackingWebSocketEvents = true\n\n diagnosticsChannel.subscribe('undici:websocket:open',\n evt => {\n const {\n address: { address, port }\n } = evt\n debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n })\n\n diagnosticsChannel.subscribe('undici:websocket:close',\n evt => {\n const { websocket, code, reason } = evt\n debugLog(\n 'closed connection to %s - %s %s',\n websocket.url,\n code,\n reason\n )\n })\n\n diagnosticsChannel.subscribe('undici:websocket:socket_error',\n err => {\n debugLog('connection errored - %s', err.message)\n })\n\n diagnosticsChannel.subscribe('undici:websocket:ping',\n evt => {\n debugLog('ping received')\n })\n\n diagnosticsChannel.subscribe('undici:websocket:pong',\n evt => {\n debugLog('pong received')\n })\n}\n\nif (undiciDebugLog.enabled || fetchDebuglog.enabled) {\n trackClientEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n trackRequestEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n}\n\nif (websocketDebuglog.enabled) {\n trackClientEvents(undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog)\n trackWebSocketEvents(websocketDebuglog)\n}\n\nmodule.exports = {\n channels\n}\n", "'use strict'\n\nconst {\n InvalidArgumentError,\n NotSupportedError\n} = require('./errors')\nconst assert = require('node:assert')\nconst {\n isValidHTTPToken,\n isValidHeaderValue,\n isStream,\n destroy,\n isBuffer,\n isFormDataLike,\n isIterable,\n isBlobLike,\n serializePathWithQuery,\n assertRequestHandler,\n getServerName,\n normalizedMethodRecords\n} = require('./util')\nconst { channels } = require('./diagnostics.js')\nconst { headerNameLowerCasedRecord } = require('./constants')\n\n// Verifies that a given path is valid does not contain control chars \\x00 to \\x20\nconst invalidPathRegex = /[^\\u0021-\\u00ff]/\n\nconst kHandler = Symbol('handler')\n\nclass Request {\n constructor (origin, {\n path,\n method,\n body,\n headers,\n query,\n idempotent,\n blocking,\n upgrade,\n headersTimeout,\n bodyTimeout,\n reset,\n expectContinue,\n servername,\n throwOnError\n }, handler) {\n if (typeof path !== 'string') {\n throw new InvalidArgumentError('path must be a string')\n } else if (\n path[0] !== '/' &&\n !(path.startsWith('http://') || path.startsWith('https://')) &&\n method !== 'CONNECT'\n ) {\n throw new InvalidArgumentError('path must be an absolute URL or start with a slash')\n } else if (invalidPathRegex.test(path)) {\n throw new InvalidArgumentError('invalid request path')\n }\n\n if (typeof method !== 'string') {\n throw new InvalidArgumentError('method must be a string')\n } else if (normalizedMethodRecords[method] === undefined && !isValidHTTPToken(method)) {\n throw new InvalidArgumentError('invalid request method')\n }\n\n if (upgrade && typeof upgrade !== 'string') {\n throw new InvalidArgumentError('upgrade must be a string')\n }\n\n if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {\n throw new InvalidArgumentError('invalid headersTimeout')\n }\n\n if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {\n throw new InvalidArgumentError('invalid bodyTimeout')\n }\n\n if (reset != null && typeof reset !== 'boolean') {\n throw new InvalidArgumentError('invalid reset')\n }\n\n if (expectContinue != null && typeof expectContinue !== 'boolean') {\n throw new InvalidArgumentError('invalid expectContinue')\n }\n\n if (throwOnError != null) {\n throw new InvalidArgumentError('invalid throwOnError')\n }\n\n this.headersTimeout = headersTimeout\n\n this.bodyTimeout = bodyTimeout\n\n this.method = method\n\n this.abort = null\n\n if (body == null) {\n this.body = null\n } else if (isStream(body)) {\n this.body = body\n\n const rState = this.body._readableState\n if (!rState || !rState.autoDestroy) {\n this.endHandler = function autoDestroy () {\n destroy(this)\n }\n this.body.on('end', this.endHandler)\n }\n\n this.errorHandler = err => {\n if (this.abort) {\n this.abort(err)\n } else {\n this.error = err\n }\n }\n this.body.on('error', this.errorHandler)\n } else if (isBuffer(body)) {\n this.body = body.byteLength ? body : null\n } else if (ArrayBuffer.isView(body)) {\n this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null\n } else if (body instanceof ArrayBuffer) {\n this.body = body.byteLength ? Buffer.from(body) : null\n } else if (typeof body === 'string') {\n this.body = body.length ? Buffer.from(body) : null\n } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {\n this.body = body\n } else {\n throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')\n }\n\n this.completed = false\n this.aborted = false\n\n this.upgrade = upgrade || null\n\n this.path = query ? serializePathWithQuery(path, query) : path\n\n this.origin = origin\n\n this.idempotent = idempotent == null\n ? method === 'HEAD' || method === 'GET'\n : idempotent\n\n this.blocking = blocking ?? this.method !== 'HEAD'\n\n this.reset = reset == null ? null : reset\n\n this.host = null\n\n this.contentLength = null\n\n this.contentType = null\n\n this.headers = []\n\n // Only for H2\n this.expectContinue = expectContinue != null ? expectContinue : false\n\n if (Array.isArray(headers)) {\n if (headers.length % 2 !== 0) {\n throw new InvalidArgumentError('headers array must be even')\n }\n for (let i = 0; i < headers.length; i += 2) {\n processHeader(this, headers[i], headers[i + 1])\n }\n } else if (headers && typeof headers === 'object') {\n if (headers[Symbol.iterator]) {\n for (const header of headers) {\n if (!Array.isArray(header) || header.length !== 2) {\n throw new InvalidArgumentError('headers must be in key-value pair format')\n }\n processHeader(this, header[0], header[1])\n }\n } else {\n const keys = Object.keys(headers)\n for (let i = 0; i < keys.length; ++i) {\n processHeader(this, keys[i], headers[keys[i]])\n }\n }\n } else if (headers != null) {\n throw new InvalidArgumentError('headers must be an object or an array')\n }\n\n assertRequestHandler(handler, method, upgrade)\n\n this.servername = servername || getServerName(this.host) || null\n\n this[kHandler] = handler\n\n if (channels.create.hasSubscribers) {\n channels.create.publish({ request: this })\n }\n }\n\n onBodySent (chunk) {\n if (this[kHandler].onBodySent) {\n try {\n return this[kHandler].onBodySent(chunk)\n } catch (err) {\n this.abort(err)\n }\n }\n }\n\n onRequestSent () {\n if (channels.bodySent.hasSubscribers) {\n channels.bodySent.publish({ request: this })\n }\n\n if (this[kHandler].onRequestSent) {\n try {\n return this[kHandler].onRequestSent()\n } catch (err) {\n this.abort(err)\n }\n }\n }\n\n onConnect (abort) {\n assert(!this.aborted)\n assert(!this.completed)\n\n if (this.error) {\n abort(this.error)\n } else {\n this.abort = abort\n return this[kHandler].onConnect(abort)\n }\n }\n\n onResponseStarted () {\n return this[kHandler].onResponseStarted?.()\n }\n\n onHeaders (statusCode, headers, resume, statusText) {\n assert(!this.aborted)\n assert(!this.completed)\n\n if (channels.headers.hasSubscribers) {\n channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })\n }\n\n try {\n return this[kHandler].onHeaders(statusCode, headers, resume, statusText)\n } catch (err) {\n this.abort(err)\n }\n }\n\n onData (chunk) {\n assert(!this.aborted)\n assert(!this.completed)\n\n try {\n return this[kHandler].onData(chunk)\n } catch (err) {\n this.abort(err)\n return false\n }\n }\n\n onUpgrade (statusCode, headers, socket) {\n assert(!this.aborted)\n assert(!this.completed)\n\n return this[kHandler].onUpgrade(statusCode, headers, socket)\n }\n\n onComplete (trailers) {\n this.onFinally()\n\n assert(!this.aborted)\n assert(!this.completed)\n\n this.completed = true\n if (channels.trailers.hasSubscribers) {\n channels.trailers.publish({ request: this, trailers })\n }\n\n try {\n return this[kHandler].onComplete(trailers)\n } catch (err) {\n // TODO (fix): This might be a bad idea?\n this.onError(err)\n }\n }\n\n onError (error) {\n this.onFinally()\n\n if (channels.error.hasSubscribers) {\n channels.error.publish({ request: this, error })\n }\n\n if (this.aborted) {\n return\n }\n this.aborted = true\n\n return this[kHandler].onError(error)\n }\n\n onFinally () {\n if (this.errorHandler) {\n this.body.off('error', this.errorHandler)\n this.errorHandler = null\n }\n\n if (this.endHandler) {\n this.body.off('end', this.endHandler)\n this.endHandler = null\n }\n }\n\n addHeader (key, value) {\n processHeader(this, key, value)\n return this\n }\n}\n\nfunction processHeader (request, key, val) {\n if (val && (typeof val === 'object' && !Array.isArray(val))) {\n throw new InvalidArgumentError(`invalid ${key} header`)\n } else if (val === undefined) {\n return\n }\n\n let headerName = headerNameLowerCasedRecord[key]\n\n if (headerName === undefined) {\n headerName = key.toLowerCase()\n if (headerNameLowerCasedRecord[headerName] === undefined && !isValidHTTPToken(headerName)) {\n throw new InvalidArgumentError('invalid header key')\n }\n }\n\n if (Array.isArray(val)) {\n const arr = []\n for (let i = 0; i < val.length; i++) {\n if (typeof val[i] === 'string') {\n if (!isValidHeaderValue(val[i])) {\n throw new InvalidArgumentError(`invalid ${key} header`)\n }\n arr.push(val[i])\n } else if (val[i] === null) {\n arr.push('')\n } else if (typeof val[i] === 'object') {\n throw new InvalidArgumentError(`invalid ${key} header`)\n } else {\n arr.push(`${val[i]}`)\n }\n }\n val = arr\n } else if (typeof val === 'string') {\n if (!isValidHeaderValue(val)) {\n throw new InvalidArgumentError(`invalid ${key} header`)\n }\n } else if (val === null) {\n val = ''\n } else {\n val = `${val}`\n }\n\n if (request.host === null && headerName === 'host') {\n if (typeof val !== 'string') {\n throw new InvalidArgumentError('invalid host header')\n }\n // Consumed by Client\n request.host = val\n } else if (request.contentLength === null && headerName === 'content-length') {\n request.contentLength = parseInt(val, 10)\n if (!Number.isFinite(request.contentLength)) {\n throw new InvalidArgumentError('invalid content-length header')\n }\n } else if (request.contentType === null && headerName === 'content-type') {\n request.contentType = val\n request.headers.push(key, val)\n } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {\n throw new InvalidArgumentError(`invalid ${headerName} header`)\n } else if (headerName === 'connection') {\n const value = typeof val === 'string' ? val.toLowerCase() : null\n if (value !== 'close' && value !== 'keep-alive') {\n throw new InvalidArgumentError('invalid connection header')\n }\n\n if (value === 'close') {\n request.reset = true\n }\n } else if (headerName === 'expect') {\n throw new NotSupportedError('expect header not supported')\n } else {\n request.headers.push(key, val)\n }\n}\n\nmodule.exports = Request\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\n\nmodule.exports = class WrapHandler {\n #handler\n\n constructor (handler) {\n this.#handler = handler\n }\n\n static wrap (handler) {\n // TODO (fix): More checks...\n return handler.onRequestStart ? handler : new WrapHandler(handler)\n }\n\n // Unwrap Interface\n\n onConnect (abort, context) {\n return this.#handler.onConnect?.(abort, context)\n }\n\n onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n return this.#handler.onHeaders?.(statusCode, rawHeaders, resume, statusMessage)\n }\n\n onUpgrade (statusCode, rawHeaders, socket) {\n return this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n }\n\n onData (data) {\n return this.#handler.onData?.(data)\n }\n\n onComplete (trailers) {\n return this.#handler.onComplete?.(trailers)\n }\n\n onError (err) {\n if (!this.#handler.onError) {\n throw err\n }\n\n return this.#handler.onError?.(err)\n }\n\n // Wrap Interface\n\n onRequestStart (controller, context) {\n this.#handler.onConnect?.((reason) => controller.abort(reason), context)\n }\n\n onRequestUpgrade (controller, statusCode, headers, socket) {\n const rawHeaders = []\n for (const [key, val] of Object.entries(headers)) {\n rawHeaders.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val))\n }\n\n this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n }\n\n onResponseStart (controller, statusCode, headers, statusMessage) {\n const rawHeaders = []\n for (const [key, val] of Object.entries(headers)) {\n rawHeaders.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val))\n }\n\n if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {\n controller.pause()\n }\n }\n\n onResponseData (controller, data) {\n if (this.#handler.onData?.(data) === false) {\n controller.pause()\n }\n }\n\n onResponseEnd (controller, trailers) {\n const rawTrailers = []\n for (const [key, val] of Object.entries(trailers)) {\n rawTrailers.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val))\n }\n\n this.#handler.onComplete?.(rawTrailers)\n }\n\n onResponseError (controller, err) {\n if (!this.#handler.onError) {\n throw new InvalidArgumentError('invalid onError method')\n }\n\n this.#handler.onError?.(err)\n }\n}\n", "'use strict'\nconst EventEmitter = require('node:events')\nconst WrapHandler = require('../handler/wrap-handler')\n\nconst wrapInterceptor = (dispatch) => (opts, handler) => dispatch(opts, WrapHandler.wrap(handler))\n\nclass Dispatcher extends EventEmitter {\n dispatch () {\n throw new Error('not implemented')\n }\n\n close () {\n throw new Error('not implemented')\n }\n\n destroy () {\n throw new Error('not implemented')\n }\n\n compose (...args) {\n // So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...\n const interceptors = Array.isArray(args[0]) ? args[0] : args\n let dispatch = this.dispatch.bind(this)\n\n for (const interceptor of interceptors) {\n if (interceptor == null) {\n continue\n }\n\n if (typeof interceptor !== 'function') {\n throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)\n }\n\n dispatch = interceptor(dispatch)\n dispatch = wrapInterceptor(dispatch)\n\n if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {\n throw new TypeError('invalid interceptor')\n }\n }\n\n return new Proxy(this, {\n get: (target, key) => key === 'dispatch' ? dispatch : target[key]\n })\n }\n}\n\nmodule.exports = Dispatcher\n", "'use strict'\n\nconst { parseHeaders } = require('../core/util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nconst kResume = Symbol('resume')\n\nclass UnwrapController {\n #paused = false\n #reason = null\n #aborted = false\n #abort\n\n [kResume] = null\n\n constructor (abort) {\n this.#abort = abort\n }\n\n pause () {\n this.#paused = true\n }\n\n resume () {\n if (this.#paused) {\n this.#paused = false\n this[kResume]?.()\n }\n }\n\n abort (reason) {\n if (!this.#aborted) {\n this.#aborted = true\n this.#reason = reason\n this.#abort(reason)\n }\n }\n\n get aborted () {\n return this.#aborted\n }\n\n get reason () {\n return this.#reason\n }\n\n get paused () {\n return this.#paused\n }\n}\n\nmodule.exports = class UnwrapHandler {\n #handler\n #controller\n\n constructor (handler) {\n this.#handler = handler\n }\n\n static unwrap (handler) {\n // TODO (fix): More checks...\n return !handler.onRequestStart ? handler : new UnwrapHandler(handler)\n }\n\n onConnect (abort, context) {\n this.#controller = new UnwrapController(abort)\n this.#handler.onRequestStart?.(this.#controller, context)\n }\n\n onUpgrade (statusCode, rawHeaders, socket) {\n this.#handler.onRequestUpgrade?.(this.#controller, statusCode, parseHeaders(rawHeaders), socket)\n }\n\n onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n this.#controller[kResume] = resume\n this.#handler.onResponseStart?.(this.#controller, statusCode, parseHeaders(rawHeaders), statusMessage)\n return !this.#controller.paused\n }\n\n onData (data) {\n this.#handler.onResponseData?.(this.#controller, data)\n return !this.#controller.paused\n }\n\n onComplete (rawTrailers) {\n this.#handler.onResponseEnd?.(this.#controller, parseHeaders(rawTrailers))\n }\n\n onError (err) {\n if (!this.#handler.onResponseError) {\n throw new InvalidArgumentError('invalid onError method')\n }\n\n this.#handler.onResponseError?.(this.#controller, err)\n }\n}\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst UnwrapHandler = require('../handler/unwrap-handler')\nconst {\n ClientDestroyedError,\n ClientClosedError,\n InvalidArgumentError\n} = require('../core/errors')\nconst { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/symbols')\n\nconst kOnDestroyed = Symbol('onDestroyed')\nconst kOnClosed = Symbol('onClosed')\n\nclass DispatcherBase extends Dispatcher {\n constructor () {\n super()\n\n this[kDestroyed] = false\n this[kOnDestroyed] = null\n this[kClosed] = false\n this[kOnClosed] = []\n }\n\n get destroyed () {\n return this[kDestroyed]\n }\n\n get closed () {\n return this[kClosed]\n }\n\n close (callback) {\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n this.close((err, data) => {\n return err ? reject(err) : resolve(data)\n })\n })\n }\n\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n if (this[kDestroyed]) {\n queueMicrotask(() => callback(new ClientDestroyedError(), null))\n return\n }\n\n if (this[kClosed]) {\n if (this[kOnClosed]) {\n this[kOnClosed].push(callback)\n } else {\n queueMicrotask(() => callback(null, null))\n }\n return\n }\n\n this[kClosed] = true\n this[kOnClosed].push(callback)\n\n const onClosed = () => {\n const callbacks = this[kOnClosed]\n this[kOnClosed] = null\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i](null, null)\n }\n }\n\n // Should not error.\n this[kClose]()\n .then(() => this.destroy())\n .then(() => {\n queueMicrotask(onClosed)\n })\n }\n\n destroy (err, callback) {\n if (typeof err === 'function') {\n callback = err\n err = null\n }\n\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n this.destroy(err, (err, data) => {\n return err ? /* istanbul ignore next: should never error */ reject(err) : resolve(data)\n })\n })\n }\n\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n if (this[kDestroyed]) {\n if (this[kOnDestroyed]) {\n this[kOnDestroyed].push(callback)\n } else {\n queueMicrotask(() => callback(null, null))\n }\n return\n }\n\n if (!err) {\n err = new ClientDestroyedError()\n }\n\n this[kDestroyed] = true\n this[kOnDestroyed] = this[kOnDestroyed] || []\n this[kOnDestroyed].push(callback)\n\n const onDestroyed = () => {\n const callbacks = this[kOnDestroyed]\n this[kOnDestroyed] = null\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i](null, null)\n }\n }\n\n // Should not error.\n this[kDestroy](err).then(() => {\n queueMicrotask(onDestroyed)\n })\n }\n\n dispatch (opts, handler) {\n if (!handler || typeof handler !== 'object') {\n throw new InvalidArgumentError('handler must be an object')\n }\n\n handler = UnwrapHandler.unwrap(handler)\n\n try {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('opts must be an object.')\n }\n\n if (this[kDestroyed] || this[kOnDestroyed]) {\n throw new ClientDestroyedError()\n }\n\n if (this[kClosed]) {\n throw new ClientClosedError()\n }\n\n return this[kDispatch](opts, handler)\n } catch (err) {\n if (typeof handler.onError !== 'function') {\n throw err\n }\n\n handler.onError(err)\n\n return false\n }\n }\n}\n\nmodule.exports = DispatcherBase\n", "'use strict'\n\n/**\n * This module offers an optimized timer implementation designed for scenarios\n * where high precision is not critical.\n *\n * The timer achieves faster performance by using a low-resolution approach,\n * with an accuracy target of within 500ms. This makes it particularly useful\n * for timers with delays of 1 second or more, where exact timing is less\n * crucial.\n *\n * It's important to note that Node.js timers are inherently imprecise, as\n * delays can occur due to the event loop being blocked by other operations.\n * Consequently, timers may trigger later than their scheduled time.\n */\n\n/**\n * The fastNow variable contains the internal fast timer clock value.\n *\n * @type {number}\n */\nlet fastNow = 0\n\n/**\n * RESOLUTION_MS represents the target resolution time in milliseconds.\n *\n * @type {number}\n * @default 1000\n */\nconst RESOLUTION_MS = 1e3\n\n/**\n * TICK_MS defines the desired interval in milliseconds between each tick.\n * The target value is set to half the resolution time, minus 1 ms, to account\n * for potential event loop overhead.\n *\n * @type {number}\n * @default 499\n */\nconst TICK_MS = (RESOLUTION_MS >> 1) - 1\n\n/**\n * fastNowTimeout is a Node.js timer used to manage and process\n * the FastTimers stored in the `fastTimers` array.\n *\n * @type {NodeJS.Timeout}\n */\nlet fastNowTimeout\n\n/**\n * The kFastTimer symbol is used to identify FastTimer instances.\n *\n * @type {Symbol}\n */\nconst kFastTimer = Symbol('kFastTimer')\n\n/**\n * The fastTimers array contains all active FastTimers.\n *\n * @type {FastTimer[]}\n */\nconst fastTimers = []\n\n/**\n * These constants represent the various states of a FastTimer.\n */\n\n/**\n * The `NOT_IN_LIST` constant indicates that the FastTimer is not included\n * in the `fastTimers` array. Timers with this status will not be processed\n * during the next tick by the `onTick` function.\n *\n * A FastTimer can be re-added to the `fastTimers` array by invoking the\n * `refresh` method on the FastTimer instance.\n *\n * @type {-2}\n */\nconst NOT_IN_LIST = -2\n\n/**\n * The `TO_BE_CLEARED` constant indicates that the FastTimer is scheduled\n * for removal from the `fastTimers` array. A FastTimer in this state will\n * be removed in the next tick by the `onTick` function and will no longer\n * be processed.\n *\n * This status is also set when the `clear` method is called on the FastTimer instance.\n *\n * @type {-1}\n */\nconst TO_BE_CLEARED = -1\n\n/**\n * The `PENDING` constant signifies that the FastTimer is awaiting processing\n * in the next tick by the `onTick` function. Timers with this status will have\n * their `_idleStart` value set and their status updated to `ACTIVE` in the next tick.\n *\n * @type {0}\n */\nconst PENDING = 0\n\n/**\n * The `ACTIVE` constant indicates that the FastTimer is active and waiting\n * for its timer to expire. During the next tick, the `onTick` function will\n * check if the timer has expired, and if so, it will execute the associated callback.\n *\n * @type {1}\n */\nconst ACTIVE = 1\n\n/**\n * The onTick function processes the fastTimers array.\n *\n * @returns {void}\n */\nfunction onTick () {\n /**\n * Increment the fastNow value by the TICK_MS value, despite the actual time\n * that has passed since the last tick. This approach ensures independence\n * from the system clock and delays caused by a blocked event loop.\n *\n * @type {number}\n */\n fastNow += TICK_MS\n\n /**\n * The `idx` variable is used to iterate over the `fastTimers` array.\n * Expired timers are removed by replacing them with the last element in the array.\n * Consequently, `idx` is only incremented when the current element is not removed.\n *\n * @type {number}\n */\n let idx = 0\n\n /**\n * The len variable will contain the length of the fastTimers array\n * and will be decremented when a FastTimer should be removed from the\n * fastTimers array.\n *\n * @type {number}\n */\n let len = fastTimers.length\n\n while (idx < len) {\n /**\n * @type {FastTimer}\n */\n const timer = fastTimers[idx]\n\n // If the timer is in the ACTIVE state and the timer has expired, it will\n // be processed in the next tick.\n if (timer._state === PENDING) {\n // Set the _idleStart value to the fastNow value minus the TICK_MS value\n // to account for the time the timer was in the PENDING state.\n timer._idleStart = fastNow - TICK_MS\n timer._state = ACTIVE\n } else if (\n timer._state === ACTIVE &&\n fastNow >= timer._idleStart + timer._idleTimeout\n ) {\n timer._state = TO_BE_CLEARED\n timer._idleStart = -1\n timer._onTimeout(timer._timerArg)\n }\n\n if (timer._state === TO_BE_CLEARED) {\n timer._state = NOT_IN_LIST\n\n // Move the last element to the current index and decrement len if it is\n // not the only element in the array.\n if (--len !== 0) {\n fastTimers[idx] = fastTimers[len]\n }\n } else {\n ++idx\n }\n }\n\n // Set the length of the fastTimers array to the new length and thus\n // removing the excess FastTimers elements from the array.\n fastTimers.length = len\n\n // If there are still active FastTimers in the array, refresh the Timer.\n // If there are no active FastTimers, the timer will be refreshed again\n // when a new FastTimer is instantiated.\n if (fastTimers.length !== 0) {\n refreshTimeout()\n }\n}\n\nfunction refreshTimeout () {\n // If the fastNowTimeout is already set, refresh it.\n if (fastNowTimeout) {\n fastNowTimeout.refresh()\n // fastNowTimeout is not instantiated yet, create a new Timer.\n } else {\n clearTimeout(fastNowTimeout)\n fastNowTimeout = setTimeout(onTick, TICK_MS)\n\n // If the Timer has an unref method, call it to allow the process to exit if\n // there are no other active handles.\n if (fastNowTimeout.unref) {\n fastNowTimeout.unref()\n }\n }\n}\n\n/**\n * The `FastTimer` class is a data structure designed to store and manage\n * timer information.\n */\nclass FastTimer {\n [kFastTimer] = true\n\n /**\n * The state of the timer, which can be one of the following:\n * - NOT_IN_LIST (-2)\n * - TO_BE_CLEARED (-1)\n * - PENDING (0)\n * - ACTIVE (1)\n *\n * @type {-2|-1|0|1}\n * @private\n */\n _state = NOT_IN_LIST\n\n /**\n * The number of milliseconds to wait before calling the callback.\n *\n * @type {number}\n * @private\n */\n _idleTimeout = -1\n\n /**\n * The time in milliseconds when the timer was started. This value is used to\n * calculate when the timer should expire.\n *\n * @type {number}\n * @default -1\n * @private\n */\n _idleStart = -1\n\n /**\n * The function to be executed when the timer expires.\n * @type {Function}\n * @private\n */\n _onTimeout\n\n /**\n * The argument to be passed to the callback when the timer expires.\n *\n * @type {*}\n * @private\n */\n _timerArg\n\n /**\n * @constructor\n * @param {Function} callback A function to be executed after the timer\n * expires.\n * @param {number} delay The time, in milliseconds that the timer should wait\n * before the specified function or code is executed.\n * @param {*} arg\n */\n constructor (callback, delay, arg) {\n this._onTimeout = callback\n this._idleTimeout = delay\n this._timerArg = arg\n\n this.refresh()\n }\n\n /**\n * Sets the timer's start time to the current time, and reschedules the timer\n * to call its callback at the previously specified duration adjusted to the\n * current time.\n * Using this on a timer that has already called its callback will reactivate\n * the timer.\n *\n * @returns {void}\n */\n refresh () {\n // In the special case that the timer is not in the list of active timers,\n // add it back to the array to be processed in the next tick by the onTick\n // function.\n if (this._state === NOT_IN_LIST) {\n fastTimers.push(this)\n }\n\n // If the timer is the only active timer, refresh the fastNowTimeout for\n // better resolution.\n if (!fastNowTimeout || fastTimers.length === 1) {\n refreshTimeout()\n }\n\n // Setting the state to PENDING will cause the timer to be reset in the\n // next tick by the onTick function.\n this._state = PENDING\n }\n\n /**\n * The `clear` method cancels the timer, preventing it from executing.\n *\n * @returns {void}\n * @private\n */\n clear () {\n // Set the state to TO_BE_CLEARED to mark the timer for removal in the next\n // tick by the onTick function.\n this._state = TO_BE_CLEARED\n\n // Reset the _idleStart value to -1 to indicate that the timer is no longer\n // active.\n this._idleStart = -1\n }\n}\n\n/**\n * This module exports a setTimeout and clearTimeout function that can be\n * used as a drop-in replacement for the native functions.\n */\nmodule.exports = {\n /**\n * The setTimeout() method sets a timer which executes a function once the\n * timer expires.\n * @param {Function} callback A function to be executed after the timer\n * expires.\n * @param {number} delay The time, in milliseconds that the timer should\n * wait before the specified function or code is executed.\n * @param {*} [arg] An optional argument to be passed to the callback function\n * when the timer expires.\n * @returns {NodeJS.Timeout|FastTimer}\n */\n setTimeout (callback, delay, arg) {\n // If the delay is less than or equal to the RESOLUTION_MS value return a\n // native Node.js Timer instance.\n return delay <= RESOLUTION_MS\n ? setTimeout(callback, delay, arg)\n : new FastTimer(callback, delay, arg)\n },\n /**\n * The clearTimeout method cancels an instantiated Timer previously created\n * by calling setTimeout.\n *\n * @param {NodeJS.Timeout|FastTimer} timeout\n */\n clearTimeout (timeout) {\n // If the timeout is a FastTimer, call its own clear method.\n if (timeout[kFastTimer]) {\n /**\n * @type {FastTimer}\n */\n timeout.clear()\n // Otherwise it is an instance of a native NodeJS.Timeout, so call the\n // Node.js native clearTimeout function.\n } else {\n clearTimeout(timeout)\n }\n },\n /**\n * The setFastTimeout() method sets a fastTimer which executes a function once\n * the timer expires.\n * @param {Function} callback A function to be executed after the timer\n * expires.\n * @param {number} delay The time, in milliseconds that the timer should\n * wait before the specified function or code is executed.\n * @param {*} [arg] An optional argument to be passed to the callback function\n * when the timer expires.\n * @returns {FastTimer}\n */\n setFastTimeout (callback, delay, arg) {\n return new FastTimer(callback, delay, arg)\n },\n /**\n * The clearTimeout method cancels an instantiated FastTimer previously\n * created by calling setFastTimeout.\n *\n * @param {FastTimer} timeout\n */\n clearFastTimeout (timeout) {\n timeout.clear()\n },\n /**\n * The now method returns the value of the internal fast timer clock.\n *\n * @returns {number}\n */\n now () {\n return fastNow\n },\n /**\n * Trigger the onTick function to process the fastTimers array.\n * Exported for testing purposes only.\n * Marking as deprecated to discourage any use outside of testing.\n * @deprecated\n * @param {number} [delay=0] The delay in milliseconds to add to the now value.\n */\n tick (delay = 0) {\n fastNow += delay - RESOLUTION_MS + 1\n onTick()\n onTick()\n },\n /**\n * Reset FastTimers.\n * Exported for testing purposes only.\n * Marking as deprecated to discourage any use outside of testing.\n * @deprecated\n */\n reset () {\n fastNow = 0\n fastTimers.length = 0\n clearTimeout(fastNowTimeout)\n fastNowTimeout = null\n },\n /**\n * Exporting for testing purposes only.\n * Marking as deprecated to discourage any use outside of testing.\n * @deprecated\n */\n kFastTimer\n}\n", "'use strict'\n\nconst net = require('node:net')\nconst assert = require('node:assert')\nconst util = require('./util')\nconst { InvalidArgumentError, ConnectTimeoutError } = require('./errors')\nconst timers = require('../util/timers')\n\nfunction noop () {}\n\nlet tls // include tls conditionally since it is not always available\n\n// TODO: session re-use does not wait for the first\n// connection to resolve the session and might therefore\n// resolve the same servername multiple times even when\n// re-use is enabled.\n\nlet SessionCache\n// FIXME: remove workaround when the Node bug is fixed\n// https://github.com/nodejs/node/issues/49344#issuecomment-1741776308\nif (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) {\n SessionCache = class WeakSessionCache {\n constructor (maxCachedSessions) {\n this._maxCachedSessions = maxCachedSessions\n this._sessionCache = new Map()\n this._sessionRegistry = new global.FinalizationRegistry((key) => {\n if (this._sessionCache.size < this._maxCachedSessions) {\n return\n }\n\n const ref = this._sessionCache.get(key)\n if (ref !== undefined && ref.deref() === undefined) {\n this._sessionCache.delete(key)\n }\n })\n }\n\n get (sessionKey) {\n const ref = this._sessionCache.get(sessionKey)\n return ref ? ref.deref() : null\n }\n\n set (sessionKey, session) {\n if (this._maxCachedSessions === 0) {\n return\n }\n\n this._sessionCache.set(sessionKey, new WeakRef(session))\n this._sessionRegistry.register(session, sessionKey)\n }\n }\n} else {\n SessionCache = class SimpleSessionCache {\n constructor (maxCachedSessions) {\n this._maxCachedSessions = maxCachedSessions\n this._sessionCache = new Map()\n }\n\n get (sessionKey) {\n return this._sessionCache.get(sessionKey)\n }\n\n set (sessionKey, session) {\n if (this._maxCachedSessions === 0) {\n return\n }\n\n if (this._sessionCache.size >= this._maxCachedSessions) {\n // remove the oldest session\n const { value: oldestKey } = this._sessionCache.keys().next()\n this._sessionCache.delete(oldestKey)\n }\n\n this._sessionCache.set(sessionKey, session)\n }\n }\n}\n\nfunction buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {\n if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {\n throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')\n }\n\n const options = { path: socketPath, ...opts }\n const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)\n timeout = timeout == null ? 10e3 : timeout\n allowH2 = allowH2 != null ? allowH2 : false\n return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {\n let socket\n if (protocol === 'https:') {\n if (!tls) {\n tls = require('node:tls')\n }\n servername = servername || options.servername || util.getServerName(host) || null\n\n const sessionKey = servername || hostname\n assert(sessionKey)\n\n const session = customSession || sessionCache.get(sessionKey) || null\n\n port = port || 443\n\n socket = tls.connect({\n highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...\n ...options,\n servername,\n session,\n localAddress,\n // TODO(HTTP/2): Add support for h2c\n ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],\n socket: httpSocket, // upgrade socket connection\n port,\n host: hostname\n })\n\n socket\n .on('session', function (session) {\n // TODO (fix): Can a session become invalid once established? Don't think so?\n sessionCache.set(sessionKey, session)\n })\n } else {\n assert(!httpSocket, 'httpSocket can only be sent on TLS update')\n\n port = port || 80\n\n socket = net.connect({\n highWaterMark: 64 * 1024, // Same as nodejs fs streams.\n ...options,\n localAddress,\n port,\n host: hostname\n })\n }\n\n // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket\n if (options.keepAlive == null || options.keepAlive) {\n const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay\n socket.setKeepAlive(true, keepAliveInitialDelay)\n }\n\n const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port })\n\n socket\n .setNoDelay(true)\n .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {\n queueMicrotask(clearConnectTimeout)\n\n if (callback) {\n const cb = callback\n callback = null\n cb(null, this)\n }\n })\n .on('error', function (err) {\n queueMicrotask(clearConnectTimeout)\n\n if (callback) {\n const cb = callback\n callback = null\n cb(err)\n }\n })\n\n return socket\n }\n}\n\n/**\n * @param {WeakRef<net.Socket>} socketWeakRef\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n * @returns {() => void}\n */\nconst setupConnectTimeout = process.platform === 'win32'\n ? (socketWeakRef, opts) => {\n if (!opts.timeout) {\n return noop\n }\n\n let s1 = null\n let s2 = null\n const fastTimer = timers.setFastTimeout(() => {\n // setImmediate is added to make sure that we prioritize socket error events over timeouts\n s1 = setImmediate(() => {\n // Windows needs an extra setImmediate probably due to implementation differences in the socket logic\n s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts))\n })\n }, opts.timeout)\n return () => {\n timers.clearFastTimeout(fastTimer)\n clearImmediate(s1)\n clearImmediate(s2)\n }\n }\n : (socketWeakRef, opts) => {\n if (!opts.timeout) {\n return noop\n }\n\n let s1 = null\n const fastTimer = timers.setFastTimeout(() => {\n // setImmediate is added to make sure that we prioritize socket error events over timeouts\n s1 = setImmediate(() => {\n onConnectTimeout(socketWeakRef.deref(), opts)\n })\n }, opts.timeout)\n return () => {\n timers.clearFastTimeout(fastTimer)\n clearImmediate(s1)\n }\n }\n\n/**\n * @param {net.Socket} socket\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n */\nfunction onConnectTimeout (socket, opts) {\n // The socket could be already garbage collected\n if (socket == null) {\n return\n }\n\n let message = 'Connect Timeout Error'\n if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {\n message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(', ')},`\n } else {\n message += ` (attempted address: ${opts.hostname}:${opts.port},`\n }\n\n message += ` timeout: ${opts.timeout}ms)`\n\n util.destroy(socket, new ConnectTimeoutError(message))\n}\n\nmodule.exports = buildConnector\n", null, null, "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzQzBQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEDAAADAAAABAUBcAESEgUDAQACBggBfwFBgNgECwfFBygGbWVtb3J5AgALX2luaXRpYWxpemUACBlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQACRhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUANgxsbGh0dHBfYWxsb2MACwZtYWxsb2MAOAtsbGh0dHBfZnJlZQAMBGZyZWUADA9sbGh0dHBfZ2V0X3R5cGUADRVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADhVsbGh0dHBfZ2V0X2h0dHBfbWlub3IADxFsbGh0dHBfZ2V0X21ldGhvZAAQFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAERJsbGh0dHBfZ2V0X3VwZ3JhZGUAEgxsbGh0dHBfcmVzZXQAEw5sbGh0dHBfZXhlY3V0ZQAUFGxsaHR0cF9zZXR0aW5nc19pbml0ABUNbGxodHRwX2ZpbmlzaAAWDGxsaHR0cF9wYXVzZQAXDWxsaHR0cF9yZXN1bWUAGBtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGRBsbGh0dHBfZ2V0X2Vycm5vABoXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AGxdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAcFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB0RbGxodHRwX2Vycm5vX25hbWUAHhJsbGh0dHBfbWV0aG9kX25hbWUAHxJsbGh0dHBfc3RhdHVzX25hbWUAIBpsbGh0dHBf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a0E+aiECCyABIAI2AhwgAUIANwIQIAJBAnRBsNYAaiEAAkBBhNQAKAIAIgNBASACdCIHcUUEQCAAIAE2AgBBhNQAIAMgB3I2AgAgASAANgIYIAEgATYCCCABIAE2AgwMAQsgBEEZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEAAkADQCAAIgMoAgRBeHEgBEYNASACQR12IQAgAkEBdCECIAMgAEEEcWpBEGoiBygCACIADQALIAcgATYCACABIAM2AhggASABNgIMIAEgATYCCAwBCyADKAIIIgAgATYCDCADIAE2AgggAUEANgIYIAEgAzYCDCABIAA2AggLQaDUAEGg1AAoAgBBAWsiAEF/IAAbNgIACwsHACAALQAoCwcAIAAtACoLBwAgAC0AKwsHACAALQApCwcAIAAvATQLBwAgAC0AMAtAAQR/IAAoAhghASAALwEuIQIgAC0AKCEDIAAoAjghBCAAEDcgACAENgI4IAAgAzoAKCAAIAI7AS4gACABNgIYC8X4AQIHfwN+IAEgAmohBAJAIAAiAygCDCIADQAgAygCBARAIAMgATYCBAsjAEEQayIJJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACDtQBAAECAwQFBgcICQoLDA0ODxARFBUWFxgZGhscHR4fICEjJCUnKCmIA4cDhQOEA/wC9QLuAusC6ALmAuMC4ALfAt0C2wLWAtUC1ALTAtICygLJAsgCxwLGAsUCxALDAr0CvAK6ArkCuAK3ArYCtQK0ArICsQKsAqoCqAKnAqYCpQKkAqMCogKhAqACnwKbApoCmQKYApcCkAKIAoQCgwKCAvkB9gH1AfQB8wHyAfEB8AHvAe0B6wHoAeMB4QHgAd8B3gHdAdwB2wHaAdkB2AHX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QEBAQEBAQEBAQEBAAEALQQAhAiADQQA2AhwgA0G3CzYCECADQQI2AgwgAyABQQFqNgIUDIEDCyADQS9qIQIDQCABIARGBEBBISECDIIDCwJAAkACQCABLQAAIgBBCWsOGAIAKioBKioqKioqKioqKioqKioqKioqAigLIAFBAWohASADQS9qLQAAQQFxRQ0LDBkLIAFBAWohAQwYCyABQQFqIQEgAi0AAEECcQ0AC0EAIQIgA0EANgIcIAMgATYCFCADQc4UNgIQIANBDDYCDAyAAwsgAUEBaiEBC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADQEM0QILIANCADcDIAw8CyAAQRVGBEAgA0EkNgIcIAMgATYCFCADQYYaNgIQIANBFTYCDEEAIQIM/QILQQAhAiADQQA2AhwgAyABNgIUIANB4g02AhAgA0EUNgIMDPwCCyADKAIEIQBBACECIANBADYCBCADIAAgASAMp2oiARAxIgBFDSsgA0EHNgIcIAMgATYCFCADIAA2AgwM+wILIAMtAC5BwABxRQ0BC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAARQ0rIABBFUYEQCADQQo2AhwgAyABNgIUIANB8Rg2AhAgA0EVNgIMQQAhAgz6AgtBACECIANBADYCHCADIAE2AhQgA0GLDDYCECADQRM2AgwM+QILQQAhAiADQQA2AhwgAyABNgIUIANBsRQ2AhAgA0ECNgIMDPgCC0EAIQIgA0EANgIcIAMgATYCFCADQYwUNgIQIANBGTYCDAz3AgtBACECIANBADYCHCADIAE2AhQgA0HRHDYCECADQRk2AgwM9gILIABBFUYNPUEAIQIgA0EANgIcIAMgATYCFCADQaIPNgIQIANBIjYCDAz1AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMiIARQ0oIANBDTYCHCADIAE2AhQgAyAANgIMDPQCCyAAQRVGDTpBACECIANBADYCHCADIAE2AhQgA0GiDzYCECADQSI2AgwM8wILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDIiAEUEQCABQQFqIQEMKAsgA0EONgIcIAMgADYCDCADIAFBAWo2AhQM8gILIABBFUYNN0EAIQIgA0EANgIcIAMgATYCFCADQaIPNgIQIANBIjYCDAzxAgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMiIARQRAIAFBAWohAQwnCyADQQ82AhwgAyAANgIMIAMgAUEBajYCFAzwAgtBACECIANBADYCHCADIAE2AhQgA0HoFjYCECADQRk2AgwM7wILIABBFUYNM0EAIQIgA0EANgIcIAMgATYCFCADQc4MNgIQIANBIzYCDAzuAgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMyIARQ0lIANBETYCHCADIAE2AhQgAyAANgIMDO0CCyAAQRVGDTBBACECIANBADYCHCADIAE2AhQgA0HODDYCECADQSM2AgwM7AILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUEQCABQQFqIQEMJQsgA0ESNgIcIAMgADYCDCADIAFBAWo2AhQM6wILIANBL2otAABBAXFFDQELQRUhAgzPAgtBACECIANBADYCHCADIAE2AhQgA0HoFjYCECADQRk2AgwM6AILIABBO0cNACABQQFqIQEMDAtBACECIANBADYCHCADIAE2AhQgA0GYFzYCECADQQI2AgwM5gILIABBFUYNKEEAIQIgA0EANgIcIAMgATYCFCADQc4MNgIQIANBIzYCDAzlAgsgA0EUNgIcIAMgATYCFCADIAA2AgwM5AILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUEQCABQQFqIQEM3AILIANBFTYCHCADIAA2AgwgAyABQQFqNgIUDOMCCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDNoCCyADQRc2AhwgAyAANgIMIAMgAUEBajYCFAziAgsgAEEVRg0jQQAhAiADQQA2AhwgAyABNgIUIANBzgw2AhAgA0EjNgIMDOECCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDB0LIANBGTYCHCADIAA2AgwgAyABQQFqNgIUDOACCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDNYCCyADQRo2AhwgAyAANgIMIAMgAUEBajYCFAzfAgsgAEEVRg0fQQAhAiADQQA2AhwgAyABNgIUIANBog82AhAgA0EiNgIMDN4CCyADKAIEIQBBACEC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DLMCCyABIARGBEBB6QEhAgyzAgsgAS0AAEHIAEYNASADQQE6ACgLQbYBIQIMlwILQcoBIQIMlgILIAEgBEcEQCADQQw2AgggAyABNgIEQckBIQIMlgILQegBIQIMrwILIAEgBEYEQEHnASECDK8CCyABLQAAQcgARw0EIAFBAWohAUHIASECDJQCCyABIARGBEBB5gEhAgyuAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQcYBIQIMlAILIAFBAWohAUHHASECDJMCC0HlASECIAEgBEYNrAIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB99MAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMrQILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAtIgBFBEBB1AEhAgyTAgsgA0HkATYCHCADIAE2AhQgAyAANgIMQQAhAgysAgtB4wEhAiABIARGDasCIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQfXTAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADKwCCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAtIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB0B42AhAgA0EINgIMDKkCC0HFASECDI4CCyADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDKcCC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQ1lIABBFUcEQCADQQA2AhwgAyABNgIUIANB1A42AhAgA0EgNgIMQQAhAgynAgsgA0GFATYCHCADIAE2AhQgA0HXGjYCECADQRU2AgxBACECDKYCC0HhASECIAQgASIARg2lAiAEIAFrIAMoAgAiAWohBSAAIAFrQQRqIQYCQANAIAAtAAAgAUHw0wBqLQAARw0BIAFBBEYNAyABQQFqIQEgBCAAQQFqIgBHDQALIAMgBTYCAAymAgsgA0EANgIcIAMgADYCFCADQYQ3NgIQIANBCDYCDCADQQA2AgBBACECDKUCCyABIARHBEAgA0ENNgIIIAMgATYCBEHCASECDIsCC0HgASECDKQCCyADQQA2AgAgBkEBaiEBC0HDASECDIgCCyABIARGBEBB3wEhAgyiAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBwQEhAgyIAgsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYgCIANB3gE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILIAEgBEYEQEHdASECDKECCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYkCIANB3AE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILQcABIQIMhgILIAEgBEYEQEHbASECDKACC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDQIgA0HYATYCHCADIAE2AhQgAyAANgIMQQAhAgyiAgsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYsCIANB2QE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILIAMoAgQhACADQQA2AgQgAyAAIAEQLiIARQ2JAiADQdoBNgIcIAMgATYCFCADIAA2AgwMoAILQb8BIQIMhQILQQAhAAJAIAMoAjgiAkUNACACKAI8IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBnA02AhAgA0EhNgIMQQAhAgygAgtBvgEhAgyFAgsgA0HXATYCHCADIAE2AhQgA0HWGTYCECADQRU2AgxBACECDJ4CCyABIARGBEBB1wEhAgyeAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANB6xA2AhAgA0EJNgIMQQAhAgyeAgtBvQEhAgyDAgsgASAERgRAQdYBIQIM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LgsgAUEBaiEBQZcBIQIM2AELIAFBAWohAUEiDCsLIAEgBEYEQEGvASECDPEBCyABLQAAQdAARw0rIAFBAWohAUGWASECDNYBCyABIARGBEBBrgEhAgzwAQsCQAJAIAEtAABBxgBrDgsALCwsLCwsLCwsASwLIAFBAWohAUGUASECDNYBCyABQQFqIQFBlQEhAgzVAQtBrQEhAiABIARGDe4BIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazTAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO8BCyADQQA2AgAgBkEBaiEBQQ0MKAtBrAEhAiABIARGDe0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQeHTAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO4BCyADQQA2AgAgBkEBaiEBQQwMJwtBqwEhAiABIARGDewBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQarTAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO0BCyADQQA2AgAgBkEBaiEBQQMMJgtBqgEhAiABIARGDesBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQajTAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOwBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQakBIQIM6wELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBjwEhAgzRAQsgAUEBaiEBQZABIQIM0AELQagBIQIgASAERg3pASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm0wBqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzqAQsgA0EANgIAIAZBAWohAUEnDCMLQacBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk0wBqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEcDCILQaYBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGe0wBqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEGDCELQaUBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGZ0wBqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGkASECDOYBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQYQBIQIMzgELIAFBAWohAUGFASECDM0BCyABQQFqIQFBigEhAgzMAQsgAUEBaiEBQYsBIQIMywELQaMBIQIgASAERg3kASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGX0wBqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzlAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGiASECDOQBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGGASECDMoBCyABQQFqIQFBiQEhAgzJAQsgASAERgRAQaEBIQIM4wELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQYcBIQIMyQELIAFBAWohAUGIASECDMgBCyABIARGBEBBoAEhAgziAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GfASECIAEgBEYN4AEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBkdMAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4QELIANBADYCACAGQQFqIQFBHgwaC0GeASECIAEgBEYN3wEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBitMAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4AELIANBADYCACAGQQFqIQFBFQwZC0GdASECIAEgBEYN3gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBh9MAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3wELIANBADYCACAGQQFqIQFBFwwYC0GcASECIAEgBEYN3QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBgdMAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3gELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBmwEhAgzdAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYEBIQIMwwELIAFBAWohAUGCASECDMIBC0GaASECIAEgBEYN2wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB5tMAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3AELIANBADYCACAGQQFqIQFBCQwVC0GZASECIAEgBEYN2gEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB5NMAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM2wELIANBADYCACAGQQFqIQFBHwwUC0GYASECIAEgBEYN2QEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB/tIAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM2gELIANBADYCACAGQQFqIQFBAgwTC0GXASECIAEgBEYN2AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQfzSAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyABIARGBEBBlgEhAgzYAQtBASABLQAAQd8ARw0RGiABQQFqIQFB/QAhAgy9AQsgA0EANgIAIAZBAWohAUH+ACECDLwBC0GVASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBxNMAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBKQwPC0GUASECIAEgBEYN1AEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB+NIAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1QELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBkwEhAgzUAQsgAS0AAEHFAEcNDiABQQFqIQFB+gAhAgy5AQsgASAERgRAQZIBIQIM0wELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFB+AAhAgy5AQsgAUEBaiEBQfkAIQIMuAELQZEBIQIgASAERg3RASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHz0gBqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzSAQsgA0EANgIAIAZBAWohAUEjDAsLQZABIQIgASAERg3QASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHw0gBqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzRAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGPASECDNABCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQfMAIQIMtgELIAFBAWohAUH2ACECDLUBCyABIARGBEBBjgEhAgzPAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB9AAhAgy1AQsgAUEBaiEBQfUAIQIMtAELIAEgBEYEQEGNASECDM4BCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQYwBIQIgASAERg3MASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEHs0gBqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzNAQsgA0EANgIAIAZBAWohAUEFDAYLQYsBIQIgASAERg3LASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHm0gBqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzMAQsgA0EANgIAIAZBAWohAUEWDAULQYoBIQIgASAERg3KASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHh0wBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzLAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGJASECDMoBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUHvACECDLABCyABQQFqIQFB8AAhAgyvAQtBiAEhAiABIARGDcgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQeDSAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMkBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGHASECDMcBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC0iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB6R42AhAgA0EGNgIMDMQBC0HuACECDKkBCyADQYYBNgIcIAMgATYCFCADIAA2AgxBACECDMIBC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANB1A42AhAgA0EgNgIMQQAhAgzBAQtB7QAhAgymAQsgA0GFATYCHCADIAE2AhQgA0HXGjYCECADQRU2AgxBACECDL8BCyABIARGBEBBhQEhAgy/AQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GGHjYCECADQQY2AgxBACECDL8BC0ECIQIMpAELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GEASECDL0BCyABIARGBEBBgwEhAgy9AQsCQCABLQAAQQlrDgRAAABAAAtB6wAhAgyiAQsgAy0AKUEFRgRAQewAIQIMogELQeoAIQIMoQELIAEgBEYEQEGCASECDLsBCyADQQ82AgggAyABNgIEDAoLIAEgBEYEQEGBASECDLoBCwJAIAEtAABBCWsOBD0AAD0AC0HpACECDJ8BCyABIARHBEAgA0EPNgIIIAMgATYCBEHnACECDJ8BC0GAASECDLgBCwJAIAEgBEcEQANAIAEtAABB4M4Aai0AACIAQQNHBEACQCAAQQFrDgI/AAQLQeYAIQIMoQELIAQgAUEBaiIBRw0AC0H+ACECDLkBC0H+ACECDLgBCyADQQA2AhwgAyABNgIUIANBxh82AhAgA0EHNgIMQQAhAgy3AQsgASAERgRAQf8AIQIMtwELAkACQAJAIAEtAABB4NAAai0AAEEBaw4DPAIAAQtB6AAhAgyeAQsgA0EANgIcIAMgATYCFCADQYYSNgIQIANBBzYCDEEAIQIMtwELQeAAIQIMnAELIAEgBEcEQCABQQFqIQFB5QAhAgycAQtB/QAhAgy1AQsgBCABIgBGBEBB/AAhAgy1AQsgAC0AACIBQS9GBEAgAEEBaiEBQeQAIQIMmwELIAFBCWsiAkEXSw0BIAAhAUEBIAJ0QZuAgARxDTcMAQsgBCABIgBGBEBB+wAhAgy0AQsgAC0AAEEvRw0AIABBAWohAQwDC0EAIQIgA0EANgIcIAMgADYCFCADQcYfNgIQIANBBzYCDAyyAQsCQAJAAkACQAJAA0AgAS0AAEHgzABqLQAAIgBBBUcEQAJAAkAgAEEBaw4IPQUGBwgABAEIC0HhACECDJ8BCyABQQFqIQFB4wAhAgyeAQsgBCABQQFqIgFHDQALQfoAIQIMtgELIAFBAWoMFAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgy0AQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyzAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyyAQsgA0EANgIcIAMgATYCFCADQcsPNgIQIANBBzYCDEEAIQIMsQELIAEgBEYEQEH5ACECDLEBCwJAIAEtAABB4MwAai0AAEEBaw4INAQFBgAIAgMHCyABQQFqIQELQQMhAgyVAQsgAUEBagwNC0EAIQIgA0EANgIcIANBoxI2AhAgA0EHNgIMIAMgAUEBajYCFAytAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgysAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgA0EANgIcIAMgATYCFCADQcsPNgIQIANBBzYCDEEAIQIMqQELQeIAIQIMjgELIAEgBEYEQEH4ACECDKgBCyABQQFqDAILIAEgBEYEQEH3ACECDKcBCyABQQFqDAELIAEgBEYNASABQQFqCyEBQQQhAgyKAQtB9gAhAgyjAQsDQCABLQAAQeDKAGotAAAiAEECRwRAIABBAUcEQEHfACECDIsBCwwnCyAEIAFBAWoiAUcNAAtB9QAhAgyiAQsgASAERgRAQfQAIQIMogELAkAgAS0AAEEJaw43JQMGJQQGBgYGBgYGBgYGBgYGBgYGBgYFBgYCBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAYLIAFBAWoLIQFBBSECDIYBCyABQQFqDAYLIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMngELIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMnQELIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB8AA2AhwgAyABNgIUIAMgADYCDEEAIQIMnAELIANBADYCHCADIAE2AhQgA0G8EzYCECADQQc2AgxBACECDJsBCwJAAkACQAJAA0AgAS0AAEHgyABqLQAAIgBBBUcEQAJAIABBAWsOBiQDBAUGAAYLQd4AIQIMhgELIAQgAUEBaiIBRw0AC0HzACECDJ4BCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQdsANgIcIAMgATYCFCADIAA2AgxBACECDJ0BCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDJwBCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQfAANgIcIAMgATYCFCADIAA2AgxBACECDJsBCyADQQA2AhwgAyABNgIUIANB3Ag2AhAgA0EHNgIMQQAhAgyaAQsgASAERg0BIAFBAWoLIQFBBiECDH4LQfIAIQIMlwELAkACQAJAAkADQCABLQAAQeDGAGotAAAiAEEFRwRAIABBAWsOBB8CAwQFCyAEIAFBAWoiAUcNAAtB8QAhAgyaAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyZAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyYAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyXAQsgA0EANgIcIAMgATYCFCADQbQKNgIQIANBBzYCDEEAIQIMlgELQc4AIQIMewtB0AAhAgx6C0HdACECDHkLIAEgBEYEQEHwACECDJMBCwJAIAEtAABBCWsOBBYAABYACyABQQFqIQFB3AAhAgx4CyABIARGBEBB7wAhAgySAQsCQCABLQAAQQlrDgQVAAAVAAtBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUEQEHTASECDHgLIABBFUcEQCADQQA2AhwgAyABNgIUIANBwQ02AhAgA0EaNgIMQQAhAgySAQsgA0HuADYCHCADIAE2AhQgA0HwGTYCECADQRU2AgxBACECDJEBC0HtACECIAEgBEYNkAEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB18YAai0AAEcNBCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkQELIANBADYCACAGQQFqIQEgAy0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACECIANBADYCHCADIAE2AhQgA0HlCTYCECADQQg2AgwMkAELQewAIQIgASAERg2PASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHUxgBqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyQAQsgA0EANgIAIAZBAWohASADLQApQSFGDQMgA0EANgIcIAMgATYCFCADQYkKNgIQIANBCDYCDEEAIQIMjwELQesAIQIgASAERg2OASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEHQxgBqLQAARw0CIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyPAQsgA0EANgIAIAZBAWohASADLQApIgBBI0kNAiAAQS5GDQIgA0EANgIcIAMgATYCFCADQcEJNgIQIANBCDYCDEEAIQIMjgELIANBADYCAAtBACECIANBADYCHCADIAE2AhQgA0GENzYCECADQQg2AgwMjAELQdgAIQIMcQsgASAERwRAIANBDTYCCCADIAE2AgRB1wAhAgxxC0HqACECDIoBCyABIARGBEBB6QAhAgyKAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1gAhAgxwCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdCADQegANgIcIAMgATYCFCADIAA2AgxBACECDIkBCyABIARGBEBB5wAhAgyJAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLiIARQ11IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMiQELQdUAIQIMbgsgASAERgRAQeUAIQIMiAELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDIoBCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdyADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIkBCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdSADQeQANgIcIAMgATYCFCADIAA2AgwMiAELQdMAIQIMbQsgAy0AKUEiRg2AAUHSACECDGwLQQAhAAJAIAMoAjgiAkUNACACKAI8IgJFDQAgAyACEQAAIQALIABFBEBB1AAhAgxsCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQZwNNgIQIANBITYCDEEAIQIMhgELIANB4QA2AhwgAyABNgIUIANB1hk2AhAgA0EVNgIMQQAhAgyFAQsgASAERgRAQeAAIQIMhQELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HRACECDGwLIANBADYCHCADIAE2AhQgA0GIETYCECADQQk2AgxBACECDIUBCyADQQA2AhwgAyABNgIUIANBiBE2AhAgA0EJNgIMQQAhAgyEAQsgASAERgRAQd8AIQIMhAELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBiBE2AhAgA0ECNgIMQQAhAgyDAQsgASAERgRAQd0AIQIMgwELIAEtAAAiAkENRgRAIAFBAWohAUHPACECDGkLIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyCAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0G1LDYCECADQQc2AgwMgAELIAEgBEYEQEHbACECDIABCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc0AIQIMZAsgASAERgRAQdoAIQIMfgsgAS0AAEEJaw4EAAEBAAELQQAhAiADQQA2AhwgA0HsETYCECADQQc2AgwgAyABQQFqNgIUDHwLIANBgBI7ASpBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUNACAAQRVHDQEgA0HZADYCHCADIAE2AhQgA0HwGTYCECADQRU2AgxBACECDHsLQcwAIQIMYAsgA0EANgIcIAMgATYCFCADQcENNgIQIANBGjYCDEEAIQIMeQsgASAERgRAQdkAIQIMeQsgAS0AAEEgRw06IAFBAWohASADLQAuQQFxDTogA0EANgIcIAMgATYCFCADQa0bNgIQIANBHjYCDEEAIQIMeAsgASAERgRAQdgAIQIMeAsCQAJAAkACQAJAIAEtAAAiAEEKaw4EAgMD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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQTBrDjcVFAABAgMEBQYHFhYWFhYWFggJCgsMDRYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWDg8QERITFgtCAiEKDBQLQgMhCgwTC0IEIQoMEgtCBSEKDBELQgYhCgwQC0IHIQoMDwtCCCEKDA4LQgkhCgwNC0IKIQoMDAtCCyEKDAsLQgwhCgwKC0INIQoMCQtCDiEKDAgLQg8hCgwHC0IKIQoMBgtCCyEKDAULQgwhCgwEC0INIQoMAwtCDiEKDAILQg8hCgwBC0IBIQoLIAFBAWohASADKQMgIgtC//////////8PWARAIAMgC0IEhiAKhDcDIAwCC0EAIQIgA0EANgIcIAMgATYCFCADQa0JNgIQIANBDDYCDAwfC0ElIQIMBAtBJiECDAMLIAMgAToALCADQQA2AgAgB0EBaiEBQQwhAgwCCyADQQA2AgAgBkEBaiEBQQohAgwBCyABQQFqIQFBCCECDAALAAtBACECIANBADYCHCADIAE2AhQgA0HVEDYCECADQQk2AgwMGAtBACECIANBADYCHCADIAE2AhQgA0HXCjYCECADQQk2AgwMFwtBACECIANBADYCHCADIAE2AhQgA0G/EDYCECADQQk2AgwMFgtBACECIANBADYCHCADIAE2AhQgA0GkETYCECADQQk2AgwMFQtBACECIANBADYCHCADIAE2AhQgA0HVEDYCECADQQk2AgwMFAtBACECIANBADYCHCADIAE2AhQgA0HXCjYCECADQQk2AgwMEwtBACECIANBADYCHCADIAE2AhQgA0G/EDYCECADQQk2AgwMEgtBACECIANBADYCHCADIAE2AhQgA0GkETYCECADQQk2AgwMEQtBACECIANBADYCHCADIAE2AhQgA0G/FjYCECADQQ82AgwMEAtBACECIANBADYCHCADIAE2AhQgA0G/FjYCECADQQ82AgwMDwtBACECIANBADYCHCADIAE2AhQgA0HIEjYCECADQQs2AgwMDgtBACECIANBADYCHCADIAE2AhQgA0GVCTYCECADQQs2AgwMDQtBACECIANBADYCHCADIAE2AhQgA0HpDzYCECADQQo2AgwMDAtBACECIANBADYCHCADIAE2AhQgA0GDEDYCECADQQo2AgwMCwtBACECIANBADYCHCADIAE2AhQgA0GmHDYCECADQQI2AgwMCgtBACECIANBADYCHCADIAE2AhQgA0HFFTYCECADQQI2AgwMCQtBACECIANBADYCHCADIAE2AhQgA0H/FzYCECADQQI2AgwMCAtBACECIANBADYCHCADIAE2AhQgA0HKFzYCECADQQI2AgwMBwsgA0ECNgIcIAMgATYCFCADQZQdNgIQIANBFjYCDEEAIQIMBgtB3gAhAiABIARGDQUgCUEIaiEHIAMoAgAhBQJAAkAgASAERwRAIAVBxsYAaiEIIAQgBWogAWshBiAFQX9zQQpqIgUgAWohAANAIAEtAAAgCC0AAEcEQEECIQgMAwsgBUUEQEEAIQggACEBDAMLIAVBAWshBSAIQQFqIQggBCABQQFqIgFHDQALIAYhBSAEIQELIAdBATYCACADIAU2AgAMAQsgA0EANgIAIAcgCDYCAAsgByABNgIEIAkoAgwhACAJKAIIDgMBBQIACwALIANBADYCHCADQa0dNgIQIANBFzYCDCADIABBAWo2AhRBACECDAMLIANBADYCHCADIAA2AhQgA0HCHTYCECADQQk2AgxBACECDAILIAEgBEYEQEEoIQIMAgsgA0EJNgIIIAMgATYCBEEnIQIMAQsgASAERgRAQQEhAgwBCwNAAkACQAJAIAEtAABBCmsOBAABAQABCyABQQFqIQEMAQsgAUEBaiEBIAMtAC5BIHENAEEAIQIgA0EANgIcIAMgATYCFCADQYwgNgIQIANBBTYCDAwCC0EBIQIgASAERw0ACwsgCUEQaiQAIAJFBEAgAygCDCEADAELIAMgAjYCHEEAIQAgAygCBCIBRQ0AIAMgASAEIAMoAggRAQAiAUUNACADIAQ2AhQgAyABNgIMIAEhAAsgAAu+AgECfyAAQQA6AAAgAEHcAGoiAUEBa0EAOgAAIABBADoAAiAAQQA6AAEgAUEDa0EAOgAAIAFBAmtBADoAACAAQQA6AAMgAUEEa0EAOgAAQQAgAGtBA3EiASAAaiIAQQA2AgBB3AAgAWtBfHEiAiAAaiIBQQRrQQA2AgACQCACQQlJDQAgAEEANgIIIABBADYCBCABQQhrQQA2AgAgAUEMa0EANgIAIAJBGUkNACAAQQA2AhggAEEANgIUIABBADYC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YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABUcmFuc2Zlci1FbmNvZGluZyBjYW4ndCBiZSBwcmVzZW50IHdpdGggQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBzaXplAEV4cGVjdGVkIExGIGFmdGVyIGNodW5rIHNpemUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAUhUAABoVAAAPEgAA5BkAAJEVAAAJFAAALRkAAOQUAADpEQAAaRQAAKEUAAB2FQAAQxYAAF4SAACUFwAAFxYAAH0UAAB/FgAAQRcAALMTAADDFgAABBoAAL0YAADQGAAAoBMAANQZAACvFgAAaBYAAHAXAADZFgAA/BgAAP4RAABZFwAAlxYAABwXAAD2FgAAjRcAAAsSAAB/GwAALhEAALMQAABJEgAArRIAAPYYAABoEAAAYhUAABAVAABaFgAAShkAALUVAADBFQAAYBUAAFwZAABaGQAAUxkAABYVAACtEQAAQhAAALcQAABXGAAAvxUAAIkQAAAcGQAAGhkAALkVAABRGAAA3BMAAFsVAABZFQAA5hgAAGcVAAARGQAA7RgAAOcTAACuEAAAwhcAAAAUAACSEwAAhBMAAEASAAAmGQAArxUAAGIQAEHpOQsBAQBBgDoL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB6jsLBAEAAAIAQYE8C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEHqPQsEAQAAAgBBgT4LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQeA/Cw1sb3NlZWVwLWFsaXZlAEH5PwsBAQBBkMAAC+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnBAAsBAQBBkMIAC+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGhxAALXgEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAQYDGAAshZWN0aW9uZW50LWxlbmd0aG9ucm94eS1jb25uZWN0aW9uAEGwxgALK3JhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KU00NCg0KVFRQL0NFL1RTUC8AQenGAAsFAQIAAQMAQYDHAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQenIAAsFAQIAAQMAQYDJAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQenKAAsEAQAAAQBBgcsAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEHpzAALBQECAAEDAEGAzQALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEHpzgALBQEBAAEBAEGAzwALAQEAQZrPAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQenQAAsFAQEAAQEAQYDRAAsBAQBBitEACwYCAAAAAAIAQaHRAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB4NIAC5oBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n get: () => {\n return wasmBuffer\n ? wasmBuffer\n : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n }\n})\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzQzBQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEDAAADAAAABAUBcAESEgUDAQACBggBfwFBgNgECwfFBygGbWVtb3J5AgALX2luaXRpYWxpemUACBlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQACRhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUANgxsbGh0dHBfYWxsb2MACwZtYWxsb2MAOAtsbGh0dHBfZnJlZQAMBGZyZWUADA9sbGh0dHBfZ2V0X3R5cGUADRVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADhVsbGh0dHBfZ2V0X2h0dHBfbWlub3IADxFsbGh0dHBfZ2V0X21ldGhvZAAQFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAERJsbGh0dHBfZ2V0X3VwZ3JhZGUAEgxsbGh0dHBfcmVzZXQAEw5sbGh0dHBfZXhlY3V0ZQAUFGxsaHR0cF9zZXR0aW5nc19pbml0ABUNbGxodHRwX2ZpbmlzaAAWDGxsaHR0cF9wYXVzZQAXDWxsaHR0cF9yZXN1bWUAGBtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGRBsbGh0dHBfZ2V0X2Vycm5vABoXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AGxdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAcFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB0RbGxodHRwX2Vycm5vX25hbWUAHhJsbGh0dHBfbWV0aG9kX25hbWUAHxJsbGh0dHBfc3RhdHVzX25hbWUAIBpsbGh0dHBf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a0E+aiECCyABIAI2AhwgAUIANwIQIAJBAnRBsNYAaiEAAkBBhNQAKAIAIgNBASACdCIHcUUEQCAAIAE2AgBBhNQAIAMgB3I2AgAgASAANgIYIAEgATYCCCABIAE2AgwMAQsgBEEZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEAAkADQCAAIgMoAgRBeHEgBEYNASACQR12IQAgAkEBdCECIAMgAEEEcWpBEGoiBygCACIADQALIAcgATYCACABIAM2AhggASABNgIMIAEgATYCCAwBCyADKAIIIgAgATYCDCADIAE2AgggAUEANgIYIAEgAzYCDCABIAA2AggLQaDUAEGg1AAoAgBBAWsiAEF/IAAbNgIACwsHACAALQAoCwcAIAAtACoLBwAgAC0AKwsHACAALQApCwcAIAAvATQLBwAgAC0AMAtAAQR/IAAoAhghASAALwEuIQIgAC0AKCEDIAAoAjghBCAAEDcgACAENgI4IAAgAzoAKCAAIAI7AS4gACABNgIYC8X4AQIHfwN+IAEgAmohBAJAIAAiAygCDCIADQAgAygCBARAIAMgATYCBAsjAEEQayIJJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACDtQBAAECAwQFBgcICQoLDA0ODxARFBUWFxgZGhscHR4fICEjJCUnKCmIA4cDhQOEA/wC9QLuAusC6ALmAuMC4ALfAt0C2wLWAtUC1ALTAtICygLJAsgCxwLGAsUCxALDAr0CvAK6ArkCuAK3ArYCtQK0ArICsQKsAqoCqAKnAqYCpQKkAqMCogKhAqACnwKbApoCmQKYApcCkAKIAoQCgwKCAvkB9gH1AfQB8wHyAfEB8AHvAe0B6wHoAeMB4QHgAd8B3gHdAdwB2wHaAdkB2AHX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QEBAQEBAQEBAQEBAAEALQQAhAiADQQA2AhwgA0G3CzYCECADQQI2AgwgAyABQQFqNgIUDIEDCyADQS9qIQIDQCABIARGBEBBISECDIIDCwJAAkACQCABLQAAIgBBCWsOGAIAKioBKioqKioqKioqKioqKioqKioqAigLIAFBAWohASADQS9qLQAAQQFxRQ0LDBkLIAFBAWohAQwYCyABQQFqIQEgAi0AAEECcQ0AC0EAIQIgA0EANgIcIAMgATYCFCADQc4UNgIQIANBDDYCDAyAAwsgAUEBaiEBC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADQEM0QILIANCADcDIAw8CyAAQRVGBEAgA0EkNgIcIAMgATYCFCADQYYaNgIQIANBFTYCDEEAIQIM/QILQQAhAiADQQA2AhwgAyABNgIUIANB4g02AhAgA0EUNgIMDPwCCyADKAIEIQBBACECIANBADYCBCADIAAgASAMp2oiARAxIgBFDSsgA0EHNgIcIAMgATYCFCADIAA2AgwM+wILIAMtAC5BwABxRQ0BC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAARQ0rIABBFUYEQCADQQo2AhwgAyABNgIUIANB8Rg2AhAgA0EVNgIMQQAhAgz6AgtBACECIANBADYCHCADIAE2AhQgA0GLDDYCECADQRM2AgwM+QILQQAhAiADQQA2AhwgAyABNgIUIANBsRQ2AhAgA0ECNgIMDPgCC0EAIQIgA0EANgIcIAMgATYCFCADQYwUNgIQIANBGTYCDAz3AgtBACECIANBADYCHCADIAE2AhQgA0HRHDYCECADQRk2AgwM9gILIABBFUYNPUEAIQIgA0EANgIcIAMgATYCFCADQaIPNgIQIANBIjYCDAz1AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMiIARQ0oIANBDTYCHCADIAE2AhQgAyAANgIMDPQCCyAAQRVGDTpBACECIANBADYCHCADIAE2AhQgA0GiDzYCECADQSI2AgwM8wILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDIiAEUEQCABQQFqIQEMKAsgA0EONgIcIAMgADYCDCADIAFBAWo2AhQM8gILIABBFUYNN0EAIQIgA0EANgIcIAMgATYCFCADQaIPNgIQIANBIjYCDAzxAgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMiIARQRAIAFBAWohAQwnCyADQQ82AhwgAyAANgIMIAMgAUEBajYCFAzwAgtBACECIANBADYCHCADIAE2AhQgA0HoFjYCECADQRk2AgwM7wILIABBFUYNM0EAIQIgA0EANgIcIAMgATYCFCADQc4MNgIQIANBIzYCDAzuAgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMyIARQ0lIANBETYCHCADIAE2AhQgAyAANgIMDO0CCyAAQRVGDTBBACECIANBADYCHCADIAE2AhQgA0HODDYCECADQSM2AgwM7AILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUEQCABQQFqIQEMJQsgA0ESNgIcIAMgADYCDCADIAFBAWo2AhQM6wILIANBL2otAABBAXFFDQELQRUhAgzPAgtBACECIANBADYCHCADIAE2AhQgA0HoFjYCECADQRk2AgwM6AILIABBO0cNACABQQFqIQEMDAtBACECIANBADYCHCADIAE2AhQgA0GYFzYCECADQQI2AgwM5gILIABBFUYNKEEAIQIgA0EANgIcIAMgATYCFCADQc4MNgIQIANBIzYCDAzlAgsgA0EUNgIcIAMgATYCFCADIAA2AgwM5AILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUEQCABQQFqIQEM3AILIANBFTYCHCADIAA2AgwgAyABQQFqNgIUDOMCCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDNoCCyADQRc2AhwgAyAANgIMIAMgAUEBajYCFAziAgsgAEEVRg0jQQAhAiADQQA2AhwgAyABNgIUIANBzgw2AhAgA0EjNgIMDOECCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDB0LIANBGTYCHCADIAA2AgwgAyABQQFqNgIUDOACCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDNYCCyADQRo2AhwgAyAANgIMIAMgAUEBajYCFAzfAgsgAEEVRg0fQQAhAiADQQA2AhwgAyABNgIUIANBog82AhAgA0EiNgIMDN4CCyADKAIEIQBBACEC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DLMCCyABIARGBEBB6QEhAgyzAgsgAS0AAEHIAEYNASADQQE6ACgLQbYBIQIMlwILQcoBIQIMlgILIAEgBEcEQCADQQw2AgggAyABNgIEQckBIQIMlgILQegBIQIMrwILIAEgBEYEQEHnASECDK8CCyABLQAAQcgARw0EIAFBAWohAUHIASECDJQCCyABIARGBEBB5gEhAgyuAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQcYBIQIMlAILIAFBAWohAUHHASECDJMCC0HlASECIAEgBEYNrAIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB99MAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMrQILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAtIgBFBEBB1AEhAgyTAgsgA0HkATYCHCADIAE2AhQgAyAANgIMQQAhAgysAgtB4wEhAiABIARGDasCIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQfXTAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADKwCCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAtIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB0B42AhAgA0EINgIMDKkCC0HFASECDI4CCyADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDKcCC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQ1lIABBFUcEQCADQQA2AhwgAyABNgIUIANB1A42AhAgA0EgNgIMQQAhAgynAgsgA0GFATYCHCADIAE2AhQgA0HXGjYCECADQRU2AgxBACECDKYCC0HhASECIAQgASIARg2lAiAEIAFrIAMoAgAiAWohBSAAIAFrQQRqIQYCQANAIAAtAAAgAUHw0wBqLQAARw0BIAFBBEYNAyABQQFqIQEgBCAAQQFqIgBHDQALIAMgBTYCAAymAgsgA0EANgIcIAMgADYCFCADQYQ3NgIQIANBCDYCDCADQQA2AgBBACECDKUCCyABIARHBEAgA0ENNgIIIAMgATYCBEHCASECDIsCC0HgASECDKQCCyADQQA2AgAgBkEBaiEBC0HDASECDIgCCyABIARGBEBB3wEhAgyiAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBwQEhAgyIAgsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYgCIANB3gE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILIAEgBEYEQEHdASECDKECCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYkCIANB3AE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILQcABIQIMhgILIAEgBEYEQEHbASECDKACC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDQIgA0HYATYCHCADIAE2AhQgAyAANgIMQQAhAgyiAgsgAygCBCEAIANBADYCBCADIAAgARAuIgBFDYsCIANB2QE2AhwgAyABNgIUIAMgADYCDEEAIQIMoQILIAMoAgQhACADQQA2AgQgAyAAIAEQLiIARQ2JAiADQdoBNgIcIAMgATYCFCADIAA2AgwMoAILQb8BIQIMhQILQQAhAAJAIAMoAjgiAkUNACACKAI8IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBnA02AhAgA0EhNgIMQQAhAgygAgtBvgEhAgyFAgsgA0HXATYCHCADIAE2AhQgA0HWGTYCECADQRU2AgxBACECDJ4CCyABIARGBEBB1wEhAgyeAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANB6xA2AhAgA0EJNgIMQQAhAgyeAgtBvQEhAgyDAgsgASAERgRAQdYBIQIM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LgsgAUEBaiEBQZcBIQIM2AELIAFBAWohAUEiDCsLIAEgBEYEQEGvASECDPEBCyABLQAAQdAARw0rIAFBAWohAUGWASECDNYBCyABIARGBEBBrgEhAgzwAQsCQAJAIAEtAABBxgBrDgsALCwsLCwsLCwsASwLIAFBAWohAUGUASECDNYBCyABQQFqIQFBlQEhAgzVAQtBrQEhAiABIARGDe4BIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazTAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO8BCyADQQA2AgAgBkEBaiEBQQ0MKAtBrAEhAiABIARGDe0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQeHTAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO4BCyADQQA2AgAgBkEBaiEBQQwMJwtBqwEhAiABIARGDewBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQarTAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADO0BCyADQQA2AgAgBkEBaiEBQQMMJgtBqgEhAiABIARGDesBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQajTAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOwBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQakBIQIM6wELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBjwEhAgzRAQsgAUEBaiEBQZABIQIM0AELQagBIQIgASAERg3pASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm0wBqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzqAQsgA0EANgIAIAZBAWohAUEnDCMLQacBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk0wBqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEcDCILQaYBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGe0wBqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEGDCELQaUBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGZ0wBqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGkASECDOYBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQYQBIQIMzgELIAFBAWohAUGFASECDM0BCyABQQFqIQFBigEhAgzMAQsgAUEBaiEBQYsBIQIMywELQaMBIQIgASAERg3kASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGX0wBqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzlAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGiASECDOQBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGGASECDMoBCyABQQFqIQFBiQEhAgzJAQsgASAERgRAQaEBIQIM4wELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQYcBIQIMyQELIAFBAWohAUGIASECDMgBCyABIARGBEBBoAEhAgziAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GfASECIAEgBEYN4AEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBkdMAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4QELIANBADYCACAGQQFqIQFBHgwaC0GeASECIAEgBEYN3wEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBitMAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4AELIANBADYCACAGQQFqIQFBFQwZC0GdASECIAEgBEYN3gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBh9MAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3wELIANBADYCACAGQQFqIQFBFwwYC0GcASECIAEgBEYN3QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBgdMAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3gELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBmwEhAgzdAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYEBIQIMwwELIAFBAWohAUGCASECDMIBC0GaASECIAEgBEYN2wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB5tMAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM3AELIANBADYCACAGQQFqIQFBCQwVC0GZASECIAEgBEYN2gEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB5NMAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM2wELIANBADYCACAGQQFqIQFBHwwUC0GYASECIAEgBEYN2QEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB/tIAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM2gELIANBADYCACAGQQFqIQFBAgwTC0GXASECIAEgBEYN2AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQfzSAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyABIARGBEBBlgEhAgzYAQtBASABLQAAQd8ARw0RGiABQQFqIQFB/QAhAgy9AQsgA0EANgIAIAZBAWohAUH+ACECDLwBC0GVASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBxNMAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBKQwPC0GUASECIAEgBEYN1AEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB+NIAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1QELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBkwEhAgzUAQsgAS0AAEHFAEcNDiABQQFqIQFB+gAhAgy5AQsgASAERgRAQZIBIQIM0wELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFB+AAhAgy5AQsgAUEBaiEBQfkAIQIMuAELQZEBIQIgASAERg3RASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHz0gBqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzSAQsgA0EANgIAIAZBAWohAUEjDAsLQZABIQIgASAERg3QASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHw0gBqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzRAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGPASECDNABCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQfMAIQIMtgELIAFBAWohAUH2ACECDLUBCyABIARGBEBBjgEhAgzPAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB9AAhAgy1AQsgAUEBaiEBQfUAIQIMtAELIAEgBEYEQEGNASECDM4BCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQYwBIQIgASAERg3MASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEHs0gBqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzNAQsgA0EANgIAIAZBAWohAUEFDAYLQYsBIQIgASAERg3LASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHm0gBqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzMAQsgA0EANgIAIAZBAWohAUEWDAULQYoBIQIgASAERg3KASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHh0wBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzLAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGJASECDMoBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUHvACECDLABCyABQQFqIQFB8AAhAgyvAQtBiAEhAiABIARGDcgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQeDSAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMkBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGHASECDMcBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC0iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB6R42AhAgA0EGNgIMDMQBC0HuACECDKkBCyADQYYBNgIcIAMgATYCFCADIAA2AgxBACECDMIBC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANB1A42AhAgA0EgNgIMQQAhAgzBAQtB7QAhAgymAQsgA0GFATYCHCADIAE2AhQgA0HXGjYCECADQRU2AgxBACECDL8BCyABIARGBEBBhQEhAgy/AQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GGHjYCECADQQY2AgxBACECDL8BC0ECIQIMpAELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GEASECDL0BCyABIARGBEBBgwEhAgy9AQsCQCABLQAAQQlrDgRAAABAAAtB6wAhAgyiAQsgAy0AKUEFRgRAQewAIQIMogELQeoAIQIMoQELIAEgBEYEQEGCASECDLsBCyADQQ82AgggAyABNgIEDAoLIAEgBEYEQEGBASECDLoBCwJAIAEtAABBCWsOBD0AAD0AC0HpACECDJ8BCyABIARHBEAgA0EPNgIIIAMgATYCBEHnACECDJ8BC0GAASECDLgBCwJAIAEgBEcEQANAIAEtAABB4M4Aai0AACIAQQNHBEACQCAAQQFrDgI/AAQLQeYAIQIMoQELIAQgAUEBaiIBRw0AC0H+ACECDLkBC0H+ACECDLgBCyADQQA2AhwgAyABNgIUIANBxh82AhAgA0EHNgIMQQAhAgy3AQsgASAERgRAQf8AIQIMtwELAkACQAJAIAEtAABB4NAAai0AAEEBaw4DPAIAAQtB6AAhAgyeAQsgA0EANgIcIAMgATYCFCADQYYSNgIQIANBBzYCDEEAIQIMtwELQeAAIQIMnAELIAEgBEcEQCABQQFqIQFB5QAhAgycAQtB/QAhAgy1AQsgBCABIgBGBEBB/AAhAgy1AQsgAC0AACIBQS9GBEAgAEEBaiEBQeQAIQIMmwELIAFBCWsiAkEXSw0BIAAhAUEBIAJ0QZuAgARxDTcMAQsgBCABIgBGBEBB+wAhAgy0AQsgAC0AAEEvRw0AIABBAWohAQwDC0EAIQIgA0EANgIcIAMgADYCFCADQcYfNgIQIANBBzYCDAyyAQsCQAJAAkACQAJAA0AgAS0AAEHgzABqLQAAIgBBBUcEQAJAAkAgAEEBaw4IPQUGBwgABAEIC0HhACECDJ8BCyABQQFqIQFB4wAhAgyeAQsgBCABQQFqIgFHDQALQfoAIQIMtgELIAFBAWoMFAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgy0AQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyzAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDR4gA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyyAQsgA0EANgIcIAMgATYCFCADQcsPNgIQIANBBzYCDEEAIQIMsQELIAEgBEYEQEH5ACECDLEBCwJAIAEtAABB4MwAai0AAEEBaw4INAQFBgAIAgMHCyABQQFqIQELQQMhAgyVAQsgAUEBagwNC0EAIQIgA0EANgIcIANBoxI2AhAgA0EHNgIMIAMgAUEBajYCFAytAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgysAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDRYgA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgA0EANgIcIAMgATYCFCADQcsPNgIQIANBBzYCDEEAIQIMqQELQeIAIQIMjgELIAEgBEYEQEH4ACECDKgBCyABQQFqDAILIAEgBEYEQEH3ACECDKcBCyABQQFqDAELIAEgBEYNASABQQFqCyEBQQQhAgyKAQtB9gAhAgyjAQsDQCABLQAAQeDKAGotAAAiAEECRwRAIABBAUcEQEHfACECDIsBCwwnCyAEIAFBAWoiAUcNAAtB9QAhAgyiAQsgASAERgRAQfQAIQIMogELAkAgAS0AAEEJaw43JQMGJQQGBgYGBgYGBgYGBgYGBgYGBgYFBgYCBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAAYLIAFBAWoLIQFBBSECDIYBCyABQQFqDAYLIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMngELIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMnQELIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ0IIANB8AA2AhwgAyABNgIUIAMgADYCDEEAIQIMnAELIANBADYCHCADIAE2AhQgA0G8EzYCECADQQc2AgxBACECDJsBCwJAAkACQAJAA0AgAS0AAEHgyABqLQAAIgBBBUcEQAJAIABBAWsOBiQDBAUGAAYLQd4AIQIMhgELIAQgAUEBaiIBRw0AC0HzACECDJ4BCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQdsANgIcIAMgATYCFCADIAA2AgxBACECDJ0BCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDJwBCyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNByADQfAANgIcIAMgATYCFCADIAA2AgxBACECDJsBCyADQQA2AhwgAyABNgIUIANB3Ag2AhAgA0EHNgIMQQAhAgyaAQsgASAERg0BIAFBAWoLIQFBBiECDH4LQfIAIQIMlwELAkACQAJAAkADQCABLQAAQeDGAGotAAAiAEEFRwRAIABBAWsOBB8CAwQFCyAEIAFBAWoiAUcNAAtB8QAhAgyaAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyZAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyYAQsgAygCBCEAIANBADYCBCADIAAgARArIgBFDQMgA0HwADYCHCADIAE2AhQgAyAANgIMQQAhAgyXAQsgA0EANgIcIAMgATYCFCADQbQKNgIQIANBBzYCDEEAIQIMlgELQc4AIQIMewtB0AAhAgx6C0HdACECDHkLIAEgBEYEQEHwACECDJMBCwJAIAEtAABBCWsOBBYAABYACyABQQFqIQFB3AAhAgx4CyABIARGBEBB7wAhAgySAQsCQCABLQAAQQlrDgQVAAAVAAtBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUEQEHTASECDHgLIABBFUcEQCADQQA2AhwgAyABNgIUIANBwQ02AhAgA0EaNgIMQQAhAgySAQsgA0HuADYCHCADIAE2AhQgA0HwGTYCECADQRU2AgxBACECDJEBC0HtACECIAEgBEYNkAEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB18YAai0AAEcNBCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkQELIANBADYCACAGQQFqIQEgAy0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACECIANBADYCHCADIAE2AhQgA0HlCTYCECADQQg2AgwMkAELQewAIQIgASAERg2PASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHUxgBqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyQAQsgA0EANgIAIAZBAWohASADLQApQSFGDQMgA0EANgIcIAMgATYCFCADQYkKNgIQIANBCDYCDEEAIQIMjwELQesAIQIgASAERg2OASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEHQxgBqLQAARw0CIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyPAQsgA0EANgIAIAZBAWohASADLQApIgBBI0kNAiAAQS5GDQIgA0EANgIcIAMgATYCFCADQcEJNgIQIANBCDYCDEEAIQIMjgELIANBADYCAAtBACECIANBADYCHCADIAE2AhQgA0GENzYCECADQQg2AgwMjAELQdgAIQIMcQsgASAERwRAIANBDTYCCCADIAE2AgRB1wAhAgxxC0HqACECDIoBCyABIARGBEBB6QAhAgyKAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1gAhAgxwCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdCADQegANgIcIAMgATYCFCADIAA2AgxBACECDIkBCyABIARGBEBB5wAhAgyJAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLiIARQ11IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMiQELQdUAIQIMbgsgASAERgRAQeUAIQIMiAELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDIoBCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdyADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIkBCyADKAIEIQAgA0EANgIEIAMgACABEC4iAEUNdSADQeQANgIcIAMgATYCFCADIAA2AgwMiAELQdMAIQIMbQsgAy0AKUEiRg2AAUHSACECDGwLQQAhAAJAIAMoAjgiAkUNACACKAI8IgJFDQAgAyACEQAAIQALIABFBEBB1AAhAgxsCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQZwNNgIQIANBITYCDEEAIQIMhgELIANB4QA2AhwgAyABNgIUIANB1hk2AhAgA0EVNgIMQQAhAgyFAQsgASAERgRAQeAAIQIMhQELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HRACECDGwLIANBADYCHCADIAE2AhQgA0GIETYCECADQQk2AgxBACECDIUBCyADQQA2AhwgAyABNgIUIANBiBE2AhAgA0EJNgIMQQAhAgyEAQsgASAERgRAQd8AIQIMhAELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBiBE2AhAgA0ECNgIMQQAhAgyDAQsgASAERgRAQd0AIQIMgwELIAEtAAAiAkENRgRAIAFBAWohAUHPACECDGkLIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyCAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0G1LDYCECADQQc2AgwMgAELIAEgBEYEQEHbACECDIABCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc0AIQIMZAsgASAERgRAQdoAIQIMfgsgAS0AAEEJaw4EAAEBAAELQQAhAiADQQA2AhwgA0HsETYCECADQQc2AgwgAyABQQFqNgIUDHwLIANBgBI7ASpBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUNACAAQRVHDQEgA0HZADYCHCADIAE2AhQgA0HwGTYCECADQRU2AgxBACECDHsLQcwAIQIMYAsgA0EANgIcIAMgATYCFCADQcENNgIQIANBGjYCDEEAIQIMeQsgASAERgRAQdkAIQIMeQsgAS0AAEEgRw06IAFBAWohASADLQAuQQFxDTogA0EANgIcIAMgATYCFCADQa0bNgIQIANBHjYCDEEAIQIMeAsgASAERgRAQdgAIQIMeAsCQAJAAkACQAJAIAEtAAAiAEEKaw4EAgMD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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQTBrDjcVFAABAgMEBQYHFhYWFhYWFggJCgsMDRYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWDg8QERITFgtCAiEKDBQLQgMhCgwTC0IEIQoMEgtCBSEKDBELQgYhCgwQC0IHIQoMDwtCCCEKDA4LQgkhCgwNC0IKIQoMDAtCCyEKDAsLQgwhCgwKC0INIQoMCQtCDiEKDAgLQg8hCgwHC0IKIQoMBgtCCyEKDAULQgwhCgwEC0INIQoMAwtCDiEKDAILQg8hCgwBC0IBIQoLIAFBAWohASADKQMgIgtC//////////8PWARAIAMgC0IEhiAKhDcDIAwCC0EAIQIgA0EANgIcIAMgATYCFCADQa0JNgIQIANBDDYCDAwfC0ElIQIMBAtBJiECDAMLIAMgAToALCADQQA2AgAgB0EBaiEBQQwhAgwCCyADQQA2AgAgBkEBaiEBQQohAgwBCyABQQFqIQFBCCECDAALAAtBACECIANBADYCHCADIAE2AhQgA0HVEDYCECADQQk2AgwMGAtBACECIANBADYCHCADIAE2AhQgA0HXCjYCECADQQk2AgwMFwtBACECIANBADYCHCADIAE2AhQgA0G/EDYCECADQQk2AgwMFgtBACECIANBADYCHCADIAE2AhQgA0GkETYCECADQQk2AgwMFQtBACECIANBADYCHCADIAE2AhQgA0HVEDYCECADQQk2AgwMFAtBACECIANBADYCHCADIAE2AhQgA0HXCjYCECADQQk2AgwMEwtBACECIANBADYCHCADIAE2AhQgA0G/EDYCECADQQk2AgwMEgtBACECIANBADYCHCADIAE2AhQgA0GkETYCECADQQk2AgwMEQtBACECIANBADYCHCADIAE2AhQgA0G/FjYCECADQQ82AgwMEAtBACECIANBADYCHCADIAE2AhQgA0G/FjYCECADQQ82AgwMDwtBACECIANBADYCHCADIAE2AhQgA0HIEjYCECADQQs2AgwMDgtBACECIANBADYCHCADIAE2AhQgA0GVCTYCECADQQs2AgwMDQtBACECIANBADYCHCADIAE2AhQgA0HpDzYCECADQQo2AgwMDAtBACECIANBADYCHCADIAE2AhQgA0GDEDYCECADQQo2AgwMCwtBACECIANBADYCHCADIAE2AhQgA0GmHDYCECADQQI2AgwMCgtBACECIANBADYCHCADIAE2AhQgA0HFFTYCECADQQI2AgwMCQtBACECIANBADYCHCADIAE2AhQgA0H/FzYCECADQQI2AgwMCAtBACECIANBADYCHCADIAE2AhQgA0HKFzYCECADQQI2AgwMBwsgA0ECNgIcIAMgATYCFCADQZQdNgIQIANBFjYCDEEAIQIMBgtB3gAhAiABIARGDQUgCUEIaiEHIAMoAgAhBQJAAkAgASAERwRAIAVBxsYAaiEIIAQgBWogAWshBiAFQX9zQQpqIgUgAWohAANAIAEtAAAgCC0AAEcEQEECIQgMAwsgBUUEQEEAIQggACEBDAMLIAVBAWshBSAIQQFqIQggBCABQQFqIgFHDQALIAYhBSAEIQELIAdBATYCACADIAU2AgAMAQsgA0EANgIAIAcgCDYCAAsgByABNgIEIAkoAgwhACAJKAIIDgMBBQIACwALIANBADYCHCADQa0dNgIQIANBFzYCDCADIABBAWo2AhRBACECDAMLIANBADYCHCADIAA2AhQgA0HCHTYCECADQQk2AgxBACECDAILIAEgBEYEQEEoIQIMAgsgA0EJNgIIIAMgATYCBEEnIQIMAQsgASAERgRAQQEhAgwBCwNAAkACQAJAIAEtAABBCmsOBAABAQABCyABQQFqIQEMAQsgAUEBaiEBIAMtAC5BIHENAEEAIQIgA0EANgIcIAMgATYCFCADQYwgNgIQIANBBTYCDAwCC0EBIQIgASAERw0ACwsgCUEQaiQAIAJFBEAgAygCDCEADAELIAMgAjYCHEEAIQAgAygCBCIBRQ0AIAMgASAEIAMoAggRAQAiAUUNACADIAQ2AhQgAyABNgIMIAEhAAsgAAu+AgECfyAAQQA6AAAgAEHcAGoiAUEBa0EAOgAAIABBADoAAiAAQQA6AAEgAUEDa0EAOgAAIAFBAmtBADoAACAAQQA6AAMgAUEEa0EAOgAAQQAgAGtBA3EiASAAaiIAQQA2AgBB3AAgAWtBfHEiAiAAaiIBQQRrQQA2AgACQCACQQlJDQAgAEEANgIIIABBADYCBCABQQhrQQA2AgAgAUEMa0EANgIAIAJBGUkNACAAQQA2AhggAEEANgIUIABBADYC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U3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMARXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVycwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGhlYWRlciB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBxdW90ZWQtcGFpciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgcmVzcG9uc2UgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGV4dGVuc2lvbiBuYW1lAEludmFsaWQgc3RhdHVzIGNvZGUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBkYXRhAEV4cGVjdGVkIExGIGFmdGVyIGNodW5rIGRhdGEAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAERhdGEgYWZ0ZXIgYENvbm5lY3Rpb246IGNsb3NlYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAUVVFUlkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBFeHBlY3RlZCBMRiBhZnRlciBDUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAFIVAAAaFQAADxIAAOQZAACRFQAACRQAAC0ZAADkFAAA6REAAGkUAAChFAAAdhUAAEMWAABeEgAAlBcAABcWAAB9FAAAfxYAAEEXAACzEwAAwxYAAAQaAAC9GAAA0BgAAKATAADUGQAArxYAAGgWAABwFwAA2RYAAPwYAAD+EQAAWRcAAJcWAAAcFwAA9hYAAI0XAAALEgAAfxsAAC4RAACzEAAASRIAAK0SAAD2GAAAaBAAAGIVAAAQFQAAWhYAAEoZAAC1FQAAwRUAAGAVAABcGQAAWhkAAFMZAAAWFQAArREAAEIQAAC3EAAAVxgAAL8VAACJEAAAHBkAABoZAAC5FQAAURgAANwTAABbFQAAWRUAAOYYAABnFQAAERkAAO0YAADnEwAArhAAAMIXAAAAFAAAkhMAAIQTAABAEgAAJhkAAK8VAABiEABB6TkLAQEAQYA6C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQeo7CwQBAAACAEGBPAteAwQDAwMDAwAAAwMAAwMAAwMDAwMDAwMDAwAFAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAMAAwBB6j0LBAEAAAIAQYE+C14DAAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAQABQAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEHgPwsNbG9zZWVlcC1hbGl2ZQBB+T8LAQEAQZDAAAvgAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5wQALAQEAQZDCAAvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBocQAC14BAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGAxgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBsMYACytyYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNClNNDQoNClRUUC9DRS9UU1AvAEHpxgALBQECAAEDAEGAxwALXwQFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAEHpyAALBQECAAEDAEGAyQALXwQFBQYFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAEHpygALBAEAAAEAQYHLAAteAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgBB6cwACwUBAgABAwBBgM0AC18EBQAABQUFBQUFBQUFBQUGBQUFBQUFBQUFBQUFAAUABwgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQAFAAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAAAABQBB6c4ACwUBAQABAQBBgM8ACwEBAEGazwALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEHp0AALBQEBAAEBAEGA0QALAQEAQYrRAAsGAgAAAAACAEGh0QALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQeDSAAuaAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VVRVJZT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n get: () => {\n return wasmBuffer\n ? wasmBuffer\n : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n }\n})\n", "'use strict'\n\nconst corsSafeListedMethods = /** @type {const} */ (['GET', 'HEAD', 'POST'])\nconst corsSafeListedMethodsSet = new Set(corsSafeListedMethods)\n\nconst nullBodyStatus = /** @type {const} */ ([101, 204, 205, 304])\n\nconst redirectStatus = /** @type {const} */ ([301, 302, 303, 307, 308])\nconst redirectStatusSet = new Set(redirectStatus)\n\n/**\n * @see https://fetch.spec.whatwg.org/#block-bad-port\n */\nconst badPorts = /** @type {const} */ ([\n '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',\n '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',\n '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',\n '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',\n '2049', '3659', '4045', '4190', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6679',\n '6697', '10080'\n])\nconst badPortsSet = new Set(badPorts)\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header\n */\nconst referrerPolicyTokens = /** @type {const} */ ([\n 'no-referrer',\n 'no-referrer-when-downgrade',\n 'same-origin',\n 'origin',\n 'strict-origin',\n 'origin-when-cross-origin',\n 'strict-origin-when-cross-origin',\n 'unsafe-url'\n])\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policies\n */\nconst referrerPolicy = /** @type {const} */ ([\n '',\n ...referrerPolicyTokens\n])\nconst referrerPolicyTokensSet = new Set(referrerPolicyTokens)\n\nconst requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])\n\nconst safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])\nconst safeMethodsSet = new Set(safeMethods)\n\nconst requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])\n\nconst requestCredentials = /** @type {const} */ (['omit', 'same-origin', 'include'])\n\nconst requestCache = /** @type {const} */ ([\n 'default',\n 'no-store',\n 'reload',\n 'no-cache',\n 'force-cache',\n 'only-if-cached'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-body-header-name\n */\nconst requestBodyHeader = /** @type {const} */ ([\n 'content-encoding',\n 'content-language',\n 'content-location',\n 'content-type',\n // See https://github.com/nodejs/undici/issues/2021\n // 'Content-Length' is a forbidden header name, which is typically\n // removed in the Headers implementation. However, undici doesn't\n // filter out headers, so we add it here.\n 'content-length'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#enumdef-requestduplex\n */\nconst requestDuplex = /** @type {const} */ ([\n 'half'\n])\n\n/**\n * @see http://fetch.spec.whatwg.org/#forbidden-method\n */\nconst forbiddenMethods = /** @type {const} */ (['CONNECT', 'TRACE', 'TRACK'])\nconst forbiddenMethodsSet = new Set(forbiddenMethods)\n\nconst subresource = /** @type {const} */ ([\n 'audio',\n 'audioworklet',\n 'font',\n 'image',\n 'manifest',\n 'paintworklet',\n 'script',\n 'style',\n 'track',\n 'video',\n 'xslt',\n ''\n])\nconst subresourceSet = new Set(subresource)\n\nmodule.exports = {\n subresource,\n forbiddenMethods,\n requestBodyHeader,\n referrerPolicy,\n requestRedirect,\n requestMode,\n requestCredentials,\n requestCache,\n redirectStatus,\n corsSafeListedMethods,\n nullBodyStatus,\n safeMethods,\n badPorts,\n requestDuplex,\n subresourceSet,\n badPortsSet,\n redirectStatusSet,\n corsSafeListedMethodsSet,\n safeMethodsSet,\n forbiddenMethodsSet,\n referrerPolicyTokens: referrerPolicyTokensSet\n}\n", "'use strict'\n\n// In case of breaking changes, increase the version\n// number to avoid conflicts.\nconst globalOrigin = Symbol.for('undici.globalOrigin.1')\n\nfunction getGlobalOrigin () {\n return globalThis[globalOrigin]\n}\n\nfunction setGlobalOrigin (newOrigin) {\n if (newOrigin === undefined) {\n Object.defineProperty(globalThis, globalOrigin, {\n value: undefined,\n writable: true,\n enumerable: false,\n configurable: false\n })\n\n return\n }\n\n const parsedURL = new URL(newOrigin)\n\n if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {\n throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)\n }\n\n Object.defineProperty(globalThis, globalOrigin, {\n value: parsedURL,\n writable: true,\n enumerable: false,\n configurable: false\n })\n}\n\nmodule.exports = {\n getGlobalOrigin,\n setGlobalOrigin\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\nconst encoder = new TextEncoder()\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-token-code-point\n */\nconst HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\\-.^_|~A-Za-z0-9]+$/\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/ // eslint-disable-line\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point\n */\nconst HTTP_QUOTED_STRING_TOKENS = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/ // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n // 1. Assert: dataURL\u2019s scheme is \"data\".\n assert(dataURL.protocol === 'data:')\n\n // 2. Let input be the result of running the URL\n // serializer on dataURL with exclude fragment\n // set to true.\n let input = URLSerializer(dataURL, true)\n\n // 3. Remove the leading \"data:\" string from input.\n input = input.slice(5)\n\n // 4. Let position point at the start of input.\n const position = { position: 0 }\n\n // 5. Let mimeType be the result of collecting a\n // sequence of code points that are not equal\n // to U+002C (,), given position.\n let mimeType = collectASequenceOfCodePointsFast(\n ',',\n input,\n position\n )\n\n // 6. Strip leading and trailing ASCII whitespace\n // from mimeType.\n // Undici implementation note: we need to store the\n // length because if the mimetype has spaces removed,\n // the wrong amount will be sliced from the input in\n // step #9\n const mimeTypeLength = mimeType.length\n mimeType = removeASCIIWhitespace(mimeType, true, true)\n\n // 7. If position is past the end of input, then\n // return failure\n if (position.position >= input.length) {\n return 'failure'\n }\n\n // 8. Advance position by 1.\n position.position++\n\n // 9. Let encodedBody be the remainder of input.\n const encodedBody = input.slice(mimeTypeLength + 1)\n\n // 10. Let body be the percent-decoding of encodedBody.\n let body = stringPercentDecode(encodedBody)\n\n // 11. If mimeType ends with U+003B (;), followed by\n // zero or more U+0020 SPACE, followed by an ASCII\n // case-insensitive match for \"base64\", then:\n if (/;(\\u0020){0,}base64$/i.test(mimeType)) {\n // 1. Let stringBody be the isomorphic decode of body.\n const stringBody = isomorphicDecode(body)\n\n // 2. Set body to the forgiving-base64 decode of\n // stringBody.\n body = forgivingBase64(stringBody)\n\n // 3. If body is failure, then return failure.\n if (body === 'failure') {\n return 'failure'\n }\n\n // 4. Remove the last 6 code points from mimeType.\n mimeType = mimeType.slice(0, -6)\n\n // 5. Remove trailing U+0020 SPACE code points from mimeType,\n // if any.\n mimeType = mimeType.replace(/(\\u0020)+$/, '')\n\n // 6. Remove the last U+003B (;) code point from mimeType.\n mimeType = mimeType.slice(0, -1)\n }\n\n // 12. If mimeType starts with U+003B (;), then prepend\n // \"text/plain\" to mimeType.\n if (mimeType.startsWith(';')) {\n mimeType = 'text/plain' + mimeType\n }\n\n // 13. Let mimeTypeRecord be the result of parsing\n // mimeType.\n let mimeTypeRecord = parseMIMEType(mimeType)\n\n // 14. If mimeTypeRecord is failure, then set\n // mimeTypeRecord to text/plain;charset=US-ASCII.\n if (mimeTypeRecord === 'failure') {\n mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')\n }\n\n // 15. Return a new data: URL struct whose MIME\n // type is mimeTypeRecord and body is body.\n // https://fetch.spec.whatwg.org/#data-url-struct\n return { mimeType: mimeTypeRecord, body }\n}\n\n// https://url.spec.whatwg.org/#concept-url-serializer\n/**\n * @param {URL} url\n * @param {boolean} excludeFragment\n */\nfunction URLSerializer (url, excludeFragment = false) {\n if (!excludeFragment) {\n return url.href\n }\n\n const href = url.href\n const hashLength = url.hash.length\n\n const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength)\n\n if (!hashLength && href.endsWith('#')) {\n return serialized.slice(0, -1)\n }\n\n return serialized\n}\n\n// https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n // 1. Let result be the empty string.\n let result = ''\n\n // 2. While position doesn\u2019t point past the end of input and the\n // code point at position within input meets the condition condition:\n while (position.position < input.length && condition(input[position.position])) {\n // 1. Append that code point to the end of result.\n result += input[position.position]\n\n // 2. Advance position by 1.\n position.position++\n }\n\n // 3. Return result.\n return result\n}\n\n/**\n * A faster collectASequenceOfCodePoints that only works when comparing a single character.\n * @param {string} char\n * @param {string} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfCodePointsFast (char, input, position) {\n const idx = input.indexOf(char, position.position)\n const start = position.position\n\n if (idx === -1) {\n position.position = input.length\n return input.slice(start)\n }\n\n position.position = idx\n return input.slice(start, position.position)\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\n/** @param {string} input */\nfunction stringPercentDecode (input) {\n // 1. Let bytes be the UTF-8 encoding of input.\n const bytes = encoder.encode(input)\n\n // 2. Return the percent-decoding of bytes.\n return percentDecode(bytes)\n}\n\n/**\n * @param {number} byte\n */\nfunction isHexCharByte (byte) {\n // 0-9 A-F a-f\n return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66)\n}\n\n/**\n * @param {number} byte\n */\nfunction hexByteToNumber (byte) {\n return (\n // 0-9\n byte >= 0x30 && byte <= 0x39\n ? (byte - 48)\n // Convert to uppercase\n // ((byte & 0xDF) - 65) + 10\n : ((byte & 0xDF) - 55)\n )\n}\n\n// https://url.spec.whatwg.org/#percent-decode\n/** @param {Uint8Array} input */\nfunction percentDecode (input) {\n const length = input.length\n // 1. Let output be an empty byte sequence.\n /** @type {Uint8Array} */\n const output = new Uint8Array(length)\n let j = 0\n // 2. For each byte byte in input:\n for (let i = 0; i < length; ++i) {\n const byte = input[i]\n\n // 1. If byte is not 0x25 (%), then append byte to output.\n if (byte !== 0x25) {\n output[j++] = byte\n\n // 2. Otherwise, if byte is 0x25 (%) and the next two bytes\n // after byte in input are not in the ranges\n // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),\n // and 0x61 (a) to 0x66 (f), all inclusive, append byte\n // to output.\n } else if (\n byte === 0x25 &&\n !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))\n ) {\n output[j++] = 0x25\n\n // 3. Otherwise:\n } else {\n // 1. Let bytePoint be the two bytes after byte in input,\n // decoded, and then interpreted as hexadecimal number.\n // 2. Append a byte whose value is bytePoint to output.\n output[j++] = (hexByteToNumber(input[i + 1]) << 4) | hexByteToNumber(input[i + 2])\n\n // 3. Skip the next two bytes in input.\n i += 2\n }\n }\n\n // 3. Return output.\n return length === j ? output : output.subarray(0, j)\n}\n\n// https://mimesniff.spec.whatwg.org/#parse-a-mime-type\n/** @param {string} input */\nfunction parseMIMEType (input) {\n // 1. Remove any leading and trailing HTTP whitespace\n // from input.\n input = removeHTTPWhitespace(input, true, true)\n\n // 2. Let position be a position variable for input,\n // initially pointing at the start of input.\n const position = { position: 0 }\n\n // 3. Let type be the result of collecting a sequence\n // of code points that are not U+002F (/) from\n // input, given position.\n const type = collectASequenceOfCodePointsFast(\n '/',\n input,\n position\n )\n\n // 4. If type is the empty string or does not solely\n // contain HTTP token code points, then return failure.\n // https://mimesniff.spec.whatwg.org/#http-token-code-point\n if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {\n return 'failure'\n }\n\n // 5. If position is past the end of input, then return\n // failure\n if (position.position >= input.length) {\n return 'failure'\n }\n\n // 6. Advance position by 1. (This skips past U+002F (/).)\n position.position++\n\n // 7. Let subtype be the result of collecting a sequence of\n // code points that are not U+003B (;) from input, given\n // position.\n let subtype = collectASequenceOfCodePointsFast(\n ';',\n input,\n position\n )\n\n // 8. Remove any trailing HTTP whitespace from subtype.\n subtype = removeHTTPWhitespace(subtype, false, true)\n\n // 9. If subtype is the empty string or does not solely\n // contain HTTP token code points, then return failure.\n if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {\n return 'failure'\n }\n\n const typeLowercase = type.toLowerCase()\n const subtypeLowercase = subtype.toLowerCase()\n\n // 10. Let mimeType be a new MIME type record whose type\n // is type, in ASCII lowercase, and subtype is subtype,\n // in ASCII lowercase.\n // https://mimesniff.spec.whatwg.org/#mime-type\n const mimeType = {\n type: typeLowercase,\n subtype: subtypeLowercase,\n /** @type {Map<string, string>} */\n parameters: new Map(),\n // https://mimesniff.spec.whatwg.org/#mime-type-essence\n essence: `${typeLowercase}/${subtypeLowercase}`\n }\n\n // 11. While position is not past the end of input:\n while (position.position < input.length) {\n // 1. Advance position by 1. (This skips past U+003B (;).)\n position.position++\n\n // 2. Collect a sequence of code points that are HTTP\n // whitespace from input given position.\n collectASequenceOfCodePoints(\n // https://fetch.spec.whatwg.org/#http-whitespace\n char => HTTP_WHITESPACE_REGEX.test(char),\n input,\n position\n )\n\n // 3. Let parameterName be the result of collecting a\n // sequence of code points that are not U+003B (;)\n // or U+003D (=) from input, given position.\n let parameterName = collectASequenceOfCodePoints(\n (char) => char !== ';' && char !== '=',\n input,\n position\n )\n\n // 4. Set parameterName to parameterName, in ASCII\n // lowercase.\n parameterName = parameterName.toLowerCase()\n\n // 5. If position is not past the end of input, then:\n if (position.position < input.length) {\n // 1. If the code point at position within input is\n // U+003B (;), then continue.\n if (input[position.position] === ';') {\n continue\n }\n\n // 2. Advance position by 1. (This skips past U+003D (=).)\n position.position++\n }\n\n // 6. If position is past the end of input, then break.\n if (position.position >= input.length) {\n break\n }\n\n // 7. Let parameterValue be null.\n let parameterValue = null\n\n // 8. If the code point at position within input is\n // U+0022 (\"), then:\n if (input[position.position] === '\"') {\n // 1. Set parameterValue to the result of collecting\n // an HTTP quoted string from input, given position\n // and the extract-value flag.\n parameterValue = collectAnHTTPQuotedString(input, position, true)\n\n // 2. Collect a sequence of code points that are not\n // U+003B (;) from input, given position.\n collectASequenceOfCodePointsFast(\n ';',\n input,\n position\n )\n\n // 9. Otherwise:\n } else {\n // 1. Set parameterValue to the result of collecting\n // a sequence of code points that are not U+003B (;)\n // from input, given position.\n parameterValue = collectASequenceOfCodePointsFast(\n ';',\n input,\n position\n )\n\n // 2. Remove any trailing HTTP whitespace from parameterValue.\n parameterValue = removeHTTPWhitespace(parameterValue, false, true)\n\n // 3. If parameterValue is the empty string, then continue.\n if (parameterValue.length === 0) {\n continue\n }\n }\n\n // 10. If all of the following are true\n // - parameterName is not the empty string\n // - parameterName solely contains HTTP token code points\n // - parameterValue solely contains HTTP quoted-string token code points\n // - mimeType\u2019s parameters[parameterName] does not exist\n // then set mimeType\u2019s parameters[parameterName] to parameterValue.\n if (\n parameterName.length !== 0 &&\n HTTP_TOKEN_CODEPOINTS.test(parameterName) &&\n (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&\n !mimeType.parameters.has(parameterName)\n ) {\n mimeType.parameters.set(parameterName, parameterValue)\n }\n }\n\n // 12. Return mimeType.\n return mimeType\n}\n\n// https://infra.spec.whatwg.org/#forgiving-base64-decode\n/** @param {string} data */\nfunction forgivingBase64 (data) {\n // 1. Remove all ASCII whitespace from data.\n data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, '')\n\n let dataLength = data.length\n // 2. If data\u2019s code point length divides by 4 leaving\n // no remainder, then:\n if (dataLength % 4 === 0) {\n // 1. If data ends with one or two U+003D (=) code points,\n // then remove them from data.\n if (data.charCodeAt(dataLength - 1) === 0x003D) {\n --dataLength\n if (data.charCodeAt(dataLength - 1) === 0x003D) {\n --dataLength\n }\n }\n }\n\n // 3. If data\u2019s code point length divides by 4 leaving\n // a remainder of 1, then return failure.\n if (dataLength % 4 === 1) {\n return 'failure'\n }\n\n // 4. If data contains a code point that is not one of\n // U+002B (+)\n // U+002F (/)\n // ASCII alphanumeric\n // then return failure.\n if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {\n return 'failure'\n }\n\n const buffer = Buffer.from(data, 'base64')\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\n// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string\n// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string\n/**\n * @param {string} input\n * @param {{ position: number }} position\n * @param {boolean} [extractValue=false]\n */\nfunction collectAnHTTPQuotedString (input, position, extractValue = false) {\n // 1. Let positionStart be position.\n const positionStart = position.position\n\n // 2. Let value be the empty string.\n let value = ''\n\n // 3. Assert: the code point at position within input\n // is U+0022 (\").\n assert(input[position.position] === '\"')\n\n // 4. Advance position by 1.\n position.position++\n\n // 5. While true:\n while (true) {\n // 1. Append the result of collecting a sequence of code points\n // that are not U+0022 (\") or U+005C (\\) from input, given\n // position, to value.\n value += collectASequenceOfCodePoints(\n (char) => char !== '\"' && char !== '\\\\',\n input,\n position\n )\n\n // 2. If position is past the end of input, then break.\n if (position.position >= input.length) {\n break\n }\n\n // 3. Let quoteOrBackslash be the code point at position within\n // input.\n const quoteOrBackslash = input[position.position]\n\n // 4. Advance position by 1.\n position.position++\n\n // 5. If quoteOrBackslash is U+005C (\\), then:\n if (quoteOrBackslash === '\\\\') {\n // 1. If position is past the end of input, then append\n // U+005C (\\) to value and break.\n if (position.position >= input.length) {\n value += '\\\\'\n break\n }\n\n // 2. Append the code point at position within input to value.\n value += input[position.position]\n\n // 3. Advance position by 1.\n position.position++\n\n // 6. Otherwise:\n } else {\n // 1. Assert: quoteOrBackslash is U+0022 (\").\n assert(quoteOrBackslash === '\"')\n\n // 2. Break.\n break\n }\n }\n\n // 6. If the extract-value flag is set, then return value.\n if (extractValue) {\n return value\n }\n\n // 7. Return the code points from positionStart to position,\n // inclusive, within input.\n return input.slice(positionStart, position.position)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type\n */\nfunction serializeAMimeType (mimeType) {\n assert(mimeType !== 'failure')\n const { parameters, essence } = mimeType\n\n // 1. Let serialization be the concatenation of mimeType\u2019s\n // type, U+002F (/), and mimeType\u2019s subtype.\n let serialization = essence\n\n // 2. For each name \u2192 value of mimeType\u2019s parameters:\n for (let [name, value] of parameters.entries()) {\n // 1. Append U+003B (;) to serialization.\n serialization += ';'\n\n // 2. Append name to serialization.\n serialization += name\n\n // 3. Append U+003D (=) to serialization.\n serialization += '='\n\n // 4. If value does not solely contain HTTP token code\n // points or value is the empty string, then:\n if (!HTTP_TOKEN_CODEPOINTS.test(value)) {\n // 1. Precede each occurrence of U+0022 (\") or\n // U+005C (\\) in value with U+005C (\\).\n value = value.replace(/(\\\\|\")/g, '\\\\$1')\n\n // 2. Prepend U+0022 (\") to value.\n value = '\"' + value\n\n // 3. Append U+0022 (\") to value.\n value += '\"'\n }\n\n // 5. Append value to serialization.\n serialization += value\n }\n\n // 3. Return serialization.\n return serialization\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {number} char\n */\nfunction isHTTPWhiteSpace (char) {\n // \"\\r\\n\\t \"\n return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x020\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeHTTPWhitespace (str, leading = true, trailing = true) {\n return removeChars(str, leading, trailing, isHTTPWhiteSpace)\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n * @param {number} char\n */\nfunction isASCIIWhitespace (char) {\n // \"\\r\\n\\t\\f \"\n return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x00c || char === 0x020\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeASCIIWhitespace (str, leading = true, trailing = true) {\n return removeChars(str, leading, trailing, isASCIIWhitespace)\n}\n\n/**\n * @param {string} str\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns\n */\nfunction removeChars (str, leading, trailing, predicate) {\n let lead = 0\n let trail = str.length - 1\n\n if (leading) {\n while (lead < str.length && predicate(str.charCodeAt(lead))) lead++\n }\n\n if (trailing) {\n while (trail > 0 && predicate(str.charCodeAt(trail))) trail--\n }\n\n return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1)\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n * @param {Uint8Array} input\n * @returns {string}\n */\nfunction isomorphicDecode (input) {\n // 1. To isomorphic decode a byte sequence input, return a string whose code point\n // length is equal to input\u2019s length and whose code points have the same values\n // as the values of input\u2019s bytes, in the same order.\n const length = input.length\n if ((2 << 15) - 1 > length) {\n return String.fromCharCode.apply(null, input)\n }\n let result = ''; let i = 0\n let addition = (2 << 15) - 1\n while (i < length) {\n if (i + addition > length) {\n addition = length - i\n }\n result += String.fromCharCode.apply(null, input.subarray(i, i += addition))\n }\n return result\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#minimize-a-supported-mime-type\n * @param {Exclude<ReturnType<typeof parseMIMEType>, 'failure'>} mimeType\n */\nfunction minimizeSupportedMimeType (mimeType) {\n switch (mimeType.essence) {\n case 'application/ecmascript':\n case 'application/javascript':\n case 'application/x-ecmascript':\n case 'application/x-javascript':\n case 'text/ecmascript':\n case 'text/javascript':\n case 'text/javascript1.0':\n case 'text/javascript1.1':\n case 'text/javascript1.2':\n case 'text/javascript1.3':\n case 'text/javascript1.4':\n case 'text/javascript1.5':\n case 'text/jscript':\n case 'text/livescript':\n case 'text/x-ecmascript':\n case 'text/x-javascript':\n // 1. If mimeType is a JavaScript MIME type, then return \"text/javascript\".\n return 'text/javascript'\n case 'application/json':\n case 'text/json':\n // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n return 'application/json'\n case 'image/svg+xml':\n // 3. If mimeType\u2019s essence is \"image/svg+xml\", then return \"image/svg+xml\".\n return 'image/svg+xml'\n case 'text/xml':\n case 'application/xml':\n // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n return 'application/xml'\n }\n\n // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n if (mimeType.subtype.endsWith('+json')) {\n return 'application/json'\n }\n\n // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n if (mimeType.subtype.endsWith('+xml')) {\n return 'application/xml'\n }\n\n // 5. If mimeType is supported by the user agent, then return mimeType\u2019s essence.\n // Technically, node doesn't support any mimetypes.\n\n // 6. Return the empty string.\n return ''\n}\n\nmodule.exports = {\n dataURLProcessor,\n URLSerializer,\n collectASequenceOfCodePoints,\n collectASequenceOfCodePointsFast,\n stringPercentDecode,\n parseMIMEType,\n collectAnHTTPQuotedString,\n serializeAMimeType,\n removeChars,\n removeHTTPWhitespace,\n minimizeSupportedMimeType,\n HTTP_TOKEN_CODEPOINTS,\n isomorphicDecode\n}\n", "'use strict'\n\nconst { types, inspect } = require('node:util')\nconst { markAsUncloneable } = require('node:worker_threads')\nconst { toUSVString } = require('../../core/util')\n\nconst UNDEFINED = 1\nconst BOOLEAN = 2\nconst STRING = 3\nconst SYMBOL = 4\nconst NUMBER = 5\nconst BIGINT = 6\nconst NULL = 7\nconst OBJECT = 8 // function and object\n\nconst FunctionPrototypeSymbolHasInstance = Function.call.bind(Function.prototype[Symbol.hasInstance])\n\n/** @type {import('../../../types/webidl').Webidl} */\nconst webidl = {\n converters: {},\n util: {},\n errors: {},\n is: {}\n}\n\nwebidl.errors.exception = function (message) {\n return new TypeError(`${message.header}: ${message.message}`)\n}\n\nwebidl.errors.conversionFailed = function (context) {\n const plural = context.types.length === 1 ? '' : ' one of'\n const message =\n `${context.argument} could not be converted to` +\n `${plural}: ${context.types.join(', ')}.`\n\n return webidl.errors.exception({\n header: context.prefix,\n message\n })\n}\n\nwebidl.errors.invalidArgument = function (context) {\n return webidl.errors.exception({\n header: context.prefix,\n message: `\"${context.value}\" is an invalid ${context.type}.`\n })\n}\n\n// https://webidl.spec.whatwg.org/#implements\nwebidl.brandCheck = function (V, I) {\n if (!FunctionPrototypeSymbolHasInstance(I, V)) {\n const err = new TypeError('Illegal invocation')\n err.code = 'ERR_INVALID_THIS' // node compat.\n throw err\n }\n}\n\nwebidl.brandCheckMultiple = function (List) {\n const prototypes = List.map((c) => webidl.util.MakeTypeAssertion(c))\n\n return (V) => {\n if (prototypes.every(typeCheck => !typeCheck(V))) {\n const err = new TypeError('Illegal invocation')\n err.code = 'ERR_INVALID_THIS' // node compat.\n throw err\n }\n }\n}\n\nwebidl.argumentLengthCheck = function ({ length }, min, ctx) {\n if (length < min) {\n throw webidl.errors.exception({\n message: `${min} argument${min !== 1 ? 's' : ''} required, ` +\n `but${length ? ' only' : ''} ${length} found.`,\n header: ctx\n })\n }\n}\n\nwebidl.illegalConstructor = function () {\n throw webidl.errors.exception({\n header: 'TypeError',\n message: 'Illegal constructor'\n })\n}\n\nwebidl.util.MakeTypeAssertion = function (I) {\n return (O) => FunctionPrototypeSymbolHasInstance(I, O)\n}\n\n// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values\nwebidl.util.Type = function (V) {\n switch (typeof V) {\n case 'undefined': return UNDEFINED\n case 'boolean': return BOOLEAN\n case 'string': return STRING\n case 'symbol': return SYMBOL\n case 'number': return NUMBER\n case 'bigint': return BIGINT\n case 'function':\n case 'object': {\n if (V === null) {\n return NULL\n }\n\n return OBJECT\n }\n }\n}\n\nwebidl.util.Types = {\n UNDEFINED,\n BOOLEAN,\n STRING,\n SYMBOL,\n NUMBER,\n BIGINT,\n NULL,\n OBJECT\n}\n\nwebidl.util.TypeValueToString = function (o) {\n switch (webidl.util.Type(o)) {\n case UNDEFINED: return 'Undefined'\n case BOOLEAN: return 'Boolean'\n case STRING: return 'String'\n case SYMBOL: return 'Symbol'\n case NUMBER: return 'Number'\n case BIGINT: return 'BigInt'\n case NULL: return 'Null'\n case OBJECT: return 'Object'\n }\n}\n\nwebidl.util.markAsUncloneable = markAsUncloneable || (() => {})\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint\nwebidl.util.ConvertToInt = function (V, bitLength, signedness, opts) {\n let upperBound\n let lowerBound\n\n // 1. If bitLength is 64, then:\n if (bitLength === 64) {\n // 1. Let upperBound be 2^53 \u2212 1.\n upperBound = Math.pow(2, 53) - 1\n\n // 2. If signedness is \"unsigned\", then let lowerBound be 0.\n if (signedness === 'unsigned') {\n lowerBound = 0\n } else {\n // 3. Otherwise let lowerBound be \u22122^53 + 1.\n lowerBound = Math.pow(-2, 53) + 1\n }\n } else if (signedness === 'unsigned') {\n // 2. Otherwise, if signedness is \"unsigned\", then:\n\n // 1. Let lowerBound be 0.\n lowerBound = 0\n\n // 2. Let upperBound be 2^bitLength \u2212 1.\n upperBound = Math.pow(2, bitLength) - 1\n } else {\n // 3. Otherwise:\n\n // 1. Let lowerBound be -2^bitLength \u2212 1.\n lowerBound = Math.pow(-2, bitLength) - 1\n\n // 2. Let upperBound be 2^bitLength \u2212 1 \u2212 1.\n upperBound = Math.pow(2, bitLength - 1) - 1\n }\n\n // 4. Let x be ? ToNumber(V).\n let x = Number(V)\n\n // 5. If x is \u22120, then set x to +0.\n if (x === 0) {\n x = 0\n }\n\n // 6. If the conversion is to an IDL type associated\n // with the [EnforceRange] extended attribute, then:\n if (opts?.enforceRange === true) {\n // 1. If x is NaN, +\u221E, or \u2212\u221E, then throw a TypeError.\n if (\n Number.isNaN(x) ||\n x === Number.POSITIVE_INFINITY ||\n x === Number.NEGATIVE_INFINITY\n ) {\n throw webidl.errors.exception({\n header: 'Integer conversion',\n message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`\n })\n }\n\n // 2. Set x to IntegerPart(x).\n x = webidl.util.IntegerPart(x)\n\n // 3. If x < lowerBound or x > upperBound, then\n // throw a TypeError.\n if (x < lowerBound || x > upperBound) {\n throw webidl.errors.exception({\n header: 'Integer conversion',\n message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`\n })\n }\n\n // 4. Return x.\n return x\n }\n\n // 7. If x is not NaN and the conversion is to an IDL\n // type associated with the [Clamp] extended\n // attribute, then:\n if (!Number.isNaN(x) && opts?.clamp === true) {\n // 1. Set x to min(max(x, lowerBound), upperBound).\n x = Math.min(Math.max(x, lowerBound), upperBound)\n\n // 2. Round x to the nearest integer, choosing the\n // even integer if it lies halfway between two,\n // and choosing +0 rather than \u22120.\n if (Math.floor(x) % 2 === 0) {\n x = Math.floor(x)\n } else {\n x = Math.ceil(x)\n }\n\n // 3. Return x.\n return x\n }\n\n // 8. If x is NaN, +0, +\u221E, or \u2212\u221E, then return +0.\n if (\n Number.isNaN(x) ||\n (x === 0 && Object.is(0, x)) ||\n x === Number.POSITIVE_INFINITY ||\n x === Number.NEGATIVE_INFINITY\n ) {\n return 0\n }\n\n // 9. Set x to IntegerPart(x).\n x = webidl.util.IntegerPart(x)\n\n // 10. Set x to x modulo 2^bitLength.\n x = x % Math.pow(2, bitLength)\n\n // 11. If signedness is \"signed\" and x \u2265 2^bitLength \u2212 1,\n // then return x \u2212 2^bitLength.\n if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) {\n return x - Math.pow(2, bitLength)\n }\n\n // 12. Otherwise, return x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart\nwebidl.util.IntegerPart = function (n) {\n // 1. Let r be floor(abs(n)).\n const r = Math.floor(Math.abs(n))\n\n // 2. If n < 0, then return -1 \u00D7 r.\n if (n < 0) {\n return -1 * r\n }\n\n // 3. Otherwise, return r.\n return r\n}\n\nwebidl.util.Stringify = function (V) {\n const type = webidl.util.Type(V)\n\n switch (type) {\n case SYMBOL:\n return `Symbol(${V.description})`\n case OBJECT:\n return inspect(V)\n case STRING:\n return `\"${V}\"`\n default:\n return `${V}`\n }\n}\n\n// https://webidl.spec.whatwg.org/#es-sequence\nwebidl.sequenceConverter = function (converter) {\n return (V, prefix, argument, Iterable) => {\n // 1. If Type(V) is not Object, throw a TypeError.\n if (webidl.util.Type(V) !== OBJECT) {\n throw webidl.errors.exception({\n header: prefix,\n message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`\n })\n }\n\n // 2. Let method be ? GetMethod(V, @@iterator).\n /** @type {Generator} */\n const method = typeof Iterable === 'function' ? Iterable() : V?.[Symbol.iterator]?.()\n const seq = []\n let index = 0\n\n // 3. If method is undefined, throw a TypeError.\n if (\n method === undefined ||\n typeof method.next !== 'function'\n ) {\n throw webidl.errors.exception({\n header: prefix,\n message: `${argument} is not iterable.`\n })\n }\n\n // https://webidl.spec.whatwg.org/#create-sequence-from-iterable\n while (true) {\n const { done, value } = method.next()\n\n if (done) {\n break\n }\n\n seq.push(converter(value, prefix, `${argument}[${index++}]`))\n }\n\n return seq\n }\n}\n\n// https://webidl.spec.whatwg.org/#es-to-record\nwebidl.recordConverter = function (keyConverter, valueConverter) {\n return (O, prefix, argument) => {\n // 1. If Type(O) is not Object, throw a TypeError.\n if (webidl.util.Type(O) !== OBJECT) {\n throw webidl.errors.exception({\n header: prefix,\n message: `${argument} (\"${webidl.util.TypeValueToString(O)}\") is not an Object.`\n })\n }\n\n // 2. Let result be a new empty instance of record<K, V>.\n const result = {}\n\n if (!types.isProxy(O)) {\n // 1. Let desc be ? O.[[GetOwnProperty]](key).\n const keys = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]\n\n for (const key of keys) {\n const keyName = webidl.util.Stringify(key)\n\n // 1. Let typedKey be key converted to an IDL value of type K.\n const typedKey = keyConverter(key, prefix, `Key ${keyName} in ${argument}`)\n\n // 2. Let value be ? Get(O, key).\n // 3. Let typedValue be value converted to an IDL value of type V.\n const typedValue = valueConverter(O[key], prefix, `${argument}[${keyName}]`)\n\n // 4. Set result[typedKey] to typedValue.\n result[typedKey] = typedValue\n }\n\n // 5. Return result.\n return result\n }\n\n // 3. Let keys be ? O.[[OwnPropertyKeys]]().\n const keys = Reflect.ownKeys(O)\n\n // 4. For each key of keys.\n for (const key of keys) {\n // 1. Let desc be ? O.[[GetOwnProperty]](key).\n const desc = Reflect.getOwnPropertyDescriptor(O, key)\n\n // 2. If desc is not undefined and desc.[[Enumerable]] is true:\n if (desc?.enumerable) {\n // 1. Let typedKey be key converted to an IDL value of type K.\n const typedKey = keyConverter(key, prefix, argument)\n\n // 2. Let value be ? Get(O, key).\n // 3. Let typedValue be value converted to an IDL value of type V.\n const typedValue = valueConverter(O[key], prefix, argument)\n\n // 4. Set result[typedKey] to typedValue.\n result[typedKey] = typedValue\n }\n }\n\n // 5. Return result.\n return result\n }\n}\n\nwebidl.interfaceConverter = function (TypeCheck, name) {\n return (V, prefix, argument) => {\n if (!TypeCheck(V)) {\n throw webidl.errors.exception({\n header: prefix,\n message: `Expected ${argument} (\"${webidl.util.Stringify(V)}\") to be an instance of ${name}.`\n })\n }\n\n return V\n }\n}\n\nwebidl.dictionaryConverter = function (converters) {\n return (dictionary, prefix, argument) => {\n const dict = {}\n\n if (dictionary != null && webidl.util.Type(dictionary) !== OBJECT) {\n throw webidl.errors.exception({\n header: prefix,\n message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`\n })\n }\n\n for (const options of converters) {\n const { key, defaultValue, required, converter } = options\n\n if (required === true) {\n if (dictionary == null || !Object.hasOwn(dictionary, key)) {\n throw webidl.errors.exception({\n header: prefix,\n message: `Missing required key \"${key}\".`\n })\n }\n }\n\n let value = dictionary?.[key]\n const hasDefault = defaultValue !== undefined\n\n // Only use defaultValue if value is undefined and\n // a defaultValue options was provided.\n if (hasDefault && value === undefined) {\n value = defaultValue()\n }\n\n // A key can be optional and have no default value.\n // When this happens, do not perform a conversion,\n // and do not assign the key a value.\n if (required || hasDefault || value !== undefined) {\n value = converter(value, prefix, `${argument}.${key}`)\n\n if (\n options.allowedValues &&\n !options.allowedValues.includes(value)\n ) {\n throw webidl.errors.exception({\n header: prefix,\n message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`\n })\n }\n\n dict[key] = value\n }\n }\n\n return dict\n }\n}\n\nwebidl.nullableConverter = function (converter) {\n return (V, prefix, argument) => {\n if (V === null) {\n return V\n }\n\n return converter(V, prefix, argument)\n }\n}\n\nwebidl.is.ReadableStream = webidl.util.MakeTypeAssertion(ReadableStream)\nwebidl.is.Blob = webidl.util.MakeTypeAssertion(Blob)\nwebidl.is.URLSearchParams = webidl.util.MakeTypeAssertion(URLSearchParams)\nwebidl.is.File = webidl.util.MakeTypeAssertion(globalThis.File ?? require('node:buffer').File)\nwebidl.is.URL = webidl.util.MakeTypeAssertion(URL)\nwebidl.is.AbortSignal = webidl.util.MakeTypeAssertion(AbortSignal)\nwebidl.is.MessagePort = webidl.util.MakeTypeAssertion(MessagePort)\n\n// https://webidl.spec.whatwg.org/#es-DOMString\nwebidl.converters.DOMString = function (V, prefix, argument, opts) {\n // 1. If V is null and the conversion is to an IDL type\n // associated with the [LegacyNullToEmptyString]\n // extended attribute, then return the DOMString value\n // that represents the empty string.\n if (V === null && opts?.legacyNullToEmptyString) {\n return ''\n }\n\n // 2. Let x be ? ToString(V).\n if (typeof V === 'symbol') {\n throw webidl.errors.exception({\n header: prefix,\n message: `${argument} is a symbol, which cannot be converted to a DOMString.`\n })\n }\n\n // 3. Return the IDL DOMString value that represents the\n // same sequence of code units as the one the\n // ECMAScript String value x represents.\n return String(V)\n}\n\n// https://webidl.spec.whatwg.org/#es-ByteString\nwebidl.converters.ByteString = function (V, prefix, argument) {\n // 1. Let x be ? ToString(V).\n if (typeof V === 'symbol') {\n throw webidl.errors.exception({\n header: prefix,\n message: `${argument} is a symbol, which cannot be converted to a ByteString.`\n })\n }\n\n const x = String(V)\n\n // 2. If the value of any element of x is greater than\n // 255, then throw a TypeError.\n for (let index = 0; index < x.length; index++) {\n if (x.charCodeAt(index) > 255) {\n throw new TypeError(\n 'Cannot convert argument to a ByteString because the character at ' +\n `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`\n )\n }\n }\n\n // 3. Return an IDL ByteString value whose length is the\n // length of x, and where the value of each element is\n // the value of the corresponding element of x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#es-USVString\n// TODO: rewrite this so we can control the errors thrown\nwebidl.converters.USVString = toUSVString\n\n// https://webidl.spec.whatwg.org/#es-boolean\nwebidl.converters.boolean = function (V) {\n // 1. Let x be the result of computing ToBoolean(V).\n const x = Boolean(V)\n\n // 2. Return the IDL boolean value that is the one that represents\n // the same truth value as the ECMAScript Boolean value x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#es-any\nwebidl.converters.any = function (V) {\n return V\n}\n\n// https://webidl.spec.whatwg.org/#es-long-long\nwebidl.converters['long long'] = function (V, prefix, argument) {\n // 1. Let x be ? ConvertToInt(V, 64, \"signed\").\n const x = webidl.util.ConvertToInt(V, 64, 'signed', undefined, prefix, argument)\n\n // 2. Return the IDL long long value that represents\n // the same numeric value as x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long-long\nwebidl.converters['unsigned long long'] = function (V, prefix, argument) {\n // 1. Let x be ? ConvertToInt(V, 64, \"unsigned\").\n const x = webidl.util.ConvertToInt(V, 64, 'unsigned', undefined, prefix, argument)\n\n // 2. Return the IDL unsigned long long value that\n // represents the same numeric value as x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long\nwebidl.converters['unsigned long'] = function (V, prefix, argument) {\n // 1. Let x be ? ConvertToInt(V, 32, \"unsigned\").\n const x = webidl.util.ConvertToInt(V, 32, 'unsigned', undefined, prefix, argument)\n\n // 2. Return the IDL unsigned long value that\n // represents the same numeric value as x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-short\nwebidl.converters['unsigned short'] = function (V, prefix, argument, opts) {\n // 1. Let x be ? ConvertToInt(V, 16, \"unsigned\").\n const x = webidl.util.ConvertToInt(V, 16, 'unsigned', opts, prefix, argument)\n\n // 2. Return the IDL unsigned short value that represents\n // the same numeric value as x.\n return x\n}\n\n// https://webidl.spec.whatwg.org/#idl-ArrayBuffer\nwebidl.converters.ArrayBuffer = function (V, prefix, argument, opts) {\n // 1. If Type(V) is not Object, or V does not have an\n // [[ArrayBufferData]] internal slot, then throw a\n // TypeError.\n // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances\n // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances\n if (\n webidl.util.Type(V) !== OBJECT ||\n !types.isAnyArrayBuffer(V)\n ) {\n throw webidl.errors.conversionFailed({\n prefix,\n argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n types: ['ArrayBuffer']\n })\n }\n\n // 2. If the conversion is not to an IDL type associated\n // with the [AllowShared] extended attribute, and\n // IsSharedArrayBuffer(V) is true, then throw a\n // TypeError.\n if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'SharedArrayBuffer is not allowed.'\n })\n }\n\n // 3. If the conversion is not to an IDL type associated\n // with the [AllowResizable] extended attribute, and\n // IsResizableArrayBuffer(V) is true, then throw a\n // TypeError.\n if (V.resizable || V.growable) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'Received a resizable ArrayBuffer.'\n })\n }\n\n // 4. Return the IDL ArrayBuffer value that is a\n // reference to the same object as V.\n return V\n}\n\nwebidl.converters.TypedArray = function (V, T, prefix, name, opts) {\n // 1. Let T be the IDL type V is being converted to.\n\n // 2. If Type(V) is not Object, or V does not have a\n // [[TypedArrayName]] internal slot with a value\n // equal to T\u2019s name, then throw a TypeError.\n if (\n webidl.util.Type(V) !== OBJECT ||\n !types.isTypedArray(V) ||\n V.constructor.name !== T.name\n ) {\n throw webidl.errors.conversionFailed({\n prefix,\n argument: `${name} (\"${webidl.util.Stringify(V)}\")`,\n types: [T.name]\n })\n }\n\n // 3. If the conversion is not to an IDL type associated\n // with the [AllowShared] extended attribute, and\n // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is\n // true, then throw a TypeError.\n if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'SharedArrayBuffer is not allowed.'\n })\n }\n\n // 4. If the conversion is not to an IDL type associated\n // with the [AllowResizable] extended attribute, and\n // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n // true, then throw a TypeError.\n if (V.buffer.resizable || V.buffer.growable) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'Received a resizable ArrayBuffer.'\n })\n }\n\n // 5. Return the IDL value of type T that is a reference\n // to the same object as V.\n return V\n}\n\nwebidl.converters.DataView = function (V, prefix, name, opts) {\n // 1. If Type(V) is not Object, or V does not have a\n // [[DataView]] internal slot, then throw a TypeError.\n if (webidl.util.Type(V) !== OBJECT || !types.isDataView(V)) {\n throw webidl.errors.exception({\n header: prefix,\n message: `${name} is not a DataView.`\n })\n }\n\n // 2. If the conversion is not to an IDL type associated\n // with the [AllowShared] extended attribute, and\n // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,\n // then throw a TypeError.\n if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'SharedArrayBuffer is not allowed.'\n })\n }\n\n // 3. If the conversion is not to an IDL type associated\n // with the [AllowResizable] extended attribute, and\n // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n // true, then throw a TypeError.\n if (V.buffer.resizable || V.buffer.growable) {\n throw webidl.errors.exception({\n header: 'ArrayBuffer',\n message: 'Received a resizable ArrayBuffer.'\n })\n }\n\n // 4. Return the IDL DataView value that is a reference\n // to the same object as V.\n return V\n}\n\nwebidl.converters['sequence<ByteString>'] = webidl.sequenceConverter(\n webidl.converters.ByteString\n)\n\nwebidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter(\n webidl.converters['sequence<ByteString>']\n)\n\nwebidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter(\n webidl.converters.ByteString,\n webidl.converters.ByteString\n)\n\nwebidl.converters.Blob = webidl.interfaceConverter(webidl.is.Blob, 'Blob')\n\nwebidl.converters.AbortSignal = webidl.interfaceConverter(\n webidl.is.AbortSignal,\n 'AbortSignal'\n)\n\nmodule.exports = {\n webidl\n}\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst zlib = require('node:zlib')\nconst { redirectStatusSet, referrerPolicyTokens, badPortsSet } = require('./constants')\nconst { getGlobalOrigin } = require('./global')\nconst { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require('./data-url')\nconst { performance } = require('node:perf_hooks')\nconst { ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require('../../core/util')\nconst assert = require('node:assert')\nconst { isUint8Array } = require('node:util/types')\nconst { webidl } = require('./webidl')\n\nlet supportedHashes = []\n\n// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable\n/** @type {import('crypto')} */\nlet crypto\ntry {\n crypto = require('node:crypto')\n const possibleRelevantHashes = ['sha256', 'sha384', 'sha512']\n supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash))\n/* c8 ignore next 3 */\n} catch {\n\n}\n\nfunction responseURL (response) {\n // https://fetch.spec.whatwg.org/#responses\n // A response has an associated URL. It is a pointer to the last URL\n // in response\u2019s URL list and null if response\u2019s URL list is empty.\n const urlList = response.urlList\n const length = urlList.length\n return length === 0 ? null : urlList[length - 1].toString()\n}\n\n// https://fetch.spec.whatwg.org/#concept-response-location-url\nfunction responseLocationURL (response, requestFragment) {\n // 1. If response\u2019s status is not a redirect status, then return null.\n if (!redirectStatusSet.has(response.status)) {\n return null\n }\n\n // 2. Let location be the result of extracting header list values given\n // `Location` and response\u2019s header list.\n let location = response.headersList.get('location', true)\n\n // 3. If location is a header value, then set location to the result of\n // parsing location with response\u2019s URL.\n if (location !== null && isValidHeaderValue(location)) {\n if (!isValidEncodedURL(location)) {\n // Some websites respond location header in UTF-8 form without encoding them as ASCII\n // and major browsers redirect them to correctly UTF-8 encoded addresses.\n // Here, we handle that behavior in the same way.\n location = normalizeBinaryStringToUtf8(location)\n }\n location = new URL(location, responseURL(response))\n }\n\n // 4. If location is a URL whose fragment is null, then set location\u2019s\n // fragment to requestFragment.\n if (location && !location.hash) {\n location.hash = requestFragment\n }\n\n // 5. Return location.\n return location\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc1738#section-2.2\n * @param {string} url\n * @returns {boolean}\n */\nfunction isValidEncodedURL (url) {\n for (let i = 0; i < url.length; ++i) {\n const code = url.charCodeAt(i)\n\n if (\n code > 0x7E || // Non-US-ASCII + DEL\n code < 0x20 // Control characters NUL - US\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * If string contains non-ASCII characters, assumes it's UTF-8 encoded and decodes it.\n * Since UTF-8 is a superset of ASCII, this will work for ASCII strings as well.\n * @param {string} value\n * @returns {string}\n */\nfunction normalizeBinaryStringToUtf8 (value) {\n return Buffer.from(value, 'binary').toString('utf8')\n}\n\n/** @returns {URL} */\nfunction requestCurrentURL (request) {\n return request.urlList[request.urlList.length - 1]\n}\n\nfunction requestBadPort (request) {\n // 1. Let url be request\u2019s current URL.\n const url = requestCurrentURL(request)\n\n // 2. If url\u2019s scheme is an HTTP(S) scheme and url\u2019s port is a bad port,\n // then return blocked.\n if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {\n return 'blocked'\n }\n\n // 3. Return allowed.\n return 'allowed'\n}\n\nfunction isErrorLike (object) {\n return object instanceof Error || (\n object?.constructor?.name === 'Error' ||\n object?.constructor?.name === 'DOMException'\n )\n}\n\n// Check whether |statusText| is a ByteString and\n// matches the Reason-Phrase token production.\n// RFC 2616: https://tools.ietf.org/html/rfc2616\n// RFC 7230: https://tools.ietf.org/html/rfc7230\n// \"reason-phrase = *( HTAB / SP / VCHAR / obs-text )\"\n// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116\nfunction isValidReasonPhrase (statusText) {\n for (let i = 0; i < statusText.length; ++i) {\n const c = statusText.charCodeAt(i)\n if (\n !(\n (\n c === 0x09 || // HTAB\n (c >= 0x20 && c <= 0x7e) || // SP / VCHAR\n (c >= 0x80 && c <= 0xff)\n ) // obs-text\n )\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-name\n * @param {string} potentialValue\n */\nconst isValidHeaderName = isValidHTTPToken\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value\n * @param {string} potentialValue\n */\nfunction isValidHeaderValue (potentialValue) {\n // - Has no leading or trailing HTTP tab or space bytes.\n // - Contains no 0x00 (NUL) or HTTP newline bytes.\n return (\n potentialValue[0] === '\\t' ||\n potentialValue[0] === ' ' ||\n potentialValue[potentialValue.length - 1] === '\\t' ||\n potentialValue[potentialValue.length - 1] === ' ' ||\n potentialValue.includes('\\n') ||\n potentialValue.includes('\\r') ||\n potentialValue.includes('\\0')\n ) === false\n}\n\n/**\n * Parse a referrer policy from a Referrer-Policy header\n * @see https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header\n */\nfunction parseReferrerPolicy (actualResponse) {\n // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response\u2019s header list.\n const policyHeader = (actualResponse.headersList.get('referrer-policy', true) ?? '').split(',')\n\n // 2. Let policy be the empty string.\n let policy = ''\n\n // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.\n\n // Note: As the referrer-policy can contain multiple policies\n // separated by comma, we need to loop through all of them\n // and pick the first valid one.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy\n if (policyHeader.length) {\n // The right-most policy takes precedence.\n // The left-most policy is the fallback.\n for (let i = policyHeader.length; i !== 0; i--) {\n const token = policyHeader[i - 1].trim()\n if (referrerPolicyTokens.has(token)) {\n policy = token\n break\n }\n }\n }\n\n // 4. Return policy.\n return policy\n}\n\n/**\n * Given a request request and a response actualResponse, this algorithm\n * updates request\u2019s referrer policy according to the Referrer-Policy\n * header (if any) in actualResponse.\n * @see https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect\n * @param {import('./request').Request} request\n * @param {import('./response').Response} actualResponse\n */\nfunction setRequestReferrerPolicyOnRedirect (request, actualResponse) {\n // 1. Let policy be the result of executing \u00A7 8.1 Parse a referrer policy\n // from a Referrer-Policy header on actualResponse.\n const policy = parseReferrerPolicy(actualResponse)\n\n // 2. If policy is not the empty string, then set request\u2019s referrer policy to policy.\n if (policy !== '') {\n request.referrerPolicy = policy\n }\n}\n\n// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check\nfunction crossOriginResourcePolicyCheck () {\n // TODO\n return 'allowed'\n}\n\n// https://fetch.spec.whatwg.org/#concept-cors-check\nfunction corsCheck () {\n // TODO\n return 'success'\n}\n\n// https://fetch.spec.whatwg.org/#concept-tao-check\nfunction TAOCheck () {\n // TODO\n return 'success'\n}\n\nfunction appendFetchMetadata (httpRequest) {\n // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header\n // TODO\n\n // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header\n\n // 1. Assert: r\u2019s url is a potentially trustworthy URL.\n // TODO\n\n // 2. Let header be a Structured Header whose value is a token.\n let header = null\n\n // 3. Set header\u2019s value to r\u2019s mode.\n header = httpRequest.mode\n\n // 4. Set a structured field value `Sec-Fetch-Mode`/header in r\u2019s header list.\n httpRequest.headersList.set('sec-fetch-mode', header, true)\n\n // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header\n // TODO\n\n // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header\n // TODO\n}\n\n// https://fetch.spec.whatwg.org/#append-a-request-origin-header\nfunction appendRequestOriginHeader (request) {\n // 1. Let serializedOrigin be the result of byte-serializing a request origin\n // with request.\n // TODO: implement \"byte-serializing a request origin\"\n let serializedOrigin = request.origin\n\n // - \"'client' is changed to an origin during fetching.\"\n // This doesn't happen in undici (in most cases) because undici, by default,\n // has no concept of origin.\n // - request.origin can also be set to request.client.origin (client being\n // an environment settings object), which is undefined without using\n // setGlobalOrigin.\n if (serializedOrigin === 'client' || serializedOrigin === undefined) {\n return\n }\n\n // 2. If request\u2019s response tainting is \"cors\" or request\u2019s mode is \"websocket\",\n // then append (`Origin`, serializedOrigin) to request\u2019s header list.\n // 3. Otherwise, if request\u2019s method is neither `GET` nor `HEAD`, then:\n if (request.responseTainting === 'cors' || request.mode === 'websocket') {\n request.headersList.append('origin', serializedOrigin, true)\n } else if (request.method !== 'GET' && request.method !== 'HEAD') {\n // 1. Switch on request\u2019s referrer policy:\n switch (request.referrerPolicy) {\n case 'no-referrer':\n // Set serializedOrigin to `null`.\n serializedOrigin = null\n break\n case 'no-referrer-when-downgrade':\n case 'strict-origin':\n case 'strict-origin-when-cross-origin':\n // If request\u2019s origin is a tuple origin, its scheme is \"https\", and\n // request\u2019s current URL\u2019s scheme is not \"https\", then set\n // serializedOrigin to `null`.\n if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {\n serializedOrigin = null\n }\n break\n case 'same-origin':\n // If request\u2019s origin is not same origin with request\u2019s current URL\u2019s\n // origin, then set serializedOrigin to `null`.\n if (!sameOrigin(request, requestCurrentURL(request))) {\n serializedOrigin = null\n }\n break\n default:\n // Do nothing.\n }\n\n // 2. Append (`Origin`, serializedOrigin) to request\u2019s header list.\n request.headersList.append('origin', serializedOrigin, true)\n }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsen-time\nfunction coarsenTime (timestamp, crossOriginIsolatedCapability) {\n // TODO\n return timestamp\n}\n\n// https://fetch.spec.whatwg.org/#clamp-and-coarsen-connection-timing-info\nfunction clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {\n if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {\n return {\n domainLookupStartTime: defaultStartTime,\n domainLookupEndTime: defaultStartTime,\n connectionStartTime: defaultStartTime,\n connectionEndTime: defaultStartTime,\n secureConnectionStartTime: defaultStartTime,\n ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol\n }\n }\n\n return {\n domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),\n domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),\n connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),\n connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),\n secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),\n ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol\n }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsened-shared-current-time\nfunction coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {\n return coarsenTime(performance.now(), crossOriginIsolatedCapability)\n}\n\n// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info\nfunction createOpaqueTimingInfo (timingInfo) {\n return {\n startTime: timingInfo.startTime ?? 0,\n redirectStartTime: 0,\n redirectEndTime: 0,\n postRedirectStartTime: timingInfo.startTime ?? 0,\n finalServiceWorkerStartTime: 0,\n finalNetworkResponseStartTime: 0,\n finalNetworkRequestStartTime: 0,\n endTime: 0,\n encodedBodySize: 0,\n decodedBodySize: 0,\n finalConnectionTimingInfo: null\n }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#policy-container\nfunction makePolicyContainer () {\n // Note: the fetch spec doesn't make use of embedder policy or CSP list\n return {\n referrerPolicy: 'strict-origin-when-cross-origin'\n }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container\nfunction clonePolicyContainer (policyContainer) {\n return {\n referrerPolicy: policyContainer.referrerPolicy\n }\n}\n\n/**\n * Determine request\u2019s Referrer\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer\n */\nfunction determineRequestsReferrer (request) {\n // Given a request request, we can determine the correct referrer information\n // to send by examining its referrer policy as detailed in the following\n // steps, which return either no referrer or a URL:\n\n // 1. Let policy be request's referrer policy.\n const policy = request.referrerPolicy\n\n // Note: policy cannot (shouldn't) be null or an empty string.\n assert(policy)\n\n // 2. Let environment be request\u2019s client.\n\n let referrerSource = null\n\n // 3. Switch on request\u2019s referrer:\n\n // \"client\"\n if (request.referrer === 'client') {\n // Note: node isn't a browser and doesn't implement document/iframes,\n // so we bypass this step and replace it with our own.\n\n const globalOrigin = getGlobalOrigin()\n\n if (!globalOrigin || globalOrigin.origin === 'null') {\n return 'no-referrer'\n }\n\n // Note: we need to clone it as it's mutated\n referrerSource = new URL(globalOrigin)\n // a URL\n } else if (webidl.is.URL(request.referrer)) {\n // Let referrerSource be request\u2019s referrer.\n referrerSource = request.referrer\n }\n\n // 4. Let request\u2019s referrerURL be the result of stripping referrerSource for\n // use as a referrer.\n let referrerURL = stripURLForReferrer(referrerSource)\n\n // 5. Let referrerOrigin be the result of stripping referrerSource for use as\n // a referrer, with the origin-only flag set to true.\n const referrerOrigin = stripURLForReferrer(referrerSource, true)\n\n // 6. If the result of serializing referrerURL is a string whose length is\n // greater than 4096, set referrerURL to referrerOrigin.\n if (referrerURL.toString().length > 4096) {\n referrerURL = referrerOrigin\n }\n\n // 7. The user agent MAY alter referrerURL or referrerOrigin at this point\n // to enforce arbitrary policy considerations in the interests of minimizing\n // data leakage. For example, the user agent could strip the URL down to an\n // origin, modify its host, replace it with an empty string, etc.\n\n // 8. Execute the switch statements corresponding to the value of policy:\n switch (policy) {\n case 'no-referrer':\n // Return no referrer\n return 'no-referrer'\n case 'origin':\n // Return referrerOrigin\n if (referrerOrigin != null) {\n return referrerOrigin\n }\n return stripURLForReferrer(referrerSource, true)\n case 'unsafe-url':\n // Return referrerURL.\n return referrerURL\n case 'strict-origin': {\n const currentURL = requestCurrentURL(request)\n\n // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n // current URL is not a potentially trustworthy URL, then return no\n // referrer.\n if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n return 'no-referrer'\n }\n // 2. Return referrerOrigin\n return referrerOrigin\n }\n case 'strict-origin-when-cross-origin': {\n const currentURL = requestCurrentURL(request)\n\n // 1. If the origin of referrerURL and the origin of request\u2019s current\n // URL are the same, then return referrerURL.\n if (sameOrigin(referrerURL, currentURL)) {\n return referrerURL\n }\n\n // 2. If referrerURL is a potentially trustworthy URL and request\u2019s\n // current URL is not a potentially trustworthy URL, then return no\n // referrer.\n if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n return 'no-referrer'\n }\n\n // 3. Return referrerOrigin.\n return referrerOrigin\n }\n case 'same-origin':\n // 1. If the origin of referrerURL and the origin of request\u2019s current\n // URL are the same, then return referrerURL.\n if (sameOrigin(request, referrerURL)) {\n return referrerURL\n }\n // 2. Return no referrer.\n return 'no-referrer'\n case 'origin-when-cross-origin':\n // 1. If the origin of referrerURL and the origin of request\u2019s current\n // URL are the same, then return referrerURL.\n if (sameOrigin(request, referrerURL)) {\n return referrerURL\n }\n // 2. Return referrerOrigin.\n return referrerOrigin\n case 'no-referrer-when-downgrade': {\n const currentURL = requestCurrentURL(request)\n\n // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n // current URL is not a potentially trustworthy URL, then return no\n // referrer.\n if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n return 'no-referrer'\n }\n // 2. Return referrerOrigin\n return referrerOrigin\n }\n }\n}\n\n/**\n * Certain portions of URLs must not be included when sending a URL as the\n * value of a `Referer` header: a URLs fragment, username, and password\n * components must be stripped from the URL before it\u2019s sent out. This\n * algorithm accepts a origin-only flag, which defaults to false. If set to\n * true, the algorithm will additionally remove the URL\u2019s path and query\n * components, leaving only the scheme, host, and port.\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url\n * @param {URL} url\n * @param {boolean} [originOnly=false]\n */\nfunction stripURLForReferrer (url, originOnly = false) {\n // 1. Assert: url is a URL.\n assert(webidl.is.URL(url))\n\n // Note: Create a new URL instance to avoid mutating the original URL.\n url = new URL(url)\n\n // 2. If url\u2019s scheme is a local scheme, then return no referrer.\n if (urlIsLocal(url)) {\n return 'no-referrer'\n }\n\n // 3. Set url\u2019s username to the empty string.\n url.username = ''\n\n // 4. Set url\u2019s password to the empty string.\n url.password = ''\n\n // 5. Set url\u2019s fragment to null.\n url.hash = ''\n\n // 6. If the origin-only flag is true, then:\n if (originOnly === true) {\n // 1. Set url\u2019s path to \u00AB the empty string \u00BB.\n url.pathname = ''\n\n // 2. Set url\u2019s query to null.\n url.search = ''\n }\n\n // 7. Return url.\n return url\n}\n\nconst potentialleTrustworthyIPv4RegExp = new RegExp('^(?:' +\n '(?:127\\\\.)' +\n '(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\\\.){2}' +\n '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])' +\n')$')\n\nconst potentialleTrustworthyIPv6RegExp = new RegExp('^(?:' +\n '(?:(?:0{1,4}):){7}(?:(?:0{0,3}1))|' +\n '(?:(?:0{1,4}):){1,6}(?::(?:0{0,3}1))|' +\n '(?:::(?:0{0,3}1))|' +\n')$')\n\n/**\n * Check if host matches one of the CIDR notations 127.0.0.0/8 or ::1/128.\n *\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginIPPotentiallyTrustworthy (origin) {\n // IPv6\n if (origin.includes(':')) {\n // Remove brackets from IPv6 addresses\n if (origin[0] === '[' && origin[origin.length - 1] === ']') {\n origin = origin.slice(1, -1)\n }\n return potentialleTrustworthyIPv6RegExp.test(origin)\n }\n\n // IPv4\n return potentialleTrustworthyIPv4RegExp.test(origin)\n}\n\n/**\n * A potentially trustworthy origin is one which a user agent can generally\n * trust as delivering data securely.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginPotentiallyTrustworthy (origin) {\n // 1. If origin is an opaque origin, return \"Not Trustworthy\".\n if (origin == null || origin === 'null') {\n return false\n }\n\n // 2. Assert: origin is a tuple origin.\n origin = new URL(origin)\n\n // 3. If origin\u2019s scheme is either \"https\" or \"wss\",\n // return \"Potentially Trustworthy\".\n if (origin.protocol === 'https:' || origin.protocol === 'wss:') {\n return true\n }\n\n // 4. If origin\u2019s host matches one of the CIDR notations 127.0.0.0/8 or\n // ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n if (isOriginIPPotentiallyTrustworthy(origin.hostname)) {\n return true\n }\n\n // 5. If the user agent conforms to the name resolution rules in\n // [let-localhost-be-localhost] and one of the following is true:\n\n // origin\u2019s host is \"localhost\" or \"localhost.\"\n if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n return true\n }\n\n // origin\u2019s host ends with \".localhost\" or \".localhost.\"\n if (origin.hostname.endsWith('.localhost') || origin.hostname.endsWith('.localhost.')) {\n return true\n }\n\n // 6. If origin\u2019s scheme is \"file\", return \"Potentially Trustworthy\".\n if (origin.protocol === 'file:') {\n return true\n }\n\n // 7. If origin\u2019s scheme component is one which the user agent considers to\n // be authenticated, return \"Potentially Trustworthy\".\n\n // 8. If origin has been configured as a trustworthy origin, return\n // \"Potentially Trustworthy\".\n\n // 9. Return \"Not Trustworthy\".\n return false\n}\n\n/**\n * A potentially trustworthy URL is one which either inherits context from its\n * creator (about:blank, about:srcdoc, data) or one whose origin is a\n * potentially trustworthy origin.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://www.w3.org/TR/secure-contexts/#is-url-trustworthy\n * @param {URL} url\n * @returns {boolean}\n */\nfunction isURLPotentiallyTrustworthy (url) {\n // Given a URL record (url), the following algorithm returns \"Potentially\n // Trustworthy\" or \"Not Trustworthy\" as appropriate:\n if (!webidl.is.URL(url)) {\n return false\n }\n\n // 1. If url is \"about:blank\" or \"about:srcdoc\",\n // return \"Potentially Trustworthy\".\n if (url.href === 'about:blank' || url.href === 'about:srcdoc') {\n return true\n }\n\n // 2. If url\u2019s scheme is \"data\", return \"Potentially Trustworthy\".\n if (url.protocol === 'data:') return true\n\n // Note: The origin of blob: URLs is the origin of the context in which they\n // were created. Therefore, blobs created in a trustworthy origin will\n // themselves be potentially trustworthy.\n if (url.protocol === 'blob:') return true\n\n // 3. Return the result of executing \u00A7 3.1 Is origin potentially trustworthy?\n // on url\u2019s origin.\n return isOriginPotentiallyTrustworthy(url.origin)\n}\n\n/**\n * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist\n * @param {Uint8Array} bytes\n * @param {string} metadataList\n */\nfunction bytesMatch (bytes, metadataList) {\n // If node is not built with OpenSSL support, we cannot check\n // a request's integrity, so allow it by default (the spec will\n // allow requests if an invalid hash is given, as precedence).\n /* istanbul ignore if: only if node is built with --without-ssl */\n if (crypto === undefined) {\n return true\n }\n\n // 1. Let parsedMetadata be the result of parsing metadataList.\n const parsedMetadata = parseMetadata(metadataList)\n\n // 2. If parsedMetadata is no metadata, return true.\n if (parsedMetadata === 'no metadata') {\n return true\n }\n\n // 3. If response is not eligible for integrity validation, return false.\n // TODO\n\n // 4. If parsedMetadata is the empty set, return true.\n if (parsedMetadata.length === 0) {\n return true\n }\n\n // 5. Let metadata be the result of getting the strongest\n // metadata from parsedMetadata.\n const strongest = getStrongestMetadata(parsedMetadata)\n const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest)\n\n // 6. For each item in metadata:\n for (const item of metadata) {\n // 1. Let algorithm be the alg component of item.\n const algorithm = item.algo\n\n // 2. Let expectedValue be the val component of item.\n const expectedValue = item.hash\n\n // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e\n // \"be liberal with padding\". This is annoying, and it's not even in the spec.\n\n // 3. Let actualValue be the result of applying algorithm to bytes.\n let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64')\n\n if (actualValue[actualValue.length - 1] === '=') {\n if (actualValue[actualValue.length - 2] === '=') {\n actualValue = actualValue.slice(0, -2)\n } else {\n actualValue = actualValue.slice(0, -1)\n }\n }\n\n // 4. If actualValue is a case-sensitive match for expectedValue,\n // return true.\n if (compareBase64Mixed(actualValue, expectedValue)) {\n return true\n }\n }\n\n // 7. Return false.\n return false\n}\n\n// https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options\n// https://www.w3.org/TR/CSP2/#source-list-syntax\n// https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1\nconst parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\\s|$)( +[!-~]*)?)?/i\n\n/**\n * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata\n * @param {string} metadata\n */\nfunction parseMetadata (metadata) {\n // 1. Let result be the empty set.\n /** @type {{ algo: string, hash: string }[]} */\n const result = []\n\n // 2. Let empty be equal to true.\n let empty = true\n\n // 3. For each token returned by splitting metadata on spaces:\n for (const token of metadata.split(' ')) {\n // 1. Set empty to false.\n empty = false\n\n // 2. Parse token as a hash-with-options.\n const parsedToken = parseHashWithOptions.exec(token)\n\n // 3. If token does not parse, continue to the next token.\n if (\n parsedToken === null ||\n parsedToken.groups === undefined ||\n parsedToken.groups.algo === undefined\n ) {\n // Note: Chromium blocks the request at this point, but Firefox\n // gives a warning that an invalid integrity was given. The\n // correct behavior is to ignore these, and subsequently not\n // check the integrity of the resource.\n continue\n }\n\n // 4. Let algorithm be the hash-algo component of token.\n const algorithm = parsedToken.groups.algo.toLowerCase()\n\n // 5. If algorithm is a hash function recognized by the user\n // agent, add the parsed token to result.\n if (supportedHashes.includes(algorithm)) {\n result.push(parsedToken.groups)\n }\n }\n\n // 4. Return no metadata if empty is true, otherwise return result.\n if (empty === true) {\n return 'no metadata'\n }\n\n return result\n}\n\n/**\n * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList\n */\nfunction getStrongestMetadata (metadataList) {\n // Let algorithm be the algo component of the first item in metadataList.\n // Can be sha256\n let algorithm = metadataList[0].algo\n // If the algorithm is sha512, then it is the strongest\n // and we can return immediately\n if (algorithm[3] === '5') {\n return algorithm\n }\n\n for (let i = 1; i < metadataList.length; ++i) {\n const metadata = metadataList[i]\n // If the algorithm is sha512, then it is the strongest\n // and we can break the loop immediately\n if (metadata.algo[3] === '5') {\n algorithm = 'sha512'\n break\n // If the algorithm is sha384, then a potential sha256 or sha384 is ignored\n } else if (algorithm[3] === '3') {\n continue\n // algorithm is sha256, check if algorithm is sha384 and if so, set it as\n // the strongest\n } else if (metadata.algo[3] === '3') {\n algorithm = 'sha384'\n }\n }\n return algorithm\n}\n\nfunction filterMetadataListByAlgorithm (metadataList, algorithm) {\n if (metadataList.length === 1) {\n return metadataList\n }\n\n let pos = 0\n for (let i = 0; i < metadataList.length; ++i) {\n if (metadataList[i].algo === algorithm) {\n metadataList[pos++] = metadataList[i]\n }\n }\n\n metadataList.length = pos\n\n return metadataList\n}\n\n/**\n * Compares two base64 strings, allowing for base64url\n * in the second string.\n *\n* @param {string} actualValue always base64\n * @param {string} expectedValue base64 or base64url\n * @returns {boolean}\n */\nfunction compareBase64Mixed (actualValue, expectedValue) {\n if (actualValue.length !== expectedValue.length) {\n return false\n }\n for (let i = 0; i < actualValue.length; ++i) {\n if (actualValue[i] !== expectedValue[i]) {\n if (\n (actualValue[i] === '+' && expectedValue[i] === '-') ||\n (actualValue[i] === '/' && expectedValue[i] === '_')\n ) {\n continue\n }\n return false\n }\n }\n\n return true\n}\n\n// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request\nfunction tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {\n // TODO\n}\n\n/**\n * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}\n * @param {URL} A\n * @param {URL} B\n */\nfunction sameOrigin (A, B) {\n // 1. If A and B are the same opaque origin, then return true.\n if (A.origin === B.origin && A.origin === 'null') {\n return true\n }\n\n // 2. If A and B are both tuple origins and their schemes,\n // hosts, and port are identical, then return true.\n if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {\n return true\n }\n\n // 3. Return false.\n return false\n}\n\nfunction createDeferredPromise () {\n let res\n let rej\n const promise = new Promise((resolve, reject) => {\n res = resolve\n rej = reject\n })\n\n return { promise, resolve: res, reject: rej }\n}\n\nfunction isAborted (fetchParams) {\n return fetchParams.controller.state === 'aborted'\n}\n\nfunction isCancelled (fetchParams) {\n return fetchParams.controller.state === 'aborted' ||\n fetchParams.controller.state === 'terminated'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-method-normalize\n * @param {string} method\n */\nfunction normalizeMethod (method) {\n return normalizedMethodRecordsBase[method.toLowerCase()] ?? method\n}\n\n// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n // 1. Let result be ? Call(%JSON.stringify%, undefined, \u00AB value \u00BB).\n const result = JSON.stringify(value)\n\n // 2. If result is undefined, then throw a TypeError.\n if (result === undefined) {\n throw new TypeError('Value is not JSON serializable')\n }\n\n // 3. Assert: result is a string.\n assert(typeof result === 'string')\n\n // 4. Return result.\n return result\n}\n\n// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object\nconst esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {((target: any) => any)} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction createIterator (name, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n class FastIterableIterator {\n /** @type {any} */\n #target\n /** @type {'key' | 'value' | 'key+value'} */\n #kind\n /** @type {number} */\n #index\n\n /**\n * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object\n * @param {unknown} target\n * @param {'key' | 'value' | 'key+value'} kind\n */\n constructor (target, kind) {\n this.#target = target\n this.#kind = kind\n this.#index = 0\n }\n\n next () {\n // 1. Let interface be the interface for which the iterator prototype object exists.\n // 2. Let thisValue be the this value.\n // 3. Let object be ? ToObject(thisValue).\n // 4. If object is a platform object, then perform a security\n // check, passing:\n // 5. If object is not a default iterator object for interface,\n // then throw a TypeError.\n if (typeof this !== 'object' || this === null || !(#target in this)) {\n throw new TypeError(\n `'next' called on an object that does not implement interface ${name} Iterator.`\n )\n }\n\n // 6. Let index be object\u2019s index.\n // 7. Let kind be object\u2019s kind.\n // 8. Let values be object\u2019s target's value pairs to iterate over.\n const index = this.#index\n const values = kInternalIterator(this.#target)\n\n // 9. Let len be the length of values.\n const len = values.length\n\n // 10. If index is greater than or equal to len, then return\n // CreateIterResultObject(undefined, true).\n if (index >= len) {\n return {\n value: undefined,\n done: true\n }\n }\n\n // 11. Let pair be the entry in values at index index.\n const { [keyIndex]: key, [valueIndex]: value } = values[index]\n\n // 12. Set object\u2019s index to index + 1.\n this.#index = index + 1\n\n // 13. Return the iterator result for pair and kind.\n\n // https://webidl.spec.whatwg.org/#iterator-result\n\n // 1. Let result be a value determined by the value of kind:\n let result\n switch (this.#kind) {\n case 'key':\n // 1. Let idlKey be pair\u2019s key.\n // 2. Let key be the result of converting idlKey to an\n // ECMAScript value.\n // 3. result is key.\n result = key\n break\n case 'value':\n // 1. Let idlValue be pair\u2019s value.\n // 2. Let value be the result of converting idlValue to\n // an ECMAScript value.\n // 3. result is value.\n result = value\n break\n case 'key+value':\n // 1. Let idlKey be pair\u2019s key.\n // 2. Let idlValue be pair\u2019s value.\n // 3. Let key be the result of converting idlKey to an\n // ECMAScript value.\n // 4. Let value be the result of converting idlValue to\n // an ECMAScript value.\n // 5. Let array be ! ArrayCreate(2).\n // 6. Call ! CreateDataProperty(array, \"0\", key).\n // 7. Call ! CreateDataProperty(array, \"1\", value).\n // 8. result is array.\n result = [key, value]\n break\n }\n\n // 2. Return CreateIterResultObject(result, false).\n return {\n value: result,\n done: false\n }\n }\n }\n\n // https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n // @ts-ignore\n delete FastIterableIterator.prototype.constructor\n\n Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype)\n\n Object.defineProperties(FastIterableIterator.prototype, {\n [Symbol.toStringTag]: {\n writable: false,\n enumerable: false,\n configurable: true,\n value: `${name} Iterator`\n },\n next: { writable: true, enumerable: true, configurable: true }\n })\n\n /**\n * @param {unknown} target\n * @param {'key' | 'value' | 'key+value'} kind\n * @returns {IterableIterator<any>}\n */\n return function (target, kind) {\n return new FastIterableIterator(target, kind)\n }\n}\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {any} object class\n * @param {(target: any) => any} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction iteratorMixin (name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex)\n\n const properties = {\n keys: {\n writable: true,\n enumerable: true,\n configurable: true,\n value: function keys () {\n webidl.brandCheck(this, object)\n return makeIterator(this, 'key')\n }\n },\n values: {\n writable: true,\n enumerable: true,\n configurable: true,\n value: function values () {\n webidl.brandCheck(this, object)\n return makeIterator(this, 'value')\n }\n },\n entries: {\n writable: true,\n enumerable: true,\n configurable: true,\n value: function entries () {\n webidl.brandCheck(this, object)\n return makeIterator(this, 'key+value')\n }\n },\n forEach: {\n writable: true,\n enumerable: true,\n configurable: true,\n value: function forEach (callbackfn, thisArg = globalThis) {\n webidl.brandCheck(this, object)\n webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`)\n if (typeof callbackfn !== 'function') {\n throw new TypeError(\n `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`\n )\n }\n for (const { 0: key, 1: value } of makeIterator(this, 'key+value')) {\n callbackfn.call(thisArg, value, key, this)\n }\n }\n }\n }\n\n return Object.defineProperties(object.prototype, {\n ...properties,\n [Symbol.iterator]: {\n writable: true,\n enumerable: false,\n configurable: true,\n value: properties.entries.value\n }\n })\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-fully-read\n */\nfunction fullyReadBody (body, processBody, processBodyError) {\n // 1. If taskDestination is null, then set taskDestination to\n // the result of starting a new parallel queue.\n\n // 2. Let successSteps given a byte sequence bytes be to queue a\n // fetch task to run processBody given bytes, with taskDestination.\n const successSteps = processBody\n\n // 3. Let errorSteps be to queue a fetch task to run processBodyError,\n // with taskDestination.\n const errorSteps = processBodyError\n\n // 4. Let reader be the result of getting a reader for body\u2019s stream.\n // If that threw an exception, then run errorSteps with that\n // exception and return.\n let reader\n\n try {\n reader = body.stream.getReader()\n } catch (e) {\n errorSteps(e)\n return\n }\n\n // 5. Read all bytes from reader, given successSteps and errorSteps.\n readAllBytes(reader, successSteps, errorSteps)\n}\n\n/**\n * @param {ReadableStreamController<Uint8Array>} controller\n */\nfunction readableStreamClose (controller) {\n try {\n controller.close()\n controller.byobRequest?.respond(0)\n } catch (err) {\n // TODO: add comment explaining why this error occurs.\n if (!err.message.includes('Controller is already closed') && !err.message.includes('ReadableStream is already closed')) {\n throw err\n }\n }\n}\n\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line\n\n/**\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n * @param {string} input\n */\nfunction isomorphicEncode (input) {\n // 1. Assert: input contains no code points greater than U+00FF.\n assert(!invalidIsomorphicEncodeValueRegex.test(input))\n\n // 2. Return a byte sequence whose length is equal to input\u2019s code\n // point length and whose bytes have the same values as the\n // values of input\u2019s code points, in the same order\n return input\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes\n * @see https://streams.spec.whatwg.org/#read-loop\n * @param {ReadableStreamDefaultReader} reader\n * @param {(bytes: Uint8Array) => void} successSteps\n * @param {(error: Error) => void} failureSteps\n */\nasync function readAllBytes (reader, successSteps, failureSteps) {\n const bytes = []\n let byteLength = 0\n\n try {\n do {\n const { done, value: chunk } = await reader.read()\n\n if (done) {\n // 1. Call successSteps with bytes.\n successSteps(Buffer.concat(bytes, byteLength))\n return\n }\n\n // 1. If chunk is not a Uint8Array object, call failureSteps\n // with a TypeError and abort these steps.\n if (!isUint8Array(chunk)) {\n failureSteps(TypeError('Received non-Uint8Array chunk'))\n return\n }\n\n // 2. Append the bytes represented by chunk to bytes.\n bytes.push(chunk)\n byteLength += chunk.length\n\n // 3. Read-loop given reader, bytes, successSteps, and failureSteps.\n } while (true)\n } catch (e) {\n // 1. Call failureSteps with e.\n failureSteps(e)\n }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#is-local\n * @param {URL} url\n * @returns {boolean}\n */\nfunction urlIsLocal (url) {\n assert('protocol' in url) // ensure it's a url object\n\n const protocol = url.protocol\n\n // A URL is local if its scheme is a local scheme.\n // A local scheme is \"about\", \"blob\", or \"data\".\n return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'\n}\n\n/**\n * @param {string|URL} url\n * @returns {boolean}\n */\nfunction urlHasHttpsScheme (url) {\n return (\n (\n typeof url === 'string' &&\n url[5] === ':' &&\n url[0] === 'h' &&\n url[1] === 't' &&\n url[2] === 't' &&\n url[3] === 'p' &&\n url[4] === 's'\n ) ||\n url.protocol === 'https:'\n )\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-scheme\n * @param {URL} url\n */\nfunction urlIsHttpHttpsScheme (url) {\n assert('protocol' in url) // ensure it's a url object\n\n const protocol = url.protocol\n\n return protocol === 'http:' || protocol === 'https:'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#simple-range-header-value\n * @param {string} value\n * @param {boolean} allowWhitespace\n */\nfunction simpleRangeHeaderValue (value, allowWhitespace) {\n // 1. Let data be the isomorphic decoding of value.\n // Note: isomorphic decoding takes a sequence of bytes (ie. a Uint8Array) and turns it into a string,\n // nothing more. We obviously don't need to do that if value is a string already.\n const data = value\n\n // 2. If data does not start with \"bytes\", then return failure.\n if (!data.startsWith('bytes')) {\n return 'failure'\n }\n\n // 3. Let position be a position variable for data, initially pointing at the 5th code point of data.\n const position = { position: 5 }\n\n // 4. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n // from data given position.\n if (allowWhitespace) {\n collectASequenceOfCodePoints(\n (char) => char === '\\t' || char === ' ',\n data,\n position\n )\n }\n\n // 5. If the code point at position within data is not U+003D (=), then return failure.\n if (data.charCodeAt(position.position) !== 0x3D) {\n return 'failure'\n }\n\n // 6. Advance position by 1.\n position.position++\n\n // 7. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space, from\n // data given position.\n if (allowWhitespace) {\n collectASequenceOfCodePoints(\n (char) => char === '\\t' || char === ' ',\n data,\n position\n )\n }\n\n // 8. Let rangeStart be the result of collecting a sequence of code points that are ASCII digits,\n // from data given position.\n const rangeStart = collectASequenceOfCodePoints(\n (char) => {\n const code = char.charCodeAt(0)\n\n return code >= 0x30 && code <= 0x39\n },\n data,\n position\n )\n\n // 9. Let rangeStartValue be rangeStart, interpreted as decimal number, if rangeStart is not the\n // empty string; otherwise null.\n const rangeStartValue = rangeStart.length ? Number(rangeStart) : null\n\n // 10. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n // from data given position.\n if (allowWhitespace) {\n collectASequenceOfCodePoints(\n (char) => char === '\\t' || char === ' ',\n data,\n position\n )\n }\n\n // 11. If the code point at position within data is not U+002D (-), then return failure.\n if (data.charCodeAt(position.position) !== 0x2D) {\n return 'failure'\n }\n\n // 12. Advance position by 1.\n position.position++\n\n // 13. If allowWhitespace is true, collect a sequence of code points that are HTTP tab\n // or space, from data given position.\n // Note from Khafra: its the same step as in #8 again lol\n if (allowWhitespace) {\n collectASequenceOfCodePoints(\n (char) => char === '\\t' || char === ' ',\n data,\n position\n )\n }\n\n // 14. Let rangeEnd be the result of collecting a sequence of code points that are\n // ASCII digits, from data given position.\n // Note from Khafra: you wouldn't guess it, but this is also the same step as #8\n const rangeEnd = collectASequenceOfCodePoints(\n (char) => {\n const code = char.charCodeAt(0)\n\n return code >= 0x30 && code <= 0x39\n },\n data,\n position\n )\n\n // 15. Let rangeEndValue be rangeEnd, interpreted as decimal number, if rangeEnd\n // is not the empty string; otherwise null.\n // Note from Khafra: THE SAME STEP, AGAIN!!!\n // Note: why interpret as a decimal if we only collect ascii digits?\n const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null\n\n // 16. If position is not past the end of data, then return failure.\n if (position.position < data.length) {\n return 'failure'\n }\n\n // 17. If rangeEndValue and rangeStartValue are null, then return failure.\n if (rangeEndValue === null && rangeStartValue === null) {\n return 'failure'\n }\n\n // 18. If rangeStartValue and rangeEndValue are numbers, and rangeStartValue is\n // greater than rangeEndValue, then return failure.\n // Note: ... when can they not be numbers?\n if (rangeStartValue > rangeEndValue) {\n return 'failure'\n }\n\n // 19. Return (rangeStartValue, rangeEndValue).\n return { rangeStartValue, rangeEndValue }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#build-a-content-range\n * @param {number} rangeStart\n * @param {number} rangeEnd\n * @param {number} fullLength\n */\nfunction buildContentRange (rangeStart, rangeEnd, fullLength) {\n // 1. Let contentRange be `bytes `.\n let contentRange = 'bytes '\n\n // 2. Append rangeStart, serialized and isomorphic encoded, to contentRange.\n contentRange += isomorphicEncode(`${rangeStart}`)\n\n // 3. Append 0x2D (-) to contentRange.\n contentRange += '-'\n\n // 4. Append rangeEnd, serialized and isomorphic encoded to contentRange.\n contentRange += isomorphicEncode(`${rangeEnd}`)\n\n // 5. Append 0x2F (/) to contentRange.\n contentRange += '/'\n\n // 6. Append fullLength, serialized and isomorphic encoded to contentRange.\n contentRange += isomorphicEncode(`${fullLength}`)\n\n // 7. Return contentRange.\n return contentRange\n}\n\n// A Stream, which pipes the response to zlib.createInflate() or\n// zlib.createInflateRaw() depending on the first byte of the Buffer.\n// If the lower byte of the first byte is 0x08, then the stream is\n// interpreted as a zlib stream, otherwise it's interpreted as a\n// raw deflate stream.\nclass InflateStream extends Transform {\n #zlibOptions\n\n /** @param {zlib.ZlibOptions} [zlibOptions] */\n constructor (zlibOptions) {\n super()\n this.#zlibOptions = zlibOptions\n }\n\n _transform (chunk, encoding, callback) {\n if (!this._inflateStream) {\n if (chunk.length === 0) {\n callback()\n return\n }\n this._inflateStream = (chunk[0] & 0x0F) === 0x08\n ? zlib.createInflate(this.#zlibOptions)\n : zlib.createInflateRaw(this.#zlibOptions)\n\n this._inflateStream.on('data', this.push.bind(this))\n this._inflateStream.on('end', () => this.push(null))\n this._inflateStream.on('error', (err) => this.destroy(err))\n }\n\n this._inflateStream.write(chunk, encoding, callback)\n }\n\n _final (callback) {\n if (this._inflateStream) {\n this._inflateStream.end()\n this._inflateStream = null\n }\n callback()\n }\n}\n\n/**\n * @param {zlib.ZlibOptions} [zlibOptions]\n * @returns {InflateStream}\n */\nfunction createInflate (zlibOptions) {\n return new InflateStream(zlibOptions)\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type\n * @param {import('./headers').HeadersList} headers\n */\nfunction extractMimeType (headers) {\n // 1. Let charset be null.\n let charset = null\n\n // 2. Let essence be null.\n let essence = null\n\n // 3. Let mimeType be null.\n let mimeType = null\n\n // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers.\n const values = getDecodeSplit('content-type', headers)\n\n // 5. If values is null, then return failure.\n if (values === null) {\n return 'failure'\n }\n\n // 6. For each value of values:\n for (const value of values) {\n // 6.1. Let temporaryMimeType be the result of parsing value.\n const temporaryMimeType = parseMIMEType(value)\n\n // 6.2. If temporaryMimeType is failure or its essence is \"*/*\", then continue.\n if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') {\n continue\n }\n\n // 6.3. Set mimeType to temporaryMimeType.\n mimeType = temporaryMimeType\n\n // 6.4. If mimeType\u2019s essence is not essence, then:\n if (mimeType.essence !== essence) {\n // 6.4.1. Set charset to null.\n charset = null\n\n // 6.4.2. If mimeType\u2019s parameters[\"charset\"] exists, then set charset to\n // mimeType\u2019s parameters[\"charset\"].\n if (mimeType.parameters.has('charset')) {\n charset = mimeType.parameters.get('charset')\n }\n\n // 6.4.3. Set essence to mimeType\u2019s essence.\n essence = mimeType.essence\n } else if (!mimeType.parameters.has('charset') && charset !== null) {\n // 6.5. Otherwise, if mimeType\u2019s parameters[\"charset\"] does not exist, and\n // charset is non-null, set mimeType\u2019s parameters[\"charset\"] to charset.\n mimeType.parameters.set('charset', charset)\n }\n }\n\n // 7. If mimeType is null, then return failure.\n if (mimeType == null) {\n return 'failure'\n }\n\n // 8. Return mimeType.\n return mimeType\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value-get-decode-and-split\n * @param {string|null} value\n */\nfunction gettingDecodingSplitting (value) {\n // 1. Let input be the result of isomorphic decoding value.\n const input = value\n\n // 2. Let position be a position variable for input, initially pointing at the start of input.\n const position = { position: 0 }\n\n // 3. Let values be a list of strings, initially empty.\n const values = []\n\n // 4. Let temporaryValue be the empty string.\n let temporaryValue = ''\n\n // 5. While position is not past the end of input:\n while (position.position < input.length) {\n // 5.1. Append the result of collecting a sequence of code points that are not U+0022 (\")\n // or U+002C (,) from input, given position, to temporaryValue.\n temporaryValue += collectASequenceOfCodePoints(\n (char) => char !== '\"' && char !== ',',\n input,\n position\n )\n\n // 5.2. If position is not past the end of input, then:\n if (position.position < input.length) {\n // 5.2.1. If the code point at position within input is U+0022 (\"), then:\n if (input.charCodeAt(position.position) === 0x22) {\n // 5.2.1.1. Append the result of collecting an HTTP quoted string from input, given position, to temporaryValue.\n temporaryValue += collectAnHTTPQuotedString(\n input,\n position\n )\n\n // 5.2.1.2. If position is not past the end of input, then continue.\n if (position.position < input.length) {\n continue\n }\n } else {\n // 5.2.2. Otherwise:\n\n // 5.2.2.1. Assert: the code point at position within input is U+002C (,).\n assert(input.charCodeAt(position.position) === 0x2C)\n\n // 5.2.2.2. Advance position by 1.\n position.position++\n }\n }\n\n // 5.3. Remove all HTTP tab or space from the start and end of temporaryValue.\n temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 0x9 || char === 0x20)\n\n // 5.4. Append temporaryValue to values.\n values.push(temporaryValue)\n\n // 5.6. Set temporaryValue to the empty string.\n temporaryValue = ''\n }\n\n // 6. Return values.\n return values\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get-decode-split\n * @param {string} name lowercase header name\n * @param {import('./headers').HeadersList} list\n */\nfunction getDecodeSplit (name, list) {\n // 1. Let value be the result of getting name from list.\n const value = list.get(name, true)\n\n // 2. If value is null, then return null.\n if (value === null) {\n return null\n }\n\n // 3. Return the result of getting, decoding, and splitting value.\n return gettingDecodingSplitting(value)\n}\n\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Buffer} buffer\n */\nfunction utf8DecodeBytes (buffer) {\n if (buffer.length === 0) {\n return ''\n }\n\n // 1. Let buffer be the result of peeking three bytes from\n // ioQueue, converted to a byte sequence.\n\n // 2. If buffer is 0xEF 0xBB 0xBF, then read three\n // bytes from ioQueue. (Do nothing with those bytes.)\n if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n buffer = buffer.subarray(3)\n }\n\n // 3. Process a queue with an instance of UTF-8\u2019s\n // decoder, ioQueue, output, and \"replacement\".\n const output = textDecoder.decode(buffer)\n\n // 4. Return output.\n return output\n}\n\nclass EnvironmentSettingsObjectBase {\n get baseUrl () {\n return getGlobalOrigin()\n }\n\n get origin () {\n return this.baseUrl?.origin\n }\n\n policyContainer = makePolicyContainer()\n}\n\nclass EnvironmentSettingsObject {\n settingsObject = new EnvironmentSettingsObjectBase()\n}\n\nconst environmentSettingsObject = new EnvironmentSettingsObject()\n\nmodule.exports = {\n isAborted,\n isCancelled,\n isValidEncodedURL,\n createDeferredPromise,\n ReadableStreamFrom,\n tryUpgradeRequestToAPotentiallyTrustworthyURL,\n clampAndCoarsenConnectionTimingInfo,\n coarsenedSharedCurrentTime,\n determineRequestsReferrer,\n makePolicyContainer,\n clonePolicyContainer,\n appendFetchMetadata,\n appendRequestOriginHeader,\n TAOCheck,\n corsCheck,\n crossOriginResourcePolicyCheck,\n createOpaqueTimingInfo,\n setRequestReferrerPolicyOnRedirect,\n isValidHTTPToken,\n requestBadPort,\n requestCurrentURL,\n responseURL,\n responseLocationURL,\n isURLPotentiallyTrustworthy,\n isValidReasonPhrase,\n sameOrigin,\n normalizeMethod,\n serializeJavascriptValueToJSONString,\n iteratorMixin,\n createIterator,\n isValidHeaderName,\n isValidHeaderValue,\n isErrorLike,\n fullyReadBody,\n bytesMatch,\n readableStreamClose,\n isomorphicEncode,\n urlIsLocal,\n urlHasHttpsScheme,\n urlIsHttpHttpsScheme,\n readAllBytes,\n simpleRangeHeaderValue,\n buildContentRange,\n parseMetadata,\n createInflate,\n extractMimeType,\n getDecodeSplit,\n utf8DecodeBytes,\n environmentSettingsObject,\n isOriginIPPotentiallyTrustworthy\n}\n", "'use strict'\n\nconst { iteratorMixin } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { webidl } = require('./webidl')\nconst { File: NativeFile } = require('node:buffer')\nconst nodeUtil = require('node:util')\n\n/** @type {globalThis['File']} */\nconst File = globalThis.File ?? NativeFile\n\n// https://xhr.spec.whatwg.org/#formdata\nclass FormData {\n #state = []\n\n constructor (form) {\n webidl.util.markAsUncloneable(this)\n\n if (form !== undefined) {\n throw webidl.errors.conversionFailed({\n prefix: 'FormData constructor',\n argument: 'Argument 1',\n types: ['undefined']\n })\n }\n }\n\n append (name, value, filename = undefined) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.append'\n webidl.argumentLengthCheck(arguments, 2, prefix)\n\n name = webidl.converters.USVString(name)\n\n if (arguments.length === 3 || webidl.is.Blob(value)) {\n value = webidl.converters.Blob(value, prefix, 'value')\n\n if (filename !== undefined) {\n filename = webidl.converters.USVString(filename)\n }\n } else {\n value = webidl.converters.USVString(value)\n }\n\n // 1. Let value be value if given; otherwise blobValue.\n\n // 2. Let entry be the result of creating an entry with\n // name, value, and filename if given.\n const entry = makeEntry(name, value, filename)\n\n // 3. Append entry to this\u2019s entry list.\n this.#state.push(entry)\n }\n\n delete (name) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.delete'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n name = webidl.converters.USVString(name)\n\n // The delete(name) method steps are to remove all entries whose name\n // is name from this\u2019s entry list.\n this.#state = this.#state.filter(entry => entry.name !== name)\n }\n\n get (name) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.get'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n name = webidl.converters.USVString(name)\n\n // 1. If there is no entry whose name is name in this\u2019s entry list,\n // then return null.\n const idx = this.#state.findIndex((entry) => entry.name === name)\n if (idx === -1) {\n return null\n }\n\n // 2. Return the value of the first entry whose name is name from\n // this\u2019s entry list.\n return this.#state[idx].value\n }\n\n getAll (name) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.getAll'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n name = webidl.converters.USVString(name)\n\n // 1. If there is no entry whose name is name in this\u2019s entry list,\n // then return the empty list.\n // 2. Return the values of all entries whose name is name, in order,\n // from this\u2019s entry list.\n return this.#state\n .filter((entry) => entry.name === name)\n .map((entry) => entry.value)\n }\n\n has (name) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.has'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n name = webidl.converters.USVString(name)\n\n // The has(name) method steps are to return true if there is an entry\n // whose name is name in this\u2019s entry list; otherwise false.\n return this.#state.findIndex((entry) => entry.name === name) !== -1\n }\n\n set (name, value, filename = undefined) {\n webidl.brandCheck(this, FormData)\n\n const prefix = 'FormData.set'\n webidl.argumentLengthCheck(arguments, 2, prefix)\n\n name = webidl.converters.USVString(name)\n\n if (arguments.length === 3 || webidl.is.Blob(value)) {\n value = webidl.converters.Blob(value, prefix, 'value')\n\n if (filename !== undefined) {\n filename = webidl.converters.USVString(filename)\n }\n } else {\n value = webidl.converters.USVString(value)\n }\n\n // The set(name, value) and set(name, blobValue, filename) method steps\n // are:\n\n // 1. Let value be value if given; otherwise blobValue.\n\n // 2. Let entry be the result of creating an entry with name, value, and\n // filename if given.\n const entry = makeEntry(name, value, filename)\n\n // 3. If there are entries in this\u2019s entry list whose name is name, then\n // replace the first such entry with entry and remove the others.\n const idx = this.#state.findIndex((entry) => entry.name === name)\n if (idx !== -1) {\n this.#state = [\n ...this.#state.slice(0, idx),\n entry,\n ...this.#state.slice(idx + 1).filter((entry) => entry.name !== name)\n ]\n } else {\n // 4. Otherwise, append entry to this\u2019s entry list.\n this.#state.push(entry)\n }\n }\n\n [nodeUtil.inspect.custom] (depth, options) {\n const state = this.#state.reduce((a, b) => {\n if (a[b.name]) {\n if (Array.isArray(a[b.name])) {\n a[b.name].push(b.value)\n } else {\n a[b.name] = [a[b.name], b.value]\n }\n } else {\n a[b.name] = b.value\n }\n\n return a\n }, { __proto__: null })\n\n options.depth ??= depth\n options.colors ??= true\n\n const output = nodeUtil.formatWithOptions(options, state)\n\n // remove [Object null prototype]\n return `FormData ${output.slice(output.indexOf(']') + 2)}`\n }\n\n /**\n * @param {FormData} formData\n */\n static getFormDataState (formData) {\n return formData.#state\n }\n\n /**\n * @param {FormData} formData\n * @param {any[]} newState\n */\n static setFormDataState (formData, newState) {\n formData.#state = newState\n }\n}\n\nconst { getFormDataState, setFormDataState } = FormData\nReflect.deleteProperty(FormData, 'getFormDataState')\nReflect.deleteProperty(FormData, 'setFormDataState')\n\niteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')\n\nObject.defineProperties(FormData.prototype, {\n append: kEnumerableProperty,\n delete: kEnumerableProperty,\n get: kEnumerableProperty,\n getAll: kEnumerableProperty,\n has: kEnumerableProperty,\n set: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'FormData',\n configurable: true\n }\n})\n\n/**\n * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry\n * @param {string} name\n * @param {string|Blob} value\n * @param {?string} filename\n * @returns\n */\nfunction makeEntry (name, value, filename) {\n // 1. Set name to the result of converting name into a scalar value string.\n // Note: This operation was done by the webidl converter USVString.\n\n // 2. If value is a string, then set value to the result of converting\n // value into a scalar value string.\n if (typeof value === 'string') {\n // Note: This operation was done by the webidl converter USVString.\n } else {\n // 3. Otherwise:\n\n // 1. If value is not a File object, then set value to a new File object,\n // representing the same bytes, whose name attribute value is \"blob\"\n if (!webidl.is.File(value)) {\n value = new File([value], 'blob', { type: value.type })\n }\n\n // 2. If filename is given, then set value to a new File object,\n // representing the same bytes, whose name attribute is filename.\n if (filename !== undefined) {\n /** @type {FilePropertyBag} */\n const options = {\n type: value.type,\n lastModified: value.lastModified\n }\n\n value = new File([value], filename, options)\n }\n }\n\n // 4. Return an entry whose name is name and whose value is value.\n return { name, value }\n}\n\nwebidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)\n\nmodule.exports = { FormData, makeEntry, setFormDataState }\n", "'use strict'\n\nconst { isUSVString, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { utf8DecodeBytes } = require('./util')\nconst { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('./webidl')\nconst assert = require('node:assert')\nconst { File: NodeFile } = require('node:buffer')\n\nconst File = globalThis.File ?? NodeFile\n\nconst formDataNameBuffer = Buffer.from('form-data; name=\"')\nconst filenameBuffer = Buffer.from('filename')\nconst dd = Buffer.from('--')\nconst ddcrlf = Buffer.from('--\\r\\n')\n\n/**\n * @param {string} chars\n */\nfunction isAsciiString (chars) {\n for (let i = 0; i < chars.length; ++i) {\n if ((chars.charCodeAt(i) & ~0x7F) !== 0) {\n return false\n }\n }\n return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-boundary\n * @param {string} boundary\n */\nfunction validateBoundary (boundary) {\n const length = boundary.length\n\n // - its length is greater or equal to 27 and lesser or equal to 70, and\n if (length < 27 || length > 70) {\n return false\n }\n\n // - it is composed by bytes in the ranges 0x30 to 0x39, 0x41 to 0x5A, or\n // 0x61 to 0x7A, inclusive (ASCII alphanumeric), or which are 0x27 ('),\n // 0x2D (-) or 0x5F (_).\n for (let i = 0; i < length; ++i) {\n const cp = boundary.charCodeAt(i)\n\n if (!(\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5a) ||\n (cp >= 0x61 && cp <= 0x7a) ||\n cp === 0x27 ||\n cp === 0x2d ||\n cp === 0x5f\n )) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-parser\n * @param {Buffer} input\n * @param {ReturnType<import('./data-url')['parseMIMEType']>} mimeType\n */\nfunction multipartFormDataParser (input, mimeType) {\n // 1. Assert: mimeType\u2019s essence is \"multipart/form-data\".\n assert(mimeType !== 'failure' && mimeType.essence === 'multipart/form-data')\n\n const boundaryString = mimeType.parameters.get('boundary')\n\n // 2. If mimeType\u2019s parameters[\"boundary\"] does not exist, return failure.\n // Otherwise, let boundary be the result of UTF-8 decoding mimeType\u2019s\n // parameters[\"boundary\"].\n if (boundaryString === undefined) {\n throw parsingError('missing boundary in content-type header')\n }\n\n const boundary = Buffer.from(`--${boundaryString}`, 'utf8')\n\n // 3. Let entry list be an empty entry list.\n const entryList = []\n\n // 4. Let position be a pointer to a byte in input, initially pointing at\n // the first byte.\n const position = { position: 0 }\n\n // Note: undici addition, allows leading and trailing CRLFs.\n while (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n position.position += 2\n }\n\n let trailing = input.length\n\n while (input[trailing - 1] === 0x0a && input[trailing - 2] === 0x0d) {\n trailing -= 2\n }\n\n if (trailing !== input.length) {\n input = input.subarray(0, trailing)\n }\n\n // 5. While true:\n while (true) {\n // 5.1. If position points to a sequence of bytes starting with 0x2D 0x2D\n // (`--`) followed by boundary, advance position by 2 + the length of\n // boundary. Otherwise, return failure.\n // Note: boundary is padded with 2 dashes already, no need to add 2.\n if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {\n position.position += boundary.length\n } else {\n throw parsingError('expected a value starting with -- and the boundary')\n }\n\n // 5.2. If position points to the sequence of bytes 0x2D 0x2D 0x0D 0x0A\n // (`--` followed by CR LF) followed by the end of input, return entry list.\n // Note: a body does NOT need to end with CRLF. It can end with --.\n if (\n (position.position === input.length - 2 && bufferStartsWith(input, dd, position)) ||\n (position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position))\n ) {\n return entryList\n }\n\n // 5.3. If position does not point to a sequence of bytes starting with 0x0D\n // 0x0A (CR LF), return failure.\n if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n throw parsingError('expected CRLF')\n }\n\n // 5.4. Advance position by 2. (This skips past the newline.)\n position.position += 2\n\n // 5.5. Let name, filename and contentType be the result of parsing\n // multipart/form-data headers on input and position, if the result\n // is not failure. Otherwise, return failure.\n const result = parseMultipartFormDataHeaders(input, position)\n\n let { name, filename, contentType, encoding } = result\n\n // 5.6. Advance position by 2. (This skips past the empty line that marks\n // the end of the headers.)\n position.position += 2\n\n // 5.7. Let body be the empty byte sequence.\n let body\n\n // 5.8. Body loop: While position is not past the end of input:\n // TODO: the steps here are completely wrong\n {\n const boundaryIndex = input.indexOf(boundary.subarray(2), position.position)\n\n if (boundaryIndex === -1) {\n throw parsingError('expected boundary after body')\n }\n\n body = input.subarray(position.position, boundaryIndex - 4)\n\n position.position += body.length\n\n // Note: position must be advanced by the body's length before being\n // decoded, otherwise the parsing will fail.\n if (encoding === 'base64') {\n body = Buffer.from(body.toString(), 'base64')\n }\n }\n\n // 5.9. If position does not point to a sequence of bytes starting with\n // 0x0D 0x0A (CR LF), return failure. Otherwise, advance position by 2.\n if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n throw parsingError('expected CRLF')\n } else {\n position.position += 2\n }\n\n // 5.10. If filename is not null:\n let value\n\n if (filename !== null) {\n // 5.10.1. If contentType is null, set contentType to \"text/plain\".\n contentType ??= 'text/plain'\n\n // 5.10.2. If contentType is not an ASCII string, set contentType to the empty string.\n\n // Note: `buffer.isAscii` can be used at zero-cost, but converting a string to a buffer is a high overhead.\n // Content-Type is a relatively small string, so it is faster to use `String#charCodeAt`.\n if (!isAsciiString(contentType)) {\n contentType = ''\n }\n\n // 5.10.3. Let value be a new File object with name filename, type contentType, and body body.\n value = new File([body], filename, { type: contentType })\n } else {\n // 5.11. Otherwise:\n\n // 5.11.1. Let value be the UTF-8 decoding without BOM of body.\n value = utf8DecodeBytes(Buffer.from(body))\n }\n\n // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.\n assert(isUSVString(name))\n assert((typeof value === 'string' && isUSVString(value)) || webidl.is.File(value))\n\n // 5.13. Create an entry with name and value, and append it to entry list.\n entryList.push(makeEntry(name, value, filename))\n }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-multipart-form-data-headers\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataHeaders (input, position) {\n // 1. Let name, filename and contentType be null.\n let name = null\n let filename = null\n let contentType = null\n let encoding = null\n\n // 2. While true:\n while (true) {\n // 2.1. If position points to a sequence of bytes starting with 0x0D 0x0A (CR LF):\n if (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n // 2.1.1. If name is null, return failure.\n if (name === null) {\n throw parsingError('header name is null')\n }\n\n // 2.1.2. Return name, filename and contentType.\n return { name, filename, contentType, encoding }\n }\n\n // 2.2. Let header name be the result of collecting a sequence of bytes that are\n // not 0x0A (LF), 0x0D (CR) or 0x3A (:), given position.\n let headerName = collectASequenceOfBytes(\n (char) => char !== 0x0a && char !== 0x0d && char !== 0x3a,\n input,\n position\n )\n\n // 2.3. Remove any HTTP tab or space bytes from the start or end of header name.\n headerName = removeChars(headerName, true, true, (char) => char === 0x9 || char === 0x20)\n\n // 2.4. If header name does not match the field-name token production, return failure.\n if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {\n throw parsingError('header name does not match the field-name token production')\n }\n\n // 2.5. If the byte at position is not 0x3A (:), return failure.\n if (input[position.position] !== 0x3a) {\n throw parsingError('expected :')\n }\n\n // 2.6. Advance position by 1.\n position.position++\n\n // 2.7. Collect a sequence of bytes that are HTTP tab or space bytes given position.\n // (Do nothing with those bytes.)\n collectASequenceOfBytes(\n (char) => char === 0x20 || char === 0x09,\n input,\n position\n )\n\n // 2.8. Byte-lowercase header name and switch on the result:\n switch (bufferToLowerCasedHeaderName(headerName)) {\n case 'content-disposition': {\n // 1. Set name and filename to null.\n name = filename = null\n\n // 2. If position does not point to a sequence of bytes starting with\n // `form-data; name=\"`, return failure.\n if (!bufferStartsWith(input, formDataNameBuffer, position)) {\n throw parsingError('expected form-data; name=\" for content-disposition header')\n }\n\n // 3. Advance position so it points at the byte after the next 0x22 (\")\n // byte (the one in the sequence of bytes matched above).\n position.position += 17\n\n // 4. Set name to the result of parsing a multipart/form-data name given\n // input and position, if the result is not failure. Otherwise, return\n // failure.\n name = parseMultipartFormDataName(input, position)\n\n // 5. If position points to a sequence of bytes starting with `; filename=\"`:\n if (input[position.position] === 0x3b /* ; */ && input[position.position + 1] === 0x20 /* ' ' */) {\n const at = { position: position.position + 2 }\n\n if (bufferStartsWith(input, filenameBuffer, at)) {\n if (input[at.position + 8] === 0x2a /* '*' */) {\n at.position += 10 // skip past filename*=\n\n // Remove leading http tab and spaces. See RFC for examples.\n // https://datatracker.ietf.org/doc/html/rfc6266#section-5\n collectASequenceOfBytes(\n (char) => char === 0x20 || char === 0x09,\n input,\n at\n )\n\n const headerValue = collectASequenceOfBytes(\n (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a, // ' ' or CRLF\n input,\n at\n )\n\n if (\n (headerValue[0] !== 0x75 && headerValue[0] !== 0x55) || // u or U\n (headerValue[1] !== 0x74 && headerValue[1] !== 0x54) || // t or T\n (headerValue[2] !== 0x66 && headerValue[2] !== 0x46) || // f or F\n headerValue[3] !== 0x2d || // -\n headerValue[4] !== 0x38 // 8\n ) {\n throw parsingError('unknown encoding, expected utf-8\\'\\'')\n }\n\n // skip utf-8''\n filename = decodeURIComponent(new TextDecoder().decode(headerValue.subarray(7)))\n\n position.position = at.position\n } else {\n // 1. Advance position so it points at the byte after the next 0x22 (\") byte\n // (the one in the sequence of bytes matched above).\n position.position += 11\n\n // Remove leading http tab and spaces. See RFC for examples.\n // https://datatracker.ietf.org/doc/html/rfc6266#section-5\n collectASequenceOfBytes(\n (char) => char === 0x20 || char === 0x09,\n input,\n position\n )\n\n position.position++ // skip past \" after removing whitespace\n\n // 2. Set filename to the result of parsing a multipart/form-data name given\n // input and position, if the result is not failure. Otherwise, return failure.\n filename = parseMultipartFormDataName(input, position)\n }\n }\n }\n\n break\n }\n case 'content-type': {\n // 1. Let header value be the result of collecting a sequence of bytes that are\n // not 0x0A (LF) or 0x0D (CR), given position.\n let headerValue = collectASequenceOfBytes(\n (char) => char !== 0x0a && char !== 0x0d,\n input,\n position\n )\n\n // 2. Remove any HTTP tab or space bytes from the end of header value.\n headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n // 3. Set contentType to the isomorphic decoding of header value.\n contentType = isomorphicDecode(headerValue)\n\n break\n }\n case 'content-transfer-encoding': {\n let headerValue = collectASequenceOfBytes(\n (char) => char !== 0x0a && char !== 0x0d,\n input,\n position\n )\n\n headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n encoding = isomorphicDecode(headerValue)\n\n break\n }\n default: {\n // Collect a sequence of bytes that are not 0x0A (LF) or 0x0D (CR), given position.\n // (Do nothing with those bytes.)\n collectASequenceOfBytes(\n (char) => char !== 0x0a && char !== 0x0d,\n input,\n position\n )\n }\n }\n\n // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A\n // (CR LF), return failure. Otherwise, advance position by 2 (past the newline).\n if (input[position.position] !== 0x0d && input[position.position + 1] !== 0x0a) {\n throw parsingError('expected CRLF')\n } else {\n position.position += 2\n }\n }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-a-multipart-form-data-name\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataName (input, position) {\n // 1. Assert: The byte at (position - 1) is 0x22 (\").\n assert(input[position.position - 1] === 0x22)\n\n // 2. Let name be the result of collecting a sequence of bytes that are not 0x0A (LF), 0x0D (CR) or 0x22 (\"), given position.\n /** @type {string | Buffer} */\n let name = collectASequenceOfBytes(\n (char) => char !== 0x0a && char !== 0x0d && char !== 0x22,\n input,\n position\n )\n\n // 3. If the byte at position is not 0x22 (\"), return failure. Otherwise, advance position by 1.\n if (input[position.position] !== 0x22) {\n throw parsingError('expected \"')\n } else {\n position.position++\n }\n\n // 4. Replace any occurrence of the following subsequences in name with the given byte:\n // - `%0A`: 0x0A (LF)\n // - `%0D`: 0x0D (CR)\n // - `%22`: 0x22 (\")\n name = new TextDecoder().decode(name)\n .replace(/%0A/ig, '\\n')\n .replace(/%0D/ig, '\\r')\n .replace(/%22/g, '\"')\n\n // 5. Return the UTF-8 decoding without BOM of name.\n return name\n}\n\n/**\n * @param {(char: number) => boolean} condition\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfBytes (condition, input, position) {\n let start = position.position\n\n while (start < input.length && condition(input[start])) {\n ++start\n }\n\n return input.subarray(position.position, (position.position = start))\n}\n\n/**\n * @param {Buffer} buf\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {Buffer}\n */\nfunction removeChars (buf, leading, trailing, predicate) {\n let lead = 0\n let trail = buf.length - 1\n\n if (leading) {\n while (lead < buf.length && predicate(buf[lead])) lead++\n }\n\n if (trailing) {\n while (trail > 0 && predicate(buf[trail])) trail--\n }\n\n return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1)\n}\n\n/**\n * Checks if {@param buffer} starts with {@param start}\n * @param {Buffer} buffer\n * @param {Buffer} start\n * @param {{ position: number }} position\n */\nfunction bufferStartsWith (buffer, start, position) {\n if (buffer.length < start.length) {\n return false\n }\n\n for (let i = 0; i < start.length; i++) {\n if (start[i] !== buffer[position.position + i]) {\n return false\n }\n }\n\n return true\n}\n\nfunction parsingError (cause) {\n return new TypeError('Failed to parse body as FormData.', { cause: new TypeError(cause) })\n}\n\nmodule.exports = {\n multipartFormDataParser,\n validateBoundary\n}\n", "'use strict'\n\nconst util = require('../../core/util')\nconst {\n ReadableStreamFrom,\n readableStreamClose,\n createDeferredPromise,\n fullyReadBody,\n extractMimeType,\n utf8DecodeBytes\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('./webidl')\nconst { Blob } = require('node:buffer')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isArrayBuffer } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nlet random\n\ntry {\n const crypto = require('node:crypto')\n random = (max) => crypto.randomInt(0, max)\n} catch {\n random = (max) => Math.floor(Math.random() * max)\n}\n\nconst textEncoder = new TextEncoder()\nfunction noop () {}\n\nconst hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf('v18') !== 0\nlet streamRegistry\n\nif (hasFinalizationRegistry) {\n streamRegistry = new FinalizationRegistry((weakRef) => {\n const stream = weakRef.deref()\n if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {\n stream.cancel('Response object has been garbage collected').catch(noop)\n }\n })\n}\n\n// https://fetch.spec.whatwg.org/#concept-bodyinit-extract\nfunction extractBody (object, keepalive = false) {\n // 1. Let stream be null.\n let stream = null\n\n // 2. If object is a ReadableStream object, then set stream to object.\n if (webidl.is.ReadableStream(object)) {\n stream = object\n } else if (webidl.is.Blob(object)) {\n // 3. Otherwise, if object is a Blob object, set stream to the\n // result of running object\u2019s get stream.\n stream = object.stream()\n } else {\n // 4. Otherwise, set stream to a new ReadableStream object, and set\n // up stream with byte reading support.\n stream = new ReadableStream({\n async pull (controller) {\n const buffer = typeof source === 'string' ? textEncoder.encode(source) : source\n\n if (buffer.byteLength) {\n controller.enqueue(buffer)\n }\n\n queueMicrotask(() => readableStreamClose(controller))\n },\n start () {},\n type: 'bytes'\n })\n }\n\n // 5. Assert: stream is a ReadableStream object.\n assert(webidl.is.ReadableStream(stream))\n\n // 6. Let action be null.\n let action = null\n\n // 7. Let source be null.\n let source = null\n\n // 8. Let length be null.\n let length = null\n\n // 9. Let type be null.\n let type = null\n\n // 10. Switch on object:\n if (typeof object === 'string') {\n // Set source to the UTF-8 encoding of object.\n // Note: setting source to a Uint8Array here breaks some mocking assumptions.\n source = object\n\n // Set type to `text/plain;charset=UTF-8`.\n type = 'text/plain;charset=UTF-8'\n } else if (webidl.is.URLSearchParams(object)) {\n // URLSearchParams\n\n // spec says to run application/x-www-form-urlencoded on body.list\n // this is implemented in Node.js as apart of an URLSearchParams instance toString method\n // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490\n // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100\n\n // Set source to the result of running the application/x-www-form-urlencoded serializer with object\u2019s list.\n source = object.toString()\n\n // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.\n type = 'application/x-www-form-urlencoded;charset=UTF-8'\n } else if (isArrayBuffer(object)) {\n // BufferSource/ArrayBuffer\n\n // Set source to a copy of the bytes held by object.\n source = new Uint8Array(object.slice())\n } else if (ArrayBuffer.isView(object)) {\n // BufferSource/ArrayBufferView\n\n // Set source to a copy of the bytes held by object.\n source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))\n } else if (webidl.is.FormData(object)) {\n const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`\n const prefix = `--${boundary}\\r\\nContent-Disposition: form-data`\n\n /*! formdata-polyfill. MIT License. Jimmy W\u00E4rting <https://jimmy.warting.se/opensource> */\n const escape = (str) =>\n str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n const normalizeLinefeeds = (value) => value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n\n // Set action to this step: run the multipart/form-data\n // encoding algorithm, with object\u2019s entry list and UTF-8.\n // - This ensures that the body is immutable and can't be changed afterwords\n // - That the content-length is calculated in advance.\n // - And that all parts are pre-encoded and ready to be sent.\n\n const blobParts = []\n const rn = new Uint8Array([13, 10]) // '\\r\\n'\n length = 0\n let hasUnknownSizeValue = false\n\n for (const [name, value] of object) {\n if (typeof value === 'string') {\n const chunk = textEncoder.encode(prefix +\n `; name=\"${escape(normalizeLinefeeds(name))}\"` +\n `\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n blobParts.push(chunk)\n length += chunk.byteLength\n } else {\n const chunk = textEncoder.encode(`${prefix}; name=\"${escape(normalizeLinefeeds(name))}\"` +\n (value.name ? `; filename=\"${escape(value.name)}\"` : '') + '\\r\\n' +\n `Content-Type: ${\n value.type || 'application/octet-stream'\n }\\r\\n\\r\\n`)\n blobParts.push(chunk, value, rn)\n if (typeof value.size === 'number') {\n length += chunk.byteLength + value.size + rn.byteLength\n } else {\n hasUnknownSizeValue = true\n }\n }\n }\n\n // CRLF is appended to the body to function with legacy servers and match other implementations.\n // https://github.com/curl/curl/blob/3434c6b46e682452973972e8313613dfa58cd690/lib/mime.c#L1029-L1030\n // https://github.com/form-data/form-data/issues/63\n const chunk = textEncoder.encode(`--${boundary}--\\r\\n`)\n blobParts.push(chunk)\n length += chunk.byteLength\n if (hasUnknownSizeValue) {\n length = null\n }\n\n // Set source to object.\n source = object\n\n action = async function * () {\n for (const part of blobParts) {\n if (part.stream) {\n yield * part.stream()\n } else {\n yield part\n }\n }\n }\n\n // Set type to `multipart/form-data; boundary=`,\n // followed by the multipart/form-data boundary string generated\n // by the multipart/form-data encoding algorithm.\n type = `multipart/form-data; boundary=${boundary}`\n } else if (webidl.is.Blob(object)) {\n // Blob\n\n // Set source to object.\n source = object\n\n // Set length to object\u2019s size.\n length = object.size\n\n // If object\u2019s type attribute is not the empty byte sequence, set\n // type to its value.\n if (object.type) {\n type = object.type\n }\n } else if (typeof object[Symbol.asyncIterator] === 'function') {\n // If keepalive is true, then throw a TypeError.\n if (keepalive) {\n throw new TypeError('keepalive')\n }\n\n // If object is disturbed or locked, then throw a TypeError.\n if (util.isDisturbed(object) || object.locked) {\n throw new TypeError(\n 'Response body object should not be disturbed or locked'\n )\n }\n\n stream =\n webidl.is.ReadableStream(object) ? object : ReadableStreamFrom(object)\n }\n\n // 11. If source is a byte sequence, then set action to a\n // step that returns source and length to source\u2019s length.\n if (typeof source === 'string' || util.isBuffer(source)) {\n length = Buffer.byteLength(source)\n }\n\n // 12. If action is non-null, then run these steps in in parallel:\n if (action != null) {\n // Run action.\n let iterator\n stream = new ReadableStream({\n async start () {\n iterator = action(object)[Symbol.asyncIterator]()\n },\n async pull (controller) {\n const { value, done } = await iterator.next()\n if (done) {\n // When running action is done, close stream.\n queueMicrotask(() => {\n controller.close()\n controller.byobRequest?.respond(0)\n })\n } else {\n // Whenever one or more bytes are available and stream is not errored,\n // enqueue a Uint8Array wrapping an ArrayBuffer containing the available\n // bytes into stream.\n if (!isErrored(stream)) {\n const buffer = new Uint8Array(value)\n if (buffer.byteLength) {\n controller.enqueue(buffer)\n }\n }\n }\n return controller.desiredSize > 0\n },\n async cancel (reason) {\n await iterator.return()\n },\n type: 'bytes'\n })\n }\n\n // 13. Let body be a body whose stream is stream, source is source,\n // and length is length.\n const body = { stream, source, length }\n\n // 14. Return (body, type).\n return [body, type]\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit-safely-extract\nfunction safelyExtractBody (object, keepalive = false) {\n // To safely extract a body and a `Content-Type` value from\n // a byte sequence or BodyInit object object, run these steps:\n\n // 1. If object is a ReadableStream object, then:\n if (webidl.is.ReadableStream(object)) {\n // Assert: object is neither disturbed nor locked.\n // istanbul ignore next\n assert(!util.isDisturbed(object), 'The body has already been consumed.')\n // istanbul ignore next\n assert(!object.locked, 'The stream is locked.')\n }\n\n // 2. Return the results of extracting object.\n return extractBody(object, keepalive)\n}\n\nfunction cloneBody (instance, body) {\n // To clone a body body, run these steps:\n\n // https://fetch.spec.whatwg.org/#concept-body-clone\n\n // 1. Let \u00AB out1, out2 \u00BB be the result of teeing body\u2019s stream.\n const [out1, out2] = body.stream.tee()\n\n if (hasFinalizationRegistry) {\n streamRegistry.register(instance, new WeakRef(out1))\n }\n\n // 2. Set body\u2019s stream to out1.\n body.stream = out1\n\n // 3. Return a body whose stream is out2 and other members are copied from body.\n return {\n stream: out2,\n length: body.length,\n source: body.source\n }\n}\n\nfunction throwIfAborted (state) {\n if (state.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError')\n }\n}\n\nfunction bodyMixinMethods (instance, getInternalState) {\n const methods = {\n blob () {\n // The blob() method steps are to return the result of\n // running consume body with this and the following step\n // given a byte sequence bytes: return a Blob whose\n // contents are bytes and whose type attribute is this\u2019s\n // MIME type.\n return consumeBody(this, (bytes) => {\n let mimeType = bodyMimeType(getInternalState(this))\n\n if (mimeType === null) {\n mimeType = ''\n } else if (mimeType) {\n mimeType = serializeAMimeType(mimeType)\n }\n\n // Return a Blob whose contents are bytes and type attribute\n // is mimeType.\n return new Blob([bytes], { type: mimeType })\n }, instance, getInternalState)\n },\n\n arrayBuffer () {\n // The arrayBuffer() method steps are to return the result\n // of running consume body with this and the following step\n // given a byte sequence bytes: return a new ArrayBuffer\n // whose contents are bytes.\n return consumeBody(this, (bytes) => {\n return new Uint8Array(bytes).buffer\n }, instance, getInternalState)\n },\n\n text () {\n // The text() method steps are to return the result of running\n // consume body with this and UTF-8 decode.\n return consumeBody(this, utf8DecodeBytes, instance, getInternalState)\n },\n\n json () {\n // The json() method steps are to return the result of running\n // consume body with this and parse JSON from bytes.\n return consumeBody(this, parseJSONFromBytes, instance, getInternalState)\n },\n\n formData () {\n // The formData() method steps are to return the result of running\n // consume body with this and the following step given a byte sequence bytes:\n return consumeBody(this, (value) => {\n // 1. Let mimeType be the result of get the MIME type with this.\n const mimeType = bodyMimeType(getInternalState(this))\n\n // 2. If mimeType is non-null, then switch on mimeType\u2019s essence and run\n // the corresponding steps:\n if (mimeType !== null) {\n switch (mimeType.essence) {\n case 'multipart/form-data': {\n // 1. ... [long step]\n // 2. If that fails for some reason, then throw a TypeError.\n const parsed = multipartFormDataParser(value, mimeType)\n\n // 3. Return a new FormData object, appending each entry,\n // resulting from the parsing operation, to its entry list.\n const fd = new FormData()\n setFormDataState(fd, parsed)\n\n return fd\n }\n case 'application/x-www-form-urlencoded': {\n // 1. Let entries be the result of parsing bytes.\n const entries = new URLSearchParams(value.toString())\n\n // 2. If entries is failure, then throw a TypeError.\n\n // 3. Return a new FormData object whose entry list is entries.\n const fd = new FormData()\n\n for (const [name, value] of entries) {\n fd.append(name, value)\n }\n\n return fd\n }\n }\n }\n\n // 3. Throw a TypeError.\n throw new TypeError(\n 'Content-Type was not one of \"multipart/form-data\" or \"application/x-www-form-urlencoded\".'\n )\n }, instance, getInternalState)\n },\n\n bytes () {\n // The bytes() method steps are to return the result of running consume body\n // with this and the following step given a byte sequence bytes: return the\n // result of creating a Uint8Array from bytes in this\u2019s relevant realm.\n return consumeBody(this, (bytes) => {\n return new Uint8Array(bytes)\n }, instance, getInternalState)\n }\n }\n\n return methods\n}\n\nfunction mixinBody (prototype, getInternalState) {\n Object.assign(prototype.prototype, bodyMixinMethods(prototype, getInternalState))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-consume-body\n * @param {any} object internal state\n * @param {(value: unknown) => unknown} convertBytesToJSValue\n * @param {any} instance\n * @param {(target: any) => any} getInternalState\n */\nasync function consumeBody (object, convertBytesToJSValue, instance, getInternalState) {\n webidl.brandCheck(object, instance)\n\n const state = getInternalState(object)\n\n // 1. If object is unusable, then return a promise rejected\n // with a TypeError.\n if (bodyUnusable(state)) {\n throw new TypeError('Body is unusable: Body has already been read')\n }\n\n throwIfAborted(state)\n\n // 2. Let promise be a new promise.\n const promise = createDeferredPromise()\n\n // 3. Let errorSteps given error be to reject promise with error.\n const errorSteps = (error) => promise.reject(error)\n\n // 4. Let successSteps given a byte sequence data be to resolve\n // promise with the result of running convertBytesToJSValue\n // with data. If that threw an exception, then run errorSteps\n // with that exception.\n const successSteps = (data) => {\n try {\n promise.resolve(convertBytesToJSValue(data))\n } catch (e) {\n errorSteps(e)\n }\n }\n\n // 5. If object\u2019s body is null, then run successSteps with an\n // empty byte sequence.\n if (state.body == null) {\n successSteps(Buffer.allocUnsafe(0))\n return promise.promise\n }\n\n // 6. Otherwise, fully read object\u2019s body given successSteps,\n // errorSteps, and object\u2019s relevant global object.\n fullyReadBody(state.body, successSteps, errorSteps)\n\n // 7. Return promise.\n return promise.promise\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {any} object internal state\n */\nfunction bodyUnusable (object) {\n const body = object.body\n\n // An object including the Body interface mixin is\n // said to be unusable if its body is non-null and\n // its body\u2019s stream is disturbed or locked.\n return body != null && (body.stream.locked || util.isDisturbed(body.stream))\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value\n * @param {Uint8Array} bytes\n */\nfunction parseJSONFromBytes (bytes) {\n return JSON.parse(utf8DecodeBytes(bytes))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-mime-type\n * @param {any} requestOrResponse internal state\n */\nfunction bodyMimeType (requestOrResponse) {\n // 1. Let headers be null.\n // 2. If requestOrResponse is a Request object, then set headers to requestOrResponse\u2019s request\u2019s header list.\n // 3. Otherwise, set headers to requestOrResponse\u2019s response\u2019s header list.\n /** @type {import('./headers').HeadersList} */\n const headers = requestOrResponse.headersList\n\n // 4. Let mimeType be the result of extracting a MIME type from headers.\n const mimeType = extractMimeType(headers)\n\n // 5. If mimeType is failure, then return null.\n if (mimeType === 'failure') {\n return null\n }\n\n // 6. Return mimeType.\n return mimeType\n}\n\nmodule.exports = {\n extractBody,\n safelyExtractBody,\n cloneBody,\n mixinBody,\n streamRegistry,\n hasFinalizationRegistry,\n bodyUnusable\n}\n", "'use strict'\n\n/* global WebAssembly */\n\nconst assert = require('node:assert')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst timers = require('../util/timers.js')\nconst {\n RequestContentLengthMismatchError,\n ResponseContentLengthMismatchError,\n RequestAbortedError,\n HeadersTimeoutError,\n HeadersOverflowError,\n SocketError,\n InformationalError,\n BodyTimeoutError,\n HTTPParserError,\n ResponseExceededMaxSizeError\n} = require('../core/errors.js')\nconst {\n kUrl,\n kReset,\n kClient,\n kParser,\n kBlocking,\n kRunning,\n kPending,\n kSize,\n kWriting,\n kQueue,\n kNoRef,\n kKeepAliveDefaultTimeout,\n kHostHeader,\n kPendingIdx,\n kRunningIdx,\n kError,\n kPipelining,\n kSocket,\n kKeepAliveTimeoutValue,\n kMaxHeadersSize,\n kKeepAliveMaxTimeout,\n kKeepAliveTimeoutThreshold,\n kHeadersTimeout,\n kBodyTimeout,\n kStrictContentLength,\n kMaxRequests,\n kCounter,\n kMaxResponseSize,\n kOnError,\n kResume,\n kHTTPContext,\n kClosed\n} = require('../core/symbols.js')\n\nconst constants = require('../llhttp/constants.js')\nconst EMPTY_BUF = Buffer.alloc(0)\nconst FastBuffer = Buffer[Symbol.species]\nconst removeAllListeners = util.removeAllListeners\n\nlet extractBody\n\nasync function lazyllhttp () {\n const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined\n\n let mod\n try {\n mod = await WebAssembly.compile(require('../llhttp/llhttp_simd-wasm.js'))\n } catch (e) {\n /* istanbul ignore next */\n\n // We could check if the error was caused by the simd option not\n // being enabled, but the occurring of this other error\n // * https://github.com/emscripten-core/emscripten/issues/11495\n // got me to remove that check to avoid breaking Node 12.\n mod = await WebAssembly.compile(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))\n }\n\n return await WebAssembly.instantiate(mod, {\n env: {\n /**\n * @param {number} p\n * @param {number} at\n * @param {number} len\n * @returns {number}\n */\n wasm_on_url: (p, at, len) => {\n /* istanbul ignore next */\n return 0\n },\n /**\n * @param {number} p\n * @param {number} at\n * @param {number} len\n * @returns {number}\n */\n wasm_on_status: (p, at, len) => {\n assert(currentParser.ptr === p)\n const start = at - currentBufferPtr + currentBufferRef.byteOffset\n return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len))\n },\n /**\n * @param {number} p\n * @returns {number}\n */\n wasm_on_message_begin: (p) => {\n assert(currentParser.ptr === p)\n return currentParser.onMessageBegin()\n },\n /**\n * @param {number} p\n * @param {number} at\n * @param {number} len\n * @returns {number}\n */\n wasm_on_header_field: (p, at, len) => {\n assert(currentParser.ptr === p)\n const start = at - currentBufferPtr + currentBufferRef.byteOffset\n return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len))\n },\n /**\n * @param {number} p\n * @param {number} at\n * @param {number} len\n * @returns {number}\n */\n wasm_on_header_value: (p, at, len) => {\n assert(currentParser.ptr === p)\n const start = at - currentBufferPtr + currentBufferRef.byteOffset\n return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len))\n },\n /**\n * @param {number} p\n * @param {number} statusCode\n * @param {0|1} upgrade\n * @param {0|1} shouldKeepAlive\n * @returns {number}\n */\n wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {\n assert(currentParser.ptr === p)\n return currentParser.onHeadersComplete(statusCode, upgrade === 1, shouldKeepAlive === 1)\n },\n /**\n * @param {number} p\n * @param {number} at\n * @param {number} len\n * @returns {number}\n */\n wasm_on_body: (p, at, len) => {\n assert(currentParser.ptr === p)\n const start = at - currentBufferPtr + currentBufferRef.byteOffset\n return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len))\n },\n /**\n * @param {number} p\n * @returns {number}\n */\n wasm_on_message_complete: (p) => {\n assert(currentParser.ptr === p)\n return currentParser.onMessageComplete()\n }\n\n }\n })\n}\n\nlet llhttpInstance = null\n/**\n * @type {Promise<WebAssembly.Instance>|null}\n */\nlet llhttpPromise = lazyllhttp()\nllhttpPromise.catch()\n\n/**\n * @type {Parser|null}\n */\nlet currentParser = null\nlet currentBufferRef = null\n/**\n * @type {number}\n */\nlet currentBufferSize = 0\nlet currentBufferPtr = null\n\nconst USE_NATIVE_TIMER = 0\nconst USE_FAST_TIMER = 1\n\n// Use fast timers for headers and body to take eventual event loop\n// latency into account.\nconst TIMEOUT_HEADERS = 2 | USE_FAST_TIMER\nconst TIMEOUT_BODY = 4 | USE_FAST_TIMER\n\n// Use native timers to ignore event loop latency for keep-alive\n// handling.\nconst TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER\n\nclass Parser {\n /**\n * @param {import('./client.js')} client\n * @param {import('net').Socket} socket\n * @param {*} llhttp\n */\n constructor (client, socket, { exports }) {\n this.llhttp = exports\n this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)\n this.client = client\n /**\n * @type {import('net').Socket}\n */\n this.socket = socket\n this.timeout = null\n this.timeoutValue = null\n this.timeoutType = null\n this.statusCode = 0\n this.statusText = ''\n this.upgrade = false\n this.headers = []\n this.headersSize = 0\n this.headersMaxSize = client[kMaxHeadersSize]\n this.shouldKeepAlive = false\n this.paused = false\n this.resume = this.resume.bind(this)\n\n this.bytesRead = 0\n\n this.keepAlive = ''\n this.contentLength = ''\n this.connection = ''\n this.maxResponseSize = client[kMaxResponseSize]\n }\n\n setTimeout (delay, type) {\n // If the existing timer and the new timer are of different timer type\n // (fast or native) or have different delay, we need to clear the existing\n // timer and set a new one.\n if (\n delay !== this.timeoutValue ||\n (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)\n ) {\n // If a timeout is already set, clear it with clearTimeout of the fast\n // timer implementation, as it can clear fast and native timers.\n if (this.timeout) {\n timers.clearTimeout(this.timeout)\n this.timeout = null\n }\n\n if (delay) {\n if (type & USE_FAST_TIMER) {\n this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this))\n } else {\n this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this))\n this.timeout.unref()\n }\n }\n\n this.timeoutValue = delay\n } else if (this.timeout) {\n // istanbul ignore else: only for jest\n if (this.timeout.refresh) {\n this.timeout.refresh()\n }\n }\n\n this.timeoutType = type\n }\n\n resume () {\n if (this.socket.destroyed || !this.paused) {\n return\n }\n\n assert(this.ptr != null)\n assert(currentParser === null)\n\n this.llhttp.llhttp_resume(this.ptr)\n\n assert(this.timeoutType === TIMEOUT_BODY)\n if (this.timeout) {\n // istanbul ignore else: only for jest\n if (this.timeout.refresh) {\n this.timeout.refresh()\n }\n }\n\n this.paused = false\n this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.\n this.readMore()\n }\n\n readMore () {\n while (!this.paused && this.ptr) {\n const chunk = this.socket.read()\n if (chunk === null) {\n break\n }\n this.execute(chunk)\n }\n }\n\n /**\n * @param {Buffer} chunk\n */\n execute (chunk) {\n assert(currentParser === null)\n assert(this.ptr != null)\n assert(!this.paused)\n\n const { socket, llhttp } = this\n\n // Allocate a new buffer if the current buffer is too small.\n if (chunk.length > currentBufferSize) {\n if (currentBufferPtr) {\n llhttp.free(currentBufferPtr)\n }\n // Allocate a buffer that is a multiple of 4096 bytes.\n currentBufferSize = Math.ceil(chunk.length / 4096) * 4096\n currentBufferPtr = llhttp.malloc(currentBufferSize)\n }\n\n new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(chunk)\n\n // Call `execute` on the wasm parser.\n // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,\n // and finally the length of bytes to parse.\n // The return value is an error code or `constants.ERROR.OK`.\n try {\n let ret\n\n try {\n currentBufferRef = chunk\n currentParser = this\n ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, chunk.length)\n /* eslint-disable-next-line no-useless-catch */\n } catch (err) {\n /* istanbul ignore next: difficult to make a test case for */\n throw err\n } finally {\n currentParser = null\n currentBufferRef = null\n }\n\n if (ret !== constants.ERROR.OK) {\n const data = chunk.subarray(llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr)\n\n if (ret === constants.ERROR.PAUSED_UPGRADE) {\n this.onUpgrade(data)\n } else if (ret === constants.ERROR.PAUSED) {\n this.paused = true\n socket.unshift(data)\n } else {\n const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n let message = ''\n /* istanbul ignore else: difficult to make a test case for */\n if (ptr) {\n const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)\n message =\n 'Response does not match the HTTP/1.1 protocol (' +\n Buffer.from(llhttp.memory.buffer, ptr, len).toString() +\n ')'\n }\n throw new HTTPParserError(message, constants.ERROR[ret], data)\n }\n }\n } catch (err) {\n util.destroy(socket, err)\n }\n }\n\n destroy () {\n assert(currentParser === null)\n assert(this.ptr != null)\n\n this.llhttp.llhttp_free(this.ptr)\n this.ptr = null\n\n this.timeout && timers.clearTimeout(this.timeout)\n this.timeout = null\n this.timeoutValue = null\n this.timeoutType = null\n\n this.paused = false\n }\n\n /**\n * @param {Buffer} buf\n * @returns {0}\n */\n onStatus (buf) {\n this.statusText = buf.toString()\n return 0\n }\n\n /**\n * @returns {0|-1}\n */\n onMessageBegin () {\n const { socket, client } = this\n\n /* istanbul ignore next: difficult to make a test case for */\n if (socket.destroyed) {\n return -1\n }\n\n const request = client[kQueue][client[kRunningIdx]]\n if (!request) {\n return -1\n }\n request.onResponseStarted()\n\n return 0\n }\n\n /**\n * @param {Buffer} buf\n * @returns {number}\n */\n onHeaderField (buf) {\n const len = this.headers.length\n\n if ((len & 1) === 0) {\n this.headers.push(buf)\n } else {\n this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n }\n\n this.trackHeader(buf.length)\n\n return 0\n }\n\n /**\n * @param {Buffer} buf\n * @returns {number}\n */\n onHeaderValue (buf) {\n let len = this.headers.length\n\n if ((len & 1) === 1) {\n this.headers.push(buf)\n len += 1\n } else {\n this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n }\n\n const key = this.headers[len - 2]\n if (key.length === 10) {\n const headerName = util.bufferToLowerCasedHeaderName(key)\n if (headerName === 'keep-alive') {\n this.keepAlive += buf.toString()\n } else if (headerName === 'connection') {\n this.connection += buf.toString()\n }\n } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {\n this.contentLength += buf.toString()\n }\n\n this.trackHeader(buf.length)\n\n return 0\n }\n\n /**\n * @param {number} len\n */\n trackHeader (len) {\n this.headersSize += len\n if (this.headersSize >= this.headersMaxSize) {\n util.destroy(this.socket, new HeadersOverflowError())\n }\n }\n\n /**\n * @param {Buffer} head\n */\n onUpgrade (head) {\n const { upgrade, client, socket, headers, statusCode } = this\n\n assert(upgrade)\n assert(client[kSocket] === socket)\n assert(!socket.destroyed)\n assert(!this.paused)\n assert((headers.length & 1) === 0)\n\n const request = client[kQueue][client[kRunningIdx]]\n assert(request)\n assert(request.upgrade || request.method === 'CONNECT')\n\n this.statusCode = 0\n this.statusText = ''\n this.shouldKeepAlive = false\n\n this.headers = []\n this.headersSize = 0\n\n socket.unshift(head)\n\n socket[kParser].destroy()\n socket[kParser] = null\n\n socket[kClient] = null\n socket[kError] = null\n\n removeAllListeners(socket)\n\n client[kSocket] = null\n client[kHTTPContext] = null // TODO (fix): This is hacky...\n client[kQueue][client[kRunningIdx]++] = null\n client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))\n\n try {\n request.onUpgrade(statusCode, headers, socket)\n } catch (err) {\n util.destroy(socket, err)\n }\n\n client[kResume]()\n }\n\n /**\n * @param {number} statusCode\n * @param {boolean} upgrade\n * @param {boolean} shouldKeepAlive\n * @returns {number}\n */\n onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {\n const { client, socket, headers, statusText } = this\n\n /* istanbul ignore next: difficult to make a test case for */\n if (socket.destroyed) {\n return -1\n }\n\n const request = client[kQueue][client[kRunningIdx]]\n\n /* istanbul ignore next: difficult to make a test case for */\n if (!request) {\n return -1\n }\n\n assert(!this.upgrade)\n assert(this.statusCode < 200)\n\n if (statusCode === 100) {\n util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n return -1\n }\n\n /* this can only happen if server is misbehaving */\n if (upgrade && !request.upgrade) {\n util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))\n return -1\n }\n\n assert(this.timeoutType === TIMEOUT_HEADERS)\n\n this.statusCode = statusCode\n this.shouldKeepAlive = (\n shouldKeepAlive ||\n // Override llhttp value which does not allow keepAlive for HEAD.\n (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')\n )\n\n if (this.statusCode >= 200) {\n const bodyTimeout = request.bodyTimeout != null\n ? request.bodyTimeout\n : client[kBodyTimeout]\n this.setTimeout(bodyTimeout, TIMEOUT_BODY)\n } else if (this.timeout) {\n // istanbul ignore else: only for jest\n if (this.timeout.refresh) {\n this.timeout.refresh()\n }\n }\n\n if (request.method === 'CONNECT') {\n assert(client[kRunning] === 1)\n this.upgrade = true\n return 2\n }\n\n if (upgrade) {\n assert(client[kRunning] === 1)\n this.upgrade = true\n return 2\n }\n\n assert((this.headers.length & 1) === 0)\n this.headers = []\n this.headersSize = 0\n\n if (this.shouldKeepAlive && client[kPipelining]) {\n const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null\n\n if (keepAliveTimeout != null) {\n const timeout = Math.min(\n keepAliveTimeout - client[kKeepAliveTimeoutThreshold],\n client[kKeepAliveMaxTimeout]\n )\n if (timeout <= 0) {\n socket[kReset] = true\n } else {\n client[kKeepAliveTimeoutValue] = timeout\n }\n } else {\n client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]\n }\n } else {\n // Stop more requests from being dispatched.\n socket[kReset] = true\n }\n\n const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false\n\n if (request.aborted) {\n return -1\n }\n\n if (request.method === 'HEAD') {\n return 1\n }\n\n if (statusCode < 200) {\n return 1\n }\n\n if (socket[kBlocking]) {\n socket[kBlocking] = false\n client[kResume]()\n }\n\n return pause ? constants.ERROR.PAUSED : 0\n }\n\n /**\n * @param {Buffer} buf\n * @returns {number}\n */\n onBody (buf) {\n const { client, socket, statusCode, maxResponseSize } = this\n\n if (socket.destroyed) {\n return -1\n }\n\n const request = client[kQueue][client[kRunningIdx]]\n assert(request)\n\n assert(this.timeoutType === TIMEOUT_BODY)\n if (this.timeout) {\n // istanbul ignore else: only for jest\n if (this.timeout.refresh) {\n this.timeout.refresh()\n }\n }\n\n assert(statusCode >= 200)\n\n if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {\n util.destroy(socket, new ResponseExceededMaxSizeError())\n return -1\n }\n\n this.bytesRead += buf.length\n\n if (request.onData(buf) === false) {\n return constants.ERROR.PAUSED\n }\n\n return 0\n }\n\n /**\n * @returns {number}\n */\n onMessageComplete () {\n const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this\n\n if (socket.destroyed && (!statusCode || shouldKeepAlive)) {\n return -1\n }\n\n if (upgrade) {\n return 0\n }\n\n assert(statusCode >= 100)\n assert((this.headers.length & 1) === 0)\n\n const request = client[kQueue][client[kRunningIdx]]\n assert(request)\n\n this.statusCode = 0\n this.statusText = ''\n this.bytesRead = 0\n this.contentLength = ''\n this.keepAlive = ''\n this.connection = ''\n\n this.headers = []\n this.headersSize = 0\n\n if (statusCode < 200) {\n return 0\n }\n\n /* istanbul ignore next: should be handled by llhttp? */\n if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {\n util.destroy(socket, new ResponseContentLengthMismatchError())\n return -1\n }\n\n request.onComplete(headers)\n\n client[kQueue][client[kRunningIdx]++] = null\n\n if (socket[kWriting]) {\n assert(client[kRunning] === 0)\n // Response completed before request.\n util.destroy(socket, new InformationalError('reset'))\n return constants.ERROR.PAUSED\n } else if (!shouldKeepAlive) {\n util.destroy(socket, new InformationalError('reset'))\n return constants.ERROR.PAUSED\n } else if (socket[kReset] && client[kRunning] === 0) {\n // Destroy socket once all requests have completed.\n // The request at the tail of the pipeline is the one\n // that requested reset and no further requests should\n // have been queued since then.\n util.destroy(socket, new InformationalError('reset'))\n return constants.ERROR.PAUSED\n } else if (client[kPipelining] == null || client[kPipelining] === 1) {\n // We must wait a full event loop cycle to reuse this socket to make sure\n // that non-spec compliant servers are not closing the connection even if they\n // said they won't.\n setImmediate(() => client[kResume]())\n } else {\n client[kResume]()\n }\n\n return 0\n }\n}\n\nfunction onParserTimeout (parser) {\n const { socket, timeoutType, client, paused } = parser.deref()\n\n /* istanbul ignore else */\n if (timeoutType === TIMEOUT_HEADERS) {\n if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {\n assert(!paused, 'cannot be paused while waiting for headers')\n util.destroy(socket, new HeadersTimeoutError())\n }\n } else if (timeoutType === TIMEOUT_BODY) {\n if (!paused) {\n util.destroy(socket, new BodyTimeoutError())\n }\n } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {\n assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])\n util.destroy(socket, new InformationalError('socket idle timeout'))\n }\n}\n\n/**\n * @param {import ('./client.js')} client\n * @param {import('net').Socket} socket\n * @returns\n */\nasync function connectH1 (client, socket) {\n client[kSocket] = socket\n\n if (!llhttpInstance) {\n const noop = () => {}\n socket.on('error', noop)\n llhttpInstance = await llhttpPromise\n llhttpPromise = null\n socket.off('error', noop)\n }\n\n if (socket.errored) {\n throw socket.errored\n }\n\n if (socket.destroyed) {\n throw new SocketError('destroyed')\n }\n\n socket[kNoRef] = false\n socket[kWriting] = false\n socket[kReset] = false\n socket[kBlocking] = false\n socket[kParser] = new Parser(client, socket, llhttpInstance)\n\n util.addListener(socket, 'error', onHttpSocketError)\n util.addListener(socket, 'readable', onHttpSocketReadable)\n util.addListener(socket, 'end', onHttpSocketEnd)\n util.addListener(socket, 'close', onHttpSocketClose)\n\n socket[kClosed] = false\n socket.on('close', onSocketClose)\n\n return {\n version: 'h1',\n defaultPipelining: 1,\n write (request) {\n return writeH1(client, request)\n },\n resume () {\n resumeH1(client)\n },\n /**\n * @param {Error|undefined} err\n * @param {() => void} callback\n */\n destroy (err, callback) {\n if (socket[kClosed]) {\n queueMicrotask(callback)\n } else {\n socket.on('close', callback)\n socket.destroy(err)\n }\n },\n /**\n * @returns {boolean}\n */\n get destroyed () {\n return socket.destroyed\n },\n /**\n * @param {import('../core/request.js')} request\n * @returns {boolean}\n */\n busy (request) {\n if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {\n return true\n }\n\n if (request) {\n if (client[kRunning] > 0 && !request.idempotent) {\n // Non-idempotent request cannot be retried.\n // Ensure that no other requests are inflight and\n // could cause failure.\n return true\n }\n\n if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {\n // Don't dispatch an upgrade until all preceding requests have completed.\n // A misbehaving server might upgrade the connection before all pipelined\n // request has completed.\n return true\n }\n\n if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&\n (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {\n // Request with stream or iterator body can error while other requests\n // are inflight and indirectly error those as well.\n // Ensure this doesn't happen by waiting for inflight\n // to complete before dispatching.\n\n // Request with stream or iterator body cannot be retried.\n // Ensure that no other requests are inflight and\n // could cause failure.\n return true\n }\n }\n\n return false\n }\n }\n}\n\nfunction onHttpSocketError (err) {\n assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n const parser = this[kParser]\n\n // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded\n // to the user.\n if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {\n // We treat all incoming data so for as a valid response.\n parser.onMessageComplete()\n return\n }\n\n this[kError] = err\n\n this[kClient][kOnError](err)\n}\n\nfunction onHttpSocketReadable () {\n this[kParser]?.readMore()\n}\n\nfunction onHttpSocketEnd () {\n const parser = this[kParser]\n\n if (parser.statusCode && !parser.shouldKeepAlive) {\n // We treat all incoming data so far as a valid response.\n parser.onMessageComplete()\n return\n }\n\n util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onHttpSocketClose () {\n const parser = this[kParser]\n\n if (parser) {\n if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n // We treat all incoming data so far as a valid response.\n parser.onMessageComplete()\n }\n\n this[kParser].destroy()\n this[kParser] = null\n }\n\n const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n const client = this[kClient]\n\n client[kSocket] = null\n client[kHTTPContext] = null // TODO (fix): This is hacky...\n\n if (client.destroyed) {\n assert(client[kPending] === 0)\n\n // Fail entire queue.\n const requests = client[kQueue].splice(client[kRunningIdx])\n for (let i = 0; i < requests.length; i++) {\n const request = requests[i]\n util.errorRequest(client, request, err)\n }\n } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {\n // Fail head of pipeline.\n const request = client[kQueue][client[kRunningIdx]]\n client[kQueue][client[kRunningIdx]++] = null\n\n util.errorRequest(client, request, err)\n }\n\n client[kPendingIdx] = client[kRunningIdx]\n\n assert(client[kRunning] === 0)\n\n client.emit('disconnect', client[kUrl], [client], err)\n\n client[kResume]()\n}\n\nfunction onSocketClose () {\n this[kClosed] = true\n}\n\n/**\n * @param {import('./client.js')} client\n */\nfunction resumeH1 (client) {\n const socket = client[kSocket]\n\n if (socket && !socket.destroyed) {\n if (client[kSize] === 0) {\n if (!socket[kNoRef] && socket.unref) {\n socket.unref()\n socket[kNoRef] = true\n }\n } else if (socket[kNoRef] && socket.ref) {\n socket.ref()\n socket[kNoRef] = false\n }\n\n if (client[kSize] === 0) {\n if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {\n socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)\n }\n } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {\n if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {\n const request = client[kQueue][client[kRunningIdx]]\n const headersTimeout = request.headersTimeout != null\n ? request.headersTimeout\n : client[kHeadersTimeout]\n socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)\n }\n }\n }\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\n/**\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @returns\n */\nfunction writeH1 (client, request) {\n const { method, path, host, upgrade, blocking, reset } = request\n\n let { body, headers, contentLength } = request\n\n // https://tools.ietf.org/html/rfc7231#section-4.3.1\n // https://tools.ietf.org/html/rfc7231#section-4.3.2\n // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n // Sending a payload body on a request that does not\n // expect it can cause undefined behavior on some\n // servers and corrupt connection state. Do not\n // re-use the connection for further requests.\n\n const expectsPayload = (\n method === 'PUT' ||\n method === 'POST' ||\n method === 'PATCH' ||\n method === 'QUERY' ||\n method === 'PROPFIND' ||\n method === 'PROPPATCH'\n )\n\n if (util.isFormDataLike(body)) {\n if (!extractBody) {\n extractBody = require('../web/fetch/body.js').extractBody\n }\n\n const [bodyStream, contentType] = extractBody(body)\n if (request.contentType == null) {\n headers.push('content-type', contentType)\n }\n body = bodyStream.stream\n contentLength = bodyStream.length\n } else if (util.isBlobLike(body) && request.contentType == null && body.type) {\n headers.push('content-type', body.type)\n }\n\n if (body && typeof body.read === 'function') {\n // Try to read EOF in order to get length.\n body.read(0)\n }\n\n const bodyLength = util.bodyLength(body)\n\n contentLength = bodyLength ?? contentLength\n\n if (contentLength === null) {\n contentLength = request.contentLength\n }\n\n if (contentLength === 0 && !expectsPayload) {\n // https://tools.ietf.org/html/rfc7230#section-3.3.2\n // A user agent SHOULD NOT send a Content-Length header field when\n // the request message does not contain a payload body and the method\n // semantics do not anticipate such a body.\n\n contentLength = null\n }\n\n // https://github.com/nodejs/undici/issues/2046\n // A user agent may send a Content-Length header with 0 value, this should be allowed.\n if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {\n if (client[kStrictContentLength]) {\n util.errorRequest(client, request, new RequestContentLengthMismatchError())\n return false\n }\n\n process.emitWarning(new RequestContentLengthMismatchError())\n }\n\n const socket = client[kSocket]\n\n /**\n * @param {Error} [err]\n * @returns {void}\n */\n const abort = (err) => {\n if (request.aborted || request.completed) {\n return\n }\n\n util.errorRequest(client, request, err || new RequestAbortedError())\n\n util.destroy(body)\n util.destroy(socket, new InformationalError('aborted'))\n }\n\n try {\n request.onConnect(abort)\n } catch (err) {\n util.errorRequest(client, request, err)\n }\n\n if (request.aborted) {\n return false\n }\n\n if (method === 'HEAD') {\n // https://github.com/mcollina/undici/issues/258\n // Close after a HEAD request to interop with misbehaving servers\n // that may send a body in the response.\n\n socket[kReset] = true\n }\n\n if (upgrade || method === 'CONNECT') {\n // On CONNECT or upgrade, block pipeline from dispatching further\n // requests on this connection.\n\n socket[kReset] = true\n }\n\n if (reset != null) {\n socket[kReset] = reset\n }\n\n if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {\n socket[kReset] = true\n }\n\n if (blocking) {\n socket[kBlocking] = true\n }\n\n let header = `${method} ${path} HTTP/1.1\\r\\n`\n\n if (typeof host === 'string') {\n header += `host: ${host}\\r\\n`\n } else {\n header += client[kHostHeader]\n }\n\n if (upgrade) {\n header += `connection: upgrade\\r\\nupgrade: ${upgrade}\\r\\n`\n } else if (client[kPipelining] && !socket[kReset]) {\n header += 'connection: keep-alive\\r\\n'\n } else {\n header += 'connection: close\\r\\n'\n }\n\n if (Array.isArray(headers)) {\n for (let n = 0; n < headers.length; n += 2) {\n const key = headers[n + 0]\n const val = headers[n + 1]\n\n if (Array.isArray(val)) {\n for (let i = 0; i < val.length; i++) {\n header += `${key}: ${val[i]}\\r\\n`\n }\n } else {\n header += `${key}: ${val}\\r\\n`\n }\n }\n }\n\n if (channels.sendHeaders.hasSubscribers) {\n channels.sendHeaders.publish({ request, headers: header, socket })\n }\n\n /* istanbul ignore else: assertion */\n if (!body || bodyLength === 0) {\n writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)\n } else if (util.isBuffer(body)) {\n writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)\n } else if (util.isBlobLike(body)) {\n if (typeof body.stream === 'function') {\n writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)\n } else {\n writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)\n }\n } else if (util.isStream(body)) {\n writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)\n } else if (util.isIterable(body)) {\n writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)\n } else {\n assert(false)\n }\n\n return true\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {import('stream').Stream} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n */\nfunction writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n let finished = false\n\n const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n\n /**\n * @param {Buffer} chunk\n * @returns {void}\n */\n const onData = function (chunk) {\n if (finished) {\n return\n }\n\n try {\n if (!writer.write(chunk) && this.pause) {\n this.pause()\n }\n } catch (err) {\n util.destroy(this, err)\n }\n }\n\n /**\n * @returns {void}\n */\n const onDrain = function () {\n if (finished) {\n return\n }\n\n if (body.resume) {\n body.resume()\n }\n }\n\n /**\n * @returns {void}\n */\n const onClose = function () {\n // 'close' might be emitted *before* 'error' for\n // broken streams. Wait a tick to avoid this case.\n queueMicrotask(() => {\n // It's only safe to remove 'error' listener after\n // 'close'.\n body.removeListener('error', onFinished)\n })\n\n if (!finished) {\n const err = new RequestAbortedError()\n queueMicrotask(() => onFinished(err))\n }\n }\n\n /**\n * @param {Error} [err]\n * @returns\n */\n const onFinished = function (err) {\n if (finished) {\n return\n }\n\n finished = true\n\n assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))\n\n socket\n .off('drain', onDrain)\n .off('error', onFinished)\n\n body\n .removeListener('data', onData)\n .removeListener('end', onFinished)\n .removeListener('close', onClose)\n\n if (!err) {\n try {\n writer.end()\n } catch (er) {\n err = er\n }\n }\n\n writer.destroy(err)\n\n if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {\n util.destroy(body, err)\n } else {\n util.destroy(body)\n }\n }\n\n body\n .on('data', onData)\n .on('end', onFinished)\n .on('error', onFinished)\n .on('close', onClose)\n\n if (body.resume) {\n body.resume()\n }\n\n socket\n .on('drain', onDrain)\n .on('error', onFinished)\n\n if (body.errorEmitted ?? body.errored) {\n setImmediate(() => onFinished(body.errored))\n } else if (body.endEmitted ?? body.readableEnded) {\n setImmediate(() => onFinished(null))\n }\n\n if (body.closeEmitted ?? body.closed) {\n setImmediate(onClose)\n }\n}\n\n/**\n * @typedef AbortCallback\n * @type {Function}\n * @param {Error} [err]\n * @returns {void}\n */\n\n/**\n * @param {AbortCallback} abort\n * @param {Uint8Array|null} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {void}\n */\nfunction writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n try {\n if (!body) {\n if (contentLength === 0) {\n socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n } else {\n assert(contentLength === null, 'no body must not have content length')\n socket.write(`${header}\\r\\n`, 'latin1')\n }\n } else if (util.isBuffer(body)) {\n assert(contentLength === body.byteLength, 'buffer body must have content length')\n\n socket.cork()\n socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n socket.write(body)\n socket.uncork()\n request.onBodySent(body)\n\n if (!expectsPayload && request.reset !== false) {\n socket[kReset] = true\n }\n }\n request.onRequestSent()\n\n client[kResume]()\n } catch (err) {\n abort(err)\n }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Blob} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n assert(contentLength === body.size, 'blob body must have content length')\n\n try {\n if (contentLength != null && contentLength !== body.size) {\n throw new RequestContentLengthMismatchError()\n }\n\n const buffer = Buffer.from(await body.arrayBuffer())\n\n socket.cork()\n socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n socket.write(buffer)\n socket.uncork()\n\n request.onBodySent(buffer)\n request.onRequestSent()\n\n if (!expectsPayload && request.reset !== false) {\n socket[kReset] = true\n }\n\n client[kResume]()\n } catch (err) {\n abort(err)\n }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Iterable} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n let callback = null\n function onDrain () {\n if (callback) {\n const cb = callback\n callback = null\n cb()\n }\n }\n\n const waitForDrain = () => new Promise((resolve, reject) => {\n assert(callback === null)\n\n if (socket[kError]) {\n reject(socket[kError])\n } else {\n callback = resolve\n }\n })\n\n socket\n .on('close', onDrain)\n .on('drain', onDrain)\n\n const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n try {\n // It's up to the user to somehow abort the async iterable.\n for await (const chunk of body) {\n if (socket[kError]) {\n throw socket[kError]\n }\n\n if (!writer.write(chunk)) {\n await waitForDrain()\n }\n }\n\n writer.end()\n } catch (err) {\n writer.destroy(err)\n } finally {\n socket\n .off('close', onDrain)\n .off('drain', onDrain)\n }\n}\n\nclass AsyncWriter {\n /**\n *\n * @param {object} arg\n * @param {AbortCallback} arg.abort\n * @param {import('net').Socket} arg.socket\n * @param {import('../core/request.js')} arg.request\n * @param {number} arg.contentLength\n * @param {import('./client.js')} arg.client\n * @param {boolean} arg.expectsPayload\n * @param {string} arg.header\n */\n constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {\n this.socket = socket\n this.request = request\n this.contentLength = contentLength\n this.client = client\n this.bytesWritten = 0\n this.expectsPayload = expectsPayload\n this.header = header\n this.abort = abort\n\n socket[kWriting] = true\n }\n\n /**\n * @param {Buffer} chunk\n * @returns\n */\n write (chunk) {\n const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this\n\n if (socket[kError]) {\n throw socket[kError]\n }\n\n if (socket.destroyed) {\n return false\n }\n\n const len = Buffer.byteLength(chunk)\n if (!len) {\n return true\n }\n\n // We should defer writing chunks.\n if (contentLength !== null && bytesWritten + len > contentLength) {\n if (client[kStrictContentLength]) {\n throw new RequestContentLengthMismatchError()\n }\n\n process.emitWarning(new RequestContentLengthMismatchError())\n }\n\n socket.cork()\n\n if (bytesWritten === 0) {\n if (!expectsPayload && request.reset !== false) {\n socket[kReset] = true\n }\n\n if (contentLength === null) {\n socket.write(`${header}transfer-encoding: chunked\\r\\n`, 'latin1')\n } else {\n socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n }\n }\n\n if (contentLength === null) {\n socket.write(`\\r\\n${len.toString(16)}\\r\\n`, 'latin1')\n }\n\n this.bytesWritten += len\n\n const ret = socket.write(chunk)\n\n socket.uncork()\n\n request.onBodySent(chunk)\n\n if (!ret) {\n if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n // istanbul ignore else: only for jest\n if (socket[kParser].timeout.refresh) {\n socket[kParser].timeout.refresh()\n }\n }\n }\n\n return ret\n }\n\n /**\n * @returns {void}\n */\n end () {\n const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this\n request.onRequestSent()\n\n socket[kWriting] = false\n\n if (socket[kError]) {\n throw socket[kError]\n }\n\n if (socket.destroyed) {\n return\n }\n\n if (bytesWritten === 0) {\n if (expectsPayload) {\n // https://tools.ietf.org/html/rfc7230#section-3.3.2\n // A user agent SHOULD send a Content-Length in a request message when\n // no Transfer-Encoding is sent and the request method defines a meaning\n // for an enclosed payload body.\n\n socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n } else {\n socket.write(`${header}\\r\\n`, 'latin1')\n }\n } else if (contentLength === null) {\n socket.write('\\r\\n0\\r\\n\\r\\n', 'latin1')\n }\n\n if (contentLength !== null && bytesWritten !== contentLength) {\n if (client[kStrictContentLength]) {\n throw new RequestContentLengthMismatchError()\n } else {\n process.emitWarning(new RequestContentLengthMismatchError())\n }\n }\n\n if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n // istanbul ignore else: only for jest\n if (socket[kParser].timeout.refresh) {\n socket[kParser].timeout.refresh()\n }\n }\n\n client[kResume]()\n }\n\n /**\n * @param {Error} [err]\n * @returns {void}\n */\n destroy (err) {\n const { socket, client, abort } = this\n\n socket[kWriting] = false\n\n if (err) {\n assert(client[kRunning] <= 1, 'pipeline should only contain this request')\n abort(err)\n }\n }\n}\n\nmodule.exports = connectH1\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { pipeline } = require('node:stream')\nconst util = require('../core/util.js')\nconst {\n RequestContentLengthMismatchError,\n RequestAbortedError,\n SocketError,\n InformationalError\n} = require('../core/errors.js')\nconst {\n kUrl,\n kReset,\n kClient,\n kRunning,\n kPending,\n kQueue,\n kPendingIdx,\n kRunningIdx,\n kError,\n kSocket,\n kStrictContentLength,\n kOnError,\n kMaxConcurrentStreams,\n kHTTP2Session,\n kResume,\n kSize,\n kHTTPContext,\n kClosed,\n kBodyTimeout\n} = require('../core/symbols.js')\nconst { channels } = require('../core/diagnostics.js')\n\nconst kOpenStreams = Symbol('open streams')\n\nlet extractBody\n\n/** @type {import('http2')} */\nlet http2\ntry {\n http2 = require('node:http2')\n} catch {\n // @ts-ignore\n http2 = { constants: {} }\n}\n\nconst {\n constants: {\n HTTP2_HEADER_AUTHORITY,\n HTTP2_HEADER_METHOD,\n HTTP2_HEADER_PATH,\n HTTP2_HEADER_SCHEME,\n HTTP2_HEADER_CONTENT_LENGTH,\n HTTP2_HEADER_EXPECT,\n HTTP2_HEADER_STATUS\n }\n} = http2\n\nfunction parseH2Headers (headers) {\n const result = []\n\n for (const [name, value] of Object.entries(headers)) {\n // h2 may concat the header value by array\n // e.g. Set-Cookie\n if (Array.isArray(value)) {\n for (const subvalue of value) {\n // we need to provide each header value of header name\n // because the headers handler expect name-value pair\n result.push(Buffer.from(name), Buffer.from(subvalue))\n }\n } else {\n result.push(Buffer.from(name), Buffer.from(value))\n }\n }\n\n return result\n}\n\nasync function connectH2 (client, socket) {\n client[kSocket] = socket\n\n const session = http2.connect(client[kUrl], {\n createConnection: () => socket,\n peerMaxConcurrentStreams: client[kMaxConcurrentStreams],\n settings: {\n // TODO(metcoder95): add support for PUSH\n enablePush: false\n }\n })\n\n session[kOpenStreams] = 0\n session[kClient] = client\n session[kSocket] = socket\n session[kHTTP2Session] = null\n\n util.addListener(session, 'error', onHttp2SessionError)\n util.addListener(session, 'frameError', onHttp2FrameError)\n util.addListener(session, 'end', onHttp2SessionEnd)\n util.addListener(session, 'goaway', onHttp2SessionGoAway)\n util.addListener(session, 'close', onHttp2SessionClose)\n\n session.unref()\n\n client[kHTTP2Session] = session\n socket[kHTTP2Session] = session\n\n util.addListener(socket, 'error', onHttp2SocketError)\n util.addListener(socket, 'end', onHttp2SocketEnd)\n util.addListener(socket, 'close', onHttp2SocketClose)\n\n socket[kClosed] = false\n socket.on('close', onSocketClose)\n\n return {\n version: 'h2',\n defaultPipelining: Infinity,\n write (request) {\n return writeH2(client, request)\n },\n resume () {\n resumeH2(client)\n },\n destroy (err, callback) {\n if (socket[kClosed]) {\n queueMicrotask(callback)\n } else {\n socket.destroy(err).on('close', callback)\n }\n },\n get destroyed () {\n return socket.destroyed\n },\n busy () {\n return false\n }\n }\n}\n\nfunction resumeH2 (client) {\n const socket = client[kSocket]\n\n if (socket?.destroyed === false) {\n if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {\n socket.unref()\n client[kHTTP2Session].unref()\n } else {\n socket.ref()\n client[kHTTP2Session].ref()\n }\n }\n}\n\nfunction onHttp2SessionError (err) {\n assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n this[kSocket][kError] = err\n this[kClient][kOnError](err)\n}\n\nfunction onHttp2FrameError (type, code, id) {\n if (id === 0) {\n const err = new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`)\n this[kSocket][kError] = err\n this[kClient][kOnError](err)\n }\n}\n\nfunction onHttp2SessionEnd () {\n const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))\n this.destroy(err)\n util.destroy(this[kSocket], err)\n}\n\n/**\n * This is the root cause of #3011\n * We need to handle GOAWAY frames properly, and trigger the session close\n * along with the socket right away\n *\n * @this {import('http2').ClientHttp2Session}\n * @param {number} errorCode\n */\nfunction onHttp2SessionGoAway (errorCode) {\n // TODO(mcollina): Verify if GOAWAY implements the spec correctly:\n // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8\n // Specifically, we do not verify the \"valid\" stream id.\n\n const err = this[kError] || new SocketError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))\n const client = this[kClient]\n\n client[kSocket] = null\n client[kHTTPContext] = null\n\n // this is an HTTP2 session\n this.close()\n this[kHTTP2Session] = null\n\n util.destroy(this[kSocket], err)\n\n // Fail head of pipeline.\n if (client[kRunningIdx] < client[kQueue].length) {\n const request = client[kQueue][client[kRunningIdx]]\n client[kQueue][client[kRunningIdx]++] = null\n util.errorRequest(client, request, err)\n client[kPendingIdx] = client[kRunningIdx]\n }\n\n assert(client[kRunning] === 0)\n\n client.emit('disconnect', client[kUrl], [client], err)\n\n client[kResume]()\n}\n\nfunction onHttp2SessionClose () {\n const { [kClient]: client } = this\n const { [kSocket]: socket } = client\n\n const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))\n\n client[kSocket] = null\n client[kHTTPContext] = null\n\n if (client.destroyed) {\n assert(client[kPending] === 0)\n\n // Fail entire queue.\n const requests = client[kQueue].splice(client[kRunningIdx])\n for (let i = 0; i < requests.length; i++) {\n const request = requests[i]\n util.errorRequest(client, request, err)\n }\n }\n}\n\nfunction onHttp2SocketClose () {\n const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n const client = this[kHTTP2Session][kClient]\n\n client[kSocket] = null\n client[kHTTPContext] = null\n\n if (this[kHTTP2Session] !== null) {\n this[kHTTP2Session].destroy(err)\n }\n\n client[kPendingIdx] = client[kRunningIdx]\n\n assert(client[kRunning] === 0)\n\n client.emit('disconnect', client[kUrl], [client], err)\n\n client[kResume]()\n}\n\nfunction onHttp2SocketError (err) {\n assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n this[kError] = err\n\n this[kClient][kOnError](err)\n}\n\nfunction onHttp2SocketEnd () {\n util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onSocketClose () {\n this[kClosed] = true\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\nfunction writeH2 (client, request) {\n const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout]\n const session = client[kHTTP2Session]\n const { method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request\n let { body } = request\n\n if (upgrade) {\n util.errorRequest(client, request, new Error('Upgrade not supported for H2'))\n return false\n }\n\n const headers = {}\n for (let n = 0; n < reqHeaders.length; n += 2) {\n const key = reqHeaders[n + 0]\n const val = reqHeaders[n + 1]\n\n if (Array.isArray(val)) {\n for (let i = 0; i < val.length; i++) {\n if (headers[key]) {\n headers[key] += `,${val[i]}`\n } else {\n headers[key] = val[i]\n }\n }\n } else {\n headers[key] = val\n }\n }\n\n /** @type {import('node:http2').ClientHttp2Stream} */\n let stream = null\n\n const { hostname, port } = client[kUrl]\n\n headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`\n headers[HTTP2_HEADER_METHOD] = method\n\n const abort = (err) => {\n if (request.aborted || request.completed) {\n return\n }\n\n err = err || new RequestAbortedError()\n\n util.errorRequest(client, request, err)\n\n if (stream != null) {\n // Some chunks might still come after abort,\n // let's ignore them\n stream.removeAllListeners('data')\n\n // On Abort, we close the stream to send RST_STREAM frame\n stream.close()\n\n // We move the running index to the next request\n client[kOnError](err)\n client[kResume]()\n }\n\n // We do not destroy the socket as we can continue using the session\n // the stream gets destroyed and the session remains to create new streams\n util.destroy(body, err)\n }\n\n try {\n // We are already connected, streams are pending.\n // We can call on connect, and wait for abort\n request.onConnect(abort)\n } catch (err) {\n util.errorRequest(client, request, err)\n }\n\n if (request.aborted) {\n return false\n }\n\n if (method === 'CONNECT') {\n session.ref()\n // We are already connected, streams are pending, first request\n // will create a new stream. We trigger a request to create the stream and wait until\n // `ready` event is triggered\n // We disabled endStream to allow the user to write to the stream\n stream = session.request(headers, { endStream: false, signal })\n\n if (!stream.pending) {\n request.onUpgrade(null, null, stream)\n ++session[kOpenStreams]\n client[kQueue][client[kRunningIdx]++] = null\n } else {\n stream.once('ready', () => {\n request.onUpgrade(null, null, stream)\n ++session[kOpenStreams]\n client[kQueue][client[kRunningIdx]++] = null\n })\n }\n\n stream.once('close', () => {\n session[kOpenStreams] -= 1\n if (session[kOpenStreams] === 0) session.unref()\n })\n stream.setTimeout(requestTimeout)\n\n return true\n }\n\n // https://tools.ietf.org/html/rfc7540#section-8.3\n // :path and :scheme headers must be omitted when sending CONNECT\n\n headers[HTTP2_HEADER_PATH] = path\n headers[HTTP2_HEADER_SCHEME] = 'https'\n\n // https://tools.ietf.org/html/rfc7231#section-4.3.1\n // https://tools.ietf.org/html/rfc7231#section-4.3.2\n // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n // Sending a payload body on a request that does not\n // expect it can cause undefined behavior on some\n // servers and corrupt connection state. Do not\n // re-use the connection for further requests.\n\n const expectsPayload = (\n method === 'PUT' ||\n method === 'POST' ||\n method === 'PATCH'\n )\n\n if (body && typeof body.read === 'function') {\n // Try to read EOF in order to get length.\n body.read(0)\n }\n\n let contentLength = util.bodyLength(body)\n\n if (util.isFormDataLike(body)) {\n extractBody ??= require('../web/fetch/body.js').extractBody\n\n const [bodyStream, contentType] = extractBody(body)\n headers['content-type'] = contentType\n\n body = bodyStream.stream\n contentLength = bodyStream.length\n }\n\n if (contentLength == null) {\n contentLength = request.contentLength\n }\n\n if (contentLength === 0 || !expectsPayload) {\n // https://tools.ietf.org/html/rfc7230#section-3.3.2\n // A user agent SHOULD NOT send a Content-Length header field when\n // the request message does not contain a payload body and the method\n // semantics do not anticipate such a body.\n\n contentLength = null\n }\n\n // https://github.com/nodejs/undici/issues/2046\n // A user agent may send a Content-Length header with 0 value, this should be allowed.\n if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {\n if (client[kStrictContentLength]) {\n util.errorRequest(client, request, new RequestContentLengthMismatchError())\n return false\n }\n\n process.emitWarning(new RequestContentLengthMismatchError())\n }\n\n if (contentLength != null) {\n assert(body, 'no body must not have content length')\n headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`\n }\n\n session.ref()\n\n if (channels.sendHeaders.hasSubscribers) {\n let header = ''\n for (const key in headers) {\n header += `${key}: ${headers[key]}\\r\\n`\n }\n channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })\n }\n\n // TODO(metcoder95): add support for sending trailers\n const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null\n if (expectContinue) {\n headers[HTTP2_HEADER_EXPECT] = '100-continue'\n stream = session.request(headers, { endStream: shouldEndStream, signal })\n\n stream.once('continue', writeBodyH2)\n } else {\n stream = session.request(headers, {\n endStream: shouldEndStream,\n signal\n })\n\n writeBodyH2()\n }\n\n // Increment counter as we have new streams open\n ++session[kOpenStreams]\n stream.setTimeout(requestTimeout)\n\n stream.once('response', headers => {\n const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n request.onResponseStarted()\n\n // Due to the stream nature, it is possible we face a race condition\n // where the stream has been assigned, but the request has been aborted\n // the request remains in-flight and headers hasn't been received yet\n // for those scenarios, best effort is to destroy the stream immediately\n // as there's no value to keep it open.\n if (request.aborted) {\n stream.removeAllListeners('data')\n return\n }\n\n if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {\n stream.pause()\n }\n })\n\n stream.on('data', (chunk) => {\n if (request.onData(chunk) === false) {\n stream.pause()\n }\n })\n\n stream.once('end', (err) => {\n stream.removeAllListeners('data')\n // When state is null, it means we haven't consumed body and the stream still do not have\n // a state.\n // Present specially when using pipeline or stream\n if (stream.state?.state == null || stream.state.state < 6) {\n // Do not complete the request if it was aborted\n // Not prone to happen for as safety net to avoid race conditions with 'trailers'\n if (!request.aborted && !request.completed) {\n request.onComplete({})\n }\n\n client[kQueue][client[kRunningIdx]++] = null\n client[kResume]()\n } else {\n // Stream is closed or half-closed-remote (6), decrement counter and cleanup\n // It does not have sense to continue working with the stream as we do not\n // have yet RST_STREAM support on client-side\n --session[kOpenStreams]\n if (session[kOpenStreams] === 0) {\n session.unref()\n }\n\n abort(err ?? new InformationalError('HTTP/2: stream half-closed (remote)'))\n client[kQueue][client[kRunningIdx]++] = null\n client[kPendingIdx] = client[kRunningIdx]\n client[kResume]()\n }\n })\n\n stream.once('close', () => {\n stream.removeAllListeners('data')\n session[kOpenStreams] -= 1\n if (session[kOpenStreams] === 0) {\n session.unref()\n }\n })\n\n stream.once('error', function (err) {\n stream.removeAllListeners('data')\n abort(err)\n })\n\n stream.once('frameError', (type, code) => {\n stream.removeAllListeners('data')\n abort(new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`))\n })\n\n stream.on('aborted', () => {\n stream.removeAllListeners('data')\n })\n\n stream.on('timeout', () => {\n const err = new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`)\n stream.removeAllListeners('data')\n session[kOpenStreams] -= 1\n\n if (session[kOpenStreams] === 0) {\n session.unref()\n }\n\n abort(err)\n })\n\n stream.once('trailers', trailers => {\n if (request.aborted || request.completed) {\n return\n }\n\n request.onComplete(trailers)\n })\n\n return true\n\n function writeBodyH2 () {\n /* istanbul ignore else: assertion */\n if (!body || contentLength === 0) {\n writeBuffer(\n abort,\n stream,\n null,\n client,\n request,\n client[kSocket],\n contentLength,\n expectsPayload\n )\n } else if (util.isBuffer(body)) {\n writeBuffer(\n abort,\n stream,\n body,\n client,\n request,\n client[kSocket],\n contentLength,\n expectsPayload\n )\n } else if (util.isBlobLike(body)) {\n if (typeof body.stream === 'function') {\n writeIterable(\n abort,\n stream,\n body.stream(),\n client,\n request,\n client[kSocket],\n contentLength,\n expectsPayload\n )\n } else {\n writeBlob(\n abort,\n stream,\n body,\n client,\n request,\n client[kSocket],\n contentLength,\n expectsPayload\n )\n }\n } else if (util.isStream(body)) {\n writeStream(\n abort,\n client[kSocket],\n expectsPayload,\n stream,\n body,\n client,\n request,\n contentLength\n )\n } else if (util.isIterable(body)) {\n writeIterable(\n abort,\n stream,\n body,\n client,\n request,\n client[kSocket],\n contentLength,\n expectsPayload\n )\n } else {\n assert(false)\n }\n }\n}\n\nfunction writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n try {\n if (body != null && util.isBuffer(body)) {\n assert(contentLength === body.byteLength, 'buffer body must have content length')\n h2stream.cork()\n h2stream.write(body)\n h2stream.uncork()\n h2stream.end()\n\n request.onBodySent(body)\n }\n\n if (!expectsPayload) {\n socket[kReset] = true\n }\n\n request.onRequestSent()\n client[kResume]()\n } catch (error) {\n abort(error)\n }\n}\n\nfunction writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {\n assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n // For HTTP/2, is enough to pipe the stream\n const pipe = pipeline(\n body,\n h2stream,\n (err) => {\n if (err) {\n util.destroy(pipe, err)\n abort(err)\n } else {\n util.removeAllListeners(pipe)\n request.onRequestSent()\n\n if (!expectsPayload) {\n socket[kReset] = true\n }\n\n client[kResume]()\n }\n }\n )\n\n util.addListener(pipe, 'data', onPipeData)\n\n function onPipeData (chunk) {\n request.onBodySent(chunk)\n }\n}\n\nasync function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n assert(contentLength === body.size, 'blob body must have content length')\n\n try {\n if (contentLength != null && contentLength !== body.size) {\n throw new RequestContentLengthMismatchError()\n }\n\n const buffer = Buffer.from(await body.arrayBuffer())\n\n h2stream.cork()\n h2stream.write(buffer)\n h2stream.uncork()\n h2stream.end()\n\n request.onBodySent(buffer)\n request.onRequestSent()\n\n if (!expectsPayload) {\n socket[kReset] = true\n }\n\n client[kResume]()\n } catch (err) {\n abort(err)\n }\n}\n\nasync function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n let callback = null\n function onDrain () {\n if (callback) {\n const cb = callback\n callback = null\n cb()\n }\n }\n\n const waitForDrain = () => new Promise((resolve, reject) => {\n assert(callback === null)\n\n if (socket[kError]) {\n reject(socket[kError])\n } else {\n callback = resolve\n }\n })\n\n h2stream\n .on('close', onDrain)\n .on('drain', onDrain)\n\n try {\n // It's up to the user to somehow abort the async iterable.\n for await (const chunk of body) {\n if (socket[kError]) {\n throw socket[kError]\n }\n\n const res = h2stream.write(chunk)\n request.onBodySent(chunk)\n if (!res) {\n await waitForDrain()\n }\n }\n\n h2stream.end()\n\n request.onRequestSent()\n\n if (!expectsPayload) {\n socket[kReset] = true\n }\n\n client[kResume]()\n } catch (err) {\n abort(err)\n } finally {\n h2stream\n .off('close', onDrain)\n .off('drain', onDrain)\n }\n}\n\nmodule.exports = connectH2\n", "'use strict'\n\nconst assert = require('node:assert')\nconst net = require('node:net')\nconst http = require('node:http')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst Request = require('../core/request.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst {\n InvalidArgumentError,\n InformationalError,\n ClientDestroyedError\n} = require('../core/errors.js')\nconst buildConnector = require('../core/connect.js')\nconst {\n kUrl,\n kServerName,\n kClient,\n kBusy,\n kConnect,\n kResuming,\n kRunning,\n kPending,\n kSize,\n kQueue,\n kConnected,\n kConnecting,\n kNeedDrain,\n kKeepAliveDefaultTimeout,\n kHostHeader,\n kPendingIdx,\n kRunningIdx,\n kError,\n kPipelining,\n kKeepAliveTimeoutValue,\n kMaxHeadersSize,\n kKeepAliveMaxTimeout,\n kKeepAliveTimeoutThreshold,\n kHeadersTimeout,\n kBodyTimeout,\n kStrictContentLength,\n kConnector,\n kMaxRequests,\n kCounter,\n kClose,\n kDestroy,\n kDispatch,\n kLocalAddress,\n kMaxResponseSize,\n kOnError,\n kHTTPContext,\n kMaxConcurrentStreams,\n kResume\n} = require('../core/symbols.js')\nconst connectH1 = require('./client-h1.js')\nconst connectH2 = require('./client-h2.js')\n\nconst kClosedResolve = Symbol('kClosedResolve')\n\nconst getDefaultNodeMaxHeaderSize = http &&\n http.maxHeaderSize &&\n Number.isInteger(http.maxHeaderSize) &&\n http.maxHeaderSize > 0\n ? () => http.maxHeaderSize\n : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') }\n\nconst noop = () => {}\n\nfunction getPipelining (client) {\n return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1\n}\n\n/**\n * @type {import('../../types/client.js').default}\n */\nclass Client extends DispatcherBase {\n /**\n *\n * @param {string|URL} url\n * @param {import('../../types/client.js').Client.Options} options\n */\n constructor (url, {\n maxHeaderSize,\n headersTimeout,\n socketTimeout,\n requestTimeout,\n connectTimeout,\n bodyTimeout,\n idleTimeout,\n keepAlive,\n keepAliveTimeout,\n maxKeepAliveTimeout,\n keepAliveMaxTimeout,\n keepAliveTimeoutThreshold,\n socketPath,\n pipelining,\n tls,\n strictContentLength,\n maxCachedSessions,\n connect,\n maxRequestsPerClient,\n localAddress,\n maxResponseSize,\n autoSelectFamily,\n autoSelectFamilyAttemptTimeout,\n // h2\n maxConcurrentStreams,\n allowH2\n } = {}) {\n if (keepAlive !== undefined) {\n throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')\n }\n\n if (socketTimeout !== undefined) {\n throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')\n }\n\n if (requestTimeout !== undefined) {\n throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')\n }\n\n if (idleTimeout !== undefined) {\n throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')\n }\n\n if (maxKeepAliveTimeout !== undefined) {\n throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')\n }\n\n if (maxHeaderSize != null) {\n if (!Number.isInteger(maxHeaderSize) || maxHeaderSize < 1) {\n throw new InvalidArgumentError('invalid maxHeaderSize')\n }\n } else {\n // If maxHeaderSize is not provided, use the default value from the http module\n // or if that is not available, throw an error.\n maxHeaderSize = getDefaultNodeMaxHeaderSize()\n }\n\n if (socketPath != null && typeof socketPath !== 'string') {\n throw new InvalidArgumentError('invalid socketPath')\n }\n\n if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {\n throw new InvalidArgumentError('invalid connectTimeout')\n }\n\n if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {\n throw new InvalidArgumentError('invalid keepAliveTimeout')\n }\n\n if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {\n throw new InvalidArgumentError('invalid keepAliveMaxTimeout')\n }\n\n if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {\n throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')\n }\n\n if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {\n throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')\n }\n\n if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {\n throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')\n }\n\n if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n throw new InvalidArgumentError('connect must be a function or an object')\n }\n\n if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {\n throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')\n }\n\n if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {\n throw new InvalidArgumentError('localAddress must be valid string IP address')\n }\n\n if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {\n throw new InvalidArgumentError('maxResponseSize must be a positive number')\n }\n\n if (\n autoSelectFamilyAttemptTimeout != null &&\n (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)\n ) {\n throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')\n }\n\n // h2\n if (allowH2 != null && typeof allowH2 !== 'boolean') {\n throw new InvalidArgumentError('allowH2 must be a valid boolean value')\n }\n\n if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {\n throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n }\n\n super()\n\n if (typeof connect !== 'function') {\n connect = buildConnector({\n ...tls,\n maxCachedSessions,\n allowH2,\n socketPath,\n timeout: connectTimeout,\n ...(autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n ...connect\n })\n }\n\n this[kUrl] = util.parseOrigin(url)\n this[kConnector] = connect\n this[kPipelining] = pipelining != null ? pipelining : 1\n this[kMaxHeadersSize] = maxHeaderSize\n this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout\n this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout\n this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold\n this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]\n this[kServerName] = null\n this[kLocalAddress] = localAddress != null ? localAddress : null\n this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming\n this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming\n this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\\r\\n`\n this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3\n this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3\n this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength\n this[kMaxRequests] = maxRequestsPerClient\n this[kClosedResolve] = null\n this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1\n this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n this[kHTTPContext] = null\n\n // kQueue is built up of 3 sections separated by\n // the kRunningIdx and kPendingIdx indices.\n // | complete | running | pending |\n // ^ kRunningIdx ^ kPendingIdx ^ kQueue.length\n // kRunningIdx points to the first running element.\n // kPendingIdx points to the first pending element.\n // This implements a fast queue with an amortized\n // time of O(1).\n\n this[kQueue] = []\n this[kRunningIdx] = 0\n this[kPendingIdx] = 0\n\n this[kResume] = (sync) => resume(this, sync)\n this[kOnError] = (err) => onError(this, err)\n }\n\n get pipelining () {\n return this[kPipelining]\n }\n\n set pipelining (value) {\n this[kPipelining] = value\n this[kResume](true)\n }\n\n get [kPending] () {\n return this[kQueue].length - this[kPendingIdx]\n }\n\n get [kRunning] () {\n return this[kPendingIdx] - this[kRunningIdx]\n }\n\n get [kSize] () {\n return this[kQueue].length - this[kRunningIdx]\n }\n\n get [kConnected] () {\n return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed\n }\n\n get [kBusy] () {\n return Boolean(\n this[kHTTPContext]?.busy(null) ||\n (this[kSize] >= (getPipelining(this) || 1)) ||\n this[kPending] > 0\n )\n }\n\n /* istanbul ignore: only used for test */\n [kConnect] (cb) {\n connect(this)\n this.once('connect', cb)\n }\n\n [kDispatch] (opts, handler) {\n const origin = opts.origin || this[kUrl].origin\n const request = new Request(origin, opts, handler)\n\n this[kQueue].push(request)\n if (this[kResuming]) {\n // Do nothing.\n } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {\n // Wait a tick in case stream/iterator is ended in the same tick.\n this[kResuming] = 1\n queueMicrotask(() => resume(this))\n } else {\n this[kResume](true)\n }\n\n if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {\n this[kNeedDrain] = 2\n }\n\n return this[kNeedDrain] < 2\n }\n\n async [kClose] () {\n // TODO: for H2 we need to gracefully flush the remaining enqueued\n // request and close each stream.\n return new Promise((resolve) => {\n if (this[kSize]) {\n this[kClosedResolve] = resolve\n } else {\n resolve(null)\n }\n })\n }\n\n async [kDestroy] (err) {\n return new Promise((resolve) => {\n const requests = this[kQueue].splice(this[kPendingIdx])\n for (let i = 0; i < requests.length; i++) {\n const request = requests[i]\n util.errorRequest(this, request, err)\n }\n\n const callback = () => {\n if (this[kClosedResolve]) {\n // TODO (fix): Should we error here with ClientDestroyedError?\n this[kClosedResolve]()\n this[kClosedResolve] = null\n }\n resolve(null)\n }\n\n if (this[kHTTPContext]) {\n this[kHTTPContext].destroy(err, callback)\n this[kHTTPContext] = null\n } else {\n queueMicrotask(callback)\n }\n\n this[kResume]()\n })\n }\n}\n\nfunction onError (client, err) {\n if (\n client[kRunning] === 0 &&\n err.code !== 'UND_ERR_INFO' &&\n err.code !== 'UND_ERR_SOCKET'\n ) {\n // Error is not caused by running request and not a recoverable\n // socket error.\n\n assert(client[kPendingIdx] === client[kRunningIdx])\n\n const requests = client[kQueue].splice(client[kRunningIdx])\n\n for (let i = 0; i < requests.length; i++) {\n const request = requests[i]\n util.errorRequest(client, request, err)\n }\n assert(client[kSize] === 0)\n }\n}\n\n/**\n * @param {Client} client\n * @returns\n */\nasync function connect (client) {\n assert(!client[kConnecting])\n assert(!client[kHTTPContext])\n\n let { host, hostname, protocol, port } = client[kUrl]\n\n // Resolve ipv6\n if (hostname[0] === '[') {\n const idx = hostname.indexOf(']')\n\n assert(idx !== -1)\n const ip = hostname.substring(1, idx)\n\n assert(net.isIPv6(ip))\n hostname = ip\n }\n\n client[kConnecting] = true\n\n if (channels.beforeConnect.hasSubscribers) {\n channels.beforeConnect.publish({\n connectParams: {\n host,\n hostname,\n protocol,\n port,\n version: client[kHTTPContext]?.version,\n servername: client[kServerName],\n localAddress: client[kLocalAddress]\n },\n connector: client[kConnector]\n })\n }\n\n try {\n const socket = await new Promise((resolve, reject) => {\n client[kConnector]({\n host,\n hostname,\n protocol,\n port,\n servername: client[kServerName],\n localAddress: client[kLocalAddress]\n }, (err, socket) => {\n if (err) {\n reject(err)\n } else {\n resolve(socket)\n }\n })\n })\n\n if (client.destroyed) {\n util.destroy(socket.on('error', noop), new ClientDestroyedError())\n return\n }\n\n assert(socket)\n\n try {\n client[kHTTPContext] = socket.alpnProtocol === 'h2'\n ? await connectH2(client, socket)\n : await connectH1(client, socket)\n } catch (err) {\n socket.destroy().on('error', noop)\n throw err\n }\n\n client[kConnecting] = false\n\n socket[kCounter] = 0\n socket[kMaxRequests] = client[kMaxRequests]\n socket[kClient] = client\n socket[kError] = null\n\n if (channels.connected.hasSubscribers) {\n channels.connected.publish({\n connectParams: {\n host,\n hostname,\n protocol,\n port,\n version: client[kHTTPContext]?.version,\n servername: client[kServerName],\n localAddress: client[kLocalAddress]\n },\n connector: client[kConnector],\n socket\n })\n }\n client.emit('connect', client[kUrl], [client])\n } catch (err) {\n if (client.destroyed) {\n return\n }\n\n client[kConnecting] = false\n\n if (channels.connectError.hasSubscribers) {\n channels.connectError.publish({\n connectParams: {\n host,\n hostname,\n protocol,\n port,\n version: client[kHTTPContext]?.version,\n servername: client[kServerName],\n localAddress: client[kLocalAddress]\n },\n connector: client[kConnector],\n error: err\n })\n }\n\n if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n assert(client[kRunning] === 0)\n while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {\n const request = client[kQueue][client[kPendingIdx]++]\n util.errorRequest(client, request, err)\n }\n } else {\n onError(client, err)\n }\n\n client.emit('connectionError', client[kUrl], [client], err)\n }\n\n client[kResume]()\n}\n\nfunction emitDrain (client) {\n client[kNeedDrain] = 0\n client.emit('drain', client[kUrl], [client])\n}\n\nfunction resume (client, sync) {\n if (client[kResuming] === 2) {\n return\n }\n\n client[kResuming] = 2\n\n _resume(client, sync)\n client[kResuming] = 0\n\n if (client[kRunningIdx] > 256) {\n client[kQueue].splice(0, client[kRunningIdx])\n client[kPendingIdx] -= client[kRunningIdx]\n client[kRunningIdx] = 0\n }\n}\n\nfunction _resume (client, sync) {\n while (true) {\n if (client.destroyed) {\n assert(client[kPending] === 0)\n return\n }\n\n if (client[kClosedResolve] && !client[kSize]) {\n client[kClosedResolve]()\n client[kClosedResolve] = null\n return\n }\n\n if (client[kHTTPContext]) {\n client[kHTTPContext].resume()\n }\n\n if (client[kBusy]) {\n client[kNeedDrain] = 2\n } else if (client[kNeedDrain] === 2) {\n if (sync) {\n client[kNeedDrain] = 1\n queueMicrotask(() => emitDrain(client))\n } else {\n emitDrain(client)\n }\n continue\n }\n\n if (client[kPending] === 0) {\n return\n }\n\n if (client[kRunning] >= (getPipelining(client) || 1)) {\n return\n }\n\n const request = client[kQueue][client[kPendingIdx]]\n\n if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {\n if (client[kRunning] > 0) {\n return\n }\n\n client[kServerName] = request.servername\n client[kHTTPContext]?.destroy(new InformationalError('servername changed'), () => {\n client[kHTTPContext] = null\n resume(client)\n })\n }\n\n if (client[kConnecting]) {\n return\n }\n\n if (!client[kHTTPContext]) {\n connect(client)\n return\n }\n\n if (client[kHTTPContext].destroyed) {\n return\n }\n\n if (client[kHTTPContext].busy(request)) {\n return\n }\n\n if (!request.aborted && client[kHTTPContext].write(request)) {\n client[kPendingIdx]++\n } else {\n client[kQueue].splice(client[kPendingIdx], 1)\n }\n }\n}\n\nmodule.exports = Client\n", "'use strict'\n\n// Extracted from node/lib/internal/fixed_queue.js\n\n// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.\nconst kSize = 2048\nconst kMask = kSize - 1\n\n// The FixedQueue is implemented as a singly-linked list of fixed-size\n// circular buffers. It looks something like this:\n//\n// head tail\n// | |\n// v v\n// +-----------+ <-----\\ +-----------+ <------\\ +-----------+\n// | [null] | \\----- | next | \\------- | next |\n// +-----------+ +-----------+ +-----------+\n// | item | <-- bottom | item | <-- bottom | undefined |\n// | item | | item | | undefined |\n// | item | | item | | undefined |\n// | item | | item | | undefined |\n// | item | | item | bottom --> | item |\n// | item | | item | | item |\n// | ... | | ... | | ... |\n// | item | | item | | item |\n// | item | | item | | item |\n// | undefined | <-- top | item | | item |\n// | undefined | | item | | item |\n// | undefined | | undefined | <-- top top --> | undefined |\n// +-----------+ +-----------+ +-----------+\n//\n// Or, if there is only one circular buffer, it looks something\n// like either of these:\n//\n// head tail head tail\n// | | | |\n// v v v v\n// +-----------+ +-----------+\n// | [null] | | [null] |\n// +-----------+ +-----------+\n// | undefined | | item |\n// | undefined | | item |\n// | item | <-- bottom top --> | undefined |\n// | item | | undefined |\n// | undefined | <-- top bottom --> | item |\n// | undefined | | item |\n// +-----------+ +-----------+\n//\n// Adding a value means moving `top` forward by one, removing means\n// moving `bottom` forward by one. After reaching the end, the queue\n// wraps around.\n//\n// When `top === bottom` the current queue is empty and when\n// `top + 1 === bottom` it's full. This wastes a single space of storage\n// but allows much quicker checks.\n\n/**\n * @type {FixedCircularBuffer}\n * @template T\n */\nclass FixedCircularBuffer {\n constructor () {\n /**\n * @type {number}\n */\n this.bottom = 0\n /**\n * @type {number}\n */\n this.top = 0\n /**\n * @type {Array<T|undefined>}\n */\n this.list = new Array(kSize).fill(undefined)\n /**\n * @type {T|null}\n */\n this.next = null\n }\n\n /**\n * @returns {boolean}\n */\n isEmpty () {\n return this.top === this.bottom\n }\n\n /**\n * @returns {boolean}\n */\n isFull () {\n return ((this.top + 1) & kMask) === this.bottom\n }\n\n /**\n * @param {T} data\n * @returns {void}\n */\n push (data) {\n this.list[this.top] = data\n this.top = (this.top + 1) & kMask\n }\n\n /**\n * @returns {T|null}\n */\n shift () {\n const nextItem = this.list[this.bottom]\n if (nextItem === undefined) { return null }\n this.list[this.bottom] = undefined\n this.bottom = (this.bottom + 1) & kMask\n return nextItem\n }\n}\n\n/**\n * @template T\n */\nmodule.exports = class FixedQueue {\n constructor () {\n /**\n * @type {FixedCircularBuffer<T>}\n */\n this.head = this.tail = new FixedCircularBuffer()\n }\n\n /**\n * @returns {boolean}\n */\n isEmpty () {\n return this.head.isEmpty()\n }\n\n /**\n * @param {T} data\n */\n push (data) {\n if (this.head.isFull()) {\n // Head is full: Creates a new queue, sets the old queue's `.next` to it,\n // and sets it as the new main queue.\n this.head = this.head.next = new FixedCircularBuffer()\n }\n this.head.push(data)\n }\n\n /**\n * @returns {T|null}\n */\n shift () {\n const tail = this.tail\n const next = tail.shift()\n if (tail.isEmpty() && tail.next !== null) {\n // If there is another queue, it forms the new tail.\n this.tail = tail.next\n tail.next = null\n }\n return next\n }\n}\n", "'use strict'\n\nconst { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require('../core/symbols')\nconst kPool = Symbol('pool')\n\nclass PoolStats {\n constructor (pool) {\n this[kPool] = pool\n }\n\n get connected () {\n return this[kPool][kConnected]\n }\n\n get free () {\n return this[kPool][kFree]\n }\n\n get pending () {\n return this[kPool][kPending]\n }\n\n get queued () {\n return this[kPool][kQueued]\n }\n\n get running () {\n return this[kPool][kRunning]\n }\n\n get size () {\n return this[kPool][kSize]\n }\n}\n\nmodule.exports = PoolStats\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst FixedQueue = require('./fixed-queue')\nconst { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst PoolStats = require('./pool-stats')\n\nconst kClients = Symbol('clients')\nconst kNeedDrain = Symbol('needDrain')\nconst kQueue = Symbol('queue')\nconst kClosedResolve = Symbol('closed resolve')\nconst kOnDrain = Symbol('onDrain')\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kGetDispatcher = Symbol('get dispatcher')\nconst kAddClient = Symbol('add client')\nconst kRemoveClient = Symbol('remove client')\nconst kStats = Symbol('stats')\n\nclass PoolBase extends DispatcherBase {\n constructor () {\n super()\n\n this[kQueue] = new FixedQueue()\n this[kClients] = []\n this[kQueued] = 0\n\n const pool = this\n\n this[kOnDrain] = function onDrain (origin, targets) {\n const queue = pool[kQueue]\n\n let needDrain = false\n\n while (!needDrain) {\n const item = queue.shift()\n if (!item) {\n break\n }\n pool[kQueued]--\n needDrain = !this.dispatch(item.opts, item.handler)\n }\n\n this[kNeedDrain] = needDrain\n\n if (!this[kNeedDrain] && pool[kNeedDrain]) {\n pool[kNeedDrain] = false\n pool.emit('drain', origin, [pool, ...targets])\n }\n\n if (pool[kClosedResolve] && queue.isEmpty()) {\n Promise\n .all(pool[kClients].map(c => c.close()))\n .then(pool[kClosedResolve])\n }\n }\n\n this[kOnConnect] = (origin, targets) => {\n pool.emit('connect', origin, [pool, ...targets])\n }\n\n this[kOnDisconnect] = (origin, targets, err) => {\n pool.emit('disconnect', origin, [pool, ...targets], err)\n }\n\n this[kOnConnectionError] = (origin, targets, err) => {\n pool.emit('connectionError', origin, [pool, ...targets], err)\n }\n\n this[kStats] = new PoolStats(this)\n }\n\n get [kBusy] () {\n return this[kNeedDrain]\n }\n\n get [kConnected] () {\n return this[kClients].filter(client => client[kConnected]).length\n }\n\n get [kFree] () {\n return this[kClients].filter(client => client[kConnected] && !client[kNeedDrain]).length\n }\n\n get [kPending] () {\n let ret = this[kQueued]\n for (const { [kPending]: pending } of this[kClients]) {\n ret += pending\n }\n return ret\n }\n\n get [kRunning] () {\n let ret = 0\n for (const { [kRunning]: running } of this[kClients]) {\n ret += running\n }\n return ret\n }\n\n get [kSize] () {\n let ret = this[kQueued]\n for (const { [kSize]: size } of this[kClients]) {\n ret += size\n }\n return ret\n }\n\n get stats () {\n return this[kStats]\n }\n\n async [kClose] () {\n if (this[kQueue].isEmpty()) {\n await Promise.all(this[kClients].map(c => c.close()))\n } else {\n await new Promise((resolve) => {\n this[kClosedResolve] = resolve\n })\n }\n }\n\n async [kDestroy] (err) {\n while (true) {\n const item = this[kQueue].shift()\n if (!item) {\n break\n }\n item.handler.onError(err)\n }\n\n await Promise.all(this[kClients].map(c => c.destroy(err)))\n }\n\n [kDispatch] (opts, handler) {\n const dispatcher = this[kGetDispatcher]()\n\n if (!dispatcher) {\n this[kNeedDrain] = true\n this[kQueue].push({ opts, handler })\n this[kQueued]++\n } else if (!dispatcher.dispatch(opts, handler)) {\n dispatcher[kNeedDrain] = true\n this[kNeedDrain] = !this[kGetDispatcher]()\n }\n\n return !this[kNeedDrain]\n }\n\n [kAddClient] (client) {\n client\n .on('drain', this[kOnDrain])\n .on('connect', this[kOnConnect])\n .on('disconnect', this[kOnDisconnect])\n .on('connectionError', this[kOnConnectionError])\n\n this[kClients].push(client)\n\n if (this[kNeedDrain]) {\n queueMicrotask(() => {\n if (this[kNeedDrain]) {\n this[kOnDrain](client[kUrl], [this, client])\n }\n })\n }\n\n return this\n }\n\n [kRemoveClient] (client) {\n client.close(() => {\n const idx = this[kClients].indexOf(client)\n if (idx !== -1) {\n this[kClients].splice(idx, 1)\n }\n })\n\n this[kNeedDrain] = this[kClients].some(dispatcher => (\n !dispatcher[kNeedDrain] &&\n dispatcher.closed !== true &&\n dispatcher.destroyed !== true\n ))\n }\n}\n\nmodule.exports = {\n PoolBase,\n kClients,\n kNeedDrain,\n kAddClient,\n kRemoveClient,\n kGetDispatcher\n}\n", "'use strict'\n\nconst {\n PoolBase,\n kClients,\n kNeedDrain,\n kAddClient,\n kGetDispatcher\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\n\nfunction defaultFactory (origin, opts) {\n return new Client(origin, opts)\n}\n\nclass Pool extends PoolBase {\n constructor (origin, {\n connections,\n factory = defaultFactory,\n connect,\n connectTimeout,\n tls,\n maxCachedSessions,\n socketPath,\n autoSelectFamily,\n autoSelectFamilyAttemptTimeout,\n allowH2,\n ...options\n } = {}) {\n if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n throw new InvalidArgumentError('invalid connections')\n }\n\n if (typeof factory !== 'function') {\n throw new InvalidArgumentError('factory must be a function.')\n }\n\n if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n throw new InvalidArgumentError('connect must be a function or an object')\n }\n\n super()\n\n if (typeof connect !== 'function') {\n connect = buildConnector({\n ...tls,\n maxCachedSessions,\n allowH2,\n socketPath,\n timeout: connectTimeout,\n ...(autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n ...connect\n })\n }\n\n this[kConnections] = connections || null\n this[kUrl] = util.parseOrigin(origin)\n this[kOptions] = { ...util.deepClone(options), connect, allowH2 }\n this[kOptions].interceptors = options.interceptors\n ? { ...options.interceptors }\n : undefined\n this[kFactory] = factory\n }\n\n [kGetDispatcher] () {\n for (const client of this[kClients]) {\n if (!client[kNeedDrain]) {\n return client\n }\n }\n\n if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n this[kAddClient](dispatcher)\n return dispatcher\n }\n }\n}\n\nmodule.exports = Pool\n", "'use strict'\n\nconst {\n BalancedPoolMissingUpstreamError,\n InvalidArgumentError\n} = require('../core/errors')\nconst {\n PoolBase,\n kClients,\n kNeedDrain,\n kAddClient,\n kRemoveClient,\n kGetDispatcher\n} = require('./pool-base')\nconst Pool = require('./pool')\nconst { kUrl } = require('../core/symbols')\nconst { parseOrigin } = require('../core/util')\nconst kFactory = Symbol('factory')\n\nconst kOptions = Symbol('options')\nconst kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')\nconst kCurrentWeight = Symbol('kCurrentWeight')\nconst kIndex = Symbol('kIndex')\nconst kWeight = Symbol('kWeight')\nconst kMaxWeightPerServer = Symbol('kMaxWeightPerServer')\nconst kErrorPenalty = Symbol('kErrorPenalty')\n\n/**\n * Calculate the greatest common divisor of two numbers by\n * using the Euclidean algorithm.\n *\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction getGreatestCommonDivisor (a, b) {\n if (a === 0) return b\n\n while (b !== 0) {\n const t = b\n b = a % b\n a = t\n }\n return a\n}\n\nfunction defaultFactory (origin, opts) {\n return new Pool(origin, opts)\n}\n\nclass BalancedPool extends PoolBase {\n constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) {\n if (typeof factory !== 'function') {\n throw new InvalidArgumentError('factory must be a function.')\n }\n\n super()\n\n this[kOptions] = opts\n this[kIndex] = -1\n this[kCurrentWeight] = 0\n\n this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100\n this[kErrorPenalty] = this[kOptions].errorPenalty || 15\n\n if (!Array.isArray(upstreams)) {\n upstreams = [upstreams]\n }\n\n this[kFactory] = factory\n\n for (const upstream of upstreams) {\n this.addUpstream(upstream)\n }\n this._updateBalancedPoolStats()\n }\n\n addUpstream (upstream) {\n const upstreamOrigin = parseOrigin(upstream).origin\n\n if (this[kClients].find((pool) => (\n pool[kUrl].origin === upstreamOrigin &&\n pool.closed !== true &&\n pool.destroyed !== true\n ))) {\n return this\n }\n const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]))\n\n this[kAddClient](pool)\n pool.on('connect', () => {\n pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])\n })\n\n pool.on('connectionError', () => {\n pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n this._updateBalancedPoolStats()\n })\n\n pool.on('disconnect', (...args) => {\n const err = args[2]\n if (err && err.code === 'UND_ERR_SOCKET') {\n // decrease the weight of the pool.\n pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n this._updateBalancedPoolStats()\n }\n })\n\n for (const client of this[kClients]) {\n client[kWeight] = this[kMaxWeightPerServer]\n }\n\n this._updateBalancedPoolStats()\n\n return this\n }\n\n _updateBalancedPoolStats () {\n let result = 0\n for (let i = 0; i < this[kClients].length; i++) {\n result = getGreatestCommonDivisor(this[kClients][i][kWeight], result)\n }\n\n this[kGreatestCommonDivisor] = result\n }\n\n removeUpstream (upstream) {\n const upstreamOrigin = parseOrigin(upstream).origin\n\n const pool = this[kClients].find((pool) => (\n pool[kUrl].origin === upstreamOrigin &&\n pool.closed !== true &&\n pool.destroyed !== true\n ))\n\n if (pool) {\n this[kRemoveClient](pool)\n }\n\n return this\n }\n\n get upstreams () {\n return this[kClients]\n .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)\n .map((p) => p[kUrl].origin)\n }\n\n [kGetDispatcher] () {\n // We validate that pools is greater than 0,\n // otherwise we would have to wait until an upstream\n // is added, which might never happen.\n if (this[kClients].length === 0) {\n throw new BalancedPoolMissingUpstreamError()\n }\n\n const dispatcher = this[kClients].find(dispatcher => (\n !dispatcher[kNeedDrain] &&\n dispatcher.closed !== true &&\n dispatcher.destroyed !== true\n ))\n\n if (!dispatcher) {\n return\n }\n\n const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true)\n\n if (allClientsBusy) {\n return\n }\n\n let counter = 0\n\n let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain])\n\n while (counter++ < this[kClients].length) {\n this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n const pool = this[kClients][this[kIndex]]\n\n // find pool index with the largest weight\n if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {\n maxWeightIndex = this[kIndex]\n }\n\n // decrease the current weight every `this[kClients].length`.\n if (this[kIndex] === 0) {\n // Set the current weight to the next lower weight.\n this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]\n\n if (this[kCurrentWeight] <= 0) {\n this[kCurrentWeight] = this[kMaxWeightPerServer]\n }\n }\n if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) {\n return pool\n }\n }\n\n this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]\n this[kIndex] = maxWeightIndex\n return this[kClients][maxWeightIndex]\n }\n}\n\nmodule.exports = BalancedPool\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst { kClients, kRunning, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst DispatcherBase = require('./dispatcher-base')\nconst Pool = require('./pool')\nconst Client = require('./client')\nconst util = require('../core/util')\n\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kOnDrain = Symbol('onDrain')\nconst kFactory = Symbol('factory')\nconst kOptions = Symbol('options')\n\nfunction defaultFactory (origin, opts) {\n return opts && opts.connections === 1\n ? new Client(origin, opts)\n : new Pool(origin, opts)\n}\n\nclass Agent extends DispatcherBase {\n constructor ({ factory = defaultFactory, connect, ...options } = {}) {\n if (typeof factory !== 'function') {\n throw new InvalidArgumentError('factory must be a function.')\n }\n\n if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n throw new InvalidArgumentError('connect must be a function or an object')\n }\n\n super()\n\n if (connect && typeof connect !== 'function') {\n connect = { ...connect }\n }\n\n this[kOptions] = { ...util.deepClone(options), connect }\n this[kFactory] = factory\n this[kClients] = new Map()\n\n this[kOnDrain] = (origin, targets) => {\n this.emit('drain', origin, [this, ...targets])\n }\n\n this[kOnConnect] = (origin, targets) => {\n this.emit('connect', origin, [this, ...targets])\n }\n\n this[kOnDisconnect] = (origin, targets, err) => {\n this.emit('disconnect', origin, [this, ...targets], err)\n }\n\n this[kOnConnectionError] = (origin, targets, err) => {\n this.emit('connectionError', origin, [this, ...targets], err)\n }\n }\n\n get [kRunning] () {\n let ret = 0\n for (const client of this[kClients].values()) {\n ret += client[kRunning]\n }\n return ret\n }\n\n [kDispatch] (opts, handler) {\n let key\n if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {\n key = String(opts.origin)\n } else {\n throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')\n }\n\n let dispatcher = this[kClients].get(key)\n\n if (!dispatcher) {\n dispatcher = this[kFactory](opts.origin, this[kOptions])\n .on('drain', this[kOnDrain])\n .on('connect', this[kOnConnect])\n .on('disconnect', this[kOnDisconnect])\n .on('connectionError', this[kOnConnectionError])\n\n // This introduces a tiny memory leak, as dispatchers are never removed from the map.\n // TODO(mcollina): remove te timer when the client/pool do not have any more\n // active connections.\n this[kClients].set(key, dispatcher)\n }\n\n return dispatcher.dispatch(opts, handler)\n }\n\n async [kClose] () {\n const closePromises = []\n for (const client of this[kClients].values()) {\n closePromises.push(client.close())\n }\n this[kClients].clear()\n\n await Promise.all(closePromises)\n }\n\n async [kDestroy] (err) {\n const destroyPromises = []\n for (const client of this[kClients].values()) {\n destroyPromises.push(client.destroy(err))\n }\n this[kClients].clear()\n\n await Promise.all(destroyPromises)\n }\n}\n\nmodule.exports = Agent\n", "'use strict'\n\nconst { kProxy, kClose, kDestroy } = require('../core/symbols')\nconst { URL } = require('node:url')\nconst Agent = require('./agent')\nconst Pool = require('./pool')\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')\nconst buildConnector = require('../core/connect')\n\nconst kAgent = Symbol('proxy agent')\nconst kClient = Symbol('proxy client')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kRequestTls = Symbol('request tls settings')\nconst kProxyTls = Symbol('proxy tls settings')\nconst kConnectEndpoint = Symbol('connect endpoint function')\n\nfunction defaultProtocolPort (protocol) {\n return protocol === 'https:' ? 443 : 80\n}\n\nfunction defaultFactory (origin, opts) {\n return new Pool(origin, opts)\n}\n\nconst noop = () => {}\n\nclass ProxyAgent extends DispatcherBase {\n constructor (opts) {\n if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {\n throw new InvalidArgumentError('Proxy uri is mandatory')\n }\n\n const { clientFactory = defaultFactory } = opts\n if (typeof clientFactory !== 'function') {\n throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')\n }\n\n super()\n\n const url = this.#getUrl(opts)\n const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url\n\n this[kProxy] = { uri: href, protocol }\n this[kRequestTls] = opts.requestTls\n this[kProxyTls] = opts.proxyTls\n this[kProxyHeaders] = opts.headers || {}\n\n if (opts.auth && opts.token) {\n throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')\n } else if (opts.auth) {\n /* @deprecated in favour of opts.token */\n this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`\n } else if (opts.token) {\n this[kProxyHeaders]['proxy-authorization'] = opts.token\n } else if (username && password) {\n this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`\n }\n\n const connect = buildConnector({ ...opts.proxyTls })\n this[kConnectEndpoint] = buildConnector({ ...opts.requestTls })\n this[kClient] = clientFactory(url, { connect })\n this[kAgent] = new Agent({\n ...opts,\n connect: async (opts, callback) => {\n let requestedPath = opts.host\n if (!opts.port) {\n requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n }\n try {\n const { socket, statusCode } = await this[kClient].connect({\n origin,\n port,\n path: requestedPath,\n signal: opts.signal,\n headers: {\n ...this[kProxyHeaders],\n host: opts.host\n },\n servername: this[kProxyTls]?.servername || proxyHostname\n })\n if (statusCode !== 200) {\n socket.on('error', noop).destroy()\n callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\n }\n if (opts.protocol !== 'https:') {\n callback(null, socket)\n return\n }\n let servername\n if (this[kRequestTls]) {\n servername = this[kRequestTls].servername\n } else {\n servername = opts.servername\n }\n this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback)\n } catch (err) {\n if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n // Throw a custom error to avoid loop in client.js#connect\n callback(new SecureProxyConnectionError(err))\n } else {\n callback(err)\n }\n }\n }\n })\n }\n\n dispatch (opts, handler) {\n const headers = buildHeaders(opts.headers)\n throwIfProxyAuthIsSent(headers)\n\n if (headers && !('host' in headers) && !('Host' in headers)) {\n const { host } = new URL(opts.origin)\n headers.host = host\n }\n\n return this[kAgent].dispatch(\n {\n ...opts,\n headers\n },\n handler\n )\n }\n\n /**\n * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts\n * @returns {URL}\n */\n #getUrl (opts) {\n if (typeof opts === 'string') {\n return new URL(opts)\n } else if (opts instanceof URL) {\n return opts\n } else {\n return new URL(opts.uri)\n }\n }\n\n async [kClose] () {\n await this[kAgent].close()\n await this[kClient].close()\n }\n\n async [kDestroy] () {\n await this[kAgent].destroy()\n await this[kClient].destroy()\n }\n}\n\n/**\n * @param {string[] | Record<string, string>} headers\n * @returns {Record<string, string>}\n */\nfunction buildHeaders (headers) {\n // When using undici.fetch, the headers list is stored\n // as an array.\n if (Array.isArray(headers)) {\n /** @type {Record<string, string>} */\n const headersPair = {}\n\n for (let i = 0; i < headers.length; i += 2) {\n headersPair[headers[i]] = headers[i + 1]\n }\n\n return headersPair\n }\n\n return headers\n}\n\n/**\n * @param {Record<string, string>} headers\n *\n * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers\n * Nevertheless, it was changed and to avoid a security vulnerability by end users\n * this check was created.\n * It should be removed in the next major version for performance reasons\n */\nfunction throwIfProxyAuthIsSent (headers) {\n const existProxyAuth = headers && Object.keys(headers)\n .find((key) => key.toLowerCase() === 'proxy-authorization')\n if (existProxyAuth) {\n throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')\n }\n}\n\nmodule.exports = ProxyAgent\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require('../core/symbols')\nconst ProxyAgent = require('./proxy-agent')\nconst Agent = require('./agent')\n\nconst DEFAULT_PORTS = {\n 'http:': 80,\n 'https:': 443\n}\n\nclass EnvHttpProxyAgent extends DispatcherBase {\n #noProxyValue = null\n #noProxyEntries = null\n #opts = null\n\n constructor (opts = {}) {\n super()\n this.#opts = opts\n\n const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts\n\n this[kNoProxyAgent] = new Agent(agentOpts)\n\n const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY\n if (HTTP_PROXY) {\n this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY })\n } else {\n this[kHttpProxyAgent] = this[kNoProxyAgent]\n }\n\n const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY\n if (HTTPS_PROXY) {\n this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY })\n } else {\n this[kHttpsProxyAgent] = this[kHttpProxyAgent]\n }\n\n this.#parseNoProxy()\n }\n\n [kDispatch] (opts, handler) {\n const url = new URL(opts.origin)\n const agent = this.#getProxyAgentForUrl(url)\n return agent.dispatch(opts, handler)\n }\n\n async [kClose] () {\n await this[kNoProxyAgent].close()\n if (!this[kHttpProxyAgent][kClosed]) {\n await this[kHttpProxyAgent].close()\n }\n if (!this[kHttpsProxyAgent][kClosed]) {\n await this[kHttpsProxyAgent].close()\n }\n }\n\n async [kDestroy] (err) {\n await this[kNoProxyAgent].destroy(err)\n if (!this[kHttpProxyAgent][kDestroyed]) {\n await this[kHttpProxyAgent].destroy(err)\n }\n if (!this[kHttpsProxyAgent][kDestroyed]) {\n await this[kHttpsProxyAgent].destroy(err)\n }\n }\n\n #getProxyAgentForUrl (url) {\n let { protocol, host: hostname, port } = url\n\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '').toLowerCase()\n port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0\n if (!this.#shouldProxy(hostname, port)) {\n return this[kNoProxyAgent]\n }\n if (protocol === 'https:') {\n return this[kHttpsProxyAgent]\n }\n return this[kHttpProxyAgent]\n }\n\n #shouldProxy (hostname, port) {\n if (this.#noProxyChanged) {\n this.#parseNoProxy()\n }\n\n if (this.#noProxyEntries.length === 0) {\n return true // Always proxy if NO_PROXY is not set or empty.\n }\n if (this.#noProxyValue === '*') {\n return false // Never proxy if wildcard is set.\n }\n\n for (let i = 0; i < this.#noProxyEntries.length; i++) {\n const entry = this.#noProxyEntries[i]\n if (entry.port && entry.port !== port) {\n continue // Skip if ports don't match.\n }\n if (!/^[.*]/.test(entry.hostname)) {\n // No wildcards, so don't proxy only if there is not an exact match.\n if (hostname === entry.hostname) {\n return false\n }\n } else {\n // Don't proxy if the hostname ends with the no_proxy host.\n if (hostname.endsWith(entry.hostname.replace(/^\\*/, ''))) {\n return false\n }\n }\n }\n\n return true\n }\n\n #parseNoProxy () {\n const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv\n const noProxySplit = noProxyValue.split(/[,\\s]/)\n const noProxyEntries = []\n\n for (let i = 0; i < noProxySplit.length; i++) {\n const entry = noProxySplit[i]\n if (!entry) {\n continue\n }\n const parsed = entry.match(/^(.+):(\\d+)$/)\n noProxyEntries.push({\n hostname: (parsed ? parsed[1] : entry).toLowerCase(),\n port: parsed ? Number.parseInt(parsed[2], 10) : 0\n })\n }\n\n this.#noProxyValue = noProxyValue\n this.#noProxyEntries = noProxyEntries\n }\n\n get #noProxyChanged () {\n if (this.#opts.noProxy !== undefined) {\n return false\n }\n return this.#noProxyValue !== this.#noProxyEnv\n }\n\n get #noProxyEnv () {\n return process.env.no_proxy ?? process.env.NO_PROXY ?? ''\n }\n}\n\nmodule.exports = EnvHttpProxyAgent\n", "'use strict'\nconst assert = require('node:assert')\n\nconst { kRetryHandlerDefaultRetry } = require('../core/symbols')\nconst { RequestRetryError } = require('../core/errors')\nconst WrapHandler = require('./wrap-handler')\nconst {\n isDisturbed,\n parseRangeHeader,\n wrapRequestBody\n} = require('../core/util')\n\nfunction calculateRetryAfterHeader (retryAfter) {\n const current = Date.now()\n return new Date(retryAfter).getTime() - current\n}\n\nclass RetryHandler {\n constructor (opts, { dispatch, handler }) {\n const { retryOptions, ...dispatchOpts } = opts\n const {\n // Retry scoped\n retry: retryFn,\n maxRetries,\n maxTimeout,\n minTimeout,\n timeoutFactor,\n // Response scoped\n methods,\n errorCodes,\n retryAfter,\n statusCodes\n } = retryOptions ?? {}\n\n this.dispatch = dispatch\n this.handler = WrapHandler.wrap(handler)\n this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }\n this.retryOpts = {\n retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],\n retryAfter: retryAfter ?? true,\n maxTimeout: maxTimeout ?? 30 * 1000, // 30s,\n minTimeout: minTimeout ?? 500, // .5s\n timeoutFactor: timeoutFactor ?? 2,\n maxRetries: maxRetries ?? 5,\n // What errors we should retry\n methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],\n // Indicates which errors to retry\n statusCodes: statusCodes ?? [500, 502, 503, 504, 429],\n // List of errors to retry\n errorCodes: errorCodes ?? [\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'ENETDOWN',\n 'ENETUNREACH',\n 'EHOSTDOWN',\n 'EHOSTUNREACH',\n 'EPIPE',\n 'UND_ERR_SOCKET'\n ]\n }\n\n this.retryCount = 0\n this.retryCountCheckpoint = 0\n this.headersSent = false\n this.start = 0\n this.end = null\n this.etag = null\n }\n\n onRequestStart (controller, context) {\n if (!this.headersSent) {\n this.handler.onRequestStart?.(controller, context)\n }\n }\n\n onRequestUpgrade (controller, statusCode, headers, socket) {\n this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n }\n\n static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {\n const { statusCode, code, headers } = err\n const { method, retryOptions } = opts\n const {\n maxRetries,\n minTimeout,\n maxTimeout,\n timeoutFactor,\n statusCodes,\n errorCodes,\n methods\n } = retryOptions\n const { counter } = state\n\n // Any code that is not a Undici's originated and allowed to retry\n if (code && code !== 'UND_ERR_REQ_RETRY' && !errorCodes.includes(code)) {\n cb(err)\n return\n }\n\n // If a set of method are provided and the current method is not in the list\n if (Array.isArray(methods) && !methods.includes(method)) {\n cb(err)\n return\n }\n\n // If a set of status code are provided and the current status code is not in the list\n if (\n statusCode != null &&\n Array.isArray(statusCodes) &&\n !statusCodes.includes(statusCode)\n ) {\n cb(err)\n return\n }\n\n // If we reached the max number of retries\n if (counter > maxRetries) {\n cb(err)\n return\n }\n\n let retryAfterHeader = headers?.['retry-after']\n if (retryAfterHeader) {\n retryAfterHeader = Number(retryAfterHeader)\n retryAfterHeader = Number.isNaN(retryAfterHeader)\n ? calculateRetryAfterHeader(retryAfterHeader)\n : retryAfterHeader * 1e3 // Retry-After is in seconds\n }\n\n const retryTimeout =\n retryAfterHeader > 0\n ? Math.min(retryAfterHeader, maxTimeout)\n : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)\n\n setTimeout(() => cb(null), retryTimeout)\n }\n\n onResponseStart (controller, statusCode, headers, statusMessage) {\n this.retryCount += 1\n\n if (statusCode >= 300) {\n if (this.retryOpts.statusCodes.includes(statusCode) === false) {\n this.headersSent = true\n this.handler.onResponseStart?.(\n controller,\n statusCode,\n headers,\n statusMessage\n )\n return\n } else {\n throw new RequestRetryError('Request failed', statusCode, {\n headers,\n data: {\n count: this.retryCount\n }\n })\n }\n }\n\n // Checkpoint for resume from where we left it\n if (this.headersSent) {\n // Only Partial Content 206 supposed to provide Content-Range,\n // any other status code that partially consumed the payload\n // should not be retried because it would result in downstream\n // wrongly concatenate multiple responses.\n if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {\n throw new RequestRetryError('server does not support the range header and the payload was partially consumed', statusCode, {\n headers,\n data: { count: this.retryCount }\n })\n }\n\n const contentRange = parseRangeHeader(headers['content-range'])\n // If no content range\n if (!contentRange) {\n throw new RequestRetryError('Content-Range mismatch', statusCode, {\n headers,\n data: { count: this.retryCount }\n })\n }\n\n // Let's start with a weak etag check\n if (this.etag != null && this.etag !== headers.etag) {\n throw new RequestRetryError('ETag mismatch', statusCode, {\n headers,\n data: { count: this.retryCount }\n })\n }\n\n const { start, size, end = size ? size - 1 : null } = contentRange\n\n assert(this.start === start, 'content-range mismatch')\n assert(this.end == null || this.end === end, 'content-range mismatch')\n\n return\n }\n\n if (this.end == null) {\n if (statusCode === 206) {\n // First time we receive 206\n const range = parseRangeHeader(headers['content-range'])\n\n if (range == null) {\n this.headersSent = true\n this.handler.onResponseStart?.(\n controller,\n statusCode,\n headers,\n statusMessage\n )\n return\n }\n\n const { start, size, end = size ? size - 1 : null } = range\n assert(\n start != null && Number.isFinite(start),\n 'content-range mismatch'\n )\n assert(end != null && Number.isFinite(end), 'invalid content-length')\n\n this.start = start\n this.end = end\n }\n\n // We make our best to checkpoint the body for further range headers\n if (this.end == null) {\n const contentLength = headers['content-length']\n this.end = contentLength != null ? Number(contentLength) - 1 : null\n }\n\n assert(Number.isFinite(this.start))\n assert(\n this.end == null || Number.isFinite(this.end),\n 'invalid content-length'\n )\n\n this.resume = true\n this.etag = headers.etag != null ? headers.etag : null\n\n // Weak etags are not useful for comparison nor cache\n // for instance not safe to assume if the response is byte-per-byte\n // equal\n if (\n this.etag != null &&\n this.etag[0] === 'W' &&\n this.etag[1] === '/'\n ) {\n this.etag = null\n }\n\n this.headersSent = true\n this.handler.onResponseStart?.(\n controller,\n statusCode,\n headers,\n statusMessage\n )\n } else {\n throw new RequestRetryError('Request failed', statusCode, {\n headers,\n data: { count: this.retryCount }\n })\n }\n }\n\n onResponseData (controller, chunk) {\n this.start += chunk.length\n\n this.handler.onResponseData?.(controller, chunk)\n }\n\n onResponseEnd (controller, trailers) {\n this.retryCount = 0\n return this.handler.onResponseEnd?.(controller, trailers)\n }\n\n onResponseError (controller, err) {\n if (controller?.aborted || isDisturbed(this.opts.body)) {\n this.handler.onResponseError?.(controller, err)\n return\n }\n\n // We reconcile in case of a mix between network errors\n // and server error response\n if (this.retryCount - this.retryCountCheckpoint > 0) {\n // We count the difference between the last checkpoint and the current retry count\n this.retryCount =\n this.retryCountCheckpoint +\n (this.retryCount - this.retryCountCheckpoint)\n } else {\n this.retryCount += 1\n }\n\n this.retryOpts.retry(\n err,\n {\n state: { counter: this.retryCount },\n opts: { retryOptions: this.retryOpts, ...this.opts }\n },\n onRetry.bind(this)\n )\n\n /**\n * @this {RetryHandler}\n * @param {Error} [err]\n * @returns\n */\n function onRetry (err) {\n if (err != null || controller?.aborted || isDisturbed(this.opts.body)) {\n return this.handler.onResponseError?.(controller, err)\n }\n\n if (this.start !== 0) {\n const headers = { range: `bytes=${this.start}-${this.end ?? ''}` }\n\n // Weak etag check - weak etags will make comparison algorithms never match\n if (this.etag != null) {\n headers['if-match'] = this.etag\n }\n\n this.opts = {\n ...this.opts,\n headers: {\n ...this.opts.headers,\n ...headers\n }\n }\n }\n\n try {\n this.retryCountCheckpoint = this.retryCount\n this.dispatch(this.opts, this)\n } catch (err) {\n this.handler.onResponseError?.(controller, err)\n }\n }\n }\n}\n\nmodule.exports = RetryHandler\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst RetryHandler = require('../handler/retry-handler')\n\nclass RetryAgent extends Dispatcher {\n #agent = null\n #options = null\n constructor (agent, options = {}) {\n super(options)\n this.#agent = agent\n this.#options = options\n }\n\n dispatch (opts, handler) {\n const retry = new RetryHandler({\n ...opts,\n retryOptions: this.#options\n }, {\n dispatch: this.#agent.dispatch.bind(this.#agent),\n handler\n })\n return this.#agent.dispatch(opts, retry)\n }\n\n close () {\n return this.#agent.close()\n }\n\n destroy () {\n return this.#agent.destroy()\n }\n}\n\nmodule.exports = RetryAgent\n", "// Ported from https://github.com/nodejs/undici/pull/907\n\n'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')\nconst util = require('../core/util')\nconst { ReadableStreamFrom } = require('../core/util')\n\nconst kConsume = Symbol('kConsume')\nconst kReading = Symbol('kReading')\nconst kBody = Symbol('kBody')\nconst kAbort = Symbol('kAbort')\nconst kContentType = Symbol('kContentType')\nconst kContentLength = Symbol('kContentLength')\nconst kUsed = Symbol('kUsed')\nconst kBytesRead = Symbol('kBytesRead')\n\nconst noop = () => {}\n\n/**\n * @class\n * @extends {Readable}\n * @see https://fetch.spec.whatwg.org/#body\n */\nclass BodyReadable extends Readable {\n /**\n * @param {object} opts\n * @param {(this: Readable, size: number) => void} opts.resume\n * @param {() => (void | null)} opts.abort\n * @param {string} [opts.contentType = '']\n * @param {number} [opts.contentLength]\n * @param {number} [opts.highWaterMark = 64 * 1024]\n */\n constructor ({\n resume,\n abort,\n contentType = '',\n contentLength,\n highWaterMark = 64 * 1024 // Same as nodejs fs streams.\n }) {\n super({\n autoDestroy: true,\n read: resume,\n highWaterMark\n })\n\n this._readableState.dataEmitted = false\n\n this[kAbort] = abort\n\n /**\n * @type {Consume | null}\n */\n this[kConsume] = null\n this[kBytesRead] = 0\n /**\n * @type {ReadableStream|null}\n */\n this[kBody] = null\n this[kUsed] = false\n this[kContentType] = contentType\n this[kContentLength] = Number.isFinite(contentLength) ? contentLength : null\n\n // Is stream being consumed through Readable API?\n // This is an optimization so that we avoid checking\n // for 'data' and 'readable' listeners in the hot path\n // inside push().\n this[kReading] = false\n }\n\n /**\n * @param {Error|null} err\n * @param {(error:(Error|null)) => void} callback\n * @returns {void}\n */\n _destroy (err, callback) {\n if (!err && !this._readableState.endEmitted) {\n err = new RequestAbortedError()\n }\n\n if (err) {\n this[kAbort]()\n }\n\n // Workaround for Node \"bug\". If the stream is destroyed in same\n // tick as it is created, then a user who is waiting for a\n // promise (i.e micro tick) for installing an 'error' listener will\n // never get a chance and will always encounter an unhandled exception.\n if (!this[kUsed]) {\n setImmediate(() => {\n callback(err)\n })\n } else {\n callback(err)\n }\n }\n\n /**\n * @param {string} event\n * @param {(...args: any[]) => void} listener\n * @returns {this}\n */\n on (event, listener) {\n if (event === 'data' || event === 'readable') {\n this[kReading] = true\n this[kUsed] = true\n }\n return super.on(event, listener)\n }\n\n /**\n * @param {string} event\n * @param {(...args: any[]) => void} listener\n * @returns {this}\n */\n addListener (event, listener) {\n return this.on(event, listener)\n }\n\n /**\n * @param {string|symbol} event\n * @param {(...args: any[]) => void} listener\n * @returns {this}\n */\n off (event, listener) {\n const ret = super.off(event, listener)\n if (event === 'data' || event === 'readable') {\n this[kReading] = (\n this.listenerCount('data') > 0 ||\n this.listenerCount('readable') > 0\n )\n }\n return ret\n }\n\n /**\n * @param {string|symbol} event\n * @param {(...args: any[]) => void} listener\n * @returns {this}\n */\n removeListener (event, listener) {\n return this.off(event, listener)\n }\n\n /**\n * @param {Buffer|null} chunk\n * @returns {boolean}\n */\n push (chunk) {\n this[kBytesRead] += chunk ? chunk.length : 0\n\n if (this[kConsume] && chunk !== null) {\n consumePush(this[kConsume], chunk)\n return this[kReading] ? super.push(chunk) : true\n }\n return super.push(chunk)\n }\n\n /**\n * Consumes and returns the body as a string.\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-text\n * @returns {Promise<string>}\n */\n text () {\n return consume(this, 'text')\n }\n\n /**\n * Consumes and returns the body as a JavaScript Object.\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-json\n * @returns {Promise<unknown>}\n */\n json () {\n return consume(this, 'json')\n }\n\n /**\n * Consumes and returns the body as a Blob\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-blob\n * @returns {Promise<Blob>}\n */\n blob () {\n return consume(this, 'blob')\n }\n\n /**\n * Consumes and returns the body as an Uint8Array.\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-bytes\n * @returns {Promise<Uint8Array>}\n */\n bytes () {\n return consume(this, 'bytes')\n }\n\n /**\n * Consumes and returns the body as an ArrayBuffer.\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-arraybuffer\n * @returns {Promise<ArrayBuffer>}\n */\n arrayBuffer () {\n return consume(this, 'arrayBuffer')\n }\n\n /**\n * Not implemented\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-formdata\n * @throws {NotSupportedError}\n */\n async formData () {\n // TODO: Implement.\n throw new NotSupportedError()\n }\n\n /**\n * Returns true if the body is not null and the body has been consumed.\n * Otherwise, returns false.\n *\n * @see https://fetch.spec.whatwg.org/#dom-body-bodyused\n * @readonly\n * @returns {boolean}\n */\n get bodyUsed () {\n return util.isDisturbed(this)\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#dom-body-body\n * @readonly\n * @returns {ReadableStream}\n */\n get body () {\n if (!this[kBody]) {\n this[kBody] = ReadableStreamFrom(this)\n if (this[kConsume]) {\n // TODO: Is this the best way to force a lock?\n this[kBody].getReader() // Ensure stream is locked.\n assert(this[kBody].locked)\n }\n }\n return this[kBody]\n }\n\n /**\n * Dumps the response body by reading `limit` number of bytes.\n * @param {object} opts\n * @param {number} [opts.limit = 131072] Number of bytes to read.\n * @param {AbortSignal} [opts.signal] An AbortSignal to cancel the dump.\n * @returns {Promise<null>}\n */\n async dump (opts) {\n const signal = opts?.signal\n\n if (signal != null && (typeof signal !== 'object' || !('aborted' in signal))) {\n throw new InvalidArgumentError('signal must be an AbortSignal')\n }\n\n const limit = opts?.limit && Number.isFinite(opts.limit)\n ? opts.limit\n : 128 * 1024\n\n signal?.throwIfAborted()\n\n if (this._readableState.closeEmitted) {\n return null\n }\n\n return await new Promise((resolve, reject) => {\n if (\n (this[kContentLength] && (this[kContentLength] > limit)) ||\n this[kBytesRead] > limit\n ) {\n this.destroy(new AbortError())\n }\n\n if (signal) {\n const onAbort = () => {\n this.destroy(signal.reason ?? new AbortError())\n }\n signal.addEventListener('abort', onAbort)\n this\n .on('close', function () {\n signal.removeEventListener('abort', onAbort)\n if (signal.aborted) {\n reject(signal.reason ?? new AbortError())\n } else {\n resolve(null)\n }\n })\n } else {\n this.on('close', resolve)\n }\n\n this\n .on('error', noop)\n .on('data', () => {\n if (this[kBytesRead] > limit) {\n this.destroy()\n }\n })\n .resume()\n })\n }\n\n /**\n * @param {BufferEncoding} encoding\n * @returns {this}\n */\n setEncoding (encoding) {\n if (Buffer.isEncoding(encoding)) {\n this._readableState.encoding = encoding\n }\n return this\n }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestream-locked\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isLocked (bodyReadable) {\n // Consume is an implicit lock.\n return bodyReadable[kBody]?.locked === true || bodyReadable[kConsume] !== null\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isUnusable (bodyReadable) {\n return util.isDisturbed(bodyReadable) || isLocked(bodyReadable)\n}\n\n/**\n * @typedef {object} Consume\n * @property {string} type\n * @property {BodyReadable} stream\n * @property {((value?: any) => void)} resolve\n * @property {((err: Error) => void)} reject\n * @property {number} length\n * @property {Buffer[]} body\n */\n\n/**\n * @param {BodyReadable} stream\n * @param {string} type\n * @returns {Promise<any>}\n */\nfunction consume (stream, type) {\n assert(!stream[kConsume])\n\n return new Promise((resolve, reject) => {\n if (isUnusable(stream)) {\n const rState = stream._readableState\n if (rState.destroyed && rState.closeEmitted === false) {\n stream\n .on('error', err => {\n reject(err)\n })\n .on('close', () => {\n reject(new TypeError('unusable'))\n })\n } else {\n reject(rState.errored ?? new TypeError('unusable'))\n }\n } else {\n queueMicrotask(() => {\n stream[kConsume] = {\n type,\n stream,\n resolve,\n reject,\n length: 0,\n body: []\n }\n\n stream\n .on('error', function (err) {\n consumeFinish(this[kConsume], err)\n })\n .on('close', function () {\n if (this[kConsume].body !== null) {\n consumeFinish(this[kConsume], new RequestAbortedError())\n }\n })\n\n consumeStart(stream[kConsume])\n })\n }\n })\n}\n\n/**\n * @param {Consume} consume\n * @returns {void}\n */\nfunction consumeStart (consume) {\n if (consume.body === null) {\n return\n }\n\n const { _readableState: state } = consume.stream\n\n if (state.bufferIndex) {\n const start = state.bufferIndex\n const end = state.buffer.length\n for (let n = start; n < end; n++) {\n consumePush(consume, state.buffer[n])\n }\n } else {\n for (const chunk of state.buffer) {\n consumePush(consume, chunk)\n }\n }\n\n if (state.endEmitted) {\n consumeEnd(this[kConsume], this._readableState.encoding)\n } else {\n consume.stream.on('end', function () {\n consumeEnd(this[kConsume], this._readableState.encoding)\n })\n }\n\n consume.stream.resume()\n\n while (consume.stream.read() != null) {\n // Loop\n }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @param {BufferEncoding} encoding\n * @returns {string}\n */\nfunction chunksDecode (chunks, length, encoding) {\n if (chunks.length === 0 || length === 0) {\n return ''\n }\n const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length)\n const bufferLength = buffer.length\n\n // Skip BOM.\n const start =\n bufferLength > 2 &&\n buffer[0] === 0xef &&\n buffer[1] === 0xbb &&\n buffer[2] === 0xbf\n ? 3\n : 0\n if (!encoding || encoding === 'utf8' || encoding === 'utf-8') {\n return buffer.utf8Slice(start, bufferLength)\n } else {\n return buffer.subarray(start, bufferLength).toString(encoding)\n }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction chunksConcat (chunks, length) {\n if (chunks.length === 0 || length === 0) {\n return new Uint8Array(0)\n }\n if (chunks.length === 1) {\n // fast-path\n return new Uint8Array(chunks[0])\n }\n const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer)\n\n let offset = 0\n for (let i = 0; i < chunks.length; ++i) {\n const chunk = chunks[i]\n buffer.set(chunk, offset)\n offset += chunk.length\n }\n\n return buffer\n}\n\n/**\n * @param {Consume} consume\n * @param {BufferEncoding} encoding\n * @returns {void}\n */\nfunction consumeEnd (consume, encoding) {\n const { type, body, resolve, stream, length } = consume\n\n try {\n if (type === 'text') {\n resolve(chunksDecode(body, length, encoding))\n } else if (type === 'json') {\n resolve(JSON.parse(chunksDecode(body, length, encoding)))\n } else if (type === 'arrayBuffer') {\n resolve(chunksConcat(body, length).buffer)\n } else if (type === 'blob') {\n resolve(new Blob(body, { type: stream[kContentType] }))\n } else if (type === 'bytes') {\n resolve(chunksConcat(body, length))\n }\n\n consumeFinish(consume)\n } catch (err) {\n stream.destroy(err)\n }\n}\n\n/**\n * @param {Consume} consume\n * @param {Buffer} chunk\n * @returns {void}\n */\nfunction consumePush (consume, chunk) {\n consume.length += chunk.length\n consume.body.push(chunk)\n}\n\n/**\n * @param {Consume} consume\n * @param {Error} [err]\n * @returns {void}\n */\nfunction consumeFinish (consume, err) {\n if (consume.body === null) {\n return\n }\n\n if (err) {\n consume.reject(err)\n } else {\n consume.resolve()\n }\n\n // Reset the consume object to allow for garbage collection.\n consume.type = null\n consume.stream = null\n consume.resolve = null\n consume.reject = null\n consume.length = 0\n consume.body = null\n}\n\nmodule.exports = {\n Readable: BodyReadable,\n chunksDecode\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { Readable } = require('./readable')\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst util = require('../core/util')\n\nfunction noop () {}\n\nclass RequestHandler extends AsyncResource {\n constructor (opts, callback) {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n const { signal, method, opaque, body, onInfo, responseHeaders, highWaterMark } = opts\n\n try {\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) {\n throw new InvalidArgumentError('invalid highWaterMark')\n }\n\n if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n }\n\n if (method === 'CONNECT') {\n throw new InvalidArgumentError('invalid method')\n }\n\n if (onInfo && typeof onInfo !== 'function') {\n throw new InvalidArgumentError('invalid onInfo callback')\n }\n\n super('UNDICI_REQUEST')\n } catch (err) {\n if (util.isStream(body)) {\n util.destroy(body.on('error', noop), err)\n }\n throw err\n }\n\n this.method = method\n this.responseHeaders = responseHeaders || null\n this.opaque = opaque || null\n this.callback = callback\n this.res = null\n this.abort = null\n this.body = body\n this.trailers = {}\n this.context = null\n this.onInfo = onInfo || null\n this.highWaterMark = highWaterMark\n this.reason = null\n this.removeAbortListener = null\n\n if (signal?.aborted) {\n this.reason = signal.reason ?? new RequestAbortedError()\n } else if (signal) {\n this.removeAbortListener = util.addAbortListener(signal, () => {\n this.reason = signal.reason ?? new RequestAbortedError()\n if (this.res) {\n util.destroy(this.res.on('error', noop), this.reason)\n } else if (this.abort) {\n this.abort(this.reason)\n }\n })\n }\n }\n\n onConnect (abort, context) {\n if (this.reason) {\n abort(this.reason)\n return\n }\n\n assert(this.callback)\n\n this.abort = abort\n this.context = context\n }\n\n onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this\n\n const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n if (statusCode < 200) {\n if (this.onInfo) {\n this.onInfo({ statusCode, headers })\n }\n return\n }\n\n const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers\n const contentType = parsedHeaders['content-type']\n const contentLength = parsedHeaders['content-length']\n const res = new Readable({\n resume,\n abort,\n contentType,\n contentLength: this.method !== 'HEAD' && contentLength\n ? Number(contentLength)\n : null,\n highWaterMark\n })\n\n if (this.removeAbortListener) {\n res.on('close', this.removeAbortListener)\n this.removeAbortListener = null\n }\n\n this.callback = null\n this.res = res\n if (callback !== null) {\n this.runInAsyncScope(callback, null, null, {\n statusCode,\n headers,\n trailers: this.trailers,\n opaque,\n body: res,\n context\n })\n }\n }\n\n onData (chunk) {\n return this.res.push(chunk)\n }\n\n onComplete (trailers) {\n util.parseHeaders(trailers, this.trailers)\n this.res.push(null)\n }\n\n onError (err) {\n const { res, callback, body, opaque } = this\n\n if (callback) {\n // TODO: Does this need queueMicrotask?\n this.callback = null\n queueMicrotask(() => {\n this.runInAsyncScope(callback, null, err, { opaque })\n })\n }\n\n if (res) {\n this.res = null\n // Ensure all queued handlers are invoked before destroying res.\n queueMicrotask(() => {\n util.destroy(res.on('error', noop), err)\n })\n }\n\n if (body) {\n this.body = null\n\n if (util.isStream(body)) {\n body.on('error', noop)\n util.destroy(body, err)\n }\n }\n\n if (this.removeAbortListener) {\n this.removeAbortListener()\n this.removeAbortListener = null\n }\n }\n}\n\nfunction request (opts, callback) {\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n request.call(this, opts, (err, data) => {\n return err ? reject(err) : resolve(data)\n })\n })\n }\n\n try {\n const handler = new RequestHandler(opts, callback)\n\n this.dispatch(opts, handler)\n } catch (err) {\n if (typeof callback !== 'function') {\n throw err\n }\n const opaque = opts?.opaque\n queueMicrotask(() => callback(err, { opaque }))\n }\n}\n\nmodule.exports = request\nmodule.exports.RequestHandler = RequestHandler\n", "'use strict'\n\nconst { addAbortListener } = require('../core/util')\nconst { RequestAbortedError } = require('../core/errors')\n\nconst kListener = Symbol('kListener')\nconst kSignal = Symbol('kSignal')\n\nfunction abort (self) {\n if (self.abort) {\n self.abort(self[kSignal]?.reason)\n } else {\n self.reason = self[kSignal]?.reason ?? new RequestAbortedError()\n }\n removeSignal(self)\n}\n\nfunction addSignal (self, signal) {\n self.reason = null\n\n self[kSignal] = null\n self[kListener] = null\n\n if (!signal) {\n return\n }\n\n if (signal.aborted) {\n abort(self)\n return\n }\n\n self[kSignal] = signal\n self[kListener] = () => {\n abort(self)\n }\n\n addAbortListener(self[kSignal], self[kListener])\n}\n\nfunction removeSignal (self) {\n if (!self[kSignal]) {\n return\n }\n\n if ('removeEventListener' in self[kSignal]) {\n self[kSignal].removeEventListener('abort', self[kListener])\n } else {\n self[kSignal].removeListener('abort', self[kListener])\n }\n\n self[kSignal] = null\n self[kListener] = null\n}\n\nmodule.exports = {\n addSignal,\n removeSignal\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { finished } = require('node:stream')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, InvalidReturnValueError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nclass StreamHandler extends AsyncResource {\n constructor (opts, factory, callback) {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n const { signal, method, opaque, body, onInfo, responseHeaders } = opts\n\n try {\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n if (typeof factory !== 'function') {\n throw new InvalidArgumentError('invalid factory')\n }\n\n if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n }\n\n if (method === 'CONNECT') {\n throw new InvalidArgumentError('invalid method')\n }\n\n if (onInfo && typeof onInfo !== 'function') {\n throw new InvalidArgumentError('invalid onInfo callback')\n }\n\n super('UNDICI_STREAM')\n } catch (err) {\n if (util.isStream(body)) {\n util.destroy(body.on('error', noop), err)\n }\n throw err\n }\n\n this.responseHeaders = responseHeaders || null\n this.opaque = opaque || null\n this.factory = factory\n this.callback = callback\n this.res = null\n this.abort = null\n this.context = null\n this.trailers = null\n this.body = body\n this.onInfo = onInfo || null\n\n if (util.isStream(body)) {\n body.on('error', (err) => {\n this.onError(err)\n })\n }\n\n addSignal(this, signal)\n }\n\n onConnect (abort, context) {\n if (this.reason) {\n abort(this.reason)\n return\n }\n\n assert(this.callback)\n\n this.abort = abort\n this.context = context\n }\n\n onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n const { factory, opaque, context, responseHeaders } = this\n\n const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n if (statusCode < 200) {\n if (this.onInfo) {\n this.onInfo({ statusCode, headers })\n }\n return\n }\n\n this.factory = null\n\n if (factory === null) {\n return\n }\n\n const res = this.runInAsyncScope(factory, null, {\n statusCode,\n headers,\n opaque,\n context\n })\n\n if (\n !res ||\n typeof res.write !== 'function' ||\n typeof res.end !== 'function' ||\n typeof res.on !== 'function'\n ) {\n throw new InvalidReturnValueError('expected Writable')\n }\n\n // TODO: Avoid finished. It registers an unnecessary amount of listeners.\n finished(res, { readable: false }, (err) => {\n const { callback, res, opaque, trailers, abort } = this\n\n this.res = null\n if (err || !res.readable) {\n util.destroy(res, err)\n }\n\n this.callback = null\n this.runInAsyncScope(callback, null, err || null, { opaque, trailers })\n\n if (err) {\n abort()\n }\n })\n\n res.on('drain', resume)\n\n this.res = res\n\n const needDrain = res.writableNeedDrain !== undefined\n ? res.writableNeedDrain\n : res._writableState?.needDrain\n\n return needDrain !== true\n }\n\n onData (chunk) {\n const { res } = this\n\n return res ? res.write(chunk) : true\n }\n\n onComplete (trailers) {\n const { res } = this\n\n removeSignal(this)\n\n if (!res) {\n return\n }\n\n this.trailers = util.parseHeaders(trailers)\n\n res.end()\n }\n\n onError (err) {\n const { res, callback, opaque, body } = this\n\n removeSignal(this)\n\n this.factory = null\n\n if (res) {\n this.res = null\n util.destroy(res, err)\n } else if (callback) {\n this.callback = null\n queueMicrotask(() => {\n this.runInAsyncScope(callback, null, err, { opaque })\n })\n }\n\n if (body) {\n this.body = null\n util.destroy(body, err)\n }\n }\n}\n\nfunction stream (opts, factory, callback) {\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n stream.call(this, opts, factory, (err, data) => {\n return err ? reject(err) : resolve(data)\n })\n })\n }\n\n try {\n const handler = new StreamHandler(opts, factory, callback)\n\n this.dispatch(opts, handler)\n } catch (err) {\n if (typeof callback !== 'function') {\n throw err\n }\n const opaque = opts?.opaque\n queueMicrotask(() => callback(err, { opaque }))\n }\n}\n\nmodule.exports = stream\n", "'use strict'\n\nconst {\n Readable,\n Duplex,\n PassThrough\n} = require('node:stream')\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst {\n InvalidArgumentError,\n InvalidReturnValueError,\n RequestAbortedError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nconst kResume = Symbol('resume')\n\nclass PipelineRequest extends Readable {\n constructor () {\n super({ autoDestroy: true })\n\n this[kResume] = null\n }\n\n _read () {\n const { [kResume]: resume } = this\n\n if (resume) {\n this[kResume] = null\n resume()\n }\n }\n\n _destroy (err, callback) {\n this._read()\n\n callback(err)\n }\n}\n\nclass PipelineResponse extends Readable {\n constructor (resume) {\n super({ autoDestroy: true })\n this[kResume] = resume\n }\n\n _read () {\n this[kResume]()\n }\n\n _destroy (err, callback) {\n if (!err && !this._readableState.endEmitted) {\n err = new RequestAbortedError()\n }\n\n callback(err)\n }\n}\n\nclass PipelineHandler extends AsyncResource {\n constructor (opts, handler) {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n if (typeof handler !== 'function') {\n throw new InvalidArgumentError('invalid handler')\n }\n\n const { signal, method, opaque, onInfo, responseHeaders } = opts\n\n if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n }\n\n if (method === 'CONNECT') {\n throw new InvalidArgumentError('invalid method')\n }\n\n if (onInfo && typeof onInfo !== 'function') {\n throw new InvalidArgumentError('invalid onInfo callback')\n }\n\n super('UNDICI_PIPELINE')\n\n this.opaque = opaque || null\n this.responseHeaders = responseHeaders || null\n this.handler = handler\n this.abort = null\n this.context = null\n this.onInfo = onInfo || null\n\n this.req = new PipelineRequest().on('error', noop)\n\n this.ret = new Duplex({\n readableObjectMode: opts.objectMode,\n autoDestroy: true,\n read: () => {\n const { body } = this\n\n if (body?.resume) {\n body.resume()\n }\n },\n write: (chunk, encoding, callback) => {\n const { req } = this\n\n if (req.push(chunk, encoding) || req._readableState.destroyed) {\n callback()\n } else {\n req[kResume] = callback\n }\n },\n destroy: (err, callback) => {\n const { body, req, res, ret, abort } = this\n\n if (!err && !ret._readableState.endEmitted) {\n err = new RequestAbortedError()\n }\n\n if (abort && err) {\n abort()\n }\n\n util.destroy(body, err)\n util.destroy(req, err)\n util.destroy(res, err)\n\n removeSignal(this)\n\n callback(err)\n }\n }).on('prefinish', () => {\n const { req } = this\n\n // Node < 15 does not call _final in same tick.\n req.push(null)\n })\n\n this.res = null\n\n addSignal(this, signal)\n }\n\n onConnect (abort, context) {\n const { res } = this\n\n if (this.reason) {\n abort(this.reason)\n return\n }\n\n assert(!res, 'pipeline cannot be retried')\n\n this.abort = abort\n this.context = context\n }\n\n onHeaders (statusCode, rawHeaders, resume) {\n const { opaque, handler, context } = this\n\n if (statusCode < 200) {\n if (this.onInfo) {\n const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n this.onInfo({ statusCode, headers })\n }\n return\n }\n\n this.res = new PipelineResponse(resume)\n\n let body\n try {\n this.handler = null\n const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n body = this.runInAsyncScope(handler, null, {\n statusCode,\n headers,\n opaque,\n body: this.res,\n context\n })\n } catch (err) {\n this.res.on('error', noop)\n throw err\n }\n\n if (!body || typeof body.on !== 'function') {\n throw new InvalidReturnValueError('expected Readable')\n }\n\n body\n .on('data', (chunk) => {\n const { ret, body } = this\n\n if (!ret.push(chunk) && body.pause) {\n body.pause()\n }\n })\n .on('error', (err) => {\n const { ret } = this\n\n util.destroy(ret, err)\n })\n .on('end', () => {\n const { ret } = this\n\n ret.push(null)\n })\n .on('close', () => {\n const { ret } = this\n\n if (!ret._readableState.ended) {\n util.destroy(ret, new RequestAbortedError())\n }\n })\n\n this.body = body\n }\n\n onData (chunk) {\n const { res } = this\n return res.push(chunk)\n }\n\n onComplete (trailers) {\n const { res } = this\n res.push(null)\n }\n\n onError (err) {\n const { ret } = this\n this.handler = null\n util.destroy(ret, err)\n }\n}\n\nfunction pipeline (opts, handler) {\n try {\n const pipelineHandler = new PipelineHandler(opts, handler)\n this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)\n return pipelineHandler.ret\n } catch (err) {\n return new PassThrough().destroy(err)\n }\n}\n\nmodule.exports = pipeline\n", "'use strict'\n\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst { AsyncResource } = require('node:async_hooks')\nconst assert = require('node:assert')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass UpgradeHandler extends AsyncResource {\n constructor (opts, callback) {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n const { signal, opaque, responseHeaders } = opts\n\n if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n }\n\n super('UNDICI_UPGRADE')\n\n this.responseHeaders = responseHeaders || null\n this.opaque = opaque || null\n this.callback = callback\n this.abort = null\n this.context = null\n\n addSignal(this, signal)\n }\n\n onConnect (abort, context) {\n if (this.reason) {\n abort(this.reason)\n return\n }\n\n assert(this.callback)\n\n this.abort = abort\n this.context = null\n }\n\n onHeaders () {\n throw new SocketError('bad upgrade', null)\n }\n\n onUpgrade (statusCode, rawHeaders, socket) {\n assert(statusCode === 101)\n\n const { callback, opaque, context } = this\n\n removeSignal(this)\n\n this.callback = null\n const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n this.runInAsyncScope(callback, null, null, {\n headers,\n socket,\n opaque,\n context\n })\n }\n\n onError (err) {\n const { callback, opaque } = this\n\n removeSignal(this)\n\n if (callback) {\n this.callback = null\n queueMicrotask(() => {\n this.runInAsyncScope(callback, null, err, { opaque })\n })\n }\n }\n}\n\nfunction upgrade (opts, callback) {\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n upgrade.call(this, opts, (err, data) => {\n return err ? reject(err) : resolve(data)\n })\n })\n }\n\n try {\n const upgradeHandler = new UpgradeHandler(opts, callback)\n const upgradeOpts = {\n ...opts,\n method: opts.method || 'GET',\n upgrade: opts.protocol || 'Websocket'\n }\n\n this.dispatch(upgradeOpts, upgradeHandler)\n } catch (err) {\n if (typeof callback !== 'function') {\n throw err\n }\n const opaque = opts?.opaque\n queueMicrotask(() => callback(err, { opaque }))\n }\n}\n\nmodule.exports = upgrade\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass ConnectHandler extends AsyncResource {\n constructor (opts, callback) {\n if (!opts || typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n if (typeof callback !== 'function') {\n throw new InvalidArgumentError('invalid callback')\n }\n\n const { signal, opaque, responseHeaders } = opts\n\n if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n }\n\n super('UNDICI_CONNECT')\n\n this.opaque = opaque || null\n this.responseHeaders = responseHeaders || null\n this.callback = callback\n this.abort = null\n\n addSignal(this, signal)\n }\n\n onConnect (abort, context) {\n if (this.reason) {\n abort(this.reason)\n return\n }\n\n assert(this.callback)\n\n this.abort = abort\n this.context = context\n }\n\n onHeaders () {\n throw new SocketError('bad connect', null)\n }\n\n onUpgrade (statusCode, rawHeaders, socket) {\n const { callback, opaque, context } = this\n\n removeSignal(this)\n\n this.callback = null\n\n let headers = rawHeaders\n // Indicates is an HTTP2Session\n if (headers != null) {\n headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n }\n\n this.runInAsyncScope(callback, null, null, {\n statusCode,\n headers,\n socket,\n opaque,\n context\n })\n }\n\n onError (err) {\n const { callback, opaque } = this\n\n removeSignal(this)\n\n if (callback) {\n this.callback = null\n queueMicrotask(() => {\n this.runInAsyncScope(callback, null, err, { opaque })\n })\n }\n }\n}\n\nfunction connect (opts, callback) {\n if (callback === undefined) {\n return new Promise((resolve, reject) => {\n connect.call(this, opts, (err, data) => {\n return err ? reject(err) : resolve(data)\n })\n })\n }\n\n try {\n const connectHandler = new ConnectHandler(opts, callback)\n const connectOptions = { ...opts, method: 'CONNECT' }\n\n this.dispatch(connectOptions, connectHandler)\n } catch (err) {\n if (typeof callback !== 'function') {\n throw err\n }\n const opaque = opts?.opaque\n queueMicrotask(() => callback(err, { opaque }))\n }\n}\n\nmodule.exports = connect\n", "'use strict'\n\nmodule.exports.request = require('./api-request')\nmodule.exports.stream = require('./api-stream')\nmodule.exports.pipeline = require('./api-pipeline')\nmodule.exports.upgrade = require('./api-upgrade')\nmodule.exports.connect = require('./api-connect')\n", "'use strict'\n\nconst { UndiciError } = require('../core/errors')\n\n/**\n * The request does not match any registered mock dispatches.\n */\nclass MockNotMatchedError extends UndiciError {\n constructor (message) {\n super(message)\n this.name = 'MockNotMatchedError'\n this.message = message || 'The request does not match any registered mock dispatches'\n this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'\n }\n}\n\nmodule.exports = {\n MockNotMatchedError\n}\n", "'use strict'\n\nmodule.exports = {\n kAgent: Symbol('agent'),\n kOptions: Symbol('options'),\n kFactory: Symbol('factory'),\n kDispatches: Symbol('dispatches'),\n kDispatchKey: Symbol('dispatch key'),\n kDefaultHeaders: Symbol('default headers'),\n kDefaultTrailers: Symbol('default trailers'),\n kContentLength: Symbol('content length'),\n kMockAgent: Symbol('mock agent'),\n kMockAgentSet: Symbol('mock agent set'),\n kMockAgentGet: Symbol('mock agent get'),\n kMockDispatch: Symbol('mock dispatch'),\n kClose: Symbol('close'),\n kOriginalClose: Symbol('original agent close'),\n kOriginalDispatch: Symbol('original dispatch'),\n kOrigin: Symbol('origin'),\n kIsMockActive: Symbol('is mock active'),\n kNetConnect: Symbol('net connect'),\n kGetNetConnect: Symbol('get net connect'),\n kConnected: Symbol('connected'),\n kIgnoreTrailingSlash: Symbol('ignore trailing slash')\n}\n", "'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n kDispatches,\n kMockAgent,\n kOriginalDispatch,\n kOrigin,\n kGetNetConnect\n} = require('./mock-symbols')\nconst { serializePathWithQuery } = require('../core/util')\nconst { STATUS_CODES } = require('node:http')\nconst {\n types: {\n isPromise\n }\n} = require('node:util')\n\nfunction matchValue (match, value) {\n if (typeof match === 'string') {\n return match === value\n }\n if (match instanceof RegExp) {\n return match.test(value)\n }\n if (typeof match === 'function') {\n return match(value) === true\n }\n return false\n}\n\nfunction lowerCaseEntries (headers) {\n return Object.fromEntries(\n Object.entries(headers).map(([headerName, headerValue]) => {\n return [headerName.toLocaleLowerCase(), headerValue]\n })\n )\n}\n\n/**\n * @param {import('../../index').Headers|string[]|Record<string, string>} headers\n * @param {string} key\n */\nfunction getHeaderByName (headers, key) {\n if (Array.isArray(headers)) {\n for (let i = 0; i < headers.length; i += 2) {\n if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {\n return headers[i + 1]\n }\n }\n\n return undefined\n } else if (typeof headers.get === 'function') {\n return headers.get(key)\n } else {\n return lowerCaseEntries(headers)[key.toLocaleLowerCase()]\n }\n}\n\n/** @param {string[]} headers */\nfunction buildHeadersFromArray (headers) { // fetch HeadersList\n const clone = headers.slice()\n const entries = []\n for (let index = 0; index < clone.length; index += 2) {\n entries.push([clone[index], clone[index + 1]])\n }\n return Object.fromEntries(entries)\n}\n\nfunction matchHeaders (mockDispatch, headers) {\n if (typeof mockDispatch.headers === 'function') {\n if (Array.isArray(headers)) { // fetch HeadersList\n headers = buildHeadersFromArray(headers)\n }\n return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})\n }\n if (typeof mockDispatch.headers === 'undefined') {\n return true\n }\n if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {\n return false\n }\n\n for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {\n const headerValue = getHeaderByName(headers, matchHeaderName)\n\n if (!matchValue(matchHeaderValue, headerValue)) {\n return false\n }\n }\n return true\n}\n\nfunction safeUrl (path) {\n if (typeof path !== 'string') {\n return path\n }\n\n const pathSegments = path.split('?')\n\n if (pathSegments.length !== 2) {\n return path\n }\n\n const qp = new URLSearchParams(pathSegments.pop())\n qp.sort()\n return [...pathSegments, qp.toString()].join('?')\n}\n\nfunction matchKey (mockDispatch, { path, method, body, headers }) {\n const pathMatch = matchValue(mockDispatch.path, path)\n const methodMatch = matchValue(mockDispatch.method, method)\n const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true\n const headersMatch = matchHeaders(mockDispatch, headers)\n return pathMatch && methodMatch && bodyMatch && headersMatch\n}\n\nfunction getResponseData (data) {\n if (Buffer.isBuffer(data)) {\n return data\n } else if (data instanceof Uint8Array) {\n return data\n } else if (data instanceof ArrayBuffer) {\n return data\n } else if (typeof data === 'object') {\n return JSON.stringify(data)\n } else if (data) {\n return data.toString()\n } else {\n return ''\n }\n}\n\nfunction getMockDispatch (mockDispatches, key) {\n const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path\n const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath\n\n const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)\n\n // Match path\n let matchedMockDispatches = mockDispatches\n .filter(({ consumed }) => !consumed)\n .filter(({ path, ignoreTrailingSlash }) => {\n return ignoreTrailingSlash\n ? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)\n : matchValue(safeUrl(path), resolvedPath)\n })\n if (matchedMockDispatches.length === 0) {\n throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)\n }\n\n // Match method\n matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))\n if (matchedMockDispatches.length === 0) {\n throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)\n }\n\n // Match body\n matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)\n if (matchedMockDispatches.length === 0) {\n throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)\n }\n\n // Match headers\n matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))\n if (matchedMockDispatches.length === 0) {\n const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers\n throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)\n }\n\n return matchedMockDispatches[0]\n}\n\nfunction addMockDispatch (mockDispatches, key, data, opts) {\n const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }\n const replyData = typeof data === 'function' ? { callback: data } : { ...data }\n const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }\n mockDispatches.push(newMockDispatch)\n return newMockDispatch\n}\n\nfunction deleteMockDispatch (mockDispatches, key) {\n const index = mockDispatches.findIndex(dispatch => {\n if (!dispatch.consumed) {\n return false\n }\n return matchKey(dispatch, key)\n })\n if (index !== -1) {\n mockDispatches.splice(index, 1)\n }\n}\n\n/**\n * @param {string} path Path to remove trailing slash from\n */\nfunction removeTrailingSlash (path) {\n while (path.endsWith('/')) {\n path = path.slice(0, -1)\n }\n\n if (path.length === 0) {\n path = '/'\n }\n\n return path\n}\n\nfunction buildKey (opts) {\n const { path, method, body, headers, query } = opts\n\n return {\n path,\n method,\n body,\n headers,\n query\n }\n}\n\nfunction generateKeyValues (data) {\n const keys = Object.keys(data)\n const result = []\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n const value = data[key]\n const name = Buffer.from(`${key}`)\n if (Array.isArray(value)) {\n for (let j = 0; j < value.length; ++j) {\n result.push(name, Buffer.from(`${value[j]}`))\n }\n } else {\n result.push(name, Buffer.from(`${value}`))\n }\n }\n return result\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n * @param {number} statusCode\n */\nfunction getStatusText (statusCode) {\n return STATUS_CODES[statusCode] || 'unknown'\n}\n\nasync function getResponse (body) {\n const buffers = []\n for await (const data of body) {\n buffers.push(data)\n }\n return Buffer.concat(buffers).toString('utf8')\n}\n\n/**\n * Mock dispatch function used to simulate undici dispatches\n */\nfunction mockDispatch (opts, handler) {\n // Get mock dispatch from built key\n const key = buildKey(opts)\n const mockDispatch = getMockDispatch(this[kDispatches], key)\n\n mockDispatch.timesInvoked++\n\n // Here's where we resolve a callback if a callback is present for the dispatch data.\n if (mockDispatch.data.callback) {\n mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }\n }\n\n // Parse mockDispatch data\n const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch\n const { timesInvoked, times } = mockDispatch\n\n // If it's used up and not persistent, mark as consumed\n mockDispatch.consumed = !persist && timesInvoked >= times\n mockDispatch.pending = timesInvoked < times\n\n // If specified, trigger dispatch error\n if (error !== null) {\n deleteMockDispatch(this[kDispatches], key)\n handler.onError(error)\n return true\n }\n\n // Handle the request with a delay if necessary\n if (typeof delay === 'number' && delay > 0) {\n setTimeout(() => {\n handleReply(this[kDispatches])\n }, delay)\n } else {\n handleReply(this[kDispatches])\n }\n\n function handleReply (mockDispatches, _data = data) {\n // fetch's HeadersList is a 1D string array\n const optsHeaders = Array.isArray(opts.headers)\n ? buildHeadersFromArray(opts.headers)\n : opts.headers\n const body = typeof _data === 'function'\n ? _data({ ...opts, headers: optsHeaders })\n : _data\n\n // util.types.isPromise is likely needed for jest.\n if (isPromise(body)) {\n // If handleReply is asynchronous, throwing an error\n // in the callback will reject the promise, rather than\n // synchronously throw the error, which breaks some tests.\n // Rather, we wait for the callback to resolve if it is a\n // promise, and then re-run handleReply with the new body.\n body.then((newData) => handleReply(mockDispatches, newData))\n return\n }\n\n const responseData = getResponseData(body)\n const responseHeaders = generateKeyValues(headers)\n const responseTrailers = generateKeyValues(trailers)\n\n handler.onConnect?.(err => handler.onError(err), null)\n handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode))\n handler.onData?.(Buffer.from(responseData))\n handler.onComplete?.(responseTrailers)\n deleteMockDispatch(mockDispatches, key)\n }\n\n function resume () {}\n\n return true\n}\n\nfunction buildMockDispatch () {\n const agent = this[kMockAgent]\n const origin = this[kOrigin]\n const originalDispatch = this[kOriginalDispatch]\n\n return function dispatch (opts, handler) {\n if (agent.isMockActive) {\n try {\n mockDispatch.call(this, opts, handler)\n } catch (error) {\n if (error instanceof MockNotMatchedError) {\n const netConnect = agent[kGetNetConnect]()\n if (netConnect === false) {\n throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`)\n }\n if (checkNetConnect(netConnect, origin)) {\n originalDispatch.call(this, opts, handler)\n } else {\n throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`)\n }\n } else {\n throw error\n }\n }\n } else {\n originalDispatch.call(this, opts, handler)\n }\n }\n}\n\nfunction checkNetConnect (netConnect, origin) {\n const url = new URL(origin)\n if (netConnect === true) {\n return true\n } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {\n return true\n }\n return false\n}\n\nfunction buildMockOptions (opts) {\n if (opts) {\n const { agent, ...mockOptions } = opts\n return mockOptions\n }\n}\n\nmodule.exports = {\n getResponseData,\n getMockDispatch,\n addMockDispatch,\n deleteMockDispatch,\n buildKey,\n generateKeyValues,\n matchValue,\n getResponse,\n getStatusText,\n mockDispatch,\n buildMockDispatch,\n checkNetConnect,\n buildMockOptions,\n getHeaderByName,\n buildHeadersFromArray\n}\n", "'use strict'\n\nconst { getResponseData, buildKey, addMockDispatch } = require('./mock-utils')\nconst {\n kDispatches,\n kDispatchKey,\n kDefaultHeaders,\n kDefaultTrailers,\n kContentLength,\n kMockDispatch,\n kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * Defines the scope API for an interceptor reply\n */\nclass MockScope {\n constructor (mockDispatch) {\n this[kMockDispatch] = mockDispatch\n }\n\n /**\n * Delay a reply by a set amount in ms.\n */\n delay (waitInMs) {\n if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {\n throw new InvalidArgumentError('waitInMs must be a valid integer > 0')\n }\n\n this[kMockDispatch].delay = waitInMs\n return this\n }\n\n /**\n * For a defined reply, never mark as consumed.\n */\n persist () {\n this[kMockDispatch].persist = true\n return this\n }\n\n /**\n * Allow one to define a reply for a set amount of matching requests.\n */\n times (repeatTimes) {\n if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {\n throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')\n }\n\n this[kMockDispatch].times = repeatTimes\n return this\n }\n}\n\n/**\n * Defines an interceptor for a Mock\n */\nclass MockInterceptor {\n constructor (opts, mockDispatches) {\n if (typeof opts !== 'object') {\n throw new InvalidArgumentError('opts must be an object')\n }\n if (typeof opts.path === 'undefined') {\n throw new InvalidArgumentError('opts.path must be defined')\n }\n if (typeof opts.method === 'undefined') {\n opts.method = 'GET'\n }\n // See https://github.com/nodejs/undici/issues/1245\n // As per RFC 3986, clients are not supposed to send URI\n // fragments to servers when they retrieve a document,\n if (typeof opts.path === 'string') {\n if (opts.query) {\n opts.path = serializePathWithQuery(opts.path, opts.query)\n } else {\n // Matches https://github.com/nodejs/undici/blob/main/lib/web/fetch/index.js#L1811\n const parsedURL = new URL(opts.path, 'data://')\n opts.path = parsedURL.pathname + parsedURL.search\n }\n }\n if (typeof opts.method === 'string') {\n opts.method = opts.method.toUpperCase()\n }\n\n this[kDispatchKey] = buildKey(opts)\n this[kDispatches] = mockDispatches\n this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n this[kDefaultHeaders] = {}\n this[kDefaultTrailers] = {}\n this[kContentLength] = false\n }\n\n createMockScopeDispatchData ({ statusCode, data, responseOptions }) {\n const responseData = getResponseData(data)\n const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}\n const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }\n const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }\n\n return { statusCode, data, headers, trailers }\n }\n\n validateReplyParameters (replyParameters) {\n if (typeof replyParameters.statusCode === 'undefined') {\n throw new InvalidArgumentError('statusCode must be defined')\n }\n if (typeof replyParameters.responseOptions !== 'object' || replyParameters.responseOptions === null) {\n throw new InvalidArgumentError('responseOptions must be an object')\n }\n }\n\n /**\n * Mock an undici request with a defined reply.\n */\n reply (replyOptionsCallbackOrStatusCode) {\n // Values of reply aren't available right now as they\n // can only be available when the reply callback is invoked.\n if (typeof replyOptionsCallbackOrStatusCode === 'function') {\n // We'll first wrap the provided callback in another function,\n // this function will properly resolve the data from the callback\n // when invoked.\n const wrappedDefaultsCallback = (opts) => {\n // Our reply options callback contains the parameter for statusCode, data and options.\n const resolvedData = replyOptionsCallbackOrStatusCode(opts)\n\n // Check if it is in the right format\n if (typeof resolvedData !== 'object' || resolvedData === null) {\n throw new InvalidArgumentError('reply options callback must return an object')\n }\n\n const replyParameters = { data: '', responseOptions: {}, ...resolvedData }\n this.validateReplyParameters(replyParameters)\n // Since the values can be obtained immediately we return them\n // from this higher order function that will be resolved later.\n return {\n ...this.createMockScopeDispatchData(replyParameters)\n }\n }\n\n // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.\n const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n return new MockScope(newMockDispatch)\n }\n\n // We can have either one or three parameters, if we get here,\n // we should have 1-3 parameters. So we spread the arguments of\n // this function to obtain the parameters, since replyData will always\n // just be the statusCode.\n const replyParameters = {\n statusCode: replyOptionsCallbackOrStatusCode,\n data: arguments[1] === undefined ? '' : arguments[1],\n responseOptions: arguments[2] === undefined ? {} : arguments[2]\n }\n this.validateReplyParameters(replyParameters)\n\n // Send in-already provided data like usual\n const dispatchData = this.createMockScopeDispatchData(replyParameters)\n const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n return new MockScope(newMockDispatch)\n }\n\n /**\n * Mock an undici request with a defined error.\n */\n replyWithError (error) {\n if (typeof error === 'undefined') {\n throw new InvalidArgumentError('error must be defined')\n }\n\n const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n return new MockScope(newMockDispatch)\n }\n\n /**\n * Set default reply headers on the interceptor for subsequent replies\n */\n defaultReplyHeaders (headers) {\n if (typeof headers === 'undefined') {\n throw new InvalidArgumentError('headers must be defined')\n }\n\n this[kDefaultHeaders] = headers\n return this\n }\n\n /**\n * Set default reply trailers on the interceptor for subsequent replies\n */\n defaultReplyTrailers (trailers) {\n if (typeof trailers === 'undefined') {\n throw new InvalidArgumentError('trailers must be defined')\n }\n\n this[kDefaultTrailers] = trailers\n return this\n }\n\n /**\n * Set reply content length header for replies on the interceptor\n */\n replyContentLength () {\n this[kContentLength] = true\n return this\n }\n}\n\nmodule.exports.MockInterceptor = MockInterceptor\nmodule.exports.MockScope = MockScope\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Client = require('../dispatcher/client')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n kDispatches,\n kMockAgent,\n kClose,\n kOriginalClose,\n kOrigin,\n kOriginalDispatch,\n kConnected,\n kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockClient provides an API that extends the Client to influence the mockDispatches.\n */\nclass MockClient extends Client {\n constructor (origin, opts) {\n if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n }\n\n super(origin, opts)\n\n this[kMockAgent] = opts.agent\n this[kOrigin] = origin\n this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n this[kDispatches] = []\n this[kConnected] = 1\n this[kOriginalDispatch] = this.dispatch\n this[kOriginalClose] = this.close.bind(this)\n\n this.dispatch = buildMockDispatch.call(this)\n this.close = this[kClose]\n }\n\n get [Symbols.kConnected] () {\n return this[kConnected]\n }\n\n /**\n * Sets up the base interceptor for mocking replies from undici.\n */\n intercept (opts) {\n return new MockInterceptor(\n opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n this[kDispatches]\n )\n }\n\n async [kClose] () {\n await promisify(this[kOriginalClose])()\n this[kConnected] = 0\n this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n }\n}\n\nmodule.exports = MockClient\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Pool = require('../dispatcher/pool')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n kDispatches,\n kMockAgent,\n kClose,\n kOriginalClose,\n kOrigin,\n kOriginalDispatch,\n kConnected,\n kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockPool provides an API that extends the Pool to influence the mockDispatches.\n */\nclass MockPool extends Pool {\n constructor (origin, opts) {\n if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n }\n\n super(origin, opts)\n\n this[kMockAgent] = opts.agent\n this[kOrigin] = origin\n this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n this[kDispatches] = []\n this[kConnected] = 1\n this[kOriginalDispatch] = this.dispatch\n this[kOriginalClose] = this.close.bind(this)\n\n this.dispatch = buildMockDispatch.call(this)\n this.close = this[kClose]\n }\n\n get [Symbols.kConnected] () {\n return this[kConnected]\n }\n\n /**\n * Sets up the base interceptor for mocking replies from undici.\n */\n intercept (opts) {\n return new MockInterceptor(\n opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n this[kDispatches]\n )\n }\n\n async [kClose] () {\n await promisify(this[kOriginalClose])()\n this[kConnected] = 0\n this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n }\n}\n\nmodule.exports = MockPool\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst { Console } = require('node:console')\n\nconst PERSISTENT = process.versions.icu ? '\u2705' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '\u274C' : 'N '\n\n/**\n * Gets the output of `console.table(\u2026)` as a string.\n */\nmodule.exports = class PendingInterceptorsFormatter {\n constructor ({ disableColors } = {}) {\n this.transform = new Transform({\n transform (chunk, _enc, cb) {\n cb(null, chunk)\n }\n })\n\n this.logger = new Console({\n stdout: this.transform,\n inspectOptions: {\n colors: !disableColors && !process.env.CI\n }\n })\n }\n\n format (pendingInterceptors) {\n const withPrettyHeaders = pendingInterceptors.map(\n ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({\n Method: method,\n Origin: origin,\n Path: path,\n 'Status code': statusCode,\n Persistent: persist ? PERSISTENT : NOT_PERSISTENT,\n Invocations: timesInvoked,\n Remaining: persist ? Infinity : times - timesInvoked\n }))\n\n this.logger.table(withPrettyHeaders)\n return this.transform.read().toString()\n }\n}\n", "'use strict'\n\nconst { kClients } = require('../core/symbols')\nconst Agent = require('../dispatcher/agent')\nconst {\n kAgent,\n kMockAgentSet,\n kMockAgentGet,\n kDispatches,\n kIsMockActive,\n kNetConnect,\n kGetNetConnect,\n kOptions,\n kFactory\n} = require('./mock-symbols')\nconst MockClient = require('./mock-client')\nconst MockPool = require('./mock-pool')\nconst { matchValue, buildMockOptions } = require('./mock-utils')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst Dispatcher = require('../dispatcher/dispatcher')\nconst PendingInterceptorsFormatter = require('./pending-interceptors-formatter')\n\nclass MockAgent extends Dispatcher {\n constructor (opts) {\n super(opts)\n\n this[kNetConnect] = true\n this[kIsMockActive] = true\n\n // Instantiate Agent and encapsulate\n if ((opts?.agent && typeof opts.agent.dispatch !== 'function')) {\n throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n }\n const agent = opts?.agent ? opts.agent : new Agent(opts)\n this[kAgent] = agent\n\n this[kClients] = agent[kClients]\n this[kOptions] = buildMockOptions(opts)\n }\n\n get (origin) {\n let dispatcher = this[kMockAgentGet](origin)\n\n if (!dispatcher) {\n dispatcher = this[kFactory](origin)\n this[kMockAgentSet](origin, dispatcher)\n }\n return dispatcher\n }\n\n dispatch (opts, handler) {\n // Call MockAgent.get to perform additional setup before dispatching as normal\n this.get(opts.origin)\n return this[kAgent].dispatch(opts, handler)\n }\n\n async close () {\n await this[kAgent].close()\n this[kClients].clear()\n }\n\n deactivate () {\n this[kIsMockActive] = false\n }\n\n activate () {\n this[kIsMockActive] = true\n }\n\n enableNetConnect (matcher) {\n if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {\n if (Array.isArray(this[kNetConnect])) {\n this[kNetConnect].push(matcher)\n } else {\n this[kNetConnect] = [matcher]\n }\n } else if (typeof matcher === 'undefined') {\n this[kNetConnect] = true\n } else {\n throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')\n }\n }\n\n disableNetConnect () {\n this[kNetConnect] = false\n }\n\n // This is required to bypass issues caused by using global symbols - see:\n // https://github.com/nodejs/undici/issues/1447\n get isMockActive () {\n return this[kIsMockActive]\n }\n\n [kMockAgentSet] (origin, dispatcher) {\n this[kClients].set(origin, dispatcher)\n }\n\n [kFactory] (origin) {\n const mockOptions = Object.assign({ agent: this }, this[kOptions])\n return this[kOptions] && this[kOptions].connections === 1\n ? new MockClient(origin, mockOptions)\n : new MockPool(origin, mockOptions)\n }\n\n [kMockAgentGet] (origin) {\n // First check if we can immediately find it\n const client = this[kClients].get(origin)\n if (client) {\n return client\n }\n\n // If the origin is not a string create a dummy parent pool and return to user\n if (typeof origin !== 'string') {\n const dispatcher = this[kFactory]('http://localhost:9999')\n this[kMockAgentSet](origin, dispatcher)\n return dispatcher\n }\n\n // If we match, create a pool and assign the same dispatches\n for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) {\n if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {\n const dispatcher = this[kFactory](origin)\n this[kMockAgentSet](origin, dispatcher)\n dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]\n return dispatcher\n }\n }\n }\n\n [kGetNetConnect] () {\n return this[kNetConnect]\n }\n\n pendingInterceptors () {\n const mockAgentClients = this[kClients]\n\n return Array.from(mockAgentClients.entries())\n .flatMap(([origin, scope]) => scope[kDispatches].map(dispatch => ({ ...dispatch, origin })))\n .filter(({ pending }) => pending)\n }\n\n assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {\n const pending = this.pendingInterceptors()\n\n if (pending.length === 0) {\n return\n }\n\n throw new UndiciError(\n pending.length === 1\n ? `1 interceptor is pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n : `${pending.length} interceptors are pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n )\n }\n}\n\nmodule.exports = MockAgent\n", "'use strict'\n\n// We include a version number for the Dispatcher API. In case of breaking changes,\n// this version number must be increased to avoid conflicts.\nconst globalDispatcher = Symbol.for('undici.globalDispatcher.1')\nconst { InvalidArgumentError } = require('./core/errors')\nconst Agent = require('./dispatcher/agent')\n\nif (getGlobalDispatcher() === undefined) {\n setGlobalDispatcher(new Agent())\n}\n\nfunction setGlobalDispatcher (agent) {\n if (!agent || typeof agent.dispatch !== 'function') {\n throw new InvalidArgumentError('Argument agent must implement Agent')\n }\n Object.defineProperty(globalThis, globalDispatcher, {\n value: agent,\n writable: true,\n enumerable: false,\n configurable: false\n })\n}\n\nfunction getGlobalDispatcher () {\n return globalThis[globalDispatcher]\n}\n\nmodule.exports = {\n setGlobalDispatcher,\n getGlobalDispatcher\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst WrapHandler = require('./wrap-handler')\n\n/**\n * @deprecated\n */\nmodule.exports = class DecoratorHandler {\n #handler\n #onCompleteCalled = false\n #onErrorCalled = false\n #onResponseStartCalled = false\n\n constructor (handler) {\n if (typeof handler !== 'object' || handler === null) {\n throw new TypeError('handler must be an object')\n }\n this.#handler = WrapHandler.wrap(handler)\n }\n\n onRequestStart (...args) {\n this.#handler.onRequestStart?.(...args)\n }\n\n onRequestUpgrade (...args) {\n assert(!this.#onCompleteCalled)\n assert(!this.#onErrorCalled)\n\n return this.#handler.onRequestUpgrade?.(...args)\n }\n\n onResponseStart (...args) {\n assert(!this.#onCompleteCalled)\n assert(!this.#onErrorCalled)\n assert(!this.#onResponseStartCalled)\n\n this.#onResponseStartCalled = true\n\n return this.#handler.onResponseStart?.(...args)\n }\n\n onResponseData (...args) {\n assert(!this.#onCompleteCalled)\n assert(!this.#onErrorCalled)\n\n return this.#handler.onResponseData?.(...args)\n }\n\n onResponseEnd (...args) {\n assert(!this.#onCompleteCalled)\n assert(!this.#onErrorCalled)\n\n this.#onCompleteCalled = true\n return this.#handler.onResponseEnd?.(...args)\n }\n\n onResponseError (...args) {\n this.#onErrorCalled = true\n return this.#handler.onResponseError?.(...args)\n }\n\n /**\n * @deprecated\n */\n onBodySent () {}\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst { kBodyUsed } = require('../core/symbols')\nconst assert = require('node:assert')\nconst { InvalidArgumentError } = require('../core/errors')\nconst EE = require('node:events')\n\nconst redirectableStatusCodes = [300, 301, 302, 303, 307, 308]\n\nconst kBody = Symbol('body')\n\nconst noop = () => {}\n\nclass BodyAsyncIterable {\n constructor (body) {\n this[kBody] = body\n this[kBodyUsed] = false\n }\n\n async * [Symbol.asyncIterator] () {\n assert(!this[kBodyUsed], 'disturbed')\n this[kBodyUsed] = true\n yield * this[kBody]\n }\n}\n\nclass RedirectHandler {\n static buildDispatch (dispatcher, maxRedirections) {\n if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n throw new InvalidArgumentError('maxRedirections must be a positive number')\n }\n\n const dispatch = dispatcher.dispatch.bind(dispatcher)\n return (opts, originalHandler) => dispatch(opts, new RedirectHandler(dispatch, maxRedirections, opts, originalHandler))\n }\n\n constructor (dispatch, maxRedirections, opts, handler) {\n if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n throw new InvalidArgumentError('maxRedirections must be a positive number')\n }\n\n this.dispatch = dispatch\n this.location = null\n this.opts = { ...opts, maxRedirections: 0 } // opts must be a copy\n this.maxRedirections = maxRedirections\n this.handler = handler\n this.history = []\n\n if (util.isStream(this.opts.body)) {\n // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n // so that it can be dispatched again?\n // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n if (util.bodyLength(this.opts.body) === 0) {\n this.opts.body\n .on('data', function () {\n assert(false)\n })\n }\n\n if (typeof this.opts.body.readableDidRead !== 'boolean') {\n this.opts.body[kBodyUsed] = false\n EE.prototype.on.call(this.opts.body, 'data', function () {\n this[kBodyUsed] = true\n })\n }\n } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') {\n // TODO (fix): We can't access ReadableStream internal state\n // to determine whether or not it has been disturbed. This is just\n // a workaround.\n this.opts.body = new BodyAsyncIterable(this.opts.body)\n } else if (\n this.opts.body &&\n typeof this.opts.body !== 'string' &&\n !ArrayBuffer.isView(this.opts.body) &&\n util.isIterable(this.opts.body) &&\n !util.isFormDataLike(this.opts.body)\n ) {\n // TODO: Should we allow re-using iterable if !this.opts.idempotent\n // or through some other flag?\n this.opts.body = new BodyAsyncIterable(this.opts.body)\n }\n }\n\n onRequestStart (controller, context) {\n this.handler.onRequestStart?.(controller, { ...context, history: this.history })\n }\n\n onRequestUpgrade (controller, statusCode, headers, socket) {\n this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n }\n\n onResponseStart (controller, statusCode, headers, statusMessage) {\n if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {\n throw new Error('max redirects')\n }\n\n // https://tools.ietf.org/html/rfc7231#section-6.4.2\n // https://fetch.spec.whatwg.org/#http-redirect-fetch\n // In case of HTTP 301 or 302 with POST, change the method to GET\n if ((statusCode === 301 || statusCode === 302) && this.opts.method === 'POST') {\n this.opts.method = 'GET'\n if (util.isStream(this.opts.body)) {\n util.destroy(this.opts.body.on('error', noop))\n }\n this.opts.body = null\n }\n\n // https://tools.ietf.org/html/rfc7231#section-6.4.4\n // In case of HTTP 303, always replace method to be either HEAD or GET\n if (statusCode === 303 && this.opts.method !== 'HEAD') {\n this.opts.method = 'GET'\n if (util.isStream(this.opts.body)) {\n util.destroy(this.opts.body.on('error', noop))\n }\n this.opts.body = null\n }\n\n this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) || redirectableStatusCodes.indexOf(statusCode) === -1\n ? null\n : headers.location\n\n if (this.opts.origin) {\n this.history.push(new URL(this.opts.path, this.opts.origin))\n }\n\n if (!this.location) {\n this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n return\n }\n\n const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))\n const path = search ? `${pathname}${search}` : pathname\n\n // Remove headers referring to the original URL.\n // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.\n // https://tools.ietf.org/html/rfc7231#section-6.4\n this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)\n this.opts.path = path\n this.opts.origin = origin\n this.opts.maxRedirections = 0\n this.opts.query = null\n }\n\n onResponseData (controller, chunk) {\n if (this.location) {\n /*\n https://tools.ietf.org/html/rfc7231#section-6.4\n\n TLDR: undici always ignores 3xx response bodies.\n\n Redirection is used to serve the requested resource from another URL, so it assumes that\n no body is generated (and thus can be ignored). Even though generating a body is not prohibited.\n\n For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually\n (which means it's optional and not mandated) contain just an hyperlink to the value of\n the Location response header, so the body can be ignored safely.\n\n For status 300, which is \"Multiple Choices\", the spec mentions both generating a Location\n response header AND a response body with the other possible location to follow.\n Since the spec explicitly chooses not to specify a format for such body and leave it to\n servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.\n */\n } else {\n this.handler.onResponseData?.(controller, chunk)\n }\n }\n\n onResponseEnd (controller, trailers) {\n if (this.location) {\n /*\n https://tools.ietf.org/html/rfc7231#section-6.4\n\n TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections\n and neither are useful if present.\n\n See comment on onData method above for more detailed information.\n */\n this.dispatch(this.opts, this)\n } else {\n this.handler.onResponseEnd(controller, trailers)\n }\n }\n\n onResponseError (controller, error) {\n this.handler.onResponseError?.(controller, error)\n }\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4.4\nfunction shouldRemoveHeader (header, removeContent, unknownOrigin) {\n if (header.length === 4) {\n return util.headerNameToString(header) === 'host'\n }\n if (removeContent && util.headerNameToString(header).startsWith('content-')) {\n return true\n }\n if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {\n const name = util.headerNameToString(header)\n return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization'\n }\n return false\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4\nfunction cleanRequestHeaders (headers, removeContent, unknownOrigin) {\n const ret = []\n if (Array.isArray(headers)) {\n for (let i = 0; i < headers.length; i += 2) {\n if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {\n ret.push(headers[i], headers[i + 1])\n }\n }\n } else if (headers && typeof headers === 'object') {\n const entries = typeof headers[Symbol.iterator] === 'function' ? headers : Object.entries(headers)\n for (const [key, value] of entries) {\n if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {\n ret.push(key, value)\n }\n }\n } else {\n assert(headers == null, 'headers must be an object or an array')\n }\n return ret\n}\n\nmodule.exports = RedirectHandler\n", "'use strict'\n\nconst RedirectHandler = require('../handler/redirect-handler')\n\nfunction createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections } = {}) {\n return (dispatch) => {\n return function Intercept (opts, handler) {\n const { maxRedirections = defaultMaxRedirections, ...rest } = opts\n\n if (maxRedirections == null || maxRedirections === 0) {\n return dispatch(opts, handler)\n }\n\n const dispatchOpts = { ...rest, maxRedirections: 0 } // Stop sub dispatcher from also redirecting.\n const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)\n return dispatch(dispatchOpts, redirectHandler)\n }\n }\n}\n\nmodule.exports = createRedirectInterceptor\n", "'use strict'\n\n// const { parseHeaders } = require('../core/util')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { ResponseError } = require('../core/errors')\n\nclass ResponseErrorHandler extends DecoratorHandler {\n #statusCode\n #contentType\n #decoder\n #headers\n #body\n\n constructor (_opts, { handler }) {\n super(handler)\n }\n\n #checkContentType (contentType) {\n return (this.#contentType ?? '').indexOf(contentType) === 0\n }\n\n onRequestStart (controller, context) {\n this.#statusCode = 0\n this.#contentType = null\n this.#decoder = null\n this.#headers = null\n this.#body = ''\n\n return super.onRequestStart(controller, context)\n }\n\n onResponseStart (controller, statusCode, headers, statusMessage) {\n this.#statusCode = statusCode\n this.#headers = headers\n this.#contentType = headers['content-type']\n\n if (this.#statusCode < 400) {\n return super.onResponseStart(controller, statusCode, headers, statusMessage)\n }\n\n if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {\n this.#decoder = new TextDecoder('utf-8')\n }\n }\n\n onResponseData (controller, chunk) {\n if (this.#statusCode < 400) {\n return super.onResponseData(controller, chunk)\n }\n\n this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''\n }\n\n onResponseEnd (controller, trailers) {\n if (this.#statusCode >= 400) {\n this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''\n\n if (this.#checkContentType('application/json')) {\n try {\n this.#body = JSON.parse(this.#body)\n } catch {\n // Do nothing...\n }\n }\n\n let err\n const stackTraceLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 0\n try {\n err = new ResponseError('Response Error', this.#statusCode, {\n body: this.#body,\n headers: this.#headers\n })\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n\n super.onResponseError(controller, err)\n } else {\n super.onResponseEnd(controller, trailers)\n }\n }\n\n onResponseError (controller, err) {\n super.onResponseError(controller, err)\n }\n}\n\nmodule.exports = () => {\n return (dispatch) => {\n return function Intercept (opts, handler) {\n return dispatch(opts, new ResponseErrorHandler(opts, { handler }))\n }\n }\n}\n", "'use strict'\nconst RetryHandler = require('../handler/retry-handler')\n\nmodule.exports = globalOpts => {\n return dispatch => {\n return function retryInterceptor (opts, handler) {\n return dispatch(\n opts,\n new RetryHandler(\n { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },\n {\n handler,\n dispatch\n }\n )\n )\n }\n }\n}\n", "'use strict'\n\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\nclass DumpHandler extends DecoratorHandler {\n #maxSize = 1024 * 1024\n #dumped = false\n #size = 0\n #controller = null\n aborted = false\n reason = false\n\n constructor ({ maxSize, signal }, handler) {\n if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {\n throw new InvalidArgumentError('maxSize must be a number greater than 0')\n }\n\n super(handler)\n\n this.#maxSize = maxSize ?? this.#maxSize\n // this.#handler = handler\n }\n\n #abort (reason) {\n this.aborted = true\n this.reason = reason\n }\n\n onRequestStart (controller, context) {\n controller.abort = this.#abort.bind(this)\n this.#controller = controller\n\n return super.onRequestStart(controller, context)\n }\n\n onResponseStart (controller, statusCode, headers, statusMessage) {\n const contentLength = headers['content-length']\n\n if (contentLength != null && contentLength > this.#maxSize) {\n throw new RequestAbortedError(\n `Response size (${contentLength}) larger than maxSize (${\n this.#maxSize\n })`\n )\n }\n\n if (this.aborted === true) {\n return true\n }\n\n return super.onResponseStart(controller, statusCode, headers, statusMessage)\n }\n\n onResponseError (controller, err) {\n if (this.#dumped) {\n return\n }\n\n err = this.#controller.reason ?? err\n\n super.onResponseError(controller, err)\n }\n\n onResponseData (controller, chunk) {\n this.#size = this.#size + chunk.length\n\n if (this.#size >= this.#maxSize) {\n this.#dumped = true\n\n if (this.aborted === true) {\n super.onResponseError(controller, this.reason)\n } else {\n super.onResponseEnd(controller, {})\n }\n }\n\n return true\n }\n\n onResponseEnd (controller, trailers) {\n if (this.#dumped) {\n return\n }\n\n if (this.#controller.aborted === true) {\n super.onResponseError(controller, this.reason)\n return\n }\n\n super.onResponseEnd(controller, trailers)\n }\n}\n\nfunction createDumpInterceptor (\n { maxSize: defaultMaxSize } = {\n maxSize: 1024 * 1024\n }\n) {\n return dispatch => {\n return function Intercept (opts, handler) {\n const { dumpMaxSize = defaultMaxSize } = opts\n\n const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)\n\n return dispatch(opts, dumpHandler)\n }\n }\n}\n\nmodule.exports = createDumpInterceptor\n", "'use strict'\nconst { isIP } = require('node:net')\nconst { lookup } = require('node:dns')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { InvalidArgumentError, InformationalError } = require('../core/errors')\nconst maxInt = Math.pow(2, 31) - 1\n\nclass DNSInstance {\n #maxTTL = 0\n #maxItems = 0\n #records = new Map()\n dualStack = true\n affinity = null\n lookup = null\n pick = null\n\n constructor (opts) {\n this.#maxTTL = opts.maxTTL\n this.#maxItems = opts.maxItems\n this.dualStack = opts.dualStack\n this.affinity = opts.affinity\n this.lookup = opts.lookup ?? this.#defaultLookup\n this.pick = opts.pick ?? this.#defaultPick\n }\n\n get full () {\n return this.#records.size === this.#maxItems\n }\n\n runLookup (origin, opts, cb) {\n const ips = this.#records.get(origin.hostname)\n\n // If full, we just return the origin\n if (ips == null && this.full) {\n cb(null, origin)\n return\n }\n\n const newOpts = {\n affinity: this.affinity,\n dualStack: this.dualStack,\n lookup: this.lookup,\n pick: this.pick,\n ...opts.dns,\n maxTTL: this.#maxTTL,\n maxItems: this.#maxItems\n }\n\n // If no IPs we lookup\n if (ips == null) {\n this.lookup(origin, newOpts, (err, addresses) => {\n if (err || addresses == null || addresses.length === 0) {\n cb(err ?? new InformationalError('No DNS entries found'))\n return\n }\n\n this.setRecords(origin, addresses)\n const records = this.#records.get(origin.hostname)\n\n const ip = this.pick(\n origin,\n records,\n newOpts.affinity\n )\n\n let port\n if (typeof ip.port === 'number') {\n port = `:${ip.port}`\n } else if (origin.port !== '') {\n port = `:${origin.port}`\n } else {\n port = ''\n }\n\n cb(\n null,\n new URL(`${origin.protocol}//${\n ip.family === 6 ? `[${ip.address}]` : ip.address\n }${port}`)\n )\n })\n } else {\n // If there's IPs we pick\n const ip = this.pick(\n origin,\n ips,\n newOpts.affinity\n )\n\n // If no IPs we lookup - deleting old records\n if (ip == null) {\n this.#records.delete(origin.hostname)\n this.runLookup(origin, opts, cb)\n return\n }\n\n let port\n if (typeof ip.port === 'number') {\n port = `:${ip.port}`\n } else if (origin.port !== '') {\n port = `:${origin.port}`\n } else {\n port = ''\n }\n\n cb(\n null,\n new URL(`${origin.protocol}//${\n ip.family === 6 ? `[${ip.address}]` : ip.address\n }${port}`)\n )\n }\n }\n\n #defaultLookup (origin, opts, cb) {\n lookup(\n origin.hostname,\n {\n all: true,\n family: this.dualStack === false ? this.affinity : 0,\n order: 'ipv4first'\n },\n (err, addresses) => {\n if (err) {\n return cb(err)\n }\n\n const results = new Map()\n\n for (const addr of addresses) {\n // On linux we found duplicates, we attempt to remove them with\n // the latest record\n results.set(`${addr.address}:${addr.family}`, addr)\n }\n\n cb(null, results.values())\n }\n )\n }\n\n #defaultPick (origin, hostnameRecords, affinity) {\n let ip = null\n const { records, offset } = hostnameRecords\n\n let family\n if (this.dualStack) {\n if (affinity == null) {\n // Balance between ip families\n if (offset == null || offset === maxInt) {\n hostnameRecords.offset = 0\n affinity = 4\n } else {\n hostnameRecords.offset++\n affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4\n }\n }\n\n if (records[affinity] != null && records[affinity].ips.length > 0) {\n family = records[affinity]\n } else {\n family = records[affinity === 4 ? 6 : 4]\n }\n } else {\n family = records[affinity]\n }\n\n // If no IPs we return null\n if (family == null || family.ips.length === 0) {\n return ip\n }\n\n if (family.offset == null || family.offset === maxInt) {\n family.offset = 0\n } else {\n family.offset++\n }\n\n const position = family.offset % family.ips.length\n ip = family.ips[position] ?? null\n\n if (ip == null) {\n return ip\n }\n\n if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n // We delete expired records\n // It is possible that they have different TTL, so we manage them individually\n family.ips.splice(position, 1)\n return this.pick(origin, hostnameRecords, affinity)\n }\n\n return ip\n }\n\n pickFamily (origin, ipFamily) {\n const records = this.#records.get(origin.hostname)?.records\n if (!records) {\n return null\n }\n\n const family = records[ipFamily]\n if (!family) {\n return null\n }\n\n if (family.offset == null || family.offset === maxInt) {\n family.offset = 0\n } else {\n family.offset++\n }\n\n const position = family.offset % family.ips.length\n const ip = family.ips[position] ?? null\n if (ip == null) {\n return ip\n }\n\n if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n // We delete expired records\n // It is possible that they have different TTL, so we manage them individually\n family.ips.splice(position, 1)\n }\n\n return ip\n }\n\n setRecords (origin, addresses) {\n const timestamp = Date.now()\n const records = { records: { 4: null, 6: null } }\n for (const record of addresses) {\n record.timestamp = timestamp\n if (typeof record.ttl === 'number') {\n // The record TTL is expected to be in ms\n record.ttl = Math.min(record.ttl, this.#maxTTL)\n } else {\n record.ttl = this.#maxTTL\n }\n\n const familyRecords = records.records[record.family] ?? { ips: [] }\n\n familyRecords.ips.push(record)\n records.records[record.family] = familyRecords\n }\n\n this.#records.set(origin.hostname, records)\n }\n\n deleteRecords (origin) {\n this.#records.delete(origin.hostname)\n }\n\n getHandler (meta, opts) {\n return new DNSDispatchHandler(this, meta, opts)\n }\n}\n\nclass DNSDispatchHandler extends DecoratorHandler {\n #state = null\n #opts = null\n #dispatch = null\n #origin = null\n #controller = null\n #newOrigin = null\n #firstTry = true\n\n constructor (state, { origin, handler, dispatch, newOrigin }, opts) {\n super(handler)\n this.#origin = origin\n this.#newOrigin = newOrigin\n this.#opts = { ...opts }\n this.#state = state\n this.#dispatch = dispatch\n }\n\n onResponseError (controller, err) {\n switch (err.code) {\n case 'ETIMEDOUT':\n case 'ECONNREFUSED': {\n if (this.#state.dualStack) {\n if (!this.#firstTry) {\n super.onResponseError(controller, err)\n return\n }\n this.#firstTry = false\n\n // Pick an ip address from the other family\n const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6\n const ip = this.#state.pickFamily(this.#origin, otherFamily)\n if (ip == null) {\n super.onResponseError(controller, err)\n return\n }\n\n let port\n if (typeof ip.port === 'number') {\n port = `:${ip.port}`\n } else if (this.#origin.port !== '') {\n port = `:${this.#origin.port}`\n } else {\n port = ''\n }\n\n const dispatchOpts = {\n ...this.#opts,\n origin: `${this.#origin.protocol}//${\n ip.family === 6 ? `[${ip.address}]` : ip.address\n }${port}`\n }\n this.#dispatch(dispatchOpts, this)\n return\n }\n\n // if dual-stack disabled, we error out\n super.onResponseError(controller, err)\n break\n }\n case 'ENOTFOUND':\n this.#state.deleteRecords(this.#origin)\n super.onResponseError(controller, err)\n break\n default:\n super.onResponseError(controller, err)\n break\n }\n }\n}\n\nmodule.exports = interceptorOpts => {\n if (\n interceptorOpts?.maxTTL != null &&\n (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)\n ) {\n throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')\n }\n\n if (\n interceptorOpts?.maxItems != null &&\n (typeof interceptorOpts?.maxItems !== 'number' ||\n interceptorOpts?.maxItems < 1)\n ) {\n throw new InvalidArgumentError(\n 'Invalid maxItems. Must be a positive number and greater than zero'\n )\n }\n\n if (\n interceptorOpts?.affinity != null &&\n interceptorOpts?.affinity !== 4 &&\n interceptorOpts?.affinity !== 6\n ) {\n throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')\n }\n\n if (\n interceptorOpts?.dualStack != null &&\n typeof interceptorOpts?.dualStack !== 'boolean'\n ) {\n throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')\n }\n\n if (\n interceptorOpts?.lookup != null &&\n typeof interceptorOpts?.lookup !== 'function'\n ) {\n throw new InvalidArgumentError('Invalid lookup. Must be a function')\n }\n\n if (\n interceptorOpts?.pick != null &&\n typeof interceptorOpts?.pick !== 'function'\n ) {\n throw new InvalidArgumentError('Invalid pick. Must be a function')\n }\n\n const dualStack = interceptorOpts?.dualStack ?? true\n let affinity\n if (dualStack) {\n affinity = interceptorOpts?.affinity ?? null\n } else {\n affinity = interceptorOpts?.affinity ?? 4\n }\n\n const opts = {\n maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms\n lookup: interceptorOpts?.lookup ?? null,\n pick: interceptorOpts?.pick ?? null,\n dualStack,\n affinity,\n maxItems: interceptorOpts?.maxItems ?? Infinity\n }\n\n const instance = new DNSInstance(opts)\n\n return dispatch => {\n return function dnsInterceptor (origDispatchOpts, handler) {\n const origin =\n origDispatchOpts.origin.constructor === URL\n ? origDispatchOpts.origin\n : new URL(origDispatchOpts.origin)\n\n if (isIP(origin.hostname) !== 0) {\n return dispatch(origDispatchOpts, handler)\n }\n\n instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {\n if (err) {\n return handler.onResponseError(null, err)\n }\n\n const dispatchOpts = {\n ...origDispatchOpts,\n servername: origin.hostname, // For SNI on TLS\n origin: newOrigin.origin,\n headers: {\n host: origin.host,\n ...origDispatchOpts.headers\n }\n }\n\n dispatch(\n dispatchOpts,\n instance.getHandler(\n { origin, dispatch, handler, newOrigin },\n origDispatchOpts\n )\n )\n })\n\n return true\n }\n }\n}\n", "'use strict'\n\nconst {\n safeHTTPMethods\n} = require('../core/util')\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts\n */\nfunction makeCacheKey (opts) {\n if (!opts.origin) {\n throw new Error('opts.origin is undefined')\n }\n\n /** @type {Record<string, string[] | string>} */\n let headers\n if (opts.headers == null) {\n headers = {}\n } else if (typeof opts.headers[Symbol.iterator] === 'function') {\n headers = {}\n for (const x of opts.headers) {\n if (!Array.isArray(x)) {\n throw new Error('opts.headers is not a valid header map')\n }\n const [key, val] = x\n if (typeof key !== 'string' || typeof val !== 'string') {\n throw new Error('opts.headers is not a valid header map')\n }\n headers[key.toLowerCase()] = val\n }\n } else if (typeof opts.headers === 'object') {\n headers = {}\n\n for (const key of Object.keys(opts.headers)) {\n headers[key.toLowerCase()] = opts.headers[key]\n }\n } else {\n throw new Error('opts.headers is not an object')\n }\n\n return {\n origin: opts.origin.toString(),\n method: opts.method,\n path: opts.path,\n headers\n }\n}\n\n/**\n * @param {any} key\n */\nfunction assertCacheKey (key) {\n if (typeof key !== 'object') {\n throw new TypeError(`expected key to be object, got ${typeof key}`)\n }\n\n for (const property of ['origin', 'method', 'path']) {\n if (typeof key[property] !== 'string') {\n throw new TypeError(`expected key.${property} to be string, got ${typeof key[property]}`)\n }\n }\n\n if (key.headers !== undefined && typeof key.headers !== 'object') {\n throw new TypeError(`expected headers to be object, got ${typeof key}`)\n }\n}\n\n/**\n * @param {any} value\n */\nfunction assertCacheValue (value) {\n if (typeof value !== 'object') {\n throw new TypeError(`expected value to be object, got ${typeof value}`)\n }\n\n for (const property of ['statusCode', 'cachedAt', 'staleAt', 'deleteAt']) {\n if (typeof value[property] !== 'number') {\n throw new TypeError(`expected value.${property} to be number, got ${typeof value[property]}`)\n }\n }\n\n if (typeof value.statusMessage !== 'string') {\n throw new TypeError(`expected value.statusMessage to be string, got ${typeof value.statusMessage}`)\n }\n\n if (value.headers != null && typeof value.headers !== 'object') {\n throw new TypeError(`expected value.rawHeaders to be object, got ${typeof value.headers}`)\n }\n\n if (value.vary !== undefined && typeof value.vary !== 'object') {\n throw new TypeError(`expected value.vary to be object, got ${typeof value.vary}`)\n }\n\n if (value.etag !== undefined && typeof value.etag !== 'string') {\n throw new TypeError(`expected value.etag to be string, got ${typeof value.etag}`)\n }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-cache-control\n * @see https://www.iana.org/assignments/http-cache-directives/http-cache-directives.xhtml\n\n * @param {string | string[]} header\n * @returns {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\nfunction parseCacheControlHeader (header) {\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\n const output = {}\n\n let directives\n if (Array.isArray(header)) {\n directives = []\n\n for (const directive of header) {\n directives.push(...directive.split(','))\n }\n } else {\n directives = header.split(',')\n }\n\n for (let i = 0; i < directives.length; i++) {\n const directive = directives[i].toLowerCase()\n const keyValueDelimiter = directive.indexOf('=')\n\n let key\n let value\n if (keyValueDelimiter !== -1) {\n key = directive.substring(0, keyValueDelimiter).trimStart()\n value = directive.substring(keyValueDelimiter + 1)\n } else {\n key = directive.trim()\n }\n\n switch (key) {\n case 'min-fresh':\n case 'max-stale':\n case 'max-age':\n case 's-maxage':\n case 'stale-while-revalidate':\n case 'stale-if-error': {\n if (value === undefined || value[0] === ' ') {\n continue\n }\n\n if (\n value.length >= 2 &&\n value[0] === '\"' &&\n value[value.length - 1] === '\"'\n ) {\n value = value.substring(1, value.length - 1)\n }\n\n const parsedValue = parseInt(value, 10)\n // eslint-disable-next-line no-self-compare\n if (parsedValue !== parsedValue) {\n continue\n }\n\n if (key === 'max-age' && key in output && output[key] >= parsedValue) {\n continue\n }\n\n output[key] = parsedValue\n\n break\n }\n case 'private':\n case 'no-cache': {\n if (value) {\n // The private and no-cache directives can be unqualified (aka just\n // `private` or `no-cache`) or qualified (w/ a value). When they're\n // qualified, it's a list of headers like `no-cache=header1`,\n // `no-cache=\"header1\"`, or `no-cache=\"header1, header2\"`\n // If we're given multiple headers, the comma messes us up since\n // we split the full header by commas. So, let's loop through the\n // remaining parts in front of us until we find one that ends in a\n // quote. We can then just splice all of the parts in between the\n // starting quote and the ending quote out of the directives array\n // and continue parsing like normal.\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-no-cache-2\n if (value[0] === '\"') {\n // Something like `no-cache=\"some-header\"` OR `no-cache=\"some-header, another-header\"`.\n\n // Add the first header on and cut off the leading quote\n const headers = [value.substring(1)]\n\n let foundEndingQuote = value[value.length - 1] === '\"'\n if (!foundEndingQuote) {\n // Something like `no-cache=\"some-header, another-header\"`\n // This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n for (let j = i + 1; j < directives.length; j++) {\n const nextPart = directives[j]\n const nextPartLength = nextPart.length\n\n headers.push(nextPart.trim())\n\n if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '\"') {\n foundEndingQuote = true\n break\n }\n }\n }\n\n if (foundEndingQuote) {\n let lastHeader = headers[headers.length - 1]\n if (lastHeader[lastHeader.length - 1] === '\"') {\n lastHeader = lastHeader.substring(0, lastHeader.length - 1)\n headers[headers.length - 1] = lastHeader\n }\n\n if (key in output) {\n output[key] = output[key].concat(headers)\n } else {\n output[key] = headers\n }\n }\n } else {\n // Something like `no-cache=some-header`\n if (key in output) {\n output[key] = output[key].concat(value)\n } else {\n output[key] = [value]\n }\n }\n\n break\n }\n }\n // eslint-disable-next-line no-fallthrough\n case 'public':\n case 'no-store':\n case 'must-revalidate':\n case 'proxy-revalidate':\n case 'immutable':\n case 'no-transform':\n case 'must-understand':\n case 'only-if-cached':\n if (value) {\n // These are qualified (something like `public=...`) when they aren't\n // allowed to be, skip\n continue\n }\n\n output[key] = true\n break\n default:\n // Ignore unknown directives as per https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.3-1\n continue\n }\n }\n\n return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[]>}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n if (typeof varyHeader === 'string' && varyHeader.includes('*')) {\n return headers\n }\n\n const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n const varyingHeaders = typeof varyHeader === 'string'\n ? varyHeader.split(',')\n : varyHeader\n\n for (const header of varyingHeaders) {\n const trimmedHeader = header.trim().toLowerCase()\n\n output[trimmedHeader] = headers[trimmedHeader] ?? null\n }\n\n return output\n}\n\n/**\n * Note: this deviates from the spec a little. Empty etags (\"\", W/\"\") are valid,\n * however, including them in cached resposnes serves little to no purpose.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-etag\n *\n * @param {string} etag\n * @returns {boolean}\n */\nfunction isEtagUsable (etag) {\n if (etag.length <= 2) {\n // Shortest an etag can be is two chars (just \"\"). This is where we deviate\n // from the spec requiring a min of 3 chars however\n return false\n }\n\n if (etag[0] === '\"' && etag[etag.length - 1] === '\"') {\n // ETag: \"\"asd123\"\" or ETag: \"W/\"asd123\"\", kinda undefined behavior in the\n // spec. Some servers will accept these while others don't.\n // ETag: \"asd123\"\n return !(etag[1] === '\"' || etag.startsWith('\"W/'))\n }\n\n if (etag.startsWith('W/\"') && etag[etag.length - 1] === '\"') {\n // ETag: W/\"\", also where we deviate from the spec & require a min of 3\n // chars\n // ETag: for W/\"\", W/\"asd123\"\n return etag.length !== 4\n }\n\n // Anything else\n return false\n}\n\n/**\n * @param {unknown} store\n * @returns {asserts store is import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\nfunction assertCacheStore (store, name = 'CacheStore') {\n if (typeof store !== 'object' || store === null) {\n throw new TypeError(`expected type of ${name} to be a CacheStore, got ${store === null ? 'null' : typeof store}`)\n }\n\n for (const fn of ['get', 'createWriteStream', 'delete']) {\n if (typeof store[fn] !== 'function') {\n throw new TypeError(`${name} needs to have a \\`${fn}()\\` function`)\n }\n }\n}\n/**\n * @param {unknown} methods\n * @returns {asserts methods is import('../../types/cache-interceptor.d.ts').default.CacheMethods[]}\n */\nfunction assertCacheMethods (methods, name = 'CacheMethods') {\n if (!Array.isArray(methods)) {\n throw new TypeError(`expected type of ${name} needs to be an array, got ${methods === null ? 'null' : typeof methods}`)\n }\n\n if (methods.length === 0) {\n throw new TypeError(`${name} needs to have at least one method`)\n }\n\n for (const method of methods) {\n if (!safeHTTPMethods.includes(method)) {\n throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n }\n }\n}\n\nmodule.exports = {\n makeCacheKey,\n assertCacheKey,\n assertCacheValue,\n parseCacheControlHeader,\n parseVaryHeader,\n isEtagUsable,\n assertCacheMethods,\n assertCacheStore\n}\n", "'use strict'\n\nconst IMF_DAYS = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']\nconst IMF_SPACES = [4, 7, 11, 16, 25]\nconst IMF_MONTHS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']\nconst IMF_COLONS = [19, 22]\n\nconst ASCTIME_SPACES = [3, 7, 10, 19]\n\nconst RFC850_DAYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-date-time-formats\n *\n * @param {string} date\n * @param {Date} [now]\n * @returns {Date | undefined}\n */\nfunction parseHttpDate (date, now) {\n // Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate\n // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format\n // Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format\n\n date = date.toLowerCase()\n\n switch (date[3]) {\n case ',': return parseImfDate(date)\n case ' ': return parseAscTimeDate(date)\n default: return parseRfc850Date(date, now)\n }\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#preferred.date.format\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseImfDate (date) {\n if (date.length !== 29) {\n return undefined\n }\n\n if (!date.endsWith('gmt')) {\n // Unsupported timezone\n return undefined\n }\n\n for (const spaceInx of IMF_SPACES) {\n if (date[spaceInx] !== ' ') {\n return undefined\n }\n }\n\n for (const colonIdx of IMF_COLONS) {\n if (date[colonIdx] !== ':') {\n return undefined\n }\n }\n\n const dayName = date.substring(0, 3)\n if (!IMF_DAYS.includes(dayName)) {\n return undefined\n }\n\n const dayString = date.substring(5, 7)\n const day = Number.parseInt(dayString)\n if (isNaN(day) || (day < 10 && dayString[0] !== '0')) {\n // Not a number, 0, or it's less than 10 and didn't start with a 0\n return undefined\n }\n\n const month = date.substring(8, 11)\n const monthIdx = IMF_MONTHS.indexOf(month)\n if (monthIdx === -1) {\n return undefined\n }\n\n const year = Number.parseInt(date.substring(12, 16))\n if (isNaN(year)) {\n return undefined\n }\n\n const hourString = date.substring(17, 19)\n const hour = Number.parseInt(hourString)\n if (isNaN(hour) || (hour < 10 && hourString[0] !== '0')) {\n return undefined\n }\n\n const minuteString = date.substring(20, 22)\n const minute = Number.parseInt(minuteString)\n if (isNaN(minute) || (minute < 10 && minuteString[0] !== '0')) {\n return undefined\n }\n\n const secondString = date.substring(23, 25)\n const second = Number.parseInt(secondString)\n if (isNaN(second) || (second < 10 && secondString[0] !== '0')) {\n return undefined\n }\n\n return new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseAscTimeDate (date) {\n // This is assumed to be in UTC\n\n if (date.length !== 24) {\n return undefined\n }\n\n for (const spaceIdx of ASCTIME_SPACES) {\n if (date[spaceIdx] !== ' ') {\n return undefined\n }\n }\n\n const dayName = date.substring(0, 3)\n if (!IMF_DAYS.includes(dayName)) {\n return undefined\n }\n\n const month = date.substring(4, 7)\n const monthIdx = IMF_MONTHS.indexOf(month)\n if (monthIdx === -1) {\n return undefined\n }\n\n const dayString = date.substring(8, 10)\n const day = Number.parseInt(dayString)\n if (isNaN(day) || (day < 10 && dayString[0] !== ' ')) {\n return undefined\n }\n\n const hourString = date.substring(11, 13)\n const hour = Number.parseInt(hourString)\n if (isNaN(hour) || (hour < 10 && hourString[0] !== '0')) {\n return undefined\n }\n\n const minuteString = date.substring(14, 16)\n const minute = Number.parseInt(minuteString)\n if (isNaN(minute) || (minute < 10 && minuteString[0] !== '0')) {\n return undefined\n }\n\n const secondString = date.substring(17, 19)\n const second = Number.parseInt(secondString)\n if (isNaN(second) || (second < 10 && secondString[0] !== '0')) {\n return undefined\n }\n\n const year = Number.parseInt(date.substring(20, 24))\n if (isNaN(year)) {\n return undefined\n }\n\n return new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @param {Date} [now]\n * @returns {Date | undefined}\n */\nfunction parseRfc850Date (date, now = new Date()) {\n if (!date.endsWith('gmt')) {\n // Unsupported timezone\n return undefined\n }\n\n const commaIndex = date.indexOf(',')\n if (commaIndex === -1) {\n return undefined\n }\n\n if ((date.length - commaIndex - 1) !== 23) {\n return undefined\n }\n\n const dayName = date.substring(0, commaIndex)\n if (!RFC850_DAYS.includes(dayName)) {\n return undefined\n }\n\n if (\n date[commaIndex + 1] !== ' ' ||\n date[commaIndex + 4] !== '-' ||\n date[commaIndex + 8] !== '-' ||\n date[commaIndex + 11] !== ' ' ||\n date[commaIndex + 14] !== ':' ||\n date[commaIndex + 17] !== ':' ||\n date[commaIndex + 20] !== ' '\n ) {\n return undefined\n }\n\n const dayString = date.substring(commaIndex + 2, commaIndex + 4)\n const day = Number.parseInt(dayString)\n if (isNaN(day) || (day < 10 && dayString[0] !== '0')) {\n // Not a number, or it's less than 10 and didn't start with a 0\n return undefined\n }\n\n const month = date.substring(commaIndex + 5, commaIndex + 8)\n const monthIdx = IMF_MONTHS.indexOf(month)\n if (monthIdx === -1) {\n return undefined\n }\n\n // As of this point year is just the decade (i.e. 94)\n let year = Number.parseInt(date.substring(commaIndex + 9, commaIndex + 11))\n if (isNaN(year)) {\n return undefined\n }\n\n const currentYear = now.getUTCFullYear()\n const currentDecade = currentYear % 100\n const currentCentury = Math.floor(currentYear / 100)\n\n if (year > currentDecade && year - currentDecade >= 50) {\n // Over 50 years in future, go to previous century\n year += (currentCentury - 1) * 100\n } else {\n year += currentCentury * 100\n }\n\n const hourString = date.substring(commaIndex + 12, commaIndex + 14)\n const hour = Number.parseInt(hourString)\n if (isNaN(hour) || (hour < 10 && hourString[0] !== '0')) {\n return undefined\n }\n\n const minuteString = date.substring(commaIndex + 15, commaIndex + 17)\n const minute = Number.parseInt(minuteString)\n if (isNaN(minute) || (minute < 10 && minuteString[0] !== '0')) {\n return undefined\n }\n\n const secondString = date.substring(commaIndex + 18, commaIndex + 20)\n const second = Number.parseInt(secondString)\n if (isNaN(second) || (second < 10 && secondString[0] !== '0')) {\n return undefined\n }\n\n return new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n}\n\nmodule.exports = {\n parseHttpDate\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst {\n parseCacheControlHeader,\n parseVaryHeader,\n isEtagUsable\n} = require('../util/cache')\nconst { parseHttpDate } = require('../util/date.js')\n\nfunction noop () {}\n\n// Status codes that we can use some heuristics on to cache\nconst HEURISTICALLY_CACHEABLE_STATUS_CODES = [\n 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n *\n * @implements {DispatchHandler}\n */\nclass CacheHandler {\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n */\n #cacheKey\n\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}\n */\n #cacheType\n\n /**\n * @type {number | undefined}\n */\n #cacheByDefault\n\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\n #store\n\n /**\n * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\n #handler\n\n /**\n * @type {import('node:stream').Writable | undefined}\n */\n #writeStream\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n */\n constructor ({ store, type, cacheByDefault }, cacheKey, handler) {\n this.#store = store\n this.#cacheType = type\n this.#cacheByDefault = cacheByDefault\n this.#cacheKey = cacheKey\n this.#handler = handler\n }\n\n onRequestStart (controller, context) {\n this.#writeStream?.destroy()\n this.#writeStream = undefined\n this.#handler.onRequestStart?.(controller, context)\n }\n\n onRequestUpgrade (controller, statusCode, headers, socket) {\n this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n }\n\n /**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {string} statusMessage\n */\n onResponseStart (\n controller,\n statusCode,\n resHeaders,\n statusMessage\n ) {\n const downstreamOnHeaders = () =>\n this.#handler.onResponseStart?.(\n controller,\n statusCode,\n resHeaders,\n statusMessage\n )\n\n if (\n !util.safeHTTPMethods.includes(this.#cacheKey.method) &&\n statusCode >= 200 &&\n statusCode <= 399\n ) {\n // Successful response to an unsafe method, delete it from cache\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response\n try {\n this.#store.delete(this.#cacheKey)?.catch?.(noop)\n } catch {\n // Fail silently\n }\n return downstreamOnHeaders()\n }\n\n const cacheControlHeader = resHeaders['cache-control']\n const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode)\n if (\n !cacheControlHeader &&\n !resHeaders['expires'] &&\n !heuristicallyCacheable &&\n !this.#cacheByDefault\n ) {\n // Don't have anything to tell us this response is cachable and we're not\n // caching by default\n return downstreamOnHeaders()\n }\n\n const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives)) {\n return downstreamOnHeaders()\n }\n\n const now = Date.now()\n const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined\n if (resAge && resAge >= MAX_RESPONSE_AGE) {\n // Response considered stale\n return downstreamOnHeaders()\n }\n\n const resDate = typeof resHeaders.date === 'string'\n ? parseHttpDate(resHeaders.date)\n : undefined\n\n const staleAt =\n determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n this.#cacheByDefault\n if (staleAt === undefined || (resAge && resAge > staleAt)) {\n return downstreamOnHeaders()\n }\n\n const baseTime = resDate ? resDate.getTime() : now\n const absoluteStaleAt = staleAt + baseTime\n if (now >= absoluteStaleAt) {\n // Response is already stale\n return downstreamOnHeaders()\n }\n\n let varyDirectives\n if (this.#cacheKey.headers && resHeaders.vary) {\n varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)\n if (!varyDirectives) {\n // Parse error\n return downstreamOnHeaders()\n }\n }\n\n const deleteAt = determineDeleteAt(baseTime, cacheControlDirectives, absoluteStaleAt)\n const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)\n\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n */\n const value = {\n statusCode,\n statusMessage,\n headers: strippedHeaders,\n vary: varyDirectives,\n cacheControlDirectives,\n cachedAt: resAge ? now - resAge : now,\n staleAt: absoluteStaleAt,\n deleteAt\n }\n\n if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {\n value.etag = resHeaders.etag\n }\n\n this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n if (!this.#writeStream) {\n return downstreamOnHeaders()\n }\n\n const handler = this\n this.#writeStream\n .on('drain', () => controller.resume())\n .on('error', function () {\n // TODO (fix): Make error somehow observable?\n handler.#writeStream = undefined\n\n // Delete the value in case the cache store is holding onto state from\n // the call to createWriteStream\n handler.#store.delete(handler.#cacheKey)\n })\n .on('close', function () {\n if (handler.#writeStream === this) {\n handler.#writeStream = undefined\n }\n\n // TODO (fix): Should we resume even if was paused downstream?\n controller.resume()\n })\n\n return downstreamOnHeaders()\n }\n\n onResponseData (controller, chunk) {\n if (this.#writeStream?.write(chunk) === false) {\n controller.pause()\n }\n\n this.#handler.onResponseData?.(controller, chunk)\n }\n\n onResponseEnd (controller, trailers) {\n this.#writeStream?.end()\n this.#handler.onResponseEnd?.(controller, trailers)\n }\n\n onResponseError (controller, err) {\n this.#writeStream?.destroy(err)\n this.#writeStream = undefined\n this.#handler.onResponseError?.(controller, err)\n }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n *\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives) {\n if (statusCode !== 200 && statusCode !== 307) {\n return false\n }\n\n if (cacheControlDirectives['no-store']) {\n return false\n }\n\n if (cacheType === 'shared' && cacheControlDirectives.private === true) {\n return false\n }\n\n // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n if (resHeaders.vary?.includes('*')) {\n return false\n }\n\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n if (resHeaders.authorization) {\n if (!cacheControlDirectives.public || typeof resHeaders.authorization !== 'string') {\n return false\n }\n\n if (\n Array.isArray(cacheControlDirectives['no-cache']) &&\n cacheControlDirectives['no-cache'].includes('authorization')\n ) {\n return false\n }\n\n if (\n Array.isArray(cacheControlDirectives['private']) &&\n cacheControlDirectives['private'].includes('authorization')\n ) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader)\n\n return isNaN(age) ? undefined : age * 1000\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} now\n * @param {number | undefined} age\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {Date | undefined} responseDate\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n *\n * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached\n */\nfunction determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {\n if (cacheType === 'shared') {\n // Prioritize s-maxage since we're a shared cache\n // s-maxage > max-age > Expire\n // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3\n const sMaxAge = cacheControlDirectives['s-maxage']\n if (sMaxAge !== undefined) {\n return sMaxAge > 0 ? sMaxAge * 1000 : undefined\n }\n }\n\n const maxAge = cacheControlDirectives['max-age']\n if (maxAge !== undefined) {\n return maxAge > 0 ? maxAge * 1000 : undefined\n }\n\n if (typeof resHeaders.expires === 'string') {\n // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n const expiresDate = parseHttpDate(resHeaders.expires)\n if (expiresDate) {\n if (now >= expiresDate.getTime()) {\n return undefined\n }\n\n if (responseDate) {\n if (responseDate >= expiresDate) {\n return undefined\n }\n\n if (age !== undefined && age > (expiresDate - responseDate)) {\n return undefined\n }\n }\n\n return expiresDate.getTime() - now\n }\n }\n\n if (typeof resHeaders['last-modified'] === 'string') {\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh\n const lastModified = new Date(resHeaders['last-modified'])\n if (isValidDate(lastModified)) {\n if (lastModified.getTime() >= now) {\n return undefined\n }\n\n const responseAge = now - lastModified.getTime()\n\n return responseAge * 0.1\n }\n }\n\n if (cacheControlDirectives.immutable) {\n // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2\n return 31536000\n }\n\n return undefined\n}\n\n/**\n * @param {number} now\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (now, cacheControlDirectives, staleAt) {\n let staleWhileRevalidate = -Infinity\n let staleIfError = -Infinity\n let immutable = -Infinity\n\n if (cacheControlDirectives['stale-while-revalidate']) {\n staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)\n }\n\n if (cacheControlDirectives['stale-if-error']) {\n staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)\n }\n\n if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n immutable = now + 31536000000\n }\n\n return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)\n}\n\n/**\n * Strips headers required to be removed in cached responses\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {Record<string, string | string []>}\n */\nfunction stripNecessaryHeaders (resHeaders, cacheControlDirectives) {\n const headersToRemove = [\n 'connection',\n 'proxy-authenticate',\n 'proxy-authentication-info',\n 'proxy-authorization',\n 'proxy-connection',\n 'te',\n 'transfer-encoding',\n 'upgrade',\n // We'll add age back when serving it\n 'age'\n ]\n\n if (resHeaders['connection']) {\n if (Array.isArray(resHeaders['connection'])) {\n // connection: a\n // connection: b\n headersToRemove.push(...resHeaders['connection'].map(header => header.trim()))\n } else {\n // connection: a, b\n headersToRemove.push(...resHeaders['connection'].split(',').map(header => header.trim()))\n }\n }\n\n if (Array.isArray(cacheControlDirectives['no-cache'])) {\n headersToRemove.push(...cacheControlDirectives['no-cache'])\n }\n\n if (Array.isArray(cacheControlDirectives['private'])) {\n headersToRemove.push(...cacheControlDirectives['private'])\n }\n\n let strippedHeaders\n for (const headerName of headersToRemove) {\n if (resHeaders[headerName]) {\n strippedHeaders ??= { ...resHeaders }\n delete strippedHeaders[headerName]\n }\n }\n\n return strippedHeaders ?? resHeaders\n}\n\n/**\n * @param {Date} date\n * @returns {boolean}\n */\nfunction isValidDate (date) {\n return date instanceof Date && Number.isFinite(date.valueOf())\n}\n\nmodule.exports = CacheHandler\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheKey} CacheKey\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheValue} CacheValue\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @typedef {import('../../types/cache-interceptor.d.ts').default.GetResult} GetResult\n */\n\n/**\n * @implements {CacheStore}\n */\nclass MemoryCacheStore {\n #maxCount = Infinity\n #maxSize = Infinity\n #maxEntrySize = Infinity\n\n #size = 0\n #count = 0\n #entries = new Map()\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.MemoryCacheStoreOpts | undefined} [opts]\n */\n constructor (opts) {\n if (opts) {\n if (typeof opts !== 'object') {\n throw new TypeError('MemoryCacheStore options must be an object')\n }\n\n if (opts.maxCount !== undefined) {\n if (\n typeof opts.maxCount !== 'number' ||\n !Number.isInteger(opts.maxCount) ||\n opts.maxCount < 0\n ) {\n throw new TypeError('MemoryCacheStore options.maxCount must be a non-negative integer')\n }\n this.#maxCount = opts.maxCount\n }\n\n if (opts.maxSize !== undefined) {\n if (\n typeof opts.maxSize !== 'number' ||\n !Number.isInteger(opts.maxSize) ||\n opts.maxSize < 0\n ) {\n throw new TypeError('MemoryCacheStore options.maxSize must be a non-negative integer')\n }\n this.#maxSize = opts.maxSize\n }\n\n if (opts.maxEntrySize !== undefined) {\n if (\n typeof opts.maxEntrySize !== 'number' ||\n !Number.isInteger(opts.maxEntrySize) ||\n opts.maxEntrySize < 0\n ) {\n throw new TypeError('MemoryCacheStore options.maxEntrySize must be a non-negative integer')\n }\n this.#maxEntrySize = opts.maxEntrySize\n }\n }\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} req\n * @returns {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined}\n */\n get (key) {\n assertCacheKey(key)\n\n const topLevelKey = `${key.origin}:${key.path}`\n\n const now = Date.now()\n const entry = this.#entries.get(topLevelKey)?.find((entry) => (\n entry.deleteAt > now &&\n entry.method === key.method &&\n (entry.vary == null || Object.keys(entry.vary).every(headerName => {\n if (entry.vary[headerName] === null) {\n return key.headers[headerName] === undefined\n }\n\n return entry.vary[headerName] === key.headers[headerName]\n }))\n ))\n\n return entry == null\n ? undefined\n : {\n statusMessage: entry.statusMessage,\n statusCode: entry.statusCode,\n headers: entry.headers,\n body: entry.body,\n vary: entry.vary ? entry.vary : undefined,\n etag: entry.etag,\n cacheControlDirectives: entry.cacheControlDirectives,\n cachedAt: entry.cachedAt,\n staleAt: entry.staleAt,\n deleteAt: entry.deleteAt\n }\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} val\n * @returns {Writable | undefined}\n */\n createWriteStream (key, val) {\n assertCacheKey(key)\n assertCacheValue(val)\n\n const topLevelKey = `${key.origin}:${key.path}`\n\n const store = this\n const entry = { ...key, ...val, body: [], size: 0 }\n\n return new Writable({\n write (chunk, encoding, callback) {\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding)\n }\n\n entry.size += chunk.byteLength\n\n if (entry.size >= store.#maxEntrySize) {\n this.destroy()\n } else {\n entry.body.push(chunk)\n }\n\n callback(null)\n },\n final (callback) {\n let entries = store.#entries.get(topLevelKey)\n if (!entries) {\n entries = []\n store.#entries.set(topLevelKey, entries)\n }\n entries.push(entry)\n\n store.#size += entry.size\n store.#count += 1\n\n if (store.#size > store.#maxSize || store.#count > store.#maxCount) {\n for (const [key, entries] of store.#entries) {\n for (const entry of entries.splice(0, entries.length / 2)) {\n store.#size -= entry.size\n store.#count -= 1\n }\n if (entries.length === 0) {\n store.#entries.delete(key)\n }\n }\n }\n\n callback(null)\n }\n })\n }\n\n /**\n * @param {CacheKey} key\n */\n delete (key) {\n if (typeof key !== 'object') {\n throw new TypeError(`expected key to be object, got ${typeof key}`)\n }\n\n const topLevelKey = `${key.origin}:${key.path}`\n\n for (const entry of this.#entries.get(topLevelKey) ?? []) {\n this.#size -= entry.size\n this.#count -= 1\n }\n this.#entries.delete(topLevelKey)\n }\n}\n\nmodule.exports = MemoryCacheStore\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * This takes care of revalidation requests we send to the origin. If we get\n * a response indicating that what we have is cached (via a HTTP 304), we can\n * continue using the cached value. Otherwise, we'll receive the new response\n * here, which we then just pass on to the next handler (most likely a\n * CacheHandler). Note that this assumes the proper headers were already\n * included in the request to tell the origin that we want to revalidate the\n * response (i.e. if-modified-since).\n *\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-validation\n *\n * @implements {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\nclass CacheRevalidationHandler {\n #successful = false\n\n /**\n * @type {((boolean, any) => void) | null}\n */\n #callback\n\n /**\n * @type {(import('../../types/dispatcher.d.ts').default.DispatchHandler)}\n */\n #handler\n\n #context\n\n /**\n * @type {boolean}\n */\n #allowErrorStatusCodes\n\n /**\n * @param {(boolean) => void} callback Function to call if the cached value is valid\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler\n * @param {boolean} allowErrorStatusCodes\n */\n constructor (callback, handler, allowErrorStatusCodes) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function')\n }\n\n this.#callback = callback\n this.#handler = handler\n this.#allowErrorStatusCodes = allowErrorStatusCodes\n }\n\n onRequestStart (_, context) {\n this.#successful = false\n this.#context = context\n }\n\n onRequestUpgrade (controller, statusCode, headers, socket) {\n this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n }\n\n onResponseStart (\n controller,\n statusCode,\n headers,\n statusMessage\n ) {\n assert(this.#callback != null)\n\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-a-validation-respo\n // https://datatracker.ietf.org/doc/html/rfc5861#section-4\n this.#successful = statusCode === 304 ||\n (this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504)\n this.#callback(this.#successful, this.#context)\n this.#callback = null\n\n if (this.#successful) {\n return true\n }\n\n this.#handler.onRequestStart?.(controller, this.#context)\n this.#handler.onResponseStart?.(\n controller,\n statusCode,\n headers,\n statusMessage\n )\n }\n\n onResponseData (controller, chunk) {\n if (this.#successful) {\n return\n }\n\n return this.#handler.onResponseData?.(controller, chunk)\n }\n\n onResponseEnd (controller, trailers) {\n if (this.#successful) {\n return\n }\n\n this.#handler.onResponseEnd?.(controller, trailers)\n }\n\n onResponseError (controller, err) {\n if (this.#successful) {\n return\n }\n\n if (this.#callback) {\n this.#callback(false)\n this.#callback = null\n }\n\n if (typeof this.#handler.onResponseError === 'function') {\n this.#handler.onResponseError(controller, err)\n } else {\n throw err\n }\n }\n}\n\nmodule.exports = CacheRevalidationHandler\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst util = require('../core/util')\nconst CacheHandler = require('../handler/cache-handler')\nconst MemoryCacheStore = require('../cache/memory-cache-store')\nconst CacheRevalidationHandler = require('../handler/cache-revalidation-handler')\nconst { assertCacheStore, assertCacheMethods, makeCacheKey, parseCacheControlHeader } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\n\n/**\n * @typedef {(options: import('../../types/dispatcher.d.ts').default.DispatchOptions, handler: import('../../types/dispatcher.d.ts').default.DispatchHandler) => void} DispatchFn\n */\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives) {\n if (cacheControlDirectives?.['no-cache']) {\n // Always revalidate requests with the no-cache directive\n return true\n }\n\n const now = Date.now()\n if (now > result.staleAt) {\n // Response is stale\n if (cacheControlDirectives?.['max-stale']) {\n // There's a threshold where we can serve stale responses, let's see if\n // we're in it\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale\n const gracePeriod = result.staleAt + (cacheControlDirectives['max-stale'] * 1000)\n return now > gracePeriod\n }\n\n return true\n }\n\n if (cacheControlDirectives?.['min-fresh']) {\n // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.3\n\n // At this point, staleAt is always > now\n const timeLeftTillStale = result.staleAt - now\n const threshold = cacheControlDirectives['min-fresh'] * 1000\n\n return timeLeftTillStale <= threshold\n }\n\n return false\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n */\nfunction handleUncachedResponse (\n dispatch,\n globalOpts,\n cacheKey,\n handler,\n opts,\n reqCacheControl\n) {\n if (reqCacheControl?.['only-if-cached']) {\n let aborted = false\n try {\n if (typeof handler.onConnect === 'function') {\n handler.onConnect(() => {\n aborted = true\n })\n\n if (aborted) {\n return\n }\n }\n\n if (typeof handler.onHeaders === 'function') {\n handler.onHeaders(504, [], () => {}, 'Gateway Timeout')\n if (aborted) {\n return\n }\n }\n\n if (typeof handler.onComplete === 'function') {\n handler.onComplete([])\n }\n } catch (err) {\n if (typeof handler.onError === 'function') {\n handler.onError(err)\n }\n }\n\n return true\n }\n\n return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {number} age\n * @param {any} context\n * @param {boolean} isStale\n */\nfunction sendCachedValue (handler, opts, result, age, context, isStale) {\n // TODO (perf): Readable.from path can be optimized...\n const stream = util.isStream(result.body)\n ? result.body\n : Readable.from(result.body ?? [])\n\n assert(!stream.destroyed, 'stream should not be destroyed')\n assert(!stream.readableDidRead, 'stream should not be readableDidRead')\n\n const controller = {\n resume () {\n stream.resume()\n },\n pause () {\n stream.pause()\n },\n get paused () {\n return stream.isPaused()\n },\n get aborted () {\n return stream.destroyed\n },\n get reason () {\n return stream.errored\n },\n abort (reason) {\n stream.destroy(reason ?? new AbortError())\n }\n }\n\n stream\n .on('error', function (err) {\n if (!this.readableEnded) {\n if (typeof handler.onResponseError === 'function') {\n handler.onResponseError(controller, err)\n } else {\n throw err\n }\n }\n })\n .on('close', function () {\n if (!this.errored) {\n handler.onResponseEnd?.(controller, {})\n }\n })\n\n handler.onRequestStart?.(controller, context)\n\n if (stream.destroyed) {\n return\n }\n\n // Add the age header\n // https://www.rfc-editor.org/rfc/rfc9111.html#name-age\n const headers = { ...result.headers, age: String(age) }\n\n if (isStale) {\n // Add warning header\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning\n headers.warning = '110 - \"response is stale\"'\n }\n\n handler.onResponseStart?.(controller, result.statusCode, headers, result.statusMessage)\n\n if (opts.method === 'HEAD') {\n stream.destroy()\n } else {\n stream.on('data', function (chunk) {\n handler.onResponseData?.(controller, chunk)\n })\n }\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined} result\n */\nfunction handleResult (\n dispatch,\n globalOpts,\n cacheKey,\n handler,\n opts,\n reqCacheControl,\n result\n) {\n if (!result) {\n return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n }\n\n const now = Date.now()\n if (now > result.deleteAt) {\n // Response is expired, cache store shouldn't have given this to us\n return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n }\n\n const age = Math.round((now - result.cachedAt) / 1000)\n if (reqCacheControl?.['max-age'] && age >= reqCacheControl['max-age']) {\n // Response is considered expired for this specific request\n // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.1\n return dispatch(opts, handler)\n }\n\n // Check if the response is stale\n if (needsRevalidation(result, reqCacheControl)) {\n if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {\n // If body is is stream we can't revalidate...\n // TODO (fix): This could be less strict...\n return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n }\n\n let withinStaleIfErrorThreshold = false\n const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n if (staleIfErrorExpiry) {\n withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n }\n\n let headers = {\n ...opts.headers,\n 'if-modified-since': new Date(result.cachedAt).toUTCString()\n }\n\n if (result.etag) {\n headers['if-none-match'] = result.etag\n }\n\n if (result.vary) {\n headers = {\n ...headers,\n ...result.vary\n }\n }\n\n // We need to revalidate the response\n return dispatch(\n {\n ...opts,\n headers\n },\n new CacheRevalidationHandler(\n (success, context) => {\n if (success) {\n sendCachedValue(handler, opts, result, age, context, true)\n } else if (util.isStream(result.body)) {\n result.body.on('error', () => {}).destroy()\n }\n },\n new CacheHandler(globalOpts, cacheKey, handler),\n withinStaleIfErrorThreshold\n )\n )\n }\n\n // Dump request body.\n if (util.isStream(opts.body)) {\n opts.body.on('error', () => {}).destroy()\n }\n\n sendCachedValue(handler, opts, result, age, null, false)\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n const {\n store = new MemoryCacheStore(),\n methods = ['GET'],\n cacheByDefault = undefined,\n type = 'shared'\n } = opts\n\n if (typeof opts !== 'object' || opts === null) {\n throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n }\n\n assertCacheStore(store, 'opts.store')\n assertCacheMethods(methods, 'opts.methods')\n\n if (typeof cacheByDefault !== 'undefined' && typeof cacheByDefault !== 'number') {\n throw new TypeError(`exepcted opts.cacheByDefault to be number or undefined, got ${typeof cacheByDefault}`)\n }\n\n if (typeof type !== 'undefined' && type !== 'shared' && type !== 'private') {\n throw new TypeError(`exepcted opts.type to be shared, private, or undefined, got ${typeof type}`)\n }\n\n const globalOpts = {\n store,\n methods,\n cacheByDefault,\n type\n }\n\n const safeMethodsToNotCache = util.safeHTTPMethods.filter(method => methods.includes(method) === false)\n\n return dispatch => {\n return (opts, handler) => {\n if (!opts.origin || safeMethodsToNotCache.includes(opts.method)) {\n // Not a method we want to cache or we don't have the origin, skip\n return dispatch(opts, handler)\n }\n\n const reqCacheControl = opts.headers?.['cache-control']\n ? parseCacheControlHeader(opts.headers['cache-control'])\n : undefined\n\n if (reqCacheControl?.['no-store']) {\n return dispatch(opts, handler)\n }\n\n /**\n * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n */\n const cacheKey = makeCacheKey(opts)\n const result = store.get(cacheKey)\n\n if (result && typeof result.then === 'function') {\n result.then(result => {\n handleResult(dispatch,\n globalOpts,\n cacheKey,\n handler,\n opts,\n reqCacheControl,\n result\n )\n })\n } else {\n handleResult(\n dispatch,\n globalOpts,\n cacheKey,\n handler,\n opts,\n reqCacheControl,\n result\n )\n }\n\n return true\n }\n }\n}\n", "'use strict'\n\nconst { Writable } = require('stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\nlet DatabaseSync\n\nconst VERSION = 3\n\n// 2gb\nconst MAX_ENTRY_SIZE = 2 * 1000 * 1000 * 1000\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @implements {CacheStore}\n *\n * @typedef {{\n * id: Readonly<number>,\n * body?: Uint8Array\n * statusCode: number\n * statusMessage: string\n * headers?: string\n * vary?: string\n * etag?: string\n * cacheControlDirectives?: string\n * cachedAt: number\n * staleAt: number\n * deleteAt: number\n * }} SqliteStoreValue\n */\nmodule.exports = class SqliteCacheStore {\n #maxEntrySize = MAX_ENTRY_SIZE\n #maxCount = Infinity\n\n /**\n * @type {import('node:sqlite').DatabaseSync}\n */\n #db\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #getValuesQuery\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #updateValueQuery\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #insertValueQuery\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #deleteExpiredValuesQuery\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #deleteByUrlQuery\n\n /**\n * @type {import('node:sqlite').StatementSync}\n */\n #countEntriesQuery\n\n /**\n * @type {import('node:sqlite').StatementSync | null}\n */\n #deleteOldValuesQuery\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.SqliteCacheStoreOpts | undefined} opts\n */\n constructor (opts) {\n if (opts) {\n if (typeof opts !== 'object') {\n throw new TypeError('SqliteCacheStore options must be an object')\n }\n\n if (opts.maxEntrySize !== undefined) {\n if (\n typeof opts.maxEntrySize !== 'number' ||\n !Number.isInteger(opts.maxEntrySize) ||\n opts.maxEntrySize < 0\n ) {\n throw new TypeError('SqliteCacheStore options.maxEntrySize must be a non-negative integer')\n }\n\n if (opts.maxEntrySize > MAX_ENTRY_SIZE) {\n throw new TypeError('SqliteCacheStore options.maxEntrySize must be less than 2gb')\n }\n\n this.#maxEntrySize = opts.maxEntrySize\n }\n\n if (opts.maxCount !== undefined) {\n if (\n typeof opts.maxCount !== 'number' ||\n !Number.isInteger(opts.maxCount) ||\n opts.maxCount < 0\n ) {\n throw new TypeError('SqliteCacheStore options.maxCount must be a non-negative integer')\n }\n this.#maxCount = opts.maxCount\n }\n }\n\n if (!DatabaseSync) {\n DatabaseSync = require('node:sqlite').DatabaseSync\n }\n this.#db = new DatabaseSync(opts?.location ?? ':memory:')\n\n this.#db.exec(`\n CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION} (\n -- Data specific to us\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n url TEXT NOT NULL,\n method TEXT NOT NULL,\n\n -- Data returned to the interceptor\n body BUF NULL,\n deleteAt INTEGER NOT NULL,\n statusCode INTEGER NOT NULL,\n statusMessage TEXT NOT NULL,\n headers TEXT NULL,\n cacheControlDirectives TEXT NULL,\n etag TEXT NULL,\n vary TEXT NULL,\n cachedAt INTEGER NOT NULL,\n staleAt INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_url ON cacheInterceptorV${VERSION}(url);\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_method ON cacheInterceptorV${VERSION}(method);\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_deleteAt ON cacheInterceptorV${VERSION}(deleteAt);\n `)\n\n this.#getValuesQuery = this.#db.prepare(`\n SELECT\n id,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n FROM cacheInterceptorV${VERSION}\n WHERE\n url = ?\n AND method = ?\n ORDER BY\n deleteAt ASC\n `)\n\n this.#updateValueQuery = this.#db.prepare(`\n UPDATE cacheInterceptorV${VERSION} SET\n body = ?,\n deleteAt = ?,\n statusCode = ?,\n statusMessage = ?,\n headers = ?,\n etag = ?,\n cacheControlDirectives = ?,\n cachedAt = ?,\n staleAt = ?\n WHERE\n id = ?\n `)\n\n this.#insertValueQuery = this.#db.prepare(`\n INSERT INTO cacheInterceptorV${VERSION} (\n url,\n method,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `)\n\n this.#deleteByUrlQuery = this.#db.prepare(\n `DELETE FROM cacheInterceptorV${VERSION} WHERE url = ?`\n )\n\n this.#countEntriesQuery = this.#db.prepare(\n `SELECT COUNT(*) AS total FROM cacheInterceptorV${VERSION}`\n )\n\n this.#deleteExpiredValuesQuery = this.#db.prepare(\n `DELETE FROM cacheInterceptorV${VERSION} WHERE deleteAt <= ?`\n )\n\n this.#deleteOldValuesQuery = this.#maxCount === Infinity\n ? null\n : this.#db.prepare(`\n DELETE FROM cacheInterceptorV${VERSION}\n WHERE id IN (\n SELECT\n id\n FROM cacheInterceptorV${VERSION}\n ORDER BY cachedAt DESC\n LIMIT ?\n )\n `)\n }\n\n close () {\n this.#db.close()\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @returns {(import('../../types/cache-interceptor.d.ts').default.GetResult & { body?: Buffer }) | undefined}\n */\n get (key) {\n assertCacheKey(key)\n\n const value = this.#findValue(key)\n return value\n ? {\n body: value.body ? Buffer.from(value.body.buffer, value.body.byteOffset, value.body.byteLength) : undefined,\n statusCode: value.statusCode,\n statusMessage: value.statusMessage,\n headers: value.headers ? JSON.parse(value.headers) : undefined,\n etag: value.etag ? value.etag : undefined,\n vary: value.vary ? JSON.parse(value.vary) : undefined,\n cacheControlDirectives: value.cacheControlDirectives\n ? JSON.parse(value.cacheControlDirectives)\n : undefined,\n cachedAt: value.cachedAt,\n staleAt: value.staleAt,\n deleteAt: value.deleteAt\n }\n : undefined\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: null | Buffer | Array<Buffer>}} value\n */\n set (key, value) {\n assertCacheKey(key)\n\n const url = this.#makeValueUrl(key)\n const body = Array.isArray(value.body) ? Buffer.concat(value.body) : value.body\n const size = body?.byteLength\n\n if (size && size > this.#maxEntrySize) {\n return\n }\n\n const existingValue = this.#findValue(key, true)\n if (existingValue) {\n // Updating an existing response, let's overwrite it\n this.#updateValueQuery.run(\n body,\n value.deleteAt,\n value.statusCode,\n value.statusMessage,\n value.headers ? JSON.stringify(value.headers) : null,\n value.etag ? value.etag : null,\n value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n value.cachedAt,\n value.staleAt,\n existingValue.id\n )\n } else {\n this.#prune()\n // New response, let's insert it\n this.#insertValueQuery.run(\n url,\n key.method,\n body,\n value.deleteAt,\n value.statusCode,\n value.statusMessage,\n value.headers ? JSON.stringify(value.headers) : null,\n value.etag ? value.etag : null,\n value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n value.vary ? JSON.stringify(value.vary) : null,\n value.cachedAt,\n value.staleAt\n )\n }\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value\n * @returns {Writable | undefined}\n */\n createWriteStream (key, value) {\n assertCacheKey(key)\n assertCacheValue(value)\n\n let size = 0\n /**\n * @type {Buffer[] | null}\n */\n const body = []\n const store = this\n\n return new Writable({\n decodeStrings: true,\n write (chunk, encoding, callback) {\n size += chunk.byteLength\n\n if (size < store.#maxEntrySize) {\n body.push(chunk)\n } else {\n this.destroy()\n }\n\n callback()\n },\n final (callback) {\n store.set(key, { ...value, body })\n callback()\n }\n })\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n */\n delete (key) {\n if (typeof key !== 'object') {\n throw new TypeError(`expected key to be object, got ${typeof key}`)\n }\n\n this.#deleteByUrlQuery.run(this.#makeValueUrl(key))\n }\n\n #prune () {\n if (this.size <= this.#maxCount) {\n return 0\n }\n\n {\n const removed = this.#deleteExpiredValuesQuery.run(Date.now()).changes\n if (removed) {\n return removed\n }\n }\n\n {\n const removed = this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount * 0.1), 1)).changes\n if (removed) {\n return removed\n }\n }\n\n return 0\n }\n\n /**\n * Counts the number of rows in the cache\n * @returns {Number}\n */\n get size () {\n const { total } = this.#countEntriesQuery.get()\n return total\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @returns {string}\n */\n #makeValueUrl (key) {\n return `${key.origin}/${key.path}`\n }\n\n /**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n * @param {boolean} [canBeExpired=false]\n * @returns {SqliteStoreValue | undefined}\n */\n #findValue (key, canBeExpired = false) {\n const url = this.#makeValueUrl(key)\n const { headers, method } = key\n\n /**\n * @type {SqliteStoreValue[]}\n */\n const values = this.#getValuesQuery.all(url, method)\n\n if (values.length === 0) {\n return undefined\n }\n\n const now = Date.now()\n for (const value of values) {\n if (now >= value.deleteAt && !canBeExpired) {\n return undefined\n }\n\n let matches = true\n\n if (value.vary) {\n const vary = JSON.parse(value.vary)\n\n for (const header in vary) {\n if (!headerValueEquals(headers[header], vary[header])) {\n matches = false\n break\n }\n }\n }\n\n if (matches) {\n return value\n }\n }\n\n return undefined\n }\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n if (lhs == null && rhs == null) {\n return true\n }\n\n if ((lhs == null && rhs != null) ||\n (lhs != null && rhs == null)) {\n return false\n }\n\n if (Array.isArray(lhs) && Array.isArray(rhs)) {\n if (lhs.length !== rhs.length) {\n return false\n }\n\n return lhs.every((x, i) => x === rhs[i])\n }\n\n return lhs === rhs\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { kEnumerableProperty } = require('../../core/util')\nconst {\n iteratorMixin,\n isValidHeaderName,\n isValidHeaderValue\n} = require('./util')\nconst { webidl } = require('./webidl')\nconst assert = require('node:assert')\nconst util = require('node:util')\n\n/**\n * @param {number} code\n * @returns {code is (0x0a | 0x0d | 0x09 | 0x20)}\n */\nfunction isHTTPWhiteSpaceCharCode (code) {\n return code === 0x0a || code === 0x0d || code === 0x09 || code === 0x20\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n * @param {string} potentialValue\n * @returns {string}\n */\nfunction headerValueNormalize (potentialValue) {\n // To normalize a byte sequence potentialValue, remove\n // any leading and trailing HTTP whitespace bytes from\n // potentialValue.\n let i = 0; let j = potentialValue.length\n\n while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j\n while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i\n\n return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j)\n}\n\n/**\n * @param {Headers} headers\n * @param {Array|Object} object\n */\nfunction fill (headers, object) {\n // To fill a Headers object headers with a given object object, run these steps:\n\n // 1. If object is a sequence, then for each header in object:\n // Note: webidl conversion to array has already been done.\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; ++i) {\n const header = object[i]\n // 1. If header does not contain exactly two items, then throw a TypeError.\n if (header.length !== 2) {\n throw webidl.errors.exception({\n header: 'Headers constructor',\n message: `expected name/value pair to be length 2, found ${header.length}.`\n })\n }\n\n // 2. Append (header\u2019s first item, header\u2019s second item) to headers.\n appendHeader(headers, header[0], header[1])\n }\n } else if (typeof object === 'object' && object !== null) {\n // Note: null should throw\n\n // 2. Otherwise, object is a record, then for each key \u2192 value in object,\n // append (key, value) to headers\n const keys = Object.keys(object)\n for (let i = 0; i < keys.length; ++i) {\n appendHeader(headers, keys[i], object[keys[i]])\n }\n } else {\n throw webidl.errors.conversionFailed({\n prefix: 'Headers constructor',\n argument: 'Argument 1',\n types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n })\n }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-headers-append\n * @param {Headers} headers\n * @param {string} name\n * @param {string} value\n */\nfunction appendHeader (headers, name, value) {\n // 1. Normalize value.\n value = headerValueNormalize(value)\n\n // 2. If name is not a header name or value is not a\n // header value, then throw a TypeError.\n if (!isValidHeaderName(name)) {\n throw webidl.errors.invalidArgument({\n prefix: 'Headers.append',\n value: name,\n type: 'header name'\n })\n } else if (!isValidHeaderValue(value)) {\n throw webidl.errors.invalidArgument({\n prefix: 'Headers.append',\n value,\n type: 'header value'\n })\n }\n\n // 3. If headers\u2019s guard is \"immutable\", then throw a TypeError.\n // 4. Otherwise, if headers\u2019s guard is \"request\" and name is a\n // forbidden header name, return.\n // 5. Otherwise, if headers\u2019s guard is \"request-no-cors\":\n // TODO\n // Note: undici does not implement forbidden header names\n if (getHeadersGuard(headers) === 'immutable') {\n throw new TypeError('immutable')\n }\n\n // 6. Otherwise, if headers\u2019s guard is \"response\" and name is a\n // forbidden response-header name, return.\n\n // 7. Append (name, value) to headers\u2019s header list.\n return getHeadersList(headers).append(name, value, false)\n\n // 8. If headers\u2019s guard is \"request-no-cors\", then remove\n // privileged no-CORS request headers from headers\n}\n\n// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n/**\n * @param {Headers} target\n */\nfunction headersListSortAndCombine (target) {\n const headersList = getHeadersList(target)\n\n if (!headersList) {\n return []\n }\n\n if (headersList.sortedMap) {\n return headersList.sortedMap\n }\n\n // 1. Let headers be an empty list of headers with the key being the name\n // and value the value.\n const headers = []\n\n // 2. Let names be the result of convert header names to a sorted-lowercase\n // set with all the names of the headers in list.\n const names = headersList.toSortedArray()\n\n const cookies = headersList.cookies\n\n // fast-path\n if (cookies === null || cookies.length === 1) {\n // Note: The non-null assertion of value has already been done by `HeadersList#toSortedArray`\n return (headersList.sortedMap = names)\n }\n\n // 3. For each name of names:\n for (let i = 0; i < names.length; ++i) {\n const { 0: name, 1: value } = names[i]\n // 1. If name is `set-cookie`, then:\n if (name === 'set-cookie') {\n // 1. Let values be a list of all values of headers in list whose name\n // is a byte-case-insensitive match for name, in order.\n\n // 2. For each value of values:\n // 1. Append (name, value) to headers.\n for (let j = 0; j < cookies.length; ++j) {\n headers.push([name, cookies[j]])\n }\n } else {\n // 2. Otherwise:\n\n // 1. Let value be the result of getting name from list.\n\n // 2. Assert: value is non-null.\n // Note: This operation was done by `HeadersList#toSortedArray`.\n\n // 3. Append (name, value) to headers.\n headers.push([name, value])\n }\n }\n\n // 4. Return headers.\n return (headersList.sortedMap = headers)\n}\n\nfunction compareHeaderName (a, b) {\n return a[0] < b[0] ? -1 : 1\n}\n\nclass HeadersList {\n /** @type {[string, string][]|null} */\n cookies = null\n\n sortedMap\n headersMap\n\n constructor (init) {\n if (init instanceof HeadersList) {\n this.headersMap = new Map(init.headersMap)\n this.sortedMap = init.sortedMap\n this.cookies = init.cookies === null ? null : [...init.cookies]\n } else {\n this.headersMap = new Map(init)\n this.sortedMap = null\n }\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#header-list-contains\n * @param {string} name\n * @param {boolean} isLowerCase\n */\n contains (name, isLowerCase) {\n // A header list list contains a header name name if list\n // contains a header whose name is a byte-case-insensitive\n // match for name.\n\n return this.headersMap.has(isLowerCase ? name : name.toLowerCase())\n }\n\n clear () {\n this.headersMap.clear()\n this.sortedMap = null\n this.cookies = null\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-append\n * @param {string} name\n * @param {string} value\n * @param {boolean} isLowerCase\n */\n append (name, value, isLowerCase) {\n this.sortedMap = null\n\n // 1. If list contains name, then set name to the first such\n // header\u2019s name.\n const lowercaseName = isLowerCase ? name : name.toLowerCase()\n const exists = this.headersMap.get(lowercaseName)\n\n // 2. Append (name, value) to list.\n if (exists) {\n const delimiter = lowercaseName === 'cookie' ? '; ' : ', '\n this.headersMap.set(lowercaseName, {\n name: exists.name,\n value: `${exists.value}${delimiter}${value}`\n })\n } else {\n this.headersMap.set(lowercaseName, { name, value })\n }\n\n if (lowercaseName === 'set-cookie') {\n (this.cookies ??= []).push(value)\n }\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-set\n * @param {string} name\n * @param {string} value\n * @param {boolean} isLowerCase\n */\n set (name, value, isLowerCase) {\n this.sortedMap = null\n const lowercaseName = isLowerCase ? name : name.toLowerCase()\n\n if (lowercaseName === 'set-cookie') {\n this.cookies = [value]\n }\n\n // 1. If list contains name, then set the value of\n // the first such header to value and remove the\n // others.\n // 2. Otherwise, append header (name, value) to list.\n this.headersMap.set(lowercaseName, { name, value })\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-delete\n * @param {string} name\n * @param {boolean} isLowerCase\n */\n delete (name, isLowerCase) {\n this.sortedMap = null\n if (!isLowerCase) name = name.toLowerCase()\n\n if (name === 'set-cookie') {\n this.cookies = null\n }\n\n this.headersMap.delete(name)\n }\n\n /**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get\n * @param {string} name\n * @param {boolean} isLowerCase\n * @returns {string | null}\n */\n get (name, isLowerCase) {\n // 1. If list does not contain name, then return null.\n // 2. Return the values of all headers in list whose name\n // is a byte-case-insensitive match for name,\n // separated from each other by 0x2C 0x20, in order.\n return this.headersMap.get(isLowerCase ? name : name.toLowerCase())?.value ?? null\n }\n\n * [Symbol.iterator] () {\n // use the lowercased name\n for (const { 0: name, 1: { value } } of this.headersMap) {\n yield [name, value]\n }\n }\n\n get entries () {\n const headers = {}\n\n if (this.headersMap.size !== 0) {\n for (const { name, value } of this.headersMap.values()) {\n headers[name] = value\n }\n }\n\n return headers\n }\n\n rawValues () {\n return this.headersMap.values()\n }\n\n get entriesList () {\n const headers = []\n\n if (this.headersMap.size !== 0) {\n for (const { 0: lowerName, 1: { name, value } } of this.headersMap) {\n if (lowerName === 'set-cookie') {\n for (const cookie of this.cookies) {\n headers.push([name, cookie])\n }\n } else {\n headers.push([name, value])\n }\n }\n }\n\n return headers\n }\n\n // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set\n toSortedArray () {\n const size = this.headersMap.size\n const array = new Array(size)\n // In most cases, you will use the fast-path.\n // fast-path: Use binary insertion sort for small arrays.\n if (size <= 32) {\n if (size === 0) {\n // If empty, it is an empty array. To avoid the first index assignment.\n return array\n }\n // Improve performance by unrolling loop and avoiding double-loop.\n // Double-loop-less version of the binary insertion sort.\n const iterator = this.headersMap[Symbol.iterator]()\n const firstValue = iterator.next().value\n // set [name, value] to first index.\n array[0] = [firstValue[0], firstValue[1].value]\n // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n // 3.2.2. Assert: value is non-null.\n assert(firstValue[1].value !== null)\n for (\n let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value;\n i < size;\n ++i\n ) {\n // get next value\n value = iterator.next().value\n // set [name, value] to current index.\n x = array[i] = [value[0], value[1].value]\n // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n // 3.2.2. Assert: value is non-null.\n assert(x[1] !== null)\n left = 0\n right = i\n // binary search\n while (left < right) {\n // middle index\n pivot = left + ((right - left) >> 1)\n // compare header name\n if (array[pivot][0] <= x[0]) {\n left = pivot + 1\n } else {\n right = pivot\n }\n }\n if (i !== pivot) {\n j = i\n while (j > left) {\n array[j] = array[--j]\n }\n array[left] = x\n }\n }\n /* c8 ignore next 4 */\n if (!iterator.next().done) {\n // This is for debugging and will never be called.\n throw new TypeError('Unreachable')\n }\n return array\n } else {\n // This case would be a rare occurrence.\n // slow-path: fallback\n let i = 0\n for (const { 0: name, 1: { value } } of this.headersMap) {\n array[i++] = [name, value]\n // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n // 3.2.2. Assert: value is non-null.\n assert(value !== null)\n }\n return array.sort(compareHeaderName)\n }\n }\n}\n\n// https://fetch.spec.whatwg.org/#headers-class\nclass Headers {\n #guard\n /**\n * @type {HeadersList}\n */\n #headersList\n\n /**\n * @param {HeadersInit|Symbol} [init]\n * @returns\n */\n constructor (init = undefined) {\n webidl.util.markAsUncloneable(this)\n\n if (init === kConstruct) {\n return\n }\n\n this.#headersList = new HeadersList()\n\n // The new Headers(init) constructor steps are:\n\n // 1. Set this\u2019s guard to \"none\".\n this.#guard = 'none'\n\n // 2. If init is given, then fill this with init.\n if (init !== undefined) {\n init = webidl.converters.HeadersInit(init, 'Headers constructor', 'init')\n fill(this, init)\n }\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-append\n append (name, value) {\n webidl.brandCheck(this, Headers)\n\n webidl.argumentLengthCheck(arguments, 2, 'Headers.append')\n\n const prefix = 'Headers.append'\n name = webidl.converters.ByteString(name, prefix, 'name')\n value = webidl.converters.ByteString(value, prefix, 'value')\n\n return appendHeader(this, name, value)\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-delete\n delete (name) {\n webidl.brandCheck(this, Headers)\n\n webidl.argumentLengthCheck(arguments, 1, 'Headers.delete')\n\n const prefix = 'Headers.delete'\n name = webidl.converters.ByteString(name, prefix, 'name')\n\n // 1. If name is not a header name, then throw a TypeError.\n if (!isValidHeaderName(name)) {\n throw webidl.errors.invalidArgument({\n prefix: 'Headers.delete',\n value: name,\n type: 'header name'\n })\n }\n\n // 2. If this\u2019s guard is \"immutable\", then throw a TypeError.\n // 3. Otherwise, if this\u2019s guard is \"request\" and name is a\n // forbidden header name, return.\n // 4. Otherwise, if this\u2019s guard is \"request-no-cors\", name\n // is not a no-CORS-safelisted request-header name, and\n // name is not a privileged no-CORS request-header name,\n // return.\n // 5. Otherwise, if this\u2019s guard is \"response\" and name is\n // a forbidden response-header name, return.\n // Note: undici does not implement forbidden header names\n if (this.#guard === 'immutable') {\n throw new TypeError('immutable')\n }\n\n // 6. If this\u2019s header list does not contain name, then\n // return.\n if (!this.#headersList.contains(name, false)) {\n return\n }\n\n // 7. Delete name from this\u2019s header list.\n // 8. If this\u2019s guard is \"request-no-cors\", then remove\n // privileged no-CORS request headers from this.\n this.#headersList.delete(name, false)\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-get\n get (name) {\n webidl.brandCheck(this, Headers)\n\n webidl.argumentLengthCheck(arguments, 1, 'Headers.get')\n\n const prefix = 'Headers.get'\n name = webidl.converters.ByteString(name, prefix, 'name')\n\n // 1. If name is not a header name, then throw a TypeError.\n if (!isValidHeaderName(name)) {\n throw webidl.errors.invalidArgument({\n prefix,\n value: name,\n type: 'header name'\n })\n }\n\n // 2. Return the result of getting name from this\u2019s header\n // list.\n return this.#headersList.get(name, false)\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-has\n has (name) {\n webidl.brandCheck(this, Headers)\n\n webidl.argumentLengthCheck(arguments, 1, 'Headers.has')\n\n const prefix = 'Headers.has'\n name = webidl.converters.ByteString(name, prefix, 'name')\n\n // 1. If name is not a header name, then throw a TypeError.\n if (!isValidHeaderName(name)) {\n throw webidl.errors.invalidArgument({\n prefix,\n value: name,\n type: 'header name'\n })\n }\n\n // 2. Return true if this\u2019s header list contains name;\n // otherwise false.\n return this.#headersList.contains(name, false)\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-set\n set (name, value) {\n webidl.brandCheck(this, Headers)\n\n webidl.argumentLengthCheck(arguments, 2, 'Headers.set')\n\n const prefix = 'Headers.set'\n name = webidl.converters.ByteString(name, prefix, 'name')\n value = webidl.converters.ByteString(value, prefix, 'value')\n\n // 1. Normalize value.\n value = headerValueNormalize(value)\n\n // 2. If name is not a header name or value is not a\n // header value, then throw a TypeError.\n if (!isValidHeaderName(name)) {\n throw webidl.errors.invalidArgument({\n prefix,\n value: name,\n type: 'header name'\n })\n } else if (!isValidHeaderValue(value)) {\n throw webidl.errors.invalidArgument({\n prefix,\n value,\n type: 'header value'\n })\n }\n\n // 3. If this\u2019s guard is \"immutable\", then throw a TypeError.\n // 4. Otherwise, if this\u2019s guard is \"request\" and name is a\n // forbidden header name, return.\n // 5. Otherwise, if this\u2019s guard is \"request-no-cors\" and\n // name/value is not a no-CORS-safelisted request-header,\n // return.\n // 6. Otherwise, if this\u2019s guard is \"response\" and name is a\n // forbidden response-header name, return.\n // Note: undici does not implement forbidden header names\n if (this.#guard === 'immutable') {\n throw new TypeError('immutable')\n }\n\n // 7. Set (name, value) in this\u2019s header list.\n // 8. If this\u2019s guard is \"request-no-cors\", then remove\n // privileged no-CORS request headers from this\n this.#headersList.set(name, value, false)\n }\n\n // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie\n getSetCookie () {\n webidl.brandCheck(this, Headers)\n\n // 1. If this\u2019s header list does not contain `Set-Cookie`, then return \u00AB \u00BB.\n // 2. Return the values of all headers in this\u2019s header list whose name is\n // a byte-case-insensitive match for `Set-Cookie`, in order.\n\n const list = this.#headersList.cookies\n\n if (list) {\n return [...list]\n }\n\n return []\n }\n\n [util.inspect.custom] (depth, options) {\n options.depth ??= depth\n\n return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`\n }\n\n static getHeadersGuard (o) {\n return o.#guard\n }\n\n static setHeadersGuard (o, guard) {\n o.#guard = guard\n }\n\n /**\n * @param {Headers} o\n */\n static getHeadersList (o) {\n return o.#headersList\n }\n\n /**\n * @param {Headers} target\n * @param {HeadersList} list\n */\n static setHeadersList (target, list) {\n target.#headersList = list\n }\n}\n\nconst { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers\nReflect.deleteProperty(Headers, 'getHeadersGuard')\nReflect.deleteProperty(Headers, 'setHeadersGuard')\nReflect.deleteProperty(Headers, 'getHeadersList')\nReflect.deleteProperty(Headers, 'setHeadersList')\n\niteratorMixin('Headers', Headers, headersListSortAndCombine, 0, 1)\n\nObject.defineProperties(Headers.prototype, {\n append: kEnumerableProperty,\n delete: kEnumerableProperty,\n get: kEnumerableProperty,\n has: kEnumerableProperty,\n set: kEnumerableProperty,\n getSetCookie: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'Headers',\n configurable: true\n },\n [util.inspect.custom]: {\n enumerable: false\n }\n})\n\nwebidl.converters.HeadersInit = function (V, prefix, argument) {\n if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n const iterator = Reflect.get(V, Symbol.iterator)\n\n // A work-around to ensure we send the properly-cased Headers when V is a Headers object.\n // Read https://github.com/nodejs/undici/pull/3159#issuecomment-2075537226 before touching, please.\n if (!util.types.isProxy(V) && iterator === Headers.prototype.entries) { // Headers object\n try {\n return getHeadersList(V).entriesList\n } catch {\n // fall-through\n }\n }\n\n if (typeof iterator === 'function') {\n return webidl.converters['sequence<sequence<ByteString>>'](V, prefix, argument, iterator.bind(V))\n }\n\n return webidl.converters['record<ByteString, ByteString>'](V, prefix, argument)\n }\n\n throw webidl.errors.conversionFailed({\n prefix: 'Headers constructor',\n argument: 'Argument 1',\n types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n })\n}\n\nmodule.exports = {\n fill,\n // for test.\n compareHeaderName,\n Headers,\n HeadersList,\n getHeadersGuard,\n setHeadersGuard,\n setHeadersList,\n getHeadersList\n}\n", "'use strict'\n\nconst { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require('./headers')\nconst { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require('./body')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst { kEnumerableProperty } = util\nconst {\n isValidReasonPhrase,\n isCancelled,\n isAborted,\n serializeJavascriptValueToJSONString,\n isErrorLike,\n isomorphicEncode,\n environmentSettingsObject: relevantRealm\n} = require('./util')\nconst {\n redirectStatusSet,\n nullBodyStatus\n} = require('./constants')\nconst { webidl } = require('./webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { types } = require('node:util')\n\nconst textEncoder = new TextEncoder('utf-8')\n\n// https://fetch.spec.whatwg.org/#response-class\nclass Response {\n /** @type {Headers} */\n #headers\n\n #state\n\n // Creates network error Response.\n static error () {\n // The static error() method steps are to return the result of creating a\n // Response object, given a new network error, \"immutable\", and this\u2019s\n // relevant Realm.\n const responseObject = fromInnerResponse(makeNetworkError(), 'immutable')\n\n return responseObject\n }\n\n // https://fetch.spec.whatwg.org/#dom-response-json\n static json (data, init = undefined) {\n webidl.argumentLengthCheck(arguments, 1, 'Response.json')\n\n if (init !== null) {\n init = webidl.converters.ResponseInit(init)\n }\n\n // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.\n const bytes = textEncoder.encode(\n serializeJavascriptValueToJSONString(data)\n )\n\n // 2. Let body be the result of extracting bytes.\n const body = extractBody(bytes)\n\n // 3. Let responseObject be the result of creating a Response object, given a new response,\n // \"response\", and this\u2019s relevant Realm.\n const responseObject = fromInnerResponse(makeResponse({}), 'response')\n\n // 4. Perform initialize a response given responseObject, init, and (body, \"application/json\").\n initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })\n\n // 5. Return responseObject.\n return responseObject\n }\n\n // Creates a redirect Response that redirects to url with status status.\n static redirect (url, status = 302) {\n webidl.argumentLengthCheck(arguments, 1, 'Response.redirect')\n\n url = webidl.converters.USVString(url)\n status = webidl.converters['unsigned short'](status)\n\n // 1. Let parsedURL be the result of parsing url with current settings\n // object\u2019s API base URL.\n // 2. If parsedURL is failure, then throw a TypeError.\n // TODO: base-URL?\n let parsedURL\n try {\n parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl)\n } catch (err) {\n throw new TypeError(`Failed to parse URL from ${url}`, { cause: err })\n }\n\n // 3. If status is not a redirect status, then throw a RangeError.\n if (!redirectStatusSet.has(status)) {\n throw new RangeError(`Invalid status code ${status}`)\n }\n\n // 4. Let responseObject be the result of creating a Response object,\n // given a new response, \"immutable\", and this\u2019s relevant Realm.\n const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n // 5. Set responseObject\u2019s response\u2019s status to status.\n responseObject.#state.status = status\n\n // 6. Let value be parsedURL, serialized and isomorphic encoded.\n const value = isomorphicEncode(URLSerializer(parsedURL))\n\n // 7. Append `Location`/value to responseObject\u2019s response\u2019s header list.\n responseObject.#state.headersList.append('location', value, true)\n\n // 8. Return responseObject.\n return responseObject\n }\n\n // https://fetch.spec.whatwg.org/#dom-response\n constructor (body = null, init = undefined) {\n webidl.util.markAsUncloneable(this)\n\n if (body === kConstruct) {\n return\n }\n\n if (body !== null) {\n body = webidl.converters.BodyInit(body)\n }\n\n init = webidl.converters.ResponseInit(init)\n\n // 1. Set this\u2019s response to a new response.\n this.#state = makeResponse({})\n\n // 2. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n // Realm, whose header list is this\u2019s response\u2019s header list and guard\n // is \"response\".\n this.#headers = new Headers(kConstruct)\n setHeadersGuard(this.#headers, 'response')\n setHeadersList(this.#headers, this.#state.headersList)\n\n // 3. Let bodyWithType be null.\n let bodyWithType = null\n\n // 4. If body is non-null, then set bodyWithType to the result of extracting body.\n if (body != null) {\n const [extractedBody, type] = extractBody(body)\n bodyWithType = { body: extractedBody, type }\n }\n\n // 5. Perform initialize a response given this, init, and bodyWithType.\n initializeResponse(this, init, bodyWithType)\n }\n\n // Returns response\u2019s type, e.g., \"cors\".\n get type () {\n webidl.brandCheck(this, Response)\n\n // The type getter steps are to return this\u2019s response\u2019s type.\n return this.#state.type\n }\n\n // Returns response\u2019s URL, if it has one; otherwise the empty string.\n get url () {\n webidl.brandCheck(this, Response)\n\n const urlList = this.#state.urlList\n\n // The url getter steps are to return the empty string if this\u2019s\n // response\u2019s URL is null; otherwise this\u2019s response\u2019s URL,\n // serialized with exclude fragment set to true.\n const url = urlList[urlList.length - 1] ?? null\n\n if (url === null) {\n return ''\n }\n\n return URLSerializer(url, true)\n }\n\n // Returns whether response was obtained through a redirect.\n get redirected () {\n webidl.brandCheck(this, Response)\n\n // The redirected getter steps are to return true if this\u2019s response\u2019s URL\n // list has more than one item; otherwise false.\n return this.#state.urlList.length > 1\n }\n\n // Returns response\u2019s status.\n get status () {\n webidl.brandCheck(this, Response)\n\n // The status getter steps are to return this\u2019s response\u2019s status.\n return this.#state.status\n }\n\n // Returns whether response\u2019s status is an ok status.\n get ok () {\n webidl.brandCheck(this, Response)\n\n // The ok getter steps are to return true if this\u2019s response\u2019s status is an\n // ok status; otherwise false.\n return this.#state.status >= 200 && this.#state.status <= 299\n }\n\n // Returns response\u2019s status message.\n get statusText () {\n webidl.brandCheck(this, Response)\n\n // The statusText getter steps are to return this\u2019s response\u2019s status\n // message.\n return this.#state.statusText\n }\n\n // Returns response\u2019s headers as Headers.\n get headers () {\n webidl.brandCheck(this, Response)\n\n // The headers getter steps are to return this\u2019s headers.\n return this.#headers\n }\n\n get body () {\n webidl.brandCheck(this, Response)\n\n return this.#state.body ? this.#state.body.stream : null\n }\n\n get bodyUsed () {\n webidl.brandCheck(this, Response)\n\n return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n }\n\n // Returns a clone of response.\n clone () {\n webidl.brandCheck(this, Response)\n\n // 1. If this is unusable, then throw a TypeError.\n if (bodyUnusable(this.#state)) {\n throw webidl.errors.exception({\n header: 'Response.clone',\n message: 'Body has already been consumed.'\n })\n }\n\n // 2. Let clonedResponse be the result of cloning this\u2019s response.\n const clonedResponse = cloneResponse(this.#state)\n\n // 3. Return the result of creating a Response object, given\n // clonedResponse, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n return fromInnerResponse(clonedResponse, getHeadersGuard(this.#headers))\n }\n\n [nodeUtil.inspect.custom] (depth, options) {\n if (options.depth === null) {\n options.depth = 2\n }\n\n options.colors ??= true\n\n const properties = {\n status: this.status,\n statusText: this.statusText,\n headers: this.headers,\n body: this.body,\n bodyUsed: this.bodyUsed,\n ok: this.ok,\n redirected: this.redirected,\n type: this.type,\n url: this.url\n }\n\n return `Response ${nodeUtil.formatWithOptions(options, properties)}`\n }\n\n /**\n * @param {Response} response\n */\n static getResponseHeaders (response) {\n return response.#headers\n }\n\n /**\n * @param {Response} response\n * @param {Headers} newHeaders\n */\n static setResponseHeaders (response, newHeaders) {\n response.#headers = newHeaders\n }\n\n /**\n * @param {Response} response\n */\n static getResponseState (response) {\n return response.#state\n }\n\n /**\n * @param {Response} response\n * @param {any} newState\n */\n static setResponseState (response, newState) {\n response.#state = newState\n }\n}\n\nconst { getResponseHeaders, setResponseHeaders, getResponseState, setResponseState } = Response\nReflect.deleteProperty(Response, 'getResponseHeaders')\nReflect.deleteProperty(Response, 'setResponseHeaders')\nReflect.deleteProperty(Response, 'getResponseState')\nReflect.deleteProperty(Response, 'setResponseState')\n\nmixinBody(Response, getResponseState)\n\nObject.defineProperties(Response.prototype, {\n type: kEnumerableProperty,\n url: kEnumerableProperty,\n status: kEnumerableProperty,\n ok: kEnumerableProperty,\n redirected: kEnumerableProperty,\n statusText: kEnumerableProperty,\n headers: kEnumerableProperty,\n clone: kEnumerableProperty,\n body: kEnumerableProperty,\n bodyUsed: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'Response',\n configurable: true\n }\n})\n\nObject.defineProperties(Response, {\n json: kEnumerableProperty,\n redirect: kEnumerableProperty,\n error: kEnumerableProperty\n})\n\n// https://fetch.spec.whatwg.org/#concept-response-clone\nfunction cloneResponse (response) {\n // To clone a response response, run these steps:\n\n // 1. If response is a filtered response, then return a new identical\n // filtered response whose internal response is a clone of response\u2019s\n // internal response.\n if (response.internalResponse) {\n return filterResponse(\n cloneResponse(response.internalResponse),\n response.type\n )\n }\n\n // 2. Let newResponse be a copy of response, except for its body.\n const newResponse = makeResponse({ ...response, body: null })\n\n // 3. If response\u2019s body is non-null, then set newResponse\u2019s body to the\n // result of cloning response\u2019s body.\n if (response.body != null) {\n newResponse.body = cloneBody(newResponse, response.body)\n }\n\n // 4. Return newResponse.\n return newResponse\n}\n\nfunction makeResponse (init) {\n return {\n aborted: false,\n rangeRequested: false,\n timingAllowPassed: false,\n requestIncludesCredentials: false,\n type: 'default',\n status: 200,\n timingInfo: null,\n cacheState: '',\n statusText: '',\n ...init,\n headersList: init?.headersList\n ? new HeadersList(init?.headersList)\n : new HeadersList(),\n urlList: init?.urlList ? [...init.urlList] : []\n }\n}\n\nfunction makeNetworkError (reason) {\n const isError = isErrorLike(reason)\n return makeResponse({\n type: 'error',\n status: 0,\n error: isError\n ? reason\n : new Error(reason ? String(reason) : reason),\n aborted: reason && reason.name === 'AbortError'\n })\n}\n\n// @see https://fetch.spec.whatwg.org/#concept-network-error\nfunction isNetworkError (response) {\n return (\n // A network error is a response whose type is \"error\",\n response.type === 'error' &&\n // status is 0\n response.status === 0\n )\n}\n\nfunction makeFilteredResponse (response, state) {\n state = {\n internalResponse: response,\n ...state\n }\n\n return new Proxy(response, {\n get (target, p) {\n return p in state ? state[p] : target[p]\n },\n set (target, p, value) {\n assert(!(p in state))\n target[p] = value\n return true\n }\n })\n}\n\n// https://fetch.spec.whatwg.org/#concept-filtered-response\nfunction filterResponse (response, type) {\n // Set response to the following filtered response with response as its\n // internal response, depending on request\u2019s response tainting:\n if (type === 'basic') {\n // A basic filtered response is a filtered response whose type is \"basic\"\n // and header list excludes any headers in internal response\u2019s header list\n // whose name is a forbidden response-header name.\n\n // Note: undici does not implement forbidden response-header names\n return makeFilteredResponse(response, {\n type: 'basic',\n headersList: response.headersList\n })\n } else if (type === 'cors') {\n // A CORS filtered response is a filtered response whose type is \"cors\"\n // and header list excludes any headers in internal response\u2019s header\n // list whose name is not a CORS-safelisted response-header name, given\n // internal response\u2019s CORS-exposed header-name list.\n\n // Note: undici does not implement CORS-safelisted response-header names\n return makeFilteredResponse(response, {\n type: 'cors',\n headersList: response.headersList\n })\n } else if (type === 'opaque') {\n // An opaque filtered response is a filtered response whose type is\n // \"opaque\", URL list is the empty list, status is 0, status message\n // is the empty byte sequence, header list is empty, and body is null.\n\n return makeFilteredResponse(response, {\n type: 'opaque',\n urlList: Object.freeze([]),\n status: 0,\n statusText: '',\n body: null\n })\n } else if (type === 'opaqueredirect') {\n // An opaque-redirect filtered response is a filtered response whose type\n // is \"opaqueredirect\", status is 0, status message is the empty byte\n // sequence, header list is empty, and body is null.\n\n return makeFilteredResponse(response, {\n type: 'opaqueredirect',\n status: 0,\n statusText: '',\n headersList: [],\n body: null\n })\n } else {\n assert(false)\n }\n}\n\n// https://fetch.spec.whatwg.org/#appropriate-network-error\nfunction makeAppropriateNetworkError (fetchParams, err = null) {\n // 1. Assert: fetchParams is canceled.\n assert(isCancelled(fetchParams))\n\n // 2. Return an aborted network error if fetchParams is aborted;\n // otherwise return a network error.\n return isAborted(fetchParams)\n ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))\n : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))\n}\n\n// https://whatpr.org/fetch/1392.html#initialize-a-response\nfunction initializeResponse (response, init, body) {\n // 1. If init[\"status\"] is not in the range 200 to 599, inclusive, then\n // throw a RangeError.\n if (init.status !== null && (init.status < 200 || init.status > 599)) {\n throw new RangeError('init[\"status\"] must be in the range of 200 to 599, inclusive.')\n }\n\n // 2. If init[\"statusText\"] does not match the reason-phrase token production,\n // then throw a TypeError.\n if ('statusText' in init && init.statusText != null) {\n // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:\n // reason-phrase = *( HTAB / SP / VCHAR / obs-text )\n if (!isValidReasonPhrase(String(init.statusText))) {\n throw new TypeError('Invalid statusText')\n }\n }\n\n // 3. Set response\u2019s response\u2019s status to init[\"status\"].\n if ('status' in init && init.status != null) {\n getResponseState(response).status = init.status\n }\n\n // 4. Set response\u2019s response\u2019s status message to init[\"statusText\"].\n if ('statusText' in init && init.statusText != null) {\n getResponseState(response).statusText = init.statusText\n }\n\n // 5. If init[\"headers\"] exists, then fill response\u2019s headers with init[\"headers\"].\n if ('headers' in init && init.headers != null) {\n fill(getResponseHeaders(response), init.headers)\n }\n\n // 6. If body was given, then:\n if (body) {\n // 1. If response's status is a null body status, then throw a TypeError.\n if (nullBodyStatus.includes(response.status)) {\n throw webidl.errors.exception({\n header: 'Response constructor',\n message: `Invalid response status code ${response.status}`\n })\n }\n\n // 2. Set response's body to body's body.\n getResponseState(response).body = body.body\n\n // 3. If body's type is non-null and response's header list does not contain\n // `Content-Type`, then append (`Content-Type`, body's type) to response's header list.\n if (body.type != null && !getResponseState(response).headersList.contains('content-type', true)) {\n getResponseState(response).headersList.append('content-type', body.type, true)\n }\n }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#response-create\n * @param {any} innerResponse\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Response}\n */\nfunction fromInnerResponse (innerResponse, guard) {\n const response = new Response(kConstruct)\n setResponseState(response, innerResponse)\n const headers = new Headers(kConstruct)\n setResponseHeaders(response, headers)\n setHeadersList(headers, innerResponse.headersList)\n setHeadersGuard(headers, guard)\n\n if (hasFinalizationRegistry && innerResponse.body?.stream) {\n // If the target (response) is reclaimed, the cleanup callback may be called at some point with\n // the held value provided for it (innerResponse.body.stream). The held value can be any value:\n // a primitive or an object, even undefined. If the held value is an object, the registry keeps\n // a strong reference to it (so it can pass it to the cleanup callback later). Reworded from\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n streamRegistry.register(response, new WeakRef(innerResponse.body.stream))\n }\n\n return response\n}\n\n// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit\nwebidl.converters.XMLHttpRequestBodyInit = function (V, prefix, name) {\n if (typeof V === 'string') {\n return webidl.converters.USVString(V, prefix, name)\n }\n\n if (webidl.is.Blob(V)) {\n return V\n }\n\n if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {\n return V\n }\n\n if (webidl.is.FormData(V)) {\n return V\n }\n\n if (webidl.is.URLSearchParams(V)) {\n return V\n }\n\n return webidl.converters.DOMString(V, prefix, name)\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit\nwebidl.converters.BodyInit = function (V, prefix, argument) {\n if (webidl.is.ReadableStream(V)) {\n return V\n }\n\n // Note: the spec doesn't include async iterables,\n // this is an undici extension.\n if (V?.[Symbol.asyncIterator]) {\n return V\n }\n\n return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument)\n}\n\nwebidl.converters.ResponseInit = webidl.dictionaryConverter([\n {\n key: 'status',\n converter: webidl.converters['unsigned short'],\n defaultValue: () => 200\n },\n {\n key: 'statusText',\n converter: webidl.converters.ByteString,\n defaultValue: () => ''\n },\n {\n key: 'headers',\n converter: webidl.converters.HeadersInit\n }\n])\n\nwebidl.is.Response = webidl.util.MakeTypeAssertion(Response)\n\nmodule.exports = {\n isNetworkError,\n makeNetworkError,\n makeResponse,\n makeAppropriateNetworkError,\n filterResponse,\n Response,\n cloneResponse,\n fromInnerResponse,\n getResponseState\n}\n", "'use strict'\n\nconst { kConnected, kSize } = require('../../core/symbols')\n\nclass CompatWeakRef {\n constructor (value) {\n this.value = value\n }\n\n deref () {\n return this.value[kConnected] === 0 && this.value[kSize] === 0\n ? undefined\n : this.value\n }\n}\n\nclass CompatFinalizer {\n constructor (finalizer) {\n this.finalizer = finalizer\n }\n\n register (dispatcher, key) {\n if (dispatcher.on) {\n dispatcher.on('disconnect', () => {\n if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {\n this.finalizer(key)\n }\n })\n }\n }\n\n unregister (key) {}\n}\n\nmodule.exports = function () {\n // FIXME: remove workaround when the Node bug is backported to v18\n // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308\n if (process.env.NODE_V8_COVERAGE && process.version.startsWith('v18')) {\n process._rawDebug('Using compatibility WeakRef and FinalizationRegistry')\n return {\n WeakRef: CompatWeakRef,\n FinalizationRegistry: CompatFinalizer\n }\n }\n return { WeakRef, FinalizationRegistry }\n}\n", "/* globals AbortController */\n\n'use strict'\n\nconst { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')\nconst { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')\nconst { FinalizationRegistry } = require('./dispatcher-weakref')()\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst {\n isValidHTTPToken,\n sameOrigin,\n environmentSettingsObject\n} = require('./util')\nconst {\n forbiddenMethodsSet,\n corsSafeListedMethodsSet,\n referrerPolicy,\n requestRedirect,\n requestMode,\n requestCredentials,\n requestCache,\n requestDuplex\n} = require('./constants')\nconst { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util\nconst { webidl } = require('./webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')\n\nconst kAbortController = Symbol('abortController')\n\nconst requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {\n signal.removeEventListener('abort', abort)\n})\n\nconst dependentControllerMap = new WeakMap()\n\nlet abortSignalHasEventHandlerLeakWarning\n\ntry {\n abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0\n} catch {\n abortSignalHasEventHandlerLeakWarning = false\n}\n\nfunction buildAbort (acRef) {\n return abort\n\n function abort () {\n const ac = acRef.deref()\n if (ac !== undefined) {\n // Currently, there is a problem with FinalizationRegistry.\n // https://github.com/nodejs/node/issues/49344\n // https://github.com/nodejs/node/issues/47748\n // In the case of abort, the first step is to unregister from it.\n // If the controller can refer to it, it is still registered.\n // It will be removed in the future.\n requestFinalizer.unregister(abort)\n\n // Unsubscribe a listener.\n // FinalizationRegistry will no longer be called, so this must be done.\n this.removeEventListener('abort', abort)\n\n ac.abort(this.reason)\n\n const controllerList = dependentControllerMap.get(ac.signal)\n\n if (controllerList !== undefined) {\n if (controllerList.size !== 0) {\n for (const ref of controllerList) {\n const ctrl = ref.deref()\n if (ctrl !== undefined) {\n ctrl.abort(this.reason)\n }\n }\n controllerList.clear()\n }\n dependentControllerMap.delete(ac.signal)\n }\n }\n }\n}\n\nlet patchMethodWarning = false\n\n// https://fetch.spec.whatwg.org/#request-class\nclass Request {\n /** @type {AbortSignal} */\n #signal\n\n /** @type {import('../../dispatcher/dispatcher')} */\n #dispatcher\n\n /** @type {Headers} */\n #headers\n\n #state\n\n // https://fetch.spec.whatwg.org/#dom-request\n constructor (input, init = undefined) {\n webidl.util.markAsUncloneable(this)\n\n if (input === kConstruct) {\n return\n }\n\n const prefix = 'Request constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n input = webidl.converters.RequestInfo(input, prefix, 'input')\n init = webidl.converters.RequestInit(init, prefix, 'init')\n\n // 1. Let request be null.\n let request = null\n\n // 2. Let fallbackMode be null.\n let fallbackMode = null\n\n // 3. Let baseURL be this\u2019s relevant settings object\u2019s API base URL.\n const baseUrl = environmentSettingsObject.settingsObject.baseUrl\n\n // 4. Let signal be null.\n let signal = null\n\n // 5. If input is a string, then:\n if (typeof input === 'string') {\n this.#dispatcher = init.dispatcher\n\n // 1. Let parsedURL be the result of parsing input with baseURL.\n // 2. If parsedURL is failure, then throw a TypeError.\n let parsedURL\n try {\n parsedURL = new URL(input, baseUrl)\n } catch (err) {\n throw new TypeError('Failed to parse URL from ' + input, { cause: err })\n }\n\n // 3. If parsedURL includes credentials, then throw a TypeError.\n if (parsedURL.username || parsedURL.password) {\n throw new TypeError(\n 'Request cannot be constructed from a URL that includes credentials: ' +\n input\n )\n }\n\n // 4. Set request to a new request whose URL is parsedURL.\n request = makeRequest({ urlList: [parsedURL] })\n\n // 5. Set fallbackMode to \"cors\".\n fallbackMode = 'cors'\n } else {\n // 6. Otherwise:\n\n // 7. Assert: input is a Request object.\n assert(webidl.is.Request(input))\n\n // 8. Set request to input\u2019s request.\n request = input.#state\n\n // 9. Set signal to input\u2019s signal.\n signal = input.#signal\n\n this.#dispatcher = init.dispatcher || input.#dispatcher\n }\n\n // 7. Let origin be this\u2019s relevant settings object\u2019s origin.\n const origin = environmentSettingsObject.settingsObject.origin\n\n // 8. Let window be \"client\".\n let window = 'client'\n\n // 9. If request\u2019s window is an environment settings object and its origin\n // is same origin with origin, then set window to request\u2019s window.\n if (\n request.window?.constructor?.name === 'EnvironmentSettingsObject' &&\n sameOrigin(request.window, origin)\n ) {\n window = request.window\n }\n\n // 10. If init[\"window\"] exists and is non-null, then throw a TypeError.\n if (init.window != null) {\n throw new TypeError(`'window' option '${window}' must be null`)\n }\n\n // 11. If init[\"window\"] exists, then set window to \"no-window\".\n if ('window' in init) {\n window = 'no-window'\n }\n\n // 12. Set request to a new request with the following properties:\n request = makeRequest({\n // URL request\u2019s URL.\n // undici implementation note: this is set as the first item in request's urlList in makeRequest\n // method request\u2019s method.\n method: request.method,\n // header list A copy of request\u2019s header list.\n // undici implementation note: headersList is cloned in makeRequest\n headersList: request.headersList,\n // unsafe-request flag Set.\n unsafeRequest: request.unsafeRequest,\n // client This\u2019s relevant settings object.\n client: environmentSettingsObject.settingsObject,\n // window window.\n window,\n // priority request\u2019s priority.\n priority: request.priority,\n // origin request\u2019s origin. The propagation of the origin is only significant for navigation requests\n // being handled by a service worker. In this scenario a request can have an origin that is different\n // from the current client.\n origin: request.origin,\n // referrer request\u2019s referrer.\n referrer: request.referrer,\n // referrer policy request\u2019s referrer policy.\n referrerPolicy: request.referrerPolicy,\n // mode request\u2019s mode.\n mode: request.mode,\n // credentials mode request\u2019s credentials mode.\n credentials: request.credentials,\n // cache mode request\u2019s cache mode.\n cache: request.cache,\n // redirect mode request\u2019s redirect mode.\n redirect: request.redirect,\n // integrity metadata request\u2019s integrity metadata.\n integrity: request.integrity,\n // keepalive request\u2019s keepalive.\n keepalive: request.keepalive,\n // reload-navigation flag request\u2019s reload-navigation flag.\n reloadNavigation: request.reloadNavigation,\n // history-navigation flag request\u2019s history-navigation flag.\n historyNavigation: request.historyNavigation,\n // URL list A clone of request\u2019s URL list.\n urlList: [...request.urlList]\n })\n\n const initHasKey = Object.keys(init).length !== 0\n\n // 13. If init is not empty, then:\n if (initHasKey) {\n // 1. If request\u2019s mode is \"navigate\", then set it to \"same-origin\".\n if (request.mode === 'navigate') {\n request.mode = 'same-origin'\n }\n\n // 2. Unset request\u2019s reload-navigation flag.\n request.reloadNavigation = false\n\n // 3. Unset request\u2019s history-navigation flag.\n request.historyNavigation = false\n\n // 4. Set request\u2019s origin to \"client\".\n request.origin = 'client'\n\n // 5. Set request\u2019s referrer to \"client\"\n request.referrer = 'client'\n\n // 6. Set request\u2019s referrer policy to the empty string.\n request.referrerPolicy = ''\n\n // 7. Set request\u2019s URL to request\u2019s current URL.\n request.url = request.urlList[request.urlList.length - 1]\n\n // 8. Set request\u2019s URL list to \u00AB request\u2019s URL \u00BB.\n request.urlList = [request.url]\n }\n\n // 14. If init[\"referrer\"] exists, then:\n if (init.referrer !== undefined) {\n // 1. Let referrer be init[\"referrer\"].\n const referrer = init.referrer\n\n // 2. If referrer is the empty string, then set request\u2019s referrer to \"no-referrer\".\n if (referrer === '') {\n request.referrer = 'no-referrer'\n } else {\n // 1. Let parsedReferrer be the result of parsing referrer with\n // baseURL.\n // 2. If parsedReferrer is failure, then throw a TypeError.\n let parsedReferrer\n try {\n parsedReferrer = new URL(referrer, baseUrl)\n } catch (err) {\n throw new TypeError(`Referrer \"${referrer}\" is not a valid URL.`, { cause: err })\n }\n\n // 3. If one of the following is true\n // - parsedReferrer\u2019s scheme is \"about\" and path is the string \"client\"\n // - parsedReferrer\u2019s origin is not same origin with origin\n // then set request\u2019s referrer to \"client\".\n if (\n (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||\n (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))\n ) {\n request.referrer = 'client'\n } else {\n // 4. Otherwise, set request\u2019s referrer to parsedReferrer.\n request.referrer = parsedReferrer\n }\n }\n }\n\n // 15. If init[\"referrerPolicy\"] exists, then set request\u2019s referrer policy\n // to it.\n if (init.referrerPolicy !== undefined) {\n request.referrerPolicy = init.referrerPolicy\n }\n\n // 16. Let mode be init[\"mode\"] if it exists, and fallbackMode otherwise.\n let mode\n if (init.mode !== undefined) {\n mode = init.mode\n } else {\n mode = fallbackMode\n }\n\n // 17. If mode is \"navigate\", then throw a TypeError.\n if (mode === 'navigate') {\n throw webidl.errors.exception({\n header: 'Request constructor',\n message: 'invalid request mode navigate.'\n })\n }\n\n // 18. If mode is non-null, set request\u2019s mode to mode.\n if (mode != null) {\n request.mode = mode\n }\n\n // 19. If init[\"credentials\"] exists, then set request\u2019s credentials mode\n // to it.\n if (init.credentials !== undefined) {\n request.credentials = init.credentials\n }\n\n // 18. If init[\"cache\"] exists, then set request\u2019s cache mode to it.\n if (init.cache !== undefined) {\n request.cache = init.cache\n }\n\n // 21. If request\u2019s cache mode is \"only-if-cached\" and request\u2019s mode is\n // not \"same-origin\", then throw a TypeError.\n if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {\n throw new TypeError(\n \"'only-if-cached' can be set only with 'same-origin' mode\"\n )\n }\n\n // 22. If init[\"redirect\"] exists, then set request\u2019s redirect mode to it.\n if (init.redirect !== undefined) {\n request.redirect = init.redirect\n }\n\n // 23. If init[\"integrity\"] exists, then set request\u2019s integrity metadata to it.\n if (init.integrity != null) {\n request.integrity = String(init.integrity)\n }\n\n // 24. If init[\"keepalive\"] exists, then set request\u2019s keepalive to it.\n if (init.keepalive !== undefined) {\n request.keepalive = Boolean(init.keepalive)\n }\n\n // 25. If init[\"method\"] exists, then:\n if (init.method !== undefined) {\n // 1. Let method be init[\"method\"].\n let method = init.method\n\n const mayBeNormalized = normalizedMethodRecords[method]\n\n if (mayBeNormalized !== undefined) {\n // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones\n request.method = mayBeNormalized\n } else {\n // 2. If method is not a method or method is a forbidden method, then\n // throw a TypeError.\n if (!isValidHTTPToken(method)) {\n throw new TypeError(`'${method}' is not a valid HTTP method.`)\n }\n\n const upperCase = method.toUpperCase()\n\n if (forbiddenMethodsSet.has(upperCase)) {\n throw new TypeError(`'${method}' HTTP method is unsupported.`)\n }\n\n // 3. Normalize method.\n // https://fetch.spec.whatwg.org/#concept-method-normalize\n // Note: must be in uppercase\n method = normalizedMethodRecordsBase[upperCase] ?? method\n\n // 4. Set request\u2019s method to method.\n request.method = method\n }\n\n if (!patchMethodWarning && request.method === 'patch') {\n process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {\n code: 'UNDICI-FETCH-patch'\n })\n\n patchMethodWarning = true\n }\n }\n\n // 26. If init[\"signal\"] exists, then set signal to it.\n if (init.signal !== undefined) {\n signal = init.signal\n }\n\n // 27. Set this\u2019s request to request.\n this.#state = request\n\n // 28. Set this\u2019s signal to a new AbortSignal object with this\u2019s relevant\n // Realm.\n // TODO: could this be simplified with AbortSignal.any\n // (https://dom.spec.whatwg.org/#dom-abortsignal-any)\n const ac = new AbortController()\n this.#signal = ac.signal\n\n // 29. If signal is not null, then make this\u2019s signal follow signal.\n if (signal != null) {\n if (signal.aborted) {\n ac.abort(signal.reason)\n } else {\n // Keep a strong ref to ac while request object\n // is alive. This is needed to prevent AbortController\n // from being prematurely garbage collected.\n // See, https://github.com/nodejs/undici/issues/1926.\n this[kAbortController] = ac\n\n const acRef = new WeakRef(ac)\n const abort = buildAbort(acRef)\n\n // If the max amount of listeners is equal to the default, increase it\n if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {\n setMaxListeners(1500, signal)\n }\n\n util.addAbortListener(signal, abort)\n // The third argument must be a registry key to be unregistered.\n // Without it, you cannot unregister.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n // abort is used as the unregister key. (because it is unique)\n requestFinalizer.register(ac, { signal, abort }, abort)\n }\n }\n\n // 30. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n // Realm, whose header list is request\u2019s header list and guard is\n // \"request\".\n this.#headers = new Headers(kConstruct)\n setHeadersList(this.#headers, request.headersList)\n setHeadersGuard(this.#headers, 'request')\n\n // 31. If this\u2019s request\u2019s mode is \"no-cors\", then:\n if (mode === 'no-cors') {\n // 1. If this\u2019s request\u2019s method is not a CORS-safelisted method,\n // then throw a TypeError.\n if (!corsSafeListedMethodsSet.has(request.method)) {\n throw new TypeError(\n `'${request.method} is unsupported in no-cors mode.`\n )\n }\n\n // 2. Set this\u2019s headers\u2019s guard to \"request-no-cors\".\n setHeadersGuard(this.#headers, 'request-no-cors')\n }\n\n // 32. If init is not empty, then:\n if (initHasKey) {\n /** @type {HeadersList} */\n const headersList = getHeadersList(this.#headers)\n // 1. Let headers be a copy of this\u2019s headers and its associated header\n // list.\n // 2. If init[\"headers\"] exists, then set headers to init[\"headers\"].\n const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)\n\n // 3. Empty this\u2019s headers\u2019s header list.\n headersList.clear()\n\n // 4. If headers is a Headers object, then for each header in its header\n // list, append header\u2019s name/header\u2019s value to this\u2019s headers.\n if (headers instanceof HeadersList) {\n for (const { name, value } of headers.rawValues()) {\n headersList.append(name, value, false)\n }\n // Note: Copy the `set-cookie` meta-data.\n headersList.cookies = headers.cookies\n } else {\n // 5. Otherwise, fill this\u2019s headers with headers.\n fillHeaders(this.#headers, headers)\n }\n }\n\n // 33. Let inputBody be input\u2019s request\u2019s body if input is a Request\n // object; otherwise null.\n const inputBody = webidl.is.Request(input) ? input.#state.body : null\n\n // 34. If either init[\"body\"] exists and is non-null or inputBody is\n // non-null, and request\u2019s method is `GET` or `HEAD`, then throw a\n // TypeError.\n if (\n (init.body != null || inputBody != null) &&\n (request.method === 'GET' || request.method === 'HEAD')\n ) {\n throw new TypeError('Request with GET/HEAD method cannot have body.')\n }\n\n // 35. Let initBody be null.\n let initBody = null\n\n // 36. If init[\"body\"] exists and is non-null, then:\n if (init.body != null) {\n // 1. Let Content-Type be null.\n // 2. Set initBody and Content-Type to the result of extracting\n // init[\"body\"], with keepalive set to request\u2019s keepalive.\n const [extractedBody, contentType] = extractBody(\n init.body,\n request.keepalive\n )\n initBody = extractedBody\n\n // 3, If Content-Type is non-null and this\u2019s headers\u2019s header list does\n // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n // this\u2019s headers.\n if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {\n this.#headers.append('content-type', contentType, true)\n }\n }\n\n // 37. Let inputOrInitBody be initBody if it is non-null; otherwise\n // inputBody.\n const inputOrInitBody = initBody ?? inputBody\n\n // 38. If inputOrInitBody is non-null and inputOrInitBody\u2019s source is\n // null, then:\n if (inputOrInitBody != null && inputOrInitBody.source == null) {\n // 1. If initBody is non-null and init[\"duplex\"] does not exist,\n // then throw a TypeError.\n if (initBody != null && init.duplex == null) {\n throw new TypeError('RequestInit: duplex option is required when sending a body.')\n }\n\n // 2. If this\u2019s request\u2019s mode is neither \"same-origin\" nor \"cors\",\n // then throw a TypeError.\n if (request.mode !== 'same-origin' && request.mode !== 'cors') {\n throw new TypeError(\n 'If request is made from ReadableStream, mode should be \"same-origin\" or \"cors\"'\n )\n }\n\n // 3. Set this\u2019s request\u2019s use-CORS-preflight flag.\n request.useCORSPreflightFlag = true\n }\n\n // 39. Let finalBody be inputOrInitBody.\n let finalBody = inputOrInitBody\n\n // 40. If initBody is null and inputBody is non-null, then:\n if (initBody == null && inputBody != null) {\n // 1. If input is unusable, then throw a TypeError.\n if (bodyUnusable(input.#state)) {\n throw new TypeError(\n 'Cannot construct a Request with a Request object that has already been used.'\n )\n }\n\n // 2. Set finalBody to the result of creating a proxy for inputBody.\n // https://streams.spec.whatwg.org/#readablestream-create-a-proxy\n const identityTransform = new TransformStream()\n inputBody.stream.pipeThrough(identityTransform)\n finalBody = {\n source: inputBody.source,\n length: inputBody.length,\n stream: identityTransform.readable\n }\n }\n\n // 41. Set this\u2019s request\u2019s body to finalBody.\n this.#state.body = finalBody\n }\n\n // Returns request\u2019s HTTP method, which is \"GET\" by default.\n get method () {\n webidl.brandCheck(this, Request)\n\n // The method getter steps are to return this\u2019s request\u2019s method.\n return this.#state.method\n }\n\n // Returns the URL of request as a string.\n get url () {\n webidl.brandCheck(this, Request)\n\n // The url getter steps are to return this\u2019s request\u2019s URL, serialized.\n return URLSerializer(this.#state.url)\n }\n\n // Returns a Headers object consisting of the headers associated with request.\n // Note that headers added in the network layer by the user agent will not\n // be accounted for in this object, e.g., the \"Host\" header.\n get headers () {\n webidl.brandCheck(this, Request)\n\n // The headers getter steps are to return this\u2019s headers.\n return this.#headers\n }\n\n // Returns the kind of resource requested by request, e.g., \"document\"\n // or \"script\".\n get destination () {\n webidl.brandCheck(this, Request)\n\n // The destination getter are to return this\u2019s request\u2019s destination.\n return this.#state.destination\n }\n\n // Returns the referrer of request. Its value can be a same-origin URL if\n // explicitly set in init, the empty string to indicate no referrer, and\n // \"about:client\" when defaulting to the global\u2019s default. This is used\n // during fetching to determine the value of the `Referer` header of the\n // request being made.\n get referrer () {\n webidl.brandCheck(this, Request)\n\n // 1. If this\u2019s request\u2019s referrer is \"no-referrer\", then return the\n // empty string.\n if (this.#state.referrer === 'no-referrer') {\n return ''\n }\n\n // 2. If this\u2019s request\u2019s referrer is \"client\", then return\n // \"about:client\".\n if (this.#state.referrer === 'client') {\n return 'about:client'\n }\n\n // Return this\u2019s request\u2019s referrer, serialized.\n return this.#state.referrer.toString()\n }\n\n // Returns the referrer policy associated with request.\n // This is used during fetching to compute the value of the request\u2019s\n // referrer.\n get referrerPolicy () {\n webidl.brandCheck(this, Request)\n\n // The referrerPolicy getter steps are to return this\u2019s request\u2019s referrer policy.\n return this.#state.referrerPolicy\n }\n\n // Returns the mode associated with request, which is a string indicating\n // whether the request will use CORS, or will be restricted to same-origin\n // URLs.\n get mode () {\n webidl.brandCheck(this, Request)\n\n // The mode getter steps are to return this\u2019s request\u2019s mode.\n return this.#state.mode\n }\n\n // Returns the credentials mode associated with request,\n // which is a string indicating whether credentials will be sent with the\n // request always, never, or only when sent to a same-origin URL.\n get credentials () {\n webidl.brandCheck(this, Request)\n\n // The credentials getter steps are to return this\u2019s request\u2019s credentials mode.\n return this.#state.credentials\n }\n\n // Returns the cache mode associated with request,\n // which is a string indicating how the request will\n // interact with the browser\u2019s cache when fetching.\n get cache () {\n webidl.brandCheck(this, Request)\n\n // The cache getter steps are to return this\u2019s request\u2019s cache mode.\n return this.#state.cache\n }\n\n // Returns the redirect mode associated with request,\n // which is a string indicating how redirects for the\n // request will be handled during fetching. A request\n // will follow redirects by default.\n get redirect () {\n webidl.brandCheck(this, Request)\n\n // The redirect getter steps are to return this\u2019s request\u2019s redirect mode.\n return this.#state.redirect\n }\n\n // Returns request\u2019s subresource integrity metadata, which is a\n // cryptographic hash of the resource being fetched. Its value\n // consists of multiple hashes separated by whitespace. [SRI]\n get integrity () {\n webidl.brandCheck(this, Request)\n\n // The integrity getter steps are to return this\u2019s request\u2019s integrity\n // metadata.\n return this.#state.integrity\n }\n\n // Returns a boolean indicating whether or not request can outlive the\n // global in which it was created.\n get keepalive () {\n webidl.brandCheck(this, Request)\n\n // The keepalive getter steps are to return this\u2019s request\u2019s keepalive.\n return this.#state.keepalive\n }\n\n // Returns a boolean indicating whether or not request is for a reload\n // navigation.\n get isReloadNavigation () {\n webidl.brandCheck(this, Request)\n\n // The isReloadNavigation getter steps are to return true if this\u2019s\n // request\u2019s reload-navigation flag is set; otherwise false.\n return this.#state.reloadNavigation\n }\n\n // Returns a boolean indicating whether or not request is for a history\n // navigation (a.k.a. back-forward navigation).\n get isHistoryNavigation () {\n webidl.brandCheck(this, Request)\n\n // The isHistoryNavigation getter steps are to return true if this\u2019s request\u2019s\n // history-navigation flag is set; otherwise false.\n return this.#state.historyNavigation\n }\n\n // Returns the signal associated with request, which is an AbortSignal\n // object indicating whether or not request has been aborted, and its\n // abort event handler.\n get signal () {\n webidl.brandCheck(this, Request)\n\n // The signal getter steps are to return this\u2019s signal.\n return this.#signal\n }\n\n get body () {\n webidl.brandCheck(this, Request)\n\n return this.#state.body ? this.#state.body.stream : null\n }\n\n get bodyUsed () {\n webidl.brandCheck(this, Request)\n\n return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n }\n\n get duplex () {\n webidl.brandCheck(this, Request)\n\n return 'half'\n }\n\n // Returns a clone of request.\n clone () {\n webidl.brandCheck(this, Request)\n\n // 1. If this is unusable, then throw a TypeError.\n if (bodyUnusable(this.#state)) {\n throw new TypeError('unusable')\n }\n\n // 2. Let clonedRequest be the result of cloning this\u2019s request.\n const clonedRequest = cloneRequest(this.#state)\n\n // 3. Let clonedRequestObject be the result of creating a Request object,\n // given clonedRequest, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n // 4. Make clonedRequestObject\u2019s signal follow this\u2019s signal.\n const ac = new AbortController()\n if (this.signal.aborted) {\n ac.abort(this.signal.reason)\n } else {\n let list = dependentControllerMap.get(this.signal)\n if (list === undefined) {\n list = new Set()\n dependentControllerMap.set(this.signal, list)\n }\n const acRef = new WeakRef(ac)\n list.add(acRef)\n util.addAbortListener(\n ac.signal,\n buildAbort(acRef)\n )\n }\n\n // 4. Return clonedRequestObject.\n return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))\n }\n\n [nodeUtil.inspect.custom] (depth, options) {\n if (options.depth === null) {\n options.depth = 2\n }\n\n options.colors ??= true\n\n const properties = {\n method: this.method,\n url: this.url,\n headers: this.headers,\n destination: this.destination,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n mode: this.mode,\n credentials: this.credentials,\n cache: this.cache,\n redirect: this.redirect,\n integrity: this.integrity,\n keepalive: this.keepalive,\n isReloadNavigation: this.isReloadNavigation,\n isHistoryNavigation: this.isHistoryNavigation,\n signal: this.signal\n }\n\n return `Request ${nodeUtil.formatWithOptions(options, properties)}`\n }\n\n /**\n * @param {Request} request\n * @param {AbortSignal} newSignal\n */\n static setRequestSignal (request, newSignal) {\n request.#signal = newSignal\n return request\n }\n\n /**\n * @param {Request} request\n */\n static getRequestDispatcher (request) {\n return request.#dispatcher\n }\n\n /**\n * @param {Request} request\n * @param {import('../../dispatcher/dispatcher')} newDispatcher\n */\n static setRequestDispatcher (request, newDispatcher) {\n request.#dispatcher = newDispatcher\n }\n\n /**\n * @param {Request} request\n * @param {Headers} newHeaders\n */\n static setRequestHeaders (request, newHeaders) {\n request.#headers = newHeaders\n }\n\n /**\n * @param {Request} request\n */\n static getRequestState (request) {\n return request.#state\n }\n\n /**\n * @param {Request} request\n * @param {any} newState\n */\n static setRequestState (request, newState) {\n request.#state = newState\n }\n}\n\nconst { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request\nReflect.deleteProperty(Request, 'setRequestSignal')\nReflect.deleteProperty(Request, 'getRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestHeaders')\nReflect.deleteProperty(Request, 'getRequestState')\nReflect.deleteProperty(Request, 'setRequestState')\n\nmixinBody(Request, getRequestState)\n\n// https://fetch.spec.whatwg.org/#requests\nfunction makeRequest (init) {\n return {\n method: init.method ?? 'GET',\n localURLsOnly: init.localURLsOnly ?? false,\n unsafeRequest: init.unsafeRequest ?? false,\n body: init.body ?? null,\n client: init.client ?? null,\n reservedClient: init.reservedClient ?? null,\n replacesClientId: init.replacesClientId ?? '',\n window: init.window ?? 'client',\n keepalive: init.keepalive ?? false,\n serviceWorkers: init.serviceWorkers ?? 'all',\n initiator: init.initiator ?? '',\n destination: init.destination ?? '',\n priority: init.priority ?? null,\n origin: init.origin ?? 'client',\n policyContainer: init.policyContainer ?? 'client',\n referrer: init.referrer ?? 'client',\n referrerPolicy: init.referrerPolicy ?? '',\n mode: init.mode ?? 'no-cors',\n useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,\n credentials: init.credentials ?? 'same-origin',\n useCredentials: init.useCredentials ?? false,\n cache: init.cache ?? 'default',\n redirect: init.redirect ?? 'follow',\n integrity: init.integrity ?? '',\n cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',\n parserMetadata: init.parserMetadata ?? '',\n reloadNavigation: init.reloadNavigation ?? false,\n historyNavigation: init.historyNavigation ?? false,\n userActivation: init.userActivation ?? false,\n taintedOrigin: init.taintedOrigin ?? false,\n redirectCount: init.redirectCount ?? 0,\n responseTainting: init.responseTainting ?? 'basic',\n preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,\n done: init.done ?? false,\n timingAllowFailed: init.timingAllowFailed ?? false,\n urlList: init.urlList,\n url: init.urlList[0],\n headersList: init.headersList\n ? new HeadersList(init.headersList)\n : new HeadersList()\n }\n}\n\n// https://fetch.spec.whatwg.org/#concept-request-clone\nfunction cloneRequest (request) {\n // To clone a request request, run these steps:\n\n // 1. Let newRequest be a copy of request, except for its body.\n const newRequest = makeRequest({ ...request, body: null })\n\n // 2. If request\u2019s body is non-null, set newRequest\u2019s body to the\n // result of cloning request\u2019s body.\n if (request.body != null) {\n newRequest.body = cloneBody(newRequest, request.body)\n }\n\n // 3. Return newRequest.\n return newRequest\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-create\n * @param {any} innerRequest\n * @param {import('../../dispatcher/agent')} dispatcher\n * @param {AbortSignal} signal\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Request}\n */\nfunction fromInnerRequest (innerRequest, dispatcher, signal, guard) {\n const request = new Request(kConstruct)\n setRequestState(request, innerRequest)\n setRequestDispatcher(request, dispatcher)\n setRequestSignal(request, signal)\n const headers = new Headers(kConstruct)\n setRequestHeaders(request, headers)\n setHeadersList(headers, innerRequest.headersList)\n setHeadersGuard(headers, guard)\n return request\n}\n\nObject.defineProperties(Request.prototype, {\n method: kEnumerableProperty,\n url: kEnumerableProperty,\n headers: kEnumerableProperty,\n redirect: kEnumerableProperty,\n clone: kEnumerableProperty,\n signal: kEnumerableProperty,\n duplex: kEnumerableProperty,\n destination: kEnumerableProperty,\n body: kEnumerableProperty,\n bodyUsed: kEnumerableProperty,\n isHistoryNavigation: kEnumerableProperty,\n isReloadNavigation: kEnumerableProperty,\n keepalive: kEnumerableProperty,\n integrity: kEnumerableProperty,\n cache: kEnumerableProperty,\n credentials: kEnumerableProperty,\n attribute: kEnumerableProperty,\n referrerPolicy: kEnumerableProperty,\n referrer: kEnumerableProperty,\n mode: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'Request',\n configurable: true\n }\n})\n\nwebidl.is.Request = webidl.util.MakeTypeAssertion(Request)\n\n// https://fetch.spec.whatwg.org/#requestinfo\nwebidl.converters.RequestInfo = function (V, prefix, argument) {\n if (typeof V === 'string') {\n return webidl.converters.USVString(V)\n }\n\n if (webidl.is.Request(V)) {\n return V\n }\n\n return webidl.converters.USVString(V)\n}\n\n// https://fetch.spec.whatwg.org/#requestinit\nwebidl.converters.RequestInit = webidl.dictionaryConverter([\n {\n key: 'method',\n converter: webidl.converters.ByteString\n },\n {\n key: 'headers',\n converter: webidl.converters.HeadersInit\n },\n {\n key: 'body',\n converter: webidl.nullableConverter(\n webidl.converters.BodyInit\n )\n },\n {\n key: 'referrer',\n converter: webidl.converters.USVString\n },\n {\n key: 'referrerPolicy',\n converter: webidl.converters.DOMString,\n // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy\n allowedValues: referrerPolicy\n },\n {\n key: 'mode',\n converter: webidl.converters.DOMString,\n // https://fetch.spec.whatwg.org/#concept-request-mode\n allowedValues: requestMode\n },\n {\n key: 'credentials',\n converter: webidl.converters.DOMString,\n // https://fetch.spec.whatwg.org/#requestcredentials\n allowedValues: requestCredentials\n },\n {\n key: 'cache',\n converter: webidl.converters.DOMString,\n // https://fetch.spec.whatwg.org/#requestcache\n allowedValues: requestCache\n },\n {\n key: 'redirect',\n converter: webidl.converters.DOMString,\n // https://fetch.spec.whatwg.org/#requestredirect\n allowedValues: requestRedirect\n },\n {\n key: 'integrity',\n converter: webidl.converters.DOMString\n },\n {\n key: 'keepalive',\n converter: webidl.converters.boolean\n },\n {\n key: 'signal',\n converter: webidl.nullableConverter(\n (signal) => webidl.converters.AbortSignal(\n signal,\n 'RequestInit',\n 'signal'\n )\n )\n },\n {\n key: 'window',\n converter: webidl.converters.any\n },\n {\n key: 'duplex',\n converter: webidl.converters.DOMString,\n allowedValues: requestDuplex\n },\n {\n key: 'dispatcher', // undici specific option\n converter: webidl.converters.any\n }\n])\n\nmodule.exports = {\n Request,\n makeRequest,\n fromInnerRequest,\n cloneRequest,\n getRequestDispatcher,\n getRequestState\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst {\n makeNetworkError,\n makeAppropriateNetworkError,\n filterResponse,\n makeResponse,\n fromInnerResponse,\n getResponseState\n} = require('./response')\nconst { HeadersList } = require('./headers')\nconst { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')\nconst zlib = require('node:zlib')\nconst {\n bytesMatch,\n makePolicyContainer,\n clonePolicyContainer,\n requestBadPort,\n TAOCheck,\n appendRequestOriginHeader,\n responseLocationURL,\n requestCurrentURL,\n setRequestReferrerPolicyOnRedirect,\n tryUpgradeRequestToAPotentiallyTrustworthyURL,\n createOpaqueTimingInfo,\n appendFetchMetadata,\n corsCheck,\n crossOriginResourcePolicyCheck,\n determineRequestsReferrer,\n coarsenedSharedCurrentTime,\n createDeferredPromise,\n sameOrigin,\n isCancelled,\n isAborted,\n isErrorLike,\n fullyReadBody,\n readableStreamClose,\n isomorphicEncode,\n urlIsLocal,\n urlIsHttpHttpsScheme,\n urlHasHttpsScheme,\n clampAndCoarsenConnectionTimingInfo,\n simpleRangeHeaderValue,\n buildContentRange,\n createInflate,\n extractMimeType\n} = require('./util')\nconst assert = require('node:assert')\nconst { safelyExtractBody, extractBody } = require('./body')\nconst {\n redirectStatusSet,\n nullBodyStatus,\n safeMethodsSet,\n requestBodyHeader,\n subresourceSet\n} = require('./constants')\nconst EE = require('node:events')\nconst { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')\nconst { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')\nconst { getGlobalDispatcher } = require('../../global')\nconst { webidl } = require('./webidl')\nconst { STATUS_CODES } = require('node:http')\nconst GET_OR_HEAD = ['GET', 'HEAD']\n\nconst defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esbuildDetection !== 'undefined'\n ? 'node'\n : 'undici'\n\n/** @type {import('buffer').resolveObjectURL} */\nlet resolveObjectURL\n\nclass Fetch extends EE {\n constructor (dispatcher) {\n super()\n\n this.dispatcher = dispatcher\n this.connection = null\n this.dump = false\n this.state = 'ongoing'\n }\n\n terminate (reason) {\n if (this.state !== 'ongoing') {\n return\n }\n\n this.state = 'terminated'\n this.connection?.destroy(reason)\n this.emit('terminated', reason)\n }\n\n // https://fetch.spec.whatwg.org/#fetch-controller-abort\n abort (error) {\n if (this.state !== 'ongoing') {\n return\n }\n\n // 1. Set controller\u2019s state to \"aborted\".\n this.state = 'aborted'\n\n // 2. Let fallbackError be an \"AbortError\" DOMException.\n // 3. Set error to fallbackError if it is not given.\n if (!error) {\n error = new DOMException('The operation was aborted.', 'AbortError')\n }\n\n // 4. Let serializedError be StructuredSerialize(error).\n // If that threw an exception, catch it, and let\n // serializedError be StructuredSerialize(fallbackError).\n\n // 5. Set controller\u2019s serialized abort reason to serializedError.\n this.serializedAbortReason = error\n\n this.connection?.destroy(error)\n this.emit('terminated', error)\n }\n}\n\nfunction handleFetchDone (response) {\n finalizeAndReportTiming(response, 'fetch')\n}\n\n// https://fetch.spec.whatwg.org/#fetch-method\nfunction fetch (input, init = undefined) {\n webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')\n\n // 1. Let p be a new promise.\n let p = createDeferredPromise()\n\n // 2. Let requestObject be the result of invoking the initial value of\n // Request as constructor with input and init as arguments. If this throws\n // an exception, reject p with it and return p.\n let requestObject\n\n try {\n requestObject = new Request(input, init)\n } catch (e) {\n p.reject(e)\n return p.promise\n }\n\n // 3. Let request be requestObject\u2019s request.\n const request = getRequestState(requestObject)\n\n // 4. If requestObject\u2019s signal\u2019s aborted flag is set, then:\n if (requestObject.signal.aborted) {\n // 1. Abort the fetch() call with p, request, null, and\n // requestObject\u2019s signal\u2019s abort reason.\n abortFetch(p, request, null, requestObject.signal.reason)\n\n // 2. Return p.\n return p.promise\n }\n\n // 5. Let globalObject be request\u2019s client\u2019s global object.\n const globalObject = request.client.globalObject\n\n // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n // request\u2019s service-workers mode to \"none\".\n if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {\n request.serviceWorkers = 'none'\n }\n\n // 7. Let responseObject be null.\n let responseObject = null\n\n // 8. Let relevantRealm be this\u2019s relevant Realm.\n\n // 9. Let locallyAborted be false.\n let locallyAborted = false\n\n // 10. Let controller be null.\n let controller = null\n\n // 11. Add the following abort steps to requestObject\u2019s signal:\n addAbortListener(\n requestObject.signal,\n () => {\n // 1. Set locallyAborted to true.\n locallyAborted = true\n\n // 2. Assert: controller is non-null.\n assert(controller != null)\n\n // 3. Abort controller with requestObject\u2019s signal\u2019s abort reason.\n controller.abort(requestObject.signal.reason)\n\n const realResponse = responseObject?.deref()\n\n // 4. Abort the fetch() call with p, request, responseObject,\n // and requestObject\u2019s signal\u2019s abort reason.\n abortFetch(p, request, realResponse, requestObject.signal.reason)\n }\n )\n\n // 12. Let handleFetchDone given response response be to finalize and\n // report timing with response, globalObject, and \"fetch\".\n // see function handleFetchDone\n\n // 13. Set controller to the result of calling fetch given request,\n // with processResponseEndOfBody set to handleFetchDone, and processResponse\n // given response being these substeps:\n\n const processResponse = (response) => {\n // 1. If locallyAborted is true, terminate these substeps.\n if (locallyAborted) {\n return\n }\n\n // 2. If response\u2019s aborted flag is set, then:\n if (response.aborted) {\n // 1. Let deserializedError be the result of deserialize a serialized\n // abort reason given controller\u2019s serialized abort reason and\n // relevantRealm.\n\n // 2. Abort the fetch() call with p, request, responseObject, and\n // deserializedError.\n\n abortFetch(p, request, responseObject, controller.serializedAbortReason)\n return\n }\n\n // 3. If response is a network error, then reject p with a TypeError\n // and terminate these substeps.\n if (response.type === 'error') {\n p.reject(new TypeError('fetch failed', { cause: response.error }))\n return\n }\n\n // 4. Set responseObject to the result of creating a Response object,\n // given response, \"immutable\", and relevantRealm.\n responseObject = new WeakRef(fromInnerResponse(response, 'immutable'))\n\n // 5. Resolve p with responseObject.\n p.resolve(responseObject.deref())\n p = null\n }\n\n controller = fetching({\n request,\n processResponseEndOfBody: handleFetchDone,\n processResponse,\n dispatcher: getRequestDispatcher(requestObject) // undici\n })\n\n // 14. Return p.\n return p.promise\n}\n\n// https://fetch.spec.whatwg.org/#finalize-and-report-timing\nfunction finalizeAndReportTiming (response, initiatorType = 'other') {\n // 1. If response is an aborted network error, then return.\n if (response.type === 'error' && response.aborted) {\n return\n }\n\n // 2. If response\u2019s URL list is null or empty, then return.\n if (!response.urlList?.length) {\n return\n }\n\n // 3. Let originalURL be response\u2019s URL list[0].\n const originalURL = response.urlList[0]\n\n // 4. Let timingInfo be response\u2019s timing info.\n let timingInfo = response.timingInfo\n\n // 5. Let cacheState be response\u2019s cache state.\n let cacheState = response.cacheState\n\n // 6. If originalURL\u2019s scheme is not an HTTP(S) scheme, then return.\n if (!urlIsHttpHttpsScheme(originalURL)) {\n return\n }\n\n // 7. If timingInfo is null, then return.\n if (timingInfo === null) {\n return\n }\n\n // 8. If response\u2019s timing allow passed flag is not set, then:\n if (!response.timingAllowPassed) {\n // 1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.\n timingInfo = createOpaqueTimingInfo({\n startTime: timingInfo.startTime\n })\n\n // 2. Set cacheState to the empty string.\n cacheState = ''\n }\n\n // 9. Set timingInfo\u2019s end time to the coarsened shared current time\n // given global\u2019s relevant settings object\u2019s cross-origin isolated\n // capability.\n // TODO: given global\u2019s relevant settings object\u2019s cross-origin isolated\n // capability?\n timingInfo.endTime = coarsenedSharedCurrentTime()\n\n // 10. Set response\u2019s timing info to timingInfo.\n response.timingInfo = timingInfo\n\n // 11. Mark resource timing for timingInfo, originalURL, initiatorType,\n // global, and cacheState.\n markResourceTiming(\n timingInfo,\n originalURL.href,\n initiatorType,\n globalThis,\n cacheState\n )\n}\n\n// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing\nconst markResourceTiming = performance.markResourceTiming\n\n// https://fetch.spec.whatwg.org/#abort-fetch\nfunction abortFetch (p, request, responseObject, error) {\n // 1. Reject promise with error.\n if (p) {\n // We might have already resolved the promise at this stage\n p.reject(error)\n }\n\n // 2. If request\u2019s body is not null and is readable, then cancel request\u2019s\n // body with error.\n if (request.body?.stream != null && isReadable(request.body.stream)) {\n request.body.stream.cancel(error).catch((err) => {\n if (err.code === 'ERR_INVALID_STATE') {\n // Node bug?\n return\n }\n throw err\n })\n }\n\n // 3. If responseObject is null, then return.\n if (responseObject == null) {\n return\n }\n\n // 4. Let response be responseObject\u2019s response.\n const response = getResponseState(responseObject)\n\n // 5. If response\u2019s body is not null and is readable, then error response\u2019s\n // body with error.\n if (response.body?.stream != null && isReadable(response.body.stream)) {\n response.body.stream.cancel(error).catch((err) => {\n if (err.code === 'ERR_INVALID_STATE') {\n // Node bug?\n return\n }\n throw err\n })\n }\n}\n\n// https://fetch.spec.whatwg.org/#fetching\nfunction fetching ({\n request,\n processRequestBodyChunkLength,\n processRequestEndOfBody,\n processResponse,\n processResponseEndOfBody,\n processResponseConsumeBody,\n useParallelQueue = false,\n dispatcher = getGlobalDispatcher() // undici\n}) {\n // Ensure that the dispatcher is set accordingly\n assert(dispatcher)\n\n // 1. Let taskDestination be null.\n let taskDestination = null\n\n // 2. Let crossOriginIsolatedCapability be false.\n let crossOriginIsolatedCapability = false\n\n // 3. If request\u2019s client is non-null, then:\n if (request.client != null) {\n // 1. Set taskDestination to request\u2019s client\u2019s global object.\n taskDestination = request.client.globalObject\n\n // 2. Set crossOriginIsolatedCapability to request\u2019s client\u2019s cross-origin\n // isolated capability.\n crossOriginIsolatedCapability =\n request.client.crossOriginIsolatedCapability\n }\n\n // 4. If useParallelQueue is true, then set taskDestination to the result of\n // starting a new parallel queue.\n // TODO\n\n // 5. Let timingInfo be a new fetch timing info whose start time and\n // post-redirect start time are the coarsened shared current time given\n // crossOriginIsolatedCapability.\n const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)\n const timingInfo = createOpaqueTimingInfo({\n startTime: currentTime\n })\n\n // 6. Let fetchParams be a new fetch params whose\n // request is request,\n // timing info is timingInfo,\n // process request body chunk length is processRequestBodyChunkLength,\n // process request end-of-body is processRequestEndOfBody,\n // process response is processResponse,\n // process response consume body is processResponseConsumeBody,\n // process response end-of-body is processResponseEndOfBody,\n // task destination is taskDestination,\n // and cross-origin isolated capability is crossOriginIsolatedCapability.\n const fetchParams = {\n controller: new Fetch(dispatcher),\n request,\n timingInfo,\n processRequestBodyChunkLength,\n processRequestEndOfBody,\n processResponse,\n processResponseConsumeBody,\n processResponseEndOfBody,\n taskDestination,\n crossOriginIsolatedCapability\n }\n\n // 7. If request\u2019s body is a byte sequence, then set request\u2019s body to\n // request\u2019s body as a body.\n // NOTE: Since fetching is only called from fetch, body should already be\n // extracted.\n assert(!request.body || request.body.stream)\n\n // 8. If request\u2019s window is \"client\", then set request\u2019s window to request\u2019s\n // client, if request\u2019s client\u2019s global object is a Window object; otherwise\n // \"no-window\".\n if (request.window === 'client') {\n // TODO: What if request.client is null?\n request.window =\n request.client?.globalObject?.constructor?.name === 'Window'\n ? request.client\n : 'no-window'\n }\n\n // 9. If request\u2019s origin is \"client\", then set request\u2019s origin to request\u2019s\n // client\u2019s origin.\n if (request.origin === 'client') {\n request.origin = request.client.origin\n }\n\n // 10. If all of the following conditions are true:\n // TODO\n\n // 11. If request\u2019s policy container is \"client\", then:\n if (request.policyContainer === 'client') {\n // 1. If request\u2019s client is non-null, then set request\u2019s policy\n // container to a clone of request\u2019s client\u2019s policy container. [HTML]\n if (request.client != null) {\n request.policyContainer = clonePolicyContainer(\n request.client.policyContainer\n )\n } else {\n // 2. Otherwise, set request\u2019s policy container to a new policy\n // container.\n request.policyContainer = makePolicyContainer()\n }\n }\n\n // 12. If request\u2019s header list does not contain `Accept`, then:\n if (!request.headersList.contains('accept', true)) {\n // 1. Let value be `*/*`.\n const value = '*/*'\n\n // 2. A user agent should set value to the first matching statement, if\n // any, switching on request\u2019s destination:\n // \"document\"\n // \"frame\"\n // \"iframe\"\n // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`\n // \"image\"\n // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`\n // \"style\"\n // `text/css,*/*;q=0.1`\n // TODO\n\n // 3. Append `Accept`/value to request\u2019s header list.\n request.headersList.append('accept', value, true)\n }\n\n // 13. If request\u2019s header list does not contain `Accept-Language`, then\n // user agents should append `Accept-Language`/an appropriate value to\n // request\u2019s header list.\n if (!request.headersList.contains('accept-language', true)) {\n request.headersList.append('accept-language', '*', true)\n }\n\n // 14. If request\u2019s priority is null, then use request\u2019s initiator and\n // destination appropriately in setting request\u2019s priority to a\n // user-agent-defined object.\n if (request.priority === null) {\n // TODO\n }\n\n // 15. If request is a subresource request, then:\n if (subresourceSet.has(request.destination)) {\n // TODO\n }\n\n // 16. Run main fetch given fetchParams.\n mainFetch(fetchParams)\n .catch(err => {\n fetchParams.controller.terminate(err)\n })\n\n // 17. Return fetchParam's controller\n return fetchParams.controller\n}\n\n// https://fetch.spec.whatwg.org/#concept-main-fetch\nasync function mainFetch (fetchParams, recursive = false) {\n // 1. Let request be fetchParams\u2019s request.\n const request = fetchParams.request\n\n // 2. Let response be null.\n let response = null\n\n // 3. If request\u2019s local-URLs-only flag is set and request\u2019s current URL is\n // not local, then set response to a network error.\n if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {\n response = makeNetworkError('local URLs only')\n }\n\n // 4. Run report Content Security Policy violations for request.\n // TODO\n\n // 5. Upgrade request to a potentially trustworthy URL, if appropriate.\n tryUpgradeRequestToAPotentiallyTrustworthyURL(request)\n\n // 6. If should request be blocked due to a bad port, should fetching request\n // be blocked as mixed content, or should request be blocked by Content\n // Security Policy returns blocked, then set response to a network error.\n if (requestBadPort(request) === 'blocked') {\n response = makeNetworkError('bad port')\n }\n // TODO: should fetching request be blocked as mixed content?\n // TODO: should request be blocked by Content Security Policy?\n\n // 7. If request\u2019s referrer policy is the empty string, then set request\u2019s\n // referrer policy to request\u2019s policy container\u2019s referrer policy.\n if (request.referrerPolicy === '') {\n request.referrerPolicy = request.policyContainer.referrerPolicy\n }\n\n // 8. If request\u2019s referrer is not \"no-referrer\", then set request\u2019s\n // referrer to the result of invoking determine request\u2019s referrer.\n if (request.referrer !== 'no-referrer') {\n request.referrer = determineRequestsReferrer(request)\n }\n\n // 9. Set request\u2019s current URL\u2019s scheme to \"https\" if all of the following\n // conditions are true:\n // - request\u2019s current URL\u2019s scheme is \"http\"\n // - request\u2019s current URL\u2019s host is a domain\n // - Matching request\u2019s current URL\u2019s host per Known HSTS Host Domain Name\n // Matching results in either a superdomain match with an asserted\n // includeSubDomains directive or a congruent match (with or without an\n // asserted includeSubDomains directive). [HSTS]\n // TODO\n\n // 10. If recursive is false, then run the remaining steps in parallel.\n // TODO\n\n // 11. If response is null, then set response to the result of running\n // the steps corresponding to the first matching statement:\n if (response === null) {\n const currentURL = requestCurrentURL(request)\n if (\n // - request\u2019s current URL\u2019s origin is same origin with request\u2019s origin,\n // and request\u2019s response tainting is \"basic\"\n (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n // request\u2019s current URL\u2019s scheme is \"data\"\n (currentURL.protocol === 'data:') ||\n // - request\u2019s mode is \"navigate\" or \"websocket\"\n (request.mode === 'navigate' || request.mode === 'websocket')\n ) {\n // 1. Set request\u2019s response tainting to \"basic\".\n request.responseTainting = 'basic'\n\n // 2. Return the result of running scheme fetch given fetchParams.\n response = await schemeFetch(fetchParams)\n\n // request\u2019s mode is \"same-origin\"\n } else if (request.mode === 'same-origin') {\n // 1. Return a network error.\n response = makeNetworkError('request mode cannot be \"same-origin\"')\n\n // request\u2019s mode is \"no-cors\"\n } else if (request.mode === 'no-cors') {\n // 1. If request\u2019s redirect mode is not \"follow\", then return a network\n // error.\n if (request.redirect !== 'follow') {\n response = makeNetworkError(\n 'redirect mode cannot be \"follow\" for \"no-cors\" request'\n )\n } else {\n // 2. Set request\u2019s response tainting to \"opaque\".\n request.responseTainting = 'opaque'\n\n // 3. Return the result of running scheme fetch given fetchParams.\n response = await schemeFetch(fetchParams)\n }\n // request\u2019s current URL\u2019s scheme is not an HTTP(S) scheme\n } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {\n // Return a network error.\n response = makeNetworkError('URL scheme must be a HTTP(S) scheme')\n\n // - request\u2019s use-CORS-preflight flag is set\n // - request\u2019s unsafe-request flag is set and either request\u2019s method is\n // not a CORS-safelisted method or CORS-unsafe request-header names with\n // request\u2019s header list is not empty\n // 1. Set request\u2019s response tainting to \"cors\".\n // 2. Let corsWithPreflightResponse be the result of running HTTP fetch\n // given fetchParams and true.\n // 3. If corsWithPreflightResponse is a network error, then clear cache\n // entries using request.\n // 4. Return corsWithPreflightResponse.\n // TODO\n\n // Otherwise\n } else {\n // 1. Set request\u2019s response tainting to \"cors\".\n request.responseTainting = 'cors'\n\n // 2. Return the result of running HTTP fetch given fetchParams.\n response = await httpFetch(fetchParams)\n }\n }\n\n // 12. If recursive is true, then return response.\n if (recursive) {\n return response\n }\n\n // 13. If response is not a network error and response is not a filtered\n // response, then:\n if (response.status !== 0 && !response.internalResponse) {\n // If request\u2019s response tainting is \"cors\", then:\n if (request.responseTainting === 'cors') {\n // 1. Let headerNames be the result of extracting header list values\n // given `Access-Control-Expose-Headers` and response\u2019s header list.\n // TODO\n // 2. If request\u2019s credentials mode is not \"include\" and headerNames\n // contains `*`, then set response\u2019s CORS-exposed header-name list to\n // all unique header names in response\u2019s header list.\n // TODO\n // 3. Otherwise, if headerNames is not null or failure, then set\n // response\u2019s CORS-exposed header-name list to headerNames.\n // TODO\n }\n\n // Set response to the following filtered response with response as its\n // internal response, depending on request\u2019s response tainting:\n if (request.responseTainting === 'basic') {\n response = filterResponse(response, 'basic')\n } else if (request.responseTainting === 'cors') {\n response = filterResponse(response, 'cors')\n } else if (request.responseTainting === 'opaque') {\n response = filterResponse(response, 'opaque')\n } else {\n assert(false)\n }\n }\n\n // 14. Let internalResponse be response, if response is a network error,\n // and response\u2019s internal response otherwise.\n let internalResponse =\n response.status === 0 ? response : response.internalResponse\n\n // 15. If internalResponse\u2019s URL list is empty, then set it to a clone of\n // request\u2019s URL list.\n if (internalResponse.urlList.length === 0) {\n internalResponse.urlList.push(...request.urlList)\n }\n\n // 16. If request\u2019s timing allow failed flag is unset, then set\n // internalResponse\u2019s timing allow passed flag.\n if (!request.timingAllowFailed) {\n response.timingAllowPassed = true\n }\n\n // 17. If response is not a network error and any of the following returns\n // blocked\n // - should internalResponse to request be blocked as mixed content\n // - should internalResponse to request be blocked by Content Security Policy\n // - should internalResponse to request be blocked due to its MIME type\n // - should internalResponse to request be blocked due to nosniff\n // TODO\n\n // 18. If response\u2019s type is \"opaque\", internalResponse\u2019s status is 206,\n // internalResponse\u2019s range-requested flag is set, and request\u2019s header\n // list does not contain `Range`, then set response and internalResponse\n // to a network error.\n if (\n response.type === 'opaque' &&\n internalResponse.status === 206 &&\n internalResponse.rangeRequested &&\n !request.headers.contains('range', true)\n ) {\n response = internalResponse = makeNetworkError()\n }\n\n // 19. If response is not a network error and either request\u2019s method is\n // `HEAD` or `CONNECT`, or internalResponse\u2019s status is a null body status,\n // set internalResponse\u2019s body to null and disregard any enqueuing toward\n // it (if any).\n if (\n response.status !== 0 &&\n (request.method === 'HEAD' ||\n request.method === 'CONNECT' ||\n nullBodyStatus.includes(internalResponse.status))\n ) {\n internalResponse.body = null\n fetchParams.controller.dump = true\n }\n\n // 20. If request\u2019s integrity metadata is not the empty string, then:\n if (request.integrity) {\n // 1. Let processBodyError be this step: run fetch finale given fetchParams\n // and a network error.\n const processBodyError = (reason) =>\n fetchFinale(fetchParams, makeNetworkError(reason))\n\n // 2. If request\u2019s response tainting is \"opaque\", or response\u2019s body is null,\n // then run processBodyError and abort these steps.\n if (request.responseTainting === 'opaque' || response.body == null) {\n processBodyError(response.error)\n return\n }\n\n // 3. Let processBody given bytes be these steps:\n const processBody = (bytes) => {\n // 1. If bytes do not match request\u2019s integrity metadata,\n // then run processBodyError and abort these steps. [SRI]\n if (!bytesMatch(bytes, request.integrity)) {\n processBodyError('integrity mismatch')\n return\n }\n\n // 2. Set response\u2019s body to bytes as a body.\n response.body = safelyExtractBody(bytes)[0]\n\n // 3. Run fetch finale given fetchParams and response.\n fetchFinale(fetchParams, response)\n }\n\n // 4. Fully read response\u2019s body given processBody and processBodyError.\n await fullyReadBody(response.body, processBody, processBodyError)\n } else {\n // 21. Otherwise, run fetch finale given fetchParams and response.\n fetchFinale(fetchParams, response)\n }\n}\n\n// https://fetch.spec.whatwg.org/#concept-scheme-fetch\n// given a fetch params fetchParams\nfunction schemeFetch (fetchParams) {\n // Note: since the connection is destroyed on redirect, which sets fetchParams to a\n // cancelled state, we do not want this condition to trigger *unless* there have been\n // no redirects. See https://github.com/nodejs/undici/issues/1776\n // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {\n return Promise.resolve(makeAppropriateNetworkError(fetchParams))\n }\n\n // 2. Let request be fetchParams\u2019s request.\n const { request } = fetchParams\n\n const { protocol: scheme } = requestCurrentURL(request)\n\n // 3. Switch on request\u2019s current URL\u2019s scheme and run the associated steps:\n switch (scheme) {\n case 'about:': {\n // If request\u2019s current URL\u2019s path is the string \"blank\", then return a new response\n // whose status message is `OK`, header list is \u00AB (`Content-Type`, `text/html;charset=utf-8`) \u00BB,\n // and body is the empty byte sequence as a body.\n\n // Otherwise, return a network error.\n return Promise.resolve(makeNetworkError('about scheme is not supported'))\n }\n case 'blob:': {\n if (!resolveObjectURL) {\n resolveObjectURL = require('node:buffer').resolveObjectURL\n }\n\n // 1. Let blobURLEntry be request\u2019s current URL\u2019s blob URL entry.\n const blobURLEntry = requestCurrentURL(request)\n\n // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56\n // Buffer.resolveObjectURL does not ignore URL queries.\n if (blobURLEntry.search.length !== 0) {\n return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))\n }\n\n const blob = resolveObjectURL(blobURLEntry.toString())\n\n // 2. If request\u2019s method is not `GET`, blobURLEntry is null, or blobURLEntry\u2019s\n // object is not a Blob object, then return a network error.\n if (request.method !== 'GET' || !webidl.is.Blob(blob)) {\n return Promise.resolve(makeNetworkError('invalid method'))\n }\n\n // 3. Let blob be blobURLEntry\u2019s object.\n // Note: done above\n\n // 4. Let response be a new response.\n const response = makeResponse()\n\n // 5. Let fullLength be blob\u2019s size.\n const fullLength = blob.size\n\n // 6. Let serializedFullLength be fullLength, serialized and isomorphic encoded.\n const serializedFullLength = isomorphicEncode(`${fullLength}`)\n\n // 7. Let type be blob\u2019s type.\n const type = blob.type\n\n // 8. If request\u2019s header list does not contain `Range`:\n // 9. Otherwise:\n if (!request.headersList.contains('range', true)) {\n // 1. Let bodyWithType be the result of safely extracting blob.\n // Note: in the FileAPI a blob \"object\" is a Blob *or* a MediaSource.\n // In node, this can only ever be a Blob. Therefore we can safely\n // use extractBody directly.\n const bodyWithType = extractBody(blob)\n\n // 2. Set response\u2019s status message to `OK`.\n response.statusText = 'OK'\n\n // 3. Set response\u2019s body to bodyWithType\u2019s body.\n response.body = bodyWithType[0]\n\n // 4. Set response\u2019s header list to \u00AB (`Content-Length`, serializedFullLength), (`Content-Type`, type) \u00BB.\n response.headersList.set('content-length', serializedFullLength, true)\n response.headersList.set('content-type', type, true)\n } else {\n // 1. Set response\u2019s range-requested flag.\n response.rangeRequested = true\n\n // 2. Let rangeHeader be the result of getting `Range` from request\u2019s header list.\n const rangeHeader = request.headersList.get('range', true)\n\n // 3. Let rangeValue be the result of parsing a single range header value given rangeHeader and true.\n const rangeValue = simpleRangeHeaderValue(rangeHeader, true)\n\n // 4. If rangeValue is failure, then return a network error.\n if (rangeValue === 'failure') {\n return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n }\n\n // 5. Let (rangeStart, rangeEnd) be rangeValue.\n let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue\n\n // 6. If rangeStart is null:\n // 7. Otherwise:\n if (rangeStart === null) {\n // 1. Set rangeStart to fullLength \u2212 rangeEnd.\n rangeStart = fullLength - rangeEnd\n\n // 2. Set rangeEnd to rangeStart + rangeEnd \u2212 1.\n rangeEnd = rangeStart + rangeEnd - 1\n } else {\n // 1. If rangeStart is greater than or equal to fullLength, then return a network error.\n if (rangeStart >= fullLength) {\n return Promise.resolve(makeNetworkError('Range start is greater than the blob\\'s size.'))\n }\n\n // 2. If rangeEnd is null or rangeEnd is greater than or equal to fullLength, then set\n // rangeEnd to fullLength \u2212 1.\n if (rangeEnd === null || rangeEnd >= fullLength) {\n rangeEnd = fullLength - 1\n }\n }\n\n // 8. Let slicedBlob be the result of invoking slice blob given blob, rangeStart,\n // rangeEnd + 1, and type.\n const slicedBlob = blob.slice(rangeStart, rangeEnd, type)\n\n // 9. Let slicedBodyWithType be the result of safely extracting slicedBlob.\n // Note: same reason as mentioned above as to why we use extractBody\n const slicedBodyWithType = extractBody(slicedBlob)\n\n // 10. Set response\u2019s body to slicedBodyWithType\u2019s body.\n response.body = slicedBodyWithType[0]\n\n // 11. Let serializedSlicedLength be slicedBlob\u2019s size, serialized and isomorphic encoded.\n const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`)\n\n // 12. Let contentRange be the result of invoking build a content range given rangeStart,\n // rangeEnd, and fullLength.\n const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength)\n\n // 13. Set response\u2019s status to 206.\n response.status = 206\n\n // 14. Set response\u2019s status message to `Partial Content`.\n response.statusText = 'Partial Content'\n\n // 15. Set response\u2019s header list to \u00AB (`Content-Length`, serializedSlicedLength),\n // (`Content-Type`, type), (`Content-Range`, contentRange) \u00BB.\n response.headersList.set('content-length', serializedSlicedLength, true)\n response.headersList.set('content-type', type, true)\n response.headersList.set('content-range', contentRange, true)\n }\n\n // 10. Return response.\n return Promise.resolve(response)\n }\n case 'data:': {\n // 1. Let dataURLStruct be the result of running the\n // data: URL processor on request\u2019s current URL.\n const currentURL = requestCurrentURL(request)\n const dataURLStruct = dataURLProcessor(currentURL)\n\n // 2. If dataURLStruct is failure, then return a\n // network error.\n if (dataURLStruct === 'failure') {\n return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n }\n\n // 3. Let mimeType be dataURLStruct\u2019s MIME type, serialized.\n const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n // 4. Return a response whose status message is `OK`,\n // header list is \u00AB (`Content-Type`, mimeType) \u00BB,\n // and body is dataURLStruct\u2019s body as a body.\n return Promise.resolve(makeResponse({\n statusText: 'OK',\n headersList: [\n ['content-type', { name: 'Content-Type', value: mimeType }]\n ],\n body: safelyExtractBody(dataURLStruct.body)[0]\n }))\n }\n case 'file:': {\n // For now, unfortunate as it is, file URLs are left as an exercise for the reader.\n // When in doubt, return a network error.\n return Promise.resolve(makeNetworkError('not implemented... yet...'))\n }\n case 'http:':\n case 'https:': {\n // Return the result of running HTTP fetch given fetchParams.\n\n return httpFetch(fetchParams)\n .catch((err) => makeNetworkError(err))\n }\n default: {\n return Promise.resolve(makeNetworkError('unknown scheme'))\n }\n }\n}\n\n// https://fetch.spec.whatwg.org/#finalize-response\nfunction finalizeResponse (fetchParams, response) {\n // 1. Set fetchParams\u2019s request\u2019s done flag.\n fetchParams.request.done = true\n\n // 2, If fetchParams\u2019s process response done is not null, then queue a fetch\n // task to run fetchParams\u2019s process response done given response, with\n // fetchParams\u2019s task destination.\n if (fetchParams.processResponseDone != null) {\n queueMicrotask(() => fetchParams.processResponseDone(response))\n }\n}\n\n// https://fetch.spec.whatwg.org/#fetch-finale\nfunction fetchFinale (fetchParams, response) {\n // 1. Let timingInfo be fetchParams\u2019s timing info.\n let timingInfo = fetchParams.timingInfo\n\n // 2. If response is not a network error and fetchParams\u2019s request\u2019s client is a secure context,\n // then set timingInfo\u2019s server-timing headers to the result of getting, decoding, and splitting\n // `Server-Timing` from response\u2019s internal response\u2019s header list.\n // TODO\n\n // 3. Let processResponseEndOfBody be the following steps:\n const processResponseEndOfBody = () => {\n // 1. Let unsafeEndTime be the unsafe shared current time.\n const unsafeEndTime = Date.now() // ?\n\n // 2. If fetchParams\u2019s request\u2019s destination is \"document\", then set fetchParams\u2019s controller\u2019s\n // full timing info to fetchParams\u2019s timing info.\n if (fetchParams.request.destination === 'document') {\n fetchParams.controller.fullTimingInfo = timingInfo\n }\n\n // 3. Set fetchParams\u2019s controller\u2019s report timing steps to the following steps given a global object global:\n fetchParams.controller.reportTimingSteps = () => {\n // 1. If fetchParams\u2019s request\u2019s URL\u2019s scheme is not an HTTP(S) scheme, then return.\n if (fetchParams.request.url.protocol !== 'https:') {\n return\n }\n\n // 2. Set timingInfo\u2019s end time to the relative high resolution time given unsafeEndTime and global.\n timingInfo.endTime = unsafeEndTime\n\n // 3. Let cacheState be response\u2019s cache state.\n let cacheState = response.cacheState\n\n // 4. Let bodyInfo be response\u2019s body info.\n const bodyInfo = response.bodyInfo\n\n // 5. If response\u2019s timing allow passed flag is not set, then set timingInfo to the result of creating an\n // opaque timing info for timingInfo and set cacheState to the empty string.\n if (!response.timingAllowPassed) {\n timingInfo = createOpaqueTimingInfo(timingInfo)\n\n cacheState = ''\n }\n\n // 6. Let responseStatus be 0.\n let responseStatus = 0\n\n // 7. If fetchParams\u2019s request\u2019s mode is not \"navigate\" or response\u2019s has-cross-origin-redirects is false:\n if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {\n // 1. Set responseStatus to response\u2019s status.\n responseStatus = response.status\n\n // 2. Let mimeType be the result of extracting a MIME type from response\u2019s header list.\n const mimeType = extractMimeType(response.headersList)\n\n // 3. If mimeType is not failure, then set bodyInfo\u2019s content type to the result of minimizing a supported MIME type given mimeType.\n if (mimeType !== 'failure') {\n bodyInfo.contentType = minimizeSupportedMimeType(mimeType)\n }\n }\n\n // 8. If fetchParams\u2019s request\u2019s initiator type is non-null, then mark resource timing given timingInfo,\n // fetchParams\u2019s request\u2019s URL, fetchParams\u2019s request\u2019s initiator type, global, cacheState, bodyInfo,\n // and responseStatus.\n if (fetchParams.request.initiatorType != null) {\n // TODO: update markresourcetiming\n markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus)\n }\n }\n\n // 4. Let processResponseEndOfBodyTask be the following steps:\n const processResponseEndOfBodyTask = () => {\n // 1. Set fetchParams\u2019s request\u2019s done flag.\n fetchParams.request.done = true\n\n // 2. If fetchParams\u2019s process response end-of-body is non-null, then run fetchParams\u2019s process\n // response end-of-body given response.\n if (fetchParams.processResponseEndOfBody != null) {\n queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n }\n\n // 3. If fetchParams\u2019s request\u2019s initiator type is non-null and fetchParams\u2019s request\u2019s client\u2019s\n // global object is fetchParams\u2019s task destination, then run fetchParams\u2019s controller\u2019s report\n // timing steps given fetchParams\u2019s request\u2019s client\u2019s global object.\n if (fetchParams.request.initiatorType != null) {\n fetchParams.controller.reportTimingSteps()\n }\n }\n\n // 5. Queue a fetch task to run processResponseEndOfBodyTask with fetchParams\u2019s task destination\n queueMicrotask(() => processResponseEndOfBodyTask())\n }\n\n // 4. If fetchParams\u2019s process response is non-null, then queue a fetch task to run fetchParams\u2019s\n // process response given response, with fetchParams\u2019s task destination.\n if (fetchParams.processResponse != null) {\n queueMicrotask(() => {\n fetchParams.processResponse(response)\n fetchParams.processResponse = null\n })\n }\n\n // 5. Let internalResponse be response, if response is a network error; otherwise response\u2019s internal response.\n const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n // 6. If internalResponse\u2019s body is null, then run processResponseEndOfBody.\n // 7. Otherwise:\n if (internalResponse.body == null) {\n processResponseEndOfBody()\n } else {\n // mcollina: all the following steps of the specs are skipped.\n // The internal transform stream is not needed.\n // See https://github.com/nodejs/undici/pull/3093#issuecomment-2050198541\n\n // 1. Let transformStream be a new TransformStream.\n // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, enqueues chunk in transformStream.\n // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm and flushAlgorithm\n // set to processResponseEndOfBody.\n // 4. Set internalResponse\u2019s body\u2019s stream to the result of internalResponse\u2019s body\u2019s stream piped through transformStream.\n\n finished(internalResponse.body.stream, () => {\n processResponseEndOfBody()\n })\n }\n}\n\n// https://fetch.spec.whatwg.org/#http-fetch\nasync function httpFetch (fetchParams) {\n // 1. Let request be fetchParams\u2019s request.\n const request = fetchParams.request\n\n // 2. Let response be null.\n let response = null\n\n // 3. Let actualResponse be null.\n let actualResponse = null\n\n // 4. Let timingInfo be fetchParams\u2019s timing info.\n const timingInfo = fetchParams.timingInfo\n\n // 5. If request\u2019s service-workers mode is \"all\", then:\n if (request.serviceWorkers === 'all') {\n // TODO\n }\n\n // 6. If response is null, then:\n if (response === null) {\n // 1. If makeCORSPreflight is true and one of these conditions is true:\n // TODO\n\n // 2. If request\u2019s redirect mode is \"follow\", then set request\u2019s\n // service-workers mode to \"none\".\n if (request.redirect === 'follow') {\n request.serviceWorkers = 'none'\n }\n\n // 3. Set response and actualResponse to the result of running\n // HTTP-network-or-cache fetch given fetchParams.\n actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)\n\n // 4. If request\u2019s response tainting is \"cors\" and a CORS check\n // for request and response returns failure, then return a network error.\n if (\n request.responseTainting === 'cors' &&\n corsCheck(request, response) === 'failure'\n ) {\n return makeNetworkError('cors failure')\n }\n\n // 5. If the TAO check for request and response returns failure, then set\n // request\u2019s timing allow failed flag.\n if (TAOCheck(request, response) === 'failure') {\n request.timingAllowFailed = true\n }\n }\n\n // 7. If either request\u2019s response tainting or response\u2019s type\n // is \"opaque\", and the cross-origin resource policy check with\n // request\u2019s origin, request\u2019s client, request\u2019s destination,\n // and actualResponse returns blocked, then return a network error.\n if (\n (request.responseTainting === 'opaque' || response.type === 'opaque') &&\n crossOriginResourcePolicyCheck(\n request.origin,\n request.client,\n request.destination,\n actualResponse\n ) === 'blocked'\n ) {\n return makeNetworkError('blocked')\n }\n\n // 8. If actualResponse\u2019s status is a redirect status, then:\n if (redirectStatusSet.has(actualResponse.status)) {\n // 1. If actualResponse\u2019s status is not 303, request\u2019s body is not null,\n // and the connection uses HTTP/2, then user agents may, and are even\n // encouraged to, transmit an RST_STREAM frame.\n // See, https://github.com/whatwg/fetch/issues/1288\n if (request.redirect !== 'manual') {\n fetchParams.controller.connection.destroy(undefined, false)\n }\n\n // 2. Switch on request\u2019s redirect mode:\n if (request.redirect === 'error') {\n // Set response to a network error.\n response = makeNetworkError('unexpected redirect')\n } else if (request.redirect === 'manual') {\n // Set response to an opaque-redirect filtered response whose internal\n // response is actualResponse.\n // NOTE(spec): On the web this would return an `opaqueredirect` response,\n // but that doesn't make sense server side.\n // See https://github.com/nodejs/undici/issues/1193.\n response = actualResponse\n } else if (request.redirect === 'follow') {\n // Set response to the result of running HTTP-redirect fetch given\n // fetchParams and response.\n response = await httpRedirectFetch(fetchParams, response)\n } else {\n assert(false)\n }\n }\n\n // 9. Set response\u2019s timing info to timingInfo.\n response.timingInfo = timingInfo\n\n // 10. Return response.\n return response\n}\n\n// https://fetch.spec.whatwg.org/#http-redirect-fetch\nfunction httpRedirectFetch (fetchParams, response) {\n // 1. Let request be fetchParams\u2019s request.\n const request = fetchParams.request\n\n // 2. Let actualResponse be response, if response is not a filtered response,\n // and response\u2019s internal response otherwise.\n const actualResponse = response.internalResponse\n ? response.internalResponse\n : response\n\n // 3. Let locationURL be actualResponse\u2019s location URL given request\u2019s current\n // URL\u2019s fragment.\n let locationURL\n\n try {\n locationURL = responseLocationURL(\n actualResponse,\n requestCurrentURL(request).hash\n )\n\n // 4. If locationURL is null, then return response.\n if (locationURL == null) {\n return response\n }\n } catch (err) {\n // 5. If locationURL is failure, then return a network error.\n return Promise.resolve(makeNetworkError(err))\n }\n\n // 6. If locationURL\u2019s scheme is not an HTTP(S) scheme, then return a network\n // error.\n if (!urlIsHttpHttpsScheme(locationURL)) {\n return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))\n }\n\n // 7. If request\u2019s redirect count is 20, then return a network error.\n if (request.redirectCount === 20) {\n return Promise.resolve(makeNetworkError('redirect count exceeded'))\n }\n\n // 8. Increase request\u2019s redirect count by 1.\n request.redirectCount += 1\n\n // 9. If request\u2019s mode is \"cors\", locationURL includes credentials, and\n // request\u2019s origin is not same origin with locationURL\u2019s origin, then return\n // a network error.\n if (\n request.mode === 'cors' &&\n (locationURL.username || locationURL.password) &&\n !sameOrigin(request, locationURL)\n ) {\n return Promise.resolve(makeNetworkError('cross origin not allowed for request mode \"cors\"'))\n }\n\n // 10. If request\u2019s response tainting is \"cors\" and locationURL includes\n // credentials, then return a network error.\n if (\n request.responseTainting === 'cors' &&\n (locationURL.username || locationURL.password)\n ) {\n return Promise.resolve(makeNetworkError(\n 'URL cannot contain credentials for request mode \"cors\"'\n ))\n }\n\n // 11. If actualResponse\u2019s status is not 303, request\u2019s body is non-null,\n // and request\u2019s body\u2019s source is null, then return a network error.\n if (\n actualResponse.status !== 303 &&\n request.body != null &&\n request.body.source == null\n ) {\n return Promise.resolve(makeNetworkError())\n }\n\n // 12. If one of the following is true\n // - actualResponse\u2019s status is 301 or 302 and request\u2019s method is `POST`\n // - actualResponse\u2019s status is 303 and request\u2019s method is not `GET` or `HEAD`\n if (\n ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||\n (actualResponse.status === 303 &&\n !GET_OR_HEAD.includes(request.method))\n ) {\n // then:\n // 1. Set request\u2019s method to `GET` and request\u2019s body to null.\n request.method = 'GET'\n request.body = null\n\n // 2. For each headerName of request-body-header name, delete headerName from\n // request\u2019s header list.\n for (const headerName of requestBodyHeader) {\n request.headersList.delete(headerName)\n }\n }\n\n // 13. If request\u2019s current URL\u2019s origin is not same origin with locationURL\u2019s\n // origin, then for each headerName of CORS non-wildcard request-header name,\n // delete headerName from request\u2019s header list.\n if (!sameOrigin(requestCurrentURL(request), locationURL)) {\n // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name\n request.headersList.delete('authorization', true)\n\n // https://fetch.spec.whatwg.org/#authentication-entries\n request.headersList.delete('proxy-authorization', true)\n\n // \"Cookie\" and \"Host\" are forbidden request-headers, which undici doesn't implement.\n request.headersList.delete('cookie', true)\n request.headersList.delete('host', true)\n }\n\n // 14. If request\u2019s body is non-null, then set request\u2019s body to the first return\n // value of safely extracting request\u2019s body\u2019s source.\n if (request.body != null) {\n assert(request.body.source != null)\n request.body = safelyExtractBody(request.body.source)[0]\n }\n\n // 15. Let timingInfo be fetchParams\u2019s timing info.\n const timingInfo = fetchParams.timingInfo\n\n // 16. Set timingInfo\u2019s redirect end time and post-redirect start time to the\n // coarsened shared current time given fetchParams\u2019s cross-origin isolated\n // capability.\n timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n // 17. If timingInfo\u2019s redirect start time is 0, then set timingInfo\u2019s\n // redirect start time to timingInfo\u2019s start time.\n if (timingInfo.redirectStartTime === 0) {\n timingInfo.redirectStartTime = timingInfo.startTime\n }\n\n // 18. Append locationURL to request\u2019s URL list.\n request.urlList.push(locationURL)\n\n // 19. Invoke set request\u2019s referrer policy on redirect on request and\n // actualResponse.\n setRequestReferrerPolicyOnRedirect(request, actualResponse)\n\n // 20. Return the result of running main fetch given fetchParams and true.\n return mainFetch(fetchParams, true)\n}\n\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nasync function httpNetworkOrCacheFetch (\n fetchParams,\n isAuthenticationFetch = false,\n isNewConnectionFetch = false\n) {\n // 1. Let request be fetchParams\u2019s request.\n const request = fetchParams.request\n\n // 2. Let httpFetchParams be null.\n let httpFetchParams = null\n\n // 3. Let httpRequest be null.\n let httpRequest = null\n\n // 4. Let response be null.\n let response = null\n\n // 5. Let storedResponse be null.\n // TODO: cache\n\n // 6. Let httpCache be null.\n const httpCache = null\n\n // 7. Let the revalidatingFlag be unset.\n const revalidatingFlag = false\n\n // 8. Run these steps, but abort when the ongoing fetch is terminated:\n\n // 1. If request\u2019s window is \"no-window\" and request\u2019s redirect mode is\n // \"error\", then set httpFetchParams to fetchParams and httpRequest to\n // request.\n if (request.window === 'no-window' && request.redirect === 'error') {\n httpFetchParams = fetchParams\n httpRequest = request\n } else {\n // Otherwise:\n\n // 1. Set httpRequest to a clone of request.\n httpRequest = cloneRequest(request)\n\n // 2. Set httpFetchParams to a copy of fetchParams.\n httpFetchParams = { ...fetchParams }\n\n // 3. Set httpFetchParams\u2019s request to httpRequest.\n httpFetchParams.request = httpRequest\n }\n\n // 3. Let includeCredentials be true if one of\n const includeCredentials =\n request.credentials === 'include' ||\n (request.credentials === 'same-origin' &&\n request.responseTainting === 'basic')\n\n // 4. Let contentLength be httpRequest\u2019s body\u2019s length, if httpRequest\u2019s\n // body is non-null; otherwise null.\n const contentLength = httpRequest.body ? httpRequest.body.length : null\n\n // 5. Let contentLengthHeaderValue be null.\n let contentLengthHeaderValue = null\n\n // 6. If httpRequest\u2019s body is null and httpRequest\u2019s method is `POST` or\n // `PUT`, then set contentLengthHeaderValue to `0`.\n if (\n httpRequest.body == null &&\n ['POST', 'PUT'].includes(httpRequest.method)\n ) {\n contentLengthHeaderValue = '0'\n }\n\n // 7. If contentLength is non-null, then set contentLengthHeaderValue to\n // contentLength, serialized and isomorphic encoded.\n if (contentLength != null) {\n contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)\n }\n\n // 8. If contentLengthHeaderValue is non-null, then append\n // `Content-Length`/contentLengthHeaderValue to httpRequest\u2019s header\n // list.\n if (contentLengthHeaderValue != null) {\n httpRequest.headersList.append('content-length', contentLengthHeaderValue, true)\n }\n\n // 9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,\n // contentLengthHeaderValue) to httpRequest\u2019s header list.\n\n // 10. If contentLength is non-null and httpRequest\u2019s keepalive is true,\n // then:\n if (contentLength != null && httpRequest.keepalive) {\n // NOTE: keepalive is a noop outside of browser context.\n }\n\n // 11. If httpRequest\u2019s referrer is a URL, then append\n // `Referer`/httpRequest\u2019s referrer, serialized and isomorphic encoded,\n // to httpRequest\u2019s header list.\n if (webidl.is.URL(httpRequest.referrer)) {\n httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href), true)\n }\n\n // 12. Append a request `Origin` header for httpRequest.\n appendRequestOriginHeader(httpRequest)\n\n // 13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]\n appendFetchMetadata(httpRequest)\n\n // 14. If httpRequest\u2019s header list does not contain `User-Agent`, then\n // user agents should append `User-Agent`/default `User-Agent` value to\n // httpRequest\u2019s header list.\n if (!httpRequest.headersList.contains('user-agent', true)) {\n httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n }\n\n // 15. If httpRequest\u2019s cache mode is \"default\" and httpRequest\u2019s header\n // list contains `If-Modified-Since`, `If-None-Match`,\n // `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n // httpRequest\u2019s cache mode to \"no-store\".\n if (\n httpRequest.cache === 'default' &&\n (httpRequest.headersList.contains('if-modified-since', true) ||\n httpRequest.headersList.contains('if-none-match', true) ||\n httpRequest.headersList.contains('if-unmodified-since', true) ||\n httpRequest.headersList.contains('if-match', true) ||\n httpRequest.headersList.contains('if-range', true))\n ) {\n httpRequest.cache = 'no-store'\n }\n\n // 16. If httpRequest\u2019s cache mode is \"no-cache\", httpRequest\u2019s prevent\n // no-cache cache-control header modification flag is unset, and\n // httpRequest\u2019s header list does not contain `Cache-Control`, then append\n // `Cache-Control`/`max-age=0` to httpRequest\u2019s header list.\n if (\n httpRequest.cache === 'no-cache' &&\n !httpRequest.preventNoCacheCacheControlHeaderModification &&\n !httpRequest.headersList.contains('cache-control', true)\n ) {\n httpRequest.headersList.append('cache-control', 'max-age=0', true)\n }\n\n // 17. If httpRequest\u2019s cache mode is \"no-store\" or \"reload\", then:\n if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n // 1. If httpRequest\u2019s header list does not contain `Pragma`, then append\n // `Pragma`/`no-cache` to httpRequest\u2019s header list.\n if (!httpRequest.headersList.contains('pragma', true)) {\n httpRequest.headersList.append('pragma', 'no-cache', true)\n }\n\n // 2. If httpRequest\u2019s header list does not contain `Cache-Control`,\n // then append `Cache-Control`/`no-cache` to httpRequest\u2019s header list.\n if (!httpRequest.headersList.contains('cache-control', true)) {\n httpRequest.headersList.append('cache-control', 'no-cache', true)\n }\n }\n\n // 18. If httpRequest\u2019s header list contains `Range`, then append\n // `Accept-Encoding`/`identity` to httpRequest\u2019s header list.\n if (httpRequest.headersList.contains('range', true)) {\n httpRequest.headersList.append('accept-encoding', 'identity', true)\n }\n\n // 19. Modify httpRequest\u2019s header list per HTTP. Do not append a given\n // header if httpRequest\u2019s header list contains that header\u2019s name.\n // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129\n if (!httpRequest.headersList.contains('accept-encoding', true)) {\n if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {\n httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)\n } else {\n httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)\n }\n }\n\n httpRequest.headersList.delete('host', true)\n\n // 20. If includeCredentials is true, then:\n if (includeCredentials) {\n // 1. If the user agent is not configured to block cookies for httpRequest\n // (see section 7 of [COOKIES]), then:\n // TODO: credentials\n // 2. If httpRequest\u2019s header list does not contain `Authorization`, then:\n // TODO: credentials\n }\n\n // 21. If there\u2019s a proxy-authentication entry, use it as appropriate.\n // TODO: proxy-authentication\n\n // 22. Set httpCache to the result of determining the HTTP cache\n // partition, given httpRequest.\n // TODO: cache\n\n // 23. If httpCache is null, then set httpRequest\u2019s cache mode to\n // \"no-store\".\n if (httpCache == null) {\n httpRequest.cache = 'no-store'\n }\n\n // 24. If httpRequest\u2019s cache mode is neither \"no-store\" nor \"reload\",\n // then:\n if (httpRequest.cache !== 'no-store' && httpRequest.cache !== 'reload') {\n // TODO: cache\n }\n\n // 9. If aborted, then return the appropriate network error for fetchParams.\n // TODO\n\n // 10. If response is null, then:\n if (response == null) {\n // 1. If httpRequest\u2019s cache mode is \"only-if-cached\", then return a\n // network error.\n if (httpRequest.cache === 'only-if-cached') {\n return makeNetworkError('only if cached')\n }\n\n // 2. Let forwardResponse be the result of running HTTP-network fetch\n // given httpFetchParams, includeCredentials, and isNewConnectionFetch.\n const forwardResponse = await httpNetworkFetch(\n httpFetchParams,\n includeCredentials,\n isNewConnectionFetch\n )\n\n // 3. If httpRequest\u2019s method is unsafe and forwardResponse\u2019s status is\n // in the range 200 to 399, inclusive, invalidate appropriate stored\n // responses in httpCache, as per the \"Invalidation\" chapter of HTTP\n // Caching, and set storedResponse to null. [HTTP-CACHING]\n if (\n !safeMethodsSet.has(httpRequest.method) &&\n forwardResponse.status >= 200 &&\n forwardResponse.status <= 399\n ) {\n // TODO: cache\n }\n\n // 4. If the revalidatingFlag is set and forwardResponse\u2019s status is 304,\n // then:\n if (revalidatingFlag && forwardResponse.status === 304) {\n // TODO: cache\n }\n\n // 5. If response is null, then:\n if (response == null) {\n // 1. Set response to forwardResponse.\n response = forwardResponse\n\n // 2. Store httpRequest and forwardResponse in httpCache, as per the\n // \"Storing Responses in Caches\" chapter of HTTP Caching. [HTTP-CACHING]\n // TODO: cache\n }\n }\n\n // 11. Set response\u2019s URL list to a clone of httpRequest\u2019s URL list.\n response.urlList = [...httpRequest.urlList]\n\n // 12. If httpRequest\u2019s header list contains `Range`, then set response\u2019s\n // range-requested flag.\n if (httpRequest.headersList.contains('range', true)) {\n response.rangeRequested = true\n }\n\n // 13. Set response\u2019s request-includes-credentials to includeCredentials.\n response.requestIncludesCredentials = includeCredentials\n\n // 14. If response\u2019s status is 401, httpRequest\u2019s response tainting is not\n // \"cors\", includeCredentials is true, and request\u2019s window is an environment\n // settings object, then:\n // TODO\n\n // 15. If response\u2019s status is 407, then:\n if (response.status === 407) {\n // 1. If request\u2019s window is \"no-window\", then return a network error.\n if (request.window === 'no-window') {\n return makeNetworkError()\n }\n\n // 2. ???\n\n // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n if (isCancelled(fetchParams)) {\n return makeAppropriateNetworkError(fetchParams)\n }\n\n // 4. Prompt the end user as appropriate in request\u2019s window and store\n // the result as a proxy-authentication entry. [HTTP-AUTH]\n // TODO: Invoke some kind of callback?\n\n // 5. Set response to the result of running HTTP-network-or-cache fetch given\n // fetchParams.\n // TODO\n return makeNetworkError('proxy authentication required')\n }\n\n // 16. If all of the following are true\n if (\n // response\u2019s status is 421\n response.status === 421 &&\n // isNewConnectionFetch is false\n !isNewConnectionFetch &&\n // request\u2019s body is null, or request\u2019s body is non-null and request\u2019s body\u2019s source is non-null\n (request.body == null || request.body.source != null)\n ) {\n // then:\n\n // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n if (isCancelled(fetchParams)) {\n return makeAppropriateNetworkError(fetchParams)\n }\n\n // 2. Set response to the result of running HTTP-network-or-cache\n // fetch given fetchParams, isAuthenticationFetch, and true.\n\n // TODO (spec): The spec doesn't specify this but we need to cancel\n // the active response before we can start a new one.\n // https://github.com/whatwg/fetch/issues/1293\n fetchParams.controller.connection.destroy()\n\n response = await httpNetworkOrCacheFetch(\n fetchParams,\n isAuthenticationFetch,\n true\n )\n }\n\n // 17. If isAuthenticationFetch is true, then create an authentication entry\n if (isAuthenticationFetch) {\n // TODO\n }\n\n // 18. Return response.\n return response\n}\n\n// https://fetch.spec.whatwg.org/#http-network-fetch\nasync function httpNetworkFetch (\n fetchParams,\n includeCredentials = false,\n forceNewConnection = false\n) {\n assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)\n\n fetchParams.controller.connection = {\n abort: null,\n destroyed: false,\n destroy (err, abort = true) {\n if (!this.destroyed) {\n this.destroyed = true\n if (abort) {\n this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))\n }\n }\n }\n }\n\n // 1. Let request be fetchParams\u2019s request.\n const request = fetchParams.request\n\n // 2. Let response be null.\n let response = null\n\n // 3. Let timingInfo be fetchParams\u2019s timing info.\n const timingInfo = fetchParams.timingInfo\n\n // 4. Let httpCache be the result of determining the HTTP cache partition,\n // given request.\n // TODO: cache\n const httpCache = null\n\n // 5. If httpCache is null, then set request\u2019s cache mode to \"no-store\".\n if (httpCache == null) {\n request.cache = 'no-store'\n }\n\n // 6. Let networkPartitionKey be the result of determining the network\n // partition key given request.\n // TODO\n\n // 7. Let newConnection be \"yes\" if forceNewConnection is true; otherwise\n // \"no\".\n const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars\n\n // 8. Switch on request\u2019s mode:\n if (request.mode === 'websocket') {\n // Let connection be the result of obtaining a WebSocket connection,\n // given request\u2019s current URL.\n // TODO\n } else {\n // Let connection be the result of obtaining a connection, given\n // networkPartitionKey, request\u2019s current URL\u2019s origin,\n // includeCredentials, and forceNewConnection.\n // TODO\n }\n\n // 9. Run these steps, but abort when the ongoing fetch is terminated:\n\n // 1. If connection is failure, then return a network error.\n\n // 2. Set timingInfo\u2019s final connection timing info to the result of\n // calling clamp and coarsen connection timing info with connection\u2019s\n // timing info, timingInfo\u2019s post-redirect start time, and fetchParams\u2019s\n // cross-origin isolated capability.\n\n // 3. If connection is not an HTTP/2 connection, request\u2019s body is non-null,\n // and request\u2019s body\u2019s source is null, then append (`Transfer-Encoding`,\n // `chunked`) to request\u2019s header list.\n\n // 4. Set timingInfo\u2019s final network-request start time to the coarsened\n // shared current time given fetchParams\u2019s cross-origin isolated\n // capability.\n\n // 5. Set response to the result of making an HTTP request over connection\n // using request with the following caveats:\n\n // - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]\n // [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]\n\n // - If request\u2019s body is non-null, and request\u2019s body\u2019s source is null,\n // then the user agent may have a buffer of up to 64 kibibytes and store\n // a part of request\u2019s body in that buffer. If the user agent reads from\n // request\u2019s body beyond that buffer\u2019s size and the user agent needs to\n // resend request, then instead return a network error.\n\n // - Set timingInfo\u2019s final network-response start time to the coarsened\n // shared current time given fetchParams\u2019s cross-origin isolated capability,\n // immediately after the user agent\u2019s HTTP parser receives the first byte\n // of the response (e.g., frame header bytes for HTTP/2 or response status\n // line for HTTP/1.x).\n\n // - Wait until all the headers are transmitted.\n\n // - Any responses whose status is in the range 100 to 199, inclusive,\n // and is not 101, are to be ignored, except for the purposes of setting\n // timingInfo\u2019s final network-response start time above.\n\n // - If request\u2019s header list contains `Transfer-Encoding`/`chunked` and\n // response is transferred via HTTP/1.0 or older, then return a network\n // error.\n\n // - If the HTTP request results in a TLS client certificate dialog, then:\n\n // 1. If request\u2019s window is an environment settings object, make the\n // dialog available in request\u2019s window.\n\n // 2. Otherwise, return a network error.\n\n // To transmit request\u2019s body body, run these steps:\n let requestBody = null\n // 1. If body is null and fetchParams\u2019s process request end-of-body is\n // non-null, then queue a fetch task given fetchParams\u2019s process request\n // end-of-body and fetchParams\u2019s task destination.\n if (request.body == null && fetchParams.processRequestEndOfBody) {\n queueMicrotask(() => fetchParams.processRequestEndOfBody())\n } else if (request.body != null) {\n // 2. Otherwise, if body is non-null:\n\n // 1. Let processBodyChunk given bytes be these steps:\n const processBodyChunk = async function * (bytes) {\n // 1. If the ongoing fetch is terminated, then abort these steps.\n if (isCancelled(fetchParams)) {\n return\n }\n\n // 2. Run this step in parallel: transmit bytes.\n yield bytes\n\n // 3. If fetchParams\u2019s process request body is non-null, then run\n // fetchParams\u2019s process request body given bytes\u2019s length.\n fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)\n }\n\n // 2. Let processEndOfBody be these steps:\n const processEndOfBody = () => {\n // 1. If fetchParams is canceled, then abort these steps.\n if (isCancelled(fetchParams)) {\n return\n }\n\n // 2. If fetchParams\u2019s process request end-of-body is non-null,\n // then run fetchParams\u2019s process request end-of-body.\n if (fetchParams.processRequestEndOfBody) {\n fetchParams.processRequestEndOfBody()\n }\n }\n\n // 3. Let processBodyError given e be these steps:\n const processBodyError = (e) => {\n // 1. If fetchParams is canceled, then abort these steps.\n if (isCancelled(fetchParams)) {\n return\n }\n\n // 2. If e is an \"AbortError\" DOMException, then abort fetchParams\u2019s controller.\n if (e.name === 'AbortError') {\n fetchParams.controller.abort()\n } else {\n fetchParams.controller.terminate(e)\n }\n }\n\n // 4. Incrementally read request\u2019s body given processBodyChunk, processEndOfBody,\n // processBodyError, and fetchParams\u2019s task destination.\n requestBody = (async function * () {\n try {\n for await (const bytes of request.body.stream) {\n yield * processBodyChunk(bytes)\n }\n processEndOfBody()\n } catch (err) {\n processBodyError(err)\n }\n })()\n }\n\n try {\n // socket is only provided for websockets\n const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })\n\n if (socket) {\n response = makeResponse({ status, statusText, headersList, socket })\n } else {\n const iterator = body[Symbol.asyncIterator]()\n fetchParams.controller.next = () => iterator.next()\n\n response = makeResponse({ status, statusText, headersList })\n }\n } catch (err) {\n // 10. If aborted, then:\n if (err.name === 'AbortError') {\n // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n fetchParams.controller.connection.destroy()\n\n // 2. Return the appropriate network error for fetchParams.\n return makeAppropriateNetworkError(fetchParams, err)\n }\n\n return makeNetworkError(err)\n }\n\n // 11. Let pullAlgorithm be an action that resumes the ongoing fetch\n // if it is suspended.\n const pullAlgorithm = () => {\n return fetchParams.controller.resume()\n }\n\n // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams\u2019s\n // controller with reason, given reason.\n const cancelAlgorithm = (reason) => {\n // If the aborted fetch was already terminated, then we do not\n // need to do anything.\n if (!isCancelled(fetchParams)) {\n fetchParams.controller.abort(reason)\n }\n }\n\n // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by\n // the user agent.\n // TODO\n\n // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object\n // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.\n // TODO\n\n // 15. Let stream be a new ReadableStream.\n // 16. Set up stream with byte reading support with pullAlgorithm set to pullAlgorithm,\n // cancelAlgorithm set to cancelAlgorithm.\n const stream = new ReadableStream(\n {\n async start (controller) {\n fetchParams.controller.controller = controller\n },\n async pull (controller) {\n await pullAlgorithm(controller)\n },\n async cancel (reason) {\n await cancelAlgorithm(reason)\n },\n type: 'bytes'\n }\n )\n\n // 17. Run these steps, but abort when the ongoing fetch is terminated:\n\n // 1. Set response\u2019s body to a new body whose stream is stream.\n response.body = { stream, source: null, length: null }\n\n // 2. If response is not a network error and request\u2019s cache mode is\n // not \"no-store\", then update response in httpCache for request.\n // TODO\n\n // 3. If includeCredentials is true and the user agent is not configured\n // to block cookies for request (see section 7 of [COOKIES]), then run the\n // \"set-cookie-string\" parsing algorithm (see section 5.2 of [COOKIES]) on\n // the value of each header whose name is a byte-case-insensitive match for\n // `Set-Cookie` in response\u2019s header list, if any, and request\u2019s current URL.\n // TODO\n\n // 18. If aborted, then:\n // TODO\n\n // 19. Run these steps in parallel:\n\n // 1. Run these steps, but abort when fetchParams is canceled:\n if (!fetchParams.controller.resume) {\n fetchParams.controller.on('terminated', onAborted)\n }\n\n fetchParams.controller.resume = async () => {\n // 1. While true\n while (true) {\n // 1-3. See onData...\n\n // 4. Set bytes to the result of handling content codings given\n // codings and bytes.\n let bytes\n let isFailure\n try {\n const { done, value } = await fetchParams.controller.next()\n\n if (isAborted(fetchParams)) {\n break\n }\n\n bytes = done ? undefined : value\n } catch (err) {\n if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {\n // zlib doesn't like empty streams.\n bytes = undefined\n } else {\n bytes = err\n\n // err may be propagated from the result of calling readablestream.cancel,\n // which might not be an error. https://github.com/nodejs/undici/issues/2009\n isFailure = true\n }\n }\n\n if (bytes === undefined) {\n // 2. Otherwise, if the bytes transmission for response\u2019s message\n // body is done normally and stream is readable, then close\n // stream, finalize response for fetchParams and response, and\n // abort these in-parallel steps.\n readableStreamClose(fetchParams.controller.controller)\n\n finalizeResponse(fetchParams, response)\n\n return\n }\n\n // 5. Increase timingInfo\u2019s decoded body size by bytes\u2019s length.\n timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n // 6. If bytes is failure, then terminate fetchParams\u2019s controller.\n if (isFailure) {\n fetchParams.controller.terminate(bytes)\n return\n }\n\n // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes\n // into stream.\n const buffer = new Uint8Array(bytes)\n if (buffer.byteLength) {\n fetchParams.controller.controller.enqueue(buffer)\n }\n\n // 8. If stream is errored, then terminate the ongoing fetch.\n if (isErrored(stream)) {\n fetchParams.controller.terminate()\n return\n }\n\n // 9. If stream doesn\u2019t need more data ask the user agent to suspend\n // the ongoing fetch.\n if (fetchParams.controller.controller.desiredSize <= 0) {\n return\n }\n }\n }\n\n // 2. If aborted, then:\n function onAborted (reason) {\n // 2. If fetchParams is aborted, then:\n if (isAborted(fetchParams)) {\n // 1. Set response\u2019s aborted flag.\n response.aborted = true\n\n // 2. If stream is readable, then error stream with the result of\n // deserialize a serialized abort reason given fetchParams\u2019s\n // controller\u2019s serialized abort reason and an\n // implementation-defined realm.\n if (isReadable(stream)) {\n fetchParams.controller.controller.error(\n fetchParams.controller.serializedAbortReason\n )\n }\n } else {\n // 3. Otherwise, if stream is readable, error stream with a TypeError.\n if (isReadable(stream)) {\n fetchParams.controller.controller.error(new TypeError('terminated', {\n cause: isErrorLike(reason) ? reason : undefined\n }))\n }\n }\n\n // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.\n fetchParams.controller.connection.destroy()\n }\n\n // 20. Return response.\n return response\n\n function dispatch ({ body }) {\n const url = requestCurrentURL(request)\n /** @type {import('../..').Agent} */\n const agent = fetchParams.controller.dispatcher\n\n return new Promise((resolve, reject) => agent.dispatch(\n {\n path: url.pathname + url.search,\n origin: url.origin,\n method: request.method,\n body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,\n headers: request.headersList.entries,\n maxRedirections: 0,\n upgrade: request.mode === 'websocket' ? 'websocket' : undefined\n },\n {\n body: null,\n abort: null,\n\n onConnect (abort) {\n // TODO (fix): Do we need connection here?\n const { connection } = fetchParams.controller\n\n // Set timingInfo\u2019s final connection timing info to the result of calling clamp and coarsen\n // connection timing info with connection\u2019s timing info, timingInfo\u2019s post-redirect start\n // time, and fetchParams\u2019s cross-origin isolated capability.\n // TODO: implement connection timing\n timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)\n\n if (connection.destroyed) {\n abort(new DOMException('The operation was aborted.', 'AbortError'))\n } else {\n fetchParams.controller.on('terminated', abort)\n this.abort = connection.abort = abort\n }\n\n // Set timingInfo\u2019s final network-request start time to the coarsened shared current time given\n // fetchParams\u2019s cross-origin isolated capability.\n timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n },\n\n onResponseStarted () {\n // Set timingInfo\u2019s final network-response start time to the coarsened shared current\n // time given fetchParams\u2019s cross-origin isolated capability, immediately after the\n // user agent\u2019s HTTP parser receives the first byte of the response (e.g., frame header\n // bytes for HTTP/2 or response status line for HTTP/1.x).\n timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n },\n\n onHeaders (status, rawHeaders, resume, statusText) {\n if (status < 200) {\n return\n }\n\n /** @type {string[]} */\n let codings = []\n let location = ''\n\n const headersList = new HeadersList()\n\n for (let i = 0; i < rawHeaders.length; i += 2) {\n headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\n }\n const contentEncoding = headersList.get('content-encoding', true)\n if (contentEncoding) {\n // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1\n // \"All content-coding values are case-insensitive...\"\n codings = contentEncoding.toLowerCase().split(',').map((x) => x.trim())\n }\n location = headersList.get('location', true)\n\n this.body = new Readable({ read: resume })\n\n const decoders = []\n\n const willFollow = location && request.redirect === 'follow' &&\n redirectStatusSet.has(status)\n\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding\n if (codings.length !== 0 && request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {\n for (let i = codings.length - 1; i >= 0; --i) {\n const coding = codings[i]\n // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2\n if (coding === 'x-gzip' || coding === 'gzip') {\n decoders.push(zlib.createGunzip({\n // Be less strict when decoding compressed responses, since sometimes\n // servers send slightly invalid responses that are still accepted\n // by common browsers.\n // Always using Z_SYNC_FLUSH is what cURL does.\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n }))\n } else if (coding === 'deflate') {\n decoders.push(createInflate({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n }))\n } else if (coding === 'br') {\n decoders.push(zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n }))\n } else {\n decoders.length = 0\n break\n }\n }\n }\n\n const onError = this.onError.bind(this)\n\n resolve({\n status,\n statusText,\n headersList,\n body: decoders.length\n ? pipeline(this.body, ...decoders, (err) => {\n if (err) {\n this.onError(err)\n }\n }).on('error', onError)\n : this.body.on('error', onError)\n })\n\n return true\n },\n\n onData (chunk) {\n if (fetchParams.controller.dump) {\n return\n }\n\n // 1. If one or more bytes have been transmitted from response\u2019s\n // message body, then:\n\n // 1. Let bytes be the transmitted bytes.\n const bytes = chunk\n\n // 2. Let codings be the result of extracting header list values\n // given `Content-Encoding` and response\u2019s header list.\n // See pullAlgorithm.\n\n // 3. Increase timingInfo\u2019s encoded body size by bytes\u2019s length.\n timingInfo.encodedBodySize += bytes.byteLength\n\n // 4. See pullAlgorithm...\n\n return this.body.push(bytes)\n },\n\n onComplete () {\n if (this.abort) {\n fetchParams.controller.off('terminated', this.abort)\n }\n\n fetchParams.controller.ended = true\n\n this.body.push(null)\n },\n\n onError (error) {\n if (this.abort) {\n fetchParams.controller.off('terminated', this.abort)\n }\n\n this.body?.destroy(error)\n\n fetchParams.controller.terminate(error)\n\n reject(error)\n },\n\n onUpgrade (status, rawHeaders, socket) {\n if (status !== 101) {\n return\n }\n\n const headersList = new HeadersList()\n\n for (let i = 0; i < rawHeaders.length; i += 2) {\n headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\n }\n\n resolve({\n status,\n statusText: STATUS_CODES[status],\n headersList,\n socket\n })\n\n return true\n }\n }\n ))\n }\n}\n\nmodule.exports = {\n fetch,\n Fetch,\n fetching,\n finalizeAndReportTiming\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { isValidHeaderName } = require('../fetch/util')\n\n/**\n * @see https://url.spec.whatwg.org/#concept-url-equals\n * @param {URL} A\n * @param {URL} B\n * @param {boolean | undefined} excludeFragment\n * @returns {boolean}\n */\nfunction urlEquals (A, B, excludeFragment = false) {\n const serializedA = URLSerializer(A, excludeFragment)\n\n const serializedB = URLSerializer(B, excludeFragment)\n\n return serializedA === serializedB\n}\n\n/**\n * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262\n * @param {string} header\n */\nfunction getFieldValues (header) {\n assert(header !== null)\n\n const values = []\n\n for (let value of header.split(',')) {\n value = value.trim()\n\n if (isValidHeaderName(value)) {\n values.push(value)\n }\n }\n\n return values\n}\n\nmodule.exports = {\n urlEquals,\n getFieldValues\n}\n", "'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { urlEquals, getFieldValues } = require('./util')\nconst { kEnumerableProperty, isDisturbed } = require('../../core/util')\nconst { webidl } = require('../fetch/webidl')\nconst { cloneResponse, fromInnerResponse, getResponseState } = require('../fetch/response')\nconst { Request, fromInnerRequest, getRequestState } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require('../fetch/util')\nconst assert = require('node:assert')\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation\n * @typedef {Object} CacheBatchOperation\n * @property {'delete' | 'put'} type\n * @property {any} request\n * @property {any} response\n * @property {import('../../types/cache').CacheQueryOptions} options\n */\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list\n * @typedef {[any, any][]} requestResponseList\n */\n\nclass Cache {\n /**\n * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list\n * @type {requestResponseList}\n */\n #relevantRequestResponseList\n\n constructor () {\n if (arguments[0] !== kConstruct) {\n webidl.illegalConstructor()\n }\n\n webidl.util.markAsUncloneable(this)\n this.#relevantRequestResponseList = arguments[1]\n }\n\n async match (request, options = {}) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.match'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n request = webidl.converters.RequestInfo(request, prefix, 'request')\n options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n const p = this.#internalMatchAll(request, options, 1)\n\n if (p.length === 0) {\n return\n }\n\n return p[0]\n }\n\n async matchAll (request = undefined, options = {}) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.matchAll'\n if (request !== undefined) request = webidl.converters.RequestInfo(request, prefix, 'request')\n options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n return this.#internalMatchAll(request, options)\n }\n\n async add (request) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.add'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n request = webidl.converters.RequestInfo(request, prefix, 'request')\n\n // 1.\n const requests = [request]\n\n // 2.\n const responseArrayPromise = this.addAll(requests)\n\n // 3.\n return await responseArrayPromise\n }\n\n async addAll (requests) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.addAll'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n // 1.\n const responsePromises = []\n\n // 2.\n const requestList = []\n\n // 3.\n for (let request of requests) {\n if (request === undefined) {\n throw webidl.errors.conversionFailed({\n prefix,\n argument: 'Argument 1',\n types: ['undefined is not allowed']\n })\n }\n\n request = webidl.converters.RequestInfo(request)\n\n if (typeof request === 'string') {\n continue\n }\n\n // 3.1\n const r = getRequestState(request)\n\n // 3.2\n if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Expected http/s scheme when method is not GET.'\n })\n }\n }\n\n // 4.\n /** @type {ReturnType<typeof fetching>[]} */\n const fetchControllers = []\n\n // 5.\n for (const request of requests) {\n // 5.1\n const r = getRequestState(new Request(request))\n\n // 5.2\n if (!urlIsHttpHttpsScheme(r.url)) {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Expected http/s scheme.'\n })\n }\n\n // 5.4\n r.initiator = 'fetch'\n r.destination = 'subresource'\n\n // 5.5\n requestList.push(r)\n\n // 5.6\n const responsePromise = createDeferredPromise()\n\n // 5.7\n fetchControllers.push(fetching({\n request: r,\n processResponse (response) {\n // 1.\n if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {\n responsePromise.reject(webidl.errors.exception({\n header: 'Cache.addAll',\n message: 'Received an invalid status code or the request failed.'\n }))\n } else if (response.headersList.contains('vary')) { // 2.\n // 2.1\n const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n // 2.2\n for (const fieldValue of fieldValues) {\n // 2.2.1\n if (fieldValue === '*') {\n responsePromise.reject(webidl.errors.exception({\n header: 'Cache.addAll',\n message: 'invalid vary field value'\n }))\n\n for (const controller of fetchControllers) {\n controller.abort()\n }\n\n return\n }\n }\n }\n },\n processResponseEndOfBody (response) {\n // 1.\n if (response.aborted) {\n responsePromise.reject(new DOMException('aborted', 'AbortError'))\n return\n }\n\n // 2.\n responsePromise.resolve(response)\n }\n }))\n\n // 5.8\n responsePromises.push(responsePromise.promise)\n }\n\n // 6.\n const p = Promise.all(responsePromises)\n\n // 7.\n const responses = await p\n\n // 7.1\n const operations = []\n\n // 7.2\n let index = 0\n\n // 7.3\n for (const response of responses) {\n // 7.3.1\n /** @type {CacheBatchOperation} */\n const operation = {\n type: 'put', // 7.3.2\n request: requestList[index], // 7.3.3\n response // 7.3.4\n }\n\n operations.push(operation) // 7.3.5\n\n index++ // 7.3.6\n }\n\n // 7.5\n const cacheJobPromise = createDeferredPromise()\n\n // 7.6.1\n let errorData = null\n\n // 7.6.2\n try {\n this.#batchCacheOperations(operations)\n } catch (e) {\n errorData = e\n }\n\n // 7.6.3\n queueMicrotask(() => {\n // 7.6.3.1\n if (errorData === null) {\n cacheJobPromise.resolve(undefined)\n } else {\n // 7.6.3.2\n cacheJobPromise.reject(errorData)\n }\n })\n\n // 7.7\n return cacheJobPromise.promise\n }\n\n async put (request, response) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.put'\n webidl.argumentLengthCheck(arguments, 2, prefix)\n\n request = webidl.converters.RequestInfo(request, prefix, 'request')\n response = webidl.converters.Response(response, prefix, 'response')\n\n // 1.\n let innerRequest = null\n\n // 2.\n if (webidl.is.Request(request)) {\n innerRequest = getRequestState(request)\n } else { // 3.\n innerRequest = getRequestState(new Request(request))\n }\n\n // 4.\n if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Expected an http/s scheme when method is not GET'\n })\n }\n\n // 5.\n const innerResponse = getResponseState(response)\n\n // 6.\n if (innerResponse.status === 206) {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Got 206 status'\n })\n }\n\n // 7.\n if (innerResponse.headersList.contains('vary')) {\n // 7.1.\n const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))\n\n // 7.2.\n for (const fieldValue of fieldValues) {\n // 7.2.1\n if (fieldValue === '*') {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Got * vary field value'\n })\n }\n }\n }\n\n // 8.\n if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {\n throw webidl.errors.exception({\n header: prefix,\n message: 'Response body is locked or disturbed'\n })\n }\n\n // 9.\n const clonedResponse = cloneResponse(innerResponse)\n\n // 10.\n const bodyReadPromise = createDeferredPromise()\n\n // 11.\n if (innerResponse.body != null) {\n // 11.1\n const stream = innerResponse.body.stream\n\n // 11.2\n const reader = stream.getReader()\n\n // 11.3\n readAllBytes(reader, bodyReadPromise.resolve, bodyReadPromise.reject)\n } else {\n bodyReadPromise.resolve(undefined)\n }\n\n // 12.\n /** @type {CacheBatchOperation[]} */\n const operations = []\n\n // 13.\n /** @type {CacheBatchOperation} */\n const operation = {\n type: 'put', // 14.\n request: innerRequest, // 15.\n response: clonedResponse // 16.\n }\n\n // 17.\n operations.push(operation)\n\n // 19.\n const bytes = await bodyReadPromise.promise\n\n if (clonedResponse.body != null) {\n clonedResponse.body.source = bytes\n }\n\n // 19.1\n const cacheJobPromise = createDeferredPromise()\n\n // 19.2.1\n let errorData = null\n\n // 19.2.2\n try {\n this.#batchCacheOperations(operations)\n } catch (e) {\n errorData = e\n }\n\n // 19.2.3\n queueMicrotask(() => {\n // 19.2.3.1\n if (errorData === null) {\n cacheJobPromise.resolve()\n } else { // 19.2.3.2\n cacheJobPromise.reject(errorData)\n }\n })\n\n return cacheJobPromise.promise\n }\n\n async delete (request, options = {}) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.delete'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n request = webidl.converters.RequestInfo(request, prefix, 'request')\n options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n /**\n * @type {Request}\n */\n let r = null\n\n if (webidl.is.Request(request)) {\n r = getRequestState(request)\n\n if (r.method !== 'GET' && !options.ignoreMethod) {\n return false\n }\n } else {\n assert(typeof request === 'string')\n\n r = getRequestState(new Request(request))\n }\n\n /** @type {CacheBatchOperation[]} */\n const operations = []\n\n /** @type {CacheBatchOperation} */\n const operation = {\n type: 'delete',\n request: r,\n options\n }\n\n operations.push(operation)\n\n const cacheJobPromise = createDeferredPromise()\n\n let errorData = null\n let requestResponses\n\n try {\n requestResponses = this.#batchCacheOperations(operations)\n } catch (e) {\n errorData = e\n }\n\n queueMicrotask(() => {\n if (errorData === null) {\n cacheJobPromise.resolve(!!requestResponses?.length)\n } else {\n cacheJobPromise.reject(errorData)\n }\n })\n\n return cacheJobPromise.promise\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys\n * @param {any} request\n * @param {import('../../types/cache').CacheQueryOptions} options\n * @returns {Promise<readonly Request[]>}\n */\n async keys (request = undefined, options = {}) {\n webidl.brandCheck(this, Cache)\n\n const prefix = 'Cache.keys'\n\n if (request !== undefined) request = webidl.converters.RequestInfo(request, prefix, 'request')\n options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n // 1.\n let r = null\n\n // 2.\n if (request !== undefined) {\n // 2.1\n if (webidl.is.Request(request)) {\n // 2.1.1\n r = getRequestState(request)\n\n // 2.1.2\n if (r.method !== 'GET' && !options.ignoreMethod) {\n return []\n }\n } else if (typeof request === 'string') { // 2.2\n r = getRequestState(new Request(request))\n }\n }\n\n // 4.\n const promise = createDeferredPromise()\n\n // 5.\n // 5.1\n const requests = []\n\n // 5.2\n if (request === undefined) {\n // 5.2.1\n for (const requestResponse of this.#relevantRequestResponseList) {\n // 5.2.1.1\n requests.push(requestResponse[0])\n }\n } else { // 5.3\n // 5.3.1\n const requestResponses = this.#queryCache(r, options)\n\n // 5.3.2\n for (const requestResponse of requestResponses) {\n // 5.3.2.1\n requests.push(requestResponse[0])\n }\n }\n\n // 5.4\n queueMicrotask(() => {\n // 5.4.1\n const requestList = []\n\n // 5.4.2\n for (const request of requests) {\n const requestObject = fromInnerRequest(\n request,\n undefined,\n new AbortController().signal,\n 'immutable'\n )\n // 5.4.2.1\n requestList.push(requestObject)\n }\n\n // 5.4.3\n promise.resolve(Object.freeze(requestList))\n })\n\n return promise.promise\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm\n * @param {CacheBatchOperation[]} operations\n * @returns {requestResponseList}\n */\n #batchCacheOperations (operations) {\n // 1.\n const cache = this.#relevantRequestResponseList\n\n // 2.\n const backupCache = [...cache]\n\n // 3.\n const addedItems = []\n\n // 4.1\n const resultList = []\n\n try {\n // 4.2\n for (const operation of operations) {\n // 4.2.1\n if (operation.type !== 'delete' && operation.type !== 'put') {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'operation type does not match \"delete\" or \"put\"'\n })\n }\n\n // 4.2.2\n if (operation.type === 'delete' && operation.response != null) {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'delete operation should not have an associated response'\n })\n }\n\n // 4.2.3\n if (this.#queryCache(operation.request, operation.options, addedItems).length) {\n throw new DOMException('???', 'InvalidStateError')\n }\n\n // 4.2.4\n let requestResponses\n\n // 4.2.5\n if (operation.type === 'delete') {\n // 4.2.5.1\n requestResponses = this.#queryCache(operation.request, operation.options)\n\n // TODO: the spec is wrong, this is needed to pass WPTs\n if (requestResponses.length === 0) {\n return []\n }\n\n // 4.2.5.2\n for (const requestResponse of requestResponses) {\n const idx = cache.indexOf(requestResponse)\n assert(idx !== -1)\n\n // 4.2.5.2.1\n cache.splice(idx, 1)\n }\n } else if (operation.type === 'put') { // 4.2.6\n // 4.2.6.1\n if (operation.response == null) {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'put operation should have an associated response'\n })\n }\n\n // 4.2.6.2\n const r = operation.request\n\n // 4.2.6.3\n if (!urlIsHttpHttpsScheme(r.url)) {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'expected http or https scheme'\n })\n }\n\n // 4.2.6.4\n if (r.method !== 'GET') {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'not get method'\n })\n }\n\n // 4.2.6.5\n if (operation.options != null) {\n throw webidl.errors.exception({\n header: 'Cache.#batchCacheOperations',\n message: 'options must not be defined'\n })\n }\n\n // 4.2.6.6\n requestResponses = this.#queryCache(operation.request)\n\n // 4.2.6.7\n for (const requestResponse of requestResponses) {\n const idx = cache.indexOf(requestResponse)\n assert(idx !== -1)\n\n // 4.2.6.7.1\n cache.splice(idx, 1)\n }\n\n // 4.2.6.8\n cache.push([operation.request, operation.response])\n\n // 4.2.6.10\n addedItems.push([operation.request, operation.response])\n }\n\n // 4.2.7\n resultList.push([operation.request, operation.response])\n }\n\n // 4.3\n return resultList\n } catch (e) { // 5.\n // 5.1\n this.#relevantRequestResponseList.length = 0\n\n // 5.2\n this.#relevantRequestResponseList = backupCache\n\n // 5.3\n throw e\n }\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#query-cache\n * @param {any} requestQuery\n * @param {import('../../types/cache').CacheQueryOptions} options\n * @param {requestResponseList} targetStorage\n * @returns {requestResponseList}\n */\n #queryCache (requestQuery, options, targetStorage) {\n /** @type {requestResponseList} */\n const resultList = []\n\n const storage = targetStorage ?? this.#relevantRequestResponseList\n\n for (const requestResponse of storage) {\n const [cachedRequest, cachedResponse] = requestResponse\n if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {\n resultList.push(requestResponse)\n }\n }\n\n return resultList\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm\n * @param {any} requestQuery\n * @param {any} request\n * @param {any | null} response\n * @param {import('../../types/cache').CacheQueryOptions | undefined} options\n * @returns {boolean}\n */\n #requestMatchesCachedItem (requestQuery, request, response = null, options) {\n // if (options?.ignoreMethod === false && request.method === 'GET') {\n // return false\n // }\n\n const queryURL = new URL(requestQuery.url)\n\n const cachedURL = new URL(request.url)\n\n if (options?.ignoreSearch) {\n cachedURL.search = ''\n\n queryURL.search = ''\n }\n\n if (!urlEquals(queryURL, cachedURL, true)) {\n return false\n }\n\n if (\n response == null ||\n options?.ignoreVary ||\n !response.headersList.contains('vary')\n ) {\n return true\n }\n\n const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n for (const fieldValue of fieldValues) {\n if (fieldValue === '*') {\n return false\n }\n\n const requestValue = request.headersList.get(fieldValue)\n const queryValue = requestQuery.headersList.get(fieldValue)\n\n // If one has the header and the other doesn't, or one has\n // a different value than the other, return false\n if (requestValue !== queryValue) {\n return false\n }\n }\n\n return true\n }\n\n #internalMatchAll (request, options, maxResponses = Infinity) {\n // 1.\n let r = null\n\n // 2.\n if (request !== undefined) {\n if (webidl.is.Request(request)) {\n // 2.1.1\n r = getRequestState(request)\n\n // 2.1.2\n if (r.method !== 'GET' && !options.ignoreMethod) {\n return []\n }\n } else if (typeof request === 'string') {\n // 2.2.1\n r = getRequestState(new Request(request))\n }\n }\n\n // 5.\n // 5.1\n const responses = []\n\n // 5.2\n if (request === undefined) {\n // 5.2.1\n for (const requestResponse of this.#relevantRequestResponseList) {\n responses.push(requestResponse[1])\n }\n } else { // 5.3\n // 5.3.1\n const requestResponses = this.#queryCache(r, options)\n\n // 5.3.2\n for (const requestResponse of requestResponses) {\n responses.push(requestResponse[1])\n }\n }\n\n // 5.4\n // We don't implement CORs so we don't need to loop over the responses, yay!\n\n // 5.5.1\n const responseList = []\n\n // 5.5.2\n for (const response of responses) {\n // 5.5.2.1\n const responseObject = fromInnerResponse(response, 'immutable')\n\n responseList.push(responseObject.clone())\n\n if (responseList.length >= maxResponses) {\n break\n }\n }\n\n // 6.\n return Object.freeze(responseList)\n }\n}\n\nObject.defineProperties(Cache.prototype, {\n [Symbol.toStringTag]: {\n value: 'Cache',\n configurable: true\n },\n match: kEnumerableProperty,\n matchAll: kEnumerableProperty,\n add: kEnumerableProperty,\n addAll: kEnumerableProperty,\n put: kEnumerableProperty,\n delete: kEnumerableProperty,\n keys: kEnumerableProperty\n})\n\nconst cacheQueryOptionConverters = [\n {\n key: 'ignoreSearch',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'ignoreMethod',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'ignoreVary',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n }\n]\n\nwebidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)\n\nwebidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([\n ...cacheQueryOptionConverters,\n {\n key: 'cacheName',\n converter: webidl.converters.DOMString\n }\n])\n\nwebidl.converters.Response = webidl.interfaceConverter(\n webidl.is.Response,\n 'Response'\n)\n\nwebidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter(\n webidl.converters.RequestInfo\n)\n\nmodule.exports = {\n Cache\n}\n", "'use strict'\n\nconst { Cache } = require('./cache')\nconst { webidl } = require('../fetch/webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\nclass CacheStorage {\n /**\n * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map\n * @type {Map<string, import('./cache').requestResponseList}\n */\n #caches = new Map()\n\n constructor () {\n if (arguments[0] !== kConstruct) {\n webidl.illegalConstructor()\n }\n\n webidl.util.markAsUncloneable(this)\n }\n\n async match (request, options = {}) {\n webidl.brandCheck(this, CacheStorage)\n webidl.argumentLengthCheck(arguments, 1, 'CacheStorage.match')\n\n request = webidl.converters.RequestInfo(request)\n options = webidl.converters.MultiCacheQueryOptions(options)\n\n // 1.\n if (options.cacheName != null) {\n // 1.1.1.1\n if (this.#caches.has(options.cacheName)) {\n // 1.1.1.1.1\n const cacheList = this.#caches.get(options.cacheName)\n const cache = new Cache(kConstruct, cacheList)\n\n return await cache.match(request, options)\n }\n } else { // 2.\n // 2.2\n for (const cacheList of this.#caches.values()) {\n const cache = new Cache(kConstruct, cacheList)\n\n // 2.2.1.2\n const response = await cache.match(request, options)\n\n if (response !== undefined) {\n return response\n }\n }\n }\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#cache-storage-has\n * @param {string} cacheName\n * @returns {Promise<boolean>}\n */\n async has (cacheName) {\n webidl.brandCheck(this, CacheStorage)\n\n const prefix = 'CacheStorage.has'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n // 2.1.1\n // 2.2\n return this.#caches.has(cacheName)\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open\n * @param {string} cacheName\n * @returns {Promise<Cache>}\n */\n async open (cacheName) {\n webidl.brandCheck(this, CacheStorage)\n\n const prefix = 'CacheStorage.open'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n // 2.1\n if (this.#caches.has(cacheName)) {\n // await caches.open('v1') !== await caches.open('v1')\n\n // 2.1.1\n const cache = this.#caches.get(cacheName)\n\n // 2.1.1.1\n return new Cache(kConstruct, cache)\n }\n\n // 2.2\n const cache = []\n\n // 2.3\n this.#caches.set(cacheName, cache)\n\n // 2.4\n return new Cache(kConstruct, cache)\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete\n * @param {string} cacheName\n * @returns {Promise<boolean>}\n */\n async delete (cacheName) {\n webidl.brandCheck(this, CacheStorage)\n\n const prefix = 'CacheStorage.delete'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n return this.#caches.delete(cacheName)\n }\n\n /**\n * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys\n * @returns {Promise<string[]>}\n */\n async keys () {\n webidl.brandCheck(this, CacheStorage)\n\n // 2.1\n const keys = this.#caches.keys()\n\n // 2.2\n return [...keys]\n }\n}\n\nObject.defineProperties(CacheStorage.prototype, {\n [Symbol.toStringTag]: {\n value: 'CacheStorage',\n configurable: true\n },\n match: kEnumerableProperty,\n has: kEnumerableProperty,\n open: kEnumerableProperty,\n delete: kEnumerableProperty,\n keys: kEnumerableProperty\n})\n\nmodule.exports = {\n CacheStorage\n}\n", "'use strict'\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size\nconst maxAttributeValueSize = 1024\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size\nconst maxNameValuePairSize = 4096\n\nmodule.exports = {\n maxAttributeValueSize,\n maxNameValuePairSize\n}\n", "'use strict'\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction isCTLExcludingHtab (value) {\n for (let i = 0; i < value.length; ++i) {\n const code = value.charCodeAt(i)\n\n if (\n (code >= 0x00 && code <= 0x08) ||\n (code >= 0x0A && code <= 0x1F) ||\n code === 0x7F\n ) {\n return true\n }\n }\n return false\n}\n\n/**\n CHAR = <any US-ASCII character (octets 0 - 127)>\n token = 1*<any CHAR except CTLs or separators>\n separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n | \",\" | \";\" | \":\" | \"\\\" | <\">\n | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n | \"{\" | \"}\" | SP | HT\n * @param {string} name\n */\nfunction validateCookieName (name) {\n for (let i = 0; i < name.length; ++i) {\n const code = name.charCodeAt(i)\n\n if (\n code < 0x21 || // exclude CTLs (0-31), SP and HT\n code > 0x7E || // exclude non-ascii and DEL\n code === 0x22 || // \"\n code === 0x28 || // (\n code === 0x29 || // )\n code === 0x3C || // <\n code === 0x3E || // >\n code === 0x40 || // @\n code === 0x2C || // ,\n code === 0x3B || // ;\n code === 0x3A || // :\n code === 0x5C || // \\\n code === 0x2F || // /\n code === 0x5B || // [\n code === 0x5D || // ]\n code === 0x3F || // ?\n code === 0x3D || // =\n code === 0x7B || // {\n code === 0x7D // }\n ) {\n throw new Error('Invalid cookie name')\n }\n }\n}\n\n/**\n cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n ; US-ASCII characters excluding CTLs,\n ; whitespace DQUOTE, comma, semicolon,\n ; and backslash\n * @param {string} value\n */\nfunction validateCookieValue (value) {\n let len = value.length\n let i = 0\n\n // if the value is wrapped in DQUOTE\n if (value[0] === '\"') {\n if (len === 1 || value[len - 1] !== '\"') {\n throw new Error('Invalid cookie value')\n }\n --len\n ++i\n }\n\n while (i < len) {\n const code = value.charCodeAt(i++)\n\n if (\n code < 0x21 || // exclude CTLs (0-31)\n code > 0x7E || // non-ascii and DEL (127)\n code === 0x22 || // \"\n code === 0x2C || // ,\n code === 0x3B || // ;\n code === 0x5C // \\\n ) {\n throw new Error('Invalid cookie value')\n }\n }\n}\n\n/**\n * path-value = <any CHAR except CTLs or \";\">\n * @param {string} path\n */\nfunction validateCookiePath (path) {\n for (let i = 0; i < path.length; ++i) {\n const code = path.charCodeAt(i)\n\n if (\n code < 0x20 || // exclude CTLs (0-31)\n code === 0x7F || // DEL\n code === 0x3B // ;\n ) {\n throw new Error('Invalid cookie path')\n }\n }\n}\n\n/**\n * I have no idea why these values aren't allowed to be honest,\n * but Deno tests these. - Khafra\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n if (\n domain.startsWith('-') ||\n domain.endsWith('.') ||\n domain.endsWith('-')\n ) {\n throw new Error('Invalid cookie domain')\n }\n}\n\nconst IMFDays = [\n 'Sun', 'Mon', 'Tue', 'Wed',\n 'Thu', 'Fri', 'Sat'\n]\n\nconst IMFMonths = [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n]\n\nconst IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, '0'))\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1\n * @param {number|Date} date\n IMF-fixdate = day-name \",\" SP date1 SP time-of-day SP GMT\n ; fixed length/zone/capitalization subset of the format\n ; see Section 3.3 of [RFC5322]\n\n day-name = %x4D.6F.6E ; \"Mon\", case-sensitive\n / %x54.75.65 ; \"Tue\", case-sensitive\n / %x57.65.64 ; \"Wed\", case-sensitive\n / %x54.68.75 ; \"Thu\", case-sensitive\n / %x46.72.69 ; \"Fri\", case-sensitive\n / %x53.61.74 ; \"Sat\", case-sensitive\n / %x53.75.6E ; \"Sun\", case-sensitive\n date1 = day SP month SP year\n ; e.g., 02 Jun 1982\n\n day = 2DIGIT\n month = %x4A.61.6E ; \"Jan\", case-sensitive\n / %x46.65.62 ; \"Feb\", case-sensitive\n / %x4D.61.72 ; \"Mar\", case-sensitive\n / %x41.70.72 ; \"Apr\", case-sensitive\n / %x4D.61.79 ; \"May\", case-sensitive\n / %x4A.75.6E ; \"Jun\", case-sensitive\n / %x4A.75.6C ; \"Jul\", case-sensitive\n / %x41.75.67 ; \"Aug\", case-sensitive\n / %x53.65.70 ; \"Sep\", case-sensitive\n / %x4F.63.74 ; \"Oct\", case-sensitive\n / %x4E.6F.76 ; \"Nov\", case-sensitive\n / %x44.65.63 ; \"Dec\", case-sensitive\n year = 4DIGIT\n\n GMT = %x47.4D.54 ; \"GMT\", case-sensitive\n\n time-of-day = hour \":\" minute \":\" second\n ; 00:00:00 - 23:59:60 (leap second)\n\n hour = 2DIGIT\n minute = 2DIGIT\n second = 2DIGIT\n */\nfunction toIMFDate (date) {\n if (typeof date === 'number') {\n date = new Date(date)\n }\n\n return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`\n}\n\n/**\n max-age-av = \"Max-Age=\" non-zero-digit *DIGIT\n ; In practice, both expires-av and max-age-av\n ; are limited to dates representable by the\n ; user agent.\n * @param {number} maxAge\n */\nfunction validateCookieMaxAge (maxAge) {\n if (maxAge < 0) {\n throw new Error('Invalid cookie max-age')\n }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1\n * @param {import('./index').Cookie} cookie\n */\nfunction stringify (cookie) {\n if (cookie.name.length === 0) {\n return null\n }\n\n validateCookieName(cookie.name)\n validateCookieValue(cookie.value)\n\n const out = [`${cookie.name}=${cookie.value}`]\n\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2\n if (cookie.name.startsWith('__Secure-')) {\n cookie.secure = true\n }\n\n if (cookie.name.startsWith('__Host-')) {\n cookie.secure = true\n cookie.domain = null\n cookie.path = '/'\n }\n\n if (cookie.secure) {\n out.push('Secure')\n }\n\n if (cookie.httpOnly) {\n out.push('HttpOnly')\n }\n\n if (typeof cookie.maxAge === 'number') {\n validateCookieMaxAge(cookie.maxAge)\n out.push(`Max-Age=${cookie.maxAge}`)\n }\n\n if (cookie.domain) {\n validateCookieDomain(cookie.domain)\n out.push(`Domain=${cookie.domain}`)\n }\n\n if (cookie.path) {\n validateCookiePath(cookie.path)\n out.push(`Path=${cookie.path}`)\n }\n\n if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {\n out.push(`Expires=${toIMFDate(cookie.expires)}`)\n }\n\n if (cookie.sameSite) {\n out.push(`SameSite=${cookie.sameSite}`)\n }\n\n for (const part of cookie.unparsed) {\n if (!part.includes('=')) {\n throw new Error('Invalid unparsed')\n }\n\n const [key, ...value] = part.split('=')\n\n out.push(`${key.trim()}=${value.join('=')}`)\n }\n\n return out.join('; ')\n}\n\nmodule.exports = {\n isCTLExcludingHtab,\n validateCookieName,\n validateCookiePath,\n validateCookieValue,\n toIMFDate,\n stringify\n}\n", "'use strict'\n\nconst { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst { collectASequenceOfCodePointsFast } = require('../fetch/data-url')\nconst assert = require('node:assert')\nconst { unescape } = require('node:querystring')\n\n/**\n * @description Parses the field-value attributes of a set-cookie header string.\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} header\n * @returns {import('./index').Cookie|null} if the header is invalid, null will be returned\n */\nfunction parseSetCookie (header) {\n // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F\n // character (CTL characters excluding HTAB): Abort these steps and\n // ignore the set-cookie-string entirely.\n if (isCTLExcludingHtab(header)) {\n return null\n }\n\n let nameValuePair = ''\n let unparsedAttributes = ''\n let name = ''\n let value = ''\n\n // 2. If the set-cookie-string contains a %x3B (\";\") character:\n if (header.includes(';')) {\n // 1. The name-value-pair string consists of the characters up to,\n // but not including, the first %x3B (\";\"), and the unparsed-\n // attributes consist of the remainder of the set-cookie-string\n // (including the %x3B (\";\") in question).\n const position = { position: 0 }\n\n nameValuePair = collectASequenceOfCodePointsFast(';', header, position)\n unparsedAttributes = header.slice(position.position)\n } else {\n // Otherwise:\n\n // 1. The name-value-pair string consists of all the characters\n // contained in the set-cookie-string, and the unparsed-\n // attributes is the empty string.\n nameValuePair = header\n }\n\n // 3. If the name-value-pair string lacks a %x3D (\"=\") character, then\n // the name string is empty, and the value string is the value of\n // name-value-pair.\n if (!nameValuePair.includes('=')) {\n value = nameValuePair\n } else {\n // Otherwise, the name string consists of the characters up to, but\n // not including, the first %x3D (\"=\") character, and the (possibly\n // empty) value string consists of the characters after the first\n // %x3D (\"=\") character.\n const position = { position: 0 }\n name = collectASequenceOfCodePointsFast(\n '=',\n nameValuePair,\n position\n )\n value = nameValuePair.slice(position.position + 1)\n }\n\n // 4. Remove any leading or trailing WSP characters from the name\n // string and the value string.\n name = name.trim()\n value = value.trim()\n\n // 5. If the sum of the lengths of the name string and the value string\n // is more than 4096 octets, abort these steps and ignore the set-\n // cookie-string entirely.\n if (name.length + value.length > maxNameValuePairSize) {\n return null\n }\n\n // 6. The cookie-name is the name string, and the cookie-value is the\n // value string.\n // https://datatracker.ietf.org/doc/html/rfc6265\n // To maximize compatibility with user agents, servers that wish to\n // store arbitrary data in a cookie-value SHOULD encode that data, for\n // example, using Base64 [RFC4648].\n return {\n name, value: unescape(value), ...parseUnparsedAttributes(unparsedAttributes)\n }\n}\n\n/**\n * Parses the remaining attributes of a set-cookie header\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} unparsedAttributes\n * @param {Object.<string, unknown>} [cookieAttributeList={}]\n */\nfunction parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {\n // 1. If the unparsed-attributes string is empty, skip the rest of\n // these steps.\n if (unparsedAttributes.length === 0) {\n return cookieAttributeList\n }\n\n // 2. Discard the first character of the unparsed-attributes (which\n // will be a %x3B (\";\") character).\n assert(unparsedAttributes[0] === ';')\n unparsedAttributes = unparsedAttributes.slice(1)\n\n let cookieAv = ''\n\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n if (unparsedAttributes.includes(';')) {\n // 1. Consume the characters of the unparsed-attributes up to, but\n // not including, the first %x3B (\";\") character.\n cookieAv = collectASequenceOfCodePointsFast(\n ';',\n unparsedAttributes,\n { position: 0 }\n )\n unparsedAttributes = unparsedAttributes.slice(cookieAv.length)\n } else {\n // Otherwise:\n\n // 1. Consume the remainder of the unparsed-attributes.\n cookieAv = unparsedAttributes\n unparsedAttributes = ''\n }\n\n // Let the cookie-av string be the characters consumed in this step.\n\n let attributeName = ''\n let attributeValue = ''\n\n // 4. If the cookie-av string contains a %x3D (\"=\") character:\n if (cookieAv.includes('=')) {\n // 1. The (possibly empty) attribute-name string consists of the\n // characters up to, but not including, the first %x3D (\"=\")\n // character, and the (possibly empty) attribute-value string\n // consists of the characters after the first %x3D (\"=\")\n // character.\n const position = { position: 0 }\n\n attributeName = collectASequenceOfCodePointsFast(\n '=',\n cookieAv,\n position\n )\n attributeValue = cookieAv.slice(position.position + 1)\n } else {\n // Otherwise:\n\n // 1. The attribute-name string consists of the entire cookie-av\n // string, and the attribute-value string is empty.\n attributeName = cookieAv\n }\n\n // 5. Remove any leading or trailing WSP characters from the attribute-\n // name string and the attribute-value string.\n attributeName = attributeName.trim()\n attributeValue = attributeValue.trim()\n\n // 6. If the attribute-value is longer than 1024 octets, ignore the\n // cookie-av string and return to Step 1 of this algorithm.\n if (attributeValue.length > maxAttributeValueSize) {\n return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n }\n\n // 7. Process the attribute-name and attribute-value according to the\n // requirements in the following subsections. (Notice that\n // attributes with unrecognized attribute-names are ignored.)\n const attributeNameLowercase = attributeName.toLowerCase()\n\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1\n // If the attribute-name case-insensitively matches the string\n // \"Expires\", the user agent MUST process the cookie-av as follows.\n if (attributeNameLowercase === 'expires') {\n // 1. Let the expiry-time be the result of parsing the attribute-value\n // as cookie-date (see Section 5.1.1).\n const expiryTime = new Date(attributeValue)\n\n // 2. If the attribute-value failed to parse as a cookie date, ignore\n // the cookie-av.\n\n cookieAttributeList.expires = expiryTime\n } else if (attributeNameLowercase === 'max-age') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2\n // If the attribute-name case-insensitively matches the string \"Max-\n // Age\", the user agent MUST process the cookie-av as follows.\n\n // 1. If the first character of the attribute-value is not a DIGIT or a\n // \"-\" character, ignore the cookie-av.\n const charCode = attributeValue.charCodeAt(0)\n\n if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {\n return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n }\n\n // 2. If the remainder of attribute-value contains a non-DIGIT\n // character, ignore the cookie-av.\n if (!/^\\d+$/.test(attributeValue)) {\n return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n }\n\n // 3. Let delta-seconds be the attribute-value converted to an integer.\n const deltaSeconds = Number(attributeValue)\n\n // 4. Let cookie-age-limit be the maximum age of the cookie (which\n // SHOULD be 400 days or less, see Section 4.1.2.2).\n\n // 5. Set delta-seconds to the smaller of its present value and cookie-\n // age-limit.\n // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)\n\n // 6. If delta-seconds is less than or equal to zero (0), let expiry-\n // time be the earliest representable date and time. Otherwise, let\n // the expiry-time be the current date and time plus delta-seconds\n // seconds.\n // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds\n\n // 7. Append an attribute to the cookie-attribute-list with an\n // attribute-name of Max-Age and an attribute-value of expiry-time.\n cookieAttributeList.maxAge = deltaSeconds\n } else if (attributeNameLowercase === 'domain') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3\n // If the attribute-name case-insensitively matches the string \"Domain\",\n // the user agent MUST process the cookie-av as follows.\n\n // 1. Let cookie-domain be the attribute-value.\n let cookieDomain = attributeValue\n\n // 2. If cookie-domain starts with %x2E (\".\"), let cookie-domain be\n // cookie-domain without its leading %x2E (\".\").\n if (cookieDomain[0] === '.') {\n cookieDomain = cookieDomain.slice(1)\n }\n\n // 3. Convert the cookie-domain to lower case.\n cookieDomain = cookieDomain.toLowerCase()\n\n // 4. Append an attribute to the cookie-attribute-list with an\n // attribute-name of Domain and an attribute-value of cookie-domain.\n cookieAttributeList.domain = cookieDomain\n } else if (attributeNameLowercase === 'path') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4\n // If the attribute-name case-insensitively matches the string \"Path\",\n // the user agent MUST process the cookie-av as follows.\n\n // 1. If the attribute-value is empty or if the first character of the\n // attribute-value is not %x2F (\"/\"):\n let cookiePath = ''\n if (attributeValue.length === 0 || attributeValue[0] !== '/') {\n // 1. Let cookie-path be the default-path.\n cookiePath = '/'\n } else {\n // Otherwise:\n\n // 1. Let cookie-path be the attribute-value.\n cookiePath = attributeValue\n }\n\n // 2. Append an attribute to the cookie-attribute-list with an\n // attribute-name of Path and an attribute-value of cookie-path.\n cookieAttributeList.path = cookiePath\n } else if (attributeNameLowercase === 'secure') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5\n // If the attribute-name case-insensitively matches the string \"Secure\",\n // the user agent MUST append an attribute to the cookie-attribute-list\n // with an attribute-name of Secure and an empty attribute-value.\n\n cookieAttributeList.secure = true\n } else if (attributeNameLowercase === 'httponly') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6\n // If the attribute-name case-insensitively matches the string\n // \"HttpOnly\", the user agent MUST append an attribute to the cookie-\n // attribute-list with an attribute-name of HttpOnly and an empty\n // attribute-value.\n\n cookieAttributeList.httpOnly = true\n } else if (attributeNameLowercase === 'samesite') {\n // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7\n // If the attribute-name case-insensitively matches the string\n // \"SameSite\", the user agent MUST process the cookie-av as follows:\n\n // 1. Let enforcement be \"Default\".\n let enforcement = 'Default'\n\n const attributeValueLowercase = attributeValue.toLowerCase()\n // 2. If cookie-av's attribute-value is a case-insensitive match for\n // \"None\", set enforcement to \"None\".\n if (attributeValueLowercase.includes('none')) {\n enforcement = 'None'\n }\n\n // 3. If cookie-av's attribute-value is a case-insensitive match for\n // \"Strict\", set enforcement to \"Strict\".\n if (attributeValueLowercase.includes('strict')) {\n enforcement = 'Strict'\n }\n\n // 4. If cookie-av's attribute-value is a case-insensitive match for\n // \"Lax\", set enforcement to \"Lax\".\n if (attributeValueLowercase.includes('lax')) {\n enforcement = 'Lax'\n }\n\n // 5. Append an attribute to the cookie-attribute-list with an\n // attribute-name of \"SameSite\" and an attribute-value of\n // enforcement.\n cookieAttributeList.sameSite = enforcement\n } else {\n cookieAttributeList.unparsed ??= []\n\n cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)\n }\n\n // 8. Return to Step 1 of this algorithm.\n return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n}\n\nmodule.exports = {\n parseSetCookie,\n parseUnparsedAttributes\n}\n", "'use strict'\n\nconst { parseSetCookie } = require('./parse')\nconst { stringify } = require('./util')\nconst { webidl } = require('../fetch/webidl')\nconst { Headers } = require('../fetch/headers')\n\nconst brandChecks = webidl.brandCheckMultiple([Headers, globalThis.Headers].filter(Boolean))\n\n/**\n * @typedef {Object} Cookie\n * @property {string} name\n * @property {string} value\n * @property {Date|number} [expires]\n * @property {number} [maxAge]\n * @property {string} [domain]\n * @property {string} [path]\n * @property {boolean} [secure]\n * @property {boolean} [httpOnly]\n * @property {'Strict'|'Lax'|'None'} [sameSite]\n * @property {string[]} [unparsed]\n */\n\n/**\n * @param {Headers} headers\n * @returns {Record<string, string>}\n */\nfunction getCookies (headers) {\n webidl.argumentLengthCheck(arguments, 1, 'getCookies')\n\n brandChecks(headers)\n\n const cookie = headers.get('cookie')\n\n /** @type {Record<string, string>} */\n const out = {}\n\n if (!cookie) {\n return out\n }\n\n for (const piece of cookie.split(';')) {\n const [name, ...value] = piece.split('=')\n\n out[name.trim()] = value.join('=')\n }\n\n return out\n}\n\n/**\n * @param {Headers} headers\n * @param {string} name\n * @param {{ path?: string, domain?: string }|undefined} attributes\n * @returns {void}\n */\nfunction deleteCookie (headers, name, attributes) {\n brandChecks(headers)\n\n const prefix = 'deleteCookie'\n webidl.argumentLengthCheck(arguments, 2, prefix)\n\n name = webidl.converters.DOMString(name, prefix, 'name')\n attributes = webidl.converters.DeleteCookieAttributes(attributes)\n\n // Matches behavior of\n // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278\n setCookie(headers, {\n name,\n value: '',\n expires: new Date(0),\n ...attributes\n })\n}\n\n/**\n * @param {Headers} headers\n * @returns {Cookie[]}\n */\nfunction getSetCookies (headers) {\n webidl.argumentLengthCheck(arguments, 1, 'getSetCookies')\n\n brandChecks(headers)\n\n const cookies = headers.getSetCookie()\n\n if (!cookies) {\n return []\n }\n\n return cookies.map((pair) => parseSetCookie(pair))\n}\n\n/**\n * Parses a cookie string\n * @param {string} cookie\n */\nfunction parseCookie (cookie) {\n cookie = webidl.converters.DOMString(cookie)\n\n return parseSetCookie(cookie)\n}\n\n/**\n * @param {Headers} headers\n * @param {Cookie} cookie\n * @returns {void}\n */\nfunction setCookie (headers, cookie) {\n webidl.argumentLengthCheck(arguments, 2, 'setCookie')\n\n brandChecks(headers)\n\n cookie = webidl.converters.Cookie(cookie)\n\n const str = stringify(cookie)\n\n if (str) {\n headers.append('set-cookie', str, true)\n }\n}\n\nwebidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([\n {\n converter: webidl.nullableConverter(webidl.converters.DOMString),\n key: 'path',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters.DOMString),\n key: 'domain',\n defaultValue: () => null\n }\n])\n\nwebidl.converters.Cookie = webidl.dictionaryConverter([\n {\n converter: webidl.converters.DOMString,\n key: 'name'\n },\n {\n converter: webidl.converters.DOMString,\n key: 'value'\n },\n {\n converter: webidl.nullableConverter((value) => {\n if (typeof value === 'number') {\n return webidl.converters['unsigned long long'](value)\n }\n\n return new Date(value)\n }),\n key: 'expires',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters['long long']),\n key: 'maxAge',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters.DOMString),\n key: 'domain',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters.DOMString),\n key: 'path',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters.boolean),\n key: 'secure',\n defaultValue: () => null\n },\n {\n converter: webidl.nullableConverter(webidl.converters.boolean),\n key: 'httpOnly',\n defaultValue: () => null\n },\n {\n converter: webidl.converters.USVString,\n key: 'sameSite',\n allowedValues: ['Strict', 'Lax', 'None']\n },\n {\n converter: webidl.sequenceConverter(webidl.converters.DOMString),\n key: 'unparsed',\n defaultValue: () => new Array(0)\n }\n])\n\nmodule.exports = {\n getCookies,\n deleteCookie,\n getSetCookies,\n setCookie,\n parseCookie\n}\n", "'use strict'\n\nconst { webidl } = require('../fetch/webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n */\nclass MessageEvent extends Event {\n #eventInit\n\n constructor (type, eventInitDict = {}) {\n if (type === kConstruct) {\n super(arguments[1], arguments[2])\n webidl.util.markAsUncloneable(this)\n return\n }\n\n const prefix = 'MessageEvent constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n type = webidl.converters.DOMString(type, prefix, 'type')\n eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, 'eventInitDict')\n\n super(type, eventInitDict)\n\n this.#eventInit = eventInitDict\n webidl.util.markAsUncloneable(this)\n }\n\n get data () {\n webidl.brandCheck(this, MessageEvent)\n\n return this.#eventInit.data\n }\n\n get origin () {\n webidl.brandCheck(this, MessageEvent)\n\n return this.#eventInit.origin\n }\n\n get lastEventId () {\n webidl.brandCheck(this, MessageEvent)\n\n return this.#eventInit.lastEventId\n }\n\n get source () {\n webidl.brandCheck(this, MessageEvent)\n\n return this.#eventInit.source\n }\n\n get ports () {\n webidl.brandCheck(this, MessageEvent)\n\n if (!Object.isFrozen(this.#eventInit.ports)) {\n Object.freeze(this.#eventInit.ports)\n }\n\n return this.#eventInit.ports\n }\n\n initMessageEvent (\n type,\n bubbles = false,\n cancelable = false,\n data = null,\n origin = '',\n lastEventId = '',\n source = null,\n ports = []\n ) {\n webidl.brandCheck(this, MessageEvent)\n\n webidl.argumentLengthCheck(arguments, 1, 'MessageEvent.initMessageEvent')\n\n return new MessageEvent(type, {\n bubbles, cancelable, data, origin, lastEventId, source, ports\n })\n }\n\n static createFastMessageEvent (type, init) {\n const messageEvent = new MessageEvent(kConstruct, type, init)\n messageEvent.#eventInit = init\n messageEvent.#eventInit.data ??= null\n messageEvent.#eventInit.origin ??= ''\n messageEvent.#eventInit.lastEventId ??= ''\n messageEvent.#eventInit.source ??= null\n messageEvent.#eventInit.ports ??= []\n return messageEvent\n }\n}\n\nconst { createFastMessageEvent } = MessageEvent\ndelete MessageEvent.createFastMessageEvent\n\n/**\n * @see https://websockets.spec.whatwg.org/#the-closeevent-interface\n */\nclass CloseEvent extends Event {\n #eventInit\n\n constructor (type, eventInitDict = {}) {\n const prefix = 'CloseEvent constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n type = webidl.converters.DOMString(type, prefix, 'type')\n eventInitDict = webidl.converters.CloseEventInit(eventInitDict)\n\n super(type, eventInitDict)\n\n this.#eventInit = eventInitDict\n webidl.util.markAsUncloneable(this)\n }\n\n get wasClean () {\n webidl.brandCheck(this, CloseEvent)\n\n return this.#eventInit.wasClean\n }\n\n get code () {\n webidl.brandCheck(this, CloseEvent)\n\n return this.#eventInit.code\n }\n\n get reason () {\n webidl.brandCheck(this, CloseEvent)\n\n return this.#eventInit.reason\n }\n}\n\n// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface\nclass ErrorEvent extends Event {\n #eventInit\n\n constructor (type, eventInitDict) {\n const prefix = 'ErrorEvent constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n super(type, eventInitDict)\n webidl.util.markAsUncloneable(this)\n\n type = webidl.converters.DOMString(type, prefix, 'type')\n eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})\n\n this.#eventInit = eventInitDict\n }\n\n get message () {\n webidl.brandCheck(this, ErrorEvent)\n\n return this.#eventInit.message\n }\n\n get filename () {\n webidl.brandCheck(this, ErrorEvent)\n\n return this.#eventInit.filename\n }\n\n get lineno () {\n webidl.brandCheck(this, ErrorEvent)\n\n return this.#eventInit.lineno\n }\n\n get colno () {\n webidl.brandCheck(this, ErrorEvent)\n\n return this.#eventInit.colno\n }\n\n get error () {\n webidl.brandCheck(this, ErrorEvent)\n\n return this.#eventInit.error\n }\n}\n\nObject.defineProperties(MessageEvent.prototype, {\n [Symbol.toStringTag]: {\n value: 'MessageEvent',\n configurable: true\n },\n data: kEnumerableProperty,\n origin: kEnumerableProperty,\n lastEventId: kEnumerableProperty,\n source: kEnumerableProperty,\n ports: kEnumerableProperty,\n initMessageEvent: kEnumerableProperty\n})\n\nObject.defineProperties(CloseEvent.prototype, {\n [Symbol.toStringTag]: {\n value: 'CloseEvent',\n configurable: true\n },\n reason: kEnumerableProperty,\n code: kEnumerableProperty,\n wasClean: kEnumerableProperty\n})\n\nObject.defineProperties(ErrorEvent.prototype, {\n [Symbol.toStringTag]: {\n value: 'ErrorEvent',\n configurable: true\n },\n message: kEnumerableProperty,\n filename: kEnumerableProperty,\n lineno: kEnumerableProperty,\n colno: kEnumerableProperty,\n error: kEnumerableProperty\n})\n\nwebidl.converters.MessagePort = webidl.interfaceConverter(\n webidl.is.MessagePort,\n 'MessagePort'\n)\n\nwebidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter(\n webidl.converters.MessagePort\n)\n\nconst eventInit = [\n {\n key: 'bubbles',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'cancelable',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'composed',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n }\n]\n\nwebidl.converters.MessageEventInit = webidl.dictionaryConverter([\n ...eventInit,\n {\n key: 'data',\n converter: webidl.converters.any,\n defaultValue: () => null\n },\n {\n key: 'origin',\n converter: webidl.converters.USVString,\n defaultValue: () => ''\n },\n {\n key: 'lastEventId',\n converter: webidl.converters.DOMString,\n defaultValue: () => ''\n },\n {\n key: 'source',\n // Node doesn't implement WindowProxy or ServiceWorker, so the only\n // valid value for source is a MessagePort.\n converter: webidl.nullableConverter(webidl.converters.MessagePort),\n defaultValue: () => null\n },\n {\n key: 'ports',\n converter: webidl.converters['sequence<MessagePort>'],\n defaultValue: () => new Array(0)\n }\n])\n\nwebidl.converters.CloseEventInit = webidl.dictionaryConverter([\n ...eventInit,\n {\n key: 'wasClean',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'code',\n converter: webidl.converters['unsigned short'],\n defaultValue: () => 0\n },\n {\n key: 'reason',\n converter: webidl.converters.USVString,\n defaultValue: () => ''\n }\n])\n\nwebidl.converters.ErrorEventInit = webidl.dictionaryConverter([\n ...eventInit,\n {\n key: 'message',\n converter: webidl.converters.DOMString,\n defaultValue: () => ''\n },\n {\n key: 'filename',\n converter: webidl.converters.USVString,\n defaultValue: () => ''\n },\n {\n key: 'lineno',\n converter: webidl.converters['unsigned long'],\n defaultValue: () => 0\n },\n {\n key: 'colno',\n converter: webidl.converters['unsigned long'],\n defaultValue: () => 0\n },\n {\n key: 'error',\n converter: webidl.converters.any\n }\n])\n\nmodule.exports = {\n MessageEvent,\n CloseEvent,\n ErrorEvent,\n createFastMessageEvent\n}\n", "'use strict'\n\n/**\n * This is a Globally Unique Identifier unique used to validate that the\n * endpoint accepts websocket connections.\n * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3\n * @type {'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'}\n */\nconst uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\n/**\n * @type {PropertyDescriptor}\n */\nconst staticPropertyDescriptors = {\n enumerable: true,\n writable: false,\n configurable: false\n}\n\n/**\n * The states of the WebSocket connection.\n *\n * @readonly\n * @enum\n * @property {0} CONNECTING\n * @property {1} OPEN\n * @property {2} CLOSING\n * @property {3} CLOSED\n */\nconst states = {\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3\n}\n\n/**\n * @readonly\n * @enum\n * @property {0} NOT_SENT\n * @property {1} PROCESSING\n * @property {2} SENT\n */\nconst sentCloseFrameState = {\n SENT: 1,\n RECEIVED: 2\n}\n\n/**\n * The WebSocket opcodes.\n *\n * @readonly\n * @enum\n * @property {0x0} CONTINUATION\n * @property {0x1} TEXT\n * @property {0x2} BINARY\n * @property {0x8} CLOSE\n * @property {0x9} PING\n * @property {0xA} PONG\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n */\nconst opcodes = {\n CONTINUATION: 0x0,\n TEXT: 0x1,\n BINARY: 0x2,\n CLOSE: 0x8,\n PING: 0x9,\n PONG: 0xA\n}\n\n/**\n * The maximum value for an unsigned 16-bit integer.\n *\n * @type {65535} 2 ** 16 - 1\n */\nconst maxUnsigned16Bit = 65535\n\n/**\n * The states of the parser.\n *\n * @readonly\n * @enum\n * @property {0} INFO\n * @property {2} PAYLOADLENGTH_16\n * @property {3} PAYLOADLENGTH_64\n * @property {4} READ_DATA\n */\nconst parserStates = {\n INFO: 0,\n PAYLOADLENGTH_16: 2,\n PAYLOADLENGTH_64: 3,\n READ_DATA: 4\n}\n\n/**\n * An empty buffer.\n *\n * @type {Buffer}\n */\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\n/**\n * @readonly\n * @property {1} text\n * @property {2} typedArray\n * @property {3} arrayBuffer\n * @property {4} blob\n */\nconst sendHints = {\n text: 1,\n typedArray: 2,\n arrayBuffer: 3,\n blob: 4\n}\n\nmodule.exports = {\n uid,\n sentCloseFrameState,\n staticPropertyDescriptors,\n states,\n opcodes,\n maxUnsigned16Bit,\n parserStates,\n emptyBuffer,\n sendHints\n}\n", "'use strict'\n\nconst { states, opcodes } = require('./constants')\nconst { isUtf8 } = require('node:buffer')\nconst { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require('../fetch/data-url')\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isConnecting (readyState) {\n // If the WebSocket connection is not yet established, and the connection\n // is not yet closed, then the WebSocket connection is in the CONNECTING state.\n return readyState === states.CONNECTING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isEstablished (readyState) {\n // If the server's response is validated as provided for above, it is\n // said that _The WebSocket Connection is Established_ and that the\n // WebSocket Connection is in the OPEN state.\n return readyState === states.OPEN\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosing (readyState) {\n // Upon either sending or receiving a Close control frame, it is said\n // that _The WebSocket Closing Handshake is Started_ and that the\n // WebSocket connection is in the CLOSING state.\n return readyState === states.CLOSING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosed (readyState) {\n return readyState === states.CLOSED\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#concept-event-fire\n * @param {string} e\n * @param {EventTarget} target\n * @param {(...args: ConstructorParameters<typeof Event>) => Event} eventFactory\n * @param {EventInit | undefined} eventInitDict\n * @returns {void}\n */\nfunction fireEvent (e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {\n // 1. If eventConstructor is not given, then let eventConstructor be Event.\n\n // 2. Let event be the result of creating an event given eventConstructor,\n // in the relevant realm of target.\n // 3. Initialize event\u2019s type attribute to e.\n const event = eventFactory(e, eventInitDict)\n\n // 4. Initialize any other IDL attributes of event as described in the\n // invocation of this algorithm.\n\n // 5. Return the result of dispatching event at target, with legacy target\n // override flag set if set.\n target.dispatchEvent(event)\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @param {import('./websocket').Handler} handler\n * @param {number} type Opcode\n * @param {Buffer} data application data\n * @returns {void}\n */\nfunction websocketMessageReceived (handler, type, data) {\n handler.onMessage(type, data)\n}\n\n/**\n * @param {Buffer} buffer\n * @returns {ArrayBuffer}\n */\nfunction toArrayBuffer (buffer) {\n if (buffer.byteLength === buffer.buffer.byteLength) {\n return buffer.buffer\n }\n return new Uint8Array(buffer).buffer\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455\n * @see https://datatracker.ietf.org/doc/html/rfc2616\n * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407\n * @param {string} protocol\n * @returns {boolean}\n */\nfunction isValidSubprotocol (protocol) {\n // If present, this value indicates one\n // or more comma-separated subprotocol the client wishes to speak,\n // ordered by preference. The elements that comprise this value\n // MUST be non-empty strings with characters in the range U+0021 to\n // U+007E not including separator characters as defined in\n // [RFC2616] and MUST all be unique strings.\n if (protocol.length === 0) {\n return false\n }\n\n for (let i = 0; i < protocol.length; ++i) {\n const code = protocol.charCodeAt(i)\n\n if (\n code < 0x21 || // CTL, contains SP (0x20) and HT (0x09)\n code > 0x7E ||\n code === 0x22 || // \"\n code === 0x28 || // (\n code === 0x29 || // )\n code === 0x2C || // ,\n code === 0x2F || // /\n code === 0x3A || // :\n code === 0x3B || // ;\n code === 0x3C || // <\n code === 0x3D || // =\n code === 0x3E || // >\n code === 0x3F || // ?\n code === 0x40 || // @\n code === 0x5B || // [\n code === 0x5C || // \\\n code === 0x5D || // ]\n code === 0x7B || // {\n code === 0x7D // }\n ) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4\n * @param {number} code\n * @returns {boolean}\n */\nfunction isValidStatusCode (code) {\n if (code >= 1000 && code < 1015) {\n return (\n code !== 1004 && // reserved\n code !== 1005 && // \"MUST NOT be set as a status code\"\n code !== 1006 // \"MUST NOT be set as a status code\"\n )\n }\n\n return code >= 3000 && code <= 4999\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.5\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isControlFrame (opcode) {\n return (\n opcode === opcodes.CLOSE ||\n opcode === opcodes.PING ||\n opcode === opcodes.PONG\n )\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isContinuationFrame (opcode) {\n return opcode === opcodes.CONTINUATION\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isTextBinaryFrame (opcode) {\n return opcode === opcodes.TEXT || opcode === opcodes.BINARY\n}\n\n/**\n *\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isValidOpcode (opcode) {\n return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode)\n}\n\n/**\n * Parses a Sec-WebSocket-Extensions header value.\n * @param {string} extensions\n * @returns {Map<string, string>}\n */\n// TODO(@Uzlopak, @KhafraDev): make compliant https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\nfunction parseExtensions (extensions) {\n const position = { position: 0 }\n const extensionList = new Map()\n\n while (position.position < extensions.length) {\n const pair = collectASequenceOfCodePointsFast(';', extensions, position)\n const [name, value = ''] = pair.split('=')\n\n extensionList.set(\n removeHTTPWhitespace(name, true, false),\n removeHTTPWhitespace(value, false, true)\n )\n\n position.position++\n }\n\n return extensionList\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7692#section-7.1.2.2\n * @description \"client-max-window-bits = 1*DIGIT\"\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidClientWindowBits (value) {\n for (let i = 0; i < value.length; i++) {\n const byte = value.charCodeAt(i)\n\n if (byte < 0x30 || byte > 0x39) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @see https://whatpr.org/websockets/48/7b748d3...d5570f3.html#get-a-url-record\n * @param {string} url\n * @param {string} [baseURL]\n */\nfunction getURLRecord (url, baseURL) {\n // 1. Let urlRecord be the result of applying the URL parser to url with baseURL .\n // 2. If urlRecord is failure, then throw a \" SyntaxError \" DOMException .\n let urlRecord\n\n try {\n urlRecord = new URL(url, baseURL)\n } catch (e) {\n throw new DOMException(e, 'SyntaxError')\n }\n\n // 3. If urlRecord \u2019s scheme is \" http \", then set urlRecord \u2019s scheme to \" ws \".\n // 4. Otherwise, if urlRecord \u2019s scheme is \" https \", set urlRecord \u2019s scheme to \" wss \".\n if (urlRecord.protocol === 'http:') {\n urlRecord.protocol = 'ws:'\n } else if (urlRecord.protocol === 'https:') {\n urlRecord.protocol = 'wss:'\n }\n\n // 5. If urlRecord \u2019s scheme is not \" ws \" or \" wss \", then throw a \" SyntaxError \" DOMException .\n if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {\n throw new DOMException('expected a ws: or wss: url', 'SyntaxError')\n }\n\n // If urlRecord \u2019s fragment is non-null, then throw a \" SyntaxError \" DOMException .\n if (urlRecord.hash.length || urlRecord.href.endsWith('#')) {\n throw new DOMException('hash', 'SyntaxError')\n }\n\n // Return urlRecord .\n return urlRecord\n}\n\n// https://whatpr.org/websockets/48.html#validate-close-code-and-reason\nfunction validateCloseCodeAndReason (code, reason) {\n // 1. If code is not null, but is neither an integer equal to\n // 1000 nor an integer in the range 3000 to 4999, inclusive,\n // throw an \"InvalidAccessError\" DOMException.\n if (code !== null) {\n if (code !== 1000 && (code < 3000 || code > 4999)) {\n throw new DOMException('invalid code', 'InvalidAccessError')\n }\n }\n\n // 2. If reason is not null, then:\n if (reason !== null) {\n // 2.1. Let reasonBytes be the result of UTF-8 encoding reason.\n // 2.2. If reasonBytes is longer than 123 bytes, then throw a\n // \"SyntaxError\" DOMException.\n const reasonBytesLength = Buffer.byteLength(reason)\n\n if (reasonBytesLength > 123) {\n throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`, 'SyntaxError')\n }\n }\n}\n\n/**\n * Converts a Buffer to utf-8, even on platforms without icu.\n * @type {(buffer: Buffer) => string}\n */\nconst utf8Decode = (() => {\n if (typeof process.versions.icu === 'string') {\n const fatalDecoder = new TextDecoder('utf-8', { fatal: true })\n return fatalDecoder.decode.bind(fatalDecoder)\n }\n return function (buffer) {\n if (isUtf8(buffer)) {\n return buffer.toString('utf-8')\n }\n throw new TypeError('Invalid utf-8 received.')\n }\n})()\n\nmodule.exports = {\n isConnecting,\n isEstablished,\n isClosing,\n isClosed,\n fireEvent,\n isValidSubprotocol,\n isValidStatusCode,\n websocketMessageReceived,\n utf8Decode,\n isControlFrame,\n isContinuationFrame,\n isTextBinaryFrame,\n isValidOpcode,\n parseExtensions,\n isValidClientWindowBits,\n toArrayBuffer,\n getURLRecord,\n validateCloseCodeAndReason\n}\n", "'use strict'\n\nconst { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\n/** @type {import('crypto')} */\nlet crypto\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\ntry {\n crypto = require('node:crypto')\n/* c8 ignore next 3 */\n} catch {\n crypto = {\n // not full compatibility, but minimum.\n randomFillSync: function randomFillSync (buffer, _offset, _size) {\n for (let i = 0; i < buffer.length; ++i) {\n buffer[i] = Math.random() * 255 | 0\n }\n return buffer\n }\n }\n}\n\nfunction generateMask () {\n if (bufIdx === BUFFER_SIZE) {\n bufIdx = 0\n crypto.randomFillSync((buffer ??= Buffer.allocUnsafeSlow(BUFFER_SIZE)), 0, BUFFER_SIZE)\n }\n return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]\n}\n\nclass WebsocketFrameSend {\n /**\n * @param {Buffer|undefined} data\n */\n constructor (data) {\n this.frameData = data\n }\n\n createFrame (opcode) {\n const frameData = this.frameData\n const maskKey = generateMask()\n const bodyLength = frameData?.byteLength ?? 0\n\n /** @type {number} */\n let payloadLength = bodyLength // 0-125\n let offset = 6\n\n if (bodyLength > maxUnsigned16Bit) {\n offset += 8 // payload length is next 8 bytes\n payloadLength = 127\n } else if (bodyLength > 125) {\n offset += 2 // payload length is next 2 bytes\n payloadLength = 126\n }\n\n const buffer = Buffer.allocUnsafe(bodyLength + offset)\n\n // Clear first 2 bytes, everything else is overwritten\n buffer[0] = buffer[1] = 0\n buffer[0] |= 0x80 // FIN\n buffer[0] = (buffer[0] & 0xF0) + opcode // opcode\n\n /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */\n buffer[offset - 4] = maskKey[0]\n buffer[offset - 3] = maskKey[1]\n buffer[offset - 2] = maskKey[2]\n buffer[offset - 1] = maskKey[3]\n\n buffer[1] = payloadLength\n\n if (payloadLength === 126) {\n buffer.writeUInt16BE(bodyLength, 2)\n } else if (payloadLength === 127) {\n // Clear extended payload length\n buffer[2] = buffer[3] = 0\n buffer.writeUIntBE(bodyLength, 4, 6)\n }\n\n buffer[1] |= 0x80 // MASK\n\n // mask body\n for (let i = 0; i < bodyLength; ++i) {\n buffer[offset + i] = frameData[i] ^ maskKey[i & 3]\n }\n\n return buffer\n }\n\n /**\n * @param {Uint8Array} buffer\n */\n static createFastTextFrame (buffer) {\n const maskKey = generateMask()\n\n const bodyLength = buffer.length\n\n // mask body\n for (let i = 0; i < bodyLength; ++i) {\n buffer[i] ^= maskKey[i & 3]\n }\n\n let payloadLength = bodyLength\n let offset = 6\n\n if (bodyLength > maxUnsigned16Bit) {\n offset += 8 // payload length is next 8 bytes\n payloadLength = 127\n } else if (bodyLength > 125) {\n offset += 2 // payload length is next 2 bytes\n payloadLength = 126\n }\n const head = Buffer.allocUnsafeSlow(offset)\n\n head[0] = 0x80 /* FIN */ | opcodes.TEXT /* opcode TEXT */\n head[1] = payloadLength | 0x80 /* MASK */\n head[offset - 4] = maskKey[0]\n head[offset - 3] = maskKey[1]\n head[offset - 2] = maskKey[2]\n head[offset - 1] = maskKey[3]\n\n if (payloadLength === 126) {\n head.writeUInt16BE(bodyLength, 2)\n } else if (payloadLength === 127) {\n head[2] = head[3] = 0\n head.writeUIntBE(bodyLength, 4, 6)\n }\n\n return [head, buffer]\n }\n}\n\nmodule.exports = {\n WebsocketFrameSend\n}\n", "'use strict'\n\nconst { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require('./constants')\nconst { parseExtensions, isClosed, isClosing, isEstablished, validateCloseCodeAndReason } = require('./util')\nconst { channels } = require('../../core/diagnostics')\nconst { makeRequest } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { Headers, getHeadersList } = require('../fetch/headers')\nconst { getDecodeSplit } = require('../fetch/util')\nconst { WebsocketFrameSend } = require('./frame')\nconst assert = require('node:assert')\n\n/** @type {import('crypto')} */\nlet crypto\ntry {\n crypto = require('node:crypto')\n/* c8 ignore next 3 */\n} catch {\n\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#concept-websocket-establish\n * @param {URL} url\n * @param {string|string[]} protocols\n * @param {import('./websocket').Handler} handler\n * @param {Partial<import('../../../types/websocket').WebSocketInit>} options\n */\nfunction establishWebSocketConnection (url, protocols, client, handler, options) {\n // 1. Let requestURL be a copy of url, with its scheme set to \"http\", if url\u2019s\n // scheme is \"ws\", and to \"https\" otherwise.\n const requestURL = url\n\n requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'\n\n // 2. Let request be a new request, whose URL is requestURL, client is client,\n // service-workers mode is \"none\", referrer is \"no-referrer\", mode is\n // \"websocket\", credentials mode is \"include\", cache mode is \"no-store\" ,\n // and redirect mode is \"error\".\n const request = makeRequest({\n urlList: [requestURL],\n client,\n serviceWorkers: 'none',\n referrer: 'no-referrer',\n mode: 'websocket',\n credentials: 'include',\n cache: 'no-store',\n redirect: 'error'\n })\n\n // Note: undici extension, allow setting custom headers.\n if (options.headers) {\n const headersList = getHeadersList(new Headers(options.headers))\n\n request.headersList = headersList\n }\n\n // 3. Append (`Upgrade`, `websocket`) to request\u2019s header list.\n // 4. Append (`Connection`, `Upgrade`) to request\u2019s header list.\n // Note: both of these are handled by undici currently.\n // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397\n\n // 5. Let keyValue be a nonce consisting of a randomly selected\n // 16-byte value that has been forgiving-base64-encoded and\n // isomorphic encoded.\n const keyValue = crypto.randomBytes(16).toString('base64')\n\n // 6. Append (`Sec-WebSocket-Key`, keyValue) to request\u2019s\n // header list.\n request.headersList.append('sec-websocket-key', keyValue, true)\n\n // 7. Append (`Sec-WebSocket-Version`, `13`) to request\u2019s\n // header list.\n request.headersList.append('sec-websocket-version', '13', true)\n\n // 8. For each protocol in protocols, combine\n // (`Sec-WebSocket-Protocol`, protocol) in request\u2019s header\n // list.\n for (const protocol of protocols) {\n request.headersList.append('sec-websocket-protocol', protocol, true)\n }\n\n // 9. Let permessageDeflate be a user-agent defined\n // \"permessage-deflate\" extension header value.\n // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673\n const permessageDeflate = 'permessage-deflate; client_max_window_bits'\n\n // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to\n // request\u2019s header list.\n request.headersList.append('sec-websocket-extensions', permessageDeflate, true)\n\n // 11. Fetch request with useParallelQueue set to true, and\n // processResponse given response being these steps:\n const controller = fetching({\n request,\n useParallelQueue: true,\n dispatcher: options.dispatcher,\n processResponse (response) {\n if (response.type === 'error') {\n // If the WebSocket connection could not be established, it is also said\n // that _The WebSocket Connection is Closed_, but not _cleanly_.\n handler.readyState = states.CLOSED\n }\n\n // 1. If response is a network error or its status is not 101,\n // fail the WebSocket connection.\n if (response.type === 'error' || response.status !== 101) {\n failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.')\n return\n }\n\n // 2. If protocols is not the empty list and extracting header\n // list values given `Sec-WebSocket-Protocol` and response\u2019s\n // header list results in null, failure, or the empty byte\n // sequence, then fail the WebSocket connection.\n if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {\n failWebsocketConnection(handler, 1002, 'Server did not respond with sent protocols.')\n return\n }\n\n // 3. Follow the requirements stated step 2 to step 6, inclusive,\n // of the last set of steps in section 4.1 of The WebSocket\n // Protocol to validate response. This either results in fail\n // the WebSocket connection or the WebSocket connection is\n // established.\n\n // 2. If the response lacks an |Upgrade| header field or the |Upgrade|\n // header field contains a value that is not an ASCII case-\n // insensitive match for the value \"websocket\", the client MUST\n // _Fail the WebSocket Connection_.\n if (response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {\n failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to \"websocket\".')\n return\n }\n\n // 3. If the response lacks a |Connection| header field or the\n // |Connection| header field doesn't contain a token that is an\n // ASCII case-insensitive match for the value \"Upgrade\", the client\n // MUST _Fail the WebSocket Connection_.\n if (response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {\n failWebsocketConnection(handler, 1002, 'Server did not set Connection header to \"upgrade\".')\n return\n }\n\n // 4. If the response lacks a |Sec-WebSocket-Accept| header field or\n // the |Sec-WebSocket-Accept| contains a value other than the\n // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-\n // Key| (as a string, not base64-decoded) with the string \"258EAFA5-\n // E914-47DA-95CA-C5AB0DC85B11\" but ignoring any leading and\n // trailing whitespace, the client MUST _Fail the WebSocket\n // Connection_.\n const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')\n const digest = crypto.createHash('sha1').update(keyValue + uid).digest('base64')\n if (secWSAccept !== digest) {\n failWebsocketConnection(handler, 1002, 'Incorrect hash received in Sec-WebSocket-Accept header.')\n return\n }\n\n // 5. If the response includes a |Sec-WebSocket-Extensions| header\n // field and this header field indicates the use of an extension\n // that was not present in the client's handshake (the server has\n // indicated an extension not requested by the client), the client\n // MUST _Fail the WebSocket Connection_. (The parsing of this\n // header field to determine which extensions are requested is\n // discussed in Section 9.1.)\n const secExtension = response.headersList.get('Sec-WebSocket-Extensions')\n let extensions\n\n if (secExtension !== null) {\n extensions = parseExtensions(secExtension)\n\n if (!extensions.has('permessage-deflate')) {\n failWebsocketConnection(handler, 1002, 'Sec-WebSocket-Extensions header does not match.')\n return\n }\n }\n\n // 6. If the response includes a |Sec-WebSocket-Protocol| header field\n // and this header field indicates the use of a subprotocol that was\n // not present in the client's handshake (the server has indicated a\n // subprotocol not requested by the client), the client MUST _Fail\n // the WebSocket Connection_.\n const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')\n\n if (secProtocol !== null) {\n const requestProtocols = getDecodeSplit('sec-websocket-protocol', request.headersList)\n\n // The client can request that the server use a specific subprotocol by\n // including the |Sec-WebSocket-Protocol| field in its handshake. If it\n // is specified, the server needs to include the same field and one of\n // the selected subprotocol values in its response for the connection to\n // be established.\n if (!requestProtocols.includes(secProtocol)) {\n failWebsocketConnection(handler, 1002, 'Protocol was not set in the opening handshake.')\n return\n }\n }\n\n response.socket.on('data', handler.onSocketData)\n response.socket.on('close', handler.onSocketClose)\n response.socket.on('error', handler.onSocketError)\n\n if (channels.open.hasSubscribers) {\n channels.open.publish({\n address: response.socket.address(),\n protocol: secProtocol,\n extensions: secExtension\n })\n }\n\n handler.wasEverConnected = true\n handler.onConnectionEstablished(response, extensions)\n }\n })\n\n return controller\n}\n\n/**\n * @see https://whatpr.org/websockets/48.html#close-the-websocket\n * @param {import('./websocket').Handler} object\n * @param {number} [code=null]\n * @param {string} [reason='']\n */\nfunction closeWebSocketConnection (object, code, reason, validate = false) {\n // 1. If code was not supplied, let code be null.\n code ??= null\n\n // 2. If reason was not supplied, let reason be the empty string.\n reason ??= ''\n\n // 3. Validate close code and reason with code and reason.\n if (validate) validateCloseCodeAndReason(code, reason)\n\n // 4. Run the first matching steps from the following list:\n // - If object\u2019s ready state is CLOSING (2) or CLOSED (3)\n // - If the WebSocket connection is not yet established [WSP]\n // - If the WebSocket closing handshake has not yet been started [WSP]\n // - Otherwise\n if (isClosed(object.readyState) || isClosing(object.readyState)) {\n // Do nothing.\n } else if (!isEstablished(object.readyState)) {\n // Fail the WebSocket connection and set object\u2019s ready state to CLOSING (2). [WSP]\n failWebsocketConnection(object)\n object.readyState = states.CLOSING\n } else if (!object.closeState.has(sentCloseFrameState.SENT) && !object.closeState.has(sentCloseFrameState.RECEIVED)) {\n // Upon either sending or receiving a Close control frame, it is said\n // that _The WebSocket Closing Handshake is Started_ and that the\n // WebSocket connection is in the CLOSING state.\n\n const frame = new WebsocketFrameSend()\n\n // If neither code nor reason is present, the WebSocket Close\n // message must not have a body.\n\n // If code is present, then the status code to use in the\n // WebSocket Close message must be the integer given by code.\n // If code is null and reason is the empty string, the WebSocket Close frame must not have a body.\n // If reason is non-empty but code is null, then set code to 1000 (\"Normal Closure\").\n if (reason.length !== 0 && code === null) {\n code = 1000\n }\n\n // If code is set, then the status code to use in the WebSocket Close frame must be the integer given by code.\n assert(code === null || Number.isInteger(code))\n\n if (code === null && reason.length === 0) {\n frame.frameData = emptyBuffer\n } else if (code !== null && reason === null) {\n frame.frameData = Buffer.allocUnsafe(2)\n frame.frameData.writeUInt16BE(code, 0)\n } else if (code !== null && reason !== null) {\n // If reason is also present, then reasonBytes must be\n // provided in the Close message after the status code.\n frame.frameData = Buffer.allocUnsafe(2 + Buffer.byteLength(reason))\n frame.frameData.writeUInt16BE(code, 0)\n // the body MAY contain UTF-8-encoded data with value /reason/\n frame.frameData.write(reason, 2, 'utf-8')\n } else {\n frame.frameData = emptyBuffer\n }\n\n object.socket.write(frame.createFrame(opcodes.CLOSE))\n\n object.closeState.add(sentCloseFrameState.SENT)\n\n // Upon either sending or receiving a Close control frame, it is said\n // that _The WebSocket Closing Handshake is Started_ and that the\n // WebSocket connection is in the CLOSING state.\n object.readyState = states.CLOSING\n } else {\n // Set object\u2019s ready state to CLOSING (2).\n object.readyState = states.CLOSING\n }\n}\n\n/**\n * @param {import('./websocket').Handler} handler\n * @param {number} code\n * @param {string|undefined} reason\n * @returns {void}\n */\nfunction failWebsocketConnection (handler, code, reason) {\n // If _The WebSocket Connection is Established_ prior to the point where\n // the endpoint is required to _Fail the WebSocket Connection_, the\n // endpoint SHOULD send a Close frame with an appropriate status code\n // (Section 7.4) before proceeding to _Close the WebSocket Connection_.\n if (isEstablished(handler.readyState)) {\n closeWebSocketConnection(handler, code, reason, false)\n }\n\n handler.controller.abort()\n\n if (handler.socket?.destroyed === false) {\n handler.socket.destroy()\n }\n\n handler.onFail(code, reason)\n}\n\nmodule.exports = {\n establishWebSocketConnection,\n failWebsocketConnection,\n closeWebSocketConnection\n}\n", "'use strict'\n\nconst { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require('node:zlib')\nconst { isValidClientWindowBits } = require('./util')\n\nconst tail = Buffer.from([0x00, 0x00, 0xff, 0xff])\nconst kBuffer = Symbol('kBuffer')\nconst kLength = Symbol('kLength')\n\nclass PerMessageDeflate {\n /** @type {import('node:zlib').InflateRaw} */\n #inflate\n\n #options = {}\n\n constructor (extensions) {\n this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n }\n\n decompress (chunk, fin, callback) {\n // An endpoint uses the following algorithm to decompress a message.\n // 1. Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the\n // payload of the message.\n // 2. Decompress the resulting data using DEFLATE.\n\n if (!this.#inflate) {\n let windowBits = Z_DEFAULT_WINDOWBITS\n\n if (this.#options.serverMaxWindowBits) { // empty values default to Z_DEFAULT_WINDOWBITS\n if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {\n callback(new Error('Invalid server_max_window_bits'))\n return\n }\n\n windowBits = Number.parseInt(this.#options.serverMaxWindowBits)\n }\n\n this.#inflate = createInflateRaw({ windowBits })\n this.#inflate[kBuffer] = []\n this.#inflate[kLength] = 0\n\n this.#inflate.on('data', (data) => {\n this.#inflate[kBuffer].push(data)\n this.#inflate[kLength] += data.length\n })\n\n this.#inflate.on('error', (err) => {\n this.#inflate = null\n callback(err)\n })\n }\n\n this.#inflate.write(chunk)\n if (fin) {\n this.#inflate.write(tail)\n }\n\n this.#inflate.flush(() => {\n const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength])\n\n this.#inflate[kBuffer].length = 0\n this.#inflate[kLength] = 0\n\n callback(null, full)\n })\n }\n}\n\nmodule.exports = { PerMessageDeflate }\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst assert = require('node:assert')\nconst { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require('./constants')\nconst { channels } = require('../../core/diagnostics')\nconst {\n isValidStatusCode,\n isValidOpcode,\n websocketMessageReceived,\n utf8Decode,\n isControlFrame,\n isTextBinaryFrame,\n isContinuationFrame\n} = require('./util')\nconst { failWebsocketConnection } = require('./connection')\nconst { WebsocketFrameSend } = require('./frame')\nconst { PerMessageDeflate } = require('./permessage-deflate')\n\n// This code was influenced by ws released under the MIT license.\n// Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>\n// Copyright (c) 2013 Arnout Kazemier and contributors\n// Copyright (c) 2016 Luigi Pinca and contributors\n\nclass ByteParser extends Writable {\n #buffers = []\n #fragmentsBytes = 0\n #byteOffset = 0\n #loop = false\n\n #state = parserStates.INFO\n\n #info = {}\n #fragments = []\n\n /** @type {Map<string, PerMessageDeflate>} */\n #extensions\n\n /** @type {import('./websocket').Handler} */\n #handler\n\n constructor (handler, extensions) {\n super()\n\n this.#handler = handler\n this.#extensions = extensions == null ? new Map() : extensions\n\n if (this.#extensions.has('permessage-deflate')) {\n this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions))\n }\n }\n\n /**\n * @param {Buffer} chunk\n * @param {() => void} callback\n */\n _write (chunk, _, callback) {\n this.#buffers.push(chunk)\n this.#byteOffset += chunk.length\n this.#loop = true\n\n this.run(callback)\n }\n\n /**\n * Runs whenever a new chunk is received.\n * Callback is called whenever there are no more chunks buffering,\n * or not enough bytes are buffered to parse.\n */\n run (callback) {\n while (this.#loop) {\n if (this.#state === parserStates.INFO) {\n // If there aren't enough bytes to parse the payload length, etc.\n if (this.#byteOffset < 2) {\n return callback()\n }\n\n const buffer = this.consume(2)\n const fin = (buffer[0] & 0x80) !== 0\n const opcode = buffer[0] & 0x0F\n const masked = (buffer[1] & 0x80) === 0x80\n\n const fragmented = !fin && opcode !== opcodes.CONTINUATION\n const payloadLength = buffer[1] & 0x7F\n\n const rsv1 = buffer[0] & 0x40\n const rsv2 = buffer[0] & 0x20\n const rsv3 = buffer[0] & 0x10\n\n if (!isValidOpcode(opcode)) {\n failWebsocketConnection(this.#handler, 1002, 'Invalid opcode received')\n return callback()\n }\n\n if (masked) {\n failWebsocketConnection(this.#handler, 1002, 'Frame cannot be masked')\n return callback()\n }\n\n // MUST be 0 unless an extension is negotiated that defines meanings\n // for non-zero values. If a nonzero value is received and none of\n // the negotiated extensions defines the meaning of such a nonzero\n // value, the receiving endpoint MUST _Fail the WebSocket\n // Connection_.\n // This document allocates the RSV1 bit of the WebSocket header for\n // PMCEs and calls the bit the \"Per-Message Compressed\" bit. On a\n // WebSocket connection where a PMCE is in use, this bit indicates\n // whether a message is compressed or not.\n if (rsv1 !== 0 && !this.#extensions.has('permessage-deflate')) {\n failWebsocketConnection(this.#handler, 1002, 'Expected RSV1 to be clear.')\n return\n }\n\n if (rsv2 !== 0 || rsv3 !== 0) {\n failWebsocketConnection(this.#handler, 1002, 'RSV1, RSV2, RSV3 must be clear')\n return\n }\n\n if (fragmented && !isTextBinaryFrame(opcode)) {\n // Only text and binary frames can be fragmented\n failWebsocketConnection(this.#handler, 1002, 'Invalid frame type was fragmented.')\n return\n }\n\n // If we are already parsing a text/binary frame and do not receive either\n // a continuation frame or close frame, fail the connection.\n if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {\n failWebsocketConnection(this.#handler, 1002, 'Expected continuation frame')\n return\n }\n\n if (this.#info.fragmented && fragmented) {\n // A fragmented frame can't be fragmented itself\n failWebsocketConnection(this.#handler, 1002, 'Fragmented frame exceeded 125 bytes.')\n return\n }\n\n // \"All control frames MUST have a payload length of 125 bytes or less\n // and MUST NOT be fragmented.\"\n if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {\n failWebsocketConnection(this.#handler, 1002, 'Control frame either too large or fragmented')\n return\n }\n\n if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {\n failWebsocketConnection(this.#handler, 1002, 'Unexpected continuation frame')\n return\n }\n\n if (payloadLength <= 125) {\n this.#info.payloadLength = payloadLength\n this.#state = parserStates.READ_DATA\n } else if (payloadLength === 126) {\n this.#state = parserStates.PAYLOADLENGTH_16\n } else if (payloadLength === 127) {\n this.#state = parserStates.PAYLOADLENGTH_64\n }\n\n if (isTextBinaryFrame(opcode)) {\n this.#info.binaryType = opcode\n this.#info.compressed = rsv1 !== 0\n }\n\n this.#info.opcode = opcode\n this.#info.masked = masked\n this.#info.fin = fin\n this.#info.fragmented = fragmented\n } else if (this.#state === parserStates.PAYLOADLENGTH_16) {\n if (this.#byteOffset < 2) {\n return callback()\n }\n\n const buffer = this.consume(2)\n\n this.#info.payloadLength = buffer.readUInt16BE(0)\n this.#state = parserStates.READ_DATA\n } else if (this.#state === parserStates.PAYLOADLENGTH_64) {\n if (this.#byteOffset < 8) {\n return callback()\n }\n\n const buffer = this.consume(8)\n const upper = buffer.readUInt32BE(0)\n\n // 2^31 is the maximum bytes an arraybuffer can contain\n // on 32-bit systems. Although, on 64-bit systems, this is\n // 2^53-1 bytes.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275\n // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e\n if (upper > 2 ** 31 - 1) {\n failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n return\n }\n\n const lower = buffer.readUInt32BE(4)\n\n this.#info.payloadLength = (upper << 8) + lower\n this.#state = parserStates.READ_DATA\n } else if (this.#state === parserStates.READ_DATA) {\n if (this.#byteOffset < this.#info.payloadLength) {\n return callback()\n }\n\n const body = this.consume(this.#info.payloadLength)\n\n if (isControlFrame(this.#info.opcode)) {\n this.#loop = this.parseControlFrame(body)\n this.#state = parserStates.INFO\n } else {\n if (!this.#info.compressed) {\n this.writeFragments(body)\n\n // If the frame is not fragmented, a message has been received.\n // If the frame is fragmented, it will terminate with a fin bit set\n // and an opcode of 0 (continuation), therefore we handle that when\n // parsing continuation frames, not here.\n if (!this.#info.fragmented && this.#info.fin) {\n websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n }\n\n this.#state = parserStates.INFO\n } else {\n this.#extensions.get('permessage-deflate').decompress(body, this.#info.fin, (error, data) => {\n if (error) {\n failWebsocketConnection(this.#handler, 1007, error.message)\n return\n }\n\n this.writeFragments(data)\n\n if (!this.#info.fin) {\n this.#state = parserStates.INFO\n this.#loop = true\n this.run(callback)\n return\n }\n\n websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n\n this.#loop = true\n this.#state = parserStates.INFO\n this.run(callback)\n })\n\n this.#loop = false\n break\n }\n }\n }\n }\n }\n\n /**\n * Take n bytes from the buffered Buffers\n * @param {number} n\n * @returns {Buffer}\n */\n consume (n) {\n if (n > this.#byteOffset) {\n throw new Error('Called consume() before buffers satiated.')\n } else if (n === 0) {\n return emptyBuffer\n }\n\n this.#byteOffset -= n\n\n const first = this.#buffers[0]\n\n if (first.length > n) {\n // replace with remaining buffer\n this.#buffers[0] = first.subarray(n, first.length)\n return first.subarray(0, n)\n } else if (first.length === n) {\n // prefect match\n return this.#buffers.shift()\n } else {\n let offset = 0\n // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n const buffer = Buffer.allocUnsafeSlow(n)\n while (offset !== n) {\n const next = this.#buffers[0]\n const length = next.length\n\n if (length + offset === n) {\n buffer.set(this.#buffers.shift(), offset)\n break\n } else if (length + offset > n) {\n buffer.set(next.subarray(0, n - offset), offset)\n this.#buffers[0] = next.subarray(n - offset)\n break\n } else {\n buffer.set(this.#buffers.shift(), offset)\n offset += length\n }\n }\n\n return buffer\n }\n }\n\n writeFragments (fragment) {\n this.#fragmentsBytes += fragment.length\n this.#fragments.push(fragment)\n }\n\n consumeFragments () {\n const fragments = this.#fragments\n\n if (fragments.length === 1) {\n // single fragment\n this.#fragmentsBytes = 0\n return fragments.shift()\n }\n\n let offset = 0\n // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n const output = Buffer.allocUnsafeSlow(this.#fragmentsBytes)\n\n for (let i = 0; i < fragments.length; ++i) {\n const buffer = fragments[i]\n output.set(buffer, offset)\n offset += buffer.length\n }\n\n this.#fragments = []\n this.#fragmentsBytes = 0\n\n return output\n }\n\n parseCloseBody (data) {\n assert(data.length !== 1)\n\n // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n /** @type {number|undefined} */\n let code\n\n if (data.length >= 2) {\n // _The WebSocket Connection Close Code_ is\n // defined as the status code (Section 7.4) contained in the first Close\n // control frame received by the application\n code = data.readUInt16BE(0)\n }\n\n if (code !== undefined && !isValidStatusCode(code)) {\n return { code: 1002, reason: 'Invalid status code', error: true }\n }\n\n // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6\n /** @type {Buffer} */\n let reason = data.subarray(2)\n\n // Remove BOM\n if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {\n reason = reason.subarray(3)\n }\n\n try {\n reason = utf8Decode(reason)\n } catch {\n return { code: 1007, reason: 'Invalid UTF-8', error: true }\n }\n\n return { code, reason, error: false }\n }\n\n /**\n * Parses control frames.\n * @param {Buffer} body\n */\n parseControlFrame (body) {\n const { opcode, payloadLength } = this.#info\n\n if (opcode === opcodes.CLOSE) {\n if (payloadLength === 1) {\n failWebsocketConnection(this.#handler, 1002, 'Received close frame with a 1-byte body.')\n return false\n }\n\n this.#info.closeInfo = this.parseCloseBody(body)\n\n if (this.#info.closeInfo.error) {\n const { code, reason } = this.#info.closeInfo\n\n failWebsocketConnection(this.#handler, code, reason)\n return false\n }\n\n // Upon receiving such a frame, the other peer sends a\n // Close frame in response, if it hasn't already sent one.\n if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n // If an endpoint receives a Close frame and did not previously send a\n // Close frame, the endpoint MUST send a Close frame in response. (When\n // sending a Close frame in response, the endpoint typically echos the\n // status code it received.)\n let body = emptyBuffer\n if (this.#info.closeInfo.code) {\n body = Buffer.allocUnsafe(2)\n body.writeUInt16BE(this.#info.closeInfo.code, 0)\n }\n const closeFrame = new WebsocketFrameSend(body)\n\n this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE))\n this.#handler.closeState.add(sentCloseFrameState.SENT)\n }\n\n // Upon either sending or receiving a Close control frame, it is said\n // that _The WebSocket Closing Handshake is Started_ and that the\n // WebSocket connection is in the CLOSING state.\n this.#handler.readyState = states.CLOSING\n this.#handler.closeState.add(sentCloseFrameState.RECEIVED)\n\n return false\n } else if (opcode === opcodes.PING) {\n // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in\n // response, unless it already received a Close frame.\n // A Pong frame sent in response to a Ping frame must have identical\n // \"Application data\"\n\n if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n const frame = new WebsocketFrameSend(body)\n\n this.#handler.socket.write(frame.createFrame(opcodes.PONG))\n\n if (channels.ping.hasSubscribers) {\n channels.ping.publish({\n payload: body\n })\n }\n }\n } else if (opcode === opcodes.PONG) {\n // A Pong frame MAY be sent unsolicited. This serves as a\n // unidirectional heartbeat. A response to an unsolicited Pong frame is\n // not expected.\n\n if (channels.pong.hasSubscribers) {\n channels.pong.publish({\n payload: body\n })\n }\n }\n\n return true\n }\n\n get closingInfo () {\n return this.#info.closeInfo\n }\n}\n\nmodule.exports = {\n ByteParser\n}\n", "'use strict'\n\nconst { WebsocketFrameSend } = require('./frame')\nconst { opcodes, sendHints } = require('./constants')\nconst FixedQueue = require('../../dispatcher/fixed-queue')\n\n/**\n * @typedef {object} SendQueueNode\n * @property {Promise<void> | null} promise\n * @property {((...args: any[]) => any)} callback\n * @property {Buffer | null} frame\n */\n\nclass SendQueue {\n /**\n * @type {FixedQueue}\n */\n #queue = new FixedQueue()\n\n /**\n * @type {boolean}\n */\n #running = false\n\n /** @type {import('node:net').Socket} */\n #socket\n\n constructor (socket) {\n this.#socket = socket\n }\n\n add (item, cb, hint) {\n if (hint !== sendHints.blob) {\n if (!this.#running) {\n // TODO(@tsctx): support fast-path for string on running\n if (hint === sendHints.text) {\n // special fast-path for string\n const { 0: head, 1: body } = WebsocketFrameSend.createFastTextFrame(item)\n this.#socket.cork()\n this.#socket.write(head)\n this.#socket.write(body, cb)\n this.#socket.uncork()\n } else {\n // direct writing\n this.#socket.write(createFrame(item, hint), cb)\n }\n } else {\n /** @type {SendQueueNode} */\n const node = {\n promise: null,\n callback: cb,\n frame: createFrame(item, hint)\n }\n this.#queue.push(node)\n }\n return\n }\n\n /** @type {SendQueueNode} */\n const node = {\n promise: item.arrayBuffer().then((ab) => {\n node.promise = null\n node.frame = createFrame(ab, hint)\n }),\n callback: cb,\n frame: null\n }\n\n this.#queue.push(node)\n\n if (!this.#running) {\n this.#run()\n }\n }\n\n async #run () {\n this.#running = true\n const queue = this.#queue\n while (!queue.isEmpty()) {\n const node = queue.shift()\n // wait pending promise\n if (node.promise !== null) {\n await node.promise\n }\n // write\n this.#socket.write(node.frame, node.callback)\n // cleanup\n node.callback = node.frame = null\n }\n this.#running = false\n }\n}\n\nfunction createFrame (data, hint) {\n return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.text ? opcodes.TEXT : opcodes.BINARY)\n}\n\nfunction toBuffer (data, hint) {\n switch (hint) {\n case sendHints.text:\n case sendHints.typedArray:\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n case sendHints.arrayBuffer:\n case sendHints.blob:\n return new Uint8Array(data)\n }\n}\n\nmodule.exports = { SendQueue }\n", "'use strict'\n\nconst { webidl } = require('../fetch/webidl')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { environmentSettingsObject } = require('../fetch/util')\nconst { staticPropertyDescriptors, states, sentCloseFrameState, sendHints, opcodes } = require('./constants')\nconst {\n isConnecting,\n isEstablished,\n isClosing,\n isValidSubprotocol,\n fireEvent,\n utf8Decode,\n toArrayBuffer,\n getURLRecord\n} = require('./util')\nconst { establishWebSocketConnection, closeWebSocketConnection, failWebsocketConnection } = require('./connection')\nconst { ByteParser } = require('./receiver')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { getGlobalDispatcher } = require('../../global')\nconst { types } = require('node:util')\nconst { ErrorEvent, CloseEvent, createFastMessageEvent } = require('./events')\nconst { SendQueue } = require('./sender')\nconst { channels } = require('../../core/diagnostics')\n\n/**\n * @typedef {object} Handler\n * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished\n * @property {(code: number, reason: any) => void} onFail\n * @property {(opcode: number, data: Buffer) => void} onMessage\n * @property {(error: Error) => void} onParserError\n * @property {() => void} onParserDrain\n * @property {(chunk: Buffer) => void} onSocketData\n * @property {(err: Error) => void} onSocketError\n * @property {() => void} onSocketClose\n *\n * @property {number} readyState\n * @property {import('stream').Duplex} socket\n * @property {Set<number>} closeState\n * @property {import('../fetch/index').Fetch} controller\n * @property {boolean} [wasEverConnected=false]\n */\n\n// https://websockets.spec.whatwg.org/#interface-definition\nclass WebSocket extends EventTarget {\n #events = {\n open: null,\n error: null,\n close: null,\n message: null\n }\n\n #bufferedAmount = 0\n #protocol = ''\n #extensions = ''\n\n /** @type {SendQueue} */\n #sendQueue\n\n /** @type {Handler} */\n #handler = {\n onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n onFail: (code, reason) => this.#onFail(code, reason),\n onMessage: (opcode, data) => this.#onMessage(opcode, data),\n onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n onParserDrain: () => this.#onParserDrain(),\n onSocketData: (chunk) => {\n if (!this.#parser.write(chunk)) {\n this.#handler.socket.pause()\n }\n },\n onSocketError: (err) => {\n this.#handler.readyState = states.CLOSING\n\n if (channels.socketError.hasSubscribers) {\n channels.socketError.publish(err)\n }\n\n this.#handler.socket.destroy()\n },\n onSocketClose: () => this.#onSocketClose(),\n\n readyState: states.CONNECTING,\n socket: null,\n closeState: new Set(),\n controller: null,\n wasEverConnected: false\n }\n\n #url\n #binaryType\n /** @type {import('./receiver').ByteParser} */\n #parser\n\n /**\n * @param {string} url\n * @param {string|string[]} protocols\n */\n constructor (url, protocols = []) {\n super()\n\n webidl.util.markAsUncloneable(this)\n\n const prefix = 'WebSocket constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols, prefix, 'options')\n\n url = webidl.converters.USVString(url)\n protocols = options.protocols\n\n // 1. Let baseURL be this's relevant settings object's API base URL.\n const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n // 2. Let urlRecord be the result of getting a URL record given url and baseURL.\n const urlRecord = getURLRecord(url, baseURL)\n\n // 3. If protocols is a string, set protocols to a sequence consisting\n // of just that string.\n if (typeof protocols === 'string') {\n protocols = [protocols]\n }\n\n // 4. If any of the values in protocols occur more than once or otherwise\n // fail to match the requirements for elements that comprise the value\n // of `Sec-WebSocket-Protocol` fields as defined by The WebSocket\n // protocol, then throw a \"SyntaxError\" DOMException.\n if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n }\n\n if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n }\n\n // 5. Set this's url to urlRecord.\n this.#url = new URL(urlRecord.href)\n\n // 6. Let client be this's relevant settings object.\n const client = environmentSettingsObject.settingsObject\n\n // 7. Run this step in parallel:\n // 7.1. Establish a WebSocket connection given urlRecord, protocols,\n // and client.\n this.#handler.controller = establishWebSocketConnection(\n urlRecord,\n protocols,\n client,\n this.#handler,\n options\n )\n\n // Each WebSocket object has an associated ready state, which is a\n // number representing the state of the connection. Initially it must\n // be CONNECTING (0).\n this.#handler.readyState = WebSocket.CONNECTING\n\n // The extensions attribute must initially return the empty string.\n\n // The protocol attribute must initially return the empty string.\n\n // Each WebSocket object has an associated binary type, which is a\n // BinaryType. Initially it must be \"blob\".\n this.#binaryType = 'blob'\n }\n\n /**\n * @see https://websockets.spec.whatwg.org/#dom-websocket-close\n * @param {number|undefined} code\n * @param {string|undefined} reason\n */\n close (code = undefined, reason = undefined) {\n webidl.brandCheck(this, WebSocket)\n\n const prefix = 'WebSocket.close'\n\n if (code !== undefined) {\n code = webidl.converters['unsigned short'](code, prefix, 'code', { clamp: true })\n }\n\n if (reason !== undefined) {\n reason = webidl.converters.USVString(reason)\n }\n\n // 1. If code is the special value \"missing\", then set code to null.\n code ??= null\n\n // 2. If reason is the special value \"missing\", then set reason to the empty string.\n reason ??= ''\n\n // 3. Close the WebSocket with this, code, and reason.\n closeWebSocketConnection(this.#handler, code, reason, true)\n }\n\n /**\n * @see https://websockets.spec.whatwg.org/#dom-websocket-send\n * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data\n */\n send (data) {\n webidl.brandCheck(this, WebSocket)\n\n const prefix = 'WebSocket.send'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n data = webidl.converters.WebSocketSendData(data, prefix, 'data')\n\n // 1. If this's ready state is CONNECTING, then throw an\n // \"InvalidStateError\" DOMException.\n if (isConnecting(this.#handler.readyState)) {\n throw new DOMException('Sent before connected.', 'InvalidStateError')\n }\n\n // 2. Run the appropriate set of steps from the following list:\n // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1\n // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n\n if (!isEstablished(this.#handler.readyState) || isClosing(this.#handler.readyState)) {\n return\n }\n\n // If data is a string\n if (typeof data === 'string') {\n // If the WebSocket connection is established and the WebSocket\n // closing handshake has not yet started, then the user agent\n // must send a WebSocket Message comprised of the data argument\n // using a text frame opcode; if the data cannot be sent, e.g.\n // because it would need to be buffered but the buffer is full,\n // the user agent must flag the WebSocket as full and then close\n // the WebSocket connection. Any invocation of this method with a\n // string argument that does not throw an exception must increase\n // the bufferedAmount attribute by the number of bytes needed to\n // express the argument as UTF-8.\n\n const buffer = Buffer.from(data)\n\n this.#bufferedAmount += buffer.byteLength\n this.#sendQueue.add(buffer, () => {\n this.#bufferedAmount -= buffer.byteLength\n }, sendHints.text)\n } else if (types.isArrayBuffer(data)) {\n // If the WebSocket connection is established, and the WebSocket\n // closing handshake has not yet started, then the user agent must\n // send a WebSocket Message comprised of data using a binary frame\n // opcode; if the data cannot be sent, e.g. because it would need\n // to be buffered but the buffer is full, the user agent must flag\n // the WebSocket as full and then close the WebSocket connection.\n // The data to be sent is the data stored in the buffer described\n // by the ArrayBuffer object. Any invocation of this method with an\n // ArrayBuffer argument that does not throw an exception must\n // increase the bufferedAmount attribute by the length of the\n // ArrayBuffer in bytes.\n\n this.#bufferedAmount += data.byteLength\n this.#sendQueue.add(data, () => {\n this.#bufferedAmount -= data.byteLength\n }, sendHints.arrayBuffer)\n } else if (ArrayBuffer.isView(data)) {\n // If the WebSocket connection is established, and the WebSocket\n // closing handshake has not yet started, then the user agent must\n // send a WebSocket Message comprised of data using a binary frame\n // opcode; if the data cannot be sent, e.g. because it would need to\n // be buffered but the buffer is full, the user agent must flag the\n // WebSocket as full and then close the WebSocket connection. The\n // data to be sent is the data stored in the section of the buffer\n // described by the ArrayBuffer object that data references. Any\n // invocation of this method with this kind of argument that does\n // not throw an exception must increase the bufferedAmount attribute\n // by the length of data\u2019s buffer in bytes.\n\n this.#bufferedAmount += data.byteLength\n this.#sendQueue.add(data, () => {\n this.#bufferedAmount -= data.byteLength\n }, sendHints.typedArray)\n } else if (webidl.is.Blob(data)) {\n // If the WebSocket connection is established, and the WebSocket\n // closing handshake has not yet started, then the user agent must\n // send a WebSocket Message comprised of data using a binary frame\n // opcode; if the data cannot be sent, e.g. because it would need to\n // be buffered but the buffer is full, the user agent must flag the\n // WebSocket as full and then close the WebSocket connection. The data\n // to be sent is the raw data represented by the Blob object. Any\n // invocation of this method with a Blob argument that does not throw\n // an exception must increase the bufferedAmount attribute by the size\n // of the Blob object\u2019s raw data, in bytes.\n\n this.#bufferedAmount += data.size\n this.#sendQueue.add(data, () => {\n this.#bufferedAmount -= data.size\n }, sendHints.blob)\n }\n }\n\n get readyState () {\n webidl.brandCheck(this, WebSocket)\n\n // The readyState getter steps are to return this's ready state.\n return this.#handler.readyState\n }\n\n get bufferedAmount () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#bufferedAmount\n }\n\n get url () {\n webidl.brandCheck(this, WebSocket)\n\n // The url getter steps are to return this's url, serialized.\n return URLSerializer(this.#url)\n }\n\n get extensions () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#extensions\n }\n\n get protocol () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#protocol\n }\n\n get onopen () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#events.open\n }\n\n set onopen (fn) {\n webidl.brandCheck(this, WebSocket)\n\n if (this.#events.open) {\n this.removeEventListener('open', this.#events.open)\n }\n\n if (typeof fn === 'function') {\n this.#events.open = fn\n this.addEventListener('open', fn)\n } else {\n this.#events.open = null\n }\n }\n\n get onerror () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#events.error\n }\n\n set onerror (fn) {\n webidl.brandCheck(this, WebSocket)\n\n if (this.#events.error) {\n this.removeEventListener('error', this.#events.error)\n }\n\n if (typeof fn === 'function') {\n this.#events.error = fn\n this.addEventListener('error', fn)\n } else {\n this.#events.error = null\n }\n }\n\n get onclose () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#events.close\n }\n\n set onclose (fn) {\n webidl.brandCheck(this, WebSocket)\n\n if (this.#events.close) {\n this.removeEventListener('close', this.#events.close)\n }\n\n if (typeof fn === 'function') {\n this.#events.close = fn\n this.addEventListener('close', fn)\n } else {\n this.#events.close = null\n }\n }\n\n get onmessage () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#events.message\n }\n\n set onmessage (fn) {\n webidl.brandCheck(this, WebSocket)\n\n if (this.#events.message) {\n this.removeEventListener('message', this.#events.message)\n }\n\n if (typeof fn === 'function') {\n this.#events.message = fn\n this.addEventListener('message', fn)\n } else {\n this.#events.message = null\n }\n }\n\n get binaryType () {\n webidl.brandCheck(this, WebSocket)\n\n return this.#binaryType\n }\n\n set binaryType (type) {\n webidl.brandCheck(this, WebSocket)\n\n if (type !== 'blob' && type !== 'arraybuffer') {\n this.#binaryType = 'blob'\n } else {\n this.#binaryType = type\n }\n }\n\n /**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n */\n #onConnectionEstablished (response, parsedExtensions) {\n // processResponse is called when the \"response\u2019s header list has been received and initialized.\"\n // once this happens, the connection is open\n this.#handler.socket = response.socket\n\n const parser = new ByteParser(this.#handler, parsedExtensions)\n parser.on('drain', () => this.#handler.onParserDrain())\n parser.on('error', (err) => this.#handler.onParserError(err))\n\n this.#parser = parser\n this.#sendQueue = new SendQueue(response.socket)\n\n // 1. Change the ready state to OPEN (1).\n this.#handler.readyState = states.OPEN\n\n // 2. Change the extensions attribute\u2019s value to the extensions in use, if\n // it is not the null value.\n // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\n const extensions = response.headersList.get('sec-websocket-extensions')\n\n if (extensions !== null) {\n this.#extensions = extensions\n }\n\n // 3. Change the protocol attribute\u2019s value to the subprotocol in use, if\n // it is not the null value.\n // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9\n const protocol = response.headersList.get('sec-websocket-protocol')\n\n if (protocol !== null) {\n this.#protocol = protocol\n }\n\n // 4. Fire an event named open at the WebSocket object.\n fireEvent('open', this)\n }\n\n #onFail (code, reason) {\n if (reason) {\n // TODO: process.nextTick\n fireEvent('error', this, (type, init) => new ErrorEvent(type, init), {\n error: new Error(reason),\n message: reason\n })\n }\n\n if (!this.#handler.wasEverConnected) {\n this.#handler.readyState = states.CLOSED\n\n // If the WebSocket connection could not be established, it is also said\n // that _The WebSocket Connection is Closed_, but not _cleanly_.\n fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n wasClean: false, code, reason\n })\n }\n }\n\n #onMessage (type, data) {\n // 1. If ready state is not OPEN (1), then return.\n if (this.#handler.readyState !== states.OPEN) {\n return\n }\n\n // 2. Let dataForEvent be determined by switching on type and binary type:\n let dataForEvent\n\n if (type === opcodes.TEXT) {\n // -> type indicates that the data is Text\n // a new DOMString containing data\n try {\n dataForEvent = utf8Decode(data)\n } catch {\n failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n return\n }\n } else if (type === opcodes.BINARY) {\n if (this.#binaryType === 'blob') {\n // -> type indicates that the data is Binary and binary type is \"blob\"\n // a new Blob object, created in the relevant Realm of the WebSocket\n // object, that represents data as its raw data\n dataForEvent = new Blob([data])\n } else {\n // -> type indicates that the data is Binary and binary type is \"arraybuffer\"\n // a new ArrayBuffer object, created in the relevant Realm of the\n // WebSocket object, whose contents are data\n dataForEvent = toArrayBuffer(data)\n }\n }\n\n // 3. Fire an event named message at the WebSocket object, using MessageEvent,\n // with the origin attribute initialized to the serialization of the WebSocket\n // object\u2019s url's origin, and the data attribute initialized to dataForEvent.\n fireEvent('message', this, createFastMessageEvent, {\n origin: this.#url.origin,\n data: dataForEvent\n })\n }\n\n #onParserDrain () {\n this.#handler.socket.resume()\n }\n\n /**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4\n */\n #onSocketClose () {\n // If the TCP connection was closed after the\n // WebSocket closing handshake was completed, the WebSocket connection\n // is said to have been closed _cleanly_.\n const wasClean =\n this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n let code = 1005\n let reason = ''\n\n const result = this.#parser.closingInfo\n\n if (result && !result.error) {\n code = result.code ?? 1005\n reason = result.reason\n } else if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n // If _The WebSocket\n // Connection is Closed_ and no Close control frame was received by the\n // endpoint (such as could occur if the underlying transport connection\n // is lost), _The WebSocket Connection Close Code_ is considered to be\n // 1006.\n code = 1006\n }\n\n // 1. Change the ready state to CLOSED (3).\n this.#handler.readyState = states.CLOSED\n\n // 2. If the user agent was required to fail the WebSocket\n // connection, or if the WebSocket connection was closed\n // after being flagged as full, fire an event named error\n // at the WebSocket object.\n // TODO\n\n // 3. Fire an event named close at the WebSocket object,\n // using CloseEvent, with the wasClean attribute\n // initialized to true if the connection closed cleanly\n // and false otherwise, the code attribute initialized to\n // the WebSocket connection close code, and the reason\n // attribute initialized to the result of applying UTF-8\n // decode without BOM to the WebSocket connection close\n // reason.\n // TODO: process.nextTick\n fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n wasClean, code, reason\n })\n\n if (channels.close.hasSubscribers) {\n channels.close.publish({\n websocket: this,\n code,\n reason\n })\n }\n }\n}\n\n// https://websockets.spec.whatwg.org/#dom-websocket-connecting\nWebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING\n// https://websockets.spec.whatwg.org/#dom-websocket-open\nWebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN\n// https://websockets.spec.whatwg.org/#dom-websocket-closing\nWebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING\n// https://websockets.spec.whatwg.org/#dom-websocket-closed\nWebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED\n\nObject.defineProperties(WebSocket.prototype, {\n CONNECTING: staticPropertyDescriptors,\n OPEN: staticPropertyDescriptors,\n CLOSING: staticPropertyDescriptors,\n CLOSED: staticPropertyDescriptors,\n url: kEnumerableProperty,\n readyState: kEnumerableProperty,\n bufferedAmount: kEnumerableProperty,\n onopen: kEnumerableProperty,\n onerror: kEnumerableProperty,\n onclose: kEnumerableProperty,\n close: kEnumerableProperty,\n onmessage: kEnumerableProperty,\n binaryType: kEnumerableProperty,\n send: kEnumerableProperty,\n extensions: kEnumerableProperty,\n protocol: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'WebSocket',\n writable: false,\n enumerable: false,\n configurable: true\n }\n})\n\nObject.defineProperties(WebSocket, {\n CONNECTING: staticPropertyDescriptors,\n OPEN: staticPropertyDescriptors,\n CLOSING: staticPropertyDescriptors,\n CLOSED: staticPropertyDescriptors\n})\n\nwebidl.converters['sequence<DOMString>'] = webidl.sequenceConverter(\n webidl.converters.DOMString\n)\n\nwebidl.converters['DOMString or sequence<DOMString>'] = function (V, prefix, argument) {\n if (webidl.util.Type(V) === webidl.util.Types.OBJECT && Symbol.iterator in V) {\n return webidl.converters['sequence<DOMString>'](V)\n }\n\n return webidl.converters.DOMString(V, prefix, argument)\n}\n\n// This implements the proposal made in https://github.com/whatwg/websockets/issues/42\nwebidl.converters.WebSocketInit = webidl.dictionaryConverter([\n {\n key: 'protocols',\n converter: webidl.converters['DOMString or sequence<DOMString>'],\n defaultValue: () => new Array(0)\n },\n {\n key: 'dispatcher',\n converter: webidl.converters.any,\n defaultValue: () => getGlobalDispatcher()\n },\n {\n key: 'headers',\n converter: webidl.nullableConverter(webidl.converters.HeadersInit)\n }\n])\n\nwebidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) {\n if (webidl.util.Type(V) === webidl.util.Types.OBJECT && !(Symbol.iterator in V)) {\n return webidl.converters.WebSocketInit(V)\n }\n\n return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) }\n}\n\nwebidl.converters.WebSocketSendData = function (V) {\n if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n if (webidl.is.Blob(V)) {\n return V\n }\n\n if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {\n return V\n }\n }\n\n return webidl.converters.USVString(V)\n}\n\nmodule.exports = {\n WebSocket\n}\n", "'use strict'\n\nconst { webidl } = require('../../fetch/webidl')\nconst { validateCloseCodeAndReason } = require('../util')\nconst { kConstruct } = require('../../../core/symbols')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nclass WebSocketError extends DOMException {\n #closeCode\n #reason\n\n constructor (message = '', init = undefined) {\n message = webidl.converters.DOMString(message, 'WebSocketError', 'message')\n\n // 1. Set this 's name to \" WebSocketError \".\n // 2. Set this 's message to message .\n super(message, 'WebSocketError')\n\n if (init === kConstruct) {\n return\n } else if (init !== null) {\n init = webidl.converters.WebSocketCloseInfo(init)\n }\n\n // 3. Let code be init [\" closeCode \"] if it exists , or null otherwise.\n let code = init.closeCode ?? null\n\n // 4. Let reason be init [\" reason \"] if it exists , or the empty string otherwise.\n const reason = init.reason ?? ''\n\n // 5. Validate close code and reason with code and reason .\n validateCloseCodeAndReason(code, reason)\n\n // 6. If reason is non-empty, but code is not set, then set code to 1000 (\"Normal Closure\").\n if (reason.length !== 0 && code === null) {\n code = 1000\n }\n\n // 7. Set this 's closeCode to code .\n this.#closeCode = code\n\n // 8. Set this 's reason to reason .\n this.#reason = reason\n }\n\n get closeCode () {\n return this.#closeCode\n }\n\n get reason () {\n return this.#reason\n }\n\n /**\n * @param {string} message\n * @param {number|null} code\n * @param {string} reason\n */\n static createUnvalidatedWebSocketError (message, code, reason) {\n const error = new WebSocketError(message, kConstruct)\n error.#closeCode = code\n error.#reason = reason\n return error\n }\n}\n\nconst { createUnvalidatedWebSocketError } = WebSocketError\ndelete WebSocketError.createUnvalidatedWebSocketError\n\nObject.defineProperties(WebSocketError.prototype, {\n closeCode: kEnumerableProperty,\n reason: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'WebSocketError',\n writable: false,\n enumerable: false,\n configurable: true\n }\n})\n\nwebidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)\n\nmodule.exports = { WebSocketError, createUnvalidatedWebSocketError }\n", "'use strict'\n\nconst { createDeferredPromise, environmentSettingsObject } = require('../../fetch/util')\nconst { states, opcodes, sentCloseFrameState } = require('../constants')\nconst { webidl } = require('../../fetch/webidl')\nconst { getURLRecord, isValidSubprotocol, isEstablished, utf8Decode } = require('../util')\nconst { establishWebSocketConnection, failWebsocketConnection, closeWebSocketConnection } = require('../connection')\nconst { types } = require('node:util')\nconst { channels } = require('../../../core/diagnostics')\nconst { WebsocketFrameSend } = require('../frame')\nconst { ByteParser } = require('../receiver')\nconst { WebSocketError, createUnvalidatedWebSocketError } = require('./websocketerror')\nconst { utf8DecodeBytes } = require('../../fetch/util')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nlet emittedExperimentalWarning = false\n\nclass WebSocketStream {\n // Each WebSocketStream object has an associated url , which is a URL record .\n /** @type {URL} */\n #url\n\n // Each WebSocketStream object has an associated opened promise , which is a promise.\n /** @type {ReturnType<typeof createDeferredPromise>} */\n #openedPromise\n\n // Each WebSocketStream object has an associated closed promise , which is a promise.\n /** @type {ReturnType<typeof createDeferredPromise>} */\n #closedPromise\n\n // Each WebSocketStream object has an associated readable stream , which is a ReadableStream .\n /** @type {ReadableStream} */\n #readableStream\n /** @type {ReadableStreamDefaultController} */\n #readableStreamController\n\n // Each WebSocketStream object has an associated writable stream , which is a WritableStream .\n /** @type {WritableStream} */\n #writableStream\n\n // Each WebSocketStream object has an associated boolean handshake aborted , which is initially false.\n #handshakeAborted = false\n\n /** @type {import('../websocket').Handler} */\n #handler = {\n // https://whatpr.org/websockets/48/7b748d3...d5570f3.html#feedback-to-websocket-stream-from-the-protocol\n onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n onFail: (_code, _reason) => {},\n onMessage: (opcode, data) => this.#onMessage(opcode, data),\n onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n onParserDrain: () => this.#handler.socket.resume(),\n onSocketData: (chunk) => {\n if (!this.#parser.write(chunk)) {\n this.#handler.socket.pause()\n }\n },\n onSocketError: (err) => {\n this.#handler.readyState = states.CLOSING\n\n if (channels.socketError.hasSubscribers) {\n channels.socketError.publish(err)\n }\n\n this.#handler.socket.destroy()\n },\n onSocketClose: () => this.#onSocketClose(),\n\n readyState: states.CONNECTING,\n socket: null,\n closeState: new Set(),\n controller: null,\n wasEverConnected: false\n }\n\n /** @type {import('../receiver').ByteParser} */\n #parser\n\n constructor (url, options = undefined) {\n if (!emittedExperimentalWarning) {\n process.emitWarning('WebSocketStream is experimental! Expect it to change at any time.', {\n code: 'UNDICI-WSS'\n })\n emittedExperimentalWarning = true\n }\n\n webidl.argumentLengthCheck(arguments, 1, 'WebSocket')\n\n url = webidl.converters.USVString(url)\n if (options !== null) {\n options = webidl.converters.WebSocketStreamOptions(options)\n }\n\n // 1. Let baseURL be this 's relevant settings object 's API base URL .\n const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n // 2. Let urlRecord be the result of getting a URL record given url and baseURL .\n const urlRecord = getURLRecord(url, baseURL)\n\n // 3. Let protocols be options [\" protocols \"] if it exists , otherwise an empty sequence.\n const protocols = options.protocols\n\n // 4. If any of the values in protocols occur more than once or otherwise fail to match the requirements for elements that comprise the value of ` Sec-WebSocket-Protocol ` fields as defined by The WebSocket Protocol , then throw a \" SyntaxError \" DOMException . [WSP]\n if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n }\n\n if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n }\n\n // 5. Set this 's url to urlRecord .\n this.#url = urlRecord.toString()\n\n // 6. Set this 's opened promise and closed promise to new promises.\n this.#openedPromise = createDeferredPromise()\n this.#closedPromise = createDeferredPromise()\n\n // 7. Apply backpressure to the WebSocket.\n // TODO\n\n // 8. If options [\" signal \"] exists ,\n if (options.signal != null) {\n // 8.1. Let signal be options [\" signal \"].\n const signal = options.signal\n\n // 8.2. If signal is aborted , then reject this 's opened promise and closed promise with signal \u2019s abort reason\n // and return.\n if (signal.aborted) {\n this.#openedPromise.reject(signal.reason)\n this.#closedPromise.reject(signal.reason)\n return\n }\n\n // 8.3. Add the following abort steps to signal :\n signal.addEventListener('abort', () => {\n // 8.3.1. If the WebSocket connection is not yet established : [WSP]\n if (!isEstablished(this.#handler.readyState)) {\n // 8.3.1.1. Fail the WebSocket connection .\n failWebsocketConnection(this.#handler)\n\n // Set this 's ready state to CLOSING .\n this.#handler.readyState = states.CLOSING\n\n // Reject this 's opened promise and closed promise with signal \u2019s abort reason .\n this.#openedPromise.reject(signal.reason)\n this.#closedPromise.reject(signal.reason)\n\n // Set this 's handshake aborted to true.\n this.#handshakeAborted = true\n }\n }, { once: true })\n }\n\n // 9. Let client be this 's relevant settings object .\n const client = environmentSettingsObject.settingsObject\n\n // 10. Run this step in parallel :\n // 10.1. Establish a WebSocket connection given urlRecord , protocols , and client . [FETCH]\n this.#handler.controller = establishWebSocketConnection(\n urlRecord,\n protocols,\n client,\n this.#handler,\n options\n )\n }\n\n // The url getter steps are to return this 's url , serialized .\n get url () {\n return this.#url.toString()\n }\n\n // The opened getter steps are to return this 's opened promise .\n get opened () {\n return this.#openedPromise.promise\n }\n\n // The closed getter steps are to return this 's closed promise .\n get closed () {\n return this.#closedPromise.promise\n }\n\n // The close( closeInfo ) method steps are:\n close (closeInfo = undefined) {\n if (closeInfo !== null) {\n closeInfo = webidl.converters.WebSocketCloseInfo(closeInfo)\n }\n\n // 1. Let code be closeInfo [\" closeCode \"] if present, or null otherwise.\n const code = closeInfo.closeCode ?? null\n\n // 2. Let reason be closeInfo [\" reason \"].\n const reason = closeInfo.reason\n\n // 3. Close the WebSocket with this , code , and reason .\n closeWebSocketConnection(this.#handler, code, reason, true)\n }\n\n #write (chunk) {\n // 1. Let promise be a new promise created in stream \u2019s relevant realm .\n const promise = createDeferredPromise()\n\n // 2. Let data be null.\n let data = null\n\n // 3. Let opcode be null.\n let opcode = null\n\n // 4. If chunk is a BufferSource ,\n if (ArrayBuffer.isView(chunk) || types.isArrayBuffer(chunk)) {\n // 4.1. Set data to a copy of the bytes given chunk .\n data = new Uint8Array(ArrayBuffer.isView(chunk) ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength) : chunk)\n\n // 4.2. Set opcode to a binary frame opcode.\n opcode = opcodes.BINARY\n } else {\n // 5. Otherwise,\n\n // 5.1. Let string be the result of converting chunk to an IDL USVString .\n // If this throws an exception, return a promise rejected with the exception.\n let string\n\n try {\n string = webidl.converters.DOMString(chunk)\n } catch (e) {\n promise.reject(e)\n return\n }\n\n // 5.2. Set data to the result of UTF-8 encoding string .\n data = new TextEncoder().encode(string)\n\n // 5.3. Set opcode to a text frame opcode.\n opcode = opcodes.TEXT\n }\n\n // 6. In parallel,\n // 6.1. Wait until there is sufficient buffer space in stream to send the message.\n\n // 6.2. If the closing handshake has not yet started , Send a WebSocket Message to stream comprised of data using opcode .\n if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n const frame = new WebsocketFrameSend(data)\n\n this.#handler.socket.write(frame.createFrame(opcode), () => {\n promise.resolve(undefined)\n })\n }\n\n // 6.3. Queue a global task on the WebSocket task source given stream \u2019s relevant global object to resolve promise with undefined.\n return promise\n }\n\n /** @type {import('../websocket').Handler['onConnectionEstablished']} */\n #onConnectionEstablished (response, parsedExtensions) {\n this.#handler.socket = response.socket\n\n const parser = new ByteParser(this.#handler, parsedExtensions)\n parser.on('drain', () => this.#handler.onParserDrain())\n parser.on('error', (err) => this.#handler.onParserError(err))\n\n this.#parser = parser\n\n // 1. Change stream \u2019s ready state to OPEN (1).\n this.#handler.readyState = states.OPEN\n\n // 2. Set stream \u2019s was ever connected to true.\n // This is done in the opening handshake.\n\n // 3. Let extensions be the extensions in use .\n const extensions = parsedExtensions ?? ''\n\n // 4. Let protocol be the subprotocol in use .\n const protocol = response.headersList.get('sec-websocket-protocol') ?? ''\n\n // 5. Let pullAlgorithm be an action that pulls bytes from stream .\n // 6. Let cancelAlgorithm be an action that cancels stream with reason , given reason .\n // 7. Let readable be a new ReadableStream .\n // 8. Set up readable with pullAlgorithm and cancelAlgorithm .\n const readable = new ReadableStream({\n start: (controller) => {\n this.#readableStreamController = controller\n },\n pull (controller) {\n let chunk\n while (controller.desiredSize > 0 && (chunk = response.socket.read()) !== null) {\n controller.enqueue(chunk)\n }\n },\n cancel: (reason) => this.#cancel(reason)\n })\n\n // 9. Let writeAlgorithm be an action that writes chunk to stream , given chunk .\n // 10. Let closeAlgorithm be an action that closes stream .\n // 11. Let abortAlgorithm be an action that aborts stream with reason , given reason .\n // 12. Let writable be a new WritableStream .\n // 13. Set up writable with writeAlgorithm , closeAlgorithm , and abortAlgorithm .\n const writable = new WritableStream({\n write: (chunk) => this.#write(chunk),\n close: () => closeWebSocketConnection(this.#handler, null, null),\n abort: (reason) => this.#closeUsingReason(reason)\n })\n\n // Set stream \u2019s readable stream to readable .\n this.#readableStream = readable\n\n // Set stream \u2019s writable stream to writable .\n this.#writableStream = writable\n\n // Resolve stream \u2019s opened promise with WebSocketOpenInfo \u00AB[ \" extensions \" \u2192 extensions , \" protocol \" \u2192 protocol , \" readable \" \u2192 readable , \" writable \" \u2192 writable ]\u00BB.\n this.#openedPromise.resolve({\n extensions,\n protocol,\n readable,\n writable\n })\n }\n\n /** @type {import('../websocket').Handler['onMessage']} */\n #onMessage (type, data) {\n // 1. If stream\u2019s ready state is not OPEN (1), then return.\n if (this.#handler.readyState !== states.OPEN) {\n return\n }\n\n // 2. Let chunk be determined by switching on type:\n // - type indicates that the data is Text\n // a new DOMString containing data\n // - type indicates that the data is Binary\n // a new Uint8Array object, created in the relevant Realm of the\n // WebSocketStream object, whose contents are data\n let chunk\n\n if (type === opcodes.TEXT) {\n try {\n chunk = utf8Decode(data)\n } catch {\n failWebsocketConnection(this.#handler, 'Received invalid UTF-8 in text frame.')\n return\n }\n } else if (type === opcodes.BINARY) {\n chunk = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n }\n\n // 3. Enqueue chunk into stream\u2019s readable stream.\n this.#readableStreamController.enqueue(chunk)\n\n // 4. Apply backpressure to the WebSocket.\n }\n\n /** @type {import('../websocket').Handler['onSocketClose']} */\n #onSocketClose () {\n const wasClean =\n this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n // 1. Change the ready state to CLOSED (3).\n this.#handler.readyState = states.CLOSED\n\n // 2. If stream \u2019s handshake aborted is true, then return.\n if (this.#handshakeAborted) {\n return\n }\n\n // 3. If stream \u2019s was ever connected is false, then reject stream \u2019s opened promise with a new WebSocketError.\n if (!this.#handler.wasEverConnected) {\n this.#openedPromise.reject(new WebSocketError('Socket never opened'))\n }\n\n const result = this.#parser.closingInfo\n\n // 4. Let code be the WebSocket connection close code .\n // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n // If this Close control frame contains no status code, _The WebSocket\n // Connection Close Code_ is considered to be 1005. If _The WebSocket\n // Connection is Closed_ and no Close control frame was received by the\n // endpoint (such as could occur if the underlying transport connection\n // is lost), _The WebSocket Connection Close Code_ is considered to be\n // 1006.\n let code = result?.code ?? 1005\n\n if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n code = 1006\n }\n\n // 5. Let reason be the result of applying UTF-8 decode without BOM to the WebSocket connection close reason .\n const reason = result?.reason == null ? '' : utf8DecodeBytes(Buffer.from(result.reason))\n\n // 6. If the connection was closed cleanly ,\n if (wasClean) {\n // 6.1. Close stream \u2019s readable stream .\n this.#readableStream.cancel().catch(() => {})\n\n // 6.2. Error stream \u2019s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n if (!this.#writableStream.locked) {\n this.#writableStream.abort(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n }\n\n // 6.3. Resolve stream \u2019s closed promise with WebSocketCloseInfo \u00AB[ \" closeCode \" \u2192 code , \" reason \" \u2192 reason ]\u00BB.\n this.#closedPromise.resolve({\n closeCode: code,\n reason\n })\n } else {\n // 7. Otherwise,\n\n // 7.1. Let error be a new WebSocketError whose closeCode is code and reason is reason .\n const error = createUnvalidatedWebSocketError('unclean close', code, reason)\n\n // 7.2. Error stream \u2019s readable stream with error .\n this.#readableStreamController.error(error)\n\n // 7.3. Error stream \u2019s writable stream with error .\n this.#writableStream.abort(error)\n\n // 7.4. Reject stream \u2019s closed promise with error .\n this.#closedPromise.reject(error)\n }\n }\n\n #closeUsingReason (reason) {\n // 1. Let code be null.\n let code = null\n\n // 2. Let reasonString be the empty string.\n let reasonString = ''\n\n // 3. If reason implements WebSocketError ,\n if (webidl.is.WebSocketError(reason)) {\n // 3.1. Set code to reason \u2019s closeCode .\n code = reason.closeCode\n\n // 3.2. Set reasonString to reason \u2019s reason .\n reasonString = reason.reason\n }\n\n // 4. Close the WebSocket with stream , code , and reasonString . If this throws an exception,\n // discard code and reasonString and close the WebSocket with stream .\n closeWebSocketConnection(this.#handler, code, reasonString)\n }\n\n // To cancel a WebSocketStream stream given reason , close using reason giving stream and reason .\n #cancel (reason) {\n this.#closeUsingReason(reason)\n }\n}\n\nObject.defineProperties(WebSocketStream.prototype, {\n url: kEnumerableProperty,\n opened: kEnumerableProperty,\n closed: kEnumerableProperty,\n close: kEnumerableProperty,\n [Symbol.toStringTag]: {\n value: 'WebSocketStream',\n writable: false,\n enumerable: false,\n configurable: true\n }\n})\n\nwebidl.converters.WebSocketStreamOptions = webidl.dictionaryConverter([\n {\n key: 'protocols',\n converter: webidl.sequenceConverter(webidl.converters.USVString),\n defaultValue: () => []\n },\n {\n key: 'signal',\n converter: webidl.nullableConverter(webidl.converters.AbortSignal),\n defaultValue: () => null\n }\n])\n\nwebidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([\n {\n key: 'closeCode',\n converter: (V) => webidl.converters['unsigned short'](V, { enforceRange: true })\n },\n {\n key: 'reason',\n converter: webidl.converters.USVString,\n defaultValue: () => ''\n }\n])\n\nmodule.exports = { WebSocketStream }\n", "'use strict'\n\n/**\n * Checks if the given value is a valid LastEventId.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidLastEventId (value) {\n // LastEventId should not contain U+0000 NULL\n return value.indexOf('\\u0000') === -1\n}\n\n/**\n * Checks if the given value is a base 10 digit.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isASCIINumber (value) {\n if (value.length === 0) return false\n for (let i = 0; i < value.length; i++) {\n if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false\n }\n return true\n}\n\n// https://github.com/nodejs/undici/issues/2664\nfunction delay (ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms).unref()\n })\n}\n\nmodule.exports = {\n isValidLastEventId,\n isASCIINumber,\n delay\n}\n", "'use strict'\nconst { Transform } = require('node:stream')\nconst { isASCIINumber, isValidLastEventId } = require('./util')\n\n/**\n * @type {number[]} BOM\n */\nconst BOM = [0xEF, 0xBB, 0xBF]\n/**\n * @type {10} LF\n */\nconst LF = 0x0A\n/**\n * @type {13} CR\n */\nconst CR = 0x0D\n/**\n * @type {58} COLON\n */\nconst COLON = 0x3A\n/**\n * @type {32} SPACE\n */\nconst SPACE = 0x20\n\n/**\n * @typedef {object} EventSourceStreamEvent\n * @type {object}\n * @property {string} [event] The event type.\n * @property {string} [data] The data of the message.\n * @property {string} [id] A unique ID for the event.\n * @property {string} [retry] The reconnection time, in milliseconds.\n */\n\n/**\n * @typedef eventSourceSettings\n * @type {object}\n * @property {string} [lastEventId] The last event ID received from the server.\n * @property {string} [origin] The origin of the event source.\n * @property {number} [reconnectionTime] The reconnection time, in milliseconds.\n */\n\nclass EventSourceStream extends Transform {\n /**\n * @type {eventSourceSettings}\n */\n state\n\n /**\n * Leading byte-order-mark check.\n * @type {boolean}\n */\n checkBOM = true\n\n /**\n * @type {boolean}\n */\n crlfCheck = false\n\n /**\n * @type {boolean}\n */\n eventEndCheck = false\n\n /**\n * @type {Buffer|null}\n */\n buffer = null\n\n pos = 0\n\n event = {\n data: undefined,\n event: undefined,\n id: undefined,\n retry: undefined\n }\n\n /**\n * @param {object} options\n * @param {boolean} [options.readableObjectMode]\n * @param {eventSourceSettings} [options.eventSourceSettings]\n * @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]\n */\n constructor (options = {}) {\n // Enable object mode as EventSourceStream emits objects of shape\n // EventSourceStreamEvent\n options.readableObjectMode = true\n\n super(options)\n\n this.state = options.eventSourceSettings || {}\n if (options.push) {\n this.push = options.push\n }\n }\n\n /**\n * @param {Buffer} chunk\n * @param {string} _encoding\n * @param {Function} callback\n * @returns {void}\n */\n _transform (chunk, _encoding, callback) {\n if (chunk.length === 0) {\n callback()\n return\n }\n\n // Cache the chunk in the buffer, as the data might not be complete while\n // processing it\n // TODO: Investigate if there is a more performant way to handle\n // incoming chunks\n // see: https://github.com/nodejs/undici/issues/2630\n if (this.buffer) {\n this.buffer = Buffer.concat([this.buffer, chunk])\n } else {\n this.buffer = chunk\n }\n\n // Strip leading byte-order-mark if we opened the stream and started\n // the processing of the incoming data\n if (this.checkBOM) {\n switch (this.buffer.length) {\n case 1:\n // Check if the first byte is the same as the first byte of the BOM\n if (this.buffer[0] === BOM[0]) {\n // If it is, we need to wait for more data\n callback()\n return\n }\n // Set the checkBOM flag to false as we don't need to check for the\n // BOM anymore\n this.checkBOM = false\n\n // The buffer only contains one byte so we need to wait for more data\n callback()\n return\n case 2:\n // Check if the first two bytes are the same as the first two bytes\n // of the BOM\n if (\n this.buffer[0] === BOM[0] &&\n this.buffer[1] === BOM[1]\n ) {\n // If it is, we need to wait for more data, because the third byte\n // is needed to determine if it is the BOM or not\n callback()\n return\n }\n\n // Set the checkBOM flag to false as we don't need to check for the\n // BOM anymore\n this.checkBOM = false\n break\n case 3:\n // Check if the first three bytes are the same as the first three\n // bytes of the BOM\n if (\n this.buffer[0] === BOM[0] &&\n this.buffer[1] === BOM[1] &&\n this.buffer[2] === BOM[2]\n ) {\n // If it is, we can drop the buffered data, as it is only the BOM\n this.buffer = Buffer.alloc(0)\n // Set the checkBOM flag to false as we don't need to check for the\n // BOM anymore\n this.checkBOM = false\n\n // Await more data\n callback()\n return\n }\n // If it is not the BOM, we can start processing the data\n this.checkBOM = false\n break\n default:\n // The buffer is longer than 3 bytes, so we can drop the BOM if it is\n // present\n if (\n this.buffer[0] === BOM[0] &&\n this.buffer[1] === BOM[1] &&\n this.buffer[2] === BOM[2]\n ) {\n // Remove the BOM from the buffer\n this.buffer = this.buffer.subarray(3)\n }\n\n // Set the checkBOM flag to false as we don't need to check for the\n this.checkBOM = false\n break\n }\n }\n\n while (this.pos < this.buffer.length) {\n // If the previous line ended with an end-of-line, we need to check\n // if the next character is also an end-of-line.\n if (this.eventEndCheck) {\n // If the the current character is an end-of-line, then the event\n // is finished and we can process it\n\n // If the previous line ended with a carriage return, we need to\n // check if the current character is a line feed and remove it\n // from the buffer.\n if (this.crlfCheck) {\n // If the current character is a line feed, we can remove it\n // from the buffer and reset the crlfCheck flag\n if (this.buffer[this.pos] === LF) {\n this.buffer = this.buffer.subarray(this.pos + 1)\n this.pos = 0\n this.crlfCheck = false\n\n // It is possible that the line feed is not the end of the\n // event. We need to check if the next character is an\n // end-of-line character to determine if the event is\n // finished. We simply continue the loop to check the next\n // character.\n\n // As we removed the line feed from the buffer and set the\n // crlfCheck flag to false, we basically don't make any\n // distinction between a line feed and a carriage return.\n continue\n }\n this.crlfCheck = false\n }\n\n if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n // If the current character is a carriage return, we need to\n // set the crlfCheck flag to true, as we need to check if the\n // next character is a line feed so we can remove it from the\n // buffer\n if (this.buffer[this.pos] === CR) {\n this.crlfCheck = true\n }\n\n this.buffer = this.buffer.subarray(this.pos + 1)\n this.pos = 0\n if (\n this.event.data !== undefined || this.event.event || this.event.id || this.event.retry) {\n this.processEvent(this.event)\n }\n this.clearEvent()\n continue\n }\n // If the current character is not an end-of-line, then the event\n // is not finished and we have to reset the eventEndCheck flag\n this.eventEndCheck = false\n continue\n }\n\n // If the current character is an end-of-line, we can process the\n // line\n if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n // If the current character is a carriage return, we need to\n // set the crlfCheck flag to true, as we need to check if the\n // next character is a line feed\n if (this.buffer[this.pos] === CR) {\n this.crlfCheck = true\n }\n\n // In any case, we can process the line as we reached an\n // end-of-line character\n this.parseLine(this.buffer.subarray(0, this.pos), this.event)\n\n // Remove the processed line from the buffer\n this.buffer = this.buffer.subarray(this.pos + 1)\n // Reset the position as we removed the processed line from the buffer\n this.pos = 0\n // A line was processed and this could be the end of the event. We need\n // to check if the next line is empty to determine if the event is\n // finished.\n this.eventEndCheck = true\n continue\n }\n\n this.pos++\n }\n\n callback()\n }\n\n /**\n * @param {Buffer} line\n * @param {EventSourceStreamEvent} event\n */\n parseLine (line, event) {\n // If the line is empty (a blank line)\n // Dispatch the event, as defined below.\n // This will be handled in the _transform method\n if (line.length === 0) {\n return\n }\n\n // If the line starts with a U+003A COLON character (:)\n // Ignore the line.\n const colonPosition = line.indexOf(COLON)\n if (colonPosition === 0) {\n return\n }\n\n let field = ''\n let value = ''\n\n // If the line contains a U+003A COLON character (:)\n if (colonPosition !== -1) {\n // Collect the characters on the line before the first U+003A COLON\n // character (:), and let field be that string.\n // TODO: Investigate if there is a more performant way to extract the\n // field\n // see: https://github.com/nodejs/undici/issues/2630\n field = line.subarray(0, colonPosition).toString('utf8')\n\n // Collect the characters on the line after the first U+003A COLON\n // character (:), and let value be that string.\n // If value starts with a U+0020 SPACE character, remove it from value.\n let valueStart = colonPosition + 1\n if (line[valueStart] === SPACE) {\n ++valueStart\n }\n // TODO: Investigate if there is a more performant way to extract the\n // value\n // see: https://github.com/nodejs/undici/issues/2630\n value = line.subarray(valueStart).toString('utf8')\n\n // Otherwise, the string is not empty but does not contain a U+003A COLON\n // character (:)\n } else {\n // Process the field using the steps described below, using the whole\n // line as the field name, and the empty string as the field value.\n field = line.toString('utf8')\n value = ''\n }\n\n // Modify the event with the field name and value. The value is also\n // decoded as UTF-8\n switch (field) {\n case 'data':\n if (event[field] === undefined) {\n event[field] = value\n } else {\n event[field] += `\\n${value}`\n }\n break\n case 'retry':\n if (isASCIINumber(value)) {\n event[field] = value\n }\n break\n case 'id':\n if (isValidLastEventId(value)) {\n event[field] = value\n }\n break\n case 'event':\n if (value.length > 0) {\n event[field] = value\n }\n break\n }\n }\n\n /**\n * @param {EventSourceStreamEvent} event\n */\n processEvent (event) {\n if (event.retry && isASCIINumber(event.retry)) {\n this.state.reconnectionTime = parseInt(event.retry, 10)\n }\n\n if (event.id && isValidLastEventId(event.id)) {\n this.state.lastEventId = event.id\n }\n\n // only dispatch event, when data is provided\n if (event.data !== undefined) {\n this.push({\n type: event.event || 'message',\n options: {\n data: event.data,\n lastEventId: this.state.lastEventId,\n origin: this.state.origin\n }\n })\n }\n }\n\n clearEvent () {\n this.event = {\n data: undefined,\n event: undefined,\n id: undefined,\n retry: undefined\n }\n }\n}\n\nmodule.exports = {\n EventSourceStream\n}\n", "'use strict'\n\nconst { pipeline } = require('node:stream')\nconst { fetching } = require('../fetch')\nconst { makeRequest } = require('../fetch/request')\nconst { webidl } = require('../fetch/webidl')\nconst { EventSourceStream } = require('./eventsource-stream')\nconst { parseMIMEType } = require('../fetch/data-url')\nconst { createFastMessageEvent } = require('../websocket/events')\nconst { isNetworkError } = require('../fetch/response')\nconst { delay } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { environmentSettingsObject } = require('../fetch/util')\n\nlet experimentalWarned = false\n\n/**\n * A reconnection time, in milliseconds. This must initially be an implementation-defined value,\n * probably in the region of a few seconds.\n *\n * In Comparison:\n * - Chrome uses 3000ms.\n * - Deno uses 5000ms.\n *\n * @type {3000}\n */\nconst defaultReconnectionTime = 3000\n\n/**\n * The readyState attribute represents the state of the connection.\n * @typedef ReadyState\n * @type {0|1|2}\n * @readonly\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev\n */\n\n/**\n * The connection has not yet been established, or it was closed and the user\n * agent is reconnecting.\n * @type {0}\n */\nconst CONNECTING = 0\n\n/**\n * The user agent has an open connection and is dispatching events as it\n * receives them.\n * @type {1}\n */\nconst OPEN = 1\n\n/**\n * The connection is not open, and the user agent is not trying to reconnect.\n * @type {2}\n */\nconst CLOSED = 2\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"same-origin\".\n * @type {'anonymous'}\n */\nconst ANONYMOUS = 'anonymous'\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"include\".\n * @type {'use-credentials'}\n */\nconst USE_CREDENTIALS = 'use-credentials'\n\n/**\n * The EventSource interface is used to receive server-sent events. It\n * connects to a server over HTTP and receives events in text/event-stream\n * format without closing the connection.\n * @extends {EventTarget}\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n * @api public\n */\nclass EventSource extends EventTarget {\n #events = {\n open: null,\n error: null,\n message: null\n }\n\n #url\n #withCredentials = false\n\n /**\n * @type {ReadyState}\n */\n #readyState = CONNECTING\n\n #request = null\n #controller = null\n\n #dispatcher\n\n /**\n * @type {import('./eventsource-stream').eventSourceSettings}\n */\n #state\n\n /**\n * Creates a new EventSource object.\n * @param {string} url\n * @param {EventSourceInit} [eventSourceInitDict={}]\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface\n */\n constructor (url, eventSourceInitDict = {}) {\n // 1. Let ev be a new EventSource object.\n super()\n\n webidl.util.markAsUncloneable(this)\n\n const prefix = 'EventSource constructor'\n webidl.argumentLengthCheck(arguments, 1, prefix)\n\n if (!experimentalWarned) {\n experimentalWarned = true\n process.emitWarning('EventSource is experimental, expect them to change at any time.', {\n code: 'UNDICI-ES'\n })\n }\n\n url = webidl.converters.USVString(url)\n eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')\n\n this.#dispatcher = eventSourceInitDict.dispatcher\n this.#state = {\n lastEventId: '',\n reconnectionTime: defaultReconnectionTime\n }\n\n // 2. Let settings be ev's relevant settings object.\n // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object\n const settings = environmentSettingsObject\n\n let urlRecord\n\n try {\n // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.\n urlRecord = new URL(url, settings.settingsObject.baseUrl)\n this.#state.origin = urlRecord.origin\n } catch (e) {\n // 4. If urlRecord is failure, then throw a \"SyntaxError\" DOMException.\n throw new DOMException(e, 'SyntaxError')\n }\n\n // 5. Set ev's url to urlRecord.\n this.#url = urlRecord.href\n\n // 6. Let corsAttributeState be Anonymous.\n let corsAttributeState = ANONYMOUS\n\n // 7. If the value of eventSourceInitDict's withCredentials member is true,\n // then set corsAttributeState to Use Credentials and set ev's\n // withCredentials attribute to true.\n if (eventSourceInitDict.withCredentials === true) {\n corsAttributeState = USE_CREDENTIALS\n this.#withCredentials = true\n }\n\n // 8. Let request be the result of creating a potential-CORS request given\n // urlRecord, the empty string, and corsAttributeState.\n const initRequest = {\n redirect: 'follow',\n keepalive: true,\n // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes\n mode: 'cors',\n credentials: corsAttributeState === 'anonymous'\n ? 'same-origin'\n : 'omit',\n referrer: 'no-referrer'\n }\n\n // 9. Set request's client to settings.\n initRequest.client = environmentSettingsObject.settingsObject\n\n // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.\n initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]\n\n // 11. Set request's cache mode to \"no-store\".\n initRequest.cache = 'no-store'\n\n // 12. Set request's initiator type to \"other\".\n initRequest.initiator = 'other'\n\n initRequest.urlList = [new URL(this.#url)]\n\n // 13. Set ev's request to request.\n this.#request = makeRequest(initRequest)\n\n this.#connect()\n }\n\n /**\n * Returns the state of this EventSource object's connection. It can have the\n * values described below.\n * @returns {ReadyState}\n * @readonly\n */\n get readyState () {\n return this.#readyState\n }\n\n /**\n * Returns the URL providing the event stream.\n * @readonly\n * @returns {string}\n */\n get url () {\n return this.#url\n }\n\n /**\n * Returns a boolean indicating whether the EventSource object was\n * instantiated with CORS credentials set (true), or not (false, the default).\n */\n get withCredentials () {\n return this.#withCredentials\n }\n\n #connect () {\n if (this.#readyState === CLOSED) return\n\n this.#readyState = CONNECTING\n\n const fetchParams = {\n request: this.#request,\n dispatcher: this.#dispatcher\n }\n\n // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.\n const processEventSourceEndOfBody = (response) => {\n if (isNetworkError(response)) {\n this.dispatchEvent(new Event('error'))\n this.close()\n }\n\n this.#reconnect()\n }\n\n // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...\n fetchParams.processResponseEndOfBody = processEventSourceEndOfBody\n\n // and processResponse set to the following steps given response res:\n fetchParams.processResponse = (response) => {\n // 1. If res is an aborted network error, then fail the connection.\n\n if (isNetworkError(response)) {\n // 1. When a user agent is to fail the connection, the user agent\n // must queue a task which, if the readyState attribute is set to a\n // value other than CLOSED, sets the readyState attribute to CLOSED\n // and fires an event named error at the EventSource object. Once the\n // user agent has failed the connection, it does not attempt to\n // reconnect.\n if (response.aborted) {\n this.close()\n this.dispatchEvent(new Event('error'))\n return\n // 2. Otherwise, if res is a network error, then reestablish the\n // connection, unless the user agent knows that to be futile, in\n // which case the user agent may fail the connection.\n } else {\n this.#reconnect()\n return\n }\n }\n\n // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`\n // is not `text/event-stream`, then fail the connection.\n const contentType = response.headersList.get('content-type', true)\n const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'\n const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'\n if (\n response.status !== 200 ||\n contentTypeValid === false\n ) {\n this.close()\n this.dispatchEvent(new Event('error'))\n return\n }\n\n // 4. Otherwise, announce the connection and interpret res's body\n // line by line.\n\n // When a user agent is to announce the connection, the user agent\n // must queue a task which, if the readyState attribute is set to a\n // value other than CLOSED, sets the readyState attribute to OPEN\n // and fires an event named open at the EventSource object.\n // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n this.#readyState = OPEN\n this.dispatchEvent(new Event('open'))\n\n // If redirected to a different origin, set the origin to the new origin.\n this.#state.origin = response.urlList[response.urlList.length - 1].origin\n\n const eventSourceStream = new EventSourceStream({\n eventSourceSettings: this.#state,\n push: (event) => {\n this.dispatchEvent(createFastMessageEvent(\n event.type,\n event.options\n ))\n }\n })\n\n pipeline(response.body.stream,\n eventSourceStream,\n (error) => {\n if (\n error?.aborted === false\n ) {\n this.close()\n this.dispatchEvent(new Event('error'))\n }\n })\n }\n\n this.#controller = fetching(fetchParams)\n }\n\n /**\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n * @returns {Promise<void>}\n */\n async #reconnect () {\n // When a user agent is to reestablish the connection, the user agent must\n // run the following steps. These steps are run in parallel, not as part of\n // a task. (The tasks that it queues, of course, are run like normal tasks\n // and not themselves in parallel.)\n\n // 1. Queue a task to run the following steps:\n\n // 1. If the readyState attribute is set to CLOSED, abort the task.\n if (this.#readyState === CLOSED) return\n\n // 2. Set the readyState attribute to CONNECTING.\n this.#readyState = CONNECTING\n\n // 3. Fire an event named error at the EventSource object.\n this.dispatchEvent(new Event('error'))\n\n // 2. Wait a delay equal to the reconnection time of the event source.\n await delay(this.#state.reconnectionTime)\n\n // 5. Queue a task to run the following steps:\n\n // 1. If the EventSource object's readyState attribute is not set to\n // CONNECTING, then return.\n if (this.#readyState !== CONNECTING) return\n\n // 2. Let request be the EventSource object's request.\n // 3. If the EventSource object's last event ID string is not the empty\n // string, then:\n // 1. Let lastEventIDValue be the EventSource object's last event ID\n // string, encoded as UTF-8.\n // 2. Set (`Last-Event-ID`, lastEventIDValue) in request's header\n // list.\n if (this.#state.lastEventId.length) {\n this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)\n }\n\n // 4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.\n this.#connect()\n }\n\n /**\n * Closes the connection, if any, and sets the readyState attribute to\n * CLOSED.\n */\n close () {\n webidl.brandCheck(this, EventSource)\n\n if (this.#readyState === CLOSED) return\n this.#readyState = CLOSED\n this.#controller.abort()\n this.#request = null\n }\n\n get onopen () {\n return this.#events.open\n }\n\n set onopen (fn) {\n if (this.#events.open) {\n this.removeEventListener('open', this.#events.open)\n }\n\n if (typeof fn === 'function') {\n this.#events.open = fn\n this.addEventListener('open', fn)\n } else {\n this.#events.open = null\n }\n }\n\n get onmessage () {\n return this.#events.message\n }\n\n set onmessage (fn) {\n if (this.#events.message) {\n this.removeEventListener('message', this.#events.message)\n }\n\n if (typeof fn === 'function') {\n this.#events.message = fn\n this.addEventListener('message', fn)\n } else {\n this.#events.message = null\n }\n }\n\n get onerror () {\n return this.#events.error\n }\n\n set onerror (fn) {\n if (this.#events.error) {\n this.removeEventListener('error', this.#events.error)\n }\n\n if (typeof fn === 'function') {\n this.#events.error = fn\n this.addEventListener('error', fn)\n } else {\n this.#events.error = null\n }\n }\n}\n\nconst constantsPropertyDescriptors = {\n CONNECTING: {\n __proto__: null,\n configurable: false,\n enumerable: true,\n value: CONNECTING,\n writable: false\n },\n OPEN: {\n __proto__: null,\n configurable: false,\n enumerable: true,\n value: OPEN,\n writable: false\n },\n CLOSED: {\n __proto__: null,\n configurable: false,\n enumerable: true,\n value: CLOSED,\n writable: false\n }\n}\n\nObject.defineProperties(EventSource, constantsPropertyDescriptors)\nObject.defineProperties(EventSource.prototype, constantsPropertyDescriptors)\n\nObject.defineProperties(EventSource.prototype, {\n close: kEnumerableProperty,\n onerror: kEnumerableProperty,\n onmessage: kEnumerableProperty,\n onopen: kEnumerableProperty,\n readyState: kEnumerableProperty,\n url: kEnumerableProperty,\n withCredentials: kEnumerableProperty\n})\n\nwebidl.converters.EventSourceInitDict = webidl.dictionaryConverter([\n {\n key: 'withCredentials',\n converter: webidl.converters.boolean,\n defaultValue: () => false\n },\n {\n key: 'dispatcher', // undici only\n converter: webidl.converters.any\n }\n])\n\nmodule.exports = {\n EventSource,\n defaultReconnectionTime\n}\n", "'use strict'\n\nconst Client = require('./lib/dispatcher/client')\nconst Dispatcher = require('./lib/dispatcher/dispatcher')\nconst Pool = require('./lib/dispatcher/pool')\nconst BalancedPool = require('./lib/dispatcher/balanced-pool')\nconst Agent = require('./lib/dispatcher/agent')\nconst ProxyAgent = require('./lib/dispatcher/proxy-agent')\nconst EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent')\nconst RetryAgent = require('./lib/dispatcher/retry-agent')\nconst errors = require('./lib/core/errors')\nconst util = require('./lib/core/util')\nconst { InvalidArgumentError } = errors\nconst api = require('./lib/api')\nconst buildConnector = require('./lib/core/connect')\nconst MockClient = require('./lib/mock/mock-client')\nconst MockAgent = require('./lib/mock/mock-agent')\nconst MockPool = require('./lib/mock/mock-pool')\nconst mockErrors = require('./lib/mock/mock-errors')\nconst RetryHandler = require('./lib/handler/retry-handler')\nconst { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global')\nconst DecoratorHandler = require('./lib/handler/decorator-handler')\nconst RedirectHandler = require('./lib/handler/redirect-handler')\n\nObject.assign(Dispatcher.prototype, api)\n\nmodule.exports.Dispatcher = Dispatcher\nmodule.exports.Client = Client\nmodule.exports.Pool = Pool\nmodule.exports.BalancedPool = BalancedPool\nmodule.exports.Agent = Agent\nmodule.exports.ProxyAgent = ProxyAgent\nmodule.exports.EnvHttpProxyAgent = EnvHttpProxyAgent\nmodule.exports.RetryAgent = RetryAgent\nmodule.exports.RetryHandler = RetryHandler\n\nmodule.exports.DecoratorHandler = DecoratorHandler\nmodule.exports.RedirectHandler = RedirectHandler\nmodule.exports.interceptors = {\n redirect: require('./lib/interceptor/redirect'),\n responseError: require('./lib/interceptor/response-error'),\n retry: require('./lib/interceptor/retry'),\n dump: require('./lib/interceptor/dump'),\n dns: require('./lib/interceptor/dns'),\n cache: require('./lib/interceptor/cache')\n}\n\nmodule.exports.cacheStores = {\n MemoryCacheStore: require('./lib/cache/memory-cache-store')\n}\n\nconst SqliteCacheStore = require('./lib/cache/sqlite-cache-store')\nmodule.exports.cacheStores.SqliteCacheStore = SqliteCacheStore\n\nmodule.exports.buildConnector = buildConnector\nmodule.exports.errors = errors\nmodule.exports.util = {\n parseHeaders: util.parseHeaders,\n headerNameToString: util.headerNameToString\n}\n\nfunction makeDispatcher (fn) {\n return (url, opts, handler) => {\n if (typeof opts === 'function') {\n handler = opts\n opts = null\n }\n\n if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {\n throw new InvalidArgumentError('invalid url')\n }\n\n if (opts != null && typeof opts !== 'object') {\n throw new InvalidArgumentError('invalid opts')\n }\n\n if (opts && opts.path != null) {\n if (typeof opts.path !== 'string') {\n throw new InvalidArgumentError('invalid opts.path')\n }\n\n let path = opts.path\n if (!opts.path.startsWith('/')) {\n path = `/${path}`\n }\n\n url = new URL(util.parseOrigin(url).origin + path)\n } else {\n if (!opts) {\n opts = typeof url === 'object' ? url : {}\n }\n\n url = util.parseURL(url)\n }\n\n const { agent, dispatcher = getGlobalDispatcher() } = opts\n\n if (agent) {\n throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')\n }\n\n return fn.call(dispatcher, {\n ...opts,\n origin: url.origin,\n path: url.search ? `${url.pathname}${url.search}` : url.pathname,\n method: opts.method || (opts.body ? 'PUT' : 'GET')\n }, handler)\n }\n}\n\nmodule.exports.setGlobalDispatcher = setGlobalDispatcher\nmodule.exports.getGlobalDispatcher = getGlobalDispatcher\n\nconst fetchImpl = require('./lib/web/fetch').fetch\nmodule.exports.fetch = async function fetch (init, options = undefined) {\n try {\n return await fetchImpl(init, options)\n } catch (err) {\n if (err && typeof err === 'object') {\n Error.captureStackTrace(err)\n }\n\n throw err\n }\n}\nmodule.exports.Headers = require('./lib/web/fetch/headers').Headers\nmodule.exports.Response = require('./lib/web/fetch/response').Response\nmodule.exports.Request = require('./lib/web/fetch/request').Request\nmodule.exports.FormData = require('./lib/web/fetch/formdata').FormData\n\nconst { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global')\n\nmodule.exports.setGlobalOrigin = setGlobalOrigin\nmodule.exports.getGlobalOrigin = getGlobalOrigin\n\nconst { CacheStorage } = require('./lib/web/cache/cachestorage')\nconst { kConstruct } = require('./lib/core/symbols')\n\n// Cache & CacheStorage are tightly coupled with fetch. Even if it may run\n// in an older version of Node, it doesn't have any use without fetch.\nmodule.exports.caches = new CacheStorage(kConstruct)\n\nconst { deleteCookie, getCookies, getSetCookies, setCookie, parseCookie } = require('./lib/web/cookies')\n\nmodule.exports.deleteCookie = deleteCookie\nmodule.exports.getCookies = getCookies\nmodule.exports.getSetCookies = getSetCookies\nmodule.exports.setCookie = setCookie\nmodule.exports.parseCookie = parseCookie\n\nconst { parseMIMEType, serializeAMimeType } = require('./lib/web/fetch/data-url')\n\nmodule.exports.parseMIMEType = parseMIMEType\nmodule.exports.serializeAMimeType = serializeAMimeType\n\nconst { CloseEvent, ErrorEvent, MessageEvent } = require('./lib/web/websocket/events')\nmodule.exports.WebSocket = require('./lib/web/websocket/websocket').WebSocket\nmodule.exports.CloseEvent = CloseEvent\nmodule.exports.ErrorEvent = ErrorEvent\nmodule.exports.MessageEvent = MessageEvent\n\nmodule.exports.WebSocketStream = require('./lib/web/websocket/stream/websocketstream').WebSocketStream\nmodule.exports.WebSocketError = require('./lib/web/websocket/stream/websocketerror').WebSocketError\n\nmodule.exports.request = makeDispatcher(api.request)\nmodule.exports.stream = makeDispatcher(api.stream)\nmodule.exports.pipeline = makeDispatcher(api.pipeline)\nmodule.exports.connect = makeDispatcher(api.connect)\nmodule.exports.upgrade = makeDispatcher(api.upgrade)\n\nmodule.exports.MockClient = MockClient\nmodule.exports.MockPool = MockPool\nmodule.exports.MockAgent = MockAgent\nmodule.exports.mockErrors = mockErrors\n\nconst { EventSource } = require('./lib/web/eventsource/eventsource')\n\nmodule.exports.EventSource = EventSource\n", "import { defineExtension } from './defineExtension'\nimport { getExtensionContext } from './getExtensionContext'\n\nexport { defineExtension }\nexport { getExtensionContext }\n", "import { Client } from '../../getPrismaClient'\nimport { ExtensionArgs } from '../types/exported/ExtensionArgs'\n\nexport function defineExtension(ext: ExtensionArgs | ((client: Client) => Client)) {\n if (typeof ext === 'function') {\n return ext\n }\n\n return (client: Client) => client.$extends(ext)\n}\n", "/*\n * Because we use a symbol to store the context, we need to merge the context\n * with the original this type. We manage the context via `getExtensionContext`\n * to circumvent the limitations of `this` inference in TS, while also providing\n * a unified API for context management in generic and non-generic extensions.\n */\n\n/* eslint-disable prettier/prettier */\nexport type Context<T> = T extends { [K: symbol]: { ctx: infer C } }\n ? C &\n T & {\n /**\n * @deprecated Use `$name` instead.\n */\n name?: string\n $name?: string\n $parent?: unknown\n }\n : T & {\n /**\n * @deprecated Use `$name` instead.\n */\n name?: string\n $name?: string\n $parent?: unknown\n }\n\nexport function getExtensionContext<T>(that: T) {\n return that as any as Context<T>\n}\n", "import { validator } from './validator'\n\n/*\n * /!\\ These exports are exposed to the user. Proceed with caution.\n *\n * TODO: Move more hardcoded utils from generation into here\n */\n\nexport { validator }\n", "import { Args, Operation } from '../types/exported/Public'\nimport { Exact } from '../types/exported/Utils'\n\nexport function validator<V>(): <S>(select: Exact<S, V>) => S\nexport function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(\n client: C,\n model: M,\n operation: O,\n): <S>(select: Exact<S, Args<C[M], O>>) => S\nexport function validator<\n C,\n M extends Exclude<keyof C, `$${string}`>,\n O extends keyof C[M] & Operation,\n P extends keyof Args<C[M], O>,\n>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S\nexport function validator(..._args: any[]) {\n return (args: any) => args\n}\n", "let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nexport const $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexport const reset = init(0, 0);\nexport const bold = init(1, 22);\nexport const dim = init(2, 22);\nexport const italic = init(3, 23);\nexport const underline = init(4, 24);\nexport const inverse = init(7, 27);\nexport const hidden = init(8, 28);\nexport const strikethrough = init(9, 29);\n\n// colors\nexport const black = init(30, 39);\nexport const red = init(31, 39);\nexport const green = init(32, 39);\nexport const yellow = init(33, 39);\nexport const blue = init(34, 39);\nexport const magenta = init(35, 39);\nexport const cyan = init(36, 39);\nexport const white = init(37, 39);\nexport const gray = init(90, 39);\nexport const grey = init(90, 39);\n\n// background colors\nexport const bgBlack = init(40, 49);\nexport const bgRed = init(41, 49);\nexport const bgGreen = init(42, 49);\nexport const bgYellow = init(43, 49);\nexport const bgBlue = init(44, 49);\nexport const bgMagenta = init(45, 49);\nexport const bgCyan = init(46, 49);\nexport const bgWhite = init(47, 49);\n", "import * as kleur from 'kleur/colors'\nimport { bold } from 'kleur/colors'\n\nconst MAX_ARGS_HISTORY = 100\nconst COLORS = ['green', 'yellow', 'blue', 'magenta', 'cyan', 'red']\n\nconst argsHistory: [namespace: string, ...unknown[]][] = []\nlet lastTimestamp = Date.now()\nlet lastColor = 0\n\nconst processEnv = typeof process !== 'undefined' ? process.env : {}\n\nglobalThis.DEBUG ??= processEnv.DEBUG ?? ''\nglobalThis.DEBUG_COLORS ??= processEnv.DEBUG_COLORS ? processEnv.DEBUG_COLORS === 'true' : true\n\n/**\n * Top-level utilities to configure the debug module.\n *\n * @example\n * ```ts\n * import Debug from '@prisma/debug'\n * Debug.enable('prisma:client')\n * const debug = Debug('prisma:client')\n * debug('Hello World')\n * ```\n */\nconst topProps = {\n enable(namespace: any) {\n if (typeof namespace === 'string') {\n globalThis.DEBUG = namespace\n }\n },\n disable() {\n const prev = globalThis.DEBUG\n globalThis.DEBUG = ''\n return prev\n },\n // this is the core logic to check if logging should happen or not\n enabled(namespace: string) {\n // these are the namespaces that we are listening to in DEBUG=...\n const listenedNamespaces: string[] = globalThis.DEBUG.split(',').map((s: string) => {\n return s.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // escape regex except \"*\"\n })\n\n // we take incoming namespaces and check then against listened\n const isListened = listenedNamespaces.some((listenedNamespace) => {\n if (listenedNamespace === '' || listenedNamespace[0] === '-') return false\n\n return namespace.match(RegExp(listenedNamespace.split('*').join('.*') + '$'))\n })\n\n // we take incoming namespaces and check then against excluded\n const isExcluded = listenedNamespaces.some((listenedNamespace) => {\n if (listenedNamespace === '' || listenedNamespace[0] !== '-') return false\n\n return namespace.match(RegExp(listenedNamespace.slice(1).split('*').join('.*') + '$'))\n })\n\n return isListened && !isExcluded\n },\n log: (...args: string[]) => {\n const [namespace, format, ...rest] = args\n // Note: `console.warn` / `console.log` use `util.format` internally, so they can handle\n // `printf`-style string interpolation.\n const logWithFormatting = console.warn ?? console.log\n\n // console only formats first arg, concat ns+format\n logWithFormatting(`${namespace} ${format}`, ...rest)\n },\n formatters: {}, // not implemented\n}\n\n/**\n * Create a new debug instance with the given namespace.\n *\n * @example\n * ```ts\n * import Debug from '@prisma/debug'\n * const debug = Debug('prisma:client')\n * debug('Hello World')\n * ```\n */\nfunction debugCreate(namespace: string) {\n const instanceProps = {\n color: COLORS[lastColor++ % COLORS.length],\n enabled: topProps.enabled(namespace),\n namespace: namespace,\n log: topProps.log,\n extend: () => {}, // not implemented\n }\n\n const debugCall = (...args: any[]) => {\n const { enabled, namespace, color, log } = instanceProps\n\n // we push the args to our history of args\n if (args.length !== 0) {\n argsHistory.push([namespace, ...args])\n }\n\n // if it is too big, then we remove some\n if (argsHistory.length > MAX_ARGS_HISTORY) {\n argsHistory.shift()\n }\n\n if (topProps.enabled(namespace) || enabled) {\n const stringArgs = args.map((arg) => {\n if (typeof arg === 'string') {\n return arg\n }\n\n return safeStringify(arg)\n })\n\n const ms = `+${Date.now() - lastTimestamp}ms`\n lastTimestamp = Date.now()\n\n if (globalThis.DEBUG_COLORS) {\n log(kleur[color](bold(namespace)), ...stringArgs, kleur[color](ms))\n } else {\n log(namespace, ...stringArgs, ms)\n }\n }\n }\n\n return new Proxy(debugCall, {\n get: (_, prop) => instanceProps[prop],\n set: (_, prop, value) => (instanceProps[prop] = value),\n }) as typeof debugCall & typeof instanceProps\n}\n\nconst Debug = new Proxy(debugCreate, {\n get: (_, prop) => topProps[prop],\n set: (_, prop, value) => (topProps[prop] = value),\n}) as typeof debugCreate & typeof topProps\n\nfunction safeStringify(value: any, indent = 2) {\n const cache = new Set<any>()\n\n return JSON.stringify(\n value,\n (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (cache.has(value)) {\n return `[Circular *]`\n }\n\n cache.add(value)\n } else if (typeof value === 'bigint') {\n return value.toString()\n }\n\n return value\n },\n indent,\n )\n}\n\n/**\n * We can get the logs for all the last {@link MAX_ARGS_HISTORY} ${@link debugCall} that\n * have happened in the different packages. Useful to generate error report links.\n * @see https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers\n * @param numChars\n * @returns\n */\nexport function getLogs(numChars = 7500): string {\n const logs = argsHistory\n .map(([namespace, ...args]) => {\n return `${namespace} ${args\n .map((arg) => {\n if (typeof arg === 'string') {\n return arg\n } else {\n return JSON.stringify(arg)\n }\n })\n .join(' ')}`\n })\n .join('\\n')\n\n if (logs.length < numChars) {\n return logs\n }\n\n return logs.slice(-numChars)\n}\n\nexport function clearLogs() {\n argsHistory.length = 0\n}\n\nexport { Debug }\nexport default Debug\n", "export type BinaryTarget =\n | 'native'\n | 'darwin'\n | 'darwin-arm64'\n | 'debian-openssl-1.0.x'\n | 'debian-openssl-1.1.x'\n | 'debian-openssl-3.0.x'\n | 'rhel-openssl-1.0.x'\n | 'rhel-openssl-1.1.x'\n | 'rhel-openssl-3.0.x'\n | 'linux-arm64-openssl-1.1.x'\n | 'linux-arm64-openssl-1.0.x'\n | 'linux-arm64-openssl-3.0.x'\n | 'linux-arm-openssl-1.1.x'\n | 'linux-arm-openssl-1.0.x'\n | 'linux-arm-openssl-3.0.x'\n | 'linux-musl'\n | 'linux-musl-openssl-3.0.x'\n | 'linux-musl-arm64-openssl-1.1.x'\n | 'linux-musl-arm64-openssl-3.0.x'\n | 'linux-nixos'\n | 'linux-static-x64'\n | 'linux-static-arm64'\n | 'windows'\n | 'freebsd11'\n | 'freebsd12'\n | 'freebsd13'\n | 'freebsd14'\n | 'freebsd15'\n | 'openbsd'\n | 'netbsd'\n | 'arm'\n\nexport const binaryTargets: BinaryTarget[] = [\n 'darwin',\n 'darwin-arm64',\n 'debian-openssl-1.0.x',\n 'debian-openssl-1.1.x',\n 'debian-openssl-3.0.x',\n 'rhel-openssl-1.0.x',\n 'rhel-openssl-1.1.x',\n 'rhel-openssl-3.0.x',\n 'linux-arm64-openssl-1.1.x',\n 'linux-arm64-openssl-1.0.x',\n 'linux-arm64-openssl-3.0.x',\n 'linux-arm-openssl-1.1.x',\n 'linux-arm-openssl-1.0.x',\n 'linux-arm-openssl-3.0.x',\n 'linux-musl',\n 'linux-musl-openssl-3.0.x',\n 'linux-musl-arm64-openssl-1.1.x',\n 'linux-musl-arm64-openssl-3.0.x',\n 'linux-nixos',\n 'linux-static-x64',\n 'linux-static-arm64',\n 'windows',\n 'freebsd11',\n 'freebsd12',\n 'freebsd13',\n 'freebsd14',\n 'freebsd15',\n 'openbsd',\n 'netbsd',\n 'arm',\n]\n", "// Why is this in getPlatform... because of our dependency tree\n\nimport { BinaryTarget } from './binaryTargets'\n\nconst NODE_API_QUERY_ENGINE_URL_BASE = 'libquery_engine'\n\n/**\n * Gets Node-API Library name depending on the binary target\n * @param binaryTarget\n * @param type `fs` gets name used on the file system, `url` gets the name required to download the library from S3\n * @returns\n */\nexport function getNodeAPIName(binaryTarget: BinaryTarget, type: 'url' | 'fs') {\n const isUrl = type === 'url'\n if (binaryTarget.includes('windows')) {\n return isUrl ? `query_engine.dll.node` : `query_engine-${binaryTarget}.dll.node`\n } else if (binaryTarget.includes('darwin')) {\n return isUrl\n ? `${NODE_API_QUERY_ENGINE_URL_BASE}.dylib.node`\n : `${NODE_API_QUERY_ENGINE_URL_BASE}-${binaryTarget}.dylib.node`\n } else {\n return isUrl\n ? `${NODE_API_QUERY_ENGINE_URL_BASE}.so.node`\n : `${NODE_API_QUERY_ENGINE_URL_BASE}-${binaryTarget}.so.node`\n }\n}\n", "import Debug from '@prisma/debug'\nimport cp from 'child_process'\nimport fs from 'fs/promises'\nimport os from 'os'\nimport { match } from 'ts-pattern'\nimport { promisify } from 'util'\n\nimport { BinaryTarget } from './binaryTargets'\nimport { warn } from './logger'\n\nconst exec = promisify(cp.exec)\n\nconst debug = Debug('prisma:get-platform')\n\nconst supportedLibSSLVersions = ['1.0.x', '1.1.x', '3.0.x'] as const\n\n// https://www.geeksforgeeks.org/node-js-process-arch-property/\nexport type Arch = 'x32' | 'x64' | 'arm' | 'arm64' | 's390' | 's390x' | 'mipsel' | 'ia32' | 'mips' | 'ppc' | 'ppc64'\nexport type DistroInfo = {\n /**\n * The original distro is the Linux distro name detected via its release file.\n * E.g., on Arch Linux, the original distro is `arch`. On Linux Alpine, the original distro is `alpine`.\n */\n originalDistro?: string\n\n /**\n * The family distro is the Linux distro name that is used to determine Linux families based on the same base distro, and likely using the same package manager.\n * E.g., both Ubuntu and Debian belong to the `debian` family of distros, and thus rely on the same package manager (`apt`).\n */\n familyDistro?: string\n\n /**\n * The target distro is the Linux distro associated with the Prisma Engines.\n * E.g., on Arch Linux, Debian, and Ubuntu, the target distro is `debian`. On Linux Alpine, the target distro is `musl`.\n */\n targetDistro?:\n | 'rhel'\n | 'debian'\n | 'musl'\n | 'arm'\n | 'nixos'\n | 'freebsd11'\n | 'freebsd12'\n | 'freebsd13'\n | 'freebsd14'\n | 'freebsd15'\n}\ntype GetOsResultLinux = {\n platform: 'linux'\n arch: Arch\n archFromUname: string | undefined\n /**\n * Starting from version 3.0, OpenSSL is basically adopting semver, and will be API and ABI compatible within a major version.\n */\n libssl?: (typeof supportedLibSSLVersions)[number]\n} & DistroInfo\n\nexport type GetOSResult =\n | {\n platform: Omit<NodeJS.Platform, 'linux'>\n arch: Arch\n targetDistro?: DistroInfo['targetDistro']\n familyDistro?: never\n originalDistro?: never\n archFromUname?: never\n libssl?: never\n }\n | GetOsResultLinux\n\n/**\n * For internal use only. This public export will be eventually removed in favor of `getPlatformWithOSResult`.\n */\nexport async function getos(): Promise<GetOSResult> {\n const platform = os.platform()\n const arch = process.arch as Arch\n if (platform === 'freebsd') {\n const version = await getCommandOutput(`freebsd-version`)\n if (version && version.trim().length > 0) {\n const regex = /^(\\d+)\\.?/\n const match = regex.exec(version)\n if (match) {\n return {\n platform: 'freebsd',\n targetDistro: `freebsd${match[1]}` as GetOSResult['targetDistro'],\n arch,\n }\n }\n }\n }\n\n if (platform !== 'linux') {\n return {\n platform,\n arch,\n }\n }\n\n const distroInfo = await resolveDistro()\n const archFromUname = await getArchFromUname()\n const libsslSpecificPaths = computeLibSSLSpecificPaths({ arch, archFromUname, familyDistro: distroInfo.familyDistro })\n const { libssl } = await getSSLVersion(libsslSpecificPaths)\n\n return {\n platform: 'linux',\n libssl,\n arch,\n archFromUname,\n ...distroInfo,\n }\n}\n\nexport function parseDistro(osReleaseInput: string): DistroInfo {\n const idRegex = /^ID=\"?([^\"\\n]*)\"?$/im\n const idLikeRegex = /^ID_LIKE=\"?([^\"\\n]*)\"?$/im\n\n const idMatch = idRegex.exec(osReleaseInput)\n const id = (idMatch && idMatch[1] && idMatch[1].toLowerCase()) || ''\n\n const idLikeMatch = idLikeRegex.exec(osReleaseInput)\n const idLike = (idLikeMatch && idLikeMatch[1] && idLikeMatch[1].toLowerCase()) || ''\n\n /**\n * Example output of /etc/os-release:\n *\n * Alpine Linux => ID=alpine => targetDistro=musl, familyDistro=alpine\n * Raspbian => ID=raspbian, ID_LIKE=debian => targetDistro=arm, familyDistro=debian\n * Debian => ID=debian => targetDistro=debian, familyDistro=debian\n * Distroless => ID=debian => targetDistro=debian, familyDistro=debian\n * Ubuntu => ID=ubuntu, ID_LIKE=debian => targetDistro=debian, familyDistro=debian\n * Arch Linux => ID=arch => targetDistro=debian, familyDistro=arch\n * Manjaro => ID=manjaro, ID_LIKE=arch => targetDistro=debian, familyDistro=arch\n * Red Hat => ID=rhel, ID_LIKE=fedora => targetDistro=rhel, familyDistro=rhel\n * Centos => ID=centos, ID_LIKE=rhel fedora => targetDistro=rhel, familyDistro=rhel\n * Alma Linux => ID=\"almalinux\", ID_LIKE=\"rhel centos fedora\" => targetDistro=rhel, familyDistro=rhel\n * Fedora => ID=fedora => targetDistro=rhel, familyDistro=rhel\n */\n const distroInfo = match({ id, idLike })\n .with(\n { id: 'alpine' },\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'musl',\n familyDistro: originalDistro,\n originalDistro,\n }) as const,\n )\n .with(\n { id: 'raspbian' },\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'arm',\n familyDistro: 'debian',\n originalDistro,\n }) as const,\n )\n .with(\n { id: 'nixos' },\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'nixos',\n originalDistro,\n familyDistro: 'nixos',\n }) as const,\n )\n .with(\n { id: 'debian' },\n { id: 'ubuntu' },\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'debian',\n familyDistro: 'debian',\n originalDistro,\n }) as const,\n )\n .with(\n { id: 'rhel' },\n { id: 'centos' },\n { id: 'fedora' },\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'rhel',\n familyDistro: 'rhel',\n originalDistro,\n }) as const,\n )\n .when(\n ({ idLike }) => idLike.includes('debian') || idLike.includes('ubuntu'),\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'debian',\n familyDistro: 'debian',\n originalDistro,\n }) as const,\n )\n .when(\n ({ idLike }) => id === 'arch' || idLike.includes('arch'),\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'debian',\n familyDistro: 'arch',\n originalDistro,\n }) as const,\n )\n .when(\n ({ idLike }) =>\n idLike.includes('centos') || idLike.includes('fedora') || idLike.includes('rhel') || idLike.includes('suse'),\n ({ id: originalDistro }) =>\n ({\n targetDistro: 'rhel',\n familyDistro: 'rhel',\n originalDistro,\n }) as const,\n )\n .otherwise(({ id: originalDistro }) => {\n /* Generic distro info fallback */\n return {\n targetDistro: undefined,\n familyDistro: undefined,\n originalDistro,\n } as const\n })\n\n debug(`Found distro info:\\n${JSON.stringify(distroInfo, null, 2)}`)\n return distroInfo\n}\n\nexport async function resolveDistro(): Promise<DistroInfo> {\n // https://github.com/retrohacker/getos/blob/master/os.json\n\n const osReleaseFile = '/etc/os-release'\n try {\n const osReleaseInput = await fs.readFile(osReleaseFile, { encoding: 'utf-8' })\n return parseDistro(osReleaseInput)\n } catch (_) {\n return {\n targetDistro: undefined,\n familyDistro: undefined,\n originalDistro: undefined,\n }\n }\n}\n\n/**\n * Parse the OpenSSL version from the output of the openssl binary, e.g.\n * \"OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)\" -> \"3.0.x\"\n */\nexport function parseOpenSSLVersion(input: string): GetOsResultLinux['libssl'] | undefined {\n const match = /^OpenSSL\\s(\\d+\\.\\d+)\\.\\d+/.exec(input)\n if (match) {\n const partialVersion = `${match[1]}.x`\n return sanitiseSSLVersion(partialVersion)\n }\n\n return undefined\n}\n\n/**\n * Parse the OpenSSL version from the output of the libssl.so file, e.g.\n * \"libssl.so.3\" -> \"3.0.x\"\n */\nexport function parseLibSSLVersion(input: string): GetOsResultLinux['libssl'] {\n const match = /libssl\\.so\\.(\\d)(\\.\\d)?/.exec(input)\n if (match) {\n const partialVersion = `${match[1]}${match[2] ?? '.0'}.x`\n return sanitiseSSLVersion(partialVersion)\n }\n\n return undefined\n}\n\nfunction sanitiseSSLVersion(version: string): GetOsResultLinux['libssl'] {\n const sanitisedVersion = (() => {\n if (isLibssl1x(version)) {\n return version\n }\n\n /**\n * Sanitise OpenSSL 3+. E.g., '3.1.x' becomes '3.0.x'\n */\n const versionSplit = version.split('.')\n versionSplit[1] = '0'\n return versionSplit.join('.') as NonNullable<GetOsResultLinux['libssl']>\n })()\n\n /* Validate that we've parsed a libssl version we actually support */\n if (supportedLibSSLVersions.includes(sanitisedVersion)) {\n return sanitisedVersion\n }\n\n return undefined\n}\n\ntype ComputeLibSSLSpecificPathsParams = {\n arch: Arch\n archFromUname: Awaited<ReturnType<typeof getArchFromUname>>\n familyDistro: DistroInfo['familyDistro']\n}\n\nexport function computeLibSSLSpecificPaths(args: ComputeLibSSLSpecificPathsParams) {\n return match(args)\n .with({ familyDistro: 'musl' }, () => {\n /* Linux Alpine */\n debug('Trying platform-specific paths for \"alpine\"')\n return ['/lib', '/usr/lib']\n })\n .with({ familyDistro: 'debian' }, ({ archFromUname }) => {\n /* Linux Debian, Ubuntu, etc */\n debug('Trying platform-specific paths for \"debian\" (and \"ubuntu\")')\n return [`/usr/lib/${archFromUname}-linux-gnu`, `/lib/${archFromUname}-linux-gnu`]\n })\n .with({ familyDistro: 'rhel' }, () => {\n /* Linux Red Hat, OpenSuse etc */\n debug('Trying platform-specific paths for \"rhel\"')\n return ['/lib64', '/usr/lib64']\n })\n .otherwise(({ familyDistro, arch, archFromUname }) => {\n /* Other Linux distros, we don't do anything specific and fall back to the next blocks */\n debug(`Don't know any platform-specific paths for \"${familyDistro}\" on ${arch} (${archFromUname})`)\n return []\n })\n}\n\ntype GetOpenSSLVersionResult =\n | {\n libssl: GetOsResultLinux['libssl']\n strategy: 'libssl-specific-path' | 'ldconfig' | 'openssl-binary'\n }\n | {\n libssl?: never\n strategy?: never\n }\n\n/**\n * On Linux, returns the libssl version excluding the patch version, e.g. \"1.1.x\".\n * Reading the version from the libssl.so file is more reliable than reading it from the openssl binary.\n * Older versions of libssl are preferred, e.g. \"1.0.x\" over \"1.1.x\", because of Vercel serverless\n * having different build and runtime environments, with the runtime environment having an old version\n * of libssl, and the build environment having both that old version and a newer version of libssl installed.\n * Because of https://github.com/prisma/prisma/issues/17499, we explicitly filter out libssl 0.x.\n *\n * This function never throws.\n */\nexport async function getSSLVersion(libsslSpecificPaths: string[]): Promise<GetOpenSSLVersionResult> {\n const excludeLibssl0x = 'grep -v \"libssl.so.0\"'\n const libsslFilenameFromSpecificPath: string | undefined = await findLibSSLInLocations(libsslSpecificPaths)\n\n if (libsslFilenameFromSpecificPath) {\n debug(`Found libssl.so file using platform-specific paths: ${libsslFilenameFromSpecificPath}`)\n const libsslVersion = parseLibSSLVersion(libsslFilenameFromSpecificPath)\n debug(`The parsed libssl version is: ${libsslVersion}`)\n if (libsslVersion) {\n return { libssl: libsslVersion, strategy: 'libssl-specific-path' }\n }\n }\n\n debug('Falling back to \"ldconfig\" and other generic paths')\n let libsslFilename: string | undefined = await getCommandOutput(\n /**\n * The `ldconfig -p` returns the dynamic linker cache paths, where libssl.so files are likely to be included.\n * Each line looks like this:\n * \tlibssl.so (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libssl.so.1.1\n * But we're only interested in the filename, so we use sed to remove everything before the `=>` separator,\n * and then we remove the path and keep only the filename.\n * The second sed commands uses `|` as a separator because the paths may contain `/`, which would result in the\n * `unknown option to 's'` error (see https://stackoverflow.com/a/9366940/6174476) - which would silently\n * fail with error code 0.\n */\n `ldconfig -p | sed \"s/.*=>s*//\" | sed \"s|.*/||\" | grep libssl | sort | ${excludeLibssl0x}`,\n )\n\n if (!libsslFilename) {\n /**\n * Fall back to the rhel-specific paths (although `familyDistro` isn't detected as rhel) when the `ldconfig` command fails.\n */\n libsslFilename = await findLibSSLInLocations(['/lib64', '/usr/lib64', '/lib', '/usr/lib'])\n }\n\n if (libsslFilename) {\n debug(`Found libssl.so file using \"ldconfig\" or other generic paths: ${libsslFilename}`)\n const libsslVersion = parseLibSSLVersion(libsslFilename)\n debug(`The parsed libssl version is: ${libsslVersion}`)\n if (libsslVersion) {\n return { libssl: libsslVersion, strategy: 'ldconfig' }\n }\n }\n\n /* Reading the libssl.so version didn't work, fall back to openssl */\n\n const openSSLVersionLine: string | undefined = await getCommandOutput('openssl version -v')\n\n if (openSSLVersionLine) {\n debug(`Found openssl binary with version: ${openSSLVersionLine}`)\n const openSSLVersion = parseOpenSSLVersion(openSSLVersionLine)\n debug(`The parsed openssl version is: ${openSSLVersion}`)\n if (openSSLVersion) {\n return { libssl: openSSLVersion, strategy: 'openssl-binary' }\n }\n }\n\n /* Reading openssl didn't work */\n debug(`Couldn't find any version of libssl or OpenSSL in the system`)\n return {}\n}\n\n/**\n * Looks for libssl in specified directories, returns the first one found\n * @param directories\n * @returns\n */\nasync function findLibSSLInLocations(directories: string[]) {\n for (const dir of directories) {\n const libssl = await findLibSSL(dir)\n if (libssl) {\n return libssl\n }\n }\n return undefined\n}\n\n/**\n * Looks for libssl in specific directory\n * @param directory\n * @returns\n */\nasync function findLibSSL(directory: string) {\n try {\n const dirContents = await fs.readdir(directory)\n return dirContents.find((value) => value.startsWith('libssl.so.') && !value.startsWith('libssl.so.0'))\n } catch (e) {\n if (e.code === 'ENOENT') {\n return undefined\n }\n throw e\n }\n}\n\n/**\n * Get the binary target for the current platform, e.g. `linux-musl-arm64-openssl-3.0.x` for Linux Alpine on arm64.\n */\nexport async function getBinaryTargetForCurrentPlatform(): Promise<BinaryTarget> {\n const { binaryTarget } = await getPlatformInfoMemoized()\n return binaryTarget\n}\n\nexport type PlatformInfo = GetOSResult & { binaryTarget: BinaryTarget }\n\nfunction isPlatformInfoDefined(args: Partial<PlatformInfo>): args is PlatformInfo {\n return args.binaryTarget !== undefined\n}\n\n/**\n * Get the binary target and other system information (e.g., the libssl version to look for) for the current platform.\n */\nexport async function getPlatformInfo(): Promise<PlatformInfo> {\n const { memoized: _, ...rest } = await getPlatformInfoMemoized()\n return rest\n}\n\nlet memoizedPlatformWithInfo: Partial<PlatformInfo> = {}\n\nexport async function getPlatformInfoMemoized(): Promise<PlatformInfo & { memoized: boolean }> {\n if (isPlatformInfoDefined(memoizedPlatformWithInfo)) {\n return Promise.resolve({ ...memoizedPlatformWithInfo, memoized: true })\n }\n\n const args = await getos()\n const binaryTarget = getBinaryTargetForCurrentPlatformInternal(args)\n memoizedPlatformWithInfo = { ...args, binaryTarget }\n return { ...(memoizedPlatformWithInfo as PlatformInfo), memoized: false }\n}\n\n/**\n * This function is only exported for testing purposes.\n */\nexport function getBinaryTargetForCurrentPlatformInternal(args: GetOSResult): BinaryTarget {\n const { platform, arch, archFromUname, libssl, targetDistro, familyDistro, originalDistro } = args\n\n if (platform === 'linux' && !['x64', 'arm64'].includes(arch)) {\n warn(\n `Prisma only officially supports Linux on amd64 (x86_64) and arm64 (aarch64) system architectures (detected \"${arch}\" instead). If you are using your own custom Prisma engines, you can ignore this warning, as long as you've compiled the engines for your system architecture \"${archFromUname}\".`,\n )\n }\n\n // sometimes we fail to detect the libssl version to use, so we default to 1.1.x\n const defaultLibssl = '1.1.x' as const\n if (platform === 'linux' && libssl === undefined) {\n /**\n * Ask the user to install libssl manually, and provide some additional instructions based on the detected Linux distro family.\n * TODO: we should also provide a pris.ly link to a documentation page with more details on how to install libssl.\n */\n const additionalMessage = match({ familyDistro })\n .with({ familyDistro: 'debian' }, () => {\n return \"Please manually install OpenSSL via `apt-get update -y && apt-get install -y openssl` and try installing Prisma again. If you're running Prisma on Docker, add this command to your Dockerfile, or switch to an image that already has OpenSSL installed.\"\n })\n .otherwise(() => {\n return 'Please manually install OpenSSL and try installing Prisma again.'\n })\n\n warn(\n `Prisma failed to detect the libssl/openssl version to use, and may not work as expected. Defaulting to \"openssl-${defaultLibssl}\".\n${additionalMessage}`,\n )\n }\n\n // sometimes we fail to detect the distro in use, so we default to debian\n const defaultDistro = 'debian' as const\n if (platform === 'linux' && targetDistro === undefined) {\n debug(`Distro is \"${originalDistro}\". Falling back to Prisma engines built for \"${defaultDistro}\".`)\n }\n\n // Apple Silicon (M1)\n if (platform === 'darwin' && arch === 'arm64') {\n return 'darwin-arm64'\n }\n\n if (platform === 'darwin') {\n return 'darwin'\n }\n\n if (platform === 'win32') {\n return 'windows'\n }\n\n if (platform === 'freebsd') {\n return targetDistro as BinaryTarget\n }\n\n if (platform === 'openbsd') {\n return 'openbsd'\n }\n\n if (platform === 'netbsd') {\n return 'netbsd'\n }\n\n if (platform === 'linux' && targetDistro === 'nixos') {\n return 'linux-nixos'\n }\n\n if (platform === 'linux' && arch === 'arm64') {\n // 64 bit ARM (musl or glibc)\n const baseName = targetDistro === 'musl' ? 'linux-musl-arm64' : 'linux-arm64'\n return `${baseName}-openssl-${libssl || defaultLibssl}` as BinaryTarget\n }\n\n if (platform === 'linux' && arch === 'arm') {\n // 32 bit ARM\n return `linux-arm-openssl-${libssl || defaultLibssl}` as BinaryTarget\n }\n\n if (platform === 'linux' && targetDistro === 'musl') {\n const base = 'linux-musl'\n if (!libssl) {\n return base\n }\n\n if (isLibssl1x(libssl)) {\n // Alpine 3.16 or below linked with OpenSSL 1.1\n return base\n } else {\n // Alpine 3.17 or above linked with OpenSSL 3.0\n return `${base}-openssl-${libssl}`\n }\n }\n\n // when the platform is linux\n if (platform === 'linux' && targetDistro && libssl) {\n return `${targetDistro}-openssl-${libssl}` as BinaryTarget\n }\n\n if (platform !== 'linux') {\n warn(`Prisma detected unknown OS \"${platform}\" and may not work as expected. Defaulting to \"linux\".`)\n }\n\n // if just OpenSSL is known, fallback to debian with a specific libssl version\n if (libssl) {\n return `${defaultDistro}-openssl-${libssl}`\n }\n\n // if just the targetDistro is known, fallback to latest OpenSSL 1.1\n if (targetDistro) {\n return `${targetDistro}-openssl-${defaultLibssl}` as BinaryTarget\n }\n\n // use the debian build with OpenSSL 1.1 as a last resort\n // TODO: perhaps we should default to 'debian-openssl-3.0.x'\n return `${defaultDistro}-openssl-${defaultLibssl}`\n}\n\n/**\n * Given a promise generator, returns the promise's result.\n * If the promise throws, returns undefined.\n */\nasync function discardError<T>(runPromise: () => Promise<T>): Promise<T | undefined> {\n try {\n return await runPromise()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Executes system command and returns its output. If command fails, returns undefined\n */\nfunction getCommandOutput(command: string) {\n return discardError(async () => {\n const result = await exec(command)\n\n debug(`Command \"${command}\" successfully returned \"${result.stdout}\"`)\n return result.stdout\n })\n}\n\n/**\n * Returns the architecture of a system from the output of `uname -m` (whose format is different than `process.arch`).\n * This function never throws.\n * TODO: deprecate this function in favor of `os.machine()` once either Node v16.18.0 or v18.9.0 becomes the minimum\n * supported Node.js version for Prisma.\n */\nexport async function getArchFromUname(): Promise<string | undefined> {\n if (typeof os['machine'] === 'function') {\n return os['machine']()\n }\n const arch = await getCommandOutput('uname -m')\n return arch?.trim()\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction isLibssl1x(libssl: NonNullable<GetOSResult['libssl']> | string): libssl is '1.0.x' | '1.1.x' {\n return libssl.startsWith('1.')\n}\n", "/**\n * Symbols used internally within ts-pattern to construct and discriminate\n * Guard, Not, and Select, and AnonymousSelect patterns\n *\n * Symbols have the advantage of not appearing in auto-complete suggestions in\n * user defined patterns, and eliminate the risk of property\n * overlap between ts-pattern internals and user defined patterns.\n *\n * These symbols have to be visible to tsc for type inference to work, but\n * users should not import them\n * @module\n * @private\n * @internal\n */\n\nexport const matcher = Symbol.for('@ts-pattern/matcher');\nexport type matcher = typeof matcher;\n\nexport const unset = Symbol.for('@ts-pattern/unset');\nexport type unset = typeof unset;\n\nexport const isVariadic = Symbol.for('@ts-pattern/isVariadic');\nexport type isVariadic = typeof isVariadic;\n\n// can't be a symbol because this key has to be enumerable.\nexport const anonymousSelectKey = '@ts-pattern/anonymous-select-key';\nexport type anonymousSelectKey = typeof anonymousSelectKey;\n\nexport const override = Symbol.for('@ts-pattern/override');\nexport type override = typeof override;\n", "/**\n * @module\n * @private\n * @internal\n */\n\nimport * as symbols from './symbols';\nimport { SelectionType } from '../types/FindSelected';\nimport { Pattern, Matcher, MatcherType, AnyMatcher } from '../types/Pattern';\n\n// @internal\nexport const isObject = (value: unknown): value is Object =>\n Boolean(value && typeof value === 'object');\n\n// @internal\nexport const isMatcher = (\n x: unknown\n): x is Matcher<unknown, unknown, MatcherType, SelectionType> => {\n const pattern = x as Matcher<unknown, unknown, MatcherType, SelectionType>;\n return pattern && !!pattern[symbols.matcher];\n};\n\n// @internal\nconst isOptionalPattern = (\n x: unknown\n): x is Matcher<unknown, unknown, 'optional', SelectionType> => {\n return isMatcher(x) && x[symbols.matcher]().matcherType === 'optional';\n};\n\n// tells us if the value matches a given pattern.\n// @internal\nexport const matchPattern = (\n pattern: any,\n value: any,\n select: (key: string, value: unknown) => void\n): boolean => {\n if (isMatcher(pattern)) {\n const matcher = pattern[symbols.matcher]();\n const { matched, selections } = matcher.match(value);\n if (matched && selections) {\n Object.keys(selections).forEach((key) => select(key, selections[key]));\n }\n return matched;\n }\n\n if (isObject(pattern)) {\n if (!isObject(value)) return false;\n\n // Tuple pattern\n if (Array.isArray(pattern)) {\n if (!Array.isArray(value)) return false;\n let startPatterns = [];\n let endPatterns = [];\n let variadicPatterns: AnyMatcher[] = [];\n\n for (const i of pattern.keys()) {\n const subpattern = pattern[i];\n if (isMatcher(subpattern) && subpattern[symbols.isVariadic]) {\n variadicPatterns.push(subpattern);\n } else if (variadicPatterns.length) {\n endPatterns.push(subpattern);\n } else {\n startPatterns.push(subpattern);\n }\n }\n\n if (variadicPatterns.length) {\n if (variadicPatterns.length > 1) {\n throw new Error(\n `Pattern error: Using \\`...P.array(...)\\` several times in a single pattern is not allowed.`\n );\n }\n\n if (value.length < startPatterns.length + endPatterns.length) {\n return false;\n }\n\n const startValues = value.slice(0, startPatterns.length);\n const endValues =\n endPatterns.length === 0 ? [] : value.slice(-endPatterns.length);\n const middleValues = value.slice(\n startPatterns.length,\n endPatterns.length === 0 ? Infinity : -endPatterns.length\n );\n\n return (\n startPatterns.every((subPattern, i) =>\n matchPattern(subPattern, startValues[i], select)\n ) &&\n endPatterns.every((subPattern, i) =>\n matchPattern(subPattern, endValues[i], select)\n ) &&\n (variadicPatterns.length === 0\n ? true\n : matchPattern(variadicPatterns[0], middleValues, select))\n );\n }\n\n return pattern.length === value.length\n ? pattern.every((subPattern, i) =>\n matchPattern(subPattern, value[i], select)\n )\n : false;\n }\n\n return Reflect.ownKeys(pattern).every((k): boolean => {\n const subPattern = pattern[k];\n\n return (\n (k in value || isOptionalPattern(subPattern)) &&\n matchPattern(subPattern, value[k], select)\n );\n });\n }\n\n return Object.is(value, pattern);\n};\n\n// @internal\nexport const getSelectionKeys = (pattern: any): string[] => {\n if (isObject(pattern)) {\n if (isMatcher(pattern)) {\n return pattern[symbols.matcher]().getSelectionKeys?.() ?? [];\n }\n if (Array.isArray(pattern)) return flatMap(pattern, getSelectionKeys);\n return flatMap(Object.values(pattern), getSelectionKeys);\n }\n return [];\n};\n\n// @internal\nexport const flatMap = <a, b>(\n xs: readonly a[],\n f: (v: a) => readonly b[]\n): b[] => xs.reduce<b[]>((acc, x) => acc.concat(f(x)), []);\n", "import { MatchedValue, Pattern, UnknownProperties } from './types/Pattern';\nimport * as P from './patterns';\nimport { matchPattern } from './internals/helpers';\n\n/**\n * This constraint allows using additional properties\n * in object patterns. See \"should allow targetting unknown properties\"\n * unit test in `is-matching.test.ts`.\n */\ntype PatternConstraint<T> = T extends readonly any[]\n ? P.Pattern<T>\n : T extends object\n ? P.Pattern<T> & UnknownProperties\n : P.Pattern<T>;\n\n/**\n * `isMatching` takes pattern and returns a **type guard** function, cheching if a value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * const hasName = isMatching({ name: P.string })\n *\n * declare let input: unknown\n *\n * if (hasName(input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const p extends Pattern<unknown>>(\n pattern: p\n): (value: unknown) => value is P.infer<p>;\n/**\n * `isMatching` takes pattern and a value and checks if the value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * declare let input: unknown\n *\n * if (isMatching({ name: P.string }, input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const T, const P extends PatternConstraint<T>>(\n pattern: P,\n value: T\n): value is P.infer<P>;\n\nexport function isMatching<const p extends Pattern<any>>(\n ...args: [pattern: p, value?: any]\n): boolean | ((vale: any) => boolean) {\n if (args.length === 1) {\n const [pattern] = args;\n return (value: any): value is MatchedValue<any, P.infer<p>> =>\n matchPattern(pattern, value, () => {});\n }\n if (args.length === 2) {\n const [pattern, value] = args;\n return matchPattern(pattern, value, () => {});\n }\n\n throw new Error(\n `isMatching wasn't given the right number of arguments: expected 1 or 2, received ${args.length}.`\n );\n}\n", "/**\n * The `P` module contains patterns for primitive types, wildcards and\n * other pattern-matching utilities.\n *\n * @module\n */\n\nimport { matchPattern, getSelectionKeys, flatMap } from './internals/helpers';\nimport * as symbols from './internals/symbols';\nimport { matcher } from './internals/symbols';\nimport { isMatching } from './is-matching';\nimport { ExtractPreciseValue } from './types/ExtractPreciseValue';\nimport { Fn } from './types/helpers';\nimport { InvertPattern } from './types/InvertPattern';\nimport {\n Pattern,\n UnknownPattern,\n OptionalP,\n ArrayP,\n MapP,\n SetP,\n AndP,\n OrP,\n NotP,\n GuardP,\n SelectP,\n AnonymousSelectP,\n GuardExcludeP,\n CustomP,\n Matcher,\n StringPattern,\n AnyPattern,\n NumberPattern,\n BooleanPattern,\n BigIntPattern,\n NullishPattern,\n SymbolPattern,\n Chainable,\n BigIntChainable,\n NumberChainable,\n StringChainable,\n ArrayChainable,\n Variadic,\n NonNullablePattern,\n} from './types/Pattern';\n\nexport type {\n /**\n * `Pattern<T>` is the type of all patterns\n * that can match a value of type `T`.\n */\n Pattern,\n\n /**\n * `unstable_Fn` can be used to created a\n * a Matchable instance a custom type that\n * can be used as a pattern.\n *\n * @experimental This feature is unstable.\n */\n Fn as unstable_Fn,\n};\n\nexport { matcher };\n\n/**\n * A `Matchable` is an object implementing\n * the Matcher Protocol. It must have a `[P.matcher]: P.Matcher<NarrowFn>`\n * key, which defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matchable<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = CustomP<input, pattern, narrowedOrFn>;\n\n/**\n * A `Matcher` is an object with `match` function, which\n * defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matcher<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = ReturnType<CustomP<input, pattern, narrowedOrFn>[matcher]>;\n\n/**\n * `P.infer<typeof somePattern>` will return the type of the value\n * matched by this pattern.\n *\n * [Read the documentation for `P.infer` on GitHub](https://github.com/gvergnaud/ts-pattern#pinfer)\n *\n * @example\n * const userPattern = { name: P.string }\n * type User = P.infer<typeof userPattern>\n */\nexport type infer<pattern> = InvertPattern<NoInfer<pattern>, unknown>;\n\n/**\n * `P.narrow<Input, Pattern>` will narrow the input type to only keep\n * the set of values that are compatible with the provided pattern type.\n *\n * [Read the documentation for `P.narrow` on GitHub](https://github.com/gvergnaud/ts-pattern#pnarrow)\n *\n * @example\n * type Input = ['a' | 'b' | 'c', 'a' | 'b' | 'c']\n * const Pattern = ['a', P.union('a', 'b')] as const\n *\n * type Narrowed = P.narrow<Input, typeof Pattern>\n * // ^? ['a', 'a' | 'b']\n */\nexport type narrow<input, pattern extends Pattern<any>> = ExtractPreciseValue<\n input,\n InvertPattern<pattern, input>\n>;\n\nfunction chainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): Chainable<pattern> {\n return Object.assign(pattern, {\n optional: () => optional(pattern),\n and: (p2: any) => intersection(pattern, p2),\n or: (p2: any) => union(pattern, p2),\n select: (key: any) =>\n key === undefined ? select(pattern) : select(key, pattern),\n }) as Chainable<pattern>;\n}\n\nconst variadic = <pattern extends {}>(pattern: pattern): Variadic<pattern> =>\n Object.assign(pattern, {\n [Symbol.iterator](): Iterator<pattern, void, undefined> {\n let i = 0;\n const variadicPattern = Object.assign(pattern, {\n [symbols.isVariadic]: true,\n });\n const values: IteratorResult<pattern, void>[] = [\n { value: variadicPattern, done: false },\n { done: true, value: undefined },\n ];\n return {\n next: () => values[i++] ?? values.at(-1)!,\n };\n },\n });\n\nfunction arrayChainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): ArrayChainable<pattern> {\n return Object.assign(variadic(pattern), {\n optional: () => arrayChainable(optional(pattern)),\n select: (key: any) =>\n arrayChainable(\n key === undefined ? select(pattern) : select(key, pattern)\n ),\n }) as any;\n}\n\n/**\n * `P.optional(subpattern)` takes a sub pattern and returns a pattern which matches if the\n * key is undefined or if it is defined and the sub pattern matches its value.\n *\n * [Read the documentation for `P.optional` on GitHub](https://github.com/gvergnaud/ts-pattern#poptional-patterns)\n *\n * @example\n * match(value)\n * .with({ greeting: P.optional('Hello') }, () => 'will match { greeting?: \"Hello\" }')\n */\nexport function optional<\n input,\n const pattern extends unknown extends input ? UnknownPattern : Pattern<input>\n>(pattern: pattern): Chainable<OptionalP<input, pattern>, 'optional'> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n if (value === undefined) {\n getSelectionKeys(pattern).forEach((key) =>\n selector(key, undefined)\n );\n return { matched: true, selections };\n }\n const matched = matchPattern(pattern, value, selector);\n return { matched, selections };\n },\n getSelectionKeys: () => getSelectionKeys(pattern),\n matcherType: 'optional',\n };\n },\n });\n}\n\ntype UnwrapArray<xs> = xs extends readonly (infer x)[] ? x : never;\n\ntype UnwrapSet<xs> = xs extends Set<infer x> ? x : never;\n\ntype UnwrapMapKey<xs> = xs extends Map<infer k, any> ? k : never;\n\ntype UnwrapMapValue<xs> = xs extends Map<any, infer v> ? v : never;\n\ntype WithDefault<a, b> = [a] extends [never] ? b : a;\n\n/**\n * `P.array(subpattern)` takes a sub pattern and returns a pattern, which matches\n * arrays if all their elements match the sub pattern.\n *\n * [Read the documentation for `P.array` on GitHub](https://github.com/gvergnaud/ts-pattern#parray-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.array({ name: P.string }) }, () => 'will match { name: string }[]')\n */\nexport function array<input>(): ArrayChainable<ArrayP<input, unknown>>;\nexport function array<\n input,\n const pattern extends Pattern<WithDefault<UnwrapArray<input>, unknown>>\n>(pattern: pattern): ArrayChainable<ArrayP<input, pattern>>;\nexport function array(\n ...args: [pattern?: any]\n): ArrayChainable<ArrayP<any, any>> {\n return arrayChainable({\n [matcher]() {\n return {\n match: (value: any) => {\n if (!Array.isArray(value)) return { matched: false };\n\n if (args.length === 0) return { matched: true };\n\n const pattern = args[0];\n let selections: Record<string, unknown[]> = {};\n\n if (value.length === 0) {\n getSelectionKeys(pattern).forEach((key) => {\n selections[key] = [];\n });\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const matched = value.every((v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\n/**\n * `P.set(subpattern)` takes a sub pattern and returns a pattern that matches\n * sets if all their elements match the sub pattern.\n *\n * [Read `P.set` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pset-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.set(P.string) }, () => 'will match Set<string>')\n */\nexport function set<input>(): Chainable<SetP<input, unknown>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(pattern: pattern): Chainable<SetP<input, pattern>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(...args: [pattern?: pattern]): Chainable<SetP<input, pattern>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Set)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n if (args.length === 0) return { matched: true };\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const pattern = args[0];\n\n const matched = setEvery(value, (v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\nconst setEvery = <T>(set: Set<T>, predicate: (value: T) => boolean) => {\n for (const value of set) {\n if (predicate(value)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.map(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on maps where all elements inside the map match those two\n * subpatterns.\n *\n * [Read `P.map` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pmap-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.map(P.map(P.string, P.number)) }, (map) => `map's type is Map<string, number>`)\n */\nexport function map<input>(): Chainable<MapP<input, unknown, unknown>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(patternKey: pkey, patternValue: pvalue): Chainable<MapP<input, pkey, pvalue>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(\n ...args: [patternKey?: pkey, patternValue?: pvalue]\n): Chainable<MapP<input, pkey, pvalue>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Map)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n if (args.length === 0) return { matched: true };\n if (args.length === 1) {\n throw new Error(\n `\\`P.map\\` wasn\\'t given enough arguments. Expected (key, value), received ${args[0]?.toString()}`\n );\n }\n const [patternKey, patternValue] = args;\n\n const matched = mapEvery(value, (v, k) => {\n const keyMatch = matchPattern(patternKey, k, selector);\n const valueMatch = matchPattern(patternValue, v, selector);\n return keyMatch && valueMatch;\n });\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0\n ? []\n : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n };\n },\n });\n}\n\nconst mapEvery = <K, T>(\n map: Map<K, T>,\n predicate: (value: T, key: K) => boolean\n) => {\n for (const [key, value] of map.entries()) {\n if (predicate(value, key)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.intersection(...patterns)` returns a pattern which matches\n * only if **every** patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.intersection` on GitHub](https://github.com/gvergnaud/ts-pattern#pintersection-patterns)\n *\n * @example\n * match(value)\n * .with(\n * {\n * user: P.intersection(\n * { firstname: P.string },\n * { lastname: P.string },\n * { age: P.when(age => age > 21) }\n * )\n * },\n * ({ user }) => 'will match { firstname: string, lastname: string, age: number } if age > 21'\n * )\n */\nexport function intersection<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<AndP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: (value) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n const matched = (patterns as readonly UnknownPattern[]).every((p) =>\n matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownPattern[], getSelectionKeys),\n matcherType: 'and',\n }),\n });\n}\n\n/**\n * `P.union(...patterns)` returns a pattern which matches\n * if **at least one** of the patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.union` on GitHub](https://github.com/gvergnaud/ts-pattern#punion-patterns)\n *\n * @example\n * match(value)\n * .with(\n * { type: P.union('a', 'b', 'c') },\n * ({ type }) => 'will match { type: \"a\" | \"b\" | \"c\" }'\n * )\n */\nexport function union<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<OrP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n flatMap(\n patterns as readonly UnknownPattern[],\n getSelectionKeys\n ).forEach((key) => selector(key, undefined));\n const matched = (patterns as readonly UnknownPattern[]).some((p) =>\n matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownPattern[], getSelectionKeys),\n matcherType: 'or',\n }),\n });\n}\n\n/**\n * `P.not(pattern)` returns a pattern which matches if the sub pattern\n * doesn't match.\n *\n * [Read the documentation for `P.not` on GitHub](https://github.com/gvergnaud/ts-pattern#pnot-patterns)\n *\n * @example\n * match<{ a: string | number }>(value)\n * .with({ a: P.not(P.string) }, (x) => 'will match { a: number }'\n * )\n */\n\nexport function not<\n input,\n const pattern extends Pattern<input> | UnknownPattern\n>(pattern: pattern): Chainable<NotP<input, pattern>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: !matchPattern(pattern, value, () => {}),\n }),\n getSelectionKeys: () => [],\n matcherType: 'not',\n }),\n });\n}\n\n/**\n * `P.when((value) => boolean)` returns a pattern which matches\n * if the predicate returns true for the current input.\n *\n * [Read the documentation for `P.when` on GitHub](https://github.com/gvergnaud/ts-pattern#pwhen-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.when(age => age > 21) }, (x) => 'will match if value.age > 21'\n * )\n */\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n>;\nexport function when<input, narrowed extends input, excluded>(\n predicate: (input: input) => input is narrowed\n): GuardExcludeP<input, narrowed, excluded>;\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n> {\n return {\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: Boolean(predicate(value as input)),\n }),\n }),\n };\n}\n\n/**\n * `P.select()` is a pattern which will always match,\n * and will inject the selected piece of input in the handler function.\n *\n * [Read the documentation for `P.select` on GitHub](https://github.com/gvergnaud/ts-pattern#pselect-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.select() }, (age) => 'age: number'\n * )\n */\nexport function select(): Chainable<AnonymousSelectP, 'select' | 'or' | 'and'>;\nexport function select<\n input,\n const patternOrKey extends\n | string\n | (unknown extends input ? UnknownPattern : Pattern<input>)\n>(\n patternOrKey: patternOrKey\n): patternOrKey extends string\n ? Chainable<SelectP<patternOrKey, 'select' | 'or' | 'and'>>\n : Chainable<\n SelectP<symbols.anonymousSelectKey, input, patternOrKey>,\n 'select' | 'or' | 'and'\n >;\nexport function select<\n input,\n const pattern extends unknown extends input ? UnknownPattern : Pattern<input>,\n const k extends string\n>(\n key: k,\n pattern: pattern\n): Chainable<SelectP<k, input, pattern>, 'select' | 'or' | 'and'>;\nexport function select(\n ...args: [keyOrPattern?: unknown | string, pattern?: unknown]\n): Chainable<SelectP<string>, 'select' | 'or' | 'and'> {\n const key: string | undefined =\n typeof args[0] === 'string' ? args[0] : undefined;\n const pattern: unknown =\n args.length === 2\n ? args[1]\n : typeof args[0] === 'string'\n ? undefined\n : args[0];\n return chainable({\n [matcher]() {\n return {\n match: (value) => {\n let selections: Record<string, unknown> = {\n [key ?? symbols.anonymousSelectKey]: value,\n };\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n return {\n matched:\n pattern === undefined\n ? true\n : matchPattern(pattern, value, selector),\n selections: selections,\n };\n },\n getSelectionKeys: () =>\n [key ?? symbols.anonymousSelectKey].concat(\n pattern === undefined ? [] : getSelectionKeys(pattern)\n ),\n };\n },\n });\n}\n\nfunction isUnknown(x: unknown): x is unknown {\n return true;\n}\n\nfunction isNumber<T>(x: T | number): x is number {\n return typeof x === 'number';\n}\n\nfunction isString<T>(x: T | string): x is string {\n return typeof x === 'string';\n}\n\nfunction isBoolean<T>(x: T | boolean): x is boolean {\n return typeof x === 'boolean';\n}\n\nfunction isBigInt<T>(x: T | bigint): x is bigint {\n return typeof x === 'bigint';\n}\n\nfunction isSymbol<T>(x: T | symbol): x is symbol {\n return typeof x === 'symbol';\n}\n\nfunction isNullish<T>(x: T | null | undefined): x is null | undefined {\n return x === null || x === undefined;\n}\n\nfunction isNonNullable(x: unknown): x is {} {\n return x !== null && x !== undefined;\n}\n\ntype AnyConstructor = abstract new (...args: any[]) => any;\n\nfunction isInstanceOf<T extends AnyConstructor>(classConstructor: T) {\n return (val: unknown): val is InstanceType<T> =>\n val instanceof classConstructor;\n}\n\n/**\n * `P.any` is a wildcard pattern, matching **any value**.\n *\n * [Read the documentation for `P.any` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P.any, () => 'will always match')\n */\nexport const any: AnyPattern = chainable(when(isUnknown));\n\n/**\n * `P._` is a wildcard pattern, matching **any value**.\n * It's an alias to `P.any`.\n *\n * [Read the documentation for `P._` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P._, () => 'will always match')\n */\nexport const _ = any;\n\n/**\n * `P.string.startsWith(start)` is a pattern, matching **strings** starting with `start`.\n *\n * [Read the documentation for `P.string.startsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringstartsWith)\n *\n * @example\n * match(value)\n * .with(P.string.startsWith('A'), () => 'value starts with an A')\n */\n\nconst startsWith = <input, const start extends string>(\n start: start\n): GuardP<input, `${start}${string}`> =>\n when((value) => isString(value) && value.startsWith(start));\n\n/**\n * `P.string.endsWith(end)` is a pattern, matching **strings** ending with `end`.\n *\n * [Read the documentation for `P.string.endsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringendsWith)\n *\n * @example\n * match(value)\n * .with(P.string.endsWith('!'), () => 'value ends with an !')\n */\nconst endsWith = <input, const end extends string>(\n end: end\n): GuardP<input, `${string}${end}`> =>\n when((value) => isString(value) && value.endsWith(end));\n\n/**\n * `P.string.minLength(min)` is a pattern, matching **strings** with at least `min` characters.\n *\n * [Read the documentation for `P.string.minLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringminLength)\n *\n * @example\n * match(value)\n * .with(P.string.minLength(10), () => 'string with more length >= 10')\n */\nconst minLength = <const min extends number>(min: min) =>\n when((value) => isString(value) && value.length >= min);\n\n/**\n * `P.string.length(len)` is a pattern, matching **strings** with exactly `len` characters.\n *\n * [Read the documentation for `P.string.length` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringlength)\n *\n * @example\n * match(value)\n * .with(P.string.length(10), () => 'strings with length === 10')\n */\nconst length = <const len extends number>(len: len) =>\n when((value) => isString(value) && value.length === len);\n\n/**\n * `P.string.maxLength(max)` is a pattern, matching **strings** with at most `max` characters.\n *\n * [Read the documentation for `P.string.maxLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringmaxLength)\n *\n * @example\n * match(value)\n * .with(P.string.maxLength(10), () => 'string with more length <= 10')\n */\nconst maxLength = <const max extends number>(max: max) =>\n when((value) => isString(value) && value.length <= max);\n\n/**\n * `P.string.includes(substr)` is a pattern, matching **strings** containing `substr`.\n *\n * [Read the documentation for `P.string.includes` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringincludes)\n *\n * @example\n * match(value)\n * .with(P.string.includes('http'), () => 'value contains http')\n */\nconst includes = <input, const substr extends string>(\n substr: substr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && value.includes(substr));\n\n/**\n * `P.string.regex(expr)` is a pattern, matching **strings** that `expr` regular expression.\n *\n * [Read the documentation for `P.string.regex` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringregex)\n *\n * @example\n * match(value)\n * .with(P.string.regex(/^https?:\\/\\//), () => 'url')\n */\nconst regex = <input, const expr extends string | RegExp>(\n expr: expr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && Boolean(value.match(expr)));\n\nconst stringChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): StringChainable<pattern> =>\n Object.assign(chainable(pattern), {\n startsWith: (str: string) =>\n stringChainable(intersection(pattern, startsWith(str))),\n endsWith: (str: string) =>\n stringChainable(intersection(pattern, endsWith(str))),\n minLength: (min: number) =>\n stringChainable(intersection(pattern, minLength(min))),\n length: (len: number) =>\n stringChainable(intersection(pattern, length(len))),\n maxLength: (max: number) =>\n stringChainable(intersection(pattern, maxLength(max))),\n includes: (str: string) =>\n stringChainable(intersection(pattern, includes(str))),\n regex: (str: string) => stringChainable(intersection(pattern, regex(str))),\n }) as any;\n\n/**\n * `P.string` is a wildcard pattern, matching any **string**.\n *\n * [Read the documentation for `P.string` on GitHub](https://github.com/gvergnaud/ts-pattern#pstring-wildcard)\n *\n * @example\n * match(value)\n * .with(P.string, () => 'will match on strings')\n */\nexport const string: StringPattern = stringChainable(when(isString));\n\n/**\n * `P.number.between(min, max)` matches **numbers** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.number.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.number.between(0, 10), () => '0 <= numbers <= 10')\n */\nconst between = <input, const min extends number, const max extends number>(\n min: min,\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && min <= value && max >= value);\n\n/**\n * `P.number.lt(max)` matches **numbers** smaller than `max`.\n *\n * [Read the documentation for `P.number.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.number.lt(10), () => 'numbers < 10')\n */\nconst lt = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < max);\n\n/**\n * `P.number.gt(min)` matches **numbers** greater than `min`.\n *\n * [Read the documentation for `P.number.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.number.gt(10), () => 'numbers > 10')\n */\nconst gt = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > min);\n\n/**\n * `P.number.lte(max)` matches **numbers** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.number.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.number.lte(10), () => 'numbers <= 10')\n */\nconst lte = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value <= max);\n\n/**\n * `P.number.gte(min)` matches **numbers** greater than or equal to `min`.\n *\n * [Read the documentation for `P.number.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergte)\n *\n * @example\n * match(value)\n * .with(P.number.gte(10), () => 'numbers >= 10')\n */\nconst gte = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value >= min);\n\n/**\n * `P.number.int()` matches **integer** numbers.\n *\n * [Read the documentation for `P.number.int()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberint)\n *\n * @example\n * match(value)\n * .with(P.number.int(), () => 'an integer')\n */\nconst int = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isInteger(value));\n\n/**\n * `P.number.finite` matches **finite numbers**.\n *\n * [Read the documentation for `P.number.finite` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberfinite)\n *\n * @example\n * match(value)\n * .with(P.number.finite, () => 'not Infinity')\n */\nconst finite = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isFinite(value));\n\n/**\n * `P.number.positive()` matches **positive** numbers.\n *\n * [Read the documentation for `P.number.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberpositive)\n *\n * @example\n * match(value)\n * .with(P.number.positive(), () => 'number > 0')\n */\nconst positive = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > 0);\n\n/**\n * `P.number.negative()` matches **negative** numbers.\n *\n * [Read the documentation for `P.number.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbernegative)\n *\n * @example\n * match(value)\n * .with(P.number.negative(), () => 'number < 0')\n */\nconst negative = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < 0);\n\nconst numberChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): NumberChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: number, max: number) =>\n numberChainable(intersection(pattern, between(min, max))),\n lt: (max: number) => numberChainable(intersection(pattern, lt(max))),\n gt: (min: number) => numberChainable(intersection(pattern, gt(min))),\n lte: (max: number) => numberChainable(intersection(pattern, lte(max))),\n gte: (min: number) => numberChainable(intersection(pattern, gte(min))),\n int: () => numberChainable(intersection(pattern, int())),\n finite: () => numberChainable(intersection(pattern, finite())),\n positive: () => numberChainable(intersection(pattern, positive())),\n negative: () => numberChainable(intersection(pattern, negative())),\n }) as any;\n\n/**\n * `P.number` is a wildcard pattern, matching any **number**.\n *\n * [Read the documentation for `P.number` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumber-wildcard)\n *\n * @example\n * match(value)\n * .with(P.number, () => 'will match on numbers')\n */\nexport const number: NumberPattern = numberChainable(when(isNumber));\n\n/**\n * `P.bigint.between(min, max)` matches **bigint** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.bigint.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.bigint.between(0, 10), () => '0 <= bigints <= 10')\n */\nconst betweenBigInt = <\n input,\n const min extends bigint,\n const max extends bigint\n>(\n min: min,\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && min <= value && max >= value);\n\n/**\n * `P.bigint.lt(max)` matches **bigint** smaller than `max`.\n *\n * [Read the documentation for `P.bigint.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.bigint.lt(10), () => 'bigints < 10')\n */\nconst ltBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < max);\n\n/**\n * `P.bigint.gt(min)` matches **bigint** greater than `min`.\n *\n * [Read the documentation for `P.bigint.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.bigint.gt(10), () => 'bigints > 10')\n */\nconst gtBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > min);\n\n/**\n * `P.bigint.lte(max)` matches **bigint** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.bigint.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.bigint.lte(10), () => 'bigints <= 10')\n */\nconst lteBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value <= max);\n\n/**\n * `P.bigint.gte(min)` matches **bigint** greater than or equal to `min`.\n *\n * [Read the documentation for `P.bigint.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintgte)\n *\n * @example\n * match(value)\n * .with(P.bigint.gte(10), () => 'bigints >= 10')\n */\nconst gteBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value >= min);\n\n/**\n * `P.bigint.positive()` matches **positive** bigints.\n *\n * [Read the documentation for `P.bigint.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintpositive)\n *\n * @example\n * match(value)\n * .with(P.bigint.positive(), () => 'bigint > 0')\n */\nconst positiveBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > 0);\n\n/**\n * `P.bigint.negative()` matches **negative** bigints.\n *\n * [Read the documentation for `P.bigint.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintnegative)\n *\n * @example\n * match(value)\n * .with(P.bigint.negative(), () => 'bigint < 0')\n */\nconst negativeBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < 0);\n\nconst bigintChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): BigIntChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: bigint, max: bigint) =>\n bigintChainable(intersection(pattern, betweenBigInt(min, max))),\n lt: (max: bigint) => bigintChainable(intersection(pattern, ltBigInt(max))),\n gt: (min: bigint) => bigintChainable(intersection(pattern, gtBigInt(min))),\n lte: (max: bigint) =>\n bigintChainable(intersection(pattern, lteBigInt(max))),\n gte: (min: bigint) =>\n bigintChainable(intersection(pattern, gteBigInt(min))),\n positive: () => bigintChainable(intersection(pattern, positiveBigInt())),\n negative: () => bigintChainable(intersection(pattern, negativeBigInt())),\n }) as any;\n\n/**\n * `P.bigint` is a wildcard pattern, matching any **bigint**.\n *\n * [Read the documentation for `P.bigint` on GitHub](https://github.com/gvergnaud/ts-pattern#number-wildcard)\n *\n * @example\n * .with(P.bigint, () => 'will match on bigints')\n */\nexport const bigint: BigIntPattern = bigintChainable(when(isBigInt));\n\n/**\n * `P.boolean` is a wildcard pattern, matching any **boolean**.\n *\n * [Read the documentation for `P.boolean` on GitHub](https://github.com/gvergnaud/ts-pattern#boolean-wildcard)\n *\n * @example\n * .with(P.boolean, () => 'will match on booleans')\n */\nexport const boolean: BooleanPattern = chainable(when(isBoolean));\n\n/**\n * `P.symbol` is a wildcard pattern, matching any **symbol**.\n *\n * [Read the documentation for `P.symbol` on GitHub](https://github.com/gvergnaud/ts-pattern#symbol-wildcard)\n *\n * @example\n * .with(P.symbol, () => 'will match on symbols')\n */\nexport const symbol: SymbolPattern = chainable(when(isSymbol));\n\n/**\n * `P.nullish` is a wildcard pattern, matching **null** or **undefined**.\n *\n * [Read the documentation for `P.nullish` on GitHub](https://github.com/gvergnaud/ts-pattern#nullish-wildcard)\n *\n * @example\n * .with(P.nullish, (x) => `${x} is null or undefined`)\n */\nexport const nullish: NullishPattern = chainable(when(isNullish));\n\n/**\n * `P.nonNullable` is a wildcard pattern, matching everything except **null** or **undefined**.\n *\n * [Read the documentation for `P.nonNullable` on GitHub](https://github.com/gvergnaud/ts-pattern#nonNullable-wildcard)\n *\n * @example\n * .with(P.nonNullable, (x) => `${x} isn't null nor undefined`)\n */\nexport const nonNullable: NonNullablePattern = chainable(when(isNonNullable));\n\n/**\n * `P.instanceOf(SomeClass)` is a pattern matching instances of a given class.\n *\n * [Read the documentation for `P.instanceOf` on GitHub](https://github.com/gvergnaud/ts-pattern#pinstanceof-patterns)\n *\n * @example\n * .with(P.instanceOf(SomeClass), () => 'will match on SomeClass instances')\n */\nexport function instanceOf<T extends AnyConstructor>(\n classConstructor: T\n): Chainable<GuardP<unknown, InstanceType<T>>> {\n return chainable(when(isInstanceOf(classConstructor)));\n}\n\n/**\n * `P.shape(somePattern)` lets you call methods like `.optional()`, `.and`, `.or` and `.select()`\n * On structural patterns, like objects and arrays.\n *\n * [Read the documentation for `P.shape` on GitHub](https://github.com/gvergnaud/ts-pattern#pshape-patterns)\n *\n * @example\n * .with(\n * {\n * state: P.shape({ status: \"success\" }).optional().select()\n * },\n * (state) => 'match the success state, or undefined.'\n * )\n */\nexport function shape<input, const pattern extends Pattern<input>>(\n pattern: pattern\n): Chainable<GuardP<input, InvertPattern<pattern, input>>>;\nexport function shape(pattern: UnknownPattern) {\n return chainable(when(isMatching(pattern)));\n}\n", "/**\n * Error when the given input value does not match any included pattern\n * and .exhaustive() was specified\n */\nexport class NonExhaustiveError extends Error {\n constructor(public input: unknown) {\n let displayedValue;\n try {\n displayedValue = JSON.stringify(input);\n } catch (e) {\n displayedValue = input;\n }\n super(`Pattern matching error: no pattern matches value ${displayedValue}`);\n }\n}\n", "import { Pattern } from './types/Pattern';\nimport { Match } from './types/Match';\nimport * as symbols from './internals/symbols';\nimport { matchPattern } from './internals/helpers';\nimport { NonExhaustiveError } from './errors';\n\ntype MatchState<output> =\n | { matched: true; value: output }\n | { matched: false; value: undefined };\n\nconst unmatched: MatchState<never> = {\n matched: false,\n value: undefined,\n};\n\n/**\n * `match` creates a **pattern matching expression**.\n * * Use `.with(pattern, handler)` to pattern match on the input.\n * * Use `.exhaustive()` or `.otherwise(() => defaultValue)` to end the expression and get the result.\n *\n * [Read the documentation for `match` on GitHub](https://github.com/gvergnaud/ts-pattern#match)\n *\n * @example\n * declare let input: \"A\" | \"B\";\n *\n * return match(input)\n * .with(\"A\", () => \"It's an A!\")\n * .with(\"B\", () => \"It's a B!\")\n * .exhaustive();\n *\n */\nexport function match<const input, output = symbols.unset>(\n value: input\n): Match<input, output> {\n return new MatchExpression(value, unmatched) as any;\n}\n\n/**\n * This class represents a match expression. It follows the\n * builder pattern, we chain methods to add features to the expression\n * until we call `.exhaustive`, `.otherwise` or the unsafe `.run`\n * method to execute it.\n *\n * The types of this class aren't public, the public type definition\n * can be found in src/types/Match.ts.\n */\nclass MatchExpression<input, output> {\n constructor(private input: input, private state: MatchState<output>) {}\n\n with(...args: any[]): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const handler: (selection: unknown, value: input) => output =\n args[args.length - 1];\n\n const patterns: Pattern<input>[] = [args[0]];\n let predicate: ((value: input) => unknown) | undefined = undefined;\n\n if (args.length === 3 && typeof args[1] === 'function') {\n // case with guard as second argument\n predicate = args[1];\n } else if (args.length > 2) {\n // case with several patterns\n patterns.push(...args.slice(1, args.length - 1));\n }\n\n let hasSelections = false;\n let selected: Record<string, unknown> = {};\n const select = (key: string, value: unknown) => {\n hasSelections = true;\n selected[key] = value;\n };\n\n const matched =\n patterns.some((pattern) => matchPattern(pattern, this.input, select)) &&\n (predicate ? Boolean(predicate(this.input)) : true);\n\n const selections = hasSelections\n ? symbols.anonymousSelectKey in selected\n ? selected[symbols.anonymousSelectKey]\n : selected\n : this.input;\n\n const state = matched\n ? {\n matched: true as const,\n value: handler(selections, this.input),\n }\n : unmatched;\n\n return new MatchExpression(this.input, state);\n }\n\n when(\n predicate: (value: input) => unknown,\n handler: (selection: input, value: input) => output\n ): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const matched = Boolean(predicate(this.input));\n\n return new MatchExpression<input, output>(\n this.input,\n matched\n ? { matched: true, value: handler(this.input, this.input) }\n : unmatched\n );\n }\n\n otherwise(handler: (value: input) => output): output {\n if (this.state.matched) return this.state.value;\n return handler(this.input);\n }\n\n exhaustive(): output {\n if (this.state.matched) return this.state.value;\n\n throw new NonExhaustiveError(this.input);\n }\n\n run(): output {\n return this.exhaustive();\n }\n\n returnType() {\n return this;\n }\n}\n", "import { yellow } from 'kleur/colors'\n\nexport const tags = {\n warn: yellow('prisma:warn'),\n}\nexport const should = {\n warn: () => !process.env.PRISMA_DISABLE_WARNINGS,\n}\nexport function log(...data: any[]) {\n console.log(...data)\n}\nexport function warn(message: any, ...optionalParams: any[]) {\n if (should.warn()) {\n console.warn(`${tags.warn} ${message}`, ...optionalParams)\n }\n}\n", "// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst packageJson = require('../../package.json')\n\nexport const version: string = packageJson.version\n", "import type { GeneratorConfig } from '@prisma/generator'\n\nexport enum ClientEngineType {\n Library = 'library',\n Binary = 'binary',\n Client = 'client',\n}\n\nexport function getClientEngineType(generatorConfig?: GeneratorConfig): ClientEngineType {\n const engineTypeFromEnvVar = getEngineTypeFromEnvVar()\n if (engineTypeFromEnvVar) return engineTypeFromEnvVar\n if (generatorConfig?.config.engineType === ClientEngineType.Library) {\n return ClientEngineType.Library\n } else if (generatorConfig?.config.engineType === ClientEngineType.Binary) {\n return ClientEngineType.Binary\n } else if (generatorConfig?.config.engineType === ClientEngineType.Client) {\n return ClientEngineType.Client\n } else {\n return getDefaultEngineType()\n }\n}\n\nfunction getEngineTypeFromEnvVar() {\n const engineType = process.env.PRISMA_CLIENT_ENGINE_TYPE\n if (engineType === ClientEngineType.Library) {\n return ClientEngineType.Library\n } else if (engineType === ClientEngineType.Binary) {\n return ClientEngineType.Binary\n } else if (engineType === ClientEngineType.Client) {\n return ClientEngineType.Client\n } else {\n return undefined\n }\n}\n\nfunction getDefaultEngineType(): ClientEngineType {\n return ClientEngineType.Library\n}\n", "import { Debug } from '@prisma/debug'\nimport { enginesVersion } from '@prisma/engines-version'\nimport type { BinaryPaths, DownloadOptions } from '@prisma/fetch-engine'\nimport { BinaryType } from '@prisma/fetch-engine'\nimport type { BinaryTarget } from '@prisma/get-platform'\nimport path from 'path'\n\nconst debug = Debug('prisma:engines')\nexport function getEnginesPath() {\n return path.join(__dirname, '../')\n}\nexport const DEFAULT_CLI_QUERY_ENGINE_BINARY_TYPE = BinaryType.QueryEngineLibrary\n/**\n * Checks if the env override `PRISMA_CLI_QUERY_ENGINE_TYPE` is set to `library` or `binary`\n * Otherwise returns the default\n */\nexport function getCliQueryEngineBinaryType(clientEngineType = process.env.PRISMA_CLI_QUERY_ENGINE_TYPE): BinaryType {\n if (clientEngineType === 'binary') {\n return BinaryType.QueryEngineBinary\n }\n return DEFAULT_CLI_QUERY_ENGINE_BINARY_TYPE\n}\n\ntype EnsureSomeBinariesExistInput = {\n clientEngineType: 'library' | 'binary' | 'client'\n hasMigrateAdapterInConfig: boolean\n download: (options: DownloadOptions) => Promise<BinaryPaths>\n}\n\nexport async function ensureNeededBinariesExist({\n clientEngineType,\n download,\n hasMigrateAdapterInConfig,\n}: EnsureSomeBinariesExistInput) {\n const binaryDir = path.join(__dirname, '../')\n\n const binaries = {} as Record<BinaryType, string>\n\n if (!hasMigrateAdapterInConfig) {\n binaries[BinaryType.SchemaEngineBinary] = binaryDir\n }\n\n // query engine should only be downloaded if QE is enabled explicitly by specifying the\n // engineType generator property.\n const usesQueryCompiler = clientEngineType === 'client'\n\n if (!usesQueryCompiler) {\n const cliQueryEngineBinaryType = getCliQueryEngineBinaryType(clientEngineType)\n binaries[cliQueryEngineBinaryType] = binaryDir\n }\n\n debug(`binaries to download ${Object.keys(binaries).join(', ')}`)\n\n const binaryTargets = process.env.PRISMA_CLI_BINARY_TARGETS\n ? (process.env.PRISMA_CLI_BINARY_TARGETS.split(',') as BinaryTarget[])\n : undefined\n\n await download({\n binaries: binaries,\n showProgress: true,\n version: enginesVersion,\n failSilent: false,\n binaryTargets,\n })\n}\n\nexport { enginesVersion } from '@prisma/engines-version'\n\n/**\n * This annotation is used for `node-file-trace`\n * See https://github.com/zeit/node-file-trace/issues/104\n * It's necessary to run this package standalone or within the sdk in Vercel\n * And needed for https://github.com/vercel/pkg#detecting-assets-in-source-code\n */\n\npath.join(__dirname, '../query-engine-darwin')\npath.join(__dirname, '../query-engine-darwin-arm64')\npath.join(__dirname, '../query-engine-debian-openssl-1.0.x')\npath.join(__dirname, '../query-engine-debian-openssl-1.1.x')\npath.join(__dirname, '../query-engine-debian-openssl-3.0.x')\npath.join(__dirname, '../query-engine-linux-static-x64')\npath.join(__dirname, '../query-engine-linux-static-arm64')\npath.join(__dirname, '../query-engine-rhel-openssl-1.0.x')\npath.join(__dirname, '../query-engine-rhel-openssl-1.1.x')\npath.join(__dirname, '../query-engine-rhel-openssl-3.0.x')\n\n// Node API\npath.join(__dirname, '../libquery_engine-darwin.dylib.node')\npath.join(__dirname, '../libquery_engine-darwin-arm64.dylib.node')\npath.join(__dirname, '../libquery_engine-debian-openssl-1.0.x.so.node')\npath.join(__dirname, '../libquery_engine-debian-openssl-1.1.x.so.node')\npath.join(__dirname, '../libquery_engine-debian-openssl-3.0.x.so.node')\npath.join(__dirname, '../libquery_engine-linux-arm64-openssl-1.0.x.so.node')\npath.join(__dirname, '../libquery_engine-linux-arm64-openssl-1.1.x.so.node')\npath.join(__dirname, '../libquery_engine-linux-arm64-openssl-3.0.x.so.node')\npath.join(__dirname, '../libquery_engine-linux-musl.so.node')\npath.join(__dirname, '../libquery_engine-linux-musl-openssl-3.0.x.so.node')\npath.join(__dirname, '../libquery_engine-rhel-openssl-1.0.x.so.node')\npath.join(__dirname, '../libquery_engine-rhel-openssl-1.1.x.so.node')\npath.join(__dirname, '../libquery_engine-rhel-openssl-3.0.x.so.node')\npath.join(__dirname, '../query_engine-windows.dll.node')\n", "import Debug from '@prisma/debug'\nimport fs from 'fs'\n\nconst debug = Debug('chmodPlusX')\n\nexport function chmodPlusX(file: string): void {\n // Note: skip for windows as chmod does on exist there\n // and will error with `EACCES: permission denied`\n if (process.platform === 'win32') return\n\n const s = fs.statSync(file)\n const newMode = s.mode | 64 | 8 | 1\n if (s.mode === newMode) {\n debug(`Execution permissions of ${file} are fine`)\n return\n }\n const base8 = newMode.toString(8).slice(-3)\n debug(`Have to call chmodPlusX on ${file}`)\n fs.chmodSync(file, base8)\n}\n", "import minIndent from 'min-indent';\n\nexport default function stripIndent(string) {\n\tconst indent = minIndent(string);\n\n\tif (indent === 0) {\n\t\treturn string;\n\t}\n\n\tconst regex = new RegExp(`^[ \\\\t]{${indent}}`, 'gm');\n\n\treturn string.replace(regex, '');\n}\n", "export const PRISMA_POSTGRES_PROVIDER = 'prisma+postgres'\n\nexport const PRISMA_POSTGRES_PROTOCOL = `${PRISMA_POSTGRES_PROVIDER}:`\n\ndeclare const prismaPostgresBrand: unique symbol\ndeclare const prismaPostgresDevBrand: unique symbol\n\nexport type PrismaPostgresUrl<T extends string | URL> = T & {\n readonly [prismaPostgresBrand]: true\n}\n\nexport type PrismaPostgresDevUrl<T extends string | URL> = PrismaPostgresUrl<T> & {\n readonly [prismaPostgresDevBrand]: true\n}\n\nexport function isPrismaPostgres<T extends string | URL>(\n connectionString?: T,\n): connectionString is PrismaPostgresUrl<T> {\n return connectionString?.toString().startsWith(`${PRISMA_POSTGRES_PROTOCOL}//`) ?? false\n}\n\nexport function isPrismaPostgresDev<T extends string | URL>(\n connectionString?: T,\n): connectionString is PrismaPostgresDevUrl<T> {\n if (!isPrismaPostgres(connectionString)) {\n return false\n }\n\n const { host } = new URL(connectionString)\n\n return host.includes('localhost') || host.includes('127.0.0.1') || host.includes('[::1]')\n}\n", "import type { BinaryTargetsEnvValue, GeneratorConfig } from '@prisma/generator'\nimport indent from 'indent-string'\n\nexport function printGeneratorConfig(config: GeneratorConfig): string {\n return String(new GeneratorConfigClass(config))\n}\n\nexport class GeneratorConfigClass {\n constructor(private readonly config: GeneratorConfig) {}\n toString(): string {\n const { config } = this\n // parse & stringify trims out all the undefined values\n\n const provider = config.provider.fromEnvVar ? `env(\"${config.provider.fromEnvVar}\")` : config.provider.value\n\n const obj = JSON.parse(\n JSON.stringify({\n provider,\n binaryTargets: getOriginalBinaryTargetsValue(config.binaryTargets),\n }),\n )\n\n return `generator ${config.name} {\n${indent(printDatamodelObject(obj), 2)}\n}`\n }\n}\n\nexport function getOriginalBinaryTargetsValue(binaryTargets: BinaryTargetsEnvValue[]) {\n let value: string | string[] | undefined\n if (binaryTargets.length > 0) {\n const binaryTargetsFromEnvVar = binaryTargets.find((object) => object.fromEnvVar !== null)\n if (binaryTargetsFromEnvVar) {\n value = `env(\"${binaryTargetsFromEnvVar.fromEnvVar}\")`\n } else {\n value = binaryTargets.map((object) => (object.native ? 'native' : object.value))\n }\n } else {\n value = undefined\n }\n\n return value\n}\n\nexport function printDatamodelObject(obj): string {\n const maxLength = Object.keys(obj).reduce((max, curr) => Math.max(max, curr.length), 0)\n return Object.entries(obj)\n .map(([key, value]) => `${key.padEnd(maxLength)} = ${niceStringify(value)}`)\n .join('\\n')\n}\n\nfunction niceStringify(value): any {\n return JSON.parse(\n JSON.stringify(value, (_, value) => {\n if (Array.isArray(value)) {\n return `[${value.map((element) => JSON.stringify(element)).join(', ')}]`\n }\n return JSON.stringify(value)\n }),\n )\n}\n", "import { blue, cyan, red, yellow } from 'kleur/colors'\n\nexport const tags = {\n error: red('prisma:error'),\n warn: yellow('prisma:warn'),\n info: cyan('prisma:info'),\n query: blue('prisma:query'),\n}\nexport const should = {\n warn: () => !process.env.PRISMA_DISABLE_WARNINGS,\n}\nexport function log(...data: any[]) {\n console.log(...data)\n}\nexport function warn(message: any, ...optionalParams: any[]) {\n if (should.warn()) {\n console.warn(`${tags.warn} ${message}`, ...optionalParams)\n }\n}\nexport function info(message: any, ...optionalParams: any[]) {\n console.info(`${tags.info} ${message}`, ...optionalParams)\n}\nexport function error(message: any, ...optionalParams: any[]) {\n console.error(`${tags.error} ${message}`, ...optionalParams)\n}\nexport function query(message: any, ...optionalParams: any[]) {\n console.log(`${tags.query} ${message}`, ...optionalParams)\n}\n", "/**\n * Utility function to ensure exhaustive checks for union types.\n *\n * @example\n * ```ts\n * declare const fruit: 'Apple' | 'Orange'\n *\n * switch (fruit) {\n * case 'Apple:\n * // do apple things\n * break;\n * case 'Orange:\n * // do orange things\n * break;\n * default:\n * // in case `fruit` type will expand in the future,\n * // we'll get a compile-time error here, listing all unhandled\n * // cases\n * assertNever(fruit, 'Unknown fruit')\n * }\n * ```\n * @param arg variable of the any union type. By the time `assertNever` is called\n * all possible cases of this union must already be handled\n * @param errorMessage error message to throw in runtime. Normally, should never happen\n * unless compile-time check is skipped\n */\nexport function assertNever(arg: never, errorMessage: string): never {\n throw new Error(errorMessage)\n}\n", "/* eslint-disable @typescript-eslint/no-this-alias */\n// Copyright (C) 2011-2015 John Hewson\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// @ts-ignore\n\nimport stream from 'stream'\nimport util from 'util'\n\n// convenience API\nexport default function byline(readStream, options?: any) {\n return createStream(readStream, options)\n}\n\n// basic API\nexport function createStream(readStream, options) {\n if (readStream) {\n return createLineStream(readStream, options)\n } else {\n return new LineStream(options)\n }\n}\n\nexport function createLineStream(readStream, options) {\n if (!readStream) {\n throw new Error('expected readStream')\n }\n if (!readStream.readable) {\n throw new Error('readStream must be readable')\n }\n const ls = new LineStream(options)\n readStream.pipe(ls)\n return ls\n}\n\n//\n// using the new node v0.10 \"streams2\" API\n//\n\nexport function LineStream(this: any, options) {\n stream.Transform.call(this, options)\n options = options || {}\n\n // use objectMode to stop the output from being buffered\n // which re-concatenates the lines, just without newlines.\n this._readableState.objectMode = true\n this._lineBuffer = []\n this._keepEmptyLines = options.keepEmptyLines || false\n this._lastChunkEndedWithCR = false\n\n // take the source's encoding if we don't have one\n this.on('pipe', function (this: any, src) {\n if (!this.encoding) {\n // but we can't do this for old-style streams\n if (src instanceof stream.Readable) {\n this.encoding = (src as any)._readableState.encoding\n }\n }\n })\n}\nutil.inherits(LineStream, stream.Transform)\n\nLineStream.prototype._transform = function (chunk, encoding, done) {\n // decode binary chunks as UTF-8\n encoding = encoding || 'utf8'\n\n if (Buffer.isBuffer(chunk)) {\n if (encoding == 'buffer') {\n chunk = chunk.toString() // utf8\n encoding = 'utf8'\n } else {\n chunk = chunk.toString(encoding)\n }\n }\n this._chunkEncoding = encoding\n\n const lines = chunk.split(/\\r\\n|\\r|\\n/g)\n\n // don't split CRLF which spans chunks\n if (this._lastChunkEndedWithCR && chunk[0] == '\\n') {\n lines.shift()\n }\n\n if (this._lineBuffer.length > 0) {\n this._lineBuffer[this._lineBuffer.length - 1] += lines[0]\n lines.shift()\n }\n\n this._lastChunkEndedWithCR = chunk[chunk.length - 1] == '\\r'\n this._lineBuffer = this._lineBuffer.concat(lines)\n this._pushBuffer(encoding, 1, done)\n}\n\nLineStream.prototype._pushBuffer = function (encoding, keep, done) {\n // always buffer the last (possibly partial) line\n while (this._lineBuffer.length > keep) {\n const line = this._lineBuffer.shift()\n // skip empty lines\n if (this._keepEmptyLines || line.length > 0) {\n if (!this.push(this._reencode(line, encoding))) {\n // when the high-water mark is reached, defer pushes until the next tick\n const self = this\n setImmediate(function () {\n self._pushBuffer(encoding, keep, done)\n })\n return\n }\n }\n }\n done()\n}\n\nLineStream.prototype._flush = function (done) {\n this._pushBuffer(this._chunkEncoding, 0, done)\n}\n\n// see Readable::push\nLineStream.prototype._reencode = function (line, chunkEncoding) {\n if (this.encoding && this.encoding != chunkEncoding) {\n return Buffer.from(line, chunkEncoding).toString(this.encoding)\n } else if (this.encoding) {\n // this should be the most common case, i.e. we're using an encoded source stream\n return line\n } else {\n return Buffer.from(line, chunkEncoding)\n }\n}\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "import path from 'path'\n\n/**\n * Normalize `filePath` to use forward slashes as a separator. `filePath` is\n * treated as a path specific to the current platform, so backslashes will only\n * be replaced with forward slashes on Windows. On other platforms, where a\n * backslash is a valid filename character, it will be treated as such and will\n * not be replaced.\n */\nexport function pathToPosix(filePath: string): string {\n if (path.sep === path.posix.sep) {\n return filePath\n }\n return filePath.split(path.sep).join(path.posix.sep)\n}\n\n/**\n * Returns the longest common path ancestor of the two paths (which may also be equal to one or both of them).\n * If they don't share a common ancestor (which may be the case on Windows if both paths are on different disks),\n * returns `undefined`.\n */\nexport function longestCommonPathPrefix(pathA: string, pathB: string): string | undefined {\n if (!path.isAbsolute(pathA) || !path.isAbsolute(pathB)) {\n throw new Error('longestCommonPathPrefix expects absolute paths')\n }\n\n if (process.platform === 'win32' && (pathA.startsWith('\\\\\\\\') || pathB.startsWith('\\\\\\\\'))) {\n // Make both paths namespaced if at least one of them is.\n pathA = path.toNamespacedPath(pathA)\n pathB = path.toNamespacedPath(pathB)\n }\n\n const commonPrefix = longestCommonPrefix(pathA.split(path.sep), pathB.split(path.sep)).join(path.sep)\n\n if (commonPrefix === '') {\n return process.platform === 'win32' ? undefined : '/'\n }\n\n if (process.platform === 'win32' && ['\\\\', '\\\\\\\\?', '\\\\\\\\.'].includes(commonPrefix)) {\n return undefined\n }\n\n if (process.platform === 'win32' && commonPrefix.endsWith(':')) {\n // Disk specifier without a backslash at the end is not an absolute path on windows,\n // it refers to current working directory on that disk.\n return commonPrefix + '\\\\'\n }\n\n return commonPrefix\n}\n\nfunction longestCommonPrefix<T>(sequenceA: T[], sequenceB: T[]): T[] {\n const maxLen = Math.min(sequenceA.length, sequenceB.length)\n let sliceLen = 0\n\n while (sliceLen <= maxLen && sequenceA[sliceLen] === sequenceB[sliceLen]) {\n sliceLen++\n }\n\n return sequenceA.slice(0, sliceLen)\n}\n", "import Debug from '@prisma/debug'\nimport dotenv from 'dotenv'\nimport fs from 'fs'\nimport { bold, dim, red, underline, yellow } from 'kleur/colors'\nimport path from 'path'\n\nimport { dotenvExpand } from '../dotenvExpand'\n\nconst debug = Debug('prisma:tryLoadEnv')\n\ntype DotenvResult = dotenv.DotenvConfigOutput & {\n ignoreProcessEnv?: boolean | undefined\n}\n\n// non-exported type from dotenv\ninterface DotenvLoadEnvResult {\n message: string\n path: string\n dotenvResult: DotenvResult\n}\n\n// our type for loaded env data\nexport type LoadedEnv =\n | {\n message?: string\n parsed: {\n [x: string]: string\n }\n }\n | undefined\n\nexport function tryLoadEnvs(\n {\n rootEnvPath,\n schemaEnvPath,\n }: {\n rootEnvPath: string | null | undefined\n schemaEnvPath: string | null | undefined\n },\n opts: { conflictCheck: 'warn' | 'error' | 'none' } = {\n conflictCheck: 'none',\n },\n): LoadedEnv {\n const rootEnvInfo = loadEnv(rootEnvPath)\n if (opts.conflictCheck !== 'none') {\n // This will throw an error if there are conflicts\n checkForConflicts(rootEnvInfo, schemaEnvPath, opts.conflictCheck)\n }\n // Only load the schema .env if it is not the same as root\n let schemaEnvInfo: DotenvLoadEnvResult | null = null\n if (!pathsEqual(rootEnvInfo?.path, schemaEnvPath)) {\n schemaEnvInfo = loadEnv(schemaEnvPath)\n }\n\n // We didn't find a .env file.\n if (!rootEnvInfo && !schemaEnvInfo) {\n debug('No Environment variables loaded')\n }\n\n // Print the error if any (if internal dotenv readFileSync throws)\n if (schemaEnvInfo?.dotenvResult.error) {\n return console.error(red(bold('Schema Env Error: ')) + schemaEnvInfo.dotenvResult.error) as undefined\n }\n const messages = [rootEnvInfo?.message, schemaEnvInfo?.message].filter(Boolean)\n\n return {\n message: messages.join('\\n'),\n parsed: {\n ...rootEnvInfo?.dotenvResult?.parsed,\n ...schemaEnvInfo?.dotenvResult?.parsed,\n },\n }\n}\n/**\n * Will throw an error if the file at `envPath` has env conflicts with `rootEnv`\n */\nfunction checkForConflicts(\n rootEnvInfo: DotenvLoadEnvResult | null,\n envPath: string | null | undefined,\n type: 'warn' | 'error',\n) {\n const parsedRootEnv = rootEnvInfo?.dotenvResult.parsed\n const areNotTheSame = !pathsEqual(rootEnvInfo?.path, envPath)\n if (parsedRootEnv && envPath && areNotTheSame && fs.existsSync(envPath)) {\n const envConfig = dotenv.parse(fs.readFileSync(envPath))\n const conflicts: string[] = []\n for (const k in envConfig) {\n if (parsedRootEnv[k] === envConfig[k]) {\n conflicts.push(k)\n }\n }\n if (conflicts.length > 0) {\n // const message = `You are trying to load env variables which are already present in your project root .env\n const relativeRootEnvPath = path.relative(process.cwd(), rootEnvInfo!.path)\n const relativeEnvPath = path.relative(process.cwd(), envPath)\n if (type === 'error') {\n const message = `There is a conflict between env var${conflicts.length > 1 ? 's' : ''} in ${underline(\n relativeRootEnvPath,\n )} and ${underline(relativeEnvPath)}\nConflicting env vars:\n${conflicts.map((conflict) => ` ${bold(conflict)}`).join('\\n')}\n\nWe suggest to move the contents of ${underline(relativeEnvPath)} to ${underline(\n relativeRootEnvPath,\n )} to consolidate your env vars.\\n`\n throw new Error(message)\n } else if (type === 'warn') {\n const message = `Conflict for env var${conflicts.length > 1 ? 's' : ''} ${conflicts\n .map((c) => bold(c))\n .join(', ')} in ${underline(relativeRootEnvPath)} and ${underline(relativeEnvPath)}\nEnv vars from ${underline(relativeEnvPath)} overwrite the ones from ${underline(relativeRootEnvPath)}\n `\n console.warn(`${yellow('warn(prisma)')} ${message}`)\n }\n }\n }\n}\n\nexport function loadEnv(envPath: string | null | undefined): DotenvLoadEnvResult | null {\n if (exists(envPath)) {\n debug(`Environment variables loaded from ${envPath}`)\n\n const dotenvOutput = dotenv.config({\n path: envPath,\n // Useful to debug dotenv parsing, prints errors & warnings\n // Set to any value to enable\n // Example for empty .env file\n // [dotenv][DEBUG] did not match key and value when parsing line 1:\n //\n // Value needs to be null or undefined, false is truthy\n // https://github.com/motdotla/dotenv/blob/7301ac9be0b2c766f865bbe24280bf82586d25aa/lib/main.js#L89-L91\n debug: process.env.DOTENV_CONFIG_DEBUG ? true : undefined,\n })\n\n const dotenvExpandOutput = dotenvExpand(dotenvOutput)\n\n return {\n dotenvResult: dotenvExpandOutput,\n message: dim(`Environment variables loaded from ${path.relative(process.cwd(), envPath)}`),\n path: envPath,\n }\n } else {\n debug(`Environment variables not found at ${envPath}`)\n }\n return null\n}\nexport function pathsEqual(path1: string | null | undefined, path2: string | null | undefined) {\n return path1 && path2 && path.resolve(path1) === path.resolve(path2)\n}\n\nexport function exists(p: string | null | undefined): p is string {\n return Boolean(p && fs.existsSync(p))\n}\n", "import type { DotenvConfigOutput } from 'dotenv'\n\n/**\n * Modified version of https://github.com/motdotla/dotenv-expand\n * Our version does only expand ${ENV} - curly braces but not without curly braces\n *\n * Original License from https://github.com/motdotla/dotenv-expand/blob/de9e5cb0215495452f475f5be4dea1580b8217cd/LICENSE\n * Copyright (c) 2016, Scott Motte\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function dotenvExpand(config: DotenvConfigOutput & { ignoreProcessEnv?: boolean }) {\n // if ignoring process.env, use a blank object\n const environment = config.ignoreProcessEnv ? {} : process.env\n\n const interpolate = (envValue: string) => {\n const matches = envValue.match(/(.?\\${(?:[a-zA-Z0-9_]+)?})/g)\n\n return (\n matches?.reduce(function (newEnv, match) {\n const parts = /(.?)\\${([a-zA-Z0-9_]+)?}/g.exec(match)\n if (!parts) {\n return newEnv\n }\n\n const prefix = parts[1]\n\n let value, replacePart\n\n if (prefix === '\\\\') {\n replacePart = parts[0]\n value = replacePart.replace('\\\\$', '$')\n } else {\n const key = parts[2]\n replacePart = parts[0].substring(prefix.length)\n // process.env value 'wins' over .env file's value\n value = Object.hasOwnProperty.call(environment, key) ? environment[key] : config.parsed![key] || ''\n\n // Resolve recursive interpolations\n value = interpolate(value)\n }\n\n return newEnv.replace(replacePart, value)\n }, envValue) ?? envValue\n )\n }\n\n for (const configKey in config.parsed) {\n const value = Object.hasOwnProperty.call(environment, configKey) ? environment[configKey] : config.parsed[configKey]\n\n config.parsed[configKey] = interpolate(value!)\n }\n\n for (const processKey in config.parsed) {\n environment[processKey] = config.parsed[processKey]\n }\n\n return config\n}\n", "export function hasOwnProperty(object: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(object, key)\n}\n", "export function mapObjectValues<K extends PropertyKey, T, U>(\n object: Record<K, T>,\n mapper: (value: T, key: K) => U,\n): Record<K, U> {\n const result = {} as Record<K, U>\n\n for (const key of Object.keys(object)) {\n result[key] = mapper(object[key] as T, key as K)\n }\n\n return result\n}\n", "/**\n * Accepts an array and comparator function (similar to Array.prototype.sort)\n * and returns max element of that array, ordered with that comparator.\n * Functionally, equivalent of items.sort(comparator).at(-1), but performed non-destructively\n * in O(n)\n * @param items\n * @param comparator callback specifying the relative order of two items. See `Array.prototype.sort`\n * @returns\n */\nexport function maxWithComparator<T>(items: T[], comparator: (a: T, b: T) => number): T | undefined {\n if (items.length === 0) {\n return undefined\n }\n let result = items[0]\n\n for (let i = 1; i < items.length; i++) {\n const compareValue = comparator(result, items[i])\n // comparator returning negative number means that b>a\n if (compareValue < 0) {\n result = items[i]\n }\n }\n return result\n}\n\nexport function maxBy<T>(items: T[], callback: (item: T) => number): T | undefined {\n return maxWithComparator(items, (a, b) => callback(a) - callback(b))\n}\n", "/**\n * Used for preserving class names for minified class instances\n * Useful for error objects and other classes where public name\n * actually matters\n *\n * @param classObject\n * @param name\n */\nexport function setClassName(classObject: Function, name: string) {\n Object.defineProperty(classObject, 'name', {\n value: name,\n configurable: true,\n })\n}\n", "import { warn } from './logger'\n\nconst alreadyWarned = new Set()\n\nexport const warnOnce = (key: string, message: string, ...args: unknown[]) => {\n if (!alreadyWarned.has(key)) {\n alreadyWarned.add(key)\n warn(message, ...args)\n }\n}\n", "import { setClassName } from '@prisma/internals'\n\nexport class PrismaClientInitializationError extends Error {\n clientVersion: string\n errorCode?: string\n retryable?: boolean\n\n constructor(message: string, clientVersion: string, errorCode?: string) {\n super(message)\n this.name = 'PrismaClientInitializationError'\n\n this.clientVersion = clientVersion\n this.errorCode = errorCode\n Error.captureStackTrace(PrismaClientInitializationError)\n }\n get [Symbol.toStringTag]() {\n return 'PrismaClientInitializationError'\n }\n}\n\nsetClassName(PrismaClientInitializationError, 'PrismaClientInitializationError')\n", "import { setClassName } from '@prisma/internals'\n\nimport { ErrorWithBatchIndex } from './ErrorWithBatchIndex'\n\ntype KnownErrorParams = {\n code: string\n clientVersion: string\n meta?: Record<string, unknown>\n batchRequestIdx?: number\n}\n\nexport class PrismaClientKnownRequestError extends Error implements ErrorWithBatchIndex {\n code: string\n meta?: Record<string, unknown>\n clientVersion: string\n batchRequestIdx?: number\n\n constructor(message: string, { code, clientVersion, meta, batchRequestIdx }: KnownErrorParams) {\n super(message)\n this.name = 'PrismaClientKnownRequestError'\n\n this.code = code\n this.clientVersion = clientVersion\n this.meta = meta\n Object.defineProperty(this, 'batchRequestIdx', {\n value: batchRequestIdx,\n enumerable: false,\n writable: true,\n })\n }\n get [Symbol.toStringTag]() {\n return 'PrismaClientKnownRequestError'\n }\n}\n\nsetClassName(PrismaClientKnownRequestError, 'PrismaClientKnownRequestError')\n", "import { setClassName } from '@prisma/internals'\n\nexport class PrismaClientRustPanicError extends Error {\n clientVersion: string\n\n constructor(message: string, clientVersion: string) {\n super(message)\n this.name = 'PrismaClientRustPanicError'\n\n this.clientVersion = clientVersion\n }\n get [Symbol.toStringTag]() {\n return 'PrismaClientRustPanicError'\n }\n}\n\nsetClassName(PrismaClientRustPanicError, 'PrismaClientRustPanicError')\n", "import { setClassName } from '@prisma/internals'\n\nimport { ErrorWithBatchIndex } from './ErrorWithBatchIndex'\n\ntype UnknownErrorParams = {\n clientVersion: string\n batchRequestIdx?: number\n}\n\nexport class PrismaClientUnknownRequestError extends Error implements ErrorWithBatchIndex {\n clientVersion: string\n batchRequestIdx?: number\n\n constructor(message: string, { clientVersion, batchRequestIdx }: UnknownErrorParams) {\n super(message)\n this.name = 'PrismaClientUnknownRequestError'\n\n this.clientVersion = clientVersion\n Object.defineProperty(this, 'batchRequestIdx', {\n value: batchRequestIdx,\n writable: true,\n enumerable: false,\n })\n }\n get [Symbol.toStringTag]() {\n return 'PrismaClientUnknownRequestError'\n }\n}\n\nsetClassName(PrismaClientUnknownRequestError, 'PrismaClientUnknownRequestError')\n", "import { setClassName } from '@prisma/internals'\n\ntype Options = {\n clientVersion: string\n}\nexport class PrismaClientValidationError extends Error {\n name = 'PrismaClientValidationError'\n clientVersion: string\n\n constructor(message: string, { clientVersion }: Options) {\n super(message)\n this.clientVersion = clientVersion\n }\n\n get [Symbol.toStringTag]() {\n return 'PrismaClientValidationError'\n }\n}\nsetClassName(PrismaClientValidationError, 'PrismaClientValidationError')\n", "type CacheEntry<V> = {\n value: V\n}\nexport class Cache<K, V> {\n private _map = new Map<K, CacheEntry<V>>()\n\n get(key: K): V | undefined {\n return this._map.get(key)?.value\n }\n\n set(key: K, value: V): void {\n this._map.set(key, { value })\n }\n\n getOrCreate(key: K, create: () => V): V {\n const cached = this._map.get(key)\n if (cached) {\n return cached.value\n }\n const value = create()\n this.set(key, value)\n return value\n }\n}\n", "/**\n * Converts the first character of a word to upper case.\n */\nexport function capitalize<T extends string>(self: T): Capitalize<T> {\n if (self.length === 0) return self as Capitalize<T>\n\n return (self[0].toUpperCase() + self.slice(1)) as Capitalize<T>\n}\n\n/**\n * Converts the first character of a word to lower case.\n */\nexport function uncapitalize<T extends string>(self: T): Uncapitalize<T> {\n return (self.substring(0, 1).toLowerCase() + self.substring(1)) as Uncapitalize<T>\n}\n", "export interface Dictionary<T> {\n [key: string]: T\n}\n\nexport function keyBy<P extends PropertyKey, T extends { [key in P]: string }>(\n collection: readonly T[],\n prop: P,\n): Dictionary<T> {\n const acc: Dictionary<T> = {}\n\n for (const obj of collection) {\n const key = obj[prop]\n acc[key] = obj\n }\n\n return acc\n}\n", "export type LazyProperty<T> = {\n get: () => T\n}\n\nexport function lazyProperty<T>(compute: () => T): LazyProperty<T> {\n let resultContainer: undefined | { value: T }\n\n return {\n get() {\n if (resultContainer) {\n return resultContainer.value\n }\n resultContainer = { value: compute() }\n return resultContainer.value\n },\n }\n}\n", "import type * as DMMF from '@prisma/dmmf'\n\nexport type RuntimeModel = Omit<DMMF.Model, 'name'>\nexport type RuntimeEnum = Omit<DMMF.DatamodelEnum, 'name'>\n\nexport type RuntimeDataModel = {\n readonly models: Record<string, RuntimeModel>\n readonly enums: Record<string, RuntimeEnum>\n readonly types: Record<string, RuntimeModel>\n}\n\nexport type PrunedRuntimeModel = {\n readonly dbName: RuntimeModel['dbName']\n readonly fields: Pick<RuntimeModel['fields'][number], 'name' | 'kind' | 'type' | 'relationName' | 'dbName'>[]\n}\n\nexport type PrunedRuntimeDataModel = {\n readonly models: Record<string, PrunedRuntimeModel>\n readonly enums: {}\n readonly types: {}\n}\n\nexport function dmmfToRuntimeDataModel(dmmfDataModel: DMMF.Datamodel): RuntimeDataModel {\n return {\n models: buildMapForRuntime(dmmfDataModel.models),\n enums: buildMapForRuntime(dmmfDataModel.enums),\n types: buildMapForRuntime(dmmfDataModel.types),\n }\n}\n\n/**\n * Minimal version of the runtime datamodel for the Client to work\n * @param runtimeDataModel\n * @returns\n */\nexport function pruneRuntimeDataModel({ models }: RuntimeDataModel) {\n const prunedModels: PrunedRuntimeDataModel['models'] = {}\n\n for (const modelName of Object.keys(models)) {\n prunedModels[modelName] = { fields: [], dbName: models[modelName].dbName }\n\n for (const { name, kind, type, relationName, dbName } of models[modelName].fields) {\n prunedModels[modelName].fields.push({ name, kind, type, relationName, dbName })\n }\n }\n\n return { models: prunedModels, enums: {}, types: {} }\n}\n\nfunction buildMapForRuntime<T extends { name: string }>(list: readonly T[]): Record<string, Omit<T, 'name'>> {\n const result: Record<string, Omit<T, 'name'>> = {}\n for (const { name, ...rest } of list) {\n result[name] = rest\n }\n return result\n}\n", "export function isDate(value: unknown): value is Date {\n return (\n value instanceof Date ||\n // date created in other JS context (for example, worker)\n Object.prototype.toString.call(value) === '[object Date]'\n )\n}\n\nexport function isValidDate(date: Date) {\n return date.toString() !== 'Invalid Date'\n}\n", "/*!\r\n * decimal.js v10.5.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n inexact, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or \u00B1Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\r\n\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n // See https://github.com/MikeMcl/decimal.js/pull/217\r\n x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is \u00B1Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is \u00B1Infinity.\r\n // Return x if both are \u00B1Infinity with different signs.\r\n // Return NaN if both are \u00B1Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is \u00B1Infinity or NaN, or y is NaN or \u00B10.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is \u00B1Infinity or x is \u00B10.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is \u00B1Infinity.\r\n // Return x if both are \u00B1Infinity with the same sign.\r\n // Return NaN if both are \u00B1Infinity with different signs.\r\n // Return y if x is finite and y is \u00B1Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, \u00B1Infinity or \u00B10...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is \u00B10 and y is \u00B1Infinity, or y is \u00B10 and x is \u00B1Infinity.\r\n ? NaN\r\n\r\n // Return \u00B1Infinity if either is \u00B1Infinity.\r\n // Return \u00B10 if either is \u00B10.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, \u00B10) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, \u00B1Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either \u00B1Infinity, NaN or \u00B10?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return \u00B10 if x is 0 or y is \u00B1Infinity, or return \u00B1Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[0] += k;\r\n for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\nfunction maxOrMin(Ctor, args, n) {\r\n var k, y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n\r\n // NaN?\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n }\r\n\r\n k = x.cmp(y);\r\n\r\n if (k === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(\u00B10) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n}\r\n\r\n\r\n// \u00B1Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(\u00B10, -0) = \u00B1pi\r\n * atan2(\u00B10, +0) = \u00B10\r\n * atan2(\u00B10, -x) = \u00B1pi for x > 0\r\n * atan2(\u00B10, x) = \u00B10 for x > 0\r\n * atan2(-y, \u00B10) = -pi/2 for y > 0\r\n * atan2(y, \u00B10) = pi/2 for y > 0\r\n * atan2(\u00B1y, -Infinity) = \u00B1pi for finite y > 0\r\n * atan2(\u00B1y, +Infinity) = \u00B10 for finite y > 0\r\n * atan2(\u00B1Infinity, x) = \u00B1pi/2 for finite x\r\n * atan2(\u00B1Infinity, -Infinity) = \u00B13*pi/4\r\n * atan2(\u00B1Infinity, +Infinity) = \u00B1pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both \u00B1Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is \u00B1Infinity or y is \u00B10\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is \u00B1Infinity or x is \u00B10\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|bigint|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Infinity or NaN?\r\n if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n if (t === 'string') {\r\n if ((i = v.charCodeAt(0)) === 45) { // minus sign\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n if (i === 43) v = v.slice(1); // plus sign\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n if (t === 'bigint') {\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n return maxOrMin(this, arguments, -1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n return maxOrMin(this, arguments, 1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n", "import { Decimal } from 'decimal.js'\n\nimport { DecimalJsLike } from '../core/types/exported/DecimalJsLike'\n\nexport function isDecimalJsLike(value: unknown): value is DecimalJsLike {\n if (Decimal.isDecimal(value)) {\n return true\n }\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof value['s'] === 'number' &&\n typeof value['e'] === 'number' &&\n typeof value['toFixed'] === 'function' &&\n Array.isArray(value['d'])\n )\n}\n", "export * from './convert'\nexport * from './dmmf'\n", "import { DatamodelEnum, SchemaEnum } from './dmmf'\n\nexport function datamodelEnumToSchemaEnum(datamodelEnum: DatamodelEnum): SchemaEnum {\n return {\n name: datamodelEnum.name,\n values: datamodelEnum.values.map((v) => v.name),\n }\n}\n", "import { ReadonlyDeep } from './util'\n\nexport type Document = ReadonlyDeep<{\n datamodel: Datamodel\n schema: Schema\n mappings: Mappings\n}>\n\nexport type Mappings = ReadonlyDeep<{\n modelOperations: ModelMapping[]\n otherOperations: {\n read: string[]\n write: string[]\n }\n}>\n\nexport type OtherOperationMappings = ReadonlyDeep<{\n read: string[]\n write: string[]\n}>\n\nexport type DatamodelEnum = ReadonlyDeep<{\n name: string\n values: EnumValue[]\n dbName?: string | null\n documentation?: string\n}>\n\nexport type SchemaEnum = ReadonlyDeep<{\n name: string\n values: string[]\n}>\n\nexport type EnumValue = ReadonlyDeep<{\n name: string\n dbName: string | null\n}>\n\nexport type Datamodel = ReadonlyDeep<{\n models: Model[]\n enums: DatamodelEnum[]\n types: Model[]\n indexes: Index[]\n}>\n\nexport type uniqueIndex = ReadonlyDeep<{\n name: string\n fields: string[]\n}>\nexport type PrimaryKey = ReadonlyDeep<{\n name: string | null\n fields: string[]\n}>\nexport type Model = ReadonlyDeep<{\n name: string\n dbName: string | null\n schema: string | null\n fields: Field[]\n uniqueFields: string[][]\n uniqueIndexes: uniqueIndex[]\n documentation?: string\n primaryKey: PrimaryKey | null\n isGenerated?: boolean\n}>\n\nexport type FieldKind = 'scalar' | 'object' | 'enum' | 'unsupported'\n\nexport type FieldNamespace = 'model' | 'prisma'\nexport type FieldLocation = 'scalar' | 'inputObjectTypes' | 'outputObjectTypes' | 'enumTypes' | 'fieldRefTypes'\n\nexport type Field = ReadonlyDeep<{\n kind: FieldKind\n name: string\n isRequired: boolean\n isList: boolean\n isUnique: boolean\n isId: boolean\n isReadOnly: boolean\n isGenerated?: boolean // does not exist on 'type' but does on 'model'\n isUpdatedAt?: boolean // does not exist on 'type' but does on 'model'\n /**\n * Describes the data type in the same the way it is defined in the Prisma schema:\n * BigInt, Boolean, Bytes, DateTime, Decimal, Float, Int, JSON, String, $ModelName\n */\n type: string\n /**\n * Native database type, if specified.\n * For example, `@db.VarChar(191)` is encoded as `['VarChar', ['191']]`,\n * `@db.Text` is encoded as `['Text', []]`.\n */\n nativeType?: [string, string[]] | null\n dbName?: string | null\n hasDefaultValue: boolean\n default?: FieldDefault | FieldDefaultScalar | FieldDefaultScalar[]\n relationFromFields?: string[]\n relationToFields?: string[]\n relationOnDelete?: string\n relationOnUpdate?: string\n relationName?: string\n documentation?: string\n}>\n\nexport type FieldDefault = ReadonlyDeep<{\n name: string\n args: Array<string | number>\n}>\n\nexport type FieldDefaultScalar = string | boolean | number\n\nexport type Index = ReadonlyDeep<{\n model: string\n type: IndexType\n isDefinedOnField: boolean\n name?: string\n dbName?: string\n algorithm?: string\n clustered?: boolean\n fields: IndexField[]\n}>\n\nexport type IndexType = 'id' | 'normal' | 'unique' | 'fulltext'\n\nexport type IndexField = ReadonlyDeep<{\n name: string\n sortOrder?: SortOrder\n length?: number\n operatorClass?: string\n}>\n\nexport type SortOrder = 'asc' | 'desc'\n\nexport type Schema = ReadonlyDeep<{\n rootQueryType?: string\n rootMutationType?: string\n inputObjectTypes: {\n // For now there are no `model` InputTypes\n model?: InputType[]\n prisma?: InputType[]\n }\n outputObjectTypes: {\n model: OutputType[]\n prisma: OutputType[]\n }\n enumTypes: {\n model?: SchemaEnum[]\n prisma: SchemaEnum[]\n }\n fieldRefTypes: {\n prisma?: FieldRefType[]\n }\n}>\n\nexport type Query = ReadonlyDeep<{\n name: string\n args: SchemaArg[]\n output: QueryOutput\n}>\n\nexport type QueryOutput = ReadonlyDeep<{\n name: string\n isRequired: boolean\n isList: boolean\n}>\n\nexport type TypeRef<AllowedLocations extends FieldLocation> = {\n isList: boolean\n type: string\n location: AllowedLocations\n namespace?: FieldNamespace\n}\n\nexport type InputTypeRef = TypeRef<'scalar' | 'inputObjectTypes' | 'enumTypes' | 'fieldRefTypes'>\n\nexport type SchemaArg = ReadonlyDeep<{\n name: string\n comment?: string\n isNullable: boolean\n isRequired: boolean\n inputTypes: InputTypeRef[]\n requiresOtherFields?: string[]\n deprecation?: Deprecation\n}>\n\nexport type OutputType = ReadonlyDeep<{\n name: string\n fields: SchemaField[]\n}>\n\nexport type SchemaField = ReadonlyDeep<{\n name: string\n isNullable?: boolean\n outputType: OutputTypeRef\n args: SchemaArg[]\n deprecation?: Deprecation\n documentation?: string\n}>\n\nexport type OutputTypeRef = TypeRef<'scalar' | 'outputObjectTypes' | 'enumTypes'>\n\nexport type Deprecation = ReadonlyDeep<{\n sinceVersion: string\n reason: string\n plannedRemovalVersion?: string\n}>\n\nexport type InputType = ReadonlyDeep<{\n name: string\n constraints: {\n maxNumFields: number | null\n minNumFields: number | null\n fields?: string[]\n }\n meta?: {\n source?: string\n grouping?: string\n }\n fields: SchemaArg[]\n}>\n\nexport type FieldRefType = ReadonlyDeep<{\n name: string\n allowTypes: FieldRefAllowType[]\n fields: SchemaArg[]\n}>\n\nexport type FieldRefAllowType = TypeRef<'scalar' | 'enumTypes'>\n\nexport type ModelMapping = ReadonlyDeep<{\n model: string\n plural: string\n findUnique?: string | null\n findUniqueOrThrow?: string | null\n findFirst?: string | null\n findFirstOrThrow?: string | null\n findMany?: string | null\n create?: string | null\n createMany?: string | null\n createManyAndReturn?: string | null\n update?: string | null\n updateMany?: string | null\n updateManyAndReturn?: string | null\n upsert?: string | null\n delete?: string | null\n deleteMany?: string | null\n aggregate?: string | null\n groupBy?: string | null\n count?: string | null\n findRaw?: string | null\n aggregateRaw?: string | null\n}>\n\nexport enum ModelAction {\n findUnique = 'findUnique',\n findUniqueOrThrow = 'findUniqueOrThrow',\n findFirst = 'findFirst',\n findFirstOrThrow = 'findFirstOrThrow',\n findMany = 'findMany',\n create = 'create',\n createMany = 'createMany',\n createManyAndReturn = 'createManyAndReturn',\n update = 'update',\n updateMany = 'updateMany',\n updateManyAndReturn = 'updateManyAndReturn',\n upsert = 'upsert',\n delete = 'delete',\n deleteMany = 'deleteMany',\n groupBy = 'groupBy',\n count = 'count', // TODO: count does not actually exist in DMMF\n aggregate = 'aggregate',\n findRaw = 'findRaw',\n aggregateRaw = 'aggregateRaw',\n}\n", "import * as DMMF from '@prisma/dmmf'\nimport indentString from 'indent-string'\nimport { bold, dim, gray, red, underline } from 'kleur/colors'\n\nimport { CallSite, LocationInFile } from './CallSite'\nimport { SourceFileSlice } from './SourceFileSlice'\n\ndeclare global {\n /**\n * a global variable that is injected by us via jest to make our snapshots\n * work in clients that cannot read from disk (e.g. wasm or edge clients)\n */\n let $getTemplateParameters: typeof getTemplateParameters | undefined\n}\n\nexport interface ErrorArgs {\n callsite?: CallSite\n originalMethod: string\n message: string\n isPanic?: boolean\n showColors?: boolean\n callArguments?: string\n}\n\ntype Colors = {\n red: (str: string) => string\n gray: (str: string) => string\n dim: (str: string) => string\n bold: (str: string) => string\n underline: (str: string) => string\n highlightSource: (source: SourceFileSlice) => SourceFileSlice\n}\n\nconst colorsEnabled: Colors = {\n red,\n gray,\n dim,\n bold,\n underline,\n highlightSource: (source) => source.highlight(),\n}\n\nconst colorsDisabled: Colors = {\n red: (str) => str,\n gray: (str) => str,\n dim: (str) => str,\n bold: (str) => str,\n underline: (str) => str,\n highlightSource: (source) => source,\n}\n\ntype ErrorContextTemplateParameters = {\n functionName: string\n message: string\n location?: LocationInFile\n contextLines?: SourceFileSlice\n callArguments?: string\n isPanic: boolean\n}\n\nfunction getRawTemplateParameters({\n message,\n originalMethod,\n isPanic,\n callArguments,\n}: ErrorArgs): ErrorContextTemplateParameters {\n return {\n functionName: `prisma.${originalMethod}()`,\n message,\n isPanic: isPanic ?? false,\n callArguments,\n }\n}\n\nexport function getTemplateParameters(\n { callsite, message, originalMethod, isPanic, callArguments }: ErrorArgs,\n colors: Colors,\n): ErrorContextTemplateParameters {\n const templateParameters = getRawTemplateParameters({ message, originalMethod, isPanic, callArguments })\n\n // @ts-ignore\n if (!callsite || typeof window !== 'undefined') {\n return templateParameters\n }\n\n if (process.env.NODE_ENV === 'production') {\n return templateParameters\n }\n\n const callLocation = callsite.getLocation()\n if (!callLocation || !callLocation.lineNumber || !callLocation.columnNumber) {\n return templateParameters\n }\n\n const contextFirstLine = Math.max(1, callLocation.lineNumber - 3)\n let source = SourceFileSlice.read(callLocation.fileName)?.slice(contextFirstLine, callLocation.lineNumber)\n const invocationLine = source?.lineAt(callLocation.lineNumber)\n if (source && invocationLine) {\n const invocationLineIndent = getIndent(invocationLine)\n const invocationCallCode = findPrismaActionCall(invocationLine)\n if (!invocationCallCode) {\n return templateParameters\n }\n templateParameters.functionName = `${invocationCallCode.code})`\n templateParameters.location = callLocation\n\n if (!isPanic) {\n source = source.mapLineAt(callLocation.lineNumber, (line) => line.slice(0, invocationCallCode.openingBraceIndex))\n }\n\n source = colors.highlightSource(source)\n const numberColumnWidth = String(source.lastLineNumber).length\n templateParameters.contextLines = source\n .mapLines((line, lineNumber) => colors.gray(String(lineNumber).padStart(numberColumnWidth)) + ' ' + line)\n .mapLines((line) => colors.dim(line))\n .prependSymbolAt(callLocation.lineNumber, colors.bold(colors.red('\u2192')))\n\n if (callArguments) {\n let indentValue = invocationLineIndent + numberColumnWidth + 1 /* space between number and code */\n indentValue += 2 // arrow + space between arrow and number\n\n // indent all lines but first, because first line of the arguments will be printed\n // on the same line as the function call\n templateParameters.callArguments = indentString(callArguments, indentValue).slice(indentValue)\n }\n }\n return templateParameters\n}\n\nfunction findPrismaActionCall(str: string): { code: string; openingBraceIndex: number } | null {\n const allActions = Object.keys(DMMF.ModelAction).join('|')\n const regexp = new RegExp(String.raw`\\.(${allActions})\\(`)\n const match = regexp.exec(str)\n if (match) {\n const openingBraceIndex = match.index + match[0].length\n // to get the code we are slicing the string up to a found brace. We start\n // with first non-space character if space is found in the line before that or\n // 0 if it is not.\n const statementStart = str.lastIndexOf(' ', match.index) + 1\n return {\n code: str.slice(statementStart, openingBraceIndex),\n openingBraceIndex,\n }\n }\n return null\n}\n\nfunction getIndent(line: string): number {\n let spaceCount = 0\n for (let i = 0; i < line.length; i++) {\n if (line.charAt(i) !== ' ') {\n return spaceCount\n }\n spaceCount++\n }\n\n return spaceCount\n}\n\nfunction stringifyErrorMessage(\n { functionName, location, message, isPanic, contextLines, callArguments }: ErrorContextTemplateParameters,\n colors: Colors,\n) {\n const lines: string[] = ['']\n\n const introSuffix = location ? ' in' : ':'\n if (isPanic) {\n lines.push(colors.red(`Oops, an unknown error occurred! This is ${colors.bold('on us')}, you did nothing wrong.`))\n lines.push(colors.red(`It occurred in the ${colors.bold(`\\`${functionName}\\``)} invocation${introSuffix}`))\n } else {\n lines.push(colors.red(`Invalid ${colors.bold(`\\`${functionName}\\``)} invocation${introSuffix}`))\n }\n\n if (location) {\n lines.push(colors.underline(stringifyLocationInFile(location)))\n }\n\n if (contextLines) {\n lines.push('')\n\n const contextLineParts = [contextLines.toString()]\n\n if (callArguments) {\n contextLineParts.push(callArguments)\n contextLineParts.push(colors.dim(')'))\n }\n lines.push(contextLineParts.join(''))\n if (callArguments) {\n lines.push('')\n }\n } else {\n lines.push('')\n if (callArguments) {\n lines.push(callArguments)\n }\n lines.push('')\n }\n\n lines.push(message)\n return lines.join('\\n')\n}\n\nfunction stringifyLocationInFile(location: LocationInFile): string {\n const parts = [location.fileName]\n if (location.lineNumber) {\n parts.push(String(location.lineNumber))\n }\n\n if (location.columnNumber) {\n parts.push(String(location.columnNumber))\n }\n\n return parts.join(':')\n}\n\nexport function createErrorMessageWithContext(args: ErrorArgs): string {\n const colors = args.showColors ? colorsEnabled : colorsDisabled\n let templateParameters: ErrorContextTemplateParameters\n\n if (\n TARGET_BUILD_TYPE === 'wasm-engine-edge' ||\n TARGET_BUILD_TYPE === 'wasm-compiler-edge' ||\n TARGET_BUILD_TYPE === 'edge'\n ) {\n if (typeof $getTemplateParameters !== 'undefined') {\n templateParameters = $getTemplateParameters(args, colors)\n } else {\n templateParameters = getRawTemplateParameters(args)\n }\n } else {\n templateParameters = getTemplateParameters(args, colors)\n }\n\n return stringifyErrorMessage(templateParameters, colors)\n}\n", "import fs from 'fs'\n\nimport { highlightTS } from '../highlight/highlight'\nimport { dedent } from './dedent'\n\n/**\n * Class represents a source code or it's slice.\n * Provides various methods for manipulating individual lines\n * of the files using original files line numbers, even if the file was\n * sliced\n */\nexport class SourceFileSlice {\n /**\n * First line, stored in the slice\n */\n readonly firstLineNumber: number\n private lines: string[]\n\n static read(filePath: string): SourceFileSlice | null {\n let content: string\n try {\n content = fs.readFileSync(filePath, 'utf-8')\n } catch (e) {\n return null\n }\n\n return SourceFileSlice.fromContent(content)\n }\n\n static fromContent(content: string): SourceFileSlice {\n const lines = content.split(/\\r?\\n/)\n\n return new SourceFileSlice(1, lines)\n }\n\n private constructor(firstLine: number, lines: string[]) {\n this.firstLineNumber = firstLine\n this.lines = lines\n }\n\n /**\n * First line, stored in the slice\n */\n get lastLineNumber(): number {\n return this.firstLineNumber + this.lines.length - 1\n }\n\n /**\n * Returns new `SourceFileLines` object, where specified\n * `lineNumber` is transformed, using provided `mapFn`\n * @param lineNumber\n * @param mapFn\n * @returns\n */\n mapLineAt(lineNumber: number, mapFn: (line: string) => string): SourceFileSlice {\n if (lineNumber < this.firstLineNumber || lineNumber > this.lines.length + this.firstLineNumber) {\n return this\n }\n const idx = lineNumber - this.firstLineNumber\n const newLines = [...this.lines]\n newLines[idx] = mapFn(newLines[idx])\n return new SourceFileSlice(this.firstLineNumber, newLines)\n }\n\n /**\n * Returns new `SourceFileLines` object, where each line is transformed\n * with provided `mapFn` callback. Callback receives content of the line and\n * original line number\n * @param mapFn\n * @returns\n */\n mapLines(mapFn: (line: string, lineNumber: number) => string): SourceFileSlice {\n return new SourceFileSlice(\n this.firstLineNumber,\n this.lines.map((line, i) => mapFn(line, this.firstLineNumber + i)),\n )\n }\n\n /**\n * Returns contents of the specified line\n * @param lineNumber\n * @returns\n */\n lineAt(lineNumber: number): string | undefined {\n return this.lines[lineNumber - this.firstLineNumber]\n }\n\n /**\n * Prepends a character to the specified line and adds padding\n * to all the other lines so that they'll align\n * @param atLine\n * @param str\n * @returns\n */\n prependSymbolAt(atLine: number, str: string): SourceFileSlice {\n return this.mapLines((line, lineNumber) => {\n if (lineNumber === atLine) {\n return `${str} ${line}`\n }\n return ` ${line}`\n })\n }\n\n /**\n * Creates a new slice from a subset of specified lines of the new code\n * Lines of a slice can still be manipulated using their number in original file\n *\n * @example\n * ```ts\n * const slice = source.slice(80, 100)\n * slice.lineAt(80) === source.lineAt(80)\n * ```\n *\n * @param fromLine\n * @param toLine\n * @returns\n */\n slice(fromLine: number, toLine: number): SourceFileSlice {\n const slicedLines = this.lines.slice(fromLine - 1, toLine).join('\\n')\n return new SourceFileSlice(fromLine, dedent(slicedLines).split('\\n'))\n }\n\n /**\n * Returns new `SourceFileLines` object, where code inside of it have been\n * highlighted as typescript\n * @returns\n */\n highlight(): SourceFileSlice {\n const highlighted = highlightTS(this.toString())\n return new SourceFileSlice(this.firstLineNumber, highlighted.split('\\n'))\n }\n\n toString(): string {\n return this.lines.join('\\n')\n }\n}\n", "import { blue, bold, cyan, gray, green, yellow } from 'kleur/colors'\n\nimport type { Theme } from './types'\n\nexport const theme: Theme = {\n keyword: cyan,\n entity: cyan,\n value: (s) => bold(blue(s)),\n punctuation: blue,\n directive: cyan,\n function: cyan,\n variable: (s) => bold(blue(s)),\n string: (s) => bold(green(s)),\n boolean: yellow,\n number: cyan,\n comment: gray,\n}\n", "import { theme } from './theme'\n\nconst identity = (str: string) => str\n\n/* eslint-disable */\n\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\nconst _self: any = {}\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\n// Private helper vars\nlet uniqueId = 0\n\nexport var Prism: any = {\n manual: _self.Prism && _self.Prism.manual,\n disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n util: {\n encode: function (tokens: any) {\n if (tokens instanceof Token) {\n const anyTokens: any = tokens\n return new Token(anyTokens.type, Prism.util.encode(anyTokens.content), anyTokens.alias)\n } else if (Array.isArray(tokens)) {\n return tokens.map(Prism.util.encode)\n } else {\n return tokens\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/\\u00a0/g, ' ')\n }\n },\n\n type: function (o) {\n return Object.prototype.toString.call(o).slice(8, -1)\n },\n\n objId: function (obj) {\n if (!obj['__id']) {\n Object.defineProperty(obj, '__id', { value: ++uniqueId })\n }\n return obj['__id']\n },\n\n // Deep clone a language definition (e.g. to extend it)\n clone: function deepClone(o, visited?: any) {\n let clone,\n id,\n type = Prism.util.type(o)\n visited = visited || {}\n\n switch (type) {\n case 'Object':\n id = Prism.util.objId(o)\n if (visited[id]) {\n return visited[id]\n }\n clone = {}\n visited[id] = clone\n\n for (const key in o) {\n if (o.hasOwnProperty(key)) {\n clone[key] = deepClone(o[key], visited)\n }\n }\n\n return clone\n\n case 'Array':\n id = Prism.util.objId(o)\n if (visited[id]) {\n return visited[id]\n }\n clone = []\n visited[id] = clone\n\n o.forEach(function (v, i) {\n clone[i] = deepClone(v, visited)\n })\n\n return clone\n\n default:\n return o\n }\n },\n },\n\n languages: {\n extend: function (id, redef) {\n const lang = Prism.util.clone(Prism.languages[id])\n\n for (const key in redef) {\n lang[key] = redef[key]\n }\n\n return lang\n },\n\n /**\n * Insert a token before another token in a language literal\n * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n * we cannot just provide an object, we need an object and a key.\n * @param inside The key (or language id) of the parent\n * @param before The key to insert before.\n * @param insert Object with the key/value pairs to insert\n * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n */\n insertBefore: function (inside, before, insert, root) {\n root = root || Prism.languages\n const grammar = root[inside]\n const ret = {}\n\n for (const token in grammar) {\n if (grammar.hasOwnProperty(token)) {\n if (token == before) {\n for (const newToken in insert) {\n if (insert.hasOwnProperty(newToken)) {\n ret[newToken] = insert[newToken]\n }\n }\n }\n\n // Do not insert token which also occur in insert. See #1525\n if (!insert.hasOwnProperty(token)) {\n ret[token] = grammar[token]\n }\n }\n }\n\n const old = root[inside]\n root[inside] = ret\n\n // Update references in other language definitions\n Prism.languages.DFS(Prism.languages, function (this: any, key, value) {\n if (value === old && key != inside) {\n this[key] = ret\n }\n })\n\n return ret\n },\n\n // Traverse a language definition with Depth First Search\n DFS: function DFS(o, callback, type?: any, visited?: any) {\n visited = visited || {}\n\n const objId = Prism.util.objId\n\n for (const i in o) {\n if (o.hasOwnProperty(i)) {\n callback.call(o, i, o[i], type || i)\n\n const property = o[i],\n propertyType = Prism.util.type(property)\n\n if (propertyType === 'Object' && !visited[objId(property)]) {\n visited[objId(property)] = true\n DFS(property, callback, null, visited)\n } else if (propertyType === 'Array' && !visited[objId(property)]) {\n visited[objId(property)] = true\n DFS(property, callback, i, visited)\n }\n }\n }\n },\n },\n plugins: {},\n\n highlight: function (text, grammar, language) {\n const env: any = {\n code: text,\n grammar: grammar,\n language: language,\n }\n Prism.hooks.run('before-tokenize', env)\n env.tokens = Prism.tokenize(env.code, env.grammar)\n Prism.hooks.run('after-tokenize', env)\n return Token.stringify(Prism.util.encode(env.tokens), env.language)\n },\n\n matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target?: any) {\n for (const token in grammar) {\n if (!grammar.hasOwnProperty(token) || !grammar[token]) {\n continue\n }\n\n if (token == target) {\n return\n }\n\n let patterns = grammar[token]\n patterns = Prism.util.type(patterns) === 'Array' ? patterns : [patterns]\n\n for (let j = 0; j < patterns.length; ++j) {\n let pattern = patterns[j],\n inside = pattern.inside,\n lookbehind = !!pattern.lookbehind,\n greedy = !!pattern.greedy,\n lookbehindLength = 0,\n alias = pattern.alias\n\n if (greedy && !pattern.pattern.global) {\n // Without the global flag, lastIndex won't work\n const flags = pattern.pattern.toString().match(/[imuy]*$/)[0]\n pattern.pattern = RegExp(pattern.pattern.source, flags + 'g')\n }\n\n pattern = pattern.pattern || pattern\n\n // Don\u2019t cache length as it changes during the loop\n for (let i = index, pos = startPos; i < strarr.length; pos += strarr[i].length, ++i) {\n let str = strarr[i]\n\n if (strarr.length > text.length) {\n // Something went terribly wrong, ABORT, ABORT!\n return\n }\n\n if (str instanceof Token) {\n continue\n }\n\n if (greedy && i != strarr.length - 1) {\n pattern.lastIndex = pos\n var match = pattern.exec(text)\n if (!match) {\n break\n }\n\n var from = match.index + (lookbehind ? match[1].length : 0),\n to = match.index + match[0].length,\n k = i,\n p = pos\n\n for (let len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) {\n p += strarr[k].length\n // Move the index i to the element in strarr that is closest to from\n if (from >= p) {\n ++i\n pos = p\n }\n }\n\n // If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n if (strarr[i] instanceof Token) {\n continue\n }\n\n // Number of tokens to delete and replace with the new match\n delNum = k - i\n str = text.slice(pos, p)\n match.index -= pos\n } else {\n pattern.lastIndex = 0\n\n var match = pattern.exec(str),\n delNum = 1\n }\n\n if (!match) {\n if (oneshot) {\n break\n }\n\n continue\n }\n\n if (lookbehind) {\n lookbehindLength = match[1] ? match[1].length : 0\n }\n\n var from = match.index + lookbehindLength,\n match = match[0].slice(lookbehindLength),\n to = from + match.length,\n before = str.slice(0, from),\n after = str.slice(to)\n\n const args: any = [i, delNum]\n\n if (before) {\n ++i\n pos += before.length\n args.push(before)\n }\n\n const wrapped = new Token(token, inside ? Prism.tokenize(match, inside) : match, alias, match, greedy)\n\n args.push(wrapped)\n\n if (after) {\n args.push(after)\n }\n\n Array.prototype.splice.apply(strarr, args)\n\n if (delNum != 1) Prism.matchGrammar(text, strarr, grammar, i, pos, true, token)\n\n if (oneshot) break\n }\n }\n }\n },\n\n tokenize: function (text, grammar) {\n const strarr = [text]\n\n const rest = grammar.rest\n\n if (rest) {\n for (const token in rest) {\n grammar[token] = rest[token]\n }\n\n delete grammar.rest\n }\n\n Prism.matchGrammar(text, strarr, grammar, 0, 0, false)\n\n return strarr\n },\n\n hooks: {\n all: {},\n\n add: function (name, callback) {\n const hooks = Prism.hooks.all\n\n hooks[name] = hooks[name] || []\n\n hooks[name].push(callback)\n },\n\n run: function (name, env) {\n const callbacks = Prism.hooks.all[name]\n\n if (!callbacks || !callbacks.length) {\n return\n }\n\n for (var i = 0, callback; (callback = callbacks[i++]); ) {\n callback(env)\n }\n },\n },\n\n Token: Token,\n}\n\nPrism.languages.clike = {\n comment: [\n {\n pattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n lookbehind: true,\n },\n {\n pattern: /(^|[^\\\\:])\\/\\/.*/,\n lookbehind: true,\n greedy: true,\n },\n ],\n string: {\n pattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n greedy: true,\n },\n 'class-name': {\n pattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+/i,\n lookbehind: true,\n inside: {\n punctuation: /[.\\\\]/,\n },\n },\n keyword: /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n boolean: /\\b(?:true|false)\\b/,\n function: /\\w+(?=\\()/,\n number: /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n operator: /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n punctuation: /[{}[\\];(),.:]/,\n}\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n 'class-name': [\n Prism.languages.clike['class-name'],\n {\n pattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n lookbehind: true,\n },\n ],\n keyword: [\n {\n pattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n lookbehind: true,\n },\n {\n pattern:\n /(^|[^.])\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n lookbehind: true,\n },\n ],\n number:\n /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n function: /[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n operator: /-[-=]?|\\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\\|[|=]?|\\*\\*?=?|\\/=?|~|\\^=?|%=?|\\?|\\.{3}/,\n})\n\nPrism.languages.javascript['class-name'][0].pattern =\n /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n regex: {\n pattern:\n /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=\\s*($|[\\r\\n,.;})\\]]))/,\n lookbehind: true,\n greedy: true,\n },\n // This must be declared before keyword because we use \"function\" inside the look-forward\n 'function-variable': {\n pattern:\n /[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n alias: 'function',\n },\n parameter: [\n {\n pattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n lookbehind: true,\n inside: Prism.languages.javascript,\n },\n {\n pattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n inside: Prism.languages.javascript,\n },\n {\n pattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n lookbehind: true,\n inside: Prism.languages.javascript,\n },\n {\n pattern:\n /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n lookbehind: true,\n inside: Prism.languages.javascript,\n },\n ],\n constant: /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/,\n})\n\nif (Prism.languages.markup) {\n Prism.languages.markup.tag.addInlined('script', 'javascript')\n}\n\nPrism.languages.js = Prism.languages.javascript\n\nPrism.languages.typescript = Prism.languages.extend('javascript', {\n // From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words\n keyword:\n /\\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\\b/,\n builtin: /\\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\\b/,\n})\n\nPrism.languages.ts = Prism.languages.typescript\n\nexport function Token(this: any, type, content, alias, matchedStr?: any, greedy?: any) {\n this.type = type\n this.content = content\n this.alias = alias\n // Copy of the full string this token was created from\n this.length = (matchedStr || '').length | 0\n this.greedy = !!greedy\n}\n\nToken.stringify = function (o, language?: any) {\n if (typeof o == 'string') {\n return o\n }\n\n if (Array.isArray(o)) {\n return o\n .map(function (element) {\n return Token.stringify(element, language)\n })\n .join('')\n }\n\n return getColorForSyntaxKind(o.type)(o.content)\n}\n\nfunction getColorForSyntaxKind(syntaxKind: string) {\n return theme[syntaxKind] || identity\n}\n", "import { Prism, Token } from './prism'\nimport type { SyntaxDefinition } from './types'\n\nexport function highlightTS(str: string) {\n return highlight(str, Prism.languages.javascript)\n}\n\nfunction highlight(str: string, grammar: SyntaxDefinition) {\n const tokens = Prism.tokenize(str, grammar)\n return tokens.map((t) => Token.stringify(t)).join('')\n}\n", "import strip from 'strip-indent'\n\nexport function dedent(str: string): string {\n return strip(str)\n}\n", "import { uncapitalize } from '@prisma/client-common'\nimport levenshtein from 'js-levenshtein'\n\nimport {\n ArgumentDescription,\n EmptySelectionError,\n InputTypeDescription,\n InvalidArgumentTypeError,\n InvalidArgumentValueError,\n OutputTypeDescription,\n RequiredArgumentMissingError,\n SomeFieldsMissingError,\n TooManyFieldsGivenError,\n UnknownArgumentError,\n UnknownInputFieldError,\n UnknownSelectionFieldError,\n ValueTooLargeError,\n} from '../engines'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport {\n IncludeOnScalarError,\n InvalidSelectionValueError,\n MutuallyExclusiveFieldsError,\n ValidationError,\n} from '../types/ValidationError'\nimport { applyUnionError } from './applyUnionError'\nimport { ArgumentsRenderingTree } from './ArgumentsRenderingTree'\nimport { Colors } from './base'\nimport { ObjectField } from './ObjectField'\nimport { ObjectFieldSuggestion } from './ObjectFieldSuggestion'\nimport { ObjectValue } from './ObjectValue'\nimport { ScalarValue } from './ScalarValue'\nimport { SuggestionObjectValue } from './SuggestionObjectValue'\n\n/**\n * Given the validation error and arguments rendering tree, applies corresponding\n * formatting to an error tree and adds all relevant messages.\n *\n * @param error\n * @param args\n */\nexport function applyValidationError(\n error: ValidationError,\n args: ArgumentsRenderingTree,\n globalOmit?: GlobalOmitOptions,\n): void {\n switch (error.kind) {\n case 'MutuallyExclusiveFields':\n applyMutuallyExclusiveFieldsError(error, args)\n break\n case 'IncludeOnScalar':\n applyIncludeOnScalarError(error, args)\n break\n case 'EmptySelection':\n applyEmptySelectionError(error, args, globalOmit)\n break\n case 'UnknownSelectionField':\n applyUnknownSelectionFieldError(error, args)\n break\n case 'InvalidSelectionValue':\n applyInvalidSelectionValueError(error, args)\n break\n case 'UnknownArgument':\n applyUnknownArgumentError(error, args)\n break\n case 'UnknownInputField':\n applyUnknownInputFieldError(error, args)\n break\n case 'RequiredArgumentMissing':\n applyRequiredArgumentMissingError(error, args)\n break\n case 'InvalidArgumentType':\n applyInvalidArgumentTypeError(error, args)\n break\n case 'InvalidArgumentValue':\n applyInvalidArgumentValueError(error, args)\n break\n case 'ValueTooLarge':\n applyValueTooLargeError(error, args)\n break\n case 'SomeFieldsMissing':\n applySomeFieldsMissingError(error, args)\n break\n case 'TooManyFieldsGiven':\n applyTooManyFieldsGivenError(error, args)\n break\n case 'Union':\n applyUnionError(error, args, globalOmit)\n break\n default:\n throw new Error('not implemented: ' + error.kind)\n }\n}\n\nfunction applyMutuallyExclusiveFieldsError(error: MutuallyExclusiveFieldsError, argsTree: ArgumentsRenderingTree) {\n const object = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (object) {\n object.getField(error.firstField)?.markAsError()\n object.getField(error.secondField)?.markAsError()\n }\n\n argsTree.addErrorMessage(\n (colors) =>\n `Please ${colors.bold('either')} use ${colors.green(`\\`${error.firstField}\\``)} or ${colors.green(\n `\\`${error.secondField}\\``,\n )}, but ${colors.red('not both')} at the same time.`,\n )\n}\n\nfunction applyIncludeOnScalarError(error: IncludeOnScalarError, argsTree: ArgumentsRenderingTree) {\n const [selectionPath, field] = splitPath(error.selectionPath)\n const outputType = error.outputType\n\n const object = argsTree.arguments.getDeepSelectionParent(selectionPath)?.value\n if (object) {\n object.getField(field)?.markAsError()\n\n if (outputType) {\n for (const field of outputType.fields) {\n if (field.isRelation) {\n object.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n }\n }\n }\n }\n\n argsTree.addErrorMessage((colors) => {\n let msg = `Invalid scalar field ${colors.red(`\\`${field}\\``)} for ${colors.bold('include')} statement`\n if (outputType) {\n msg += ` on model ${colors.bold(outputType.name)}. ${availableOptionsMessage(colors)}`\n } else {\n msg += '.'\n }\n\n msg += `\\nNote that ${colors.bold('include')} statements only accept relation fields.`\n return msg\n })\n}\n\nfunction applyEmptySelectionError(\n error: EmptySelectionError,\n argsTree: ArgumentsRenderingTree,\n globalOmit?: GlobalOmitOptions,\n) {\n const subSelection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (subSelection) {\n const omit = subSelection.getField('omit')?.value.asObject()\n if (omit) {\n applyEmptySelectionErrorOmit(error, argsTree, omit)\n return\n }\n if (subSelection.hasField('select')) {\n applyEmptySelectionErrorSelect(error, argsTree)\n return\n }\n }\n\n if (globalOmit?.[uncapitalize(error.outputType.name)]) {\n applyEmptySelectionErrorGlobalOmit(error, argsTree)\n return\n }\n\n // should never happen, but in case it does\n argsTree.addErrorMessage(() => `Unknown field at \"${error.selectionPath.join('.')} selection\"`)\n}\n\n// case for `EmptySelectionError`, triggered by excessive omit\nfunction applyEmptySelectionErrorOmit(\n error: EmptySelectionError,\n argsTree: ArgumentsRenderingTree,\n omitValue: ObjectValue,\n) {\n omitValue.removeAllFields()\n for (const field of error.outputType.fields) {\n omitValue.addSuggestion(new ObjectFieldSuggestion(field.name, 'false'))\n }\n\n argsTree.addErrorMessage((colors) => {\n return `The ${colors.red('omit')} statement includes every field of the model ${colors.bold(\n error.outputType.name,\n )}. At least one field must be included in the result`\n })\n}\n\n// case for `EmptySelectionError`, triggered by empty/falsy `select`\nfunction applyEmptySelectionErrorSelect(error: EmptySelectionError, argsTree: ArgumentsRenderingTree) {\n const outputType = error.outputType\n const selection = argsTree.arguments.getDeepSelectionParent(error.selectionPath)?.value\n const isEmpty = selection?.isEmpty() ?? false\n\n if (selection) {\n // If selection has fields and we get EmptySelection error, it means all fields within the\n // selection are false. We have 2 possible ways to handle suggestions here:\n //\n // 1. Suggest only the fields, not present inside of the selection. Example:\n //\n // {\n // select: {\n // id: false\n // posts: false,\n // ? name?: true\n // ? email?: true\n // }\n // }\n // There are couple of possible problems here. First, we are assuming that user needs to\n // add new field to the selection, rather than change one of the existing ones to true.\n // Second, we might end up in a situation where all fields are already used in selection and we have nothing left to suggest.\n //\n // 2.Completely ignore users input and suggest all the fields. Example rendering:\n // {\n // select: {\n // ? id?: true\n // ? posts?: true,\n // ? name?: true\n // ? email?: true\n // }\n // }\n //\n // So we will be suggesting to either change one of the fields to true, or add a new one which would be true.\n // This is the approach we are taking and in order to it, we need to remove all the fields from selection. Code\n // below will then add them back as a suggestion.\n selection.removeAllFields()\n addSelectionSuggestions(selection, outputType)\n }\n\n argsTree.addErrorMessage((colors) => {\n if (isEmpty) {\n return `The ${colors.red('`select`')} statement for type ${colors.bold(\n outputType.name,\n )} must not be empty. ${availableOptionsMessage(colors)}`\n }\n return `The ${colors.red('`select`')} statement for type ${colors.bold(outputType.name)} needs ${colors.bold(\n 'at least one truthy value',\n )}.`\n })\n}\n\n// case for `EmptySelectionError`, triggered by excessive global omit\nfunction applyEmptySelectionErrorGlobalOmit(error: EmptySelectionError, argsTree: ArgumentsRenderingTree) {\n const suggestedOmitConfig = new SuggestionObjectValue()\n for (const field of error.outputType.fields) {\n if (!field.isRelation) {\n suggestedOmitConfig.addField(field.name, 'false')\n }\n }\n\n const omitSuggestion = new ObjectFieldSuggestion('omit', suggestedOmitConfig).makeRequired()\n\n if (error.selectionPath.length === 0) {\n argsTree.arguments.addSuggestion(omitSuggestion)\n } else {\n const [parentPath, fieldName] = splitPath(error.selectionPath)\n const parent = argsTree.arguments.getDeepSelectionParent(parentPath)?.value.asObject()\n const field = parent?.getField(fieldName)\n if (field) {\n const fieldValue = field?.value.asObject() ?? new ObjectValue()\n fieldValue.addSuggestion(omitSuggestion)\n field.value = fieldValue\n }\n }\n\n // neither select, nor omit are used, but global omit global omit configuration for the model exists\n argsTree.addErrorMessage((colors) => {\n return `The global ${colors.red('omit')} configuration excludes every field of the model ${colors.bold(\n error.outputType.name,\n )}. At least one field must be included in the result`\n })\n}\n\nfunction applyUnknownSelectionFieldError(error: UnknownSelectionFieldError, argsTree: ArgumentsRenderingTree) {\n const locateResult = locateSelectionField(error.selectionPath, argsTree)\n if (locateResult.parentKind !== 'unknown') {\n locateResult.field.markAsError()\n const parent = locateResult.parent\n switch (locateResult.parentKind) {\n case 'select':\n addSelectionSuggestions(parent, error.outputType)\n break\n case 'include':\n addInclusionSuggestions(parent, error.outputType)\n break\n case 'omit':\n addOmissionSuggestions(parent, error.outputType)\n break\n }\n }\n argsTree.addErrorMessage((colors) => {\n const parts = [`Unknown field ${colors.red(`\\`${locateResult.fieldName}\\``)}`]\n if (locateResult.parentKind !== 'unknown') {\n parts.push(`for ${colors.bold(locateResult.parentKind)} statement`)\n }\n parts.push(`on model ${colors.bold(`\\`${error.outputType.name}\\``)}.`)\n parts.push(availableOptionsMessage(colors))\n return parts.join(' ')\n })\n}\n\nfunction applyInvalidSelectionValueError(error: InvalidSelectionValueError, argsTree: ArgumentsRenderingTree) {\n const locateResult = locateSelectionField(error.selectionPath, argsTree)\n if (locateResult.parentKind !== 'unknown') {\n locateResult.field.value.markAsError()\n }\n\n argsTree.addErrorMessage((colors) => {\n return `Invalid value for selection field \\`${colors.red(locateResult.fieldName)}\\`: ${error.underlyingError}`\n })\n}\n\nfunction applyUnknownArgumentError(error: UnknownArgumentError, argsTree: ArgumentsRenderingTree) {\n const argName = error.argumentPath[0]\n const selection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n\n if (selection) {\n selection.getField(argName)?.markAsError()\n addArgumentsSuggestions(selection, error.arguments)\n }\n\n argsTree.addErrorMessage((colors) =>\n unknownArgumentMessage(\n colors,\n argName,\n error.arguments.map((arg) => arg.name),\n ),\n )\n}\n\nfunction applyUnknownInputFieldError(error: UnknownInputFieldError, argsTree: ArgumentsRenderingTree) {\n const [argParentPath, argName] = splitPath(error.argumentPath)\n const selection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n\n if (selection) {\n selection.getDeepField(error.argumentPath)?.markAsError()\n const argParent = selection.getDeepFieldValue(argParentPath)?.asObject()\n if (argParent) {\n addInputSuggestions(argParent, error.inputType)\n }\n }\n\n argsTree.addErrorMessage((colors) =>\n unknownArgumentMessage(\n colors,\n argName,\n error.inputType.fields.map((f) => f.name),\n ),\n )\n}\n\nfunction unknownArgumentMessage(colors: Colors, argName: string, options: string[]) {\n const parts = [`Unknown argument \\`${colors.red(argName)}\\`.`]\n const suggestion = getSuggestion(argName, options)\n\n if (suggestion) {\n parts.push(`Did you mean \\`${colors.green(suggestion)}\\`?`)\n }\n\n if (options.length > 0) {\n parts.push(availableOptionsMessage(colors))\n }\n\n return parts.join(' ')\n}\n\nfunction applyRequiredArgumentMissingError(error: RequiredArgumentMissingError, args: ArgumentsRenderingTree) {\n let existingField: ObjectField | undefined = undefined\n\n args.addErrorMessage((colors) => {\n if (existingField?.value instanceof ScalarValue && existingField.value.text === 'null') {\n return `Argument \\`${colors.green(argumentName)}\\` must not be ${colors.red('null')}.`\n }\n return `Argument \\`${colors.green(argumentName)}\\` is missing.`\n })\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (!selection) {\n return\n }\n\n const [argParent, argumentName] = splitPath(error.argumentPath)\n const objectSuggestion = new SuggestionObjectValue()\n const parent = selection.getDeepFieldValue(argParent)?.asObject()\n if (!parent) {\n return\n }\n\n existingField = parent.getField(argumentName)\n if (existingField) {\n parent.removeField(argumentName)\n }\n\n if (error.inputTypes.length === 1 && error.inputTypes[0].kind === 'object') {\n for (const field of error.inputTypes[0].fields) {\n objectSuggestion.addField(field.name, field.typeNames.join(' | '))\n }\n\n parent.addSuggestion(new ObjectFieldSuggestion(argumentName, objectSuggestion).makeRequired())\n } else {\n const typeName = error.inputTypes.map(getInputTypeName).join(' | ')\n parent.addSuggestion(new ObjectFieldSuggestion(argumentName, typeName).makeRequired())\n }\n\n if (error.dependentArgumentPath) {\n selection.getDeepField(error.dependentArgumentPath)?.markAsError()\n const [, dependentArgumentName] = splitPath(error.dependentArgumentPath)\n args.addErrorMessage((colors) => {\n return `Argument \\`${colors.green(argumentName)}\\` is required because argument \\`${colors.green(\n dependentArgumentName,\n )}\\` was provided.`\n })\n }\n}\n\nfunction getInputTypeName(description: InputTypeDescription) {\n if (description.kind === 'list') {\n return `${getInputTypeName(description.elementType)}[]`\n }\n return description.name\n}\n\nfunction applyInvalidArgumentTypeError(error: InvalidArgumentTypeError, args: ArgumentsRenderingTree) {\n const argName = error.argument.name\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (selection) {\n selection.getDeepFieldValue(error.argumentPath)?.markAsError()\n }\n\n args.addErrorMessage((colors) => {\n const expected = joinWithPreposition(\n 'or',\n error.argument.typeNames.map((type) => colors.green(type)),\n )\n // TODO: print value\n return `Argument \\`${colors.bold(argName)}\\`: Invalid value provided. Expected ${expected}, provided ${colors.red(\n error.inferredType,\n )}.`\n })\n}\n\nfunction applyInvalidArgumentValueError(error: InvalidArgumentValueError, args: ArgumentsRenderingTree) {\n const argName = error.argument.name\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (selection) {\n selection.getDeepFieldValue(error.argumentPath)?.markAsError()\n }\n\n args.addErrorMessage((colors) => {\n const parts = [`Invalid value for argument \\`${colors.bold(argName)}\\``]\n if (error.underlyingError) {\n parts.push(`: ${error.underlyingError}`)\n }\n parts.push('.')\n if (error.argument.typeNames.length > 0) {\n const expected = joinWithPreposition(\n 'or',\n error.argument.typeNames.map((type) => colors.green(type)),\n )\n parts.push(` Expected ${expected}.`)\n }\n return parts.join('')\n })\n}\n\nfunction applyValueTooLargeError(error: ValueTooLargeError, args: ArgumentsRenderingTree) {\n const argName = error.argument.name\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n let printedValue: string | undefined\n if (selection) {\n const field = selection.getDeepField(error.argumentPath)\n const value = field?.value\n value?.markAsError()\n if (value instanceof ScalarValue) {\n printedValue = value.text\n }\n }\n\n args.addErrorMessage((colors) => {\n const parts: string[] = ['Unable to fit value']\n if (printedValue) {\n parts.push(colors.red(printedValue))\n }\n parts.push(`into a 64-bit signed integer for field \\`${colors.bold(argName)}\\``)\n\n return parts.join(' ')\n })\n}\n\nfunction applySomeFieldsMissingError(error: SomeFieldsMissingError, args: ArgumentsRenderingTree) {\n const argumentName = error.argumentPath[error.argumentPath.length - 1]\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n if (selection) {\n const argument = selection.getDeepFieldValue(error.argumentPath)?.asObject()\n if (argument) {\n addInputSuggestions(argument, error.inputType)\n }\n }\n\n args.addErrorMessage((colors) => {\n const parts = [`Argument \\`${colors.bold(argumentName)}\\` of type ${colors.bold(error.inputType.name)} needs`]\n if (error.constraints.minFieldCount === 1) {\n if (error.constraints.requiredFields) {\n parts.push(\n `${colors.green('at least one of')} ${joinWithPreposition(\n 'or',\n error.constraints.requiredFields.map((f) => `\\`${colors.bold(f)}\\``),\n )} arguments.`,\n )\n } else {\n parts.push(`${colors.green('at least one')} argument.`)\n }\n } else {\n parts.push(`${colors.green(`at least ${error.constraints.minFieldCount}`)} arguments.`)\n }\n parts.push(availableOptionsMessage(colors))\n return parts.join(' ')\n })\n}\n\nfunction applyTooManyFieldsGivenError(error: TooManyFieldsGivenError, args: ArgumentsRenderingTree) {\n const argumentName = error.argumentPath[error.argumentPath.length - 1]\n const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n let providedArguments: string[] = []\n if (selection) {\n const argument = selection.getDeepFieldValue(error.argumentPath)?.asObject()\n if (argument) {\n argument.markAsError()\n providedArguments = Object.keys(argument.getFields())\n }\n }\n\n args.addErrorMessage((colors) => {\n const parts = [`Argument \\`${colors.bold(argumentName)}\\` of type ${colors.bold(error.inputType.name)} needs`]\n if (error.constraints.minFieldCount === 1 && error.constraints.maxFieldCount == 1) {\n parts.push(`${colors.green('exactly one')} argument,`)\n } else if (error.constraints.maxFieldCount == 1) {\n parts.push(`${colors.green('at most one')} argument,`)\n } else {\n parts.push(`${colors.green(`at most ${error.constraints.maxFieldCount}`)} arguments,`)\n }\n\n parts.push(\n `but you provided ${joinWithPreposition(\n 'and',\n providedArguments.map((arg) => colors.red(arg)),\n )}. Please choose`,\n )\n\n if (error.constraints.maxFieldCount === 1) {\n parts.push('one.')\n } else {\n parts.push(`${error.constraints.maxFieldCount}.`)\n }\n\n return parts.join(' ')\n })\n}\n\nfunction addSelectionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n for (const field of outputType.fields) {\n if (!selection.hasField(field.name)) {\n selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n }\n }\n}\n\nfunction addInclusionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n for (const field of outputType.fields) {\n if (field.isRelation && !selection.hasField(field.name)) {\n selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n }\n }\n}\n\nfunction addOmissionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n for (const field of outputType.fields) {\n if (!selection.hasField(field.name) && !field.isRelation) {\n selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n }\n }\n}\n\nfunction addArgumentsSuggestions(argumentsParent: ObjectValue, args: ArgumentDescription[]) {\n for (const arg of args) {\n if (!argumentsParent.hasField(arg.name)) {\n argumentsParent.addSuggestion(new ObjectFieldSuggestion(arg.name, arg.typeNames.join(' | ')))\n }\n }\n}\n\nfunction locateSelectionField(selectionPath: string[], argsTree: ArgumentsRenderingTree) {\n const [parentPath, fieldName] = splitPath(selectionPath)\n\n const subSelection = argsTree.arguments.getDeepSubSelectionValue(parentPath)?.asObject()\n if (!subSelection) {\n return { parentKind: 'unknown' as const, fieldName }\n }\n const select = subSelection.getFieldValue('select')?.asObject()\n const include = subSelection.getFieldValue('include')?.asObject()\n const omit = subSelection.getFieldValue('omit')?.asObject()\n let field = select?.getField(fieldName)\n if (select && field) {\n return { parentKind: 'select' as const, parent: select, field, fieldName }\n }\n field = include?.getField(fieldName)\n if (include && field) {\n return { parentKind: 'include' as const, field, parent: include, fieldName }\n }\n\n field = omit?.getField(fieldName)\n if (omit && field) {\n return { parentKind: 'omit' as const, field, parent: omit, fieldName }\n }\n return { parentKind: 'unknown' as const, fieldName }\n}\n\nfunction addInputSuggestions(parent: ObjectValue, inputType: InputTypeDescription) {\n if (inputType.kind !== 'object') {\n return\n }\n\n for (const field of inputType.fields) {\n if (!parent.hasField(field.name)) {\n parent.addSuggestion(new ObjectFieldSuggestion(field.name, field.typeNames.join(' | ')))\n }\n }\n}\n\nfunction splitPath(path: string[]): [parentPath: string[], fieldName: string] {\n const selectionPath = [...path]\n const fieldName = selectionPath.pop()\n if (!fieldName) {\n throw new Error('unexpected empty path')\n }\n return [selectionPath, fieldName]\n}\n\nfunction availableOptionsMessage({ green, enabled }: Colors) {\n return `Available options are ` + (enabled ? `listed in ${green('green')}` : `marked with ?`) + '.'\n}\n\nfunction joinWithPreposition(preposition: 'and' | 'or', items: string[]): string {\n if (items.length === 1) {\n return items[0]\n }\n const itemsCopy = [...items]\n const lastItem = itemsCopy.pop()\n return `${itemsCopy.join(', ')} ${preposition} ${lastItem}`\n}\n\n/**\n * Options with edit distance above this value will never be suggested\n */\nconst MAX_EDIT_DISTANCE = 3\n\nfunction getSuggestion(str: string, options: string[]): string | undefined {\n let minDistance = Infinity\n let result: string | undefined\n\n for (const option of options) {\n const editDistance = levenshtein(str, option)\n if (editDistance > MAX_EDIT_DISTANCE) {\n continue\n }\n if (editDistance < minDistance) {\n minDistance = editDistance\n result = option\n }\n }\n return result\n}\n", "import { maxWithComparator } from '@prisma/internals'\n\nimport { EngineValidationError, InvalidArgumentTypeError, UnionError } from '../engines'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { applyValidationError } from './applyValidationError'\nimport { ArgumentsRenderingTree } from './ArgumentsRenderingTree'\n\ntype NonUnionError = Exclude<EngineValidationError, UnionError>\n\n/**\n * When a particular field has multiple allowed types on the schema level\n * and none of them match users input, engine returns special kind of error: UnionError.\n * This error acts as a container for individual errors for each non-matching type.\n * In that case, we need to make a guess which of the errors corresponds users intent the most.\n * General algorithm of processing them is the following:\n * - flatten all nested errors and get a single list of all possible errors\n * - merge individual InvalidArgumentType errors at the same path\n * - pick the best error based on combined argument and selection paths length and type of the error.\n *\n * For details of each step, see other comments in this file.\n * @param error\n * @param args\n */\nexport function applyUnionError(error: UnionError, args: ArgumentsRenderingTree, globalOmit?: GlobalOmitOptions) {\n const allErrors = flattenUnionError(error)\n const merged = mergeInvalidArgumentTypeErrors(allErrors)\n const bestError = getBestScoringError(merged)\n if (bestError) {\n applyValidationError(bestError, args, globalOmit)\n } else {\n args.addErrorMessage(() => 'Unknown error')\n }\n}\n\nfunction flattenUnionError(error: UnionError): NonUnionError[] {\n return error.errors.flatMap((error) => {\n if (error.kind === 'Union') {\n return flattenUnionError(error)\n }\n return [error]\n })\n}\n\n/**\n * Iterates over provided error list and merges all InvalidArgumentType\n * with matching selectionPath and argumentPath into one. For example,\n * if the list has an error, saying that `where.arg` does not match `Int`\n * and another, saying that `where.arg` does not match IntFilter, resulting\n * list will contain a single error for `where.arg` saying it does not\n * match `Int | IntFilter`\n * @param errorList\n * @returns\n */\nfunction mergeInvalidArgumentTypeErrors(errorList: NonUnionError[]) {\n const invalidArgsError = new Map<string, InvalidArgumentTypeError>()\n const result: NonUnionError[] = []\n\n for (const error of errorList) {\n if (error.kind !== 'InvalidArgumentType') {\n result.push(error)\n continue\n }\n\n const key = `${error.selectionPath.join('.')}:${error.argumentPath.join('.')}`\n const prevError = invalidArgsError.get(key)\n if (!prevError) {\n invalidArgsError.set(key, error)\n } else {\n invalidArgsError.set(key, {\n ...error,\n argument: {\n ...error.argument,\n typeNames: uniqueConcat(prevError.argument.typeNames, error.argument.typeNames),\n },\n })\n }\n }\n\n result.push(...invalidArgsError.values())\n return result\n}\n\nfunction uniqueConcat<T>(head: T[], tail: T[]): T[] {\n return [...new Set(head.concat(tail))]\n}\n\n/**\n * Function that attempts to pick the best error from the list\n * by ranking them. In most cases, highest ranking error would be the one\n * which has the longest combined \"selectionPath\" + \"argumentPath\". Justification\n * for that is that type that made it deeper into validation tree before failing\n * is probably closer to the one user actually wanted to do.\n *\n * However, if two errors are at the same depth level, we introduce additional ranking based\n * on error type. See `getErrorTypeScore` function for details\n * @param errors\n * @returns\n */\nfunction getBestScoringError(errors: NonUnionError[]) {\n return maxWithComparator(errors, (errorA, errorB) => {\n const aPathLength = getCombinedPathLength(errorA)\n const bPathLength = getCombinedPathLength(errorB)\n if (aPathLength !== bPathLength) {\n return aPathLength - bPathLength\n }\n return getErrorTypeScore(errorA) - getErrorTypeScore(errorB)\n })\n}\n\nfunction getCombinedPathLength(error: EngineValidationError) {\n let score = 0\n if (Array.isArray(error['selectionPath'])) {\n score += error['selectionPath'].length\n }\n\n if (Array.isArray(error['argumentPath'])) {\n score += error['argumentPath'].length\n }\n return score\n}\n\n/**\n * Function is invoked to determine most relevant error based on its type.\n * Specific numbers returned from this function do not really matter, it's only\n * important how they compare relatively to each other.\n *\n * Current logic is:\n * - InvalidArgumentValue/ValueTooLarge is treated as the best possible error to display\n * since when it is present we know that the field causing the error is defined on the schema\n * and provided value has correct type, it's just that value violates some other constraint.\n * - Next candidate is `InvalidArgumentType` error. We know the field user specified can exists in\n * this spot, it's just that value provided has incorrect type.\n * - All other engine-side errors follow. At that point it's difficult to say which of them is more relevant,\n * so we treat them equally. We might adjust this logic in the future.\n * - RequiredArgumentMissing is penalized because this error is often used to disambiguate\n * union types and what is required in one arm of the union might be fine to leave out in another\n * @param error\n * @returns\n */\nfunction getErrorTypeScore(error: EngineValidationError): number {\n switch (error.kind) {\n case 'InvalidArgumentValue':\n case 'ValueTooLarge':\n return 20\n case 'InvalidArgumentType':\n return 10\n case 'RequiredArgumentMissing':\n return -10\n default:\n return 0\n }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { SuggestionObjectValue } from './SuggestionObjectValue'\n\nexport class ObjectFieldSuggestion implements ErrorBasicBuilder {\n public isRequired = false\n constructor(\n readonly name: string,\n readonly value: string | SuggestionObjectValue,\n ) {}\n\n makeRequired() {\n this.isRequired = true\n return this\n }\n\n write(writer: ErrorWriter): void {\n const {\n colors: { green },\n } = writer.context\n\n writer.addMarginSymbol(green(this.isRequired ? '+' : '?'))\n writer.write(green(this.name))\n\n if (!this.isRequired) {\n writer.write(green('?'))\n }\n\n writer.write(green(`: `))\n if (typeof this.value === 'string') {\n writer.write(green(this.value))\n } else {\n writer.write(this.value)\n }\n }\n}\n", "export * from './AnyDeclarationBuilder'\nexport * from './ArraySpread'\nexport * from './ArrayType'\nexport * from './BasicBuilder'\nexport * from './Class'\nexport * from './ConditionalType'\nexport * from './ConstDeclaration'\nexport * from './DocComment'\nexport * from './Export'\nexport * from './ExportFrom'\nexport * from './File'\nexport * from './FunctionCall'\nexport * from './FunctionType'\nexport * from './GenericParameter'\nexport * from './helpers'\nexport * from './Import'\nexport * from './Interface'\nexport * from './IntersectionType'\nexport * from './KeyofType'\nexport * from './KeyType'\nexport * from './Method'\nexport * from './NamedType'\nexport * from './NamedValue'\nexport * from './NamespaceDeclaration'\nexport * from './ObjectType'\nexport * from './Parameter'\nexport * from './PrimitiveType'\nexport * from './Property'\nexport * from './stringify'\nexport * from './StringLiteralType'\nexport * from './TupleType'\nexport * from './TypeBuilder'\nexport * from './TypeDeclaration'\nexport * from './UnionType'\nexport * from './ValueBuilder'\nexport * from './WellKnownSymbol'\nexport * from './Writer'\n", "import type { BasicBuilder } from './BasicBuilder'\n\nexport const INDENT_SIZE = 2\n/**\n * Helper class for building long multi-line formatted strings from building blocks.\n * Can use either plain strings or `Builder` objects, that would encapsulate formatting logic.\n */\nexport class Writer<ContextType = undefined> {\n private lines: string[] = []\n private currentLine = ''\n private currentIndent = 0\n private marginSymbol?: string\n private afterNextNewLineCallback?: () => void\n\n constructor(\n startingIndent = 0,\n readonly context: ContextType,\n ) {\n this.currentIndent = startingIndent\n }\n\n /**\n * Adds provided value to the current line. Does not end the line.\n *\n * @param value\n * @returns\n */\n write(value: string | BasicBuilder<ContextType>): this {\n if (typeof value === 'string') {\n this.currentLine += value\n } else {\n value.write(this)\n }\n return this\n }\n\n /**\n * Adds several `values` to the current line, separated by `separator`. Both values and separator\n * can also be `Builder` instances for more advanced formatting.\n *\n * @param separator\n * @param values\n * @param writeItem allow to customize how individual item is written\n * @returns\n */\n writeJoined<T extends string | BasicBuilder<ContextType>>(\n separator: string | BasicBuilder<ContextType>,\n values: T[],\n writeItem: (item: T, writer: this) => void = (item, w) => w.write(item),\n ): this {\n const last = values.length - 1\n for (let i = 0; i < values.length; i++) {\n writeItem(values[i], this)\n if (i !== last) {\n this.write(separator)\n }\n }\n return this\n }\n\n /**\n * Adds a string to current line, flushes current line and starts a new line.\n * @param line\n * @returns\n */\n writeLine(line: string | BasicBuilder<ContextType>): this {\n return this.write(line).newLine()\n }\n\n /**\n * Flushes current line and starts a new line. New line starts at previously configured indentation level\n * @returns\n */\n newLine(): this {\n this.lines.push(this.indentedCurrentLine())\n this.currentLine = ''\n this.marginSymbol = undefined\n\n const afterNextNewLineCallback = this.afterNextNewLineCallback\n this.afterNextNewLineCallback = undefined\n afterNextNewLineCallback?.()\n return this\n }\n\n /**\n * Increases indentation level by 1, calls provided callback and then decreases indentation again.\n * Could be used for writing indented blocks of text:\n *\n * @example\n * ```ts\n * writer\n * .writeLine('{')\n * .withIndent(() => {\n * writer.writeLine('foo: 123');\n * writer.writeLine('bar: 456');\n * })\n * .writeLine('}')\n * ```\n * @param callback\n * @returns\n */\n withIndent(callback: (writer: this) => void): this {\n this.indent()\n callback(this)\n this.unindent()\n return this\n }\n\n /**\n * Calls provided callback next time when new line is started.\n * Callback is called after old line have already been flushed and a new\n * line have been started. Can be used for adding \"between the lines\" decorations,\n * such as underlines.\n *\n * @param callback\n * @returns\n */\n afterNextNewline(callback: () => void) {\n this.afterNextNewLineCallback = callback\n return this\n }\n\n /**\n * Increases indentation level of the current line by 1\n * @returns\n */\n indent(): this {\n this.currentIndent++\n return this\n }\n\n /**\n * Decreases indentation level of the current line by 1, if it is possible\n * @returns\n */\n unindent(): this {\n if (this.currentIndent > 0) {\n this.currentIndent--\n }\n return this\n }\n\n /**\n * Adds a symbol, that will replace the first character of the current line (including indentation)\n * when it is flushed. Can be used for adding markers to the line.\n *\n * Note: if indentation level of the line is 0, it will replace the first actually printed character\n * of the line. Use with caution.\n * @param symbol\n * @returns\n */\n addMarginSymbol(symbol: string): this {\n this.marginSymbol = symbol\n return this\n }\n\n toString() {\n return this.lines.concat(this.indentedCurrentLine()).join('\\n')\n }\n\n getCurrentLineLength() {\n return this.currentLine.length\n }\n\n private indentedCurrentLine(): string {\n const line = this.currentLine.padStart(this.currentLine.length + INDENT_SIZE * this.currentIndent)\n if (this.marginSymbol) {\n return this.marginSymbol + line.slice(1)\n }\n return line\n }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { Field } from './Field'\nimport { Value } from './Value'\n\nexport class ArrayField implements ErrorBasicBuilder, Field {\n constructor(public value: Value) {}\n write(writer: ErrorWriter): void {\n writer.write(this.value)\n }\n\n markAsError(): void {\n this.value.markAsError()\n }\n}\n", "import { BasicBuilder, Writer } from '@prisma/ts-builders'\nimport { bold, dim, green, red } from 'kleur/colors'\n\ntype ColorFn = (str: string) => string\nexport type Colors = {\n bold: ColorFn\n red: ColorFn\n green: ColorFn\n dim: ColorFn\n // if false, all color functions are useless\n readonly enabled: boolean\n}\n\nconst noop = (str: string) => str\n\nexport const inactiveColors: Colors = {\n bold: noop,\n red: noop,\n green: noop,\n dim: noop,\n enabled: false,\n}\n\nexport const activeColors: Colors = {\n bold,\n red,\n green,\n dim,\n enabled: true,\n}\n\nexport type ErrorRenderContext = {\n colors: Colors\n}\n\nexport type ErrorWriter = Writer<ErrorRenderContext>\nexport type ErrorBasicBuilder = BasicBuilder<ErrorRenderContext>\n\nexport const fieldsSeparator: ErrorBasicBuilder = {\n write(writer) {\n writer.writeLine(',')\n },\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\n\nexport type ColorFn = (str: string) => string\n\nexport class FormattedString implements ErrorBasicBuilder {\n private isUnderlined = false\n private color: ColorFn = (str) => str\n constructor(public contents: string) {}\n\n underline(): this {\n this.isUnderlined = true\n return this\n }\n\n setColor(color: ColorFn): this {\n this.color = color\n return this\n }\n\n write(writer: ErrorWriter): void {\n const paddingSize = writer.getCurrentLineLength()\n writer.write(this.color(this.contents))\n if (this.isUnderlined) {\n writer.afterNextNewline(() => {\n writer.write(' '.repeat(paddingSize)).writeLine(this.color('~'.repeat(this.contents.length)))\n })\n }\n }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { ObjectValue } from './ObjectValue'\n\nexport abstract class Value implements ErrorBasicBuilder {\n abstract write(writer: ErrorWriter): void\n\n /**\n * Returns total width the value when it is rendered. Used\n * for determining underline width.\n */\n abstract getPrintWidth(): number\n\n public hasError = false\n\n markAsError(): this {\n this.hasError = true\n return this\n }\n\n abstract asObject(): ObjectValue | undefined\n}\n", "import { INDENT_SIZE } from '@prisma/ts-builders'\n\nimport { ArrayField } from './ArrayField'\nimport { ErrorWriter, fieldsSeparator } from './base'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nexport class ArrayValue extends Value {\n private items: ArrayField[] = []\n\n addItem(item: Value): this {\n this.items.push(new ArrayField(item))\n return this\n }\n\n getField(index: number): ArrayField | undefined {\n return this.items[index]\n }\n\n override getPrintWidth(): number {\n if (this.items.length === 0) {\n return 2\n }\n const maxItemWidth = Math.max(...this.items.map((item) => item.value.getPrintWidth()))\n return maxItemWidth + INDENT_SIZE\n }\n\n override write(writer: ErrorWriter): void {\n if (this.items.length === 0) {\n this.writeEmpty(writer)\n return\n }\n this.writeWithItems(writer)\n }\n\n private writeEmpty(writer: ErrorWriter) {\n const output = new FormattedString('[]')\n if (this.hasError) {\n output.setColor(writer.context.colors.red).underline()\n }\n writer.write(output)\n }\n\n private writeWithItems(writer: ErrorWriter) {\n const { colors } = writer.context\n\n writer\n .writeLine('[')\n .withIndent(() => writer.writeJoined(fieldsSeparator, this.items).newLine())\n .write(']')\n\n if (this.hasError) {\n writer.afterNextNewline(() => {\n writer.writeLine(colors.red('~'.repeat(this.getPrintWidth())))\n })\n }\n }\n\n override asObject(): undefined {\n return undefined\n }\n}\n", "import { INDENT_SIZE } from '@prisma/ts-builders'\n\nimport { ArrayValue } from './ArrayValue'\nimport { ErrorWriter, fieldsSeparator } from './base'\nimport { Field } from './Field'\nimport { FormattedString } from './FormattedString'\nimport { ObjectField } from './ObjectField'\nimport { ObjectFieldSuggestion } from './ObjectFieldSuggestion'\nimport { Value } from './Value'\n\ntype SelectionParent = {\n kind: 'include' | 'select'\n value: ObjectValue\n}\n\n/**\n * Class for representing object value within rendering tree. Also used for accessing\n * different fields of the object.\n *\n * Terminology used within:\n * - selection parent = either `select` or `include` property value. For example for object\n * `{ select: { posts: true }}`, selection parent is `{ posts: true }`\n * - sub selection: value of a property of selection parent. Can be deep. In that case, specified\n * path is expected to not contain either `select` or `include` values in between (the way engine reports `selectionPath`).\n * For example, for this query:\n *\n * {\n * include: {\n * posts: {\n * select: { attachments: { where: { published: true }} }\n * }\n * }\n * }\n * Value of sub selection at path [posts, attachments] is { where: { published: true }}\n */\nexport class ObjectValue extends Value {\n private fields: Record<string, ObjectField> = {}\n private suggestions: ObjectFieldSuggestion[] = []\n\n addField(field: ObjectField) {\n this.fields[field.name] = field\n }\n\n addSuggestion(suggestion: ObjectFieldSuggestion) {\n this.suggestions.push(suggestion)\n }\n\n getField(key: string): ObjectField | undefined {\n return this.fields[key]\n }\n\n getDeepField(path: string[]): Field | undefined {\n const [head, ...tail] = path\n const firstField = this.getField(head)\n if (!firstField) {\n return undefined\n }\n let field: Field = firstField\n for (const segment of tail) {\n let nextField: Field | undefined\n\n if (field.value instanceof ObjectValue) {\n nextField = field.value.getField(segment)\n } else if (field.value instanceof ArrayValue) {\n nextField = field.value.getField(Number(segment))\n }\n if (!nextField) {\n return undefined\n }\n field = nextField\n }\n return field\n }\n\n getDeepFieldValue(path: string[]) {\n if (path.length === 0) {\n return this\n }\n return this.getDeepField(path)?.value\n }\n\n hasField(key: string) {\n return Boolean(this.getField(key))\n }\n\n removeAllFields() {\n this.fields = {}\n }\n\n removeField(key: string) {\n delete this.fields[key]\n }\n\n getFields() {\n return this.fields\n }\n\n isEmpty(): boolean {\n return Object.keys(this.fields).length === 0\n }\n\n getFieldValue(key: string): Value | undefined {\n return this.getField(key)?.value\n }\n\n getDeepSubSelectionValue(path: string[]): Value | undefined {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let selection: Value = this\n for (const segment of path) {\n if (!(selection instanceof ObjectValue)) {\n return undefined\n }\n const next = selection.getSubSelectionValue(segment)\n if (!next) {\n return undefined\n }\n\n selection = next\n }\n\n return selection\n }\n\n getDeepSelectionParent(path: string[]): SelectionParent | undefined {\n const thisParent = this.getSelectionParent()\n if (!thisParent) {\n return undefined\n }\n\n let parent = thisParent\n\n for (const segment of path) {\n const next = parent.value.getFieldValue(segment)\n if (!next || !(next instanceof ObjectValue)) {\n return undefined\n }\n\n const nextParent = next.getSelectionParent()\n if (!nextParent) {\n return undefined\n }\n parent = nextParent\n }\n\n return parent\n }\n\n getSelectionParent(): SelectionParent | undefined {\n const select = this.getField('select')?.value.asObject()\n if (select) {\n return { kind: 'select', value: select }\n }\n\n const include = this.getField('include')?.value.asObject()\n if (include) {\n return { kind: 'include', value: include }\n }\n return undefined\n }\n\n getSubSelectionValue(key: string): Value | undefined {\n return this.getSelectionParent()?.value.fields[key].value\n }\n\n override getPrintWidth(): number {\n const fields = Object.values(this.fields)\n if (fields.length == 0) {\n return 2 // {}\n }\n const maxFieldWidth = Math.max(...fields.map((f) => f.getPrintWidth()))\n return maxFieldWidth + INDENT_SIZE\n }\n\n override write(writer: ErrorWriter): void {\n const fields = Object.values(this.fields)\n if (fields.length === 0 && this.suggestions.length === 0) {\n this.writeEmpty(writer)\n return\n }\n\n this.writeWithContents(writer, fields)\n }\n\n override asObject(): ObjectValue {\n return this\n }\n\n private writeEmpty(writer: ErrorWriter) {\n const output = new FormattedString('{}')\n if (this.hasError) {\n output.setColor(writer.context.colors.red).underline()\n }\n\n writer.write(output)\n }\n\n private writeWithContents(writer: ErrorWriter, fields: ObjectField[]) {\n writer.writeLine('{').withIndent(() => {\n writer.writeJoined(fieldsSeparator, [...fields, ...this.suggestions]).newLine()\n })\n\n writer.write('}')\n if (this.hasError) {\n writer.afterNextNewline(() => {\n writer.writeLine(writer.context.colors.red('~'.repeat(this.getPrintWidth())))\n })\n }\n }\n}\n", "import { ErrorWriter } from './base'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nexport class ScalarValue extends Value {\n constructor(readonly text: string) {\n super()\n }\n\n override getPrintWidth(): number {\n return this.text.length\n }\n\n override write(writer: ErrorWriter): void {\n const string = new FormattedString(this.text)\n if (this.hasError) {\n string.underline().setColor(writer.context.colors.red)\n }\n writer.write(string)\n }\n\n override asObject(): undefined {\n return undefined\n }\n}\n", "import { ErrorBasicBuilder, ErrorWriter, fieldsSeparator } from './base'\n\nexport class SuggestionObjectValue implements ErrorBasicBuilder {\n private fields: ErrorBasicBuilder[] = []\n\n addField(name: string, value: string) {\n this.fields.push({\n write(writer) {\n const { green, dim } = writer.context.colors\n writer.write(green(dim(`${name}: ${value}`))).addMarginSymbol(green(dim('+')))\n },\n })\n return this\n }\n\n write(writer: ErrorWriter): void {\n const {\n colors: { green },\n } = writer.context\n writer\n .writeLine(green('{'))\n .withIndent(() => {\n writer.writeJoined(fieldsSeparator, this.fields).newLine()\n })\n .write(green('}'))\n .addMarginSymbol(green('+'))\n }\n}\n", "import { FieldRef } from '../types/exported/FieldRef'\n\nexport class FieldRefImpl<Model, FieldType> implements FieldRef<Model, FieldType> {\n public readonly modelName: Model\n public readonly name: string\n public readonly typeName: FieldType\n public readonly isList: boolean\n public readonly isEnum: boolean\n\n constructor(modelName: Model, name: string, fieldType: FieldType, isList: boolean, isEnum: boolean) {\n this.modelName = modelName\n this.name = name\n this.typeName = fieldType\n this.isList = isList\n this.isEnum = isEnum\n }\n\n _toGraphQLInputType() {\n const listPrefix = this.isList ? `List` : ''\n const enumPrefix = this.isEnum ? 'Enum' : ''\n\n return `${listPrefix}${enumPrefix}${this.typeName}FieldRefInput<${this.modelName}>`\n }\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef<string, unknown> {\n return value instanceof FieldRefImpl\n}\n", "/**\n * Module-private symbol used to distinguish between instances of\n * `ObjectEnumValue` created inside and outside this module.\n */\nconst secret = Symbol()\n\n/**\n * Emulate a private property via a WeakMap manually. Using native private\n * properties is a breaking change for downstream users with minimal TypeScript\n * configs, because TypeScript uses ES3 as the default target.\n *\n * TODO: replace this with a `#representation` private property in the\n * `ObjectEnumValue` class and document minimal required `target` for TypeScript.\n */\nconst representations = new WeakMap<ObjectEnumValue, string>()\n\n/**\n * Base class for unique values of object-valued enums.\n */\nexport abstract class ObjectEnumValue {\n constructor(arg?: symbol) {\n if (arg === secret) {\n representations.set(this, `Prisma.${this._getName()}`)\n } else {\n representations.set(this, `new Prisma.${this._getNamespace()}.${this._getName()}()`)\n }\n }\n\n abstract _getNamespace(): string\n\n _getName() {\n return this.constructor.name\n }\n\n toString() {\n return representations.get(this)!\n }\n}\n\nclass NullTypesEnumValue extends ObjectEnumValue {\n override _getNamespace() {\n return 'NullTypes'\n }\n}\n\nclass DbNull extends NullTypesEnumValue {\n // Phantom private property to prevent structural type equality\n // eslint-disable-next-line no-unused-private-class-members\n readonly #_brand_DbNull!: void\n}\nsetClassName(DbNull, 'DbNull')\n\nclass JsonNull extends NullTypesEnumValue {\n // Phantom private property to prevent structural type equality\n // eslint-disable-next-line no-unused-private-class-members\n readonly #_brand_JsonNull!: void\n}\nsetClassName(JsonNull, 'JsonNull')\n\nclass AnyNull extends NullTypesEnumValue {\n // Phantom private property to prevent structural type equality\n // eslint-disable-next-line no-unused-private-class-members\n readonly #_brand_AnyNull!: void\n}\nsetClassName(AnyNull, 'AnyNull')\n\nexport const objectEnumValues = {\n classes: {\n DbNull,\n JsonNull,\n AnyNull,\n },\n instances: {\n DbNull: new DbNull(secret),\n JsonNull: new JsonNull(secret),\n AnyNull: new AnyNull(secret),\n },\n}\n\n/**\n * See helper in @internals package. Can not be used here\n * because importing internal breaks browser build.\n *\n * @param classObject\n * @param name\n */\nfunction setClassName(classObject: Function, name: string) {\n Object.defineProperty(classObject, 'name', {\n value: name,\n configurable: true,\n })\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { Field } from './Field'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nconst separator = ': '\nexport class ObjectField implements ErrorBasicBuilder, Field {\n hasError = false\n constructor(\n readonly name: string,\n public value: Value,\n ) {}\n\n markAsError() {\n this.hasError = true\n }\n\n getPrintWidth() {\n return this.name.length + this.value.getPrintWidth() + separator.length\n }\n\n write(writer: ErrorWriter): void {\n const name = new FormattedString(this.name)\n if (this.hasError) {\n name.underline().setColor(writer.context.colors.red)\n }\n writer.write(name).write(separator).write(this.value)\n }\n}\n", "import { uncapitalize } from '@prisma/client-common'\nimport { Writer } from '@prisma/ts-builders'\n\nimport { ErrorFormat } from '../../getPrismaClient'\nimport { isValidDate } from '../../utils/date'\nimport { isDecimalJsLike } from '../../utils/decimalJsLike'\nimport { isFieldRef } from '../model/FieldRef'\nimport { ObjectEnumValue } from '../types/exported/ObjectEnums'\nimport { ArrayValue } from './ArrayValue'\nimport { activeColors, Colors, ErrorBasicBuilder, ErrorWriter, inactiveColors } from './base'\nimport { ObjectField } from './ObjectField'\nimport { ObjectValue } from './ObjectValue'\nimport { ScalarValue } from './ScalarValue'\n\ntype MessageRender = (colors: Colors) => string\n\nexport class ArgumentsRenderingTree implements ErrorBasicBuilder {\n readonly arguments: ObjectValue\n private errorMessages: MessageRender[] = []\n\n constructor(args: ObjectValue) {\n this.arguments = args\n }\n\n write(writer: ErrorWriter): void {\n writer.write(this.arguments)\n }\n\n addErrorMessage(renderer: MessageRender) {\n this.errorMessages.push(renderer)\n }\n\n renderAllMessages(colors: Colors): string {\n return this.errorMessages.map((messageRenderer) => messageRenderer(colors)).join('\\n')\n }\n}\n\n/**\n * Given JS call arguments, produces rendering tree for outputting rich errors into the console\n * Difference between rendering tree and plain object is that fields and values can have different attributes:\n * colors, underlines, markers on the margins. `applyValidationError` function will then apply specific formatting\n * to the rendering tree.\n *\n * @param args\n * @returns\n */\nexport function buildArgumentsRenderingTree(args: Record<PropertyKey, unknown>): ArgumentsRenderingTree {\n return new ArgumentsRenderingTree(buildInputObject(args))\n}\n\nfunction buildInputObject(inputObject: Record<PropertyKey, unknown>) {\n const object = new ObjectValue()\n\n for (const [key, value] of Object.entries(inputObject)) {\n const field = new ObjectField(key, buildInputValue(value))\n object.addField(field)\n }\n return object\n}\n\nfunction buildInputValue(value: unknown) {\n if (typeof value === 'string') {\n return new ScalarValue(JSON.stringify(value))\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return new ScalarValue(String(value))\n }\n\n if (typeof value === 'bigint') {\n return new ScalarValue(`${value}n`)\n }\n\n if (value === null) {\n return new ScalarValue('null')\n }\n\n if (value === undefined) {\n return new ScalarValue('undefined')\n }\n\n if (isDecimalJsLike(value)) {\n return new ScalarValue(`new Prisma.Decimal(\"${value.toFixed()}\")`)\n }\n\n if (value instanceof Uint8Array) {\n if (Buffer.isBuffer(value)) {\n return new ScalarValue(`Buffer.alloc(${value.byteLength})`)\n }\n return new ScalarValue(`new Uint8Array(${value.byteLength})`)\n }\n\n if (value instanceof Date) {\n const dateStr = isValidDate(value) ? value.toISOString() : 'Invalid Date'\n return new ScalarValue(`new Date(\"${dateStr}\")`)\n }\n\n if (value instanceof ObjectEnumValue) {\n return new ScalarValue(`Prisma.${value._getName()}`)\n }\n\n if (isFieldRef(value)) {\n return new ScalarValue(`prisma.${uncapitalize(value.modelName)}.$fields.${value.name}`)\n }\n\n if (Array.isArray(value)) {\n return buildInputArray(value)\n }\n\n if (typeof value === 'object') {\n return buildInputObject(value as Record<PropertyKey, unknown>)\n }\n\n return new ScalarValue(Object.prototype.toString.call(value))\n}\n\nfunction buildInputArray(array: unknown[]) {\n const result = new ArrayValue()\n for (const item of array) {\n result.addItem(buildInputValue(item))\n }\n return result\n}\n\nexport function renderArgsTree(argsTree: ArgumentsRenderingTree, errorFormat: ErrorFormat) {\n const colors = errorFormat === 'pretty' ? activeColors : inactiveColors\n\n const message = argsTree.renderAllMessages(colors)\n const args = new Writer(0, { colors }).write(argsTree).toString()\n\n return { message, args }\n}\n", "import { ErrorFormat } from '../../getPrismaClient'\nimport { CallSite } from '../../utils/CallSite'\nimport { createErrorMessageWithContext } from '../../utils/createErrorMessageWithContext'\nimport { PrismaClientValidationError } from '../errors/PrismaClientValidationError'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { JsArgs } from '../types/exported/JsApi'\nimport { ValidationError } from '../types/ValidationError'\nimport { applyValidationError } from './applyValidationError'\nimport { buildArgumentsRenderingTree, renderArgsTree } from './ArgumentsRenderingTree'\n\ntype ExceptionParams = {\n errors: ValidationError[]\n args: JsArgs\n callsite?: CallSite\n originalMethod: string\n errorFormat: ErrorFormat\n clientVersion: string\n globalOmit?: GlobalOmitOptions\n}\n\nexport function throwValidationException({\n args,\n errors,\n errorFormat,\n callsite,\n originalMethod,\n clientVersion,\n globalOmit,\n}: ExceptionParams): never {\n const argsTree = buildArgumentsRenderingTree(args)\n for (const error of errors) {\n applyValidationError(error, argsTree, globalOmit)\n }\n\n const { message, args: renderedArgs } = renderArgsTree(argsTree, errorFormat)\n\n const messageWithContext = createErrorMessageWithContext({\n message,\n callsite,\n originalMethod,\n showColors: errorFormat === 'pretty',\n callArguments: renderedArgs,\n })\n\n throw new PrismaClientValidationError(messageWithContext, { clientVersion })\n}\n", "/**\n * Transforms a model name coming from the DMMF to a runtime model name.\n * @param name\n * @returns\n */\nexport function dmmfToJSModelName(name: string) {\n return name.replace(/^./, (str) => str.toLowerCase())\n}\n", "import { Cache } from '@prisma/client-common'\nimport { mapObjectValues } from '@prisma/internals'\n\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { ExtensionArgs, ResultArg, ResultArgsFieldCompute } from '../types/exported/ExtensionArgs'\nimport { Omission, Selection } from '../types/exported/JsApi'\n\nexport type ComputedField = {\n name: string\n needs: string[]\n compute: ResultArgsFieldCompute\n}\n\nexport type ComputedFieldsMap = {\n [fieldName: string]: ComputedField\n}\n\n/**\n * Given the list of previously resolved computed fields, new extension and dmmf model name, produces a map\n * of all computed fields that may be applied to this model, accounting for all previous and past extensions.\n *\n * All naming conflicts which could be produced by the plain list of extensions are resolved as follows:\n * - extension, that declared later always wins\n * - in a single extension, specific model takes precedence over $allModels\n *\n * Additionally, resolves all `needs` dependencies down to the model fields. For example,\n * if `nameAndTitle` field depends on `fullName` computed field and `title` model field and\n * `fullName` field depends on `firstName` and `lastName` field, full list of `nameAndTitle` dependencies\n * would be `firstName`, `lastName`, `title`.\n * @param previousComputedFields\n * @param extension\n * @param dmmfModelName\n * @returns\n */\nexport function getComputedFields(\n previousComputedFields: ComputedFieldsMap | undefined,\n extension: ExtensionArgs,\n dmmfModelName: string,\n) {\n const jsName = dmmfToJSModelName(dmmfModelName)\n if (!extension.result || !(extension.result.$allModels || extension.result[jsName])) {\n return previousComputedFields\n }\n\n return resolveDependencies({\n ...previousComputedFields,\n ...getComputedFieldsFromModel(extension.name, previousComputedFields, extension.result.$allModels),\n ...getComputedFieldsFromModel(extension.name, previousComputedFields, extension.result[jsName]),\n })\n}\n\nexport function resolveDependencies(computedFields: ComputedFieldsMap): ComputedFieldsMap {\n const cache = new Cache<string, string[]>()\n const resolveNeeds = (fieldName: string, visitedFields: Set<string>) => {\n return cache.getOrCreate(fieldName, () => {\n if (visitedFields.has(fieldName)) {\n return [fieldName]\n }\n visitedFields.add(fieldName)\n if (!computedFields[fieldName]) {\n return [fieldName]\n }\n return computedFields[fieldName].needs.flatMap((fieldDep) => resolveNeeds(fieldDep, visitedFields))\n })\n }\n\n return mapObjectValues(computedFields, (field) => {\n return {\n ...field,\n needs: resolveNeeds(field.name, new Set()),\n }\n })\n}\n\nfunction getComputedFieldsFromModel(\n name: string | undefined,\n previousComputedFields: ComputedFieldsMap | undefined,\n modelResult: ResultArg | undefined,\n): ComputedFieldsMap {\n if (!modelResult) {\n return {}\n }\n\n return mapObjectValues(modelResult, ({ needs, compute }, fieldName) => ({\n name: fieldName,\n needs: needs ? Object.keys(needs).filter((key) => needs[key]) : [],\n compute: composeCompute(previousComputedFields, fieldName, compute),\n }))\n}\n\nfunction composeCompute(\n previousComputedFields: ComputedFieldsMap | undefined,\n fieldName: string,\n nextCompute: ResultArgsFieldCompute,\n): ResultArgsFieldCompute {\n const previousCompute = previousComputedFields?.[fieldName]?.compute\n if (!previousCompute) {\n return nextCompute\n }\n return (model) => {\n return nextCompute({ ...model, [fieldName]: previousCompute(model) })\n }\n}\n\nexport function computeEngineSideSelection(\n selection: Selection,\n computedFields: ComputedFieldsMap | undefined,\n): Selection {\n if (!computedFields) {\n return selection\n }\n const result = { ...selection }\n\n for (const field of Object.values(computedFields)) {\n if (!selection[field.name]) {\n continue\n }\n\n for (const dependency of field.needs) {\n result[dependency] = true\n }\n }\n return result\n}\n\n/**\n * Given user-supplied omissions, computes the results to send to the engine, taking\n * into account dependencies of the computed field. Consider following example:\n *\n * ```\n * const xprisma = prisma.$extends({\n * result: {\n * user: {\n * sanitizedPassword: {\n * needs: { password: true },\n * compute(user) {\n * return sanitze(user.password)\n * },\n * },\n * },\n * },\n * })\n *\n * const user = await xprisma.user.findFirstOrThrow({\n * omit: {\n * password: true,\n * },\n * })\n * ```\n *\n * In that case, user wants to omit the `password` but not `sanitizedPassword`.\n * Since `sanitizedPassword` can not be computed without `password`, we can not let\n * the engine handle omission in this case - we have to still query `password` from the\n * database and omit it on the client, after computing `sanitizedPassword`.\n *\n * This function removes the omission (thus, including the field into result set) if it is a dependency of\n * a non-omitted computed field. Client-side omission after we get a response is handled by `applyResultExtensions`\n *\n * @param omission\n * @param computedFields\n * @returns\n */\nexport function computeEngineSideOmissions(\n omission: Omission,\n computedFields: ComputedFieldsMap | undefined,\n): Omission {\n if (!computedFields) {\n return omission\n }\n const result = { ...omission }\n\n for (const field of Object.values(computedFields)) {\n if (omission[field.name]) {\n continue\n }\n\n for (const dependency of field.needs) {\n delete result[dependency]\n }\n }\n return result\n}\n", "import { Cache, lazyProperty } from '@prisma/client-common'\n\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { ClientArg, ExtensionArgs, ModelArg, QueryOptionsCb } from '../types/exported/ExtensionArgs'\nimport { BatchQueryOptionsCb, QueryOptionsPrivate } from '../types/internal/ExtensionsInternalArgs'\nimport { ComputedFieldsMap, getComputedFields } from './resultUtils'\n\nclass MergedExtensionsListNode {\n private computedFieldsCache = new Cache<string, ComputedFieldsMap | undefined>()\n private modelExtensionsCache = new Cache<string, ModelArg | undefined>()\n private queryCallbacksCache = new Cache<string, QueryOptionsCb[]>()\n\n private clientExtensions = lazyProperty(() => {\n if (!this.extension.client) {\n return this.previous?.getAllClientExtensions()\n }\n\n return {\n ...this.previous?.getAllClientExtensions(),\n ...this.extension.client,\n }\n })\n\n private batchCallbacks = lazyProperty(() => {\n const previous: BatchQueryOptionsCb[] = this.previous?.getAllBatchQueryCallbacks() ?? []\n const newCb = (this.extension as QueryOptionsPrivate).query?.$__internalBatch\n if (!newCb) {\n return previous\n }\n return previous.concat(newCb)\n })\n\n constructor(\n public extension: ExtensionArgs,\n public previous?: MergedExtensionsListNode,\n ) {}\n\n getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined {\n return this.computedFieldsCache.getOrCreate(dmmfModelName, () => {\n return getComputedFields(this.previous?.getAllComputedFields(dmmfModelName), this.extension, dmmfModelName)\n })\n }\n\n getAllClientExtensions(): ClientArg | undefined {\n return this.clientExtensions.get()\n }\n\n getAllModelExtensions(dmmfModelName: string): ModelArg | undefined {\n return this.modelExtensionsCache.getOrCreate(dmmfModelName, () => {\n const jsModelName = dmmfToJSModelName(dmmfModelName)\n if (!this.extension.model || !(this.extension.model[jsModelName] || this.extension.model.$allModels)) {\n return this.previous?.getAllModelExtensions(dmmfModelName)\n }\n\n return {\n ...this.previous?.getAllModelExtensions(dmmfModelName),\n ...this.extension.model.$allModels,\n ...this.extension.model[jsModelName],\n }\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n getAllQueryCallbacks(jsModelName: string | '$none', operation: string) {\n return this.queryCallbacksCache.getOrCreate(`${jsModelName}:${operation}`, () => {\n const prevCbs = this.previous?.getAllQueryCallbacks(jsModelName, operation) ?? []\n const newCbs: QueryOptionsCb[] = []\n const query = this.extension.query\n\n if (!query || !(query[jsModelName] || query['$allModels'] || query[operation] || query['$allOperations'])) {\n return prevCbs\n }\n\n if (query[jsModelName] !== undefined) {\n if (query[jsModelName][operation] !== undefined) {\n newCbs.push(query[jsModelName][operation])\n }\n\n // when the model-bound extension has a wildcard for the operation\n if (query[jsModelName]['$allOperations'] !== undefined) {\n newCbs.push(query[jsModelName]['$allOperations'])\n }\n }\n\n // when the extension isn't model-bound, apply it to all models\n // '$none' is a special case for top-level operations without model\n if (jsModelName !== '$none' && query['$allModels'] !== undefined) {\n if (query['$allModels'][operation] !== undefined) {\n newCbs.push(query['$allModels'][operation])\n }\n\n // when the non-model-bound extension has a wildcard for the operation\n if (query['$allModels']['$allOperations'] !== undefined) {\n newCbs.push(query['$allModels']['$allOperations'])\n }\n }\n\n // when the extension is not bound to a model & is a top-level operation\n if (query[operation] !== undefined) {\n newCbs.push(query[operation] as QueryOptionsCb)\n }\n\n // when the extension is not bound to a model & is any top-level operation\n if (query['$allOperations'] !== undefined) {\n newCbs.push(query['$allOperations'] as QueryOptionsCb)\n }\n\n return prevCbs.concat(newCbs)\n })\n }\n\n getAllBatchQueryCallbacks() {\n return this.batchCallbacks.get()\n }\n}\n\n/**\n * Class that holds the list of all extensions, applied to particular instance,\n * as well as resolved versions of the components that need to apply on\n * different levels. Main idea of this class: avoid re-resolving as much of the\n * stuff as possible when new extensions are added while also delaying the\n * resolve until the point it is actually needed. For example, computed fields\n * of the model won't be resolved unless the model is actually queried. Neither\n * adding extensions with `client` component only cause other components to\n * recompute.\n */\nexport class MergedExtensionsList {\n private constructor(private head?: MergedExtensionsListNode) {}\n\n static empty() {\n return new MergedExtensionsList()\n }\n\n static single(extension: ExtensionArgs) {\n return new MergedExtensionsList(new MergedExtensionsListNode(extension))\n }\n\n isEmpty(): boolean {\n return this.head === undefined\n }\n\n append(extension: ExtensionArgs) {\n return new MergedExtensionsList(new MergedExtensionsListNode(extension, this.head))\n }\n\n getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined {\n return this.head?.getAllComputedFields(dmmfModelName)\n }\n\n getAllClientExtensions() {\n return this.head?.getAllClientExtensions()\n }\n\n getAllModelExtensions(dmmfModelName: string) {\n return this.head?.getAllModelExtensions(dmmfModelName)\n }\n\n getAllQueryCallbacks(jsModelName: string, operation: string) {\n return this.head?.getAllQueryCallbacks(jsModelName, operation) ?? []\n }\n\n getAllBatchQueryCallbacks() {\n return this.head?.getAllBatchQueryCallbacks() ?? []\n }\n}\n", "import { Param } from '../types/exported/Param'\n\nexport class ParamImpl<Type, Name extends string> implements Param<Type, Name> {\n constructor(public readonly name: Name) {}\n}\n\nexport function isParam(value: unknown): value is Param<unknown, string> {\n return value instanceof ParamImpl\n}\n\nexport function createParam(name: string): Param<unknown, string> {\n return new ParamImpl(name)\n}\n", "// private symbol that prevents direct construction of a class\nconst secret = Symbol()\n\nexport class Skip {\n constructor(param?: symbol) {\n if (param !== secret) {\n throw new Error(`Skip instance can not be constructed directly`)\n }\n }\n\n ifUndefined<T>(value: T | undefined): T | Skip {\n if (value === undefined) {\n return skip\n }\n return value\n }\n}\n\nexport const skip = new Skip(secret)\n\nexport function isSkip(value: unknown): value is Skip {\n return value instanceof Skip\n}\n", "import { RuntimeDataModel, RuntimeModel, uncapitalize } from '@prisma/client-common'\nimport { assertNever } from '@prisma/internals'\n\nimport { ErrorFormat } from '../../getPrismaClient'\nimport { CallSite } from '../../utils/CallSite'\nimport { isDate, isValidDate } from '../../utils/date'\nimport { isDecimalJsLike } from '../../utils/decimalJsLike'\nimport {\n JsonArgumentValue,\n JsonFieldSelection,\n JsonQuery,\n JsonQueryAction,\n JsonSelectionSet,\n OutputTypeDescription,\n RawTaggedValue,\n} from '../engines'\nimport { throwValidationException } from '../errorRendering/throwValidationException'\nimport { MergedExtensionsList } from '../extensions/MergedExtensionsList'\nimport { computeEngineSideOmissions, computeEngineSideSelection } from '../extensions/resultUtils'\nimport { isFieldRef } from '../model/FieldRef'\nimport { isParam } from '../model/Param'\nimport { isSkip, Skip } from '../types'\nimport {\n Action,\n JsArgs,\n JsInputValue,\n JsonConvertible,\n Omission,\n RawParameters,\n Selection,\n} from '../types/exported/JsApi'\nimport { ObjectEnumValue, objectEnumValues } from '../types/exported/ObjectEnums'\nimport { ValidationError } from '../types/ValidationError'\n\nconst jsActionToProtocolAction: Record<Action, JsonQueryAction> = {\n findUnique: 'findUnique',\n findUniqueOrThrow: 'findUniqueOrThrow',\n findFirst: 'findFirst',\n findFirstOrThrow: 'findFirstOrThrow',\n findMany: 'findMany',\n count: 'aggregate',\n create: 'createOne',\n createMany: 'createMany',\n createManyAndReturn: 'createManyAndReturn',\n update: 'updateOne',\n updateMany: 'updateMany',\n updateManyAndReturn: 'updateManyAndReturn',\n upsert: 'upsertOne',\n delete: 'deleteOne',\n deleteMany: 'deleteMany',\n executeRaw: 'executeRaw',\n queryRaw: 'queryRaw',\n aggregate: 'aggregate',\n groupBy: 'groupBy',\n runCommandRaw: 'runCommandRaw',\n findRaw: 'findRaw',\n aggregateRaw: 'aggregateRaw',\n}\n\nexport type GlobalOmitOptions = {\n [modelName: string]: {\n [fieldName: string]: boolean\n }\n}\n\nexport type SerializeParams = {\n runtimeDataModel: RuntimeDataModel\n modelName?: string\n action: Action\n args?: JsArgs\n extensions?: MergedExtensionsList\n callsite?: CallSite\n clientMethod: string\n clientVersion: string\n errorFormat: ErrorFormat\n previewFeatures: string[]\n globalOmit?: GlobalOmitOptions\n}\n\nconst STRICT_UNDEFINED_ERROR_MESSAGE = 'explicitly `undefined` values are not allowed'\n\nexport function serializeJsonQuery({\n modelName,\n action,\n args,\n runtimeDataModel,\n extensions = MergedExtensionsList.empty(),\n callsite,\n clientMethod,\n errorFormat,\n clientVersion,\n previewFeatures,\n globalOmit,\n}: SerializeParams): JsonQuery {\n const context = new SerializeContext({\n runtimeDataModel,\n modelName,\n action,\n rootArgs: args,\n callsite,\n extensions,\n selectionPath: [],\n argumentPath: [],\n originalMethod: clientMethod,\n errorFormat,\n clientVersion,\n previewFeatures,\n globalOmit,\n })\n return {\n modelName,\n action: jsActionToProtocolAction[action],\n query: serializeFieldSelection(args, context),\n }\n}\n\nfunction serializeFieldSelection(\n { select, include, ...args }: JsArgs = {},\n context: SerializeContext,\n): JsonFieldSelection {\n const omit = args.omit\n delete args.omit\n return {\n arguments: serializeArgumentsObject(args, context),\n selection: serializeSelectionSet(select, include, omit, context),\n }\n}\n\nfunction serializeSelectionSet(\n select: Selection | undefined,\n include: Selection | undefined,\n omit: Omission | undefined,\n context: SerializeContext,\n): JsonSelectionSet {\n if (select) {\n if (include) {\n context.throwValidationError({\n kind: 'MutuallyExclusiveFields',\n firstField: 'include',\n secondField: 'select',\n selectionPath: context.getSelectionPath(),\n })\n } else if (omit) {\n context.throwValidationError({\n kind: 'MutuallyExclusiveFields',\n firstField: 'omit',\n secondField: 'select',\n selectionPath: context.getSelectionPath(),\n })\n }\n return createExplicitSelection(select, context)\n }\n\n return createImplicitSelection(context, include, omit)\n}\n\nfunction createImplicitSelection(\n context: SerializeContext,\n include: Selection | undefined,\n omit: Omission | undefined,\n) {\n const selectionSet: JsonSelectionSet = {}\n\n if (context.modelOrType && !context.isRawAction()) {\n selectionSet.$composites = true\n selectionSet.$scalars = true\n }\n\n if (include) {\n addIncludedRelations(selectionSet, include, context)\n }\n\n omitFields(selectionSet, omit, context)\n\n return selectionSet\n}\n\nfunction addIncludedRelations(selectionSet: JsonSelectionSet, include: Selection, context: SerializeContext) {\n for (const [key, value] of Object.entries(include)) {\n if (isSkip(value)) {\n continue\n }\n const nestedContext = context.nestSelection(key)\n validateSelectionForUndefined(value, nestedContext)\n if (value === false || value === undefined) {\n selectionSet[key] = false\n continue\n }\n\n const field = context.findField(key)\n if (field && field.kind !== 'object') {\n context.throwValidationError({\n kind: 'IncludeOnScalar',\n selectionPath: context.getSelectionPath().concat(key),\n outputType: context.getOutputTypeDescription(),\n })\n }\n if (field) {\n selectionSet[key] = serializeFieldSelection(value === true ? {} : value, nestedContext)\n continue\n }\n\n if (value === true) {\n selectionSet[key] = true\n continue\n }\n\n // value is an object, field is unknown\n // this can either be user error (in that case, qe will respond with an error)\n // or virtual field not present on datamodel (like `_count`).\n // Since we don't know which one cast is, we still attempt to serialize selection\n selectionSet[key] = serializeFieldSelection(value, nestedContext)\n }\n}\n\nfunction omitFields(selectionSet: JsonSelectionSet, localOmit: Omission | undefined, context: SerializeContext) {\n const computedFields = context.getComputedFields()\n const combinedOmits = { ...context.getGlobalOmit(), ...localOmit }\n const omitWithComputedFields = computeEngineSideOmissions(combinedOmits, computedFields)\n for (const [key, value] of Object.entries(omitWithComputedFields)) {\n if (isSkip(value)) {\n continue\n }\n validateSelectionForUndefined(value, context.nestSelection(key))\n const field = context.findField(key)\n if (computedFields?.[key] && !field) {\n continue\n }\n selectionSet[key] = !value\n }\n}\n\nfunction createExplicitSelection(select: Selection, context: SerializeContext) {\n const selectionSet: JsonSelectionSet = {}\n const computedFields = context.getComputedFields()\n const selectWithComputedFields = computeEngineSideSelection(select, computedFields)\n\n for (const [key, value] of Object.entries(selectWithComputedFields)) {\n if (isSkip(value)) {\n continue\n }\n const nestedContext = context.nestSelection(key)\n validateSelectionForUndefined(value, nestedContext)\n const field = context.findField(key)\n if (computedFields?.[key] && !field) {\n continue\n }\n if (value === false || value === undefined || isSkip(value)) {\n selectionSet[key] = false\n continue\n }\n if (value === true) {\n if (field?.kind === 'object') {\n selectionSet[key] = serializeFieldSelection({}, nestedContext)\n } else {\n selectionSet[key] = true\n }\n continue\n }\n selectionSet[key] = serializeFieldSelection(value, nestedContext)\n }\n return selectionSet\n}\n\nfunction serializeArgumentsValue(\n jsValue: Exclude<JsInputValue, undefined | Skip>,\n context: SerializeContext,\n): JsonArgumentValue {\n if (jsValue === null) {\n return null\n }\n\n if (typeof jsValue === 'string' || typeof jsValue === 'number' || typeof jsValue === 'boolean') {\n return jsValue\n }\n\n if (typeof jsValue === 'bigint') {\n return { $type: 'BigInt', value: String(jsValue) }\n }\n\n if (isDate(jsValue)) {\n if (isValidDate(jsValue)) {\n return { $type: 'DateTime', value: jsValue.toISOString() }\n } else {\n context.throwValidationError({\n kind: 'InvalidArgumentValue',\n selectionPath: context.getSelectionPath(),\n argumentPath: context.getArgumentPath(),\n argument: {\n name: context.getArgumentName(),\n typeNames: ['Date'],\n },\n underlyingError: 'Provided Date object is invalid',\n })\n }\n }\n\n if (isParam(jsValue)) {\n return { $type: 'Param', value: jsValue.name }\n }\n\n if (isFieldRef(jsValue)) {\n return { $type: 'FieldRef', value: { _ref: jsValue.name, _container: jsValue.modelName } }\n }\n\n if (Array.isArray(jsValue)) {\n return serializeArgumentsArray(jsValue, context)\n }\n\n if (ArrayBuffer.isView(jsValue)) {\n const { buffer, byteOffset, byteLength } = jsValue\n return { $type: 'Bytes', value: Buffer.from(buffer, byteOffset, byteLength).toString('base64') }\n }\n\n if (isRawParameters(jsValue)) {\n return jsValue.values\n }\n\n if (isDecimalJsLike(jsValue)) {\n return { $type: 'Decimal', value: jsValue.toFixed() }\n }\n\n if (jsValue instanceof ObjectEnumValue) {\n if (jsValue !== objectEnumValues.instances[jsValue._getName()]) {\n throw new Error('Invalid ObjectEnumValue')\n }\n return { $type: 'Enum', value: jsValue._getName() }\n }\n\n if (isJSONConvertible(jsValue)) {\n return jsValue.toJSON() as JsonArgumentValue\n }\n\n if (typeof jsValue === 'object') {\n return serializeArgumentsObject(jsValue, context)\n }\n\n context.throwValidationError({\n kind: 'InvalidArgumentValue',\n selectionPath: context.getSelectionPath(),\n argumentPath: context.getArgumentPath(),\n argument: {\n name: context.getArgumentName(),\n typeNames: [],\n },\n underlyingError: `We could not serialize ${Object.prototype.toString.call(\n jsValue,\n )} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`,\n })\n}\n\nfunction serializeArgumentsObject(\n object: Record<string, JsInputValue>,\n context: SerializeContext,\n): Record<string, JsonArgumentValue> | RawTaggedValue {\n if (object['$type']) {\n return { $type: 'Raw', value: object }\n }\n const result: Record<string, JsonArgumentValue> = {}\n for (const key in object) {\n const value = object[key]\n const nestedContext = context.nestArgument(key)\n if (isSkip(value)) {\n continue\n }\n if (value !== undefined) {\n result[key] = serializeArgumentsValue(value, nestedContext)\n } else if (context.isPreviewFeatureOn('strictUndefinedChecks')) {\n context.throwValidationError({\n kind: 'InvalidArgumentValue',\n argumentPath: nestedContext.getArgumentPath(),\n selectionPath: context.getSelectionPath(),\n argument: { name: context.getArgumentName(), typeNames: [] },\n underlyingError: STRICT_UNDEFINED_ERROR_MESSAGE,\n })\n }\n }\n return result\n}\n\nfunction serializeArgumentsArray(array: JsInputValue[], context: SerializeContext): JsonArgumentValue[] {\n const result: JsonArgumentValue[] = []\n for (let i = 0; i < array.length; i++) {\n const itemContext = context.nestArgument(String(i))\n const value = array[i]\n if (value === undefined || isSkip(value)) {\n const valueName = value === undefined ? 'undefined' : `Prisma.skip`\n context.throwValidationError({\n kind: 'InvalidArgumentValue',\n selectionPath: itemContext.getSelectionPath(),\n argumentPath: itemContext.getArgumentPath(),\n argument: {\n name: `${context.getArgumentName()}[${i}]`,\n typeNames: [],\n },\n underlyingError: `Can not use \\`${valueName}\\` value within array. Use \\`null\\` or filter out \\`${valueName}\\` values`,\n })\n }\n result.push(serializeArgumentsValue(value, itemContext))\n }\n return result\n}\n\nfunction isRawParameters(value: JsInputValue): value is RawParameters {\n return typeof value === 'object' && value !== null && value['__prismaRawParameters__'] === true\n}\n\nfunction isJSONConvertible(value: JsInputValue): value is JsonConvertible {\n return typeof value === 'object' && value !== null && typeof value['toJSON'] === 'function'\n}\n\nfunction validateSelectionForUndefined(value: unknown, context: SerializeContext) {\n if (value === undefined && context.isPreviewFeatureOn('strictUndefinedChecks')) {\n context.throwValidationError({\n kind: 'InvalidSelectionValue',\n selectionPath: context.getSelectionPath(),\n underlyingError: STRICT_UNDEFINED_ERROR_MESSAGE,\n })\n }\n}\n\ntype ContextParams = {\n runtimeDataModel: RuntimeDataModel\n originalMethod: string\n rootArgs: JsArgs | undefined\n extensions: MergedExtensionsList\n selectionPath: string[]\n argumentPath: string[]\n modelName?: string\n action: Action\n callsite?: CallSite\n errorFormat: ErrorFormat\n clientVersion: string\n previewFeatures: string[]\n globalOmit?: GlobalOmitOptions\n}\n\nclass SerializeContext {\n public readonly modelOrType: RuntimeModel | undefined\n constructor(private params: ContextParams) {\n if (this.params.modelName) {\n // TODO: throw if not found\n this.modelOrType =\n this.params.runtimeDataModel.models[this.params.modelName] ??\n this.params.runtimeDataModel.types[this.params.modelName]\n }\n }\n\n throwValidationError(error: ValidationError): never {\n throwValidationException({\n errors: [error],\n originalMethod: this.params.originalMethod,\n args: this.params.rootArgs ?? {},\n callsite: this.params.callsite,\n errorFormat: this.params.errorFormat,\n clientVersion: this.params.clientVersion,\n globalOmit: this.params.globalOmit,\n })\n }\n\n getSelectionPath() {\n return this.params.selectionPath\n }\n\n getArgumentPath() {\n return this.params.argumentPath\n }\n\n getArgumentName() {\n return this.params.argumentPath[this.params.argumentPath.length - 1]\n }\n\n getOutputTypeDescription(): OutputTypeDescription | undefined {\n if (!this.params.modelName || !this.modelOrType) {\n return undefined\n }\n return {\n name: this.params.modelName,\n fields: this.modelOrType.fields.map((field) => ({\n name: field.name,\n typeName: 'boolean',\n isRelation: field.kind === 'object',\n })),\n }\n }\n\n isRawAction() {\n return ['executeRaw', 'queryRaw', 'runCommandRaw', 'findRaw', 'aggregateRaw'].includes(this.params.action)\n }\n\n isPreviewFeatureOn(previewFeature: string) {\n return this.params.previewFeatures.includes(previewFeature)\n }\n\n getComputedFields() {\n if (!this.params.modelName) {\n return undefined\n }\n\n return this.params.extensions.getAllComputedFields(this.params.modelName)\n }\n\n findField(name: string) {\n return this.modelOrType?.fields.find((field) => field.name === name)\n }\n\n nestSelection(fieldName: string) {\n const field = this.findField(fieldName)\n const modelName = field?.kind === 'object' ? field.type : undefined\n\n return new SerializeContext({\n ...this.params,\n modelName,\n selectionPath: this.params.selectionPath.concat(fieldName),\n })\n }\n\n getGlobalOmit(): Record<string, boolean> {\n if (this.params.modelName && this.shouldApplyGlobalOmit()) {\n return this.params.globalOmit?.[uncapitalize(this.params.modelName)] ?? {}\n }\n return {}\n }\n\n shouldApplyGlobalOmit(): boolean {\n switch (this.params.action) {\n case 'findFirst':\n case 'findFirstOrThrow':\n case 'findUniqueOrThrow':\n case 'findMany':\n case 'upsert':\n case 'findUnique':\n case 'createManyAndReturn':\n case 'create':\n case 'update':\n case 'updateManyAndReturn':\n case 'delete':\n return true\n case 'executeRaw':\n case 'aggregateRaw':\n case 'runCommandRaw':\n case 'findRaw':\n case 'createMany':\n case 'deleteMany':\n case 'groupBy':\n case 'updateMany':\n case 'count':\n case 'aggregate':\n case 'queryRaw':\n return false\n default:\n assertNever(this.params.action, 'Unknown action')\n }\n }\n\n nestArgument(fieldName: string) {\n return new SerializeContext({\n ...this.params,\n argumentPath: this.params.argumentPath.concat(fieldName),\n })\n }\n}\n", "import { Client } from '../../getPrismaClient'\nimport type { Metric, MetricHistogram, MetricHistogramBucket, Metrics } from '../engines'\nimport { PrismaClientValidationError } from '../errors/PrismaClientValidationError'\n\nexport type MetricsOptions = {\n /**\n * Labels to add to every metrics in key-value format\n */\n globalLabels?: Record<string, string>\n}\n\nfunction checkPreviewFeatureFlag(client: Client) {\n if (!client._hasPreviewFlag('metrics')) {\n throw new PrismaClientValidationError('`metrics` preview feature must be enabled in order to access metrics API', {\n clientVersion: client._clientVersion,\n })\n }\n}\n\nexport class MetricsClient {\n private _client: Client\n\n constructor(client: Client) {\n this._client = client\n }\n\n /**\n * Returns all metrics gathered up to this point in prometheus format.\n * Result of this call can be exposed directly to prometheus scraping endpoint\n *\n * @param options\n * @returns\n */\n prometheus(options?: MetricsOptions): Promise<string> {\n checkPreviewFeatureFlag(this._client)\n\n return this._client._engine.metrics({ format: 'prometheus', ...options })\n }\n\n /**\n * Returns all metrics gathered up to this point in prometheus format.\n *\n * @param options\n * @returns\n */\n json(options?: MetricsOptions): Promise<Metrics> {\n checkPreviewFeatureFlag(this._client)\n\n return this._client._engine.metrics({ format: 'json', ...options })\n }\n}\n\nexport type { Metric, MetricHistogram, MetricHistogramBucket, Metrics }\n", "import { BaseDMMF, lazyProperty, RuntimeDataModel } from '@prisma/client-common'\n\nexport function defineDmmfProperty(target: object, runtimeDataModel: RuntimeDataModel) {\n const dmmfLazy = lazyProperty(() => runtimeDataModelToBaseDmmf(runtimeDataModel))\n\n Object.defineProperty(target, 'dmmf', {\n get: () => dmmfLazy.get(),\n })\n}\n\nfunction runtimeDataModelToBaseDmmf(runtimeDataModel: RuntimeDataModel): BaseDMMF {\n if (TARGET_BUILD_TYPE === 'wasm-engine-edge' || TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n throw new Error('Prisma.dmmf is not available when running in edge runtimes.')\n }\n\n return {\n datamodel: {\n models: buildDMMFList(runtimeDataModel.models),\n enums: buildDMMFList(runtimeDataModel.enums),\n types: buildDMMFList(runtimeDataModel.types),\n },\n }\n}\n\nfunction buildDMMFList<T>(map: Record<string, T>): Array<T & { name: string }> {\n return Object.entries(map).map(([name, props]) => ({ name, ...props }))\n}\n", "type TypedSqlInternal = {\n sql: string\n values: readonly unknown[]\n}\n\nconst internals = new WeakMap<TypedSql<any, any>, TypedSqlInternal>()\nconst TypedSqlMarker = '$$PrismaTypedSql'\n\nexport declare const PrivateResultType: unique symbol\n\nexport class TypedSql<Values extends readonly unknown[], Result> {\n declare [PrivateResultType]: Result\n\n constructor(sql: string, values: Values) {\n internals.set(this, {\n sql,\n values,\n })\n\n Object.defineProperty(this, TypedSqlMarker, { value: TypedSqlMarker })\n }\n\n get sql(): string {\n return internals.get(this)!.sql\n }\n\n get values(): Values {\n return internals.get(this)!.values as Values\n }\n}\n\nexport type UnknownTypedSql = TypedSql<unknown[], unknown>\n\nexport function makeTypedQueryFactory(sql: string) {\n return (...values) => new TypedSql(sql, values)\n}\n\n// used so we could detect typed sql instances, created by different instance of runtime\n// or after hmr trigger\nexport function isTypedSql(value: unknown): value is UnknownTypedSql {\n return value != null && value[TypedSqlMarker] === TypedSqlMarker\n}\n", "import type { Context } from '@opentelemetry/api'\nimport { GetPrismaClientConfig, RuntimeDataModel } from '@prisma/client-common'\nimport { clearLogs, Debug } from '@prisma/debug'\nimport type { SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nimport { version as enginesVersion } from '@prisma/engines-version/package.json'\nimport { ExtendedSpanOptions, logger, TracingHelper, tryLoadEnvs } from '@prisma/internals'\nimport { AsyncResource } from 'async_hooks'\nimport { EventEmitter } from 'events'\nimport fs from 'fs'\nimport path from 'path'\nimport { RawValue, Sql } from 'sql-template-tag'\n\nimport {\n PrismaClientInitializationError,\n PrismaClientKnownRequestError,\n PrismaClientUnknownRequestError,\n PrismaClientValidationError,\n} from '.'\nimport { addProperty, createCompositeProxy, removeProperties } from './core/compositeProxy'\nimport { BatchTransactionOptions, Engine, EngineConfig, Options } from './core/engines'\nimport { AccelerateEngineConfig } from './core/engines/accelerate/AccelerateEngine'\nimport { AccelerateExtensionFetchDecorator } from './core/engines/common/Engine'\nimport { EngineEvent, LogEmitter } from './core/engines/common/types/Events'\nimport type * as Transaction from './core/engines/common/types/Transaction'\nimport { getBatchRequestPayload } from './core/engines/common/utils/getBatchRequestPayload'\nimport { prettyPrintArguments } from './core/errorRendering/prettyPrintArguments'\nimport { prismaGraphQLToJSError } from './core/errors/utils/prismaGraphQLToJSError'\nimport { $extends } from './core/extensions/$extends'\nimport { applyAllResultExtensions } from './core/extensions/applyAllResultExtensions'\nimport { applyQueryExtensions } from './core/extensions/applyQueryExtensions'\nimport { MergedExtensionsList } from './core/extensions/MergedExtensionsList'\nimport { checkPlatformCaching } from './core/init/checkPlatformCaching'\nimport { getDatasourceOverrides } from './core/init/getDatasourceOverrides'\nimport { getEngineInstance } from './core/init/getEngineInstance'\nimport { getPreviewFeatures } from './core/init/getPreviewFeatures'\nimport { resolveDatasourceUrl } from './core/init/resolveDatasourceUrl'\nimport { GlobalOmitOptions, serializeJsonQuery } from './core/jsonProtocol/serializeJsonQuery'\nimport { MetricsClient } from './core/metrics/MetricsClient'\nimport {\n applyModelsAndClientExtensions,\n unApplyModelsAndClientExtensions,\n} from './core/model/applyModelsAndClientExtensions'\nimport { rawCommandArgsMapper } from './core/raw-query/rawCommandArgsMapper'\nimport {\n checkAlter,\n rawQueryArgsMapper,\n sqlMiddlewareArgsMapper,\n templateStringMiddlewareArgsMapper,\n} from './core/raw-query/rawQueryArgsMapper'\nimport { createPrismaPromiseFactory } from './core/request/createPrismaPromise'\nimport {\n PrismaPromise,\n PrismaPromiseInteractiveTransaction,\n PrismaPromiseTransaction,\n} from './core/request/PrismaPromise'\nimport { UserArgs } from './core/request/UserArgs'\nimport { getTracingHelper } from './core/tracing/TracingHelper'\nimport { getLockCountPromise } from './core/transaction/utils/createLockCountPromise'\nimport { itxClientDenyList } from './core/types/exported/itxClientDenyList'\nimport { JsInputValue } from './core/types/exported/JsApi'\nimport { RawQueryArgs } from './core/types/exported/RawQueryArgs'\nimport { UnknownTypedSql } from './core/types/exported/TypedSql'\nimport { getLogLevel } from './getLogLevel'\nimport type { QueryMiddlewareParams } from './QueryMiddlewareParams'\nimport { RequestHandler } from './RequestHandler'\nimport { CallSite, getCallSite } from './utils/CallSite'\nimport { clientVersion } from './utils/clientVersion'\nimport { validatePrismaClientOptions } from './utils/validatePrismaClientOptions'\nimport { waitForBatch } from './utils/waitForBatch'\n\nconst debug = Debug('prisma:client')\n\ndeclare global {\n // eslint-disable-next-line no-var\n var NODE_CLIENT: true\n const TARGET_BUILD_TYPE:\n | 'binary'\n | 'library'\n | 'edge'\n | 'wasm-engine-edge'\n | 'wasm-compiler-edge'\n | 'react-native'\n | 'client'\n}\n\n// used by esbuild for tree-shaking\ntypeof globalThis === 'object' ? (globalThis.NODE_CLIENT = true) : 0\n\nexport type ErrorFormat = 'pretty' | 'colorless' | 'minimal'\n\nexport type Datasource = { url?: string }\nexport type Datasources = { [name in string]: Datasource }\n\nexport type PrismaClientOptions = {\n /**\n * Overwrites the primary datasource url from your schema.prisma file\n */\n datasourceUrl?: string\n /**\n * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale.\n */\n adapter?: SqlDriverAdapterFactory | null\n\n /**\n * Overwrites the datasource url from your schema.prisma file\n */\n datasources?: Datasources\n\n /**\n * @default \"colorless\"\n */\n errorFormat?: ErrorFormat\n\n /**\n * The default values for Transaction options\n * maxWait ?= 2000\n * timeout ?= 5000\n */\n transactionOptions?: Transaction.Options\n\n /**\n * @example\n * \\`\\`\\`\n * // Defaults to stdout\n * log: ['query', 'info', 'warn']\n *\n * // Emit as events\n * log: [\n * { emit: 'stdout', level: 'query' },\n * { emit: 'stdout', level: 'info' },\n * { emit: 'stdout', level: 'warn' }\n * ]\n * \\`\\`\\`\n * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).\n */\n log?: Array<LogLevel | LogDefinition>\n\n omit?: GlobalOmitOptions\n\n /**\n * @internal\n * You probably don't want to use this. \\`__internal\\` is used by internal tooling.\n */\n __internal?: {\n debug?: boolean\n engine?: {\n cwd?: string\n binaryPath?: string\n endpoint?: string\n allowTriggerPanic?: boolean\n }\n /** This can be used for testing purposes */\n configOverride?: (config: GetPrismaClientConfig) => GetPrismaClientConfig\n }\n}\n\nexport type Unpacker = (data: any) => any\n\nexport type InternalRequestParams = {\n /**\n * The original client method being called.\n * Even though the rootField / operation can be changed,\n * this method stays as it is, as it's what the user's\n * code looks like\n */\n clientMethod: string // TODO what is this\n /**\n * Name of js model that triggered the request. Might be used\n * for warnings or error messages\n */\n jsModelName?: string\n // Extra headers for data proxy.\n callsite?: CallSite\n transaction?: PrismaPromiseTransaction\n unpacker?: Unpacker // TODO what is this\n otelParentCtx?: Context\n /** Used to \"desugar\" a user input into an \"expanded\" one */\n argsMapper?: (args?: UserArgs) => UserArgs\n\n /** Used to convert args for middleware and back */\n middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>\n /** Used for Accelerate client extension via Data Proxy */\n customDataProxyFetch?: AccelerateExtensionFetchDecorator\n} & Omit<QueryMiddlewareParams, 'runInTransaction'>\n\nexport type MiddlewareArgsMapper<RequestArgs, MiddlewareArgs> = {\n requestArgsToMiddlewareArgs(requestArgs: RequestArgs): MiddlewareArgs\n middlewareArgsToRequestArgs(middlewareArgs: MiddlewareArgs): RequestArgs\n}\n\nconst noopMiddlewareArgsMapper: MiddlewareArgsMapper<unknown, unknown> = {\n requestArgsToMiddlewareArgs: (param) => param,\n middlewareArgsToRequestArgs: (param) => param,\n}\n\n/* Types for Logging */\nexport type LogLevel = 'info' | 'query' | 'warn' | 'error'\nexport type LogDefinition = {\n level: LogLevel\n emit: 'stdout' | 'event'\n}\n\nexport type QueryEvent = {\n timestamp: Date\n query: string\n params: string\n duration: number\n target: string\n}\n\nexport type LogEvent = {\n timestamp: Date\n message: string\n target: string\n}\n/* End Types for Logging */\n\ntype ExtendedEventType = LogLevel | 'beforeExit'\ntype EventCallback<E extends ExtendedEventType> = [E] extends ['beforeExit']\n ? () => Promise<void>\n : [E] extends [LogLevel]\n ? (event: EngineEvent<E>) => void\n : never\n\nconst TX_ID = Symbol.for('prisma.client.transaction.id')\n\nconst BatchTxIdCounter = {\n id: 0,\n nextId() {\n return ++this.id\n },\n}\n\nexport type Client = ReturnType<typeof getPrismaClient> extends new () => infer T ? T : never\n\nexport function getPrismaClient(config: GetPrismaClientConfig) {\n class PrismaClient {\n _originalClient = this\n _runtimeDataModel: RuntimeDataModel\n _requestHandler: RequestHandler\n _connectionPromise?: Promise<any>\n _disconnectionPromise?: Promise<any>\n _engineConfig: EngineConfig\n _accelerateEngineConfig: AccelerateEngineConfig\n _clientVersion: string\n _errorFormat: ErrorFormat\n _tracingHelper: TracingHelper\n _previewFeatures: string[]\n _activeProvider: string\n _globalOmit?: GlobalOmitOptions\n _extensions: MergedExtensionsList\n /**\n * @remarks This is used internally by Policy, do not rename or remove\n */\n _engine: Engine\n /**\n * A fully constructed/applied Client that references the parent\n * PrismaClient. This is used for Client extensions only.\n */\n _appliedParent: PrismaClient\n _createPrismaPromise = createPrismaPromiseFactory()\n\n constructor(optionsArg?: PrismaClientOptions) {\n config = optionsArg?.__internal?.configOverride?.(config) ?? config\n\n checkPlatformCaching(config)\n\n if (optionsArg) {\n validatePrismaClientOptions(optionsArg, config)\n }\n\n // prevents unhandled error events when users do not explicitly listen to them\n const logEmitter = new EventEmitter().on('error', () => {}) as LogEmitter\n\n this._extensions = MergedExtensionsList.empty()\n this._previewFeatures = getPreviewFeatures(config)\n this._clientVersion = config.clientVersion ?? clientVersion\n this._activeProvider = config.activeProvider\n this._globalOmit = optionsArg?.omit\n this._tracingHelper = getTracingHelper()\n const envPaths = config.relativeEnvPaths && {\n rootEnvPath:\n config.relativeEnvPaths.rootEnvPath && path.resolve(config.dirname, config.relativeEnvPaths.rootEnvPath),\n schemaEnvPath:\n config.relativeEnvPaths.schemaEnvPath && path.resolve(config.dirname, config.relativeEnvPaths.schemaEnvPath),\n }\n\n /**\n * Initialise and validate the Driver Adapter, if provided.\n */\n\n let adapter: SqlDriverAdapterFactory | undefined\n if (optionsArg?.adapter) {\n adapter = optionsArg.adapter\n\n // Note:\n // - `getConfig(..).datasources[0].provider` can be `postgresql`, `postgres`, `mysql`, or other known providers\n // - `getConfig(..).datasources[0].activeProvider`, stored in `config.activeProvider`, can be `postgresql`, `mysql`, or other known providers\n // - `adapter.provider` can be `postgres`, `mysql`, or `sqlite`, and changing this requires changes to Rust as well,\n // see https://github.com/prisma/prisma-engines/blob/d116c37d7d27aee74fdd840fc85ab2b45407e5ce/query-engine/driver-adapters/src/types.rs#L22-L23.\n //\n // TODO: Normalize these provider names once and for all in Prisma 6.\n const expectedDriverAdapterProvider =\n config.activeProvider === 'postgresql'\n ? 'postgres'\n : // CockroachDB is only accessible through Postgres driver adapters\n config.activeProvider === 'cockroachdb'\n ? 'postgres'\n : config.activeProvider\n\n if (adapter.provider !== expectedDriverAdapterProvider) {\n throw new PrismaClientInitializationError(\n `The Driver Adapter \\`${adapter.adapterName}\\`, based on \\`${adapter.provider}\\`, is not compatible with the provider \\`${expectedDriverAdapterProvider}\\` specified in the Prisma schema.`,\n this._clientVersion,\n )\n }\n\n if (optionsArg.datasources || optionsArg.datasourceUrl !== undefined) {\n throw new PrismaClientInitializationError(\n `Custom datasource configuration is not compatible with Prisma Driver Adapters. Please define the database connection string directly in the Driver Adapter configuration.`,\n this._clientVersion,\n )\n }\n }\n\n const loadedEnv = // for node we load the env from files, for edge only via env injections\n (NODE_CLIENT && !adapter && envPaths && tryLoadEnvs(envPaths, { conflictCheck: 'none' })) ||\n config.injectableEdgeEnv?.()\n\n try {\n const options: PrismaClientOptions = optionsArg ?? {}\n const internal = options.__internal ?? {}\n\n const useDebug = internal.debug === true\n if (useDebug) {\n Debug.enable('prisma:client')\n }\n\n let cwd = path.resolve(config.dirname, config.relativePath)\n\n // TODO this logic should not be needed anymore #findSync\n if (!fs.existsSync(cwd)) {\n cwd = config.dirname\n }\n\n debug('dirname', config.dirname)\n debug('relativePath', config.relativePath)\n debug('cwd', cwd)\n\n const engineConfig = internal.engine || {}\n\n if (options.errorFormat) {\n this._errorFormat = options.errorFormat\n } else if (process.env.NODE_ENV === 'production') {\n this._errorFormat = 'minimal'\n } else if (process.env.NO_COLOR) {\n this._errorFormat = 'colorless'\n } else {\n this._errorFormat = 'colorless' // default errorFormat\n }\n\n this._runtimeDataModel = config.runtimeDataModel\n\n this._engineConfig = {\n cwd,\n dirname: config.dirname,\n enableDebugLogs: useDebug,\n allowTriggerPanic: engineConfig.allowTriggerPanic,\n prismaPath: engineConfig.binaryPath ?? undefined,\n engineEndpoint: engineConfig.endpoint,\n generator: config.generator,\n showColors: this._errorFormat === 'pretty',\n logLevel: options.log && (getLogLevel(options.log) as any), // TODO\n logQueries:\n options.log &&\n Boolean(\n typeof options.log === 'string'\n ? options.log === 'query'\n : options.log.find((o) => (typeof o === 'string' ? o === 'query' : o.level === 'query')),\n ),\n env: loadedEnv?.parsed ?? {},\n flags: [],\n engineWasm: config.engineWasm,\n compilerWasm: config.compilerWasm,\n clientVersion: config.clientVersion,\n engineVersion: config.engineVersion,\n previewFeatures: this._previewFeatures,\n activeProvider: config.activeProvider,\n inlineSchema: config.inlineSchema,\n overrideDatasources: getDatasourceOverrides(options, config.datasourceNames),\n inlineDatasources: config.inlineDatasources,\n inlineSchemaHash: config.inlineSchemaHash,\n tracingHelper: this._tracingHelper,\n transactionOptions: {\n maxWait: options.transactionOptions?.maxWait ?? 2000,\n timeout: options.transactionOptions?.timeout ?? 5000,\n isolationLevel: options.transactionOptions?.isolationLevel,\n },\n logEmitter,\n isBundled: config.isBundled,\n adapter,\n }\n\n this._accelerateEngineConfig = {\n ...this._engineConfig,\n // share runtime utils to accelerate\n accelerateUtils: {\n resolveDatasourceUrl,\n getBatchRequestPayload,\n prismaGraphQLToJSError,\n PrismaClientUnknownRequestError,\n PrismaClientInitializationError,\n PrismaClientKnownRequestError,\n debug: Debug('prisma:client:accelerateEngine'),\n engineVersion: enginesVersion,\n clientVersion: config.clientVersion,\n },\n }\n\n debug('clientVersion', config.clientVersion)\n\n this._engine = getEngineInstance(config, this._engineConfig)\n this._requestHandler = new RequestHandler(this, logEmitter)\n\n if (options.log) {\n for (const log of options.log) {\n const level = typeof log === 'string' ? log : log.emit === 'stdout' ? log.level : null\n if (level) {\n this.$on(level, (event) => {\n logger.log(`${logger.tags[level] ?? ''}`, (event as LogEvent).message || (event as QueryEvent).query)\n })\n }\n }\n }\n } catch (e: any) {\n e.clientVersion = this._clientVersion\n throw e\n }\n\n // the first client has no parent so it is its own parent client\n // this is used for extensions to reference their parent client\n return (this._appliedParent = applyModelsAndClientExtensions(this))\n // this applied client is also a custom constructor return value\n }\n\n get [Symbol.toStringTag]() {\n return 'PrismaClient'\n }\n\n $on<E extends ExtendedEventType>(eventType: E, callback: EventCallback<E>): PrismaClient {\n if (eventType === 'beforeExit') {\n this._engine.onBeforeExit(callback as EventCallback<'beforeExit'>)\n } else if (eventType) {\n this._engineConfig.logEmitter.on(eventType, callback as EventCallback<LogLevel>)\n }\n return this\n }\n\n $connect() {\n try {\n return this._engine.start()\n } catch (e: any) {\n e.clientVersion = this._clientVersion\n throw e\n }\n }\n\n /**\n * Disconnect from the database\n */\n async $disconnect() {\n try {\n await this._engine.stop()\n } catch (e: any) {\n e.clientVersion = this._clientVersion\n throw e\n } finally {\n // Debug module keeps a list of last 100 logs regardless of environment\n // variables. This can cause a memory leak. It's especially bad in jest\n // environment where keeping an error in this list prevents jest sandbox\n // from being GCed. Clearing logs on disconnect helps to avoid that\n clearLogs()\n }\n }\n\n /**\n * Executes a raw query and always returns a number\n */\n $executeRawInternal(\n transaction: PrismaPromiseTransaction | undefined,\n clientMethod: string,\n args: RawQueryArgs,\n middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>,\n ): Promise<number> {\n const activeProvider = this._activeProvider\n\n return this._request({\n action: 'executeRaw',\n args,\n transaction,\n clientMethod,\n argsMapper: rawQueryArgsMapper({ clientMethod, activeProvider }),\n callsite: getCallSite(this._errorFormat),\n dataPath: [],\n middlewareArgsMapper,\n })\n }\n\n /**\n * Executes a raw query provided through a safe tag function\n * @see https://github.com/prisma/prisma/issues/7142\n *\n * @param query\n * @param values\n * @returns\n */\n $executeRaw(query: TemplateStringsArray | Sql, ...values: any[]) {\n return this._createPrismaPromise((transaction) => {\n if ((query as TemplateStringsArray).raw !== undefined || (query as Sql).sql !== undefined) {\n const [sql, argsMapper] = toSql(query, values)\n checkAlter(\n this._activeProvider,\n sql.text,\n sql.values,\n Array.isArray(query) ? 'prisma.$executeRaw`<SQL>`' : 'prisma.$executeRaw(sql`<SQL>`)',\n )\n return this.$executeRawInternal(transaction, '$executeRaw', sql, argsMapper)\n }\n\n throw new PrismaClientValidationError(\n `\\`$executeRaw\\` is a tag function, please use it like the following:\n\\`\\`\\`\nconst result = await prisma.$executeRaw\\`UPDATE User SET cool = \\${true} WHERE email = \\${'user@email.com'};\\`\n\\`\\`\\`\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\n`,\n { clientVersion: this._clientVersion },\n )\n })\n }\n\n /**\n * Unsafe counterpart of `$executeRaw` that is susceptible to SQL injections\n * @see https://github.com/prisma/prisma/issues/7142\n *\n * @param query\n * @param values\n * @returns\n */\n $executeRawUnsafe(query: string, ...values: RawValue[]) {\n return this._createPrismaPromise((transaction) => {\n checkAlter(this._activeProvider, query, values, 'prisma.$executeRawUnsafe(<SQL>, [...values])')\n return this.$executeRawInternal(transaction, '$executeRawUnsafe', [query, ...values])\n })\n }\n\n /**\n * Executes a raw command only for MongoDB\n *\n * @param command\n * @returns\n */\n $runCommandRaw(command: Record<string, JsInputValue>) {\n if (config.activeProvider !== 'mongodb') {\n throw new PrismaClientValidationError(\n `The ${config.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,\n { clientVersion: this._clientVersion },\n )\n }\n\n return this._createPrismaPromise((transaction) => {\n return this._request({\n args: command,\n clientMethod: '$runCommandRaw',\n dataPath: [],\n action: 'runCommandRaw',\n argsMapper: rawCommandArgsMapper,\n callsite: getCallSite(this._errorFormat),\n transaction: transaction,\n })\n })\n }\n\n /**\n * Executes a raw query and returns selected data\n */\n async $queryRawInternal(\n transaction: PrismaPromiseTransaction | undefined,\n clientMethod: string,\n args: RawQueryArgs,\n middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>,\n ) {\n const activeProvider = this._activeProvider\n\n return this._request({\n action: 'queryRaw',\n args,\n transaction,\n clientMethod,\n argsMapper: rawQueryArgsMapper({ clientMethod, activeProvider }),\n callsite: getCallSite(this._errorFormat),\n dataPath: [],\n middlewareArgsMapper,\n })\n }\n\n /**\n * Executes a raw query provided through a safe tag function\n * @see https://github.com/prisma/prisma/issues/7142\n *\n * @param query\n * @param values\n * @returns\n */\n $queryRaw(query: TemplateStringsArray | Sql, ...values: any[]) {\n return this._createPrismaPromise((transaction) => {\n if ((query as TemplateStringsArray).raw !== undefined || (query as Sql).sql !== undefined) {\n return this.$queryRawInternal(transaction, '$queryRaw', ...toSql(query, values))\n }\n\n throw new PrismaClientValidationError(\n `\\`$queryRaw\\` is a tag function, please use it like the following:\n\\`\\`\\`\nconst result = await prisma.$queryRaw\\`SELECT * FROM User WHERE id = \\${1} OR email = \\${'user@email.com'};\\`\n\\`\\`\\`\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\n`,\n { clientVersion: this._clientVersion },\n )\n })\n }\n\n /**\n * Counterpart to $queryRaw, that returns strongly typed results\n * @param typedSql\n */\n $queryRawTyped(typedSql: UnknownTypedSql) {\n return this._createPrismaPromise((transaction) => {\n if (!this._hasPreviewFlag('typedSql')) {\n throw new PrismaClientValidationError(\n '`typedSql` preview feature must be enabled in order to access $queryRawTyped API',\n { clientVersion: this._clientVersion },\n )\n }\n return this.$queryRawInternal(transaction, '$queryRawTyped', typedSql)\n })\n }\n\n /**\n * Unsafe counterpart of `$queryRaw` that is susceptible to SQL injections\n * @see https://github.com/prisma/prisma/issues/7142\n *\n * @param query\n * @param values\n * @returns\n */\n $queryRawUnsafe(query: string, ...values: RawValue[]) {\n return this._createPrismaPromise((transaction) => {\n return this.$queryRawInternal(transaction, '$queryRawUnsafe', [query, ...values])\n })\n }\n\n /**\n * Execute a batch of requests in a transaction\n * @param requests\n * @param options\n */\n _transactionWithArray({\n promises,\n options,\n }: {\n promises: Array<PrismaPromise<any>>\n options?: BatchTransactionOptions\n }): Promise<any> {\n const id = BatchTxIdCounter.nextId()\n const lock = getLockCountPromise(promises.length)\n\n const requests = promises.map((request, index) => {\n if (request?.[Symbol.toStringTag] !== 'PrismaPromise') {\n throw new Error(\n `All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.`,\n )\n }\n\n const isolationLevel = options?.isolationLevel ?? this._engineConfig.transactionOptions.isolationLevel\n const transaction = { kind: 'batch', id, index, isolationLevel, lock } as const\n return request.requestTransaction?.(transaction) ?? request\n })\n\n return waitForBatch(requests)\n }\n\n /**\n * Perform a long-running transaction\n * @param callback\n * @param options\n * @returns\n */\n async _transactionWithCallback({\n callback,\n options,\n }: {\n callback: (client: Client) => Promise<unknown>\n options?: Options\n }) {\n const headers = { traceparent: this._tracingHelper.getTraceParent() }\n\n const optionsWithDefaults: Options = {\n maxWait: options?.maxWait ?? this._engineConfig.transactionOptions.maxWait,\n timeout: options?.timeout ?? this._engineConfig.transactionOptions.timeout,\n isolationLevel: options?.isolationLevel ?? this._engineConfig.transactionOptions.isolationLevel,\n }\n const info = await this._engine.transaction('start', headers, optionsWithDefaults)\n\n let result: unknown\n try {\n // execute user logic with a proxied the client\n const transaction = { kind: 'itx', ...info } as const\n\n result = await callback(this._createItxClient(transaction))\n\n // it went well, then we commit the transaction\n await this._engine.transaction('commit', headers, info)\n } catch (e: any) {\n // it went bad, then we rollback the transaction\n await this._engine.transaction('rollback', headers, info).catch(() => {})\n\n throw e // silent rollback, throw original error\n }\n\n return result\n }\n\n _createItxClient(transaction: PrismaPromiseInteractiveTransaction): Client {\n return createCompositeProxy(\n applyModelsAndClientExtensions(\n createCompositeProxy(unApplyModelsAndClientExtensions(this), [\n addProperty('_appliedParent', () => this._appliedParent._createItxClient(transaction)),\n addProperty('_createPrismaPromise', () => createPrismaPromiseFactory(transaction)),\n addProperty(TX_ID, () => transaction.id),\n ]),\n ),\n [removeProperties(itxClientDenyList)],\n )\n }\n\n /**\n * Execute queries within a transaction\n * @param input a callback or a query list\n * @param options to set timeouts (callback)\n * @returns\n */\n $transaction(input: any, options?: any) {\n let callback: () => Promise<any>\n\n // iTx - Interactive transaction\n if (typeof input === 'function') {\n if (this._engineConfig.adapter?.adapterName === '@prisma/adapter-d1') {\n callback = () => {\n throw new Error(\n 'Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.',\n )\n }\n } else {\n callback = () => this._transactionWithCallback({ callback: input, options })\n }\n } else {\n // Batch transaction\n callback = () => this._transactionWithArray({ promises: input, options })\n }\n\n const spanOptions = {\n name: 'transaction',\n attributes: { method: '$transaction' },\n }\n\n return this._tracingHelper.runInChildSpan(spanOptions, callback)\n }\n\n /**\n * Runs the middlewares over params before executing a request\n * @param internalParams\n * @returns\n */\n _request(internalParams: InternalRequestParams): Promise<any> {\n // this is the otel context that is active at the callsite\n internalParams.otelParentCtx = this._tracingHelper.getActiveContext()\n const middlewareArgsMapper = internalParams.middlewareArgsMapper ?? noopMiddlewareArgsMapper\n\n // make sure that we don't leak extra properties to users\n const params: QueryMiddlewareParams = {\n args: middlewareArgsMapper.requestArgsToMiddlewareArgs(internalParams.args),\n dataPath: internalParams.dataPath,\n runInTransaction: Boolean(internalParams.transaction),\n action: internalParams.action,\n model: internalParams.model,\n }\n\n // span options for opentelemetry instrumentation\n const spanOptions = {\n operation: {\n name: 'operation',\n attributes: {\n method: params.action,\n model: params.model,\n name: params.model ? `${params.model}.${params.action}` : params.action,\n },\n } as ExtendedSpanOptions,\n }\n\n // prepare recursive fn that will pipe params through middlewares\n const consumer = async (changedMiddlewareParams: QueryMiddlewareParams) => {\n // we proceed with request execution\n // before we send the execution request, we use the changed params\n const { runInTransaction, args, ...changedRequestParams } = changedMiddlewareParams\n const requestParams = {\n ...internalParams,\n ...changedRequestParams,\n }\n\n if (args) {\n requestParams.args = middlewareArgsMapper.middlewareArgsToRequestArgs(args)\n }\n\n // if middleware switched off `runInTransaction`, unset `transaction`\n // property on request as well so it will be executed outside of the tx\n if (internalParams.transaction !== undefined && runInTransaction === false) {\n delete requestParams.transaction // client extensions check for this\n }\n\n const result = await applyQueryExtensions(this, requestParams) // also executes the query\n if (!requestParams.model) {\n return result\n }\n return applyAllResultExtensions({\n result,\n modelName: requestParams.model,\n args: requestParams.args,\n extensions: this._extensions,\n runtimeDataModel: this._runtimeDataModel,\n globalOmit: this._globalOmit,\n })\n }\n\n return this._tracingHelper.runInChildSpan(spanOptions.operation, () => {\n if (NODE_CLIENT) {\n // https://github.com/prisma/prisma/issues/3148 not for edge client\n const asyncRes = new AsyncResource('prisma-client-request')\n return asyncRes.runInAsyncScope(() => consumer(params))\n }\n\n return consumer(params)\n })\n }\n\n async _executeRequest({\n args,\n clientMethod,\n dataPath,\n callsite,\n action,\n model,\n argsMapper,\n transaction,\n unpacker,\n otelParentCtx,\n customDataProxyFetch,\n }: InternalRequestParams) {\n try {\n // execute argument transformation before execution\n args = argsMapper ? argsMapper(args) : args\n\n const spanOptions: ExtendedSpanOptions = {\n name: 'serialize',\n }\n\n const message = this._tracingHelper.runInChildSpan(spanOptions, () =>\n serializeJsonQuery({\n modelName: model,\n runtimeDataModel: this._runtimeDataModel,\n action,\n args,\n clientMethod,\n callsite,\n extensions: this._extensions,\n errorFormat: this._errorFormat,\n clientVersion: this._clientVersion,\n previewFeatures: this._previewFeatures,\n globalOmit: this._globalOmit,\n }),\n )\n\n // as prettyPrintArguments takes a bit of compute\n // we only want to do it, if debug is enabled for 'prisma-client'\n if (Debug.enabled('prisma:client')) {\n debug(`Prisma Client call:`)\n debug(`prisma.${clientMethod}(${prettyPrintArguments(args)})`)\n debug(`Generated request:`)\n debug(JSON.stringify(message, null, 2) + '\\n')\n }\n\n if (transaction?.kind === 'batch') {\n /** @see {@link getLockCountPromise} */\n await transaction.lock\n }\n\n return this._requestHandler.request({\n protocolQuery: message,\n modelName: model,\n action,\n clientMethod,\n dataPath,\n callsite,\n args,\n extensions: this._extensions,\n transaction,\n unpacker,\n otelParentCtx,\n otelChildCtx: this._tracingHelper.getActiveContext(),\n globalOmit: this._globalOmit,\n customDataProxyFetch,\n })\n } catch (e) {\n e.clientVersion = this._clientVersion\n throw e\n }\n }\n\n $metrics = new MetricsClient(this)\n\n /**\n * Shortcut for checking a preview flag\n * @param feature preview flag\n * @returns\n */\n _hasPreviewFlag(feature: string) {\n return !!this._engineConfig.previewFeatures?.includes(feature)\n }\n\n $applyPendingMigrations(): Promise<void> {\n return this._engine.applyPendingMigrations()\n }\n\n $extends = $extends\n }\n\n return PrismaClient\n}\n\nfunction toSql(query: TemplateStringsArray | Sql, values: unknown[]): [Sql, MiddlewareArgsMapper<unknown, unknown>] {\n if (isTemplateStringArray(query)) {\n return [new Sql(query, values), templateStringMiddlewareArgsMapper]\n }\n\n return [query, sqlMiddlewareArgsMapper]\n}\n\nfunction isTemplateStringArray(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Array.isArray(value['raw'])\n}\n", "/**\n * Values supported by SQL engine.\n */\nexport type Value = unknown;\n\n/**\n * Supported value or SQL instance.\n */\nexport type RawValue = Value | Sql;\n\n/**\n * A SQL instance can be nested within each other to build SQL strings.\n */\nexport class Sql {\n readonly values: Value[];\n readonly strings: string[];\n\n constructor(rawStrings: readonly string[], rawValues: readonly RawValue[]) {\n if (rawStrings.length - 1 !== rawValues.length) {\n if (rawStrings.length === 0) {\n throw new TypeError(\"Expected at least 1 string\");\n }\n\n throw new TypeError(\n `Expected ${rawStrings.length} strings to have ${\n rawStrings.length - 1\n } values`,\n );\n }\n\n const valuesLength = rawValues.reduce<number>(\n (len, value) => len + (value instanceof Sql ? value.values.length : 1),\n 0,\n );\n\n this.values = new Array(valuesLength);\n this.strings = new Array(valuesLength + 1);\n\n this.strings[0] = rawStrings[0];\n\n // Iterate over raw values, strings, and children. The value is always\n // positioned between two strings, e.g. `index + 1`.\n let i = 0,\n pos = 0;\n while (i < rawValues.length) {\n const child = rawValues[i++];\n const rawString = rawStrings[i];\n\n // Check for nested `sql` queries.\n if (child instanceof Sql) {\n // Append child prefix text to current string.\n this.strings[pos] += child.strings[0];\n\n let childIndex = 0;\n while (childIndex < child.values.length) {\n this.values[pos++] = child.values[childIndex++];\n this.strings[pos] = child.strings[childIndex];\n }\n\n // Append raw string to current string.\n this.strings[pos] += rawString;\n } else {\n this.values[pos++] = child;\n this.strings[pos] = rawString;\n }\n }\n }\n\n get sql() {\n const len = this.strings.length;\n let i = 1;\n let value = this.strings[0];\n while (i < len) value += `?${this.strings[i++]}`;\n return value;\n }\n\n get statement() {\n const len = this.strings.length;\n let i = 1;\n let value = this.strings[0];\n while (i < len) value += `:${i}${this.strings[i++]}`;\n return value;\n }\n\n get text() {\n const len = this.strings.length;\n let i = 1;\n let value = this.strings[0];\n while (i < len) value += `$${i}${this.strings[i++]}`;\n return value;\n }\n\n inspect() {\n return {\n sql: this.sql,\n statement: this.statement,\n text: this.text,\n values: this.values,\n };\n }\n}\n\n/**\n * Create a SQL query for a list of values.\n */\nexport function join(\n values: readonly RawValue[],\n separator = \",\",\n prefix = \"\",\n suffix = \"\",\n) {\n if (values.length === 0) {\n throw new TypeError(\n \"Expected `join([])` to be called with an array of multiple elements, but got an empty array\",\n );\n }\n\n return new Sql(\n [prefix, ...Array(values.length - 1).fill(separator), suffix],\n values,\n );\n}\n\n/**\n * Create a SQL query for a list of structured values.\n */\nexport function bulk(\n data: ReadonlyArray<ReadonlyArray<RawValue>>,\n separator = \",\",\n prefix = \"\",\n suffix = \"\",\n) {\n const length = data.length && data[0].length;\n\n if (length === 0) {\n throw new TypeError(\n \"Expected `bulk([][])` to be called with a nested array of multiple elements, but got an empty array\",\n );\n }\n\n const values = data.map((item, index) => {\n if (item.length !== length) {\n throw new TypeError(\n `Expected \\`bulk([${index}][])\\` to have a length of ${length}, but got ${item.length}`,\n );\n }\n\n return new Sql([\"(\", ...Array(item.length - 1).fill(separator), \")\"], item);\n });\n\n return new Sql(\n [prefix, ...Array(values.length - 1).fill(separator), suffix],\n values,\n );\n}\n\n/**\n * Create raw SQL statement.\n */\nexport function raw(value: string) {\n return new Sql([value], []);\n}\n\n/**\n * Placeholder value for \"no text\".\n */\nexport const empty = raw(\"\");\n\n/**\n * Create a SQL object from a template string.\n */\nexport default function sql(\n strings: readonly string[],\n ...values: readonly RawValue[]\n) {\n return new Sql(strings, values);\n}\n", "import type { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer that forwards all reads\n * to provided object\n *\n * @param object\n * @returns\n */\nexport function addObjectProperties(object: object): CompositeProxyLayer {\n return {\n getKeys() {\n return Object.keys(object)\n },\n\n getPropertyValue(key) {\n return object[key]\n },\n }\n}\n", "import { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer, that adds a single property to the target\n * @param key the name of the property\n * @param factory the function that returns the value of the property\n * @returns\n */\nexport function addProperty(key: string | symbol, factory: () => unknown): CompositeProxyLayer {\n return {\n getKeys() {\n return [key]\n },\n\n getPropertyValue() {\n return factory()\n },\n }\n}\n", "import { Cache } from '@prisma/client-common'\n\nimport { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer that adds caching to another\n * layer.\n *\n * @param baseLayer\n * @returns\n */\nexport function cacheProperties<KeyType extends string | symbol>(\n baseLayer: CompositeProxyLayer<KeyType>,\n): CompositeProxyLayer<KeyType> {\n const cache = new Cache<KeyType, unknown>()\n return {\n getKeys() {\n return baseLayer.getKeys()\n },\n\n getPropertyValue(key) {\n return cache.getOrCreate(key, () => baseLayer.getPropertyValue(key))\n },\n\n getPropertyDescriptor(key) {\n return baseLayer.getPropertyDescriptor?.(key)\n },\n }\n}\n", "export const defaultPropertyDescriptor = {\n enumerable: true,\n configurable: true,\n writable: true,\n}\n\nexport function defaultProxyHandlers<T extends object>(ownKeys: (string | symbol)[]) {\n const _ownKeys = new Set(ownKeys)\n return {\n getPrototypeOf: () => Object.prototype,\n getOwnPropertyDescriptor: () => defaultPropertyDescriptor,\n has: (target: T, prop: string | symbol) => _ownKeys.has(prop),\n set: (target: T, prop: string | symbol, value: any) => {\n return _ownKeys.add(prop) && Reflect.set(target, prop, value)\n },\n ownKeys: () => [..._ownKeys],\n } as const\n}\n", "import { defaultPropertyDescriptor } from '../model/utils/defaultProxyHandlers'\n\nexport interface CompositeProxyLayer<KeyType extends string | symbol = string | symbol> {\n /**\n * Returns a list of keys, defined by a layer\n */\n getKeys(): ReadonlyArray<KeyType>\n\n /**\n * Returns a value for a property for a given key (one of the keys, returned\n * from `getKeys`)\n * @param key\n */\n getPropertyValue(key: KeyType): unknown\n\n /**\n * Gets a descriptor for given property. If not implemented or undefined is returned, { enumerable: true, writeable: true, configurable: true} is defaulted\n * is used\n * @param key\n */\n getPropertyDescriptor?(key: KeyType): PropertyDescriptor | undefined\n\n /**\n * Allows to override results for hasOwnProperty/in operator. If not implemented, returns true\n * @param key\n */\n has?(key: KeyType): boolean\n}\n\nconst customInspect = Symbol.for('nodejs.util.inspect.custom')\n\n/**\n * Creates a proxy from a set of layers.\n * Each layer is a building for a proxy (potentially, reusable) that\n * can add or override property on top of the target.\n * When multiple layers define the same property, last one wins\n *\n * @param target\n * @param layers\n * @returns\n */\nexport function createCompositeProxy<T extends object>(target: T, layers: CompositeProxyLayer[]): T {\n const keysToLayerMap = mapKeysToLayers(layers)\n const overwrittenKeys = new Set<string | symbol>()\n\n const proxy = new Proxy(target, {\n get(target, prop) {\n // explicit overwrites of a property have highest priority\n if (overwrittenKeys.has(prop)) {\n return target[prop]\n }\n\n // next, we see if property is defined in one of the layers\n const layer = keysToLayerMap.get(prop)\n if (layer) {\n return layer.getPropertyValue(prop)\n }\n\n // finally, we read a prop from target\n return target[prop]\n },\n\n has(target, prop) {\n if (overwrittenKeys.has(prop)) {\n return true\n }\n const layer = keysToLayerMap.get(prop)\n if (layer) {\n return layer.has?.(prop) ?? true\n }\n\n return Reflect.has(target, prop)\n },\n\n ownKeys(target) {\n const targetKeys = getExistingKeys(Reflect.ownKeys(target), keysToLayerMap)\n const layerKeys = getExistingKeys(Array.from(keysToLayerMap.keys()), keysToLayerMap)\n return [...new Set([...targetKeys, ...layerKeys, ...overwrittenKeys])]\n },\n\n set(target, prop, value) {\n const layer = keysToLayerMap.get(prop)\n if (layer?.getPropertyDescriptor?.(prop)?.writable === false) {\n return false\n }\n overwrittenKeys.add(prop)\n return Reflect.set(target, prop, value)\n },\n\n getOwnPropertyDescriptor(target, prop) {\n const original = Reflect.getOwnPropertyDescriptor(target, prop)\n if (original && !original.configurable) {\n // non-configurable properties can not change descriptors\n return original\n }\n\n const layer = keysToLayerMap.get(prop)\n if (layer) {\n if (layer.getPropertyDescriptor) {\n return {\n ...defaultPropertyDescriptor,\n ...layer?.getPropertyDescriptor(prop),\n }\n }\n return defaultPropertyDescriptor\n }\n\n return original\n },\n\n defineProperty(target, property, attributes) {\n overwrittenKeys.add(property)\n return Reflect.defineProperty(target, property, attributes)\n },\n\n getPrototypeOf: () => Object.prototype,\n })\n\n proxy[customInspect] = function () {\n // Default node.js console.log and util.inspect deliberately avoid triggering any proxy traps and log\n // original target. This is not we want for our usecases: we want console.log to output the result as if\n // the properties actually existed on the target. Using spread operator forces us to produce correct object\n const toLog = { ...this }\n delete toLog[customInspect]\n return toLog\n }\n return proxy\n}\n\nfunction mapKeysToLayers(layers: CompositeProxyLayer[]) {\n const keysToLayerMap = new Map<string | symbol, CompositeProxyLayer>()\n for (const layer of layers) {\n const keys = layer.getKeys()\n for (const key of keys) {\n keysToLayerMap.set(key, layer)\n }\n }\n return keysToLayerMap\n}\n\nfunction getExistingKeys(keys: Array<string | symbol>, keysToLayerMap: Map<string | symbol, CompositeProxyLayer>) {\n return keys.filter((key) => {\n const layer = keysToLayerMap.get(key)\n return layer?.has?.(key) ?? true\n })\n}\n", "import { CompositeProxyLayer } from './createCompositeProxy'\n\nexport function removeProperties(keys: ReadonlyArray<string | symbol>): CompositeProxyLayer {\n return {\n getKeys() {\n return keys\n },\n\n has() {\n return false\n },\n\n getPropertyValue() {\n return undefined\n },\n }\n}\n", "import { TransactionOptions } from '../Engine'\nimport { JsonQuery } from '../types/JsonProtocol'\nimport { QueryEngineBatchRequest } from '../types/QueryEngine'\n\nexport function getBatchRequestPayload(\n batch: JsonQuery[],\n transaction?: TransactionOptions<unknown>,\n): QueryEngineBatchRequest {\n return {\n batch,\n transaction: transaction?.kind === 'batch' ? { isolationLevel: transaction.options.isolationLevel } : undefined,\n }\n}\n", "import { Writer } from '@prisma/ts-builders'\n\nimport { JsArgs } from '../types/exported/JsApi'\nimport { buildArgumentsRenderingTree } from './ArgumentsRenderingTree'\nimport { inactiveColors } from './base'\n\nexport function prettyPrintArguments(args?: JsArgs): string {\n if (args === undefined) {\n return ''\n }\n const tree = buildArgumentsRenderingTree(args)\n const writer = new Writer(0, { colors: inactiveColors })\n return writer.write(tree).toString()\n}\n", "import { RequestError } from '../../engines/common/types/RequestError'\nimport { PrismaClientKnownRequestError } from '../PrismaClientKnownRequestError'\nimport { PrismaClientUnknownRequestError } from '../PrismaClientUnknownRequestError'\n\nconst TOO_MANY_CONNECTIONS_ERROR = 'P2037'\n\nexport function prismaGraphQLToJSError(\n { error, user_facing_error }: RequestError,\n clientVersion: string,\n activeProvider: string,\n): PrismaClientKnownRequestError | PrismaClientUnknownRequestError {\n if (user_facing_error.error_code) {\n return new PrismaClientKnownRequestError(getKnownErrorMessage(user_facing_error, activeProvider), {\n code: user_facing_error.error_code,\n clientVersion,\n meta: user_facing_error.meta,\n batchRequestIdx: user_facing_error.batch_request_idx,\n })\n }\n\n return new PrismaClientUnknownRequestError(error, {\n clientVersion,\n batchRequestIdx: user_facing_error.batch_request_idx,\n })\n}\n\nfunction getKnownErrorMessage(userFacingError: RequestError['user_facing_error'], activeProvider: string) {\n let message = userFacingError.message\n if (\n (activeProvider === 'postgresql' || activeProvider === 'postgres' || activeProvider === 'mysql') &&\n userFacingError.error_code === TOO_MANY_CONNECTIONS_ERROR\n ) {\n message +=\n '\\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate'\n }\n\n return message\n}\n", "var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n var lines = stackString.split('\\n');\n return lines.reduce(function (stack, line) {\n var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n if (parseResult) {\n stack.push(parseResult);\n }\n\n return stack;\n }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n var parts = chromeRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n var submatch = chromeEvalRe.exec(parts[2]);\n\n if (isEval && submatch != null) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n\n parts[3] = submatch[2]; // line\n\n parts[4] = submatch[3]; // column\n }\n\n return {\n file: !isNative ? parts[2] : null,\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: isNative ? [parts[2]] : [],\n lineNumber: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n var parts = winjsRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[2],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n var parts = geckoRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n var submatch = geckoEvalRe.exec(parts[3]);\n\n if (isEval && submatch != null) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n }\n\n return {\n file: parts[3],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: parts[2] ? parts[2].split(',') : [],\n lineNumber: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n var parts = javaScriptCoreRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[3],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[4],\n column: parts[5] ? +parts[5] : null\n };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n var parts = nodeRe.exec(line);\n\n if (!parts) {\n return null;\n }\n\n return {\n file: parts[2],\n methodName: parts[1] || UNKNOWN_FUNCTION,\n arguments: [],\n lineNumber: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n}\n\nexport { parse };\n", "import { pathToPosix } from '@prisma/internals'\nimport * as stackTraceParser from 'stacktrace-parser'\n\nimport { ErrorFormat } from '../getPrismaClient'\n\ndeclare global {\n /**\n * a global variable that is injected by us via jest to make our snapshots\n * work in clients that cannot read from disk (e.g. wasm or edge clients)\n */\n let $EnabledCallSite: typeof EnabledCallSite | undefined\n}\n\nexport type LocationInFile = {\n fileName: string\n lineNumber: number | null\n columnNumber: number | null\n}\n\nexport interface CallSite {\n getLocation(): LocationInFile | null\n}\n\nclass DisabledCallSite implements CallSite {\n getLocation(): LocationInFile | null {\n return null\n }\n}\n\nexport class EnabledCallSite implements CallSite {\n private _error: Error\n constructor() {\n this._error = new Error()\n }\n getLocation(): LocationInFile | null {\n const stack = this._error.stack\n if (!stack) {\n return null\n }\n const stackFrames = stackTraceParser.parse(stack)\n // TODO: more resilient logic to check that it's not relative to cwd\n const frame = stackFrames.find((t) => {\n // Here we are trying to find the location in the user's code which caused the error\n if (!t.file) {\n return false\n }\n\n // convert windows path to posix path\n const posixFile = pathToPosix(t.file)\n return (\n posixFile !== '<anonymous>' && // Ignore as we can not read an <anonymous> file\n !posixFile.includes('@prisma') && // Internal, unbundled code\n !posixFile.includes('/packages/client/src/runtime/') && // Runtime sources when source maps are used\n !posixFile.endsWith('/runtime/binary.js') && // Bundled runtimes\n !posixFile.endsWith('/runtime/library.js') &&\n !posixFile.endsWith('/runtime/edge.js') &&\n !posixFile.endsWith('/runtime/edge-esm.js') &&\n !posixFile.startsWith('internal/') && // We don't want internal nodejs files\n !t.methodName.includes('new ') && // \"new CallSite\" call and maybe other constructors\n !t.methodName.includes('getCallSite') && // getCallSite function from this module\n !t.methodName.includes('Proxy.') && // Model proxies\n t.methodName.split('.').length < 4\n )\n })\n\n if (!frame || !frame.file) {\n return null\n }\n\n return {\n fileName: frame.file,\n lineNumber: frame.lineNumber,\n columnNumber: frame.column,\n }\n }\n}\n\nexport function getCallSite(errorFormat: ErrorFormat): CallSite {\n if (\n errorFormat === 'minimal' ||\n TARGET_BUILD_TYPE === 'wasm-engine-edge' ||\n TARGET_BUILD_TYPE === 'wasm-compiler-edge' ||\n TARGET_BUILD_TYPE === 'edge'\n ) {\n if (typeof $EnabledCallSite === 'function' && errorFormat !== 'minimal') {\n return new $EnabledCallSite()\n } else {\n return new DisabledCallSite()\n }\n } else {\n return new EnabledCallSite()\n }\n}\n", "export const aggregateMap = {\n _avg: true,\n _count: true,\n _sum: true,\n _min: true,\n _max: true,\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { aggregateMap } from './utils/aggregateMap'\n\n/**\n * Transforms the `userArgs` for the `.aggregate` shorthand. It is an API sugar\n * for not having to do things like: `{select: {_avg: {select: {age: true}}}}`.\n * The goal here is to desugar it into something that is understood by the QE.\n * @param args to transform\n * @returns\n */\nexport function desugarUserArgs(args: UserArgs = {}) {\n const _args = desugarCountInUserArgs(args)\n const userArgsEntries = Object.entries(_args)\n\n return userArgsEntries.reduce(\n (aggregateArgs, [key, value]) => {\n if (aggregateMap[key] !== undefined) {\n // if it's an aggregate, we re-wrap into select\n aggregateArgs['select']![key] = { select: value }\n } else {\n aggregateArgs[key] = value // or leave it alone\n }\n\n return aggregateArgs\n },\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n { select: {} } as UserArgs & { select: UserArgs },\n )\n}\n\n/**\n * Desugar `userArgs` when it contains `{_count: true}`.\n * @param args the user input\n * @returns\n */\nfunction desugarCountInUserArgs(args: UserArgs = {}) {\n if (typeof args['_count'] === 'boolean') {\n return { ...args, _count: { _all: args['_count'] } }\n }\n\n return args\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n return (data: object) => {\n if (typeof args['_count'] === 'boolean') {\n data['_count'] = data['_count']['_all']\n }\n\n return data\n }\n}\n\n/**\n * Executes the `.aggregate` action on a model.\n * @see {desugarUserArgs}\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function aggregate(args: UserArgs, modelAction: ModelAction) {\n const aggregateUnpacker = createUnpacker(args)\n\n return modelAction({\n action: 'aggregate',\n unpacker: aggregateUnpacker,\n argsMapper: desugarUserArgs,\n })(args)\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { createUnpacker as createUnpackerAggregate, desugarUserArgs as desugarUserArgsAggregate } from './aggregate'\n\n/**\n * Transforms the `userArgs` for the `.count` shorthand. It is an API sugar. It\n * reuses the logic from the `.aggregate` shorthand to add additional handling.\n * The goal here is to desugar it into something that is understood by the QE.\n * @param args to transform\n * @returns\n */\nfunction desugarUserArgs(args: UserArgs = {}) {\n const { select, ..._args } = args // exclude select\n\n if (typeof select === 'object') {\n return desugarUserArgsAggregate({ ..._args, _count: select })\n } else {\n return desugarUserArgsAggregate({ ..._args, _count: { _all: true } })\n }\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n if (typeof args['select'] === 'object') {\n return (data: object) => createUnpackerAggregate(args)(data)['_count']\n } else {\n return (data: object) => createUnpackerAggregate(args)(data)['_count']['_all']\n }\n}\n\n/**\n * Executes the `.count` action on a model via {@link aggregate}.\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function count(args: UserArgs, modelAction: ModelAction) {\n return modelAction({\n action: 'count',\n unpacker: createUnpacker(args),\n argsMapper: desugarUserArgs,\n })(args)\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { desugarUserArgs as desugarUserArgsAggregate } from './aggregate'\n\n/**\n * Transforms the `userArgs` for the `.groupBy` shorthand. It is an API sugar.\n * It reuses the logic from the `.aggregate` shorthand and adds additional\n * handling for the `by` clause. The goal here is to desugar it into something\n * that is understood by the QE.\n * @param args to transform\n * @returns\n */\nfunction desugarUserArgs(args: UserArgs = {}) {\n const _args = desugarUserArgsAggregate(args)\n\n // we desugar the array into { [key]: boolean }\n if (Array.isArray(_args['by'])) {\n for (const key of _args['by']) {\n if (typeof key === 'string') {\n _args['select'][key] = true\n }\n }\n } else if (typeof _args['by'] === 'string') {\n _args['select'][_args['by']] = true\n }\n\n return _args\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n return (data: object[]) => {\n if (typeof args?.['_count'] === 'boolean') {\n data.forEach((row) => {\n row['_count'] = row['_count']['_all']\n })\n }\n\n return data\n }\n}\n\n/**\n * Executes the `.groupBy` action on a model by reusing {@link aggregate}.\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function groupBy(args: UserArgs, modelAction: ModelAction) {\n return modelAction({\n action: 'groupBy',\n unpacker: createUnpacker(args),\n argsMapper: desugarUserArgs,\n })(args)\n}\n", "import type { Client } from '../../getPrismaClient'\nimport type { UserArgs } from '../request/UserArgs'\nimport { Action } from '../types/exported/JsApi'\nimport { aggregate } from './aggregates/aggregate'\nimport { count } from './aggregates/count'\nimport { groupBy } from './aggregates/groupBy'\nimport type { ModelAction } from './applyModel'\n\n/**\n * Dynamically returns the appropriate aggregate action for a given `action`.\n * With this, we are able to provide an aggregate api that has a better DX. In\n * short, we manipulate the user input which is designed to have DX to transform\n * it into something that the engines understand. Similarly, we take the engine\n * output for that input and produce something that is easier to work with.\n * @param action that tells which aggregate action to execute\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function applyAggregates(client: Client, action: Action, modelAction: ModelAction) {\n // we effectively take over the aggregate api to perform data changes\n if (action === 'aggregate') return (userArgs?: UserArgs) => aggregate(userArgs, modelAction)\n if (action === 'count') return (userArgs?: UserArgs) => count(userArgs, modelAction)\n if (action === 'groupBy') return (userArgs?: UserArgs) => groupBy(userArgs, modelAction)\n\n return undefined\n}\n", "import { keyBy, RuntimeModel } from '@prisma/client-common'\n\nimport { FieldRefImpl } from './FieldRef'\nimport { defaultProxyHandlers } from './utils/defaultProxyHandlers'\n\nexport type FieldProxy = {\n readonly [key: string]: FieldRefImpl<string, string>\n}\n\nexport function applyFieldsProxy(modelName: string, model: RuntimeModel): FieldProxy {\n const scalarFieldsList = model.fields.filter((field) => !field.relationName)\n const scalarFields = keyBy(scalarFieldsList, 'name')\n return new Proxy(\n {},\n {\n get(target, prop) {\n if (prop in target || typeof prop === 'symbol') {\n return target[prop]\n }\n const dmmfField = scalarFields[prop]\n if (dmmfField) {\n return new FieldRefImpl(modelName, prop, dmmfField.type, dmmfField.isList, dmmfField.kind === 'enum')\n }\n\n return undefined\n },\n ...defaultProxyHandlers(Object.keys(scalarFields)),\n },\n )\n}\n", "// Taken from https://gist.github.com/LukeChannings/15c92cef5a016a8b21a0\n\n// ensure the keys being passed is an array of key paths\n// example: 'a.b' becomes ['a', 'b'] unless it was already ['a', 'b']\nconst keys = (ks: string | string[]) => (Array.isArray(ks) ? ks : ks.split('.'))\n\n// traverse the set of keys left to right,\n// returning the current value in each iteration.\n// if at any point the value for the current key does not exist,\n// return the default value\nexport const deepGet = (o, kp: string[]) => keys(kp).reduce((o, k) => o && o[k], o)\n\n// traverse the set of keys right to left,\n// returning a new object containing both properties from the object\n// we were originally passed and our new property.\n//\n// Example:\n// If o = { a: { b: { c: 1 } } }\n//\n// deepSet(o, ['a', 'b', 'c'], 2) will progress thus:\n// 1. c = Object.assign({}, {c: 1}, { c: 2 })\n// 2. b = Object.assign({}, { b: { c: 1 } }, { b: c })\n// 3. returned = Object.assign({}, { a: { b: { c: 1 } } }, { a: b })\nexport const deepSet = (o: any, kp: string | string[], v: any) =>\n keys(kp).reduceRight((v, k, i, ks) => Object.assign({}, deepGet(o, ks.slice(0, i)), { [k]: v }), v)\n", "import type * as DMMF from '@prisma/dmmf'\n\nimport type { Client } from '../../getPrismaClient'\nimport { getCallSite } from '../../utils/CallSite'\nimport { deepSet } from '../../utils/deep-set'\nimport type { UserArgs } from '../request/UserArgs'\nimport type { ModelAction } from './applyModel'\nimport { defaultProxyHandlers } from './utils/defaultProxyHandlers'\n\n/**\n * The fluent API makes that nested relations can be retrieved at once. It's a\n * helper for writing `select` statements on relations with a chaining api.\n * Because of this, we automatically add `select` statements to the query, that\n * also means that we need to provide a `dataPath` for unpacking nested values.\n * @see {getNextUserArgs}\n * @param dmmfModelName\n * @param prevDataPath\n * @returns\n */\nfunction getNextDataPath(fluentPropName?: string, prevDataPath?: string[]) {\n if (fluentPropName === undefined || prevDataPath === undefined) return []\n\n return [...prevDataPath, 'select', fluentPropName]\n}\n\n/**\n * @see {getNextDataPath} for introduction. The goal of the fluent API is to\n * make it easy to retrieve nested relations. For this, we construct the query\n * args that are necessary to retrieve the nested relations. It consists of\n * nesting `select` statements each time that we access a relation.\n * @param callArgs usually passed on the last call of the chaining api\n * @param prevArgs when multiple chaining occurs, they are the previous\n * @param nextDataPath path where to set `callArgs` in `prevArgs`\n * @example\n * ```ts\n * prisma.user.findUnique().link().user()\n *\n * // will end up with an args like this:\n * // args {\n * // \"where\": {\n * // \"email\": \"1639498523518@gmail.com\"\n * // },\n * // \"select\": {\n * // \"link\": {\n * // \"select\": {\n * // \"user\": true\n * // }\n * // }\n * // }\n * // }\n * ```\n */\nfunction getNextUserArgs(callArgs: UserArgs, prevArgs: UserArgs, nextDataPath: string[]): UserArgs {\n if (prevArgs === undefined) return callArgs ?? {}\n\n return deepSet(prevArgs, nextDataPath, callArgs || true)\n}\n\n/**\n * Dynamically creates a fluent API from a `modelAction` and a `dmmfModelName`.\n * We use the current `dmmfModelName` to determine what can be chained on next.\n * The fluent API allows to chain on model relations to provide an alternative\n * way to fetch and access nested data all at once. When triggered, it calls\n * `modelActions` after having accumulated `prevDataPath` and `prevUserArgs`\n * with the chaining. You can find an example of usage at {@link applyModel}.\n * @param client to provide dmmf information\n * @param dmmfModelName the dmmf name of the model to apply the api to\n * @param modelAction a callback action that triggers request execution\n * @param fluentPropName the name of the api link that was just called\n * @param prevDataPath the dataPath from the previous api link\n * @param prevUserArgs the userArgs from the previous api link\n * @remarks optional parameters are empty on the first call via\n * {@link applyModel}\n * @returns\n */\nexport function applyFluent(\n client: Client,\n dmmfModelName: string,\n modelAction: ModelAction,\n fluentPropName?: string,\n prevDataPath?: string[],\n prevUserArgs?: UserArgs,\n) {\n // we retrieve the model that is described from the DMMF\n const dmmfModel = client._runtimeDataModel.models[dmmfModelName]\n\n // map[field.name] === field, basically for quick access\n const dmmfModelFieldMap = dmmfModel.fields.reduce(\n (acc, field) => ({ ...acc, [field.name]: field }),\n {} as { [dmmfModelFieldName: string]: DMMF.Field },\n )\n\n // we return a regular model action but proxy its return\n return (userArgs?: UserArgs) => {\n const callsite = getCallSite(client._errorFormat)\n // ! first call: nextDataPath => [], nextUserArgs => userArgs\n const nextDataPath = getNextDataPath(fluentPropName, prevDataPath)\n const nextUserArgs = getNextUserArgs(userArgs, prevUserArgs, nextDataPath)\n const prismaPromise = modelAction({ dataPath: nextDataPath, callsite })(nextUserArgs)\n // TODO: use an unpacker here instead of ClientFetcher logic\n // TODO: once it's done we can deprecate the use of dataPath\n const ownKeys = getOwnKeys(client, dmmfModelName)\n\n // we take control of the return promise to allow chaining\n return new Proxy(prismaPromise, {\n get(target, prop: string) {\n // fluent api only works on fields that are relational\n if (!ownKeys.includes(prop)) return target[prop]\n\n // here we are sure that prop is a field of type object\n const dmmfModelName = dmmfModelFieldMap[prop].type\n const modelArgs = [dmmfModelName, modelAction, prop] as const\n const dataArgs = [nextDataPath, nextUserArgs] as const\n\n // we allow for chaining more with this recursive call\n return applyFluent(client, ...modelArgs, ...dataArgs)\n },\n ...defaultProxyHandlers([...ownKeys, ...Object.getOwnPropertyNames(prismaPromise)]),\n })\n }\n}\n\n// the only accessible fields are relations to be chained on\nfunction getOwnKeys(client: Client, dmmfModelName: string) {\n return client._runtimeDataModel.models[dmmfModelName].fields\n .filter((field) => field.kind === 'object') // relations\n .map((field) => field.name)\n}\n", "import * as DMMF from '@prisma/dmmf'\nimport type { O } from 'ts-toolbelt'\n\nimport { type Client, type InternalRequestParams } from '../../getPrismaClient'\nimport { getCallSite } from '../../utils/CallSite'\nimport {\n addObjectProperties,\n addProperty,\n cacheProperties,\n CompositeProxyLayer,\n createCompositeProxy,\n} from '../compositeProxy'\nimport type { PrismaPromise } from '../request/PrismaPromise'\nimport type { UserArgs } from '../request/UserArgs'\nimport { applyAggregates } from './applyAggregates'\nimport { applyFieldsProxy } from './applyFieldsProxy'\nimport { applyFluent } from './applyFluent'\nimport { dmmfToJSModelName } from './utils/dmmfToJSModelName'\n\nexport type ModelAction = (\n paramOverrides: O.Optional<InternalRequestParams>,\n) => (userArgs?: UserArgs) => PrismaPromise<unknown>\n\nconst fluentProps = [\n 'findUnique',\n 'findUniqueOrThrow',\n 'findFirst',\n 'findFirstOrThrow',\n 'create',\n 'update',\n 'upsert',\n 'delete',\n] as const\nconst aggregateProps = ['aggregate', 'count', 'groupBy'] as const\n\n/**\n * Dynamically creates a model interface via a proxy.\n * @param client to trigger the request execution\n * @param dmmfModelName the dmmf name of the model\n * @returns\n */\nexport function applyModel(client: Client, dmmfModelName: string) {\n const modelExtensions = client._extensions.getAllModelExtensions(dmmfModelName) ?? {}\n\n const layers = [\n modelActionsLayer(client, dmmfModelName),\n fieldsPropertyLayer(client, dmmfModelName),\n addObjectProperties(modelExtensions),\n addProperty('name', () => dmmfModelName),\n addProperty('$name', () => dmmfModelName),\n addProperty('$parent', () => client._appliedParent),\n ]\n\n return createCompositeProxy({}, layers)\n}\n\n/**\n * Dynamically creates a model interface via a proxy.\n * @param client to trigger the request execution\n * @param dmmfModelName the dmmf name of the model\n * @returns\n */\nfunction modelActionsLayer(client: Client, dmmfModelName: string): CompositeProxyLayer<string> {\n // we use the javascript model name for display purposes\n const jsModelName = dmmfToJSModelName(dmmfModelName)\n const ownKeys = Object.keys(DMMF.ModelAction).concat('count')\n\n return {\n getKeys() {\n return ownKeys\n },\n\n getPropertyValue(key) {\n const dmmfActionName = key as DMMF.ModelAction\n\n // we return a function as the model action that we want to expose\n // it takes user args and executes the request in a Prisma Promise\n const action = (paramOverrides: O.Optional<InternalRequestParams>) => (userArgs?: UserArgs) => {\n const callSite = getCallSite(client._errorFormat) // used for showing better errors\n\n return client._createPrismaPromise(\n (transaction) => {\n const params: InternalRequestParams = {\n // data and its dataPath for nested results\n args: userArgs,\n dataPath: [],\n\n // action name and its related model\n action: dmmfActionName,\n model: dmmfModelName,\n\n // method name for display only\n clientMethod: `${jsModelName}.${key}`,\n jsModelName,\n\n // transaction information\n transaction,\n\n // stack trace\n callsite: callSite,\n }\n\n return client._request({ ...params, ...paramOverrides })\n },\n {\n action: dmmfActionName,\n args: userArgs,\n model: dmmfModelName,\n },\n )\n }\n\n // we give the control over action for building the fluent api\n if ((fluentProps as readonly string[]).includes(dmmfActionName)) {\n return applyFluent(client, dmmfModelName, action)\n }\n\n // we handle the edge case of aggregates that need extra steps\n if (isValidAggregateName(key)) {\n return applyAggregates(client, key, action)\n }\n\n return action({}) // and by default, don't override any params\n },\n }\n}\n\nfunction isValidAggregateName(action: string): action is (typeof aggregateProps)[number] {\n return (aggregateProps as readonly string[]).includes(action)\n}\n\nfunction fieldsPropertyLayer(client: Client, dmmfModelName: string) {\n return cacheProperties(\n addProperty('fields', () => {\n const model = client._runtimeDataModel.models[dmmfModelName]\n return applyFieldsProxy(dmmfModelName, model)\n }),\n )\n}\n", "/**\n * Transforms a model name coming from the runtime to a DMMF model name.\n * @param name\n * @returns\n */\nexport function jsToDMMFModelName(name: string) {\n return name.replace(/^./, (str) => str.toUpperCase())\n}\n", "import type { Client } from '../../getPrismaClient'\nimport {\n addObjectProperties,\n addProperty,\n cacheProperties,\n CompositeProxyLayer,\n createCompositeProxy,\n} from '../compositeProxy'\nimport { applyModel } from './applyModel'\nimport { dmmfToJSModelName } from './utils/dmmfToJSModelName'\nimport { jsToDMMFModelName } from './utils/jsToDMMFModelName'\n\n// symbol we use for storing raw, unproxied\n// client instance, so we later can retrieve it\n// via `unapplyModels` methods\nconst rawClient = Symbol()\n\n/**\n * Dynamically creates a model proxy interface for a give name. For each prop\n * accessed on this proxy, it will lookup the dmmf to find if that model exists.\n * If it is the case, it will create a proxy for that model via {@link applyModel}.\n * @param client to create the proxy around\n * @returns a proxy to access models\n */\nexport function applyModelsAndClientExtensions(client: Client) {\n const layers = [\n rootLayer(client),\n modelsLayer(client),\n addProperty(rawClient, () => client),\n addProperty('$parent', () => client._appliedParent),\n ]\n const clientExtensions = client._extensions.getAllClientExtensions()\n if (clientExtensions) {\n layers.push(addObjectProperties(clientExtensions))\n }\n return createCompositeProxy(client, layers)\n}\n\nfunction rootLayer(client: Client): CompositeProxyLayer {\n const prototype = Object.getPrototypeOf(client._originalClient)\n const allKeys = [...new Set(Object.getOwnPropertyNames(prototype))]\n\n return {\n getKeys() {\n return allKeys\n },\n\n getPropertyValue(prop) {\n return client[prop]\n },\n }\n}\n\nfunction modelsLayer(client: Client): CompositeProxyLayer {\n const dmmfModelKeys = Object.keys(client._runtimeDataModel.models)\n const jsModelKeys = dmmfModelKeys.map(dmmfToJSModelName)\n const allKeys = [...new Set(dmmfModelKeys.concat(jsModelKeys))]\n\n return cacheProperties({\n getKeys() {\n return allKeys\n },\n\n getPropertyValue(prop) {\n const dmmfModelName = jsToDMMFModelName(prop)\n // creates a new model proxy on the fly and caches it\n if (client._runtimeDataModel.models[dmmfModelName] !== undefined) {\n return applyModel(client, dmmfModelName)\n }\n\n // above silently failed if model name is lower cased\n if (client._runtimeDataModel.models[prop] !== undefined) {\n return applyModel(client, prop)\n }\n\n return undefined\n },\n\n getPropertyDescriptor(key) {\n if (!jsModelKeys.includes(key)) {\n return { enumerable: false }\n }\n\n return undefined\n },\n })\n}\n\nexport function unApplyModelsAndClientExtensions(client: Client): Client {\n if (client[rawClient]) {\n return client[rawClient]\n }\n return client\n}\n", "import { Client } from '../../getPrismaClient'\nimport { AccelerateEngine } from '../engines/accelerate/AccelerateEngine'\nimport { applyModelsAndClientExtensions } from '../model/applyModelsAndClientExtensions'\nimport { ExtensionArgs } from '../types/exported'\n\n/**\n * @param this\n */\nexport function $extends(this: Client, extension: ExtensionArgs | ((client: Client) => Client)): Client {\n if (typeof extension === 'function') {\n return extension(this)\n }\n\n if (extension.client?.__AccelerateEngine) {\n const Engine = extension.client.__AccelerateEngine as typeof AccelerateEngine\n this._originalClient._engine = new Engine(this._originalClient._accelerateEngineConfig)\n }\n\n const newClient = Object.create(this._originalClient, {\n _extensions: { value: this._extensions.append(extension) },\n _appliedParent: { value: this, configurable: true },\n $on: { value: undefined },\n }) as Client\n\n return applyModelsAndClientExtensions(newClient)\n}\n", "import { hasOwnProperty } from '@prisma/internals'\n\nimport {\n addProperty,\n cacheProperties,\n CompositeProxyLayer,\n createCompositeProxy,\n removeProperties,\n} from '../compositeProxy'\nimport { Omission, Selection } from '../types/exported/JsApi'\nimport { MergedExtensionsList } from './MergedExtensionsList'\nimport { ComputedField } from './resultUtils'\n\ntype ApplyExtensionsArgs = {\n result: object\n select?: Selection\n omit?: Omission\n modelName: string\n extensions: MergedExtensionsList\n}\n\n/**\n * Given a part of a query result, it's model name and a list of extension,\n * applies computed fields to the results. Fields are computed lazily on a first access,\n * after that the result of computation is cached. In case `select` is used, all dependencies\n * of the computed fields would be excluded from final result, unless they are also specified in the select.\n *\n * This function applies computed fields to a single object only: it does not traverse relationships.\n * For full functionality, it is meant to be combined with `visitQueryResult`.\n *\n * @param params\n * @returns\n */\nexport function applyResultExtensions({ result, modelName, select, omit, extensions }: ApplyExtensionsArgs) {\n const computedFields = extensions.getAllComputedFields(modelName)\n if (!computedFields) {\n return result\n }\n\n const computedPropertiesLayers: CompositeProxyLayer[] = []\n const maskingLayers: CompositeProxyLayer[] = []\n\n for (const field of Object.values(computedFields)) {\n if (omit) {\n if (omit[field.name]) {\n continue\n }\n const toMask = field.needs.filter((prop) => omit[prop])\n if (toMask.length > 0) {\n maskingLayers.push(removeProperties(toMask))\n }\n } else if (select) {\n if (!select[field.name]) {\n continue\n }\n\n const toMask = field.needs.filter((prop) => !select[prop])\n if (toMask.length > 0) {\n maskingLayers.push(removeProperties(toMask))\n }\n }\n\n if (areNeedsMet(result, field.needs)) {\n computedPropertiesLayers.push(\n computedPropertyLayer(field, createCompositeProxy(result, computedPropertiesLayers)),\n )\n }\n }\n\n if (computedPropertiesLayers.length > 0 || maskingLayers.length > 0) {\n return createCompositeProxy(result, [...computedPropertiesLayers, ...maskingLayers])\n }\n return result\n}\n\nfunction areNeedsMet(result: object, neededProperties: string[]) {\n return neededProperties.every((property) => hasOwnProperty(result, property))\n}\n\nfunction computedPropertyLayer(field: ComputedField, result: object): CompositeProxyLayer {\n return cacheProperties(addProperty(field.name, () => field.compute(result)))\n}\n", "import { RuntimeDataModel } from '@prisma/client-common'\n\nimport { isSkip } from '../types'\nimport { JsArgs, Selection } from '../types/exported/JsApi'\n\ntype ModelVisitor = (value: object, modelName: string, queryArgs: JsArgs) => object | undefined\n\ntype VisitParams = {\n result: object\n args: JsArgs\n modelName: string\n runtimeDataModel: RuntimeDataModel\n visitor: ModelVisitor\n}\n\n/**\n * Function recursively walks through provided query response using `include` and `select`\n * query parameters and calls `visitor` callback for each model it encounters.\n * `visitor` receives the value of a particular response section, model it corresponds to and\n * the arguments used to query it. If visitor returns any non-undefined value that value will\n * replace corresponding part of the final result.\n *\n * @param params\n * @returns\n */\nexport function visitQueryResult({ visitor, result, args, runtimeDataModel, modelName }: VisitParams) {\n if (Array.isArray(result)) {\n for (let i = 0; i < result.length; i++) {\n result[i] = visitQueryResult({\n result: result[i],\n args,\n modelName,\n runtimeDataModel,\n visitor,\n })\n }\n return result\n }\n const visitResult = visitor(result, modelName, args) ?? result\n if (args.include) {\n visitNested({\n includeOrSelect: args.include,\n result: visitResult,\n parentModelName: modelName,\n runtimeDataModel,\n visitor,\n })\n }\n if (args.select) {\n visitNested({\n includeOrSelect: args.select,\n result: visitResult,\n parentModelName: modelName,\n runtimeDataModel,\n visitor,\n })\n }\n return visitResult\n}\n\ntype VisitNestedParams = {\n includeOrSelect: Selection\n result: object\n parentModelName: string\n runtimeDataModel: RuntimeDataModel\n visitor: ModelVisitor\n}\n\nfunction visitNested({ includeOrSelect, result, parentModelName, runtimeDataModel, visitor }: VisitNestedParams) {\n for (const [fieldName, subConfig] of Object.entries(includeOrSelect)) {\n if (!subConfig || result[fieldName] == null || isSkip(subConfig)) {\n continue\n }\n const parentModel = runtimeDataModel.models[parentModelName]\n const field = parentModel.fields.find((field) => field.name === fieldName)\n if (!field || field.kind !== 'object' || !field.relationName) {\n continue\n }\n const args = typeof subConfig === 'object' ? subConfig : {}\n result[fieldName] = visitQueryResult({\n visitor,\n result: result[fieldName],\n args,\n modelName: field.type,\n runtimeDataModel,\n })\n }\n}\n", "import { RuntimeDataModel } from '@prisma/client-common'\n\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { JsArgs } from '../types/exported/JsApi'\nimport { applyResultExtensions } from './applyResultExtensions'\nimport { MergedExtensionsList } from './MergedExtensionsList'\nimport { visitQueryResult } from './visitQueryResult'\n\ntype ApplyAllResultExtensionsParams = {\n result: object | null\n modelName: string\n args: JsArgs\n extensions: MergedExtensionsList\n runtimeDataModel: RuntimeDataModel\n globalOmit?: GlobalOmitOptions\n}\n\n/**\n * Walks the result of the query and applies all possible result extensions\n * to all parts of it, including nested relations\n */\nexport function applyAllResultExtensions({\n result,\n modelName,\n args,\n extensions,\n runtimeDataModel,\n globalOmit,\n}: ApplyAllResultExtensionsParams) {\n // We return the result directly (not applying result extensions) if\n // - there is no extension to apply\n // - result is `null`\n // - result is not an object (e.g. `.count()`)\n if (extensions.isEmpty() || result == null || typeof result !== 'object') {\n return result\n }\n const model = runtimeDataModel.models[modelName]\n if (!model) {\n return result\n }\n\n return visitQueryResult({\n result,\n args: args ?? {},\n modelName,\n runtimeDataModel,\n visitor: (value, dmmfModelName, args) => {\n const jsName = dmmfToJSModelName(dmmfModelName)\n return applyResultExtensions({\n result: value,\n modelName: jsName,\n select: args.select,\n // passing omit only if explicit select is not set - those 2 options are\n // mutually exclusive\n omit: args.select ? undefined : { ...globalOmit?.[jsName], ...args.omit },\n extensions,\n })\n },\n })\n}\n", "const denylist = ['$connect', '$disconnect', '$on', '$transaction', '$extends'] as const\n\nexport const itxClientDenyList = denylist as ReadonlyArray<string | symbol>\n\nexport type ITXClientDenyList = (typeof denylist)[number]\n", "import { assertNever } from '@prisma/internals'\nimport Decimal from 'decimal.js'\nimport { Sql } from 'sql-template-tag'\n\nimport { isFieldRef } from '../core/model/FieldRef'\nimport { isTypedSql, TypedSql, UnknownTypedSql } from '../core/types/exported'\nimport { JsArgs, JsInputValue } from '../core/types/exported/JsApi'\nimport { ObjectEnumValue } from '../core/types/exported/ObjectEnums'\nimport { RawQueryArgs } from '../core/types/exported/RawQueryArgs'\nimport { isDate } from './date'\nimport { isDecimalJsLike } from './decimalJsLike'\n\nexport function deepCloneArgs(args: JsArgs | RawQueryArgs): JsArgs | RawQueryArgs {\n if (args instanceof Sql) {\n return cloneSql(args)\n }\n\n if (isTypedSql(args)) {\n return cloneTypedSql(args)\n }\n\n if (Array.isArray(args)) {\n const clone: RawQueryArgs = [args[0]]\n\n for (let i = 1; i < args.length; i++) {\n clone[i] = deepCloneValue(args[i] as JsInputValue)\n }\n\n return clone\n }\n const clone: JsArgs = {}\n for (const k in args) {\n clone[k] = deepCloneValue(args[k])\n }\n return clone\n}\n\nfunction cloneSql(rawParam: Sql): Sql {\n return new Sql(rawParam.strings, rawParam.values)\n}\n\nfunction cloneTypedSql(rawParam: UnknownTypedSql): UnknownTypedSql {\n return new TypedSql(rawParam.sql, rawParam.values)\n}\n\n// based on https://github.com/lukeed/klona/blob/v2.0.6/src/index.js\nfunction deepCloneValue(x: JsInputValue): JsInputValue {\n if (typeof x !== 'object' || x == null || x instanceof ObjectEnumValue || isFieldRef(x)) {\n return x\n }\n\n if (isDecimalJsLike(x)) {\n return new Decimal(x.toFixed())\n }\n\n if (isDate(x)) {\n return new Date(+x)\n }\n\n if (ArrayBuffer.isView(x)) {\n return x.slice(0)\n }\n\n if (Array.isArray(x)) {\n let k = x.length\n let copy\n for (copy = Array(k); k--; ) {\n copy[k] = deepCloneValue(x[k])\n }\n return copy\n }\n\n if (typeof x === 'object') {\n const copy = {}\n for (const k in x) {\n if (k === '__proto__') {\n Object.defineProperty(copy, k, {\n value: deepCloneValue(x[k]),\n configurable: true,\n enumerable: true,\n writable: true,\n })\n } else {\n copy[k] = deepCloneValue(x[k])\n }\n }\n return copy\n }\n\n assertNever(x, 'Unknown value')\n}\n", "import { Client, InternalRequestParams } from '../../getPrismaClient'\nimport { RequestParams } from '../../RequestHandler'\nimport { deepCloneArgs } from '../../utils/deepCloneArgs'\nimport { AccelerateExtensionFetchDecorator } from '../engines'\nimport { QueryOptionsCb } from '../types/exported/ExtensionArgs'\nimport { BatchInternalParams, BatchQueryOptionsCb } from '../types/internal/ExtensionsInternalArgs'\n\nfunction iterateAndCallQueryCallbacks(\n client: Client,\n params: InternalRequestParams,\n queryCbs: QueryOptionsCb[],\n i = 0,\n) {\n return client._createPrismaPromise((transaction) => {\n // we need to keep track of the previous customDataProxyFetch\n const prevCustomFetch = params.customDataProxyFetch\n\n // allow query extensions to re-wrap in transactions\n // this will automatically discard the prev batch tx\n if ('transaction' in params && transaction !== undefined) {\n if (params.transaction?.kind === 'batch') {\n void params.transaction.lock.then() // discard\n }\n params.transaction = transaction\n }\n\n // if we are done recursing, we execute the request\n if (i === queryCbs.length) {\n return client._executeRequest(params)\n }\n\n // if not, call the next query cb and recurse query\n return queryCbs[i]({\n model: params.model,\n operation: params.model ? params.action : params.clientMethod,\n args: deepCloneArgs(params.args ?? {}),\n // @ts-expect-error because not part of public API\n __internalParams: params,\n query: (args, __internalParams = params) => {\n // we need to keep track of the current customDataProxyFetch\n // this is to cascade customDataProxyFetch like a middleware\n const currCustomFetch = __internalParams.customDataProxyFetch\n __internalParams.customDataProxyFetch = composeCustomDataProxyFetch(prevCustomFetch, currCustomFetch)\n __internalParams.args = args\n\n return iterateAndCallQueryCallbacks(client, __internalParams, queryCbs, i + 1)\n },\n })\n })\n}\n\nexport function applyQueryExtensions(client: Client, params: InternalRequestParams): Promise<any> {\n const { jsModelName, action, clientMethod } = params\n const operation = jsModelName ? action : clientMethod\n\n // query extensions only apply to model-bound operations\n if (client._extensions.isEmpty()) {\n return client._executeRequest(params)\n }\n\n // get the cached query cbs for a given model and action\n const cbs = client._extensions.getAllQueryCallbacks(jsModelName ?? '$none', operation)\n\n return iterateAndCallQueryCallbacks(client, params, cbs)\n}\n\ntype BatchExecuteCallback = (params: BatchInternalParams) => Promise<unknown[]>\n\nexport function createApplyBatchExtensionsFunction(executeBatch: BatchExecuteCallback) {\n return (requests: RequestParams[]) => {\n const params = { requests }\n const callbacks = requests[0].extensions.getAllBatchQueryCallbacks()\n if (!callbacks.length) {\n return executeBatch(params)\n }\n\n return iterateAndCallBatchCallbacks(params, callbacks, 0, executeBatch)\n }\n}\n\nexport function iterateAndCallBatchCallbacks(\n params: BatchInternalParams,\n callbacks: BatchQueryOptionsCb[],\n i: number,\n executeBatch: BatchExecuteCallback,\n) {\n if (i === callbacks.length) {\n return executeBatch(params)\n }\n\n const prevFetch = params.customDataProxyFetch\n const transaction = params.requests[0].transaction\n return callbacks[i]({\n args: {\n queries: params.requests.map((request) => ({\n model: request.modelName,\n operation: request.action,\n args: request.args,\n })),\n transaction: transaction\n ? {\n isolationLevel: transaction.kind === 'batch' ? transaction.isolationLevel : undefined,\n }\n : undefined,\n },\n __internalParams: params,\n query(_args, __internalParams = params) {\n const nextFetch = __internalParams.customDataProxyFetch\n __internalParams.customDataProxyFetch = composeCustomDataProxyFetch(prevFetch, nextFetch)\n return iterateAndCallBatchCallbacks(__internalParams, callbacks, i + 1, executeBatch)\n },\n })\n}\n\nconst noopFetch: AccelerateExtensionFetchDecorator = (f) => f\nfunction composeCustomDataProxyFetch(prevFetch = noopFetch, nextFetch = noopFetch): AccelerateExtensionFetchDecorator {\n return (f) => prevFetch(nextFetch(f))\n}\n", "import { GetPrismaClientConfig } from '@prisma/client-common'\nimport { Debug } from '@prisma/debug'\n\nimport { PrismaClientInitializationError } from '../errors/PrismaClientInitializationError'\n\nconst debug = Debug('prisma:client')\n\n/**\n * Known platforms that have caching issues. Updating this list will also update\n * the error message and the link to the docs, so add docs/links as needed. The\n * key from this map comes from the `ciName` property of the `ci-info` package.\n */\nconst cachingPlatforms = {\n Vercel: 'vercel',\n 'Netlify CI': 'netlify',\n} as const\n\ntype Config = Pick<GetPrismaClientConfig, 'postinstall' | 'ciName' | 'clientVersion' | 'generator'>\n\n/**\n * Throws an error if the client has been generated via auto-install and the\n * platform is known to have caching issues. In that case, we will display a\n * useful error message, and ask the user to run `prisma generate` manually.\n *\n * This function is specifically about dealing with `node_modules` caching.\n *\n * @returns\n */\nexport function checkPlatformCaching({ postinstall, ciName, clientVersion, generator }: Config) {\n debug('checkPlatformCaching:postinstall', postinstall)\n debug('checkPlatformCaching:ciName', ciName)\n\n // if client was not generated manually\n if (postinstall !== true) return\n\n // check if a custom output directory is used\n if (generator?.output) {\n const output = generator.output.fromEnvVar ?? generator.output.value\n\n if (typeof output === 'string') {\n // The generator is using a custom output directory, so we can skip the caching check\n return\n }\n }\n\n // and we generated on one a caching CI\n if (ciName && ciName in cachingPlatforms) {\n const message = `Prisma has detected that this project was built on ${ciName}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${cachingPlatforms[ciName]}-build`\n\n console.error(message) // display a nice and visible error message\n\n // also throw an error so that the user can catch it and handle it\n throw new PrismaClientInitializationError(message, clientVersion)\n }\n}\n", "import { Datasources, PrismaClientOptions } from '../../getPrismaClient'\n\nexport function getDatasourceOverrides(\n options: PrismaClientOptions | undefined,\n datasourceNames: string[],\n): Datasources {\n if (!options) {\n return {}\n }\n\n if (options.datasources) {\n return options.datasources\n }\n\n if (options.datasourceUrl) {\n const primaryDatasource = datasourceNames[0]\n return { [primaryDatasource]: { url: options.datasourceUrl } }\n }\n return {}\n}\n", "import { Debug } from '@prisma/debug'\nimport type { ConnectorType } from '@prisma/generator'\nimport type { BinaryTarget } from '@prisma/get-platform'\nimport { binaryTargets, getBinaryTargetForCurrentPlatform } from '@prisma/get-platform'\nimport { byline, ClientEngineType, EngineTrace, TracingHelper } from '@prisma/internals'\nimport type { ChildProcess, ChildProcessByStdio } from 'child_process'\nimport { spawn } from 'child_process'\nimport execa from 'execa'\nimport fs from 'fs'\nimport { bold, green, red } from 'kleur/colors'\nimport pRetry from 'p-retry'\nimport type { Readable } from 'stream'\nimport { temporaryFile } from 'tempy'\n\nimport { PrismaClientInitializationError } from '../../errors/PrismaClientInitializationError'\nimport { PrismaClientKnownRequestError } from '../../errors/PrismaClientKnownRequestError'\nimport { PrismaClientRustError } from '../../errors/PrismaClientRustError'\nimport { PrismaClientRustPanicError } from '../../errors/PrismaClientRustPanicError'\nimport { PrismaClientUnknownRequestError } from '../../errors/PrismaClientUnknownRequestError'\nimport { prismaGraphQLToJSError } from '../../errors/utils/prismaGraphQLToJSError'\nimport type { BatchQueryEngineResult, EngineConfig, RequestBatchOptions, RequestOptions } from '../common/Engine'\nimport { Engine } from '../common/Engine'\nimport { resolveEnginePath } from '../common/resolveEnginePath'\nimport type { LogEmitter, LogEventType } from '../common/types/Events'\nimport { JsonQuery } from '../common/types/JsonProtocol'\nimport { EngineMetricsOptions, Metrics, MetricsOptionsJson, MetricsOptionsPrometheus } from '../common/types/Metrics'\nimport type {\n QueryEngineResultData,\n QueryEngineResultExtensions,\n WithResultExtensions,\n} from '../common/types/QueryEngine'\nimport type * as Tx from '../common/types/Transaction'\nimport { getBatchRequestPayload } from '../common/utils/getBatchRequestPayload'\nimport { getErrorMessageWithLink } from '../common/utils/getErrorMessageWithLink'\nimport type { RustLog } from '../common/utils/log'\nimport { convertLog, getMessage, isRustErrorLog } from '../common/utils/log'\nimport { Connection, Result } from './Connection'\n\nconst debug = Debug('prisma:engine')\n\n// eslint-disable-next-line\nconst logger = (...args) => {}\n\n/**\n * Node.js based wrapper to run the Prisma binary\n */\n\nconst knownBinaryTargets: BinaryTarget[] = [...binaryTargets, 'native']\n\nexport type Deferred = {\n resolve: () => void\n reject: (err: Error) => void\n}\n\nexport type StopDeferred = {\n resolve: (code: number | null) => void\n reject: (err: Error) => void\n}\n\nconst engines: BinaryEngine[] = []\n\nconst MAX_STARTS = process.env.PRISMA_CLIENT_NO_RETRY ? 1 : 2\nconst MAX_REQUEST_RETRIES = process.env.PRISMA_CLIENT_NO_RETRY ? 1 : 2\n\nexport class BinaryEngine implements Engine<undefined> {\n name = 'BinaryEngine' as const\n private config: EngineConfig\n private logEmitter: LogEmitter\n private showColors: boolean\n private logQueries: boolean\n private env?: Record<string, string>\n private flags: string[]\n private enableDebugLogs: boolean\n private allowTriggerPanic: boolean\n private child?: ChildProcessByStdio<null, Readable, Readable>\n private clientVersion?: string\n private globalKillSignalReceived?: string\n private startCount = 0\n private engineEndpoint?: string\n private lastError?: PrismaClientRustError\n private stopPromise?: Promise<void>\n private beforeExitListener?: () => Promise<void>\n private cwd: string\n private datamodelPath: string\n private stderrLogs = ''\n private currentRequestPromise?: any\n private binaryTargetPromise?: Promise<BinaryTarget>\n // The rule is ignored here, using String didn't work as expected,\n // see https://github.com/prisma/prisma/pull/20165/commits/8059a14d8f2edbb15d6f7dbeeac74ba4a0a568ec\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n private binaryTarget?: BinaryTarget | string\n private datasourceOverrides?: { name: string; url: string }[]\n private startPromise?: Promise<void>\n private versionPromise?: Promise<string>\n private engineStartDeferred?: Deferred\n private engineStopDeferred?: StopDeferred\n private connection: Connection\n private lastQuery?: string\n private lastVersion?: string\n private lastActiveProvider?: ConnectorType\n private activeProvider?: string\n private tracingHelper: TracingHelper\n\n /**\n * exiting is used to tell the .on('exit') hook, if the exit came from our script.\n * As soon as the Prisma binary returns a correct return code (like 1 or 0), we don't need this anymore\n */\n constructor(config: EngineConfig) {\n this.config = config\n this.env = config.env\n this.cwd = this.resolveCwd(config.cwd)\n this.enableDebugLogs = config.enableDebugLogs ?? false\n this.allowTriggerPanic = config.allowTriggerPanic ?? false\n this.tracingHelper = config.tracingHelper\n this.logEmitter = config.logEmitter\n this.showColors = config.showColors ?? false\n this.logQueries = config.logQueries ?? false\n this.clientVersion = config.clientVersion\n this.flags = config.flags ?? []\n this.activeProvider = config.activeProvider\n this.connection = new Connection()\n\n this.datamodelPath = temporaryFile({ extension: 'prisma' })\n fs.writeFileSync(this.datamodelPath, config.inlineSchema)\n\n // compute the datasource override for binary engine\n const dsOverrideName = Object.keys(config.overrideDatasources)[0]\n const dsOverrideUrl = config.overrideDatasources[dsOverrideName]?.url\n if (dsOverrideName !== undefined && dsOverrideUrl !== undefined) {\n this.datasourceOverrides = [{ name: dsOverrideName, url: dsOverrideUrl }]\n }\n\n initHooks()\n\n this.engineEndpoint = config.engineEndpoint\n\n if (this.binaryTarget) {\n if (!knownBinaryTargets.includes(this.binaryTarget as BinaryTarget) && !fs.existsSync(this.binaryTarget)) {\n throw new PrismaClientInitializationError(\n `Unknown ${red('PRISMA_QUERY_ENGINE_BINARY')} ${red(\n bold(this.binaryTarget),\n )}. Possible binaryTargets: ${green(knownBinaryTargets.join(', '))} or a path to the query engine binary.\nYou may have to run ${green('prisma generate')} for your changes to take effect.`,\n this.clientVersion!,\n )\n }\n } else {\n void this.getCurrentBinaryTarget()\n }\n if (this.enableDebugLogs) {\n Debug.enable('*')\n }\n engines.push(this)\n }\n\n // Set error sets an error for async processing, when this doesn't happen in the span of a request\n // lifecycle, and is instead reported through STDOUT/STDERR of the server.\n //\n // See `throwAsyncErrorIfExists` for more information\n private setError(err: RustLog): void {\n if (isRustErrorLog(err)) {\n this.lastError = new PrismaClientRustError({\n clientVersion: this.clientVersion!,\n error: err,\n })\n if (this.lastError.isPanic()) {\n if (this.child) {\n this.stopPromise = killProcessAndWait(this.child)\n }\n if (this.currentRequestPromise?.cancel) {\n this.currentRequestPromise.cancel()\n }\n }\n }\n }\n\n private resolveCwd(cwd: string): string {\n if (fs.existsSync(cwd) && fs.lstatSync(cwd).isDirectory()) {\n return cwd\n }\n\n return process.cwd()\n }\n\n onBeforeExit(listener: () => Promise<void>) {\n this.beforeExitListener = listener\n }\n\n async emitExit() {\n if (this.beforeExitListener) {\n try {\n await this.beforeExitListener()\n } catch (e) {\n console.error(e)\n }\n }\n }\n\n private async getCurrentBinaryTarget(): Promise<BinaryTarget> {\n if (this.binaryTargetPromise) {\n return this.binaryTargetPromise\n }\n\n this.binaryTargetPromise = this.tracingHelper.runInChildSpan('detect_platform', () =>\n getBinaryTargetForCurrentPlatform(),\n )\n\n return this.binaryTargetPromise\n }\n\n private printDatasources(): string {\n if (this.datasourceOverrides) {\n return JSON.stringify(this.datasourceOverrides)\n }\n\n return '[]'\n }\n\n /**\n * Starts the engine, returns the url that it runs on\n */\n async start(): Promise<void> {\n if (this.stopPromise) {\n await this.stopPromise\n }\n\n // retries added in https://github.com/prisma/prisma/pull/18874 to avoid test flakyness\n const retries = { times: 10 }\n const retryInternalStart = async () => {\n try {\n await this.tracingHelper.runInChildSpan('start_engine', () => this.startAndFetchBootSpans())\n } catch (e) {\n if (e.retryable === true && retries.times > 0) {\n retries.times--\n await retryInternalStart()\n }\n\n throw e\n }\n }\n\n const startFn = async () => {\n if (!this.startPromise) {\n this.startCount++\n this.startPromise = retryInternalStart()\n }\n\n await this.startPromise\n\n if (!this.child && !this.engineEndpoint) {\n throw new PrismaClientUnknownRequestError(`Can't perform request, as the Engine has already been stopped`, {\n clientVersion: this.clientVersion!,\n })\n }\n }\n\n if (this.startPromise) {\n return startFn()\n }\n\n return this.tracingHelper.runInChildSpan('connect', startFn)\n }\n\n private getEngineEnvVars() {\n const env: Record<string, string> = {\n PRISMA_DML_PATH: this.datamodelPath,\n }\n\n if (this.logQueries) {\n env.LOG_QUERIES = 'true'\n }\n\n if (this.datasourceOverrides) {\n env.OVERWRITE_DATASOURCES = this.printDatasources()\n }\n\n if (!process.env.NO_COLOR && this.showColors) {\n env.CLICOLOR_FORCE = '1'\n }\n\n return {\n ...this.env, // user-provided env vars\n ...process.env,\n ...env,\n // use value from process.env or use default\n RUST_BACKTRACE: process.env.RUST_BACKTRACE ?? '1',\n RUST_LOG: process.env.RUST_LOG ?? 'info',\n }\n }\n\n private async startAndFetchBootSpans(): Promise<void> {\n await this.internalStart()\n\n const trace = await Connection.onHttpError(this.connection.get<EngineTrace>('/boot_trace'), (result) =>\n this.httpErrorHandler(result),\n )\n\n this.tracingHelper.dispatchEngineSpans(trace.data.spans)\n }\n\n private internalStart(): Promise<void> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n await new Promise((r) => process.nextTick(r))\n if (this.stopPromise) {\n await this.stopPromise\n }\n if (this.engineEndpoint) {\n try {\n this.connection.open(this.engineEndpoint)\n await pRetry(() => this.connection.get('/status'), {\n retries: 10,\n })\n } catch (e) {\n return reject(e)\n }\n return resolve()\n }\n try {\n if (this.child?.connected || (this.child && !this.child?.killed)) {\n debug(`There is a child that still runs and we want to start again`)\n }\n\n // reset last error\n this.lastError = undefined\n logger('startin & resettin')\n this.globalKillSignalReceived = undefined\n\n debug('cwd:', this.cwd)\n\n const prismaPath = await resolveEnginePath(ClientEngineType.Binary, this.config)\n\n const additionalFlag = this.allowTriggerPanic ? ['--debug'] : []\n\n const flags = [\n '--enable-raw-queries',\n '--enable-metrics',\n '--enable-open-telemetry',\n ...this.flags,\n ...additionalFlag,\n ]\n\n flags.push('--port', '0')\n flags.push('--engine-protocol', 'json')\n\n debug({ flags })\n\n const env = this.getEngineEnvVars()\n\n this.child = spawn(prismaPath, flags, {\n env,\n cwd: this.cwd,\n windowsHide: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n byline(this.child.stderr).on('data', (msg) => {\n const data = String(msg)\n debug('stderr', data)\n\n try {\n const json = JSON.parse(data)\n if (typeof json.is_panic !== 'undefined') {\n debug(json)\n this.setError(json)\n if (this.engineStartDeferred) {\n const err = new PrismaClientInitializationError(json.message, this.clientVersion!, json.error_code)\n this.engineStartDeferred.reject(err)\n }\n }\n } catch (e) {\n if (!data.includes('Printing to stderr') && !data.includes('Listening on ')) {\n this.stderrLogs += '\\n' + data\n }\n }\n })\n\n byline(this.child.stdout).on('data', (msg) => {\n const data = String(msg)\n\n try {\n const json = JSON.parse(data)\n debug('stdout', getMessage(json))\n\n if (\n this.engineStartDeferred &&\n json.level === 'INFO' &&\n json.target === 'query_engine::server' &&\n json.fields?.message?.startsWith('Started query engine http server')\n ) {\n const ip = json.fields.ip\n const port = json.fields.port\n\n if (ip === undefined || port === undefined) {\n this.engineStartDeferred.reject(\n new PrismaClientInitializationError(\n 'This version of Query Engine is not compatible with Prisma Client: \"ip\" and \"port\" fields are missing in the startup log entry',\n this.clientVersion!,\n ),\n )\n return\n }\n\n this.connection.open(`http://${ip}:${port}`)\n this.engineStartDeferred.resolve()\n this.engineStartDeferred = undefined\n }\n\n // only emit logs, if they're in the from of a log\n // they could also be a RustError, which has is_panic\n // these logs can still include error logs\n if (typeof json.is_panic === 'undefined') {\n const log = convertLog(json)\n // boolean cast needed, because of TS. We return ` is RustLog`, useful in other context, but not here\n const logIsRustErrorLog: boolean = isRustErrorLog(log)\n if (logIsRustErrorLog) {\n this.setError(log)\n } else if (log.level === 'query') {\n this.logEmitter.emit(log.level, {\n timestamp: log.timestamp,\n query: log.fields.query,\n params: log.fields.params,\n duration: log.fields.duration_ms,\n target: log.target,\n })\n } else {\n this.logEmitter.emit(log.level as LogEventType, {\n timestamp: log.timestamp,\n message: log.fields.message,\n target: log.target,\n })\n }\n } else {\n this.setError(json)\n }\n } catch (e) {\n debug(e, data)\n }\n })\n\n this.child.on('exit', (code): void => {\n logger('removing startPromise')\n this.startPromise = undefined\n if (this.engineStopDeferred) {\n this.engineStopDeferred.resolve(code)\n return\n }\n this.connection.close()\n\n // don't error in restarts\n if (code !== 0 && this.engineStartDeferred && this.startCount === 1) {\n let err: PrismaClientInitializationError\n let msg = this.stderrLogs\n // get the message from the last error\n if (this.lastError) {\n msg = getMessage(this.lastError)\n }\n if (code !== null) {\n err = new PrismaClientInitializationError(\n `Query engine exited with code ${code}\\n` + msg,\n this.clientVersion!,\n )\n err.retryable = true\n } else if (this.child?.signalCode) {\n err = new PrismaClientInitializationError(\n `Query engine process killed with signal ${this.child.signalCode} for unknown reason.\nMake sure that the engine binary at ${prismaPath} is not corrupt.\\n` + msg,\n this.clientVersion!,\n )\n err.retryable = true\n } else {\n err = new PrismaClientInitializationError(msg, this.clientVersion!)\n }\n\n this.engineStartDeferred.reject(err)\n }\n if (!this.child) {\n return\n }\n if (this.lastError) {\n return\n }\n if (code === 126) {\n this.setError({\n timestamp: new Date(),\n target: 'binary engine process exit',\n level: 'error',\n fields: {\n message: `Couldn't start query engine as it's not executable on this operating system.\nYou very likely have the wrong \"binaryTarget\" defined in the schema.prisma file.`,\n },\n })\n }\n })\n\n this.child.on('error', (err): void => {\n this.setError({\n timestamp: new Date(),\n target: 'binary engine process error',\n level: 'error',\n fields: {\n message: `Couldn't start query engine: ${err}`,\n },\n })\n reject(err)\n })\n\n this.child.on('close', (code, signal): void => {\n this.connection.close()\n\n let toEmit: { message: string } | undefined\n\n if (code === null && signal === 'SIGABRT' && this.child) {\n toEmit = new PrismaClientRustPanicError(\n this.getErrorMessageWithLink('Panic in Query Engine with SIGABRT signal'),\n this.clientVersion!,\n )\n } else if (code === 101 && signal === null && this.lastError) {\n toEmit = this.lastError\n }\n\n if (toEmit) {\n this.logEmitter.emit('error', {\n message: toEmit.message,\n timestamp: new Date(),\n target: 'binary engine process close',\n })\n }\n })\n\n if (this.lastError) {\n return reject(new PrismaClientInitializationError(getMessage(this.lastError), this.clientVersion!))\n }\n\n try {\n await new Promise<void>((resolve, reject) => {\n this.engineStartDeferred = { resolve, reject }\n })\n } catch (err) {\n this.child?.kill()\n throw err\n }\n\n // don't wait for this\n void (async () => {\n try {\n const engineVersion = await this.version(true)\n debug(`Client Version: ${this.clientVersion}`)\n debug(`Engine Version: ${engineVersion}`)\n debug(`Active provider: ${this.activeProvider}`)\n } catch (e) {\n debug(e)\n }\n })()\n\n this.stopPromise = undefined\n resolve()\n } catch (e) {\n reject(e)\n }\n })\n }\n\n async stop(): Promise<void> {\n const stopFn = async () => {\n if (!this.stopPromise) {\n this.stopPromise = this._stop()\n }\n\n return this.stopPromise\n }\n\n return this.tracingHelper.runInChildSpan('disconnect', stopFn)\n }\n\n /**\n * If Prisma runs, stop it\n */\n async _stop(): Promise<void> {\n if (this.startPromise) {\n await this.startPromise\n }\n // not sure yet if this is a good idea\n await new Promise((resolve) => process.nextTick(resolve))\n if (this.currentRequestPromise) {\n try {\n await this.currentRequestPromise\n } catch (e) {\n //\n }\n }\n let stopChildPromise\n if (this.child) {\n debug(`Stopping Prisma engine`)\n if (this.startPromise) {\n debug(`Waiting for start promise`)\n await this.startPromise\n }\n debug(`Done waiting for start promise`)\n if (this.child.exitCode === null) {\n stopChildPromise = new Promise((resolve, reject) => {\n this.engineStopDeferred = { resolve, reject }\n })\n } else {\n debug('Child already exited with code', this.child.exitCode)\n }\n this.connection.close()\n this.child.kill()\n this.child = undefined\n }\n if (stopChildPromise) {\n await stopChildPromise\n }\n await new Promise((r) => process.nextTick(r))\n this.startPromise = undefined\n this.engineStopDeferred = undefined\n }\n\n kill(signal: string): void {\n this.globalKillSignalReceived = signal\n this.child?.kill()\n this.connection.close()\n }\n\n async version(forceRun = false) {\n if (this.versionPromise && !forceRun) {\n return this.versionPromise\n }\n this.versionPromise = this.internalVersion()\n return this.versionPromise\n }\n\n async internalVersion() {\n const enginePath = await resolveEnginePath(ClientEngineType.Binary, this.config)\n\n const result = await execa(enginePath, ['--version'])\n\n this.lastVersion = result.stdout\n return this.lastVersion\n }\n\n async request<T>(\n query: JsonQuery,\n { traceparent, numTry = 1, isWrite, interactiveTransaction }: RequestOptions<undefined>,\n ): Promise<QueryEngineResultData<T>> {\n await this.start()\n const headers: Record<string, string> = {}\n if (traceparent) {\n headers.traceparent = traceparent\n }\n\n if (interactiveTransaction) {\n headers['X-transaction-id'] = interactiveTransaction.id\n }\n\n const queryStr = JSON.stringify(query)\n this.currentRequestPromise = Connection.onHttpError(this.connection.post('/', queryStr, headers), (result) =>\n this.httpErrorHandler(result),\n )\n this.lastQuery = queryStr\n\n try {\n const { data } = await this.currentRequestPromise\n\n if (data.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(data.extensions.traces)\n }\n\n if (data.errors) {\n if (data.errors.length === 1) {\n throw prismaGraphQLToJSError(data.errors[0], this.clientVersion!, this.config.activeProvider!)\n }\n // this case should not happen, as the query engine only returns one error\n throw new PrismaClientUnknownRequestError(JSON.stringify(data.errors), { clientVersion: this.clientVersion! })\n }\n\n // reset restart count after successful request\n if (this.startCount > 0) {\n this.startCount = 0\n }\n\n this.currentRequestPromise = undefined\n return { data }\n } catch (e: any) {\n logger('req - e', e)\n\n const { error, shouldRetry } = await this.handleRequestError(e)\n\n // retry\n if (numTry <= MAX_REQUEST_RETRIES && shouldRetry && !isWrite) {\n logger('trying a retry now')\n return this.request(query, { traceparent, numTry: numTry + 1, isWrite, interactiveTransaction })\n }\n\n throw error\n }\n }\n\n async requestBatch<T>(\n queries: JsonQuery[],\n { traceparent, transaction, numTry = 1, containsWrite }: RequestBatchOptions<undefined>,\n ): Promise<BatchQueryEngineResult<T>[]> {\n await this.start()\n\n const headers: Record<string, string> = {}\n if (traceparent) {\n headers.traceparent = traceparent\n }\n\n const itx = transaction?.kind === 'itx' ? transaction.options : undefined\n if (itx) {\n headers['X-transaction-id'] = itx.id\n }\n\n const request = getBatchRequestPayload(queries, transaction)\n\n this.lastQuery = JSON.stringify(request)\n this.currentRequestPromise = Connection.onHttpError(this.connection.post('/', this.lastQuery, headers), (result) =>\n this.httpErrorHandler(result),\n )\n\n return this.currentRequestPromise\n .then(({ data }) => {\n if (data.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(data.extensions.traces)\n }\n\n const { batchResult } = data\n\n if (Array.isArray(batchResult)) {\n return batchResult.map((result) => {\n if (result.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(result.extensions.traces)\n }\n\n if (result.errors && result.errors.length > 0) {\n return prismaGraphQLToJSError(result.errors[0], this.clientVersion!, this.config.activeProvider!)\n }\n\n return {\n data: result,\n }\n })\n } else {\n throw prismaGraphQLToJSError(data.errors[0], this.clientVersion!, this.config.activeProvider!)\n }\n })\n .catch(async (e) => {\n const { error, shouldRetry } = await this.handleRequestError(e)\n if (shouldRetry && !containsWrite) {\n // retry\n if (numTry <= MAX_REQUEST_RETRIES) {\n return this.requestBatch(queries, {\n traceparent,\n transaction,\n numTry: numTry + 1,\n containsWrite,\n })\n }\n }\n\n throw error\n })\n }\n\n /**\n * Send START, COMMIT, or ROLLBACK to the Query Engine\n * @param action START, COMMIT, or ROLLBACK\n * @param headers headers for tracing\n * @param options to change the default timeouts\n * @param info transaction information for the QE\n */\n async transaction(\n action: 'start',\n headers: Tx.TransactionHeaders,\n options: Tx.Options,\n ): Promise<Tx.InteractiveTransactionInfo<undefined>>\n async transaction(\n action: 'commit',\n headers: Tx.TransactionHeaders,\n info: Tx.InteractiveTransactionInfo<undefined>,\n ): Promise<undefined>\n async transaction(\n action: 'rollback',\n headers: Tx.TransactionHeaders,\n info: Tx.InteractiveTransactionInfo<undefined>,\n ): Promise<undefined>\n async transaction(action: any, headers: Tx.TransactionHeaders, arg?: any) {\n await this.start()\n\n if (action === 'start') {\n const jsonOptions = JSON.stringify({\n max_wait: arg.maxWait,\n timeout: arg.timeout,\n isolation_level: arg.isolationLevel,\n })\n\n const result = await Connection.onHttpError(\n this.connection.post<WithResultExtensions<Tx.InteractiveTransactionInfo<undefined>>>(\n '/transaction/start',\n jsonOptions,\n headers,\n ),\n (result) => this.httpErrorHandler(result),\n )\n\n if (result.data.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(result.data.extensions.traces)\n }\n\n return result.data\n } else if (action === 'commit') {\n const result = await Connection.onHttpError(\n this.connection.post<WithResultExtensions<{}>>(`/transaction/${arg.id}/commit`, undefined, headers),\n (result) => this.httpErrorHandler(result),\n )\n\n if (result.data.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(result.data.extensions.traces)\n }\n } else if (action === 'rollback') {\n const result = await Connection.onHttpError(\n this.connection.post<WithResultExtensions<{}>>(`/transaction/${arg.id}/rollback`, undefined, headers),\n (result) => this.httpErrorHandler(result),\n )\n\n if (result.data.extensions?.traces) {\n this.tracingHelper.dispatchEngineSpans(result.data.extensions.traces)\n }\n }\n\n return undefined\n }\n\n private get hasMaxRestarts() {\n return this.startCount >= MAX_STARTS\n }\n\n /**\n * This processes errors that didn't occur synchronously during a request, and were instead inferred\n * from the STDOUT/STDERR streams of the Query Engine process.\n *\n * See `setError` for more information.\n */\n private throwAsyncErrorIfExists(forceThrow = false) {\n logger('throwAsyncErrorIfExists', this.startCount, this.hasMaxRestarts)\n if (this.lastError && (this.hasMaxRestarts || forceThrow)) {\n const lastError = this.lastError\n // reset error, as we are throwing it now\n this.lastError = undefined\n if (lastError.isPanic()) {\n throw new PrismaClientRustPanicError(this.getErrorMessageWithLink(getMessage(lastError)), this.clientVersion!)\n } else {\n throw new PrismaClientUnknownRequestError(this.getErrorMessageWithLink(getMessage(lastError)), {\n clientVersion: this.clientVersion!,\n })\n }\n }\n }\n\n private getErrorMessageWithLink(title: string) {\n return getErrorMessageWithLink({\n binaryTarget: this.binaryTarget,\n title,\n version: this.clientVersion!,\n engineVersion: this.lastVersion,\n database: this.lastActiveProvider,\n query: this.lastQuery!,\n })\n }\n\n /**\n * handleRequestError will process existing errors coming from the request, or else look\n * for the last error happening in the Query Engine process and processed from the STDOUT/STEDERR\n * streams.\n *\n * See `setError` and `throwAsyncErrorIfExists` for more information.\n */\n private handleRequestError = async (\n error: Error & { code?: string },\n ): Promise<{ error: Error & { code?: string }; shouldRetry: boolean }> => {\n debug({ error })\n\n // if we are starting, wait for it before we handle any error\n if (this.startPromise) {\n await this.startPromise\n }\n\n // matching on all relevant error codes from\n // https://github.com/nodejs/undici/blob/2.x/lib/core/errors.js\n const isNetworkError = [\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'UND_ERR_CLOSED',\n 'UND_ERR_SOCKET',\n 'UND_ERR_DESTROYED',\n 'UND_ERR_ABORTED',\n ].includes(error.code as string)\n\n if (error instanceof PrismaClientKnownRequestError) {\n return { error, shouldRetry: false }\n }\n\n try {\n this.throwAsyncErrorIfExists()\n\n // A currentRequestPromise is only being canceled by the sendPanic function\n if (this.currentRequestPromise?.isCanceled) {\n this.throwAsyncErrorIfExists()\n } else if (isNetworkError) {\n if (this.globalKillSignalReceived && !this.child?.connected) {\n throw new PrismaClientUnknownRequestError(\n `The Node.js process already received a ${this.globalKillSignalReceived} signal, therefore the Prisma query engine exited\n and your request can't be processed.\n You probably have some open handle that prevents your process from exiting.\n It could be an open http server or stream that didn't close yet.\n We recommend using the \\`wtfnode\\` package to debug open handles.`,\n { clientVersion: this.clientVersion! },\n )\n }\n\n this.throwAsyncErrorIfExists()\n\n if (this.startCount > MAX_STARTS) {\n // if we didn't throw yet, which is unlikely, we want to poll on stderr / stdout here\n // to get an error first\n for (let i = 0; i < 5; i++) {\n await new Promise((r) => setTimeout(r, 50))\n this.throwAsyncErrorIfExists(true)\n }\n\n throw new Error(`Query engine is trying to restart, but can't.\n Please look into the logs or turn on the env var DEBUG=* to debug the constantly restarting query engine.`)\n }\n }\n\n this.throwAsyncErrorIfExists(true)\n\n throw error\n } catch (e) {\n return { error: e, shouldRetry: isNetworkError }\n }\n }\n\n async metrics(options: MetricsOptionsJson): Promise<Metrics>\n async metrics(options: MetricsOptionsPrometheus): Promise<string>\n async metrics({ format, globalLabels }: EngineMetricsOptions): Promise<string | Metrics> {\n await this.start()\n const parseResponse = format === 'json'\n const response = await this.connection.post<string | Metrics>(\n `/metrics?format=${encodeURIComponent(format)}`,\n JSON.stringify(globalLabels),\n null,\n parseResponse,\n )\n return response.data\n }\n\n /**\n * Decides how to handle non-200 http error responses\n * @param result\n */\n httpErrorHandler<R>(result: Result<R>): never {\n const response = result.data as { [K: string]: unknown }\n\n const traces = (response.extensions as QueryEngineResultExtensions | undefined)?.traces\n if (traces) {\n this.tracingHelper.dispatchEngineSpans(traces)\n }\n\n throw new PrismaClientKnownRequestError(response.message as string, {\n code: response.error_code as string,\n clientVersion: this.clientVersion as string,\n meta: response.meta as Record<string, unknown>,\n })\n }\n\n applyPendingMigrations(): Promise<void> {\n throw new Error('Method not implemented.')\n }\n}\n\nfunction hookProcess(handler: string, exit = false) {\n process.once(handler as any, async () => {\n for (const engine of engines) {\n await engine.emitExit()\n engine.kill(handler)\n }\n engines.splice(0, engines.length)\n\n // only exit, if only we are listening\n // if there is another listener, that other listener is responsible\n if (exit && process.listenerCount(handler) === 0) {\n process.exit()\n }\n })\n}\n\nlet hooksInitialized = false\nfunction initHooks() {\n if (!hooksInitialized) {\n hookProcess('beforeExit')\n hookProcess('exit')\n hookProcess('SIGINT', true)\n hookProcess('SIGUSR2', true)\n hookProcess('SIGTERM', true)\n hooksInitialized = true\n }\n}\n\nfunction killProcessAndWait(childProcess: ChildProcess): Promise<void> {\n return new Promise((resolve) => {\n childProcess.once('exit', resolve)\n childProcess.kill()\n })\n}\n", "import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path from 'node:path';\nimport stream from 'node:stream';\nimport {promisify} from 'node:util';\nimport uniqueString from 'unique-string';\nimport tempDir from 'temp-dir';\nimport {isStream} from 'is-stream';\n\nconst pipeline = promisify(stream.pipeline); // TODO: Use `node:stream/promises` when targeting Node.js 16.\n\nconst getPath = (prefix = '') => path.join(tempDir, prefix + uniqueString());\n\nconst writeStream = async (filePath, data) => pipeline(data, fs.createWriteStream(filePath));\n\nasync function runTask(temporaryPath, callback) {\n\ttry {\n\t\treturn await callback(temporaryPath);\n\t} finally {\n\t\tawait fsPromises.rm(temporaryPath, {recursive: true, force: true});\n\t}\n}\n\nexport function temporaryFile({name, extension} = {}) {\n\tif (name) {\n\t\tif (extension !== undefined && extension !== null) {\n\t\t\tthrow new Error('The `name` and `extension` options are mutually exclusive');\n\t\t}\n\n\t\treturn path.join(temporaryDirectory(), name);\n\t}\n\n\treturn getPath() + (extension === undefined || extension === null ? '' : '.' + extension.replace(/^\\./, ''));\n}\n\nexport const temporaryFileTask = async (callback, options) => runTask(temporaryFile(options), callback);\n\nexport function temporaryDirectory({prefix = ''} = {}) {\n\tconst directory = getPath(prefix);\n\tfs.mkdirSync(directory);\n\treturn directory;\n}\n\nexport const temporaryDirectoryTask = async (callback, options) => runTask(temporaryDirectory(options), callback);\n\nexport async function temporaryWrite(fileContent, options) {\n\tconst filename = temporaryFile(options);\n\tconst write = isStream(fileContent) ? writeStream : fsPromises.writeFile;\n\tawait write(filename, fileContent);\n\treturn filename;\n}\n\nexport const temporaryWriteTask = async (fileContent, callback, options) => runTask(await temporaryWrite(fileContent, options), callback);\n\nexport function temporaryWriteSync(fileContent, options) {\n\tconst filename = temporaryFile(options);\n\tfs.writeFileSync(filename, fileContent);\n\treturn filename;\n}\n\nexport {default as rootTemporaryDirectory} from 'temp-dir';\n", "import {promisify} from 'util';\nimport crypto from 'crypto';\n\nconst randomBytesAsync = promisify(crypto.randomBytes);\n\nconst urlSafeCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~'.split('');\nconst numericCharacters = '0123456789'.split('');\nconst distinguishableCharacters = 'CDEHKMPRTUWXY012458'.split('');\nconst asciiPrintableCharacters = '!\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.split('');\nconst alphanumericCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('');\n\nconst generateForCustomCharacters = (length, characters) => {\n\t// Generating entropy is faster than complex math operations, so we use the simplest way\n\tconst characterCount = characters.length;\n\tconst maxValidSelector = (Math.floor(0x10000 / characterCount) * characterCount) - 1; // Using values above this will ruin distribution when using modular division\n\tconst entropyLength = 2 * Math.ceil(1.1 * length); // Generating a bit more than required so chances we need more than one pass will be really low\n\tlet string = '';\n\tlet stringLength = 0;\n\n\twhile (stringLength < length) { // In case we had many bad values, which may happen for character sets of size above 0x8000 but close to it\n\t\tconst entropy = crypto.randomBytes(entropyLength);\n\t\tlet entropyPosition = 0;\n\n\t\twhile (entropyPosition < entropyLength && stringLength < length) {\n\t\t\tconst entropyValue = entropy.readUInt16LE(entropyPosition);\n\t\t\tentropyPosition += 2;\n\t\t\tif (entropyValue > maxValidSelector) { // Skip values which will ruin distribution when using modular division\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tstring += characters[entropyValue % characterCount];\n\t\t\tstringLength++;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst generateForCustomCharactersAsync = async (length, characters) => {\n\t// Generating entropy is faster than complex math operations, so we use the simplest way\n\tconst characterCount = characters.length;\n\tconst maxValidSelector = (Math.floor(0x10000 / characterCount) * characterCount) - 1; // Using values above this will ruin distribution when using modular division\n\tconst entropyLength = 2 * Math.ceil(1.1 * length); // Generating a bit more than required so chances we need more than one pass will be really low\n\tlet string = '';\n\tlet stringLength = 0;\n\n\twhile (stringLength < length) { // In case we had many bad values, which may happen for character sets of size above 0x8000 but close to it\n\t\tconst entropy = await randomBytesAsync(entropyLength); // eslint-disable-line no-await-in-loop\n\t\tlet entropyPosition = 0;\n\n\t\twhile (entropyPosition < entropyLength && stringLength < length) {\n\t\t\tconst entropyValue = entropy.readUInt16LE(entropyPosition);\n\t\t\tentropyPosition += 2;\n\t\t\tif (entropyValue > maxValidSelector) { // Skip values which will ruin distribution when using modular division\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tstring += characters[entropyValue % characterCount];\n\t\t\tstringLength++;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst generateRandomBytes = (byteLength, type, length) => crypto.randomBytes(byteLength).toString(type).slice(0, length);\n\nconst generateRandomBytesAsync = async (byteLength, type, length) => {\n\tconst buffer = await randomBytesAsync(byteLength);\n\treturn buffer.toString(type).slice(0, length);\n};\n\nconst allowedTypes = new Set([\n\tundefined,\n\t'hex',\n\t'base64',\n\t'url-safe',\n\t'numeric',\n\t'distinguishable',\n\t'ascii-printable',\n\t'alphanumeric'\n]);\n\nconst createGenerator = (generateForCustomCharacters, generateRandomBytes) => ({length, type, characters}) => {\n\tif (!(length >= 0 && Number.isFinite(length))) {\n\t\tthrow new TypeError('Expected a `length` to be a non-negative finite number');\n\t}\n\n\tif (type !== undefined && characters !== undefined) {\n\t\tthrow new TypeError('Expected either `type` or `characters`');\n\t}\n\n\tif (characters !== undefined && typeof characters !== 'string') {\n\t\tthrow new TypeError('Expected `characters` to be string');\n\t}\n\n\tif (!allowedTypes.has(type)) {\n\t\tthrow new TypeError(`Unknown type: ${type}`);\n\t}\n\n\tif (type === undefined && characters === undefined) {\n\t\ttype = 'hex';\n\t}\n\n\tif (type === 'hex' || (type === undefined && characters === undefined)) {\n\t\treturn generateRandomBytes(Math.ceil(length * 0.5), 'hex', length); // Need 0.5 byte entropy per character\n\t}\n\n\tif (type === 'base64') {\n\t\treturn generateRandomBytes(Math.ceil(length * 0.75), 'base64', length); // Need 0.75 byte of entropy per character\n\t}\n\n\tif (type === 'url-safe') {\n\t\treturn generateForCustomCharacters(length, urlSafeCharacters);\n\t}\n\n\tif (type === 'numeric') {\n\t\treturn generateForCustomCharacters(length, numericCharacters);\n\t}\n\n\tif (type === 'distinguishable') {\n\t\treturn generateForCustomCharacters(length, distinguishableCharacters);\n\t}\n\n\tif (type === 'ascii-printable') {\n\t\treturn generateForCustomCharacters(length, asciiPrintableCharacters);\n\t}\n\n\tif (type === 'alphanumeric') {\n\t\treturn generateForCustomCharacters(length, alphanumericCharacters);\n\t}\n\n\tif (characters.length === 0) {\n\t\tthrow new TypeError('Expected `characters` string length to be greater than or equal to 1');\n\t}\n\n\tif (characters.length > 0x10000) {\n\t\tthrow new TypeError('Expected `characters` string length to be less or equal to 65536');\n\t}\n\n\treturn generateForCustomCharacters(length, characters.split(''));\n};\n\nconst cryptoRandomString = createGenerator(generateForCustomCharacters, generateRandomBytes);\n\ncryptoRandomString.async = createGenerator(generateForCustomCharactersAsync, generateRandomBytesAsync);\n\nexport default cryptoRandomString;\n", "import cryptoRandomString from 'crypto-random-string';\n\nexport default function uniqueString() {\n\treturn cryptoRandomString({length: 32});\n}\n", "import { PrismaClientRustError } from '../../../errors/PrismaClientRustError'\n\nexport type LogLevel = 'info' | 'trace' | 'debug' | 'warn' | 'error' | 'query'\nexport interface RawRustLog {\n timestamp: string\n level: LogLevel\n target: string\n fields: LogFields\n}\n\nexport interface RustLog {\n timestamp: Date\n level: LogLevel\n target: string\n fields: LogFields\n}\n\nexport function getMessage(log: string | PrismaClientRustError): string {\n if (typeof log === 'string') {\n return log\n } else {\n return log.message\n }\n}\n\nexport function getBacktrace(log: RustLog): string {\n if (log.fields?.message) {\n let str = log.fields?.message\n if (log.fields?.file) {\n str += ` in ${log.fields.file}`\n if (log.fields?.line) {\n str += `:${log.fields.line}`\n }\n if (log.fields?.column) {\n str += `:${log.fields.column}`\n }\n }\n if (log.fields?.reason) {\n str += `\\n${log.fields?.reason}`\n }\n return str\n }\n\n return 'Unknown error'\n}\n\nexport function isPanic(err: RustLog): boolean {\n return err.fields?.message === 'PANIC'\n}\n\nexport function isRustLog(e: any): e is RustLog {\n return e.timestamp && typeof e.level === 'string' && typeof e.target === 'string'\n}\n\nexport function isRustErrorLog(e: any): e is RustLog {\n return isRustLog(e) && (e.level === 'error' || e.fields?.message?.includes('fatal error'))\n}\n\nexport type LogFields = { [key: string]: any }\n\nexport interface PanicLogFields {\n message: 'PANIC'\n reason: string\n file: string\n line: string\n column: number\n}\n\nexport interface InfoLogFields {\n message: string\n 'log.target': string\n 'log.module_path': string\n 'log.file': string\n 'log.line': number\n}\n\nexport interface QueryLogFields {\n query: string\n item_type: string\n params: string\n duration_ms: number\n}\n\nexport interface Log {\n message: string\n level: LogLevel\n date: Date\n application: string\n [key: string]: string | Date\n}\n\nexport function convertLog(rustLog: RawRustLog): RustLog {\n const isQuery = isQueryLog(rustLog.fields)\n const level: LogLevel = isQuery ? 'query' : (rustLog.level.toLowerCase() as LogLevel)\n return {\n ...rustLog,\n level,\n timestamp: new Date(rustLog.timestamp),\n }\n}\n\nfunction isQueryLog(fields: any): fields is QueryLogFields {\n return Boolean(fields.query)\n}\n", "import { setClassName } from '@prisma/internals'\n\nimport { PrismaClientRustErrorArgs } from '../engines/common/types/PrismaClientRustErrorArgs'\nimport { getBacktrace, isPanic } from '../engines/common/utils/log'\n\n/**\n * A generic Prisma Client Rust error.\n * This error is being exposed via the `prisma.$on('error')` interface\n */\nexport class PrismaClientRustError extends Error {\n clientVersion: string\n private _isPanic: boolean\n\n constructor({ clientVersion, error }: PrismaClientRustErrorArgs) {\n const backtrace = getBacktrace(error)\n super(backtrace ?? 'Unknown error')\n\n this._isPanic = isPanic(error)\n this.clientVersion = clientVersion\n }\n\n get [Symbol.toStringTag]() {\n return 'PrismaClientRustError'\n }\n\n public isPanic(): boolean {\n return this._isPanic\n }\n}\n\nsetClassName(PrismaClientRustError, 'PrismaClientRustError')\n", "import { Debug } from '@prisma/debug'\nimport { getEnginesPath } from '@prisma/engines'\nimport { BinaryTarget, getBinaryTargetForCurrentPlatform, getNodeAPIName } from '@prisma/get-platform'\nimport { chmodPlusX, ClientEngineType } from '@prisma/internals'\nimport fs from 'fs'\nimport path from 'path'\n\nimport { PrismaClientInitializationError } from '../../errors/PrismaClientInitializationError'\nimport { EngineConfig } from './Engine'\nimport { binaryTargetsWasIncorrectlyPinned } from './errors/engine-not-found/binaryTargetsWasIncorrectlyPinned'\nimport { bundlerHasTamperedWithEngineCopy } from './errors/engine-not-found/bundlerHasTamperedWithEngineCopy'\nimport { EngineNotFoundErrorInput } from './errors/engine-not-found/EngineNotFoundErrorInput'\nimport { nativeGeneratedOnDifferentPlatform } from './errors/engine-not-found/nativeGeneratedOnDifferentPlatform'\nimport { toolingHasTamperedWithEngineCopy } from './errors/engine-not-found/toolingHasTamperedWithEngineCopy'\n\nconst debug = Debug('prisma:client:engines:resolveEnginePath')\n\n// this name will be injected by esbuild when we build/bundle the runtime\nconst runtimeFileRegex = () => new RegExp(`runtime[\\\\\\\\/]${TARGET_BUILD_TYPE}\\\\.m?js$`)\n\n/**\n * Resolves the path of a given engine type (binary or library) and config. If\n * the engine could not be found, we will try to help the user by providing\n * helpful error messages.\n * @param engineType\n * @param config\n * @returns\n */\nexport async function resolveEnginePath(engineType: ClientEngineType, config: EngineConfig) {\n // if the user provided a custom path, or if engine previously found\n const prismaPath =\n {\n binary: process.env.PRISMA_QUERY_ENGINE_BINARY,\n library: process.env.PRISMA_QUERY_ENGINE_LIBRARY,\n }[engineType] ?? config.prismaPath\n\n if (prismaPath !== undefined) return prismaPath\n\n // otherwise we will search to find the nearest query engine file\n const { enginePath, searchedLocations } = await findEnginePath(engineType, config)\n\n debug('enginePath', enginePath)\n\n // if we find it, we apply +x chmod to the binary, cache, and return\n if (enginePath !== undefined && engineType === ClientEngineType.Binary) chmodPlusX(enginePath)\n if (enginePath !== undefined) return (config.prismaPath = enginePath)\n\n // if we don't find it, then we will throw helpful error messages\n const binaryTarget = await getBinaryTargetForCurrentPlatform()\n const generatorBinaryTargets = config.generator?.binaryTargets ?? []\n const hasNativeBinaryTarget = generatorBinaryTargets.some((bt) => bt.native)\n const hasMissingBinaryTarget = !generatorBinaryTargets.some((bt) => bt.value === binaryTarget)\n const clientHasBeenBundled = __filename.match(runtimeFileRegex()) === null // runtime name\n\n const errorInput: EngineNotFoundErrorInput = {\n searchedLocations,\n generatorBinaryTargets,\n generator: config.generator!,\n runtimeBinaryTarget: binaryTarget,\n queryEngineName: getQueryEngineName(engineType, binaryTarget),\n expectedLocation: path.relative(process.cwd(), config.dirname), // TODO pathToPosix\n errorStack: new Error().stack,\n }\n\n let errorMessage: string\n if (hasNativeBinaryTarget && hasMissingBinaryTarget) {\n errorMessage = nativeGeneratedOnDifferentPlatform(errorInput)\n } else if (hasMissingBinaryTarget) {\n errorMessage = binaryTargetsWasIncorrectlyPinned(errorInput)\n } else if (clientHasBeenBundled) {\n errorMessage = bundlerHasTamperedWithEngineCopy(errorInput)\n } else {\n errorMessage = toolingHasTamperedWithEngineCopy(errorInput)\n }\n\n throw new PrismaClientInitializationError(errorMessage, config.clientVersion!)\n}\n\n/**\n * Core logic for the resolution of the engine path. This function will search\n * for the engine in multiple locations, and return the first one that is found.\n * @param engineType\n * @param config\n * @returns\n */\nasync function findEnginePath(engineType: ClientEngineType, config: EngineConfig) {\n const binaryTarget = await getBinaryTargetForCurrentPlatform()\n const searchedLocations: string[] = []\n\n const searchLocations: string[] = [\n config.dirname, // generation directory\n path.resolve(__dirname, '..'), // generation directory one level up\n config.generator?.output?.value ?? __dirname, // custom generator local path\n path.resolve(__dirname, '../../../.prisma/client'), // dot prisma node_modules ???\n '/tmp/prisma-engines', // used for netlify\n config.cwd, // cwdPath, not cwd\n ]\n\n if (__filename.includes('resolveEnginePath')) {\n searchLocations.push(getEnginesPath()) // for old tests\n }\n\n for (const location of searchLocations) {\n const engineName = getQueryEngineName(engineType, binaryTarget)\n const enginePath = path.join(location, engineName)\n\n searchedLocations.push(location)\n if (fs.existsSync(enginePath)) {\n return { enginePath, searchedLocations }\n }\n }\n\n return { enginePath: undefined, searchedLocations }\n}\n\n/**\n * Utility function to get the name of the query engine file for a given engine\n * and a given binary target.\n * @param engineType\n * @param binaryTarget\n * @returns\n */\nexport function getQueryEngineName(engineType: ClientEngineType, binaryTarget: BinaryTarget) {\n if (engineType === ClientEngineType.Library) {\n return getNodeAPIName(binaryTarget, 'fs')\n } else {\n return `query-engine-${binaryTarget}${binaryTarget === 'windows' ? '.exe' : ''}`\n }\n}\n", "import { printGeneratorConfig } from '@prisma/internals'\n\nimport { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\n\nexport function addRuntimeToYourBinaryTargets(input: EngineNotFoundErrorInput) {\n const { runtimeBinaryTarget } = input\n\n return `Add \"${runtimeBinaryTarget}\" to \\`binaryTargets\\` in the \"schema.prisma\" file and run \\`prisma generate\\` after saving it:\n\n${getGeneratorBlockSuggestion(input)}`\n}\n\nfunction getGeneratorBlockSuggestion(input: EngineNotFoundErrorInput) {\n const { generator, generatorBinaryTargets, runtimeBinaryTarget } = input\n const suggestedBinaryTarget = { fromEnvVar: null, value: runtimeBinaryTarget }\n const binaryTargets = [...generatorBinaryTargets, suggestedBinaryTarget]\n\n return printGeneratorConfig({ ...generator, binaryTargets })\n}\n", "import { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\n\nexport function queryEngineCannotBeFound(input: EngineNotFoundErrorInput) {\n const { runtimeBinaryTarget } = input\n\n return `Prisma Client could not locate the Query Engine for runtime \"${runtimeBinaryTarget}\".`\n}\n", "import { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\n\nexport function theseLocationsHaveBeenSearched(input: EngineNotFoundErrorInput) {\n const { searchedLocations } = input\n\n const uniqueSearchLocations = [...new Set(searchedLocations)]\n const formattedSearchLocations = uniqueSearchLocations.map((location) => ` ${location}`).join('\\n')\n\n return `The following locations have been searched:\n${formattedSearchLocations}`\n}\n", "import { addRuntimeToYourBinaryTargets } from './addRuntimeToYourBinaryTargets'\nimport { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\nimport { queryEngineCannotBeFound } from './queryEngineCannotBeFound'\nimport { theseLocationsHaveBeenSearched } from './theseLocationsHaveBeenSearched'\n\nexport function binaryTargetsWasIncorrectlyPinned(input: EngineNotFoundErrorInput) {\n const { runtimeBinaryTarget } = input\n\n return `${queryEngineCannotBeFound(input)}\n\nThis happened because \\`binaryTargets\\` have been pinned, but the actual deployment also required \"${runtimeBinaryTarget}\".\n${addRuntimeToYourBinaryTargets(input)}\n\n${theseLocationsHaveBeenSearched(input)}`\n}\n", "export function weWouldAppreciateIfYouCouldShareInfo(prisly: string) {\n return `We would appreciate if you could take the time to share some information with us.\nPlease help us by answering a few questions: https://pris.ly/${prisly}`\n}\n", "import { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\n\nexport function howToFixEngineNotFoundNextjs(input: EngineNotFoundErrorInput) {\n const { errorStack } = input\n\n if (errorStack?.match(/\\/\\.next|\\/next@|\\/next\\//)) {\n return `\\n\\nWe detected that you are using Next.js, learn how to fix this: https://pris.ly/d/engine-not-found-nextjs.`\n }\n\n return ''\n}\n", "import { weWouldAppreciateIfYouCouldShareInfo } from '../weWouldAppreciateIfYouCouldShareInfo'\nimport { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\nimport { howToFixEngineNotFoundNextjs } from './howToFixEngineNotFoundNextjs'\nimport { queryEngineCannotBeFound } from './queryEngineCannotBeFound'\nimport { theseLocationsHaveBeenSearched } from './theseLocationsHaveBeenSearched'\n\nexport function bundlerHasTamperedWithEngineCopy(input: EngineNotFoundErrorInput) {\n const { queryEngineName } = input\n\n return `${queryEngineCannotBeFound(input)}${howToFixEngineNotFoundNextjs(input)}\n\nThis is likely caused by a bundler that has not copied \"${queryEngineName}\" next to the resulting bundle.\nEnsure that \"${queryEngineName}\" has been copied next to the bundle or in \"${input.expectedLocation}\".\n\n${weWouldAppreciateIfYouCouldShareInfo('engine-not-found-bundler-investigation')}\n\n${theseLocationsHaveBeenSearched(input)}`\n}\n", "import { addRuntimeToYourBinaryTargets } from './addRuntimeToYourBinaryTargets'\nimport { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\nimport { queryEngineCannotBeFound } from './queryEngineCannotBeFound'\nimport { theseLocationsHaveBeenSearched } from './theseLocationsHaveBeenSearched'\n\nexport function nativeGeneratedOnDifferentPlatform(input: EngineNotFoundErrorInput) {\n const { runtimeBinaryTarget, generatorBinaryTargets } = input\n const nativeBinaryTarget = generatorBinaryTargets.find((bt) => bt.native)\n\n return `${queryEngineCannotBeFound(input)}\n\nThis happened because Prisma Client was generated for \"${\n nativeBinaryTarget?.value ?? 'unknown'\n }\", but the actual deployment required \"${runtimeBinaryTarget}\".\n${addRuntimeToYourBinaryTargets(input)}\n\n${theseLocationsHaveBeenSearched(input)}`\n}\n", "import { weWouldAppreciateIfYouCouldShareInfo } from '../weWouldAppreciateIfYouCouldShareInfo'\nimport { EngineNotFoundErrorInput } from './EngineNotFoundErrorInput'\nimport { howToFixEngineNotFoundNextjs } from './howToFixEngineNotFoundNextjs'\nimport { queryEngineCannotBeFound } from './queryEngineCannotBeFound'\nimport { theseLocationsHaveBeenSearched } from './theseLocationsHaveBeenSearched'\n\nexport function toolingHasTamperedWithEngineCopy(input: EngineNotFoundErrorInput) {\n const { queryEngineName } = input\n\n return `${queryEngineCannotBeFound(input)}${howToFixEngineNotFoundNextjs(input)}\n\nThis is likely caused by tooling that has not copied \"${queryEngineName}\" to the deployment folder.\nEnsure that you ran \\`prisma generate\\` and that \"${queryEngineName}\" has been copied to \"${input.expectedLocation}\".\n\n${weWouldAppreciateIfYouCouldShareInfo('engine-not-found-tooling-investigation')}\n\n${theseLocationsHaveBeenSearched(input)}`\n}\n", "export function maskQuery(query?: string): string {\n if (!query) {\n return ''\n }\n return (\n query\n // replace all strings with X\n .replace(/\".*\"/g, '\"X\"')\n // replace all numbers with 5\n .replace(/[\\s:\\[]([+-]?([0-9]*[.])?[0-9]+)/g, (substr) => {\n return `${substr[0]}5`\n })\n )\n}\n", "/**\n * Removes the leading timestamps (from docker) and trailing ms (from debug)\n * @param logs logs to normalize\n */\nexport function normalizeLogs(logs: string): string {\n return logs\n .split('\\n')\n .map((l) => {\n return l\n .replace(/^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)\\s*/, '')\n .replace(/\\+\\d+\\s*ms$/, '')\n })\n .join('\\n')\n}\n", "import newGitHubIssueUrl from 'new-github-issue-url'\n\nexport function getGitHubIssueUrl({\n title,\n user = 'prisma',\n repo = 'prisma',\n template = 'bug_report.yml',\n body,\n}: {\n title: string\n user?: string\n repo?: string\n template?: string\n body?: string\n}): string {\n return newGitHubIssueUrl({\n user,\n repo,\n template,\n title,\n body,\n })\n}\n", "import { getLogs } from '@prisma/debug'\nimport { underline } from 'kleur/colors'\nimport stripAnsi from 'strip-ansi'\n\nimport type { ErrorWithLinkInput } from '../types/ErrorWithLinkInput'\nimport { maskQuery } from './maskQuery'\nimport { normalizeLogs } from './normalizeLogs'\nimport { getGitHubIssueUrl } from './util'\n\nexport function getErrorMessageWithLink({\n version,\n binaryTarget,\n title,\n description,\n engineVersion,\n database,\n query,\n}: ErrorWithLinkInput) {\n const gotLogs = getLogs(6000 - (query?.length ?? 0))\n const logs = normalizeLogs(stripAnsi(gotLogs))\n const moreInfo = description ? `# Description\\n\\`\\`\\`\\n${description}\\n\\`\\`\\`` : ''\n const body = stripAnsi(\n `Hi Prisma Team! My Prisma Client just crashed. This is the report:\n## Versions\n\n| Name | Version |\n|-----------------|--------------------|\n| Node | ${process.version?.padEnd(19)}| \n| OS | ${binaryTarget?.padEnd(19)}|\n| Prisma Client | ${version?.padEnd(19)}|\n| Query Engine | ${engineVersion?.padEnd(19)}|\n| Database | ${database?.padEnd(19)}|\n\n${moreInfo}\n\n## Logs\n\\`\\`\\`\n${logs}\n\\`\\`\\`\n\n## Client Snippet\n\\`\\`\\`ts\n// PLEASE FILL YOUR CODE SNIPPET HERE\n\\`\\`\\`\n\n## Schema\n\\`\\`\\`prisma\n// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE\n\\`\\`\\`\n\n## Prisma Engine Query\n\\`\\`\\`\n${query ? maskQuery(query) : ''}\n\\`\\`\\`\n`,\n )\n\n const url = getGitHubIssueUrl({ title, body })\n return `${title}\n\nThis is a non-recoverable error which probably happens when the Prisma Query Engine has a panic.\n\n${underline(url)}\n\nIf you want the Prisma team to look into it, please open the link above \uD83D\uDE4F\nTo increase the chance of success, please post your schema and a snippet of\nhow you used Prisma Client in the issue. \n`\n}\n", "import getStream from 'get-stream'\nimport type { Dispatcher, Pool } from 'undici'\nimport type { URL } from 'url'\n\nexport type Result<R> = {\n statusCode: Dispatcher.ResponseData['statusCode']\n headers: Dispatcher.ResponseData['headers']\n data: R\n}\n\n// because undici lazily loads llhttp wasm which bloats the memory\n// TODO: hopefully replace with `import` but that causes segfaults\nconst undici = () => require('undici')\n\n/**\n * Assertion function to make sure that we have a pool\n * @param pool\n */\nfunction assertHasPool<A>(pool: A): asserts pool is NonNullable<A> {\n if (pool === undefined) {\n throw new Error('Connection has not been opened')\n }\n}\n\n/**\n * Open an HTTP connection pool\n */\nexport class Connection {\n private _pool: Pool | undefined\n\n constructor() {}\n\n /**\n * Wrapper to handle HTTP error codes. HTTP errors don't trigger any\n * exceptions because it is optional to handle error status codes.\n * @param response to handle\n * @param handler to execute\n * @returns\n */\n static async onHttpError<R, HR>(response: Promise<Result<R>>, handler: (result: Result<R>) => HR) {\n const _response = await response\n\n if (_response.statusCode >= 400) {\n return handler(_response)\n }\n\n return _response\n }\n\n /**\n * Initiates a new connection pool\n * @param url\n * @param options\n * @returns\n */\n open(url: string | URL, options?: Pool.Options) {\n if (this._pool) return\n\n this._pool = new (undici().Pool)(url, {\n connections: 1000,\n keepAliveMaxTimeout: 600e3,\n headersTimeout: 0,\n bodyTimeout: 0,\n ...options,\n })\n }\n\n /**\n * Perform a request\n * @param method\n * @param endpoint\n * @param headers\n * @param body\n * @param parseResponse\n * @returns\n */\n async raw<R>(\n method: 'POST' | 'GET',\n endpoint: string,\n headers?: Dispatcher.DispatchOptions['headers'],\n body?: Dispatcher.DispatchOptions['body'],\n parseResponse = true,\n ): Promise<Result<R>> {\n assertHasPool(this._pool)\n\n const response = await this._pool.request({\n path: endpoint,\n method: method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body,\n })\n\n const bodyString = await getStream(response.body)\n\n return {\n statusCode: response.statusCode,\n headers: response.headers,\n data: parseResponse ? JSON.parse(bodyString) : bodyString,\n }\n }\n\n /**\n * Perform a POST request\n * @param endpoint\n * @param body\n * @param headers\n * @param parseResponse\n * @returns\n */\n post<R>(\n endpoint: string,\n body?: Dispatcher.DispatchOptions['body'],\n headers?: Dispatcher.DispatchOptions['headers'],\n parseResponse?: boolean,\n ) {\n return this.raw<R>('POST', endpoint, headers, body, parseResponse)\n }\n\n /**\n * Perform a GET request\n * @param endpoint\n * @param body\n * @param headers\n * @returns\n */\n get<R>(path: string, headers?: Dispatcher.DispatchOptions['headers']) {\n return this.raw<R>('GET', path, headers)\n }\n\n /**\n * Close the connections\n */\n close() {\n if (this._pool) {\n this._pool.close(() => {\n // ignore close errors\n })\n }\n\n this._pool = undefined\n }\n}\n", "import Decimal from 'decimal.js'\n\n// Copied over to avoid the heavy dependency on `@prisma/internals` with its\n// transitive dependencies that are not needed for other query plan executor\n// implementations outside of Prisma Client (e.g. test executor for query\n// engine tests and query plan executor for Accelerate) that also depend on\n// `@prisma/client-engine-runtime`.\nexport function assertNever(_: never, message: string): never {\n throw new Error(message)\n}\n\n/**\n * Checks if two objects are deeply equal, recursively checking all properties for strict equality.\n */\nexport function isDeepStrictEqual(a: unknown, b: unknown): boolean {\n return (\n a === b ||\n (a !== null &&\n b !== null &&\n typeof a === 'object' &&\n typeof b === 'object' &&\n Object.keys(a).length === Object.keys(b).length &&\n Object.keys(a).every((key) => isDeepStrictEqual(a[key], b[key])))\n )\n}\n\n/**\n * Checks if two objects representing the names and values of key columns match. A match is\n * defined by one of the sets of keys being a subset of the other. This function also\n * converts arguments to the types used by driver adapters if necessary.\n */\nexport function doKeysMatch(lhs: {}, rhs: {}): boolean {\n const lhsKeys = Object.keys(lhs)\n const rhsKeys = Object.keys(rhs)\n const smallerKeyList = lhsKeys.length < rhsKeys.length ? lhsKeys : rhsKeys\n\n return smallerKeyList.every((key) => {\n if (typeof lhs[key] === typeof rhs[key] && typeof lhs[key] !== 'object') {\n // fast path for primitive types\n return lhs[key] === rhs[key]\n }\n\n if (Decimal.isDecimal(lhs[key]) || Decimal.isDecimal(rhs[key])) {\n const lhsDecimal = asDecimal(lhs[key])\n const rhsDecimal = asDecimal(rhs[key])\n return lhsDecimal && rhsDecimal && lhsDecimal.equals(rhsDecimal)\n } else if (lhs[key] instanceof Uint8Array || rhs[key] instanceof Uint8Array) {\n const lhsBuffer = asBuffer(lhs[key])\n const rhsBuffer = asBuffer(rhs[key])\n return lhsBuffer && rhsBuffer && lhsBuffer.equals(rhsBuffer)\n } else if (lhs[key] instanceof Date || rhs[key] instanceof Date) {\n return asDate(lhs[key])?.getTime() === asDate(rhs[key])?.getTime()\n } else if (typeof lhs[key] === 'bigint' || typeof rhs[key] === 'bigint') {\n return asBigInt(lhs[key]) === asBigInt(rhs[key])\n } else if (typeof lhs[key] === 'number' || typeof rhs[key] === 'number') {\n return asNumber(lhs[key]) === asNumber(rhs[key])\n }\n\n return isDeepStrictEqual(lhs[key], rhs[key])\n })\n}\n\nfunction asDecimal(value: unknown): Decimal | undefined {\n if (Decimal.isDecimal(value)) {\n return value\n } else if (typeof value === 'number' || typeof value === 'string') {\n return new Decimal(value)\n } else {\n return\n }\n}\n\nfunction asBuffer(value: unknown): Buffer | undefined {\n if (Buffer.isBuffer(value)) {\n return value\n } else if (value instanceof Uint8Array) {\n return Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n } else if (typeof value === 'string') {\n return Buffer.from(value, 'base64')\n } else {\n return\n }\n}\n\nfunction asDate(value: unknown): Date | undefined {\n if (value instanceof Date) {\n return value\n } else if (typeof value === 'string' || typeof value === 'number') {\n return new Date(value)\n } else {\n return\n }\n}\n\nfunction asBigInt(value: unknown): bigint | undefined {\n if (typeof value === 'bigint') {\n return value\n } else if (typeof value === 'number' || typeof value === 'string') {\n return BigInt(value)\n } else {\n return\n }\n}\n\nfunction asNumber(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return value\n } else if (typeof value === 'string') {\n return Number(value)\n } else {\n return\n }\n}\n\n/**\n * `JSON.stringify` wrapper with custom replacer function that handles nested\n * BigInt and Uint8Array values.\n */\nexport function safeJsonStringify(obj: unknown): string {\n return JSON.stringify(obj, (_key, val) => {\n if (typeof val === 'bigint') {\n return val.toString()\n } else if (ArrayBuffer.isView(val)) {\n return Buffer.from(val.buffer, val.byteOffset, val.byteLength).toString('base64')\n }\n return val\n })\n}\n", "import { Decimal } from 'decimal.js'\n\nimport { assertNever } from './utils'\n\nexport type DateTaggedValue = { $type: 'DateTime'; value: string }\nexport type DecimalTaggedValue = { $type: 'Decimal'; value: string }\nexport type BytesTaggedValue = { $type: 'Bytes'; value: string }\nexport type BigIntTaggedValue = { $type: 'BigInt'; value: string }\nexport type FieldRefTaggedValue = { $type: 'FieldRef'; value: { _ref: string } }\nexport type EnumTaggedValue = { $type: 'Enum'; value: string }\nexport type JsonTaggedValue = { $type: 'Json'; value: string }\n\nexport type JsonInputTaggedValue =\n | DateTaggedValue\n | DecimalTaggedValue\n | BytesTaggedValue\n | BigIntTaggedValue\n | FieldRefTaggedValue\n | JsonTaggedValue\n | EnumTaggedValue\n\nexport type JsonOutputTaggedValue =\n | DateTaggedValue\n | DecimalTaggedValue\n | BytesTaggedValue\n | BigIntTaggedValue\n | JsonTaggedValue\n\nexport type JsOutputValue =\n | null\n | string\n | number\n | boolean\n | bigint\n | Uint8Array\n | Date\n | Decimal\n | JsOutputValue[]\n | { [key: string]: JsOutputValue }\n\nexport function normalizeJsonProtocolValues(result: unknown): unknown {\n if (result === null) {\n return result\n }\n\n if (Array.isArray(result)) {\n return result.map(normalizeJsonProtocolValues)\n }\n\n if (typeof result === 'object') {\n if (isTaggedValue(result)) {\n return normalizeTaggedValue(result)\n }\n\n if (ArrayBuffer.isView(result)) {\n const buffer = Buffer.from(result.buffer, result.byteOffset, result.byteLength)\n return buffer.toString('base64')\n }\n\n // avoid mapping class instances\n if (result.constructor !== null && result.constructor.name !== 'Object') {\n return result\n }\n\n return mapObjectValues(result, normalizeJsonProtocolValues)\n }\n\n return result\n}\n\nfunction isTaggedValue(value: unknown): value is JsonOutputTaggedValue {\n return value !== null && typeof value == 'object' && typeof value['$type'] === 'string'\n}\n\n/**\n * Normalizes the value inside a tagged value to match the snapshots in tests.\n * Sometimes there are multiple equally valid representations of the same value\n * (e.g. a decimal string may contain an arbitrary number of trailing zeros,\n * datetime strings may specify the UTC offset as either '+00:00' or 'Z', etc).\n * Since these differences have no effect on the actual values received from the\n * Prisma Client once the response is deserialized to JavaScript values, we don't\n * spend extra CPU cycles on normalizing them in the data mapper. Instead, we\n * patch and normalize them here to ensure they are consistent with the snapshots\n * in the query engine tests.\n */\nfunction normalizeTaggedValue({ $type, value }: JsonOutputTaggedValue): JsonOutputTaggedValue {\n switch ($type) {\n case 'BigInt':\n return { $type, value: String(value) }\n case 'Bytes':\n return { $type, value: Buffer.from(value, 'base64').toString('base64') }\n case 'DateTime':\n return { $type, value: new Date(value).toISOString() }\n case 'Decimal':\n return { $type, value: String(new Decimal(value)) }\n case 'Json':\n return { $type, value: JSON.stringify(JSON.parse(value)) }\n default:\n assertNever(value, 'Unknown tagged value')\n }\n}\n\nfunction mapObjectValues<K extends PropertyKey, T, U>(\n object: Record<K, T>,\n mapper: (value: T, key: K) => U,\n): Record<K, U> {\n const result = {} as Record<K, U>\n\n for (const key of Object.keys(object)) {\n result[key] = mapper(object[key] as T, key as K)\n }\n\n return result\n}\n\nexport function deserializeJsonResponse(result: unknown): unknown {\n if (result === null) {\n return result\n }\n\n if (Array.isArray(result)) {\n return result.map(deserializeJsonResponse)\n }\n\n if (typeof result === 'object') {\n if (isTaggedValue(result)) {\n return deserializeTaggedValue(result)\n }\n\n // avoid mapping class instances\n if (result.constructor !== null && result.constructor.name !== 'Object') {\n return result\n }\n\n return mapObjectValues(result, deserializeJsonResponse)\n }\n\n return result\n}\n\nfunction deserializeTaggedValue({ $type, value }: JsonOutputTaggedValue): JsOutputValue {\n switch ($type) {\n case 'BigInt':\n return BigInt(value)\n case 'Bytes': {\n const { buffer, byteOffset, byteLength } = Buffer.from(value, 'base64')\n return new Uint8Array(buffer, byteOffset, byteLength)\n }\n case 'DateTime':\n return new Date(value)\n case 'Decimal':\n return new Decimal(value)\n case 'Json':\n return JSON.parse(value)\n default:\n assertNever(value, 'Unknown tagged value')\n }\n}\n", "{\n \"name\": \"@prisma/client\",\n \"version\": \"6.16.1\",\n \"description\": \"Prisma Client is an auto-generated, type-safe and modern JavaScript/TypeScript ORM for Node.js that's tailored to your data. Supports PostgreSQL, CockroachDB, MySQL, MariaDB, SQL Server, SQLite & MongoDB databases.\",\n \"keywords\": [\n \"ORM\",\n \"Prisma\",\n \"prisma2\",\n \"Prisma Client\",\n \"client\",\n \"query\",\n \"query-builder\",\n \"database\",\n \"db\",\n \"JavaScript\",\n \"JS\",\n \"TypeScript\",\n \"TS\",\n \"SQL\",\n \"SQLite\",\n \"pg\",\n \"Postgres\",\n \"PostgreSQL\",\n \"CockroachDB\",\n \"MySQL\",\n \"MariaDB\",\n \"MSSQL\",\n \"SQL Server\",\n \"SQLServer\",\n \"MongoDB\",\n \"react-native\"\n ],\n \"main\": \"default.js\",\n \"types\": \"default.d.ts\",\n \"browser\": \"index-browser.js\",\n \"exports\": {\n \"./package.json\": \"./package.json\",\n \".\": {\n \"require\": {\n \"types\": \"./default.d.ts\",\n \"node\": \"./default.js\",\n \"edge-light\": \"./default.js\",\n \"workerd\": \"./default.js\",\n \"worker\": \"./default.js\",\n \"browser\": \"./index-browser.js\"\n },\n \"import\": {\n \"types\": \"./default.d.ts\",\n \"node\": \"./default.js\",\n \"edge-light\": \"./default.js\",\n \"workerd\": \"./default.js\",\n \"worker\": \"./default.js\",\n \"browser\": \"./index-browser.js\"\n },\n \"default\": \"./default.js\"\n },\n \"./edge\": {\n \"types\": \"./edge.d.ts\",\n \"require\": \"./edge.js\",\n \"import\": \"./edge.js\",\n \"default\": \"./edge.js\"\n },\n \"./react-native\": {\n \"types\": \"./react-native.d.ts\",\n \"require\": \"./react-native.js\",\n \"import\": \"./react-native.js\",\n \"default\": \"./react-native.js\"\n },\n \"./extension\": {\n \"types\": \"./extension.d.ts\",\n \"require\": \"./extension.js\",\n \"import\": \"./extension.js\",\n \"default\": \"./extension.js\"\n },\n \"./index-browser\": {\n \"types\": \"./index.d.ts\",\n \"require\": \"./index-browser.js\",\n \"import\": \"./index-browser.js\",\n \"default\": \"./index-browser.js\"\n },\n \"./index\": {\n \"types\": \"./index.d.ts\",\n \"require\": \"./index.js\",\n \"import\": \"./index.js\",\n \"default\": \"./index.js\"\n },\n \"./wasm\": {\n \"types\": \"./wasm.d.ts\",\n \"require\": \"./wasm.js\",\n \"import\": \"./wasm.mjs\",\n \"default\": \"./wasm.mjs\"\n },\n \"./runtime/client\": {\n \"types\": \"./runtime/client.d.ts\",\n \"node\": {\n \"require\": \"./runtime/client.js\",\n \"default\": \"./runtime/client.js\"\n },\n \"require\": \"./runtime/client.js\",\n \"import\": \"./runtime/client.mjs\",\n \"default\": \"./runtime/client.mjs\"\n },\n \"./runtime/library\": {\n \"types\": \"./runtime/library.d.ts\",\n \"require\": \"./runtime/library.js\",\n \"import\": \"./runtime/library.mjs\",\n \"default\": \"./runtime/library.mjs\"\n },\n \"./runtime/binary\": {\n \"types\": \"./runtime/binary.d.ts\",\n \"require\": \"./runtime/binary.js\",\n \"import\": \"./runtime/binary.mjs\",\n \"default\": \"./runtime/binary.mjs\"\n },\n \"./runtime/wasm-engine-edge\": {\n \"types\": \"./runtime/wasm-engine-edge.d.ts\",\n \"require\": \"./runtime/wasm-engine-edge.js\",\n \"import\": \"./runtime/wasm-engine-edge.mjs\",\n \"default\": \"./runtime/wasm-engine-edge.mjs\"\n },\n \"./runtime/wasm-compiler-edge\": {\n \"types\": \"./runtime/wasm-compiler-edge.d.ts\",\n \"require\": \"./runtime/wasm-compiler-edge.js\",\n \"import\": \"./runtime/wasm-compiler-edge.mjs\",\n \"default\": \"./runtime/wasm-compiler-edge.mjs\"\n },\n \"./runtime/edge\": {\n \"types\": \"./runtime/edge.d.ts\",\n \"require\": \"./runtime/edge.js\",\n \"import\": \"./runtime/edge-esm.js\",\n \"default\": \"./runtime/edge-esm.js\"\n },\n \"./runtime/react-native\": {\n \"types\": \"./runtime/react-native.d.ts\",\n \"require\": \"./runtime/react-native.js\",\n \"import\": \"./runtime/react-native.js\",\n \"default\": \"./runtime/react-native.js\"\n },\n \"./runtime/index-browser\": {\n \"types\": \"./runtime/index-browser.d.ts\",\n \"require\": \"./runtime/index-browser.js\",\n \"import\": \"./runtime/index-browser.mjs\",\n \"default\": \"./runtime/index-browser.mjs\"\n },\n \"./generator-build\": {\n \"require\": \"./generator-build/index.js\",\n \"import\": \"./generator-build/index.js\",\n \"default\": \"./generator-build/index.js\"\n },\n \"./sql\": {\n \"require\": {\n \"types\": \"./sql.d.ts\",\n \"node\": \"./sql.js\",\n \"default\": \"./sql.js\"\n },\n \"import\": {\n \"types\": \"./sql.d.ts\",\n \"node\": \"./sql.mjs\",\n \"default\": \"./sql.mjs\"\n },\n \"default\": \"./sql.js\"\n },\n \"./*\": \"./*\"\n },\n \"license\": \"Apache-2.0\",\n \"engines\": {\n \"node\": \">=18.18\"\n },\n \"homepage\": \"https://www.prisma.io\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/prisma/prisma.git\",\n \"directory\": \"packages/client\"\n },\n \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n \"bugs\": \"https://github.com/prisma/prisma/issues\",\n \"scripts\": {\n \"dev\": \"DEV=true tsx helpers/build.ts\",\n \"build\": \"tsx helpers/build.ts\",\n \"test\": \"dotenv -e ../../.db.env -- jest --silent\",\n \"test:e2e\": \"dotenv -e ../../.db.env -- tsx tests/e2e/_utils/run.ts\",\n \"test:functional\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts\",\n \"test:functional:client\": \"pnpm run test:functional --client-runtime client --engine-type client --runInBand --json --outputFile tests/functional/results.json\",\n \"test:memory\": \"dotenv -e ../../.db.env -- tsx helpers/memory-tests.ts\",\n \"test:functional:code\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts --no-types\",\n \"test:functional:types\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts --types-only\",\n \"test-notypes\": \"dotenv -e ../../.db.env -- jest --testPathIgnorePatterns src/__tests__/types/types.test.ts\",\n \"generate\": \"node scripts/postinstall.js\",\n \"postinstall\": \"node scripts/postinstall.js\",\n \"prepublishOnly\": \"pnpm run build\",\n \"new-test\": \"tsx ./helpers/new-test/new-test.ts\"\n },\n \"files\": [\n \"README.md\",\n \"runtime\",\n \"scripts\",\n \"generator-build\",\n \"edge.js\",\n \"edge.d.ts\",\n \"wasm.js\",\n \"wasm.d.ts\",\n \"index.js\",\n \"index.d.ts\",\n \"react-native.js\",\n \"react-native.d.ts\",\n \"default.js\",\n \"default.d.ts\",\n \"index-browser.js\",\n \"extension.js\",\n \"extension.d.ts\",\n \"sql.d.ts\",\n \"sql.js\",\n \"sql.mjs\"\n ],\n \"devDependencies\": {\n \"@cloudflare/workers-types\": \"^4.20250408.0\",\n \"@codspeed/benchmark.js-plugin\": \"4.0.0\",\n \"@faker-js/faker\": \"9.6.0\",\n \"@fast-check/jest\": \"2.0.3\",\n \"@hono/node-server\": \"1.19.0\",\n \"@inquirer/prompts\": \"7.3.3\",\n \"@jest/create-cache-key-function\": \"29.7.0\",\n \"@jest/globals\": \"29.7.0\",\n \"@jest/test-sequencer\": \"29.7.0\",\n \"@libsql/client\": \"0.8.1\",\n \"@neondatabase/serverless\": \"0.10.2\",\n \"@opentelemetry/api\": \"1.9.0\",\n \"@opentelemetry/context-async-hooks\": \"2.0.0\",\n \"@opentelemetry/instrumentation\": \"0.57.2\",\n \"@opentelemetry/resources\": \"1.30.1\",\n \"@opentelemetry/sdk-trace-base\": \"1.30.1\",\n \"@opentelemetry/semantic-conventions\": \"1.30.0\",\n \"@planetscale/database\": \"1.19.0\",\n \"@prisma/adapter-better-sqlite3\": \"workspace:*\",\n \"@prisma/adapter-d1\": \"workspace:*\",\n \"@prisma/adapter-libsql\": \"workspace:*\",\n \"@prisma/adapter-mariadb\": \"workspace:*\",\n \"@prisma/adapter-mssql\": \"workspace:*\",\n \"@prisma/adapter-neon\": \"workspace:*\",\n \"@prisma/adapter-pg\": \"workspace:*\",\n \"@prisma/adapter-planetscale\": \"workspace:*\",\n \"@prisma/client-common\": \"workspace:*\",\n \"@prisma/client-engine-runtime\": \"workspace:*\",\n \"@prisma/client-generator-js\": \"workspace:*\",\n \"@prisma/client-generator-ts\": \"workspace:*\",\n \"@prisma/config\": \"workspace:*\",\n \"@prisma/debug\": \"workspace:*\",\n \"@prisma/dmmf\": \"workspace:*\",\n \"@prisma/driver-adapter-utils\": \"workspace:*\",\n \"@prisma/engines\": \"workspace:*\",\n \"@prisma/engines-version\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/fetch-engine\": \"workspace:*\",\n \"@prisma/generator\": \"workspace:*\",\n \"@prisma/generator-helper\": \"workspace:*\",\n \"@prisma/get-platform\": \"workspace:*\",\n \"@prisma/instrumentation\": \"workspace:*\",\n \"@prisma/internals\": \"workspace:*\",\n \"@prisma/migrate\": \"workspace:*\",\n \"@prisma/mini-proxy\": \"0.9.5\",\n \"@prisma/query-compiler-wasm\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/query-engine-wasm\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/query-plan-executor\": \"workspace:*\",\n \"@prisma/ts-builders\": \"workspace:*\",\n \"@snaplet/copycat\": \"6.0.0\",\n \"@swc-node/register\": \"1.10.9\",\n \"@swc/core\": \"1.11.5\",\n \"@swc/jest\": \"0.2.37\",\n \"@timsuchanek/copy\": \"1.4.5\",\n \"@types/debug\": \"4.1.12\",\n \"@types/fs-extra\": \"11.0.4\",\n \"@types/jest\": \"29.5.14\",\n \"@types/js-levenshtein\": \"1.1.3\",\n \"@types/mssql\": \"9.1.5\",\n \"@types/node\": \"18.19.76\",\n \"@types/pg\": \"8.11.11\",\n \"arg\": \"5.0.2\",\n \"benchmark\": \"2.1.4\",\n \"cookie-es\": \"2.0.0\",\n \"decimal.js\": \"10.5.0\",\n \"execa\": \"5.1.1\",\n \"expect-type\": \"1.2.2\",\n \"fs-extra\": \"11.3.0\",\n \"get-stream\": \"6.0.1\",\n \"globby\": \"11.1.0\",\n \"indent-string\": \"4.0.0\",\n \"jest\": \"29.7.0\",\n \"jest-extended\": \"4.0.2\",\n \"jest-junit\": \"16.0.0\",\n \"jest-serializer-ansi-escapes\": \"4.0.0\",\n \"jest-snapshot\": \"29.7.0\",\n \"js-levenshtein\": \"1.1.6\",\n \"kleur\": \"4.1.5\",\n \"klona\": \"2.0.6\",\n \"mariadb\": \"3.4.5\",\n \"memfs\": \"4.17.2\",\n \"mssql\": \"11.0.1\",\n \"new-github-issue-url\": \"0.2.1\",\n \"p-retry\": \"4.6.2\",\n \"pg\": \"8.14.1\",\n \"resolve\": \"1.22.10\",\n \"rimraf\": \"6.0.1\",\n \"simple-statistics\": \"7.8.8\",\n \"sort-keys\": \"5.1.0\",\n \"source-map-support\": \"0.5.21\",\n \"sql-template-tag\": \"5.2.1\",\n \"stacktrace-parser\": \"0.1.11\",\n \"strip-ansi\": \"7.1.0\",\n \"strip-indent\": \"4.0.0\",\n \"tempy\": \"3.0.0\",\n \"ts-pattern\": \"5.6.2\",\n \"tsd\": \"0.31.2\",\n \"typescript\": \"5.4.5\",\n \"undici\": \"7.4.0\",\n \"zx\": \"8.4.1\"\n },\n \"peerDependencies\": {\n \"prisma\": \"*\",\n \"typescript\": \">=5.1.0\"\n },\n \"peerDependenciesMeta\": {\n \"prisma\": {\n \"optional\": true\n },\n \"typescript\": {\n \"optional\": true\n }\n },\n \"sideEffects\": false\n}", "// https://runtime-keys.proposal.wintercg.org/\nexport type RuntimeName = 'workerd' | 'deno' | 'netlify' | 'node' | 'bun' | 'edge-light' | '' /* unknown */\n\n/**\n * Indicates if running in Node.js or a Node.js compatible runtime.\n *\n * **Note:** When running code in Bun and Deno with Node.js compatibility mode, `isNode` flag will be also `true`, indicating running in a Node.js compatible runtime.\n */\nconst isNode = () => globalThis.process?.release?.name === 'node'\n\n/**\n * Indicates if running in Bun runtime.\n */\nconst isBun = () => !!globalThis.Bun || !!globalThis.process?.versions?.bun\n\n/**\n * Indicates if running in Deno runtime.\n */\nconst isDeno = () => !!globalThis.Deno\n\n/**\n * Indicates if running in Netlify runtime.\n */\nconst isNetlify = () => typeof globalThis.Netlify === 'object'\n\n/**\n * Indicates if running in EdgeLight (Vercel Edge) runtime.\n */\nconst isEdgeLight = () => typeof globalThis.EdgeRuntime === 'object'\n\n/**\n * Indicates if running in Cloudflare Workers runtime.\n * See: https://developers.cloudflare.com/workers/runtime-apis/web-standards/#navigatoruseragent\n */\nconst isWorkerd = () => globalThis.navigator?.userAgent === 'Cloudflare-Workers'\n\nfunction detectRuntime(): RuntimeName {\n // Note: we're currently not taking 'fastly' into account. Why?\n const runtimeChecks = [\n [isNetlify, 'netlify'],\n [isEdgeLight, 'edge-light'],\n [isWorkerd, 'workerd'],\n [isDeno, 'deno'],\n [isBun, 'bun'],\n [isNode, 'node'],\n ] as const\n\n const detectedRuntime =\n runtimeChecks\n // TODO: Transforming destructuring to the configured target environment ('chrome58', 'edge16', 'firefox57', 'safari11') is not supported yet,\n // so we can't write the following code yet:\n // ```\n // .flatMap(([isCurrentRuntime, runtime]) => isCurrentRuntime() ? [runtime] : [])\n // ```\n .flatMap((check) => (check[0]() ? [check[1]] : []))\n .at(0) ?? ''\n\n return detectedRuntime\n}\n\nconst runtimesPrettyNames = {\n node: 'Node.js',\n workerd: 'Cloudflare Workers',\n deno: 'Deno and Deno Deploy',\n netlify: 'Netlify Edge Functions',\n 'edge-light':\n 'Edge Runtime (Vercel Edge Functions, Vercel Edge Middleware, Next.js (Pages Router) Edge API Routes, Next.js (App Router) Edge Route Handlers or Next.js Middleware)',\n} as const\n\ntype GetRuntimeOutput = {\n id: RuntimeName\n prettyName: string\n isEdge: boolean\n}\n\nexport function getRuntime(): GetRuntimeOutput {\n const runtimeId = detectRuntime()\n\n return {\n id: runtimeId,\n // Fallback to the runtimeId if the runtime is not in the list\n prettyName: runtimesPrettyNames[runtimeId] || runtimeId,\n isEdge: ['workerd', 'deno', 'netlify', 'edge-light'].includes(runtimeId),\n }\n}\n", "import { GetPrismaClientConfig } from '@prisma/client-common'\n\nimport { Datasources } from '../../getPrismaClient'\nimport { getRuntime } from '../../utils/getRuntime'\nimport { PrismaClientInitializationError } from '../errors/PrismaClientInitializationError'\n\nexport function resolveDatasourceUrl({\n inlineDatasources,\n overrideDatasources,\n env,\n clientVersion,\n}: {\n inlineDatasources: GetPrismaClientConfig['inlineDatasources']\n overrideDatasources: Datasources\n env: Record<string, string | undefined>\n clientVersion: string\n}) {\n let resolvedUrl: string | undefined\n const datasourceName = Object.keys(inlineDatasources)[0]\n const datasourceUrl = inlineDatasources[datasourceName]?.url\n const overrideUrl = overrideDatasources[datasourceName]?.url\n\n if (datasourceName === undefined) {\n resolvedUrl = undefined\n } else if (overrideUrl) {\n resolvedUrl = overrideUrl\n } else if (datasourceUrl?.value) {\n resolvedUrl = datasourceUrl.value\n } else if (datasourceUrl?.fromEnvVar) {\n resolvedUrl = env[datasourceUrl.fromEnvVar]\n }\n\n // env var is set for use but url is undefined\n if (datasourceUrl?.fromEnvVar !== undefined && resolvedUrl === undefined) {\n if (\n (TARGET_BUILD_TYPE === 'edge' ||\n TARGET_BUILD_TYPE === 'wasm-engine-edge' ||\n TARGET_BUILD_TYPE === 'wasm-compiler-edge') &&\n getRuntime().id === 'workerd'\n ) {\n throw new PrismaClientInitializationError(\n `error: Environment variable not found: ${datasourceUrl.fromEnvVar}.\n\nIn Cloudflare module Workers, environment variables are available only in the Worker's \\`env\\` parameter of \\`fetch\\`.\nTo solve this, provide the connection string directly: https://pris.ly/d/cloudflare-datasource-url`,\n clientVersion,\n )\n }\n\n // error matches as much as possible the usual engine error\n throw new PrismaClientInitializationError(\n `error: Environment variable not found: ${datasourceUrl.fromEnvVar}.`,\n clientVersion,\n )\n }\n\n // should not happen: no override, no env, no direct value\n if (resolvedUrl === undefined) {\n throw new PrismaClientInitializationError(\n `error: Missing URL environment variable, value, or override.`,\n clientVersion,\n )\n }\n\n return resolvedUrl\n}\n", "export interface PrismaClientErrorInfo {\n clientVersion: string\n cause?: Error\n}\n\nexport abstract class PrismaClientError extends Error {\n public abstract name: string\n public abstract code: string\n public clientVersion: string\n public cause?: Error // like https://github.com/es-shims/error-cause\n\n constructor(message: string, info: PrismaClientErrorInfo) {\n super(message)\n\n this.clientVersion = info.clientVersion\n this.cause = info.cause\n }\n\n get [Symbol.toStringTag]() {\n return this.name\n }\n}\n", "import { PrismaClientError, type PrismaClientErrorInfo } from '../../../errors/PrismaClientError'\n\nexport interface DataProxyErrorInfo extends PrismaClientErrorInfo {\n isRetryable?: boolean\n}\n\nexport abstract class DataProxyError extends PrismaClientError {\n isRetryable: boolean\n\n constructor(message: string, info: DataProxyErrorInfo) {\n super(message, info)\n\n this.isRetryable = info.isRetryable ?? true\n }\n}\n", "export function setRetryable<T>(info: T, retryable: boolean) {\n return {\n ...info,\n isRetryable: retryable,\n }\n}\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyErrorInfo } from './DataProxyError'\nimport { DataProxyError } from './DataProxyError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface InvalidDatasourceErrorInfo extends DataProxyErrorInfo {}\nexport class InvalidDatasourceError extends DataProxyError {\n public name = 'InvalidDatasourceError'\n public code = 'P6001'\n\n constructor(message: string, info: InvalidDatasourceErrorInfo) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(InvalidDatasourceError, 'InvalidDatasourceError')\n", "import { isPrismaPostgresDev, PRISMA_POSTGRES_PROTOCOL } from '@prisma/internals'\n\nimport { resolveDatasourceUrl } from '../../../init/resolveDatasourceUrl'\nimport { InvalidDatasourceError } from '../../data-proxy/errors/InvalidDatasourceError'\nimport { EngineConfig } from '../Engine'\n\nexport interface GetUrlAndApiKeyOptions {\n clientVersion: string\n inlineDatasources: EngineConfig['inlineDatasources']\n overrideDatasources: EngineConfig['overrideDatasources']\n env: Record<string, string | undefined>\n}\n\nexport interface UrlAndApiKey {\n url: HttpUrl\n apiKey: string\n}\n\nexport type HttpUrl = URL & { protocol: 'http' | 'https' }\n\nexport function getUrlAndApiKey(options: GetUrlAndApiKeyOptions): UrlAndApiKey {\n const errorInfo = { clientVersion: options.clientVersion }\n const dsName = Object.keys(options.inlineDatasources)[0]\n const serviceURL = resolveDatasourceUrl({\n inlineDatasources: options.inlineDatasources,\n overrideDatasources: options.overrideDatasources,\n clientVersion: options.clientVersion,\n env: { ...options.env, ...(typeof process !== 'undefined' ? process.env : {}) },\n })\n\n let url: URL\n try {\n url = new URL(serviceURL)\n } catch {\n throw new InvalidDatasourceError(\n `Error validating datasource \\`${dsName}\\`: the URL must start with the protocol \\`prisma://\\``,\n errorInfo,\n )\n }\n\n const { protocol, searchParams } = url\n\n if (protocol !== 'prisma:' && protocol !== PRISMA_POSTGRES_PROTOCOL) {\n throw new InvalidDatasourceError(\n `Error validating datasource \\`${dsName}\\`: the URL must start with the protocol \\`prisma://\\` or \\`prisma+postgres://\\``,\n errorInfo,\n )\n }\n\n const apiKey = searchParams.get('api_key')\n if (apiKey === null || apiKey.length < 1) {\n throw new InvalidDatasourceError(\n `Error validating datasource \\`${dsName}\\`: the URL must contain a valid API key`,\n errorInfo,\n )\n }\n\n // To simplify things, `prisma dev`, for now, will not support HTTPS.\n // In the future, if HTTPS for `prisma dev` becomes a thing, we'll need this line to be dynamic.\n let httpScheme = isPrismaPostgresDev(url) ? 'http:' : 'https:'\n\n if (process.env.TEST_CLIENT_ENGINE_REMOTE_EXECUTOR && url.searchParams.has('use_http')) {\n httpScheme = 'http:'\n }\n\n // Switching from `prisma:` or `prisma+postgres:` to `http:` or `https:` by\n // assigning to the `protocol` property is not allowed by the WHATWG URL API,\n // it would be silently ignored without throwing an error. We have to manually\n // update the protocol via string replacement.\n const httpUrl = new URL(url.href.replace(protocol, httpScheme)) as HttpUrl\n\n return { apiKey, url: httpUrl }\n}\n", "import type { QueryEngineLogLevel } from '@prisma/client-common'\nimport { enginesVersion } from '@prisma/engines-version'\nimport type { TracingHelper } from '@prisma/internals'\n\nexport type AccelerateHeaders = {\n 'Content-Type': string\n 'Prisma-Engine-Hash': string\n 'Prisma-Engine-Version': string\n 'X-Capture-Telemetry'?: string\n 'X-Transaction-Id'?: string\n Accept: string\n Authorization: string\n traceparent?: string\n}\n\ntype HeaderBuilderOptions = {\n traceparent?: string\n transactionId?: string\n}\n\nexport class HeaderBuilder {\n readonly apiKey: string\n readonly tracingHelper: TracingHelper\n readonly logLevel: QueryEngineLogLevel\n readonly logQueries: boolean | undefined\n readonly engineHash: string\n\n constructor({\n apiKey,\n tracingHelper,\n logLevel,\n logQueries,\n engineHash,\n }: {\n apiKey: string\n tracingHelper: TracingHelper\n logLevel: QueryEngineLogLevel\n logQueries: boolean | undefined\n engineHash: string\n }) {\n this.apiKey = apiKey\n this.tracingHelper = tracingHelper\n this.logLevel = logLevel\n this.logQueries = logQueries\n this.engineHash = engineHash\n }\n\n build({ traceparent, transactionId }: HeaderBuilderOptions = {}): AccelerateHeaders {\n const headers: AccelerateHeaders = {\n Accept: 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Prisma-Engine-Hash': this.engineHash,\n 'Prisma-Engine-Version': enginesVersion,\n }\n\n if (this.tracingHelper.isEnabled()) {\n headers.traceparent = traceparent ?? this.tracingHelper.getTraceParent()\n }\n\n if (transactionId) {\n headers['X-Transaction-Id'] = transactionId\n }\n\n const captureTelemetry = this.#buildCaptureSettings()\n\n if (captureTelemetry.length > 0) {\n headers['X-Capture-Telemetry'] = captureTelemetry.join(', ')\n }\n\n return headers\n }\n\n #buildCaptureSettings(): string[] {\n const captureTelemetry: string[] = []\n\n if (this.tracingHelper.isEnabled()) {\n captureTelemetry.push('tracing')\n }\n\n if (this.logLevel) {\n captureTelemetry.push(this.logLevel)\n }\n\n if (this.logQueries) {\n captureTelemetry.push('query')\n }\n\n return captureTelemetry\n }\n}\n", "export type EngineTimestamp = [seconds: number, nanoseconds: number]\n\n/**\n * Converts engine timestamp to JS timestamp, as accepted by `Date` constructor\n */\nexport function convertEngineTimestamp(timestamp: EngineTimestamp): number {\n return timestamp[0] * 1e3 + timestamp[1] / 1e6\n}\n\n/**\n * Parses a `Date` from engine timestamp\n */\nexport function dateFromEngineTimestamp(timestamp: EngineTimestamp): Date {\n return new Date(convertEngineTimestamp(timestamp))\n}\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyErrorInfo } from './DataProxyError'\nimport { DataProxyError } from './DataProxyError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface ForcedRetryErrorInfo extends DataProxyErrorInfo {}\n\nexport class ForcedRetryError extends DataProxyError {\n public name = 'ForcedRetryError'\n public code = 'P5001'\n\n constructor(info: ForcedRetryErrorInfo) {\n super('This request must be retried', setRetryable(info, true))\n }\n}\nsetClassName(ForcedRetryError, 'ForcedRetryError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyErrorInfo } from './DataProxyError'\nimport { DataProxyError } from './DataProxyError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface NotImplementedYetErrorInfo extends DataProxyErrorInfo {}\n\nexport class NotImplementedYetError extends DataProxyError {\n public name = 'NotImplementedYetError'\n public code = 'P5004'\n\n constructor(message: string, info: NotImplementedYetErrorInfo) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(NotImplementedYetError, 'NotImplementedYetError')\n", "import type { DataProxyErrorInfo } from './DataProxyError'\nimport { DataProxyError } from './DataProxyError'\n\nexport interface DataProxyAPIErrorInfo extends DataProxyErrorInfo {\n response: Response\n}\n\nexport abstract class DataProxyAPIError extends DataProxyError {\n response: Response\n\n constructor(message: string, info: DataProxyAPIErrorInfo) {\n super(message, info)\n\n this.response = info.response\n\n // add request id to response message if it is present in the response header\n const requestId = this.response.headers.get('prisma-request-id')\n if (requestId) {\n const messageSuffix = `(The request id was: ${requestId})`\n this.message = this.message + ' ' + messageSuffix\n }\n }\n}\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface SchemaMissingErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport class SchemaMissingError extends DataProxyAPIError {\n public name = 'SchemaMissingError'\n public code = 'P5005'\n\n constructor(info: DataProxyAPIErrorInfo) {\n super('Schema needs to be uploaded', setRetryable(info, true))\n }\n}\nsetClassName(SchemaMissingError, 'SchemaMissingError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface BadRequestErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const BAD_REQUEST_DEFAULT_MESSAGE = 'This request could not be understood by the server'\n\nexport class BadRequestError extends DataProxyAPIError {\n public name = 'BadRequestError'\n public code = 'P5000'\n\n constructor(info: BadRequestErrorInfo, message?: string, code?: string) {\n super(message || BAD_REQUEST_DEFAULT_MESSAGE, setRetryable(info, false))\n if (code) this.code = code\n }\n}\nsetClassName(BadRequestError, 'BadRequestError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface HealthcheckTimeoutErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport class HealthcheckTimeoutError extends DataProxyAPIError {\n public name = 'HealthcheckTimeoutError'\n public code = 'P5013'\n public logs: string[]\n\n constructor(info: HealthcheckTimeoutErrorInfo, logs: string[]) {\n super('Engine not started: healthcheck timeout', setRetryable(info, true))\n this.logs = logs\n }\n}\nsetClassName(HealthcheckTimeoutError, 'HealthcheckTimeoutError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface EngineStartupErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport class EngineStartupError extends DataProxyAPIError {\n public name = 'EngineStartupError'\n public code = 'P5014'\n public logs: string[]\n\n constructor(info: EngineStartupErrorInfo, message: string, logs: string[]) {\n super(message, setRetryable(info, true))\n this.logs = logs\n }\n}\nsetClassName(EngineStartupError, 'EngineStartupError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface EngineVersionNotSupportedErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport class EngineVersionNotSupportedError extends DataProxyAPIError {\n public name = 'EngineVersionNotSupportedError'\n public code = 'P5012'\n\n constructor(info: EngineVersionNotSupportedErrorInfo) {\n super('Engine version is not supported', setRetryable(info, false))\n }\n}\nsetClassName(EngineVersionNotSupportedError, 'EngineVersionNotSupportedError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface GatewayTimeoutErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const GATEWAY_TIMEOUT_DEFAULT_MESSAGE = 'Request timed out'\n\nexport class GatewayTimeoutError extends DataProxyAPIError {\n public name = 'GatewayTimeoutError'\n public code = 'P5009'\n\n constructor(info: GatewayTimeoutErrorInfo, message = GATEWAY_TIMEOUT_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(GatewayTimeoutError, 'GatewayTimeoutError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface InteractiveTransactionErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const INTERACTIVE_TRANSACTION_ERROR_DEFAULT_MESSAGE = 'Interactive transaction error'\n\nexport class InteractiveTransactionError extends DataProxyAPIError {\n public name = 'InteractiveTransactionError'\n public code = 'P5015'\n\n constructor(info: InteractiveTransactionErrorInfo, message = INTERACTIVE_TRANSACTION_ERROR_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(InteractiveTransactionError, 'InteractiveTransactionError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface InvalidRequestErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const INVALID_REQUEST_DEFAULT_MESSAGE = 'Request parameters are invalid'\n\n/**\n * Used when the request validation failed.\n * The difference from `BadRequestError` is the latter is used when the server couldn't understand the request,\n * while this error means the server could understand it but rejected due to some parameters being invalid.\n */\nexport class InvalidRequestError extends DataProxyAPIError {\n public name = 'InvalidRequestError'\n public code = 'P5011'\n\n constructor(info: InvalidRequestErrorInfo, message = INVALID_REQUEST_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(InvalidRequestError, 'InvalidRequestError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface NotFoundErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const NOT_FOUND_DEFAULT_MESSAGE = 'Requested resource does not exist'\n\nexport class NotFoundError extends DataProxyAPIError {\n public name = 'NotFoundError'\n public code = 'P5003'\n\n constructor(info: NotFoundErrorInfo, message = NOT_FOUND_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(NotFoundError, 'NotFoundError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface ServerErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const SERVER_ERROR_DEFAULT_MESSAGE = 'Unknown server error'\n\nexport class ServerError extends DataProxyAPIError {\n public name = 'ServerError'\n public code = 'P5006'\n public logs?: string[]\n\n constructor(info: ServerErrorInfo, message?: string, logs?: string[]) {\n super(message || SERVER_ERROR_DEFAULT_MESSAGE, setRetryable(info, true))\n this.logs = logs\n }\n}\nsetClassName(ServerError, 'ServerError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface UnauthorizedErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const UNAUTHORIZED_DEFAULT_MESSAGE = 'Unauthorized, check your connection string'\n\nexport class UnauthorizedError extends DataProxyAPIError {\n public name = 'UnauthorizedError'\n public code = 'P5007'\n\n constructor(info: UnauthorizedErrorInfo, message = UNAUTHORIZED_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, false))\n }\n}\nsetClassName(UnauthorizedError, 'UnauthorizedError')\n", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyAPIErrorInfo } from './DataProxyAPIError'\nimport { DataProxyAPIError } from './DataProxyAPIError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface UsageExceededErrorInfo extends DataProxyAPIErrorInfo {}\n\nexport const USAGE_EXCEEDED_DEFAULT_MESSAGE = 'Usage exceeded, retry again later'\n\nexport class UsageExceededError extends DataProxyAPIError {\n public name = 'UsageExceededError'\n public code = 'P5008'\n\n constructor(info: UsageExceededErrorInfo, message = USAGE_EXCEEDED_DEFAULT_MESSAGE) {\n super(message, setRetryable(info, true))\n }\n}\nsetClassName(UsageExceededError, 'UsageExceededError')\n", "import { PrismaClientInitializationError } from '../../../../errors/PrismaClientInitializationError'\nimport { PrismaClientKnownRequestError } from '../../../../errors/PrismaClientKnownRequestError'\nimport { BAD_REQUEST_DEFAULT_MESSAGE, BadRequestError } from '../BadRequestError'\nimport type { DataProxyError } from '../DataProxyError'\nimport { HealthcheckTimeoutError } from '../EngineHealthcheckTimeoutError'\nimport { EngineStartupError } from '../EngineStartupError'\nimport { EngineVersionNotSupportedError } from '../EngineVersionNotSupportedError'\nimport { GATEWAY_TIMEOUT_DEFAULT_MESSAGE, GatewayTimeoutError } from '../GatewayTimeoutError'\nimport { InteractiveTransactionError } from '../InteractiveTransactionError'\nimport { InvalidRequestError } from '../InvalidRequestError'\nimport { NOT_FOUND_DEFAULT_MESSAGE, NotFoundError } from '../NotFoundError'\nimport { SchemaMissingError } from '../SchemaMissingError'\nimport { SERVER_ERROR_DEFAULT_MESSAGE, ServerError } from '../ServerError'\nimport { UNAUTHORIZED_DEFAULT_MESSAGE, UnauthorizedError } from '../UnauthorizedError'\nimport { USAGE_EXCEEDED_DEFAULT_MESSAGE, UsageExceededError } from '../UsageExceededError'\n\ntype DataProxyHttpError =\n | 'InternalDataProxyError'\n | { EngineNotStarted: { reason: EngineNotStartedReason } }\n | { InteractiveTransactionMisrouted: { reason: InteractiveTransactionMisroutedReason } }\n | { InvalidRequestError: { reason: string } }\n\ntype EngineNotStartedReason =\n | 'SchemaMissing'\n | 'EngineVersionNotSupported'\n | { EngineStartupError: { msg: string; logs: string[] } }\n | { KnownEngineStartupError: { msg: string; error_code: string } }\n | { HealthcheckTimeout: { logs: string[] } }\n\ntype InteractiveTransactionMisroutedReason = 'IDParseError' | 'NoQueryEngineFoundError' | 'TransactionStartError'\n\ntype QueryEngineError = {\n is_panic: boolean\n message: string\n error_code: string\n}\n\ntype ResponseErrorBody =\n | { type: 'DataProxyError'; body: DataProxyHttpError }\n | { type: 'QueryEngineError'; body: QueryEngineError }\n | { type: 'UnknownJsonError'; body: unknown }\n | { type: 'UnknownTextError'; body: string }\n | { type: 'EmptyError' }\n\nasync function getResponseErrorBody(response: Response): Promise<ResponseErrorBody> {\n let text: string\n\n try {\n text = await response.text()\n } catch {\n return { type: 'EmptyError' }\n }\n\n try {\n const error = JSON.parse(text)\n\n if (typeof error === 'string') {\n switch (error) {\n case 'InternalDataProxyError':\n return { type: 'DataProxyError', body: error }\n default:\n return { type: 'UnknownTextError', body: error }\n }\n }\n\n if (typeof error === 'object' && error !== null) {\n if ('is_panic' in error && 'message' in error && 'error_code' in error) {\n return { type: 'QueryEngineError', body: error }\n }\n\n if ('EngineNotStarted' in error || 'InteractiveTransactionMisrouted' in error || 'InvalidRequestError' in error) {\n const reason = (Object.values(error as object)[0] as any).reason\n if (typeof reason === 'string' && !['SchemaMissing', 'EngineVersionNotSupported'].includes(reason)) {\n return { type: 'UnknownJsonError', body: error }\n }\n return { type: 'DataProxyError', body: error }\n }\n }\n\n return { type: 'UnknownJsonError', body: error }\n } catch {\n return text === '' ? { type: 'EmptyError' } : { type: 'UnknownTextError', body: text }\n }\n}\n\nexport async function responseToError(response: Response, clientVersion: string): Promise<DataProxyError | undefined> {\n if (response.ok) return undefined\n\n const info = { clientVersion, response }\n const error = await getResponseErrorBody(response)\n\n if (error.type === 'QueryEngineError') {\n throw new PrismaClientKnownRequestError(error.body.message, { code: error.body.error_code, clientVersion })\n }\n\n if (error.type === 'DataProxyError') {\n if (error.body === 'InternalDataProxyError') {\n throw new ServerError(info, 'Internal Data Proxy error')\n }\n\n if ('EngineNotStarted' in error.body) {\n if (error.body.EngineNotStarted.reason === 'SchemaMissing') {\n return new SchemaMissingError(info)\n }\n if (error.body.EngineNotStarted.reason === 'EngineVersionNotSupported') {\n throw new EngineVersionNotSupportedError(info)\n }\n if ('EngineStartupError' in error.body.EngineNotStarted.reason) {\n const { msg, logs } = error.body.EngineNotStarted.reason.EngineStartupError\n throw new EngineStartupError(info, msg, logs)\n }\n if ('KnownEngineStartupError' in error.body.EngineNotStarted.reason) {\n const { msg, error_code } = error.body.EngineNotStarted.reason.KnownEngineStartupError\n throw new PrismaClientInitializationError(msg, clientVersion, error_code)\n }\n if ('HealthcheckTimeout' in error.body.EngineNotStarted.reason) {\n const { logs } = error.body.EngineNotStarted.reason.HealthcheckTimeout\n throw new HealthcheckTimeoutError(info, logs)\n }\n }\n\n if ('InteractiveTransactionMisrouted' in error.body) {\n const messageByReason: Record<InteractiveTransactionMisroutedReason, string> = {\n IDParseError: 'Could not parse interactive transaction ID',\n NoQueryEngineFoundError: 'Could not find Query Engine for the specified host and transaction ID',\n TransactionStartError: 'Could not start interactive transaction',\n }\n throw new InteractiveTransactionError(info, messageByReason[error.body.InteractiveTransactionMisrouted.reason])\n }\n\n if ('InvalidRequestError' in error.body) {\n throw new InvalidRequestError(info, error.body.InvalidRequestError.reason)\n }\n }\n\n if (response.status === 401 || response.status === 403) {\n throw new UnauthorizedError(info, buildErrorMessage(UNAUTHORIZED_DEFAULT_MESSAGE, error))\n }\n\n if (response.status === 404) {\n return new NotFoundError(info, buildErrorMessage(NOT_FOUND_DEFAULT_MESSAGE, error))\n }\n\n if (response.status === 429) {\n throw new UsageExceededError(info, buildErrorMessage(USAGE_EXCEEDED_DEFAULT_MESSAGE, error))\n }\n\n if (response.status === 504) {\n throw new GatewayTimeoutError(info, buildErrorMessage(GATEWAY_TIMEOUT_DEFAULT_MESSAGE, error))\n }\n\n if (response.status >= 500) {\n throw new ServerError(info, buildErrorMessage(SERVER_ERROR_DEFAULT_MESSAGE, error))\n }\n\n if (response.status >= 400) {\n throw new BadRequestError(info, buildErrorMessage(BAD_REQUEST_DEFAULT_MESSAGE, error))\n }\n\n return undefined\n}\n\nfunction buildErrorMessage(defaultMessage: string, errorBody: ResponseErrorBody): string {\n if (errorBody.type === 'EmptyError') {\n return defaultMessage\n }\n return `${defaultMessage}: ${JSON.stringify(errorBody)}`\n}\n", "const BACKOFF_INTERVAL = 50\n\nexport function backOff(n: number): Promise<number> {\n const baseDelay = Math.pow(2, n) * BACKOFF_INTERVAL\n const jitter = Math.ceil(Math.random() * baseDelay) - Math.ceil(baseDelay / 2)\n const total = baseDelay + jitter\n\n return new Promise((done) => setTimeout(() => done(total), total))\n}\n", "/*\nbtoa version, that correctly handles multibyte strings\nAdapted from https://gist.github.com/jonleighton/958841\nMIT LICENSE\nCopyright 2011 Jon Leighton\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nconst encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nexport function toBase64(str: string) {\n const bytes = new TextEncoder().encode(str)\n let base64 = ''\n const byteLength = bytes.byteLength\n const byteRemainder = byteLength % 3\n const mainLength = byteLength - byteRemainder\n\n let a: number, b: number, c: number, d: number\n let chunk: number\n\n // Main loop deals with bytes in chunks of 3\n for (let i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6\n d = chunk & 63 // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength]\n\n a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4 // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + '=='\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]\n\n a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2 // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + '='\n }\n\n return base64\n}\n", "import { PrismaClientInitializationError } from '../../../errors/PrismaClientInitializationError'\nimport { EngineConfig } from '../..'\n\nexport function checkForbiddenMetrics(engineConfig: EngineConfig) {\n const isMetricsEnabled = !!engineConfig.generator?.previewFeatures.some((feature) => {\n return feature.toLowerCase().includes('metrics')\n })\n\n if (isMetricsEnabled) {\n throw new PrismaClientInitializationError(\n `The \\`metrics\\` preview feature is not yet available with Accelerate.\nPlease remove \\`metrics\\` from the \\`previewFeatures\\` in your schema.\n\nMore information about Accelerate: https://pris.ly/d/accelerate`,\n engineConfig.clientVersion,\n )\n }\n}\n", "{\n \"name\": \"@prisma/engines\",\n \"version\": \"6.16.1\",\n \"description\": \"This package is intended for Prisma's internal use\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/prisma/prisma.git\",\n \"directory\": \"packages/engines\"\n },\n \"license\": \"Apache-2.0\",\n \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n \"devDependencies\": {\n \"@swc/core\": \"1.11.5\",\n \"@swc/jest\": \"0.2.37\",\n \"@types/jest\": \"29.5.14\",\n \"@types/node\": \"18.19.76\",\n \"execa\": \"5.1.1\",\n \"typescript\": \"5.4.5\",\n \"vitest\": \"3.2.4\"\n },\n \"dependencies\": {\n \"@prisma/debug\": \"workspace:*\",\n \"@prisma/engines-version\": \"6.16.0-7.1c57fdcd7e44b29b9313256c76699e91c3ac3c43\",\n \"@prisma/fetch-engine\": \"workspace:*\",\n \"@prisma/get-platform\": \"workspace:*\"\n },\n \"scripts\": {\n \"dev\": \"DEV=true tsx helpers/build.ts\",\n \"build\": \"tsx helpers/build.ts\",\n \"test\": \"vitest run\",\n \"prepublishOnly\": \"pnpm run build\",\n \"postinstall\": \"node scripts/postinstall.js\"\n },\n \"files\": [\n \"dist\",\n \"download\",\n \"scripts\"\n ],\n \"sideEffects\": false\n}", "import { setClassName } from '@prisma/internals'\n\nimport type { DataProxyErrorInfo } from './DataProxyError'\nimport { DataProxyError } from './DataProxyError'\nimport { setRetryable } from './utils/setRetryable'\n\nexport interface RequestErrorInfo extends DataProxyErrorInfo {}\n\nexport class RequestError extends DataProxyError {\n public name = 'RequestError'\n public code = 'P5010'\n\n constructor(message: string, info: RequestErrorInfo) {\n super(`Cannot fetch data from service:\\n${message}`, setRetryable(info, true))\n }\n}\nsetClassName(RequestError, 'RequestError')\n", "import { AccelerateExtensionFetchDecorator } from '../../common/Engine'\nimport { RequestError } from '../errors/NetworkError'\n\n/**\n * `fetch` wrapper that applies the `customDataProxyFetch` override and handles\n * errors to attach error code.\n */\nexport async function request(\n url: string,\n options: RequestInit & { clientVersion: string },\n customFetch: AccelerateExtensionFetchDecorator = (fetch) => fetch,\n): Promise<Response> {\n const { clientVersion, ...fetchOptions } = options\n const decoratedFetch = customFetch(fetch) as typeof fetch\n\n try {\n return await decoratedFetch(url, fetchOptions)\n } catch (error) {\n const message = (error as Error).message ?? 'Unknown error'\n throw new RequestError(message, { clientVersion, cause: error })\n }\n}\n", "import { Debug } from '@prisma/debug'\nimport { dependencies } from '@prisma/engines/package.json'\n\nimport type { EngineConfig } from '../../common/Engine'\nimport { NotImplementedYetError } from '../errors/NotImplementedYetError'\nimport { request } from './request'\n\nconst semverRegex = /^[1-9][0-9]*\\.[0-9]+\\.[0-9]+$/\nconst debug = Debug('prisma:client:dataproxyEngine')\n\nasync function _getClientVersion(host: string, config: EngineConfig) {\n const engineVersion = dependencies['@prisma/engines-version']\n const clientVersion = config.clientVersion ?? 'unknown'\n\n // Internal override for testing and manual version overrides.\n // Automated tests should set this to \"0.0.0\" when using mini-proxy.\n // Edge client does not have access to process.env, so we use globalThis.\n if (process.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION || globalThis.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION) {\n return process.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION || globalThis.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION\n }\n\n // for data proxy v2, or accelerate, resolution isn't needed\n if (host.includes('accelerate') && clientVersion !== '0.0.0' && clientVersion !== 'in-memory') {\n return clientVersion\n }\n\n const [version, suffix] = clientVersion?.split('-') ?? []\n\n // we expect the version to match the pattern major.minor.patch\n if (suffix === undefined && semverRegex.test(version)) {\n return version\n }\n\n // if it is an integration or dev version, we resolve its dataproxy\n // for this we infer the data proxy version from the engine version\n if (suffix !== undefined || clientVersion === '0.0.0' || clientVersion === 'in-memory') {\n const [version] = engineVersion.split('-') ?? []\n const [major, minor, patch] = version.split('.')\n\n // to ensure that the data proxy exists, we check if it's published\n // we resolve with the closest or previous version published on npm\n const pkgURL = prismaPkgURL(`<=${major}.${minor}.${patch}`)\n const res = await request(pkgURL, { clientVersion })\n\n if (!res.ok) {\n throw new Error(\n `Failed to fetch stable Prisma version, unpkg.com status ${res.status} ${\n res.statusText\n // eslint-disable-next-line @typescript-eslint/await-thenable\n }, response body: ${(await res.text()) || '<empty body>'}`,\n )\n }\n\n // we need to await for edge workers\n // because it's using the global \"fetch\"\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const bodyAsText = await res.text()\n debug('length of body fetched from unpkg.com', bodyAsText.length)\n\n let bodyAsJson\n try {\n bodyAsJson = JSON.parse(bodyAsText)\n } catch (e) {\n console.error('JSON.parse error: body fetched from unpkg.com: ', bodyAsText)\n throw e\n }\n\n return bodyAsJson['version'] as string\n }\n\n // nothing matched, meaning that the provided version is invalid\n throw new NotImplementedYetError('Only `major.minor.patch` versions are supported by Accelerate.', {\n clientVersion,\n })\n}\n\n/**\n * Determine the client version to be sent to the DataProxy\n * @param config\n * @returns\n */\nexport async function getClientVersion(host: string, config: EngineConfig) {\n const version = await _getClientVersion(host, config)\n\n debug('version', version)\n\n return version\n}\n\n/**\n * We use unpkg.com to resolve the version of the data proxy. We chose this over\n * registry.npmjs.com because they cache their queries/responses so it is fast.\n * Moreover, unpkg.com is able to support comparison operators like `<=1.0.0`.\n * For us, that means we can provide a version that is too high (not published),\n * and it will be able to resolve to the closest existing (published) version.\n * @param version\n * @returns\n */\nfunction prismaPkgURL(version: string) {\n return encodeURI(`https://unpkg.com/prisma@${version}/package.json`)\n}\n", "import { Debug } from '@prisma/debug'\nimport { TracingHelper } from '@prisma/internals'\n\nimport { PrismaClientKnownRequestError } from '../../errors/PrismaClientKnownRequestError'\nimport { PrismaClientUnknownRequestError } from '../../errors/PrismaClientUnknownRequestError'\nimport { prismaGraphQLToJSError } from '../../errors/utils/prismaGraphQLToJSError'\nimport { getUrlAndApiKey } from '../common/accelerate/getUrlAndApiKey'\nimport { HeaderBuilder } from '../common/accelerate/HeaderBuilder'\nimport type {\n AccelerateExtensionFetchDecorator,\n BatchQueryEngineResult,\n EngineConfig,\n InteractiveTransactionOptions,\n RequestBatchOptions,\n RequestOptions,\n} from '../common/Engine'\nimport { Engine } from '../common/Engine'\nimport type { LogEmitter } from '../common/types/Events'\nimport { JsonQuery } from '../common/types/JsonProtocol'\nimport { Metrics, MetricsOptionsJson, MetricsOptionsPrometheus } from '../common/types/Metrics'\nimport {\n QueryEngineBatchResult,\n QueryEngineResult,\n QueryEngineResultData,\n QueryEngineResultExtensions,\n} from '../common/types/QueryEngine'\nimport { RequestError } from '../common/types/RequestError'\nimport type * as Tx from '../common/types/Transaction'\nimport { getBatchRequestPayload } from '../common/utils/getBatchRequestPayload'\nimport { DataProxyError } from './errors/DataProxyError'\nimport { ForcedRetryError } from './errors/ForcedRetryError'\nimport { NotImplementedYetError } from './errors/NotImplementedYetError'\nimport { SchemaMissingError } from './errors/SchemaMissingError'\nimport { responseToError } from './errors/utils/responseToError'\nimport { backOff } from './utils/backOff'\nimport { toBase64 } from './utils/base64'\nimport { checkForbiddenMetrics } from './utils/checkForbiddenMetrics'\nimport { dateFromEngineTimestamp } from './utils/EngineTimestamp'\nimport { getClientVersion } from './utils/getClientVersion'\nimport { request } from './utils/request'\n\nconst MAX_RETRIES = 3\n\nconst debug = Debug('prisma:client:dataproxyEngine')\n\ntype DataProxyTxInfoPayload = {\n endpoint: string\n}\n\ntype DataProxyTxInfo = Tx.InteractiveTransactionInfo<DataProxyTxInfoPayload>\n\ntype RequestInternalOptions = {\n body: Record<string, unknown>\n customDataProxyFetch?: AccelerateExtensionFetchDecorator\n traceparent?: string\n interactiveTransaction?: InteractiveTransactionOptions<DataProxyTxInfoPayload>\n}\n\ntype StartTransactionResult = {\n id: string\n 'data-proxy': {\n endpoint: string\n }\n extensions?: QueryEngineResultExtensions\n}\n\ntype CloseTransactionResult = {\n extensions?: QueryEngineResultExtensions\n}\n\nexport class DataProxyEngine implements Engine<DataProxyTxInfoPayload> {\n name = 'DataProxyEngine' as const\n\n private inlineSchema: string\n readonly inlineSchemaHash: string\n private inlineDatasources: EngineConfig['inlineDatasources']\n private config: EngineConfig\n private logEmitter: LogEmitter\n private env: { [k in string]?: string }\n\n private clientVersion: string\n private engineHash: string\n private tracingHelper: TracingHelper\n private remoteClientVersion!: string\n private host!: string\n private headerBuilder!: HeaderBuilder\n private startPromise?: Promise<void>\n private protocol!: 'http' | 'https'\n\n constructor(config: EngineConfig) {\n checkForbiddenMetrics(config)\n\n this.config = config\n this.env = config.env\n // TODO (perf) schema should be uploaded as-is\n this.inlineSchema = toBase64(config.inlineSchema)\n this.inlineDatasources = config.inlineDatasources\n this.inlineSchemaHash = config.inlineSchemaHash\n this.clientVersion = config.clientVersion\n this.engineHash = config.engineVersion\n this.logEmitter = config.logEmitter\n this.tracingHelper = config.tracingHelper\n }\n\n apiKey(): string {\n return this.headerBuilder.apiKey\n }\n\n // The version is the engine hash\n // that we expect to have on the remote QE\n version() {\n return this.engineHash\n }\n\n /**\n * This is not a real \"start\" method, but rather a deferred initialization. We\n * will only parse the URL on the first request to match the behavior of other\n * engines, they will only throw errors on their very first request. This is\n * needed in case the URL is misconfigured.\n */\n async start() {\n if (this.startPromise !== undefined) {\n await this.startPromise\n }\n\n this.startPromise = (async () => {\n const { apiKey, url } = this.getURLAndAPIKey()\n\n this.host = url.host\n this.protocol = url.protocol\n this.headerBuilder = new HeaderBuilder({\n apiKey,\n tracingHelper: this.tracingHelper,\n logLevel: this.config.logLevel ?? 'error',\n logQueries: this.config.logQueries,\n engineHash: this.engineHash,\n })\n\n this.remoteClientVersion = await getClientVersion(this.host, this.config)\n\n debug('host', this.host)\n debug('protocol', this.protocol)\n })()\n\n await this.startPromise\n }\n\n async stop() {}\n\n private propagateResponseExtensions(extensions: QueryEngineResultExtensions): void {\n if (extensions?.logs?.length) {\n extensions.logs.forEach((log) => {\n switch (log.level) {\n case 'debug':\n case 'trace':\n debug(log)\n break\n\n case 'error':\n case 'warn':\n case 'info': {\n this.logEmitter.emit(log.level, {\n timestamp: dateFromEngineTimestamp(log.timestamp),\n message: log.attributes.message ?? '',\n target: log.target ?? 'BinaryEngine',\n })\n break\n }\n\n case 'query': {\n this.logEmitter.emit('query', {\n query: log.attributes.query ?? '',\n // first part is in seconds, second is in nanoseconds, we need to convert both to milliseconds\n timestamp: dateFromEngineTimestamp(log.timestamp),\n duration: log.attributes.duration_ms ?? 0,\n params: log.attributes.params ?? '',\n target: log.target ?? 'BinaryEngine',\n })\n\n break\n }\n\n default:\n log.level satisfies never\n }\n })\n }\n\n if (extensions?.traces?.length) {\n this.tracingHelper.dispatchEngineSpans(extensions.traces)\n }\n }\n\n onBeforeExit() {\n throw new Error('\"beforeExit\" hook is not applicable to the remote query engine')\n }\n\n private async url(action: string) {\n await this.start()\n\n return `${this.protocol}//${this.host}/${this.remoteClientVersion}/${this.inlineSchemaHash}/${action}`\n }\n\n private async uploadSchema() {\n const spanOptions = {\n name: 'schemaUpload',\n internal: true,\n }\n\n return this.tracingHelper.runInChildSpan(spanOptions, async () => {\n const response = await request(await this.url('schema'), {\n method: 'PUT',\n headers: this.headerBuilder.build(),\n body: this.inlineSchema,\n clientVersion: this.clientVersion,\n })\n\n if (!response.ok) {\n debug('schema response status', response.status)\n }\n\n const error = await responseToError(response, this.clientVersion)\n\n if (error) {\n this.logEmitter.emit('warn', {\n message: `Error while uploading schema: ${error.message}`,\n timestamp: new Date(),\n target: '',\n })\n throw error\n } else {\n this.logEmitter.emit('info', {\n message: `Schema (re)uploaded (hash: ${this.inlineSchemaHash})`,\n timestamp: new Date(),\n target: '',\n })\n }\n })\n }\n\n request<T>(\n query: JsonQuery,\n { traceparent, interactiveTransaction, customDataProxyFetch }: RequestOptions<DataProxyTxInfoPayload>,\n ) {\n return this.requestInternal<T>({\n body: query,\n traceparent,\n interactiveTransaction,\n customDataProxyFetch,\n })\n }\n\n async requestBatch<T>(\n queries: JsonQuery[],\n { traceparent, transaction, customDataProxyFetch }: RequestBatchOptions<DataProxyTxInfoPayload>,\n ): Promise<BatchQueryEngineResult<T>[]> {\n const interactiveTransaction = transaction?.kind === 'itx' ? transaction.options : undefined\n\n const body = getBatchRequestPayload(queries, transaction)\n\n const batchResult = await this.requestInternal<T, true>({\n body,\n customDataProxyFetch,\n interactiveTransaction,\n traceparent,\n })\n\n return batchResult.map((result) => {\n if (result.extensions) {\n this.propagateResponseExtensions(result.extensions)\n }\n\n if ('errors' in result) {\n return this.convertProtocolErrorsToClientError(result.errors)\n }\n\n return result\n })\n }\n\n private requestInternal<T, Batch extends boolean = false>({\n body,\n traceparent,\n customDataProxyFetch,\n interactiveTransaction,\n }: RequestInternalOptions): Promise<Batch extends true ? QueryEngineResult<T>[] : QueryEngineResultData<T>> {\n return this.withRetry({\n actionGerund: 'querying',\n callback: async ({ logHttpCall }) => {\n const url = interactiveTransaction\n ? `${interactiveTransaction.payload.endpoint}/graphql`\n : await this.url('graphql')\n\n logHttpCall(url)\n\n const response = await request(\n url,\n {\n method: 'POST',\n headers: this.headerBuilder.build({ traceparent, transactionId: interactiveTransaction?.id }),\n body: JSON.stringify(body),\n clientVersion: this.clientVersion,\n },\n customDataProxyFetch,\n )\n\n if (!response.ok) {\n debug('graphql response status', response.status)\n }\n\n await this.handleError(await responseToError(response, this.clientVersion))\n\n const result = (await response.json()) as Batch extends true ? QueryEngineBatchResult<T> : QueryEngineResult<T>\n\n if (result.extensions) {\n this.propagateResponseExtensions(result.extensions)\n }\n\n if ('errors' in result) {\n throw this.convertProtocolErrorsToClientError(result.errors)\n }\n\n if ('batchResult' in result) {\n // TODO: TypeScript 5.8+ should be able to narrow the expected result type correctly,\n // so this will be assignable (https://github.com/microsoft/TypeScript/pull/56941).\n // Since these are internal types, we should be able to rely on it once TypeScript 5.8\n // is released, and change this to just `return result.batchResult`.\n return result.batchResult as QueryEngineResult<T>[] as Batch extends true\n ? QueryEngineResult<T>[]\n : QueryEngineResultData<T>\n }\n\n // TODO: TypeScript 5.8+ should be able to narrow the expected result type correctly,\n // so this will be assignable (https://github.com/microsoft/TypeScript/pull/56941).\n // Since these are internal types, we should be able to rely on it once TypeScript 5.8\n // is released, and change this to just `return result`.\n return result as QueryEngineResultData<T> as Batch extends true\n ? QueryEngineResult<T>[]\n : QueryEngineResultData<T>\n },\n })\n }\n\n /**\n * Send START, COMMIT, or ROLLBACK to the Query Engine\n * @param action START, COMMIT, or ROLLBACK\n * @param headers headers for tracing\n * @param options to change the default timeouts\n * @param info transaction information for the QE\n */\n transaction(action: 'start', headers: Tx.TransactionHeaders, options: Tx.Options): Promise<DataProxyTxInfo>\n transaction(action: 'commit', headers: Tx.TransactionHeaders, info: DataProxyTxInfo): Promise<undefined>\n transaction(action: 'rollback', headers: Tx.TransactionHeaders, info: DataProxyTxInfo): Promise<undefined>\n async transaction(action: any, headers: Tx.TransactionHeaders, arg?: any) {\n const actionToGerund = {\n start: 'starting',\n commit: 'committing',\n rollback: 'rolling back',\n }\n\n return this.withRetry({\n actionGerund: `${actionToGerund[action]} transaction`,\n callback: async ({ logHttpCall }) => {\n if (action === 'start') {\n const body = JSON.stringify({\n max_wait: arg.maxWait,\n timeout: arg.timeout,\n isolation_level: arg.isolationLevel,\n })\n\n const url = await this.url('transaction/start')\n\n logHttpCall(url)\n\n const response = await request(url, {\n method: 'POST',\n headers: this.headerBuilder.build({ traceparent: headers.traceparent }),\n body,\n clientVersion: this.clientVersion,\n })\n\n await this.handleError(await responseToError(response, this.clientVersion))\n\n const result = (await response.json()) as StartTransactionResult\n\n const { extensions } = result\n if (extensions) {\n this.propagateResponseExtensions(extensions)\n }\n\n const id = result.id as string\n const endpoint = result['data-proxy'].endpoint as string\n\n return { id, payload: { endpoint } }\n } else {\n const url = `${arg.payload.endpoint}/${action}`\n\n logHttpCall(url)\n\n const response = await request(url, {\n method: 'POST',\n headers: this.headerBuilder.build({ traceparent: headers.traceparent }),\n clientVersion: this.clientVersion,\n })\n\n await this.handleError(await responseToError(response, this.clientVersion))\n\n const result = (await response.json()) as CloseTransactionResult\n\n const { extensions } = result\n if (extensions) {\n this.propagateResponseExtensions(extensions)\n }\n\n return undefined\n }\n },\n })\n }\n\n private getURLAndAPIKey() {\n return getUrlAndApiKey({\n clientVersion: this.clientVersion,\n env: this.env,\n inlineDatasources: this.inlineDatasources,\n overrideDatasources: this.config.overrideDatasources,\n })\n }\n\n metrics(options: MetricsOptionsJson): Promise<Metrics>\n metrics(options: MetricsOptionsPrometheus): Promise<string>\n metrics(): Promise<Metrics> | Promise<string> {\n throw new NotImplementedYetError('Metrics are not yet supported for Accelerate', {\n clientVersion: this.clientVersion,\n })\n }\n\n private async withRetry<T>(args: {\n callback: (api: { logHttpCall: (url: string) => void }) => Promise<T>\n actionGerund: string\n }): Promise<T> {\n for (let attempt = 0; ; attempt++) {\n const logHttpCall = (url: string) => {\n this.logEmitter.emit('info', {\n message: `Calling ${url} (n=${attempt})`,\n timestamp: new Date(),\n target: '',\n })\n }\n\n try {\n return await args.callback({ logHttpCall })\n } catch (e) {\n if (!(e instanceof DataProxyError)) throw e\n if (!e.isRetryable) throw e\n if (attempt >= MAX_RETRIES) {\n if (e instanceof ForcedRetryError) {\n throw e.cause\n } else {\n throw e\n }\n }\n\n this.logEmitter.emit('warn', {\n message: `Attempt ${attempt + 1}/${MAX_RETRIES} failed for ${args.actionGerund}: ${e.message ?? '(unknown)'}`,\n timestamp: new Date(),\n target: '',\n })\n\n const delay = await backOff(attempt)\n\n this.logEmitter.emit('warn', {\n message: `Retrying after ${delay}ms`,\n timestamp: new Date(),\n target: '',\n })\n }\n }\n }\n\n private async handleError(error: DataProxyError | undefined): Promise<void> {\n if (error instanceof SchemaMissingError) {\n await this.uploadSchema()\n throw new ForcedRetryError({\n clientVersion: this.clientVersion,\n cause: error,\n })\n } else if (error) {\n throw error\n }\n }\n\n private convertProtocolErrorsToClientError(\n errors: RequestError[],\n ): PrismaClientKnownRequestError | PrismaClientUnknownRequestError {\n // TODO: handle Rust panics and driver adapter errors correctly. See `LibraryEngine#buildQueryError`.\n if (errors.length === 1) {\n return prismaGraphQLToJSError(errors[0], this.config.clientVersion, this.config.activeProvider!)\n } else {\n return new PrismaClientUnknownRequestError(JSON.stringify(errors), {\n clientVersion: this.config.clientVersion,\n })\n }\n }\n\n applyPendingMigrations(): Promise<void> {\n throw new Error('Method not implemented.')\n }\n}\n", "import type { SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nimport { isPrismaPostgres } from '@prisma/internals'\n\n/**\n * - `copyEngine === false` implies Prisma Accelerate usage\n * - If we detect Prisma Accelerate usage, we want to recommend using `--no-engine` in production.\n * - Driver Adapters should NOT be used with `prisma generate `--no-engine`\n * - Driver Adapters should NOT be imported from `@prisma/client/edge` endpoint\n * - Accelerate should NOT be used with Driver Adapters\n * - Prisma Postgres can be used with either Accelerate or Driver Adapters\n */\n\ntype WarningDiagnostic = { _tag: 'warning'; value: [key: string, message: string, ...args: unknown[]] }\ntype ErrorDiagnostic = { _tag: 'error'; value: string }\n\ntype ValidateEngineInstanceConfigParams = {\n url?: string\n adapter?: SqlDriverAdapterFactory\n copyEngine: boolean\n\n /**\n * The type indicates that {@link validateEngineInstanceConfig} only cares about\n * the {@link targetBuildType} being `edge`. If all other input options are fixed,\n * changing the value of this param to something else will exhibit no different\n * validation behavior.\n */\n targetBuildType: 'edge' | (string & {}) // typeof TARGET_BUILD_TYPE\n}\n\ntype WithDiagnostics =\n | {\n ok: true\n\n diagnostics: {\n warnings: WarningDiagnostic[]\n errors?: never\n }\n }\n | {\n ok: false\n\n diagnostics: {\n warnings: WarningDiagnostic[]\n errors: [ErrorDiagnostic, ...ErrorDiagnostic[]]\n }\n }\n\ntype ValidateEngineInstanceConfigOutput = WithDiagnostics & {\n isUsing: {\n accelerate: boolean\n ppg: boolean\n driverAdapters: boolean\n }\n}\n\n/**\n * Validates the engine instance configuration, without side effects.\n * @param url The URL passed to the Prisma Client constructor\n * @param adapter The driver adapter passed to the Prisma Client constructor\n * @param copyEngine Whether the engine was copied. `prisma generate --no-engine` implies `copyEngine: false`\n * @param targetBuildType The target build type\n */\nexport function validateEngineInstanceConfig({\n url,\n adapter,\n copyEngine,\n targetBuildType,\n}: ValidateEngineInstanceConfigParams): ValidateEngineInstanceConfigOutput {\n const warnings = [] as WarningDiagnostic[]\n const errors = [] as ErrorDiagnostic[]\n\n const pushWarning = (input: WarningDiagnostic['value']) => {\n warnings.push({ _tag: 'warning', value: input })\n }\n\n const pushError = (input: string[]) => {\n const value = input.join('\\n')\n errors.push({ _tag: 'error', value })\n }\n\n const isUsingPrismaAccelerate = Boolean(url?.startsWith('prisma://'))\n const isUsingPrismaPostgres = isPrismaPostgres(url)\n const isUsingDriverAdapters = Boolean(adapter)\n const isAccelerateUrlScheme = isUsingPrismaAccelerate || isUsingPrismaPostgres\n\n if (\n !isUsingDriverAdapters &&\n copyEngine &&\n isAccelerateUrlScheme &&\n targetBuildType !== 'client' &&\n targetBuildType !== 'wasm-compiler-edge'\n ) {\n pushWarning([\n 'recommend--no-engine',\n 'In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)',\n ])\n }\n\n const isAccelerateConfigured = isAccelerateUrlScheme || !copyEngine\n\n // Note: we're explicitly allowing the `isUsingDriverAdapters && isUsingPrismaPostgres` case to pass through.\n if (isUsingDriverAdapters && (isAccelerateConfigured || targetBuildType === 'edge')) {\n if (targetBuildType === 'edge') {\n pushError([\n `Prisma Client was configured to use the \\`adapter\\` option but it was imported via its \\`/edge\\` endpoint.`,\n `Please either remove the \\`/edge\\` endpoint or remove the \\`adapter\\` from the Prisma Client constructor.`,\n ])\n } else if (!copyEngine) {\n pushError([\n `Prisma Client was configured to use the \\`adapter\\` option but \\`prisma generate\\` was run with \\`--no-engine\\`.`,\n `Please run \\`prisma generate\\` without \\`--no-engine\\` to be able to use Prisma Client with the adapter.`,\n ])\n } else if (isUsingPrismaAccelerate) {\n pushError([\n `Prisma Client was configured to use the \\`adapter\\` option but the URL was a \\`prisma://\\` URL.`,\n `Please either use the \\`prisma://\\` URL or remove the \\`adapter\\` from the Prisma Client constructor.`,\n ])\n }\n }\n\n const isUsing = {\n accelerate: isAccelerateConfigured,\n ppg: isUsingPrismaPostgres,\n driverAdapters: isUsingDriverAdapters,\n }\n\n function isNonEmptyArray<T>(arr: T[]): arr is [T, ...T[]] {\n return arr.length > 0\n }\n\n if (isNonEmptyArray(errors)) {\n return {\n ok: false,\n diagnostics: {\n warnings,\n errors,\n },\n isUsing,\n }\n }\n\n return {\n ok: true,\n diagnostics: { warnings },\n isUsing,\n }\n}\n", "import { GetPrismaClientConfig } from '@prisma/client-common'\nimport { ClientEngineType, getClientEngineType, warnOnce } from '@prisma/internals'\n\nimport { BinaryEngine, ClientEngine, DataProxyEngine, Engine, EngineConfig, LibraryEngine } from '../engines'\nimport { AccelerateEngine } from '../engines/accelerate/AccelerateEngine'\nimport { PrismaClientValidationError } from '../errors/PrismaClientValidationError'\nimport { resolveDatasourceUrl } from './resolveDatasourceUrl'\nimport { validateEngineInstanceConfig } from './validateEngineInstanceConfig'\n\n/**\n * Get the engine instance based on the engine type and the target engine type\n * (binary, library, data proxy). If the URL is a prisma:// URL, it will always\n * use the DataProxyEngine. Basically decides which engine to load.\n * @param clientConfig\n * @param engineConfig\n * @returns\n */\nexport function getEngineInstance({ copyEngine = true }: GetPrismaClientConfig, engineConfig: EngineConfig): Engine {\n let url: string | undefined\n\n try {\n url = resolveDatasourceUrl({\n inlineDatasources: engineConfig.inlineDatasources,\n overrideDatasources: engineConfig.overrideDatasources,\n env: { ...engineConfig.env, ...process.env },\n clientVersion: engineConfig.clientVersion,\n })\n } catch {\n // the error does not matter, but that means we don't have a valid url which\n // means we can't use the DataProxyEngine and will default to LibraryEngine\n }\n\n const { ok, isUsing, diagnostics } = validateEngineInstanceConfig({\n url,\n adapter: engineConfig.adapter,\n copyEngine,\n targetBuildType: TARGET_BUILD_TYPE,\n })\n\n for (const warning of diagnostics.warnings) {\n warnOnce(...warning.value)\n }\n\n if (!ok) {\n const error = diagnostics.errors[0]\n throw new PrismaClientValidationError(error.value, { clientVersion: engineConfig.clientVersion })\n }\n\n const engineType = getClientEngineType(engineConfig.generator!)\n\n const libraryEngineConfigured = engineType === ClientEngineType.Library\n const binaryEngineConfigured = engineType === ClientEngineType.Binary\n const clientEngineConfigured = engineType === ClientEngineType.Client\n\n // TODO: one day we may want to completely deprecate `@prisma/client/edge` in favor of wasm build\n // TODO: After having moved the DataProxyEngine to Accelerate\n // - Replace DataProxyEngine with AccelerateEngine via `@prisma/extension-accelerate`\n // - Delete DataProxyEngine and all related files\n // - Update the DataProxy tests to use the /wasm endpoint, but keep ecosystem-tests as they are\n\n // When a local driver adapter is configured, the URL from the datasource\n // block in the Prisma schema is no longer relevant as driver adapters don't\n // use it. Therefore, a configured driver adapter takes precedence over the\n // Accelerate or PPg URL in the schema file.\n const clientEngineUsesRemoteExecutor = (isUsing.accelerate || isUsing.ppg) && !isUsing.driverAdapters\n\n if (TARGET_BUILD_TYPE === 'react-native') return new LibraryEngine(engineConfig)\n else if (clientEngineConfigured && TARGET_BUILD_TYPE === 'client')\n return new ClientEngine(engineConfig, clientEngineUsesRemoteExecutor)\n else if (clientEngineConfigured && TARGET_BUILD_TYPE === 'wasm-compiler-edge')\n return new ClientEngine(engineConfig, clientEngineUsesRemoteExecutor)\n else if (isUsing.accelerate && TARGET_BUILD_TYPE !== 'wasm-engine-edge') return new DataProxyEngine(engineConfig)\n else if (isUsing.driverAdapters && TARGET_BUILD_TYPE === 'wasm-engine-edge') return new LibraryEngine(engineConfig)\n else if (libraryEngineConfigured && TARGET_BUILD_TYPE === 'library') return new LibraryEngine(engineConfig)\n else if (binaryEngineConfigured && TARGET_BUILD_TYPE === 'binary') return new BinaryEngine(engineConfig)\n else if (isUsing.accelerate && TARGET_BUILD_TYPE === 'wasm-engine-edge') return new AccelerateEngine(engineConfig)\n // reasonable fallbacks in case the conditions above aren't met, we should still try the correct engine\n else if (TARGET_BUILD_TYPE === 'edge') return new DataProxyEngine(engineConfig)\n else if (TARGET_BUILD_TYPE === 'library') return new LibraryEngine(engineConfig)\n else if (TARGET_BUILD_TYPE === 'binary') return new BinaryEngine(engineConfig)\n else if (TARGET_BUILD_TYPE === 'client') return new ClientEngine(engineConfig, clientEngineUsesRemoteExecutor)\n // if either accelerate or wasm library could not be loaded for some reason, we throw an error\n else if (TARGET_BUILD_TYPE === 'wasm-engine-edge' || TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n return new MisconfiguredEngine({ clientVersion: engineConfig.clientVersion }) as Engine\n }\n\n return TARGET_BUILD_TYPE satisfies never\n}\n\nclass MisconfiguredEngine {\n constructor(options: { clientVersion: string }) {\n return new Proxy(this, {\n get(_target, _prop) {\n const message = `In order to run Prisma Client on edge runtime, either:\n- Use Prisma Accelerate: https://pris.ly/d/accelerate\n- Use Driver Adapters: https://pris.ly/d/driver-adapters`\n\n throw new PrismaClientValidationError(message, options)\n },\n })\n }\n}\n", "import { GetPrismaClientConfig } from '@prisma/client-common'\n\ntype Config = Pick<GetPrismaClientConfig, 'generator'>\n\n/**\n * Get preview features from the configuration stored in the generated client.\n */\nexport function getPreviewFeatures({ generator }: Config): string[] {\n return generator?.previewFeatures ?? []\n}\n", "export const rawCommandArgsMapper = (command: object) => ({\n command,\n})\n", "import type { Sql } from 'sql-template-tag'\n\n// Generate something like: SELECT * FROM User WHERE name = @P1 AND email = @P2 ...\nexport const mssqlPreparedStatement = (sql: Sql) => {\n return sql.strings.reduce((acc, str, idx) => `${acc}@P${idx}${str}`)\n}\n", "import Decimal from 'decimal.js'\n\nimport { isDate } from './date'\n\nexport function serializeRawParameters(parameters: any[]): string {\n try {\n return serializeRawParametersInternal(parameters, 'fast')\n } catch (error) {\n // Got TypeError, try replacing values unsupported by JSON (i.e., BigInts)\n // with strings inside arrays and objects.\n return serializeRawParametersInternal(parameters, 'slow')\n }\n}\n\nfunction serializeRawParametersInternal(parameters: any[], objectSerialization: 'fast' | 'slow'): string {\n return JSON.stringify(parameters.map((parameter) => encodeParameter(parameter, objectSerialization)))\n}\n\nfunction encodeParameter(parameter: any, objectSerialization: 'fast' | 'slow'): unknown {\n if (Array.isArray(parameter)) {\n return parameter.map((item) => encodeParameter(item, objectSerialization))\n }\n if (typeof parameter === 'bigint') {\n return {\n prisma__type: 'bigint',\n prisma__value: parameter.toString(),\n }\n }\n\n if (isDate(parameter)) {\n return {\n prisma__type: 'date',\n prisma__value: parameter.toJSON(),\n }\n }\n\n if (Decimal.isDecimal(parameter)) {\n return {\n prisma__type: 'decimal',\n prisma__value: parameter.toJSON(),\n }\n }\n\n if (Buffer.isBuffer(parameter)) {\n return {\n prisma__type: 'bytes',\n prisma__value: parameter.toString('base64'),\n }\n }\n\n if (isArrayBufferLike(parameter)) {\n return {\n prisma__type: 'bytes',\n prisma__value: Buffer.from(parameter).toString('base64'),\n }\n }\n\n if (ArrayBuffer.isView(parameter)) {\n const { buffer, byteOffset, byteLength } = parameter\n return {\n prisma__type: 'bytes',\n prisma__value: Buffer.from(buffer, byteOffset, byteLength).toString('base64'),\n }\n }\n\n if (typeof parameter === 'object' && objectSerialization === 'slow') {\n return preprocessObject(parameter)\n }\n\n return parameter\n}\n\nfunction isArrayBufferLike(value: any): value is ArrayBufferLike {\n if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer) {\n return true\n }\n\n if (typeof value === 'object' && value !== null) {\n return value[Symbol.toStringTag] === 'ArrayBuffer' || value[Symbol.toStringTag] === 'SharedArrayBuffer'\n }\n\n return false\n}\n\nfunction preprocessObject(obj: any): unknown {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n\n if (typeof obj.toJSON === 'function') {\n return obj.toJSON()\n }\n\n // TODO: map from blaze would've been convenient here to map arrays and objects uniformly,\n // but importing it in this file causes compilation errors in tsd tests.\n\n if (Array.isArray(obj)) {\n return obj.map(preprocessValueInObject)\n }\n\n const result = {} as any\n\n for (const key of Object.keys(obj as object)) {\n result[key] = preprocessValueInObject(obj[key])\n }\n\n return result\n}\n\nfunction preprocessValueInObject(value: any): unknown {\n if (typeof value === 'bigint') {\n return value.toString()\n }\n\n return preprocessObject(value)\n}\n", "import { Debug } from '@prisma/debug'\nimport { Sql } from 'sql-template-tag'\n\nimport { MiddlewareArgsMapper } from '../../getPrismaClient'\nimport { mssqlPreparedStatement } from '../../utils/mssqlPreparedStatement'\nimport { serializeRawParameters } from '../../utils/serializeRawParameters'\nimport { isTypedSql } from '../types/exported'\nimport { RawQueryArgs } from '../types/exported/RawQueryArgs'\n\nconst ALTER_RE = /^(\\s*alter\\s)/i\n\nconst debug = Debug('prisma:client')\n\n// TODO also check/disallow for CREATE, DROP\nexport function checkAlter(activeProvider: string, query: string, values: unknown[], invalidCall: string) {\n if (activeProvider !== 'postgresql' && activeProvider !== 'cockroachdb') {\n return\n }\n if (values.length > 0 && ALTER_RE.exec(query)) {\n // See https://github.com/prisma/prisma-client-js/issues/940 for more info\n throw new Error(`Running ALTER using ${invalidCall} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)\n }\n}\n\ntype RawQueryArgsMapperInput = {\n clientMethod: string\n activeProvider: string\n}\n\nexport const rawQueryArgsMapper =\n ({ clientMethod, activeProvider }: RawQueryArgsMapperInput) =>\n (args: RawQueryArgs) => {\n // TODO Clean up types\n let queryString = ''\n let parameters: { values: string; __prismaRawParameters__: true } | undefined\n if (isTypedSql(args)) {\n queryString = args.sql\n parameters = {\n values: serializeRawParameters(args.values),\n __prismaRawParameters__: true,\n }\n } else if (Array.isArray(args)) {\n // If this was called as prisma.$executeRaw(<SQL>, [...values]), assume it is a pre-prepared SQL statement, and forward it without any changes\n const [query, ...values] = args\n queryString = query\n parameters = {\n values: serializeRawParameters(values || []),\n __prismaRawParameters__: true,\n }\n } else {\n // If this was called as prisma.$executeRaw`<SQL>` try to generate a SQL prepared statement\n switch (activeProvider) {\n case 'sqlite':\n case 'mysql': {\n queryString = args.sql\n parameters = {\n values: serializeRawParameters(args.values),\n __prismaRawParameters__: true,\n }\n break\n }\n\n case 'cockroachdb':\n case 'postgresql':\n case 'postgres': {\n queryString = args.text\n\n parameters = {\n values: serializeRawParameters(args.values),\n __prismaRawParameters__: true,\n }\n break\n }\n\n case 'sqlserver': {\n queryString = mssqlPreparedStatement(args)\n parameters = {\n values: serializeRawParameters(args.values),\n __prismaRawParameters__: true,\n }\n break\n }\n default: {\n throw new Error(`The ${activeProvider} provider does not support ${clientMethod}`)\n }\n }\n }\n\n if (parameters?.values) {\n debug(`prisma.${clientMethod}(${queryString}, ${parameters.values})`)\n } else {\n debug(`prisma.${clientMethod}(${queryString})`)\n }\n\n return { query: queryString, parameters }\n }\n\ntype MiddlewareRawArgsTemplateString = [string[], ...unknown[]]\ntype MiddlewareRawArgsSql = [Sql]\n\nexport const templateStringMiddlewareArgsMapper: MiddlewareArgsMapper<Sql, MiddlewareRawArgsTemplateString> = {\n requestArgsToMiddlewareArgs(sql) {\n return [sql.strings, ...sql.values]\n },\n\n middlewareArgsToRequestArgs(requestArgs) {\n const [strings, ...values] = requestArgs\n return new Sql(strings, values)\n },\n}\n\nexport const sqlMiddlewareArgsMapper: MiddlewareArgsMapper<Sql, MiddlewareRawArgsSql> = {\n requestArgsToMiddlewareArgs(sql) {\n return [sql]\n },\n\n middlewareArgsToRequestArgs(requestArgs) {\n return requestArgs[0]\n },\n}\n", "import type { PrismaOperationSpec, PrismaPromise, PrismaPromiseTransaction } from './PrismaPromise'\n\nexport type PrismaPromiseCallback = (transaction?: PrismaPromiseTransaction) => Promise<unknown>\n\n/**\n * Creates a [[PrismaPromise]]. It is Prisma's implementation of `Promise` which\n * is essentially a proxy for `Promise`. All the transaction-compatible client\n * methods return one, this allows for pre-preparing queries without executing\n * them until `.then` is called. It's the foundation of Prisma's query batching.\n * @param callback that will be wrapped within our promise implementation\n * @see [[PrismaPromise]]\n * @returns\n */\nexport type PrismaPromiseFactory = <T extends PrismaOperationSpec<unknown>>(\n callback: PrismaPromiseCallback,\n op?: T,\n) => PrismaPromise<unknown>\n\n/**\n * Creates a factory, that allows creating PrismaPromises, bound to a specific transactions\n * @param transaction\n * @returns\n */\nexport function createPrismaPromiseFactory(transaction?: PrismaPromiseTransaction): PrismaPromiseFactory {\n return function createPrismaPromise<TSpec extends PrismaOperationSpec<unknown>>(\n callback: PrismaPromiseCallback,\n op?: TSpec,\n ): PrismaPromise<unknown, TSpec> {\n let promise: PrismaPromise<unknown> | undefined\n const _callback = (callbackTransaction = transaction): PrismaPromise<unknown> => {\n try {\n // promises cannot be triggered twice after resolving\n if (callbackTransaction === undefined || callbackTransaction?.kind === 'itx') {\n return (promise ??= valueToPromise(callback(callbackTransaction)))\n }\n\n // but for batch tx we can trigger them again & again\n return valueToPromise(callback(callbackTransaction))\n } catch (error) {\n // if the callback throws, then we reject the promise\n // and that is because exceptions are not always async\n return Promise.reject(error) as PrismaPromise<unknown>\n }\n }\n\n return {\n get spec() {\n return op!\n },\n\n then(onFulfilled, onRejected) {\n return _callback().then(onFulfilled, onRejected)\n },\n catch(onRejected) {\n return _callback().catch(onRejected)\n },\n finally(onFinally) {\n return _callback().finally(onFinally)\n },\n\n requestTransaction(batchTransaction) {\n const promise = _callback(batchTransaction)\n\n if (promise.requestTransaction) {\n // we want to have support for nested promises\n return promise.requestTransaction(batchTransaction)\n }\n\n return promise\n },\n [Symbol.toStringTag]: 'PrismaPromise',\n }\n }\n}\n\nfunction valueToPromise<T>(thing: T): PrismaPromise<T> {\n if (typeof thing['then'] === 'function') {\n return thing as PrismaPromise<T>\n }\n\n return Promise.resolve(thing) as PrismaPromise<T>\n}\n", "import type { Context } from '@opentelemetry/api'\nimport { EngineSpan, ExtendedSpanOptions, SpanCallback, TracingHelper, version } from '@prisma/internals'\n\nconst majorVersion = version.split('.')[0]\n\nexport const disabledTracingHelper: TracingHelper = {\n isEnabled() {\n return false\n },\n getTraceParent() {\n // https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers\n // If traceparent ends with -00 this trace will not be sampled\n // the query engine needs the `10` for the span and trace id otherwise it does not parse this\n return `00-10-10-00`\n },\n\n dispatchEngineSpans() {},\n\n getActiveContext() {\n return undefined\n },\n\n runInChildSpan<R>(options: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n return callback()\n },\n}\n\n/**\n * Tracing helper that can dynamically switch between enabled/disabled states\n * Needed because tracing can be disabled and enabled with the calls to\n * PrismaInstrumentation::disable/enable at any point\n */\nclass DynamicTracingHelper implements TracingHelper {\n isEnabled(): boolean {\n return this.getGlobalTracingHelper().isEnabled()\n }\n getTraceParent(context: Context) {\n return this.getGlobalTracingHelper().getTraceParent(context)\n }\n\n dispatchEngineSpans(spans: EngineSpan[]) {\n return this.getGlobalTracingHelper().dispatchEngineSpans(spans)\n }\n\n getActiveContext() {\n return this.getGlobalTracingHelper().getActiveContext()\n }\n runInChildSpan<R>(options: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n return this.getGlobalTracingHelper().runInChildSpan(options, callback)\n }\n\n private getGlobalTracingHelper(): TracingHelper {\n // These globals are defined in `@prisma/instrumentation`\n const versionedPrismaInstrumentationGlobal = globalThis[`V${majorVersion}_PRISMA_INSTRUMENTATION`]\n const fallbackPrismaInstrumentationGlobal = globalThis.PRISMA_INSTRUMENTATION\n\n return (\n versionedPrismaInstrumentationGlobal?.helper ??\n // TODO(v7): In future major versions, the tracing helper should only be read from the versioned global field.\n // This is to ensure that instrumentation libraries (including `@prisma/instrumentation`) can register tracing helpers with compatible interfaces for each major version - thus preventing potential crashes in case instrumentation libraries are not yet updated for a new major, allowing for easier migration.\n // Currently, the versioned helper is preferred and the fallback helper is picked up for backwards compatibility.\n fallbackPrismaInstrumentationGlobal?.helper ??\n disabledTracingHelper\n )\n }\n}\n\nexport function getTracingHelper(): TracingHelper {\n return new DynamicTracingHelper()\n}\n", "/**\n * Creates an exotic promise that opens after x `await`s.\n * @remarks\n * This is currently used for locking regular transactions.\n * This ensures that all queries are executed at once/batched.\n * Even if middlewares are in use, they'll all execute at once.\n * @param knock the amount of awaits to open the promise\n * @param cb the callback to execute and value to return\n * @returns\n */\nexport function getLockCountPromise<V = void>(knock: number, cb: () => V | void = () => {}) {\n let resolve: (v: V | void) => void\n const lock = new Promise<V | void>((res) => (resolve = res))\n\n return {\n then(onFulfilled) {\n if (--knock === 0) resolve(cb())\n\n return onFulfilled?.(lock as unknown as V | void)\n },\n } as PromiseLike<V | void>\n}\n", "type LogLevel = 'info' | 'query' | 'warn' | 'error'\ntype LogDefinition = {\n level: LogLevel\n emit: 'stdout' | 'event'\n}\n\nexport function getLogLevel(log: LogLevel | Array<LogLevel | LogDefinition>): LogLevel | undefined {\n if (typeof log === 'string') {\n return log\n }\n return log.reduce<LogLevel | undefined>((acc, curr) => {\n const currentLevel = typeof curr === 'string' ? curr : curr.level\n if (currentLevel === 'query') {\n return acc\n }\n if (!acc) {\n return currentLevel\n }\n if (curr === 'info' || acc === 'info') {\n // info has precedence\n return 'info'\n }\n return currentLevel\n }, undefined)\n}\n", "export interface ErrorWithBatchIndex {\n batchRequestIdx?: number\n}\n\nexport function hasBatchIndex(value: object): value is Required<ErrorWithBatchIndex> {\n return typeof value['batchRequestIdx'] === 'number'\n}\n", "import { JsonQuery } from '../engines'\n\nexport function getBatchId(query: JsonQuery): string | undefined {\n if (query.action !== 'findUnique' && query.action !== 'findUniqueOrThrow') {\n return undefined\n }\n const parts: string[] = []\n if (query.modelName) {\n parts.push(query.modelName)\n }\n\n if (query.query.arguments) {\n parts.push(buildKeysString(query.query.arguments))\n }\n parts.push(buildKeysString(query.query.selection))\n\n return parts.join('')\n}\n\nfunction buildKeysString(obj: object): string {\n const keysArray = Object.keys(obj)\n .sort()\n .map((key) => {\n const value = obj[key]\n if (typeof value === 'object' && value !== null) {\n return `(${key} ${buildKeysString(value)})`\n }\n return key\n })\n\n return `(${keysArray.join(' ')})`\n}\n", "import { JsonQueryAction } from '../engines'\n\nconst writeMap: Record<JsonQueryAction, boolean> = {\n aggregate: false,\n aggregateRaw: false,\n createMany: true,\n createManyAndReturn: true,\n createOne: true,\n deleteMany: true,\n deleteOne: true,\n executeRaw: true,\n findFirst: false,\n findFirstOrThrow: false,\n findMany: false,\n findRaw: false,\n findUnique: false,\n findUniqueOrThrow: false,\n groupBy: false,\n queryRaw: false,\n runCommandRaw: true,\n updateMany: true,\n updateManyAndReturn: true,\n updateOne: true,\n upsertOne: true,\n}\n\nexport function isWrite(action: JsonQueryAction): boolean {\n return writeMap[action]\n}\n", "interface Job {\n resolve: (data: any) => void\n reject: (data: any) => void\n request: any\n}\n\nexport type DataLoaderOptions<T> = {\n singleLoader: (request: T) => Promise<any>\n batchLoader: (request: T[]) => Promise<any[]>\n batchBy: (request: T) => string | undefined\n // Specifies the order in which requests in a batch would\n // be sorted. See Array.prototype.sort callback\n batchOrder: (requestA: T, requestB: T) => number\n}\n\nexport class DataLoader<T = unknown> {\n batches: { [key: string]: Job[] }\n private tickActive = false\n constructor(private options: DataLoaderOptions<T>) {\n this.batches = {}\n }\n\n request(request: T): Promise<any> {\n const hash = this.options.batchBy(request)\n if (!hash) {\n return this.options.singleLoader(request)\n }\n if (!this.batches[hash]) {\n this.batches[hash] = []\n\n // make sure, that we only tick once at a time\n if (!this.tickActive) {\n this.tickActive = true\n process.nextTick(() => {\n this.dispatchBatches()\n this.tickActive = false\n })\n }\n }\n\n return new Promise((resolve, reject) => {\n this.batches[hash].push({\n request,\n resolve,\n reject,\n })\n })\n }\n\n private dispatchBatches() {\n for (const key in this.batches) {\n const batch = this.batches[key]\n delete this.batches[key]\n\n // only batch if necessary\n // this might occur, if there's e.g. only 1 findUnique in the batch\n if (batch.length === 1) {\n this.options\n .singleLoader(batch[0].request)\n .then((result) => {\n if (result instanceof Error) {\n batch[0].reject(result)\n } else {\n batch[0].resolve(result)\n }\n })\n .catch((e) => {\n batch[0].reject(e)\n })\n } else {\n batch.sort((a, b) => this.options.batchOrder(a.request, b.request))\n this.options\n .batchLoader(batch.map((j) => j.request))\n .then((results) => {\n if (results instanceof Error) {\n for (let i = 0; i < batch.length; i++) {\n batch[i].reject(results)\n }\n } else {\n for (let i = 0; i < batch.length; i++) {\n const value = results[i]\n if (value instanceof Error) {\n batch[i].reject(value)\n } else {\n batch[i].resolve(value)\n }\n }\n }\n })\n .catch((e) => {\n for (let i = 0; i < batch.length; i++) {\n batch[i].reject(e)\n }\n })\n }\n }\n }\n\n get [Symbol.toStringTag]() {\n return 'DataLoader'\n }\n}\n", "import type { QueryIntrospectionBuiltinType } from '@prisma/generator'\nimport Decimal from 'decimal.js'\n\nexport type RawResponse = {\n columns: string[]\n types: QueryIntrospectionBuiltinType[]\n rows: unknown[][]\n}\n\nfunction deserializeValue(type: QueryIntrospectionBuiltinType, value: unknown): unknown {\n if (value === null) {\n return value\n }\n\n switch (type) {\n case 'bigint':\n return BigInt(value as string)\n\n case 'bytes': {\n const { buffer, byteOffset, byteLength } = Buffer.from(value as string, 'base64')\n return new Uint8Array(buffer, byteOffset, byteLength)\n }\n\n case 'decimal':\n return new Decimal(value as string)\n\n case 'datetime':\n case 'date':\n return new Date(value as string)\n\n case 'time':\n return new Date(`1970-01-01T${value}Z`)\n\n case 'bigint-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('bigint', v))\n case 'bytes-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('bytes', v))\n case 'decimal-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('decimal', v))\n case 'datetime-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('datetime', v))\n case 'date-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('date', v))\n case 'time-array':\n return (value as unknown[]).map((v: unknown) => deserializeValue('time', v))\n\n default:\n return value\n }\n}\n\ntype DeserializedResponse = Array<Record<string, unknown>>\n\nexport function deserializeRawResult(response: RawResponse): DeserializedResponse {\n const deserializedResponse: DeserializedResponse = []\n // Performance optimization. See https://github.com/brianc/node-postgres/issues/3042\n const prebuiltEmptyObject = createPrebuiltEmptyResultObject(response)\n\n for (let i = 0; i < response.rows.length; i++) {\n const row = response.rows[i]\n const mappedRow = { ...prebuiltEmptyObject } as Record<string, unknown>\n\n for (let j = 0; j < row.length; j++) {\n mappedRow[response.columns[j]] = deserializeValue(response.types[j], row[j])\n }\n\n deserializedResponse.push(mappedRow)\n }\n\n return deserializedResponse\n}\n\nfunction createPrebuiltEmptyResultObject(response: RawResponse): Record<string, null> {\n const row = {}\n\n for (let i = 0; i < response.columns.length; i++) {\n row[response.columns[i]] = null\n }\n\n return row\n}\n", "import { Context } from '@opentelemetry/api'\nimport { deserializeJsonResponse } from '@prisma/client-engine-runtime'\nimport { Debug } from '@prisma/debug'\nimport { assertNever } from '@prisma/internals'\nimport stripAnsi from 'strip-ansi'\n\nimport {\n EngineValidationError,\n InteractiveTransactionOptions,\n JsonQuery,\n LogEmitter,\n TransactionOptions,\n} from '../runtime/core/engines'\nimport {\n PrismaClientInitializationError,\n PrismaClientKnownRequestError,\n PrismaClientRustPanicError,\n PrismaClientUnknownRequestError,\n} from '.'\nimport { AccelerateExtensionFetchDecorator } from './core/engines/common/Engine'\nimport { QueryEngineResultData } from './core/engines/common/types/QueryEngine'\nimport { throwValidationException } from './core/errorRendering/throwValidationException'\nimport { hasBatchIndex } from './core/errors/ErrorWithBatchIndex'\nimport { createApplyBatchExtensionsFunction } from './core/extensions/applyQueryExtensions'\nimport { MergedExtensionsList } from './core/extensions/MergedExtensionsList'\nimport { getBatchId } from './core/jsonProtocol/getBatchId'\nimport { isWrite } from './core/jsonProtocol/isWrite'\nimport { GlobalOmitOptions } from './core/jsonProtocol/serializeJsonQuery'\nimport { PrismaPromiseInteractiveTransaction, PrismaPromiseTransaction } from './core/request/PrismaPromise'\nimport { Action, JsArgs } from './core/types/exported/JsApi'\nimport { DataLoader } from './DataLoader'\nimport type { Client, Unpacker } from './getPrismaClient'\nimport { CallSite } from './utils/CallSite'\nimport { createErrorMessageWithContext } from './utils/createErrorMessageWithContext'\nimport { deepGet } from './utils/deep-set'\nimport { deserializeRawResult, RawResponse } from './utils/deserializeRawResults'\n\nconst debug = Debug('prisma:client:request_handler')\n\nexport type RequestParams = {\n modelName?: string\n action: Action\n protocolQuery: JsonQuery\n dataPath: string[]\n clientMethod: string\n callsite?: CallSite\n transaction?: PrismaPromiseTransaction\n extensions: MergedExtensionsList\n args?: any\n headers?: Record<string, string>\n unpacker?: Unpacker\n otelParentCtx?: Context\n otelChildCtx?: Context\n globalOmit?: GlobalOmitOptions\n customDataProxyFetch?: AccelerateExtensionFetchDecorator\n}\n\nexport type HandleErrorParams = {\n args: JsArgs\n error: any\n clientMethod: string\n callsite?: CallSite\n transaction?: PrismaPromiseTransaction\n modelName?: string\n globalOmit?: GlobalOmitOptions\n}\n\nexport class RequestHandler {\n client: Client\n dataloader: DataLoader<RequestParams>\n private logEmitter?: LogEmitter\n\n constructor(client: Client, logEmitter?: LogEmitter) {\n this.logEmitter = logEmitter\n this.client = client\n\n this.dataloader = new DataLoader({\n batchLoader: createApplyBatchExtensionsFunction(async ({ requests, customDataProxyFetch }) => {\n const { transaction, otelParentCtx } = requests[0]\n const queries = requests.map((r) => r.protocolQuery)\n const traceparent = this.client._tracingHelper.getTraceParent(otelParentCtx)\n\n // TODO: pass the child information to QE for it to issue links to queries\n // const links = requests.map((r) => trace.getSpanContext(r.otelChildCtx!))\n\n const containsWrite = requests.some((r) => isWrite(r.protocolQuery.action))\n\n const results = await this.client._engine.requestBatch(queries, {\n traceparent,\n transaction: getTransactionOptions(transaction),\n containsWrite,\n customDataProxyFetch,\n })\n\n return results.map((result, i) => {\n if (result instanceof Error) {\n return result\n }\n\n try {\n return this.mapQueryEngineResult(requests[i], result)\n } catch (error) {\n return error\n }\n })\n }),\n\n singleLoader: async (request) => {\n const interactiveTransaction =\n request.transaction?.kind === 'itx' ? getItxTransactionOptions(request.transaction) : undefined\n\n const response = await this.client._engine.request(request.protocolQuery, {\n traceparent: this.client._tracingHelper.getTraceParent(),\n interactiveTransaction,\n isWrite: isWrite(request.protocolQuery.action),\n customDataProxyFetch: request.customDataProxyFetch,\n })\n return this.mapQueryEngineResult(request, response)\n },\n\n batchBy: (request) => {\n if (request.transaction?.id) {\n return `transaction-${request.transaction.id}`\n }\n\n return getBatchId(request.protocolQuery)\n },\n\n batchOrder(requestA, requestB) {\n if (requestA.transaction?.kind === 'batch' && requestB.transaction?.kind === 'batch') {\n return requestA.transaction.index - requestB.transaction.index\n }\n return 0\n },\n })\n }\n\n async request(params: RequestParams) {\n try {\n return await this.dataloader.request(params)\n } catch (error) {\n const { clientMethod, callsite, transaction, args, modelName } = params\n this.handleAndLogRequestError({\n error,\n clientMethod,\n callsite,\n transaction,\n args,\n modelName,\n globalOmit: params.globalOmit,\n })\n }\n }\n\n mapQueryEngineResult({ dataPath, unpacker }: RequestParams, response: QueryEngineResultData<any>) {\n const data = response?.data\n\n /**\n * Unpack\n */\n const result = this.unpack(data, dataPath, unpacker)\n if (process.env.PRISMA_CLIENT_GET_TIME) {\n return { data: result }\n }\n return result\n }\n\n /**\n * Handles the error and logs it, logging the error is done synchronously waiting for the event\n * handlers to finish.\n */\n handleAndLogRequestError(params: HandleErrorParams): never {\n try {\n this.handleRequestError(params)\n } catch (err) {\n if (this.logEmitter) {\n this.logEmitter.emit('error', { message: err.message, target: params.clientMethod, timestamp: new Date() })\n }\n throw err\n }\n }\n\n handleRequestError({\n error,\n clientMethod,\n callsite,\n transaction,\n args,\n modelName,\n globalOmit,\n }: HandleErrorParams): never {\n debug(error)\n\n if (isMismatchingBatchIndex(error, transaction)) {\n // if this is batch error and current request was not it's cause, we don't add\n // context information to the error: this wasn't a request that caused batch to fail\n throw error\n }\n\n if (error instanceof PrismaClientKnownRequestError && isValidationError(error)) {\n const validationError = convertValidationError(error.meta as EngineValidationError)\n throwValidationException({\n args,\n errors: [validationError],\n callsite,\n errorFormat: this.client._errorFormat,\n originalMethod: clientMethod,\n clientVersion: this.client._clientVersion,\n globalOmit,\n })\n }\n\n let message = error.message\n if (callsite) {\n message = createErrorMessageWithContext({\n callsite,\n originalMethod: clientMethod,\n isPanic: error.isPanic,\n showColors: this.client._errorFormat === 'pretty',\n message,\n })\n }\n\n message = this.sanitizeMessage(message)\n // TODO: Do request with callsite instead, so we don't need to rethrow\n if (error.code) {\n const meta = modelName ? { modelName, ...error.meta } : error.meta\n throw new PrismaClientKnownRequestError(message, {\n code: error.code,\n clientVersion: this.client._clientVersion,\n meta,\n batchRequestIdx: error.batchRequestIdx,\n })\n } else if (error.isPanic) {\n throw new PrismaClientRustPanicError(message, this.client._clientVersion)\n } else if (error instanceof PrismaClientUnknownRequestError) {\n throw new PrismaClientUnknownRequestError(message, {\n clientVersion: this.client._clientVersion,\n batchRequestIdx: error.batchRequestIdx,\n })\n } else if (error instanceof PrismaClientInitializationError) {\n throw new PrismaClientInitializationError(message, this.client._clientVersion)\n } else if (error instanceof PrismaClientRustPanicError) {\n throw new PrismaClientRustPanicError(message, this.client._clientVersion)\n }\n\n error.clientVersion = this.client._clientVersion\n\n throw error\n }\n\n sanitizeMessage(message) {\n if (this.client._errorFormat && this.client._errorFormat !== 'pretty') {\n return stripAnsi(message)\n }\n return message\n }\n\n unpack(data: unknown, dataPath: string[], unpacker?: Unpacker) {\n if (!data) {\n return data\n }\n if (data['data']) {\n data = data['data']\n }\n\n if (!data) {\n return data\n }\n const operation = Object.keys(data)[0]\n const response = Object.values(data)[0]\n const pathForGet = dataPath.filter((key) => key !== 'select' && key !== 'include')\n const extractedResponse = deepGet(response, pathForGet)\n const deserializedResponse =\n operation === 'queryRaw'\n ? deserializeRawResult(extractedResponse as RawResponse)\n : (deserializeJsonResponse(extractedResponse) as unknown)\n\n return unpacker ? unpacker(deserializedResponse) : deserializedResponse\n }\n\n get [Symbol.toStringTag]() {\n return 'RequestHandler'\n }\n}\n\nfunction getTransactionOptions<PayloadType>(\n transaction?: PrismaPromiseTransaction<PayloadType>,\n): TransactionOptions<PayloadType> | undefined {\n if (!transaction) {\n return undefined\n }\n\n if (transaction.kind === 'batch') {\n return {\n kind: 'batch',\n options: {\n isolationLevel: transaction.isolationLevel,\n },\n }\n }\n\n if (transaction.kind === 'itx') {\n return {\n kind: 'itx',\n options: getItxTransactionOptions(transaction),\n }\n }\n\n assertNever(transaction, 'Unknown transaction kind')\n}\n\nfunction getItxTransactionOptions<PayloadType>(\n transaction: PrismaPromiseInteractiveTransaction<PayloadType>,\n): InteractiveTransactionOptions<PayloadType> {\n return {\n id: transaction.id,\n payload: transaction.payload,\n }\n}\n\nfunction isMismatchingBatchIndex(error: any, transaction: PrismaPromiseTransaction | undefined) {\n return hasBatchIndex(error) && transaction?.kind === 'batch' && error.batchRequestIdx !== transaction.index\n}\n\nfunction isValidationError(error: PrismaClientKnownRequestError) {\n return (\n error.code === 'P2009' || // validation error\n error.code === 'P2012' // required argument missing\n )\n}\n\n/**\n * Engine validation errors include extra segment for selectionPath - root query field.\n * This function removes it (since it does not exist on js arguments). In case of `Union`\n * error type, removes heading element from selectionPath of nested errors as well.\n * @param error\n * @returns\n */\nfunction convertValidationError(error: EngineValidationError): EngineValidationError {\n if (error.kind === 'Union') {\n return {\n kind: 'Union',\n errors: error.errors.map(convertValidationError),\n }\n }\n\n if (Array.isArray(error['selectionPath'])) {\n const [, ...selectionPath] = error['selectionPath']\n\n return {\n ...error,\n selectionPath,\n } as EngineValidationError\n }\n\n return error\n}\n", "import { version } from '../../../package.json'\n\nexport const clientVersion = version as string\n", "import { GetPrismaClientConfig, RuntimeDataModel, RuntimeModel, uncapitalize } from '@prisma/client-common'\nimport { ClientEngineType, getClientEngineType } from '@prisma/internals'\nimport leven from 'js-levenshtein'\n\nimport { buildArgumentsRenderingTree, renderArgsTree } from '../core/errorRendering/ArgumentsRenderingTree'\nimport { PrismaClientConstructorValidationError } from '../core/errors/PrismaClientConstructorValidationError'\nimport type { ErrorFormat, LogLevel, PrismaClientOptions } from '../getPrismaClient'\n\nconst knownProperties = [\n 'datasources',\n 'datasourceUrl',\n 'errorFormat',\n 'adapter',\n 'log',\n 'transactionOptions',\n 'omit',\n '__internal',\n]\nconst errorFormats: ErrorFormat[] = ['pretty', 'colorless', 'minimal']\nconst logLevels: LogLevel[] = ['info', 'query', 'warn', 'error']\n\ntype OmitValidationError =\n | { kind: 'UnknownModel'; modelKey: string }\n | { kind: 'UnknownField'; modelKey: string; fieldName: string }\n | { kind: 'RelationInOmit'; modelKey: string; fieldName: string }\n | { kind: 'InvalidFieldValue'; modelKey: string; fieldName: string }\n\n/**\n * Subset of `GetPrismaClientConfig` which is used during validation.\n * Feel free to allow more properties when necessary but don't forget to add\n * them in the mock config in `validatePrismaClientOptions.test.ts`.\n */\ntype ClientConfig = Pick<GetPrismaClientConfig, 'datasourceNames' | 'generator' | 'runtimeDataModel'>\n\nconst validators: {\n [K in keyof PrismaClientOptions]-?: (\n option: PrismaClientOptions[K],\n config: ClientConfig,\n dataModel: RuntimeDataModel,\n ) => void\n} = {\n datasources: (options, { datasourceNames }) => {\n if (!options) {\n return\n }\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for \"datasources\" provided to PrismaClient constructor`,\n )\n }\n\n for (const [key, value] of Object.entries(options)) {\n if (!datasourceNames.includes(key)) {\n const didYouMean =\n getDidYouMean(key, datasourceNames) || ` Available datasources: ${datasourceNames.join(', ')}`\n throw new PrismaClientConstructorValidationError(\n `Unknown datasource ${key} provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n if (typeof value !== 'object' || Array.isArray(value)) {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for datasource \"${key}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`,\n )\n }\n if (value && typeof value === 'object') {\n for (const [key1, value1] of Object.entries(value)) {\n if (key1 !== 'url') {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for datasource \"${key}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`,\n )\n }\n if (typeof value1 !== 'string') {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(value1)} for datasource \"${key}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`,\n )\n }\n }\n }\n }\n },\n adapter: (adapter, config) => {\n if (!adapter && getClientEngineType(config.generator) === ClientEngineType.Client) {\n throw new PrismaClientConstructorValidationError(\n `Using engine type \"client\" requires a driver adapter to be provided to PrismaClient constructor.`,\n )\n }\n\n if (adapter === null) {\n return\n }\n\n if (adapter === undefined) {\n throw new PrismaClientConstructorValidationError(\n `\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.`,\n )\n }\n\n if (getClientEngineType(config.generator) === ClientEngineType.Binary) {\n throw new PrismaClientConstructorValidationError(\n `Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.`,\n )\n }\n },\n datasourceUrl: (options) => {\n if (typeof options !== 'undefined' && typeof options !== 'string') {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`,\n )\n }\n },\n errorFormat: (options) => {\n if (!options) {\n return\n }\n if (typeof options !== 'string') {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for \"errorFormat\" provided to PrismaClient constructor.`,\n )\n }\n if (!errorFormats.includes(options as ErrorFormat)) {\n const didYouMean = getDidYouMean(options, errorFormats)\n throw new PrismaClientConstructorValidationError(\n `Invalid errorFormat ${options} provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n },\n log: (options) => {\n if (!options) {\n return\n }\n if (!Array.isArray(options)) {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(options)} for \"log\" provided to PrismaClient constructor.`,\n )\n }\n\n function validateLogLevel(level: any) {\n if (typeof level === 'string') {\n if (!logLevels.includes(level as LogLevel)) {\n const didYouMean = getDidYouMean(level, logLevels)\n throw new PrismaClientConstructorValidationError(\n `Invalid log level \"${level}\" provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n }\n }\n\n for (const option of options) {\n validateLogLevel(option)\n\n const logValidators = {\n level: validateLogLevel,\n emit: (value) => {\n const emits = ['stdout', 'event']\n if (!emits.includes(value)) {\n const didYouMean = getDidYouMean(value, emits)\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(\n value,\n )} for \"emit\" in logLevel provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n },\n }\n\n if (option && typeof option === 'object') {\n for (const [key, value] of Object.entries(option)) {\n if (logValidators[key]) {\n logValidators[key](value)\n } else {\n throw new PrismaClientConstructorValidationError(\n `Invalid property ${key} for \"log\" provided to PrismaClient constructor`,\n )\n }\n }\n }\n }\n },\n transactionOptions: (options: any) => {\n if (!options) {\n return\n }\n\n const maxWait = options.maxWait\n if (maxWait != null && maxWait <= 0) {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${maxWait} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`,\n )\n }\n\n const timeout = options.timeout\n if (timeout != null && timeout <= 0) {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${timeout} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`,\n )\n }\n },\n omit: (options: unknown, config) => {\n if (typeof options !== 'object') {\n throw new PrismaClientConstructorValidationError(`\"omit\" option is expected to be an object.`)\n }\n if (options === null) {\n throw new PrismaClientConstructorValidationError(`\"omit\" option can not be \\`null\\``)\n }\n\n const validationErrors: OmitValidationError[] = []\n for (const [modelKey, modelConfig] of Object.entries(options)) {\n const modelOrType = getModelOrTypeByKey(modelKey, config.runtimeDataModel)\n if (!modelOrType) {\n validationErrors.push({ kind: 'UnknownModel', modelKey: modelKey })\n continue\n }\n for (const [fieldName, value] of Object.entries(modelConfig)) {\n const field = modelOrType.fields.find((field) => field.name === fieldName)\n if (!field) {\n validationErrors.push({ kind: 'UnknownField', modelKey, fieldName })\n continue\n }\n if (field.relationName) {\n validationErrors.push({ kind: 'RelationInOmit', modelKey, fieldName })\n continue\n }\n if (typeof value !== 'boolean') {\n validationErrors.push({ kind: 'InvalidFieldValue', modelKey, fieldName })\n }\n }\n }\n if (validationErrors.length > 0) {\n throw new PrismaClientConstructorValidationError(\n renderOmitValidationErrors(options as Record<string, unknown>, validationErrors),\n )\n }\n },\n __internal: (value) => {\n if (!value) {\n return\n }\n const knownKeys = ['debug', 'engine', 'configOverride']\n if (typeof value !== 'object') {\n throw new PrismaClientConstructorValidationError(\n `Invalid value ${JSON.stringify(value)} for \"__internal\" to PrismaClient constructor`,\n )\n }\n for (const [key] of Object.entries(value)) {\n if (!knownKeys.includes(key)) {\n const didYouMean = getDidYouMean(key, knownKeys)\n throw new PrismaClientConstructorValidationError(\n `Invalid property ${JSON.stringify(key)} for \"__internal\" provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n }\n // TODO: Add more validation here\n // but as this is an internal, non user-facing api, it's not urgent\n },\n}\n\nexport function validatePrismaClientOptions(options: PrismaClientOptions, config: ClientConfig) {\n for (const [key, value] of Object.entries(options)) {\n if (!knownProperties.includes(key)) {\n const didYouMean = getDidYouMean(key, knownProperties)\n throw new PrismaClientConstructorValidationError(\n `Unknown property ${key} provided to PrismaClient constructor.${didYouMean}`,\n )\n }\n validators[key](value, config)\n }\n\n if (options.datasourceUrl && options.datasources) {\n throw new PrismaClientConstructorValidationError(\n 'Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them',\n )\n }\n}\n\nfunction getDidYouMean(str: string, options: string[]): string {\n if (options.length === 0) {\n return ''\n }\n\n if (typeof str !== 'string') {\n return ''\n }\n\n const alternative = getAlternative(str, options)\n if (!alternative) {\n return ''\n }\n\n return ` Did you mean \"${alternative}\"?`\n}\n\nfunction getAlternative(str: string, options: string[]): null | string {\n if (options.length === 0) {\n return null\n }\n\n const optionsWithDistances = options.map((value) => ({\n value,\n distance: leven(str, value),\n }))\n\n optionsWithDistances.sort((a, b) => {\n return a.distance < b.distance ? -1 : 1\n })\n\n const bestAlternative = optionsWithDistances[0]\n if (bestAlternative.distance < 3) {\n return bestAlternative.value\n }\n\n return null\n}\n\nfunction getModelOrTypeByKey(modelKey: string, runtimeDataModel: RuntimeDataModel): RuntimeModel | undefined {\n return findByKey(runtimeDataModel.models, modelKey) ?? findByKey(runtimeDataModel.types, modelKey)\n}\n\nfunction findByKey<T>(map: Record<string, T>, key: string): T | undefined {\n const foundKey = Object.keys(map).find((mapKey) => uncapitalize(mapKey) === key)\n if (foundKey) {\n return map[foundKey]\n }\n return undefined\n}\n\nfunction renderOmitValidationErrors(\n omitConfig: Record<PropertyKey, unknown>,\n validationErrors: OmitValidationError[],\n): string {\n const argsTree = buildArgumentsRenderingTree(omitConfig)\n for (const error of validationErrors) {\n switch (error.kind) {\n case 'UnknownModel':\n argsTree.arguments.getField(error.modelKey)?.markAsError()\n argsTree.addErrorMessage(() => `Unknown model name: ${error.modelKey}.`)\n break\n case 'UnknownField':\n argsTree.arguments.getDeepField([error.modelKey, error.fieldName])?.markAsError()\n argsTree.addErrorMessage(() => `Model \"${error.modelKey}\" does not have a field named \"${error.fieldName}\".`)\n break\n case 'RelationInOmit':\n argsTree.arguments.getDeepField([error.modelKey, error.fieldName])?.markAsError()\n argsTree.addErrorMessage(() => `Relations are already excluded by default and can not be specified in \"omit\".`)\n break\n case 'InvalidFieldValue':\n argsTree.arguments.getDeepFieldValue([error.modelKey, error.fieldName])?.markAsError()\n argsTree.addErrorMessage(() => `Omit field option value must be a boolean.`)\n break\n }\n }\n const { message, args } = renderArgsTree(argsTree, 'colorless')\n return `Error validating \"omit\" option:\\n\\n${args}\\n\\n${message}`\n}\n", "import { setClassName } from '@prisma/internals'\n\nexport class PrismaClientConstructorValidationError extends Error {\n constructor(message: string) {\n super(message + `\\nRead more at https://pris.ly/d/client-constructor`)\n this.name = 'PrismaClientConstructorValidationError'\n }\n get [Symbol.toStringTag]() {\n return 'PrismaClientConstructorValidationError'\n }\n}\nsetClassName(PrismaClientConstructorValidationError, 'PrismaClientConstructorValidationError')\n", "import { hasBatchIndex } from '../core/errors/ErrorWithBatchIndex'\n\n/**\n * Waits for result of batch $transaction and picks the best possible error to report if any\n * of the request fails. Best error is determined as follows:\n *\n * - if engine have reported an error without batch request index, then the batch is immediately rejected\n * with this error without waiting for other promises\n * - if engine have reported and index of failed request in the batch and that index matches the position of the\n * particular request in the batch, batch is rejected with that error\n * - if batch request index is reported and it does not match current request position, wait for other requests. If no indices\n * match request positions, reject with the earliest error in the batch\n *\n * @param promises\n * @returns\n */\nexport function waitForBatch<T extends PromiseLike<unknown>[]>(\n promises: T,\n): Promise<{ [K in keyof T]: Awaited<T[K]> }> {\n if (promises.length === 0) {\n return Promise.resolve([] as { [K in keyof T]: Awaited<T[K]> })\n }\n return new Promise((resolve, reject) => {\n const successfulResults = new Array(promises.length) as { [K in keyof T]: Awaited<T[K]> }\n let bestError: unknown = null\n let done = false\n let settledPromisesCount = 0\n\n const settleOnePromise = () => {\n if (done) {\n return\n }\n settledPromisesCount++\n if (settledPromisesCount === promises.length) {\n done = true\n if (bestError) {\n reject(bestError)\n } else {\n resolve(successfulResults)\n }\n }\n }\n\n const immediatelyReject = (error: unknown) => {\n if (!done) {\n done = true\n reject(error)\n }\n }\n\n for (let i = 0; i < promises.length; i++) {\n promises[i].then(\n (result) => {\n successfulResults[i] = result\n settleOnePromise()\n },\n (error) => {\n if (!hasBatchIndex(error)) {\n immediatelyReject(error)\n return\n }\n\n if (error.batchRequestIdx === i) {\n immediatelyReject(error)\n } else {\n if (!bestError) {\n bestError = error\n }\n settleOnePromise()\n }\n },\n )\n }\n })\n}\n", "/**\n * List of properties that won't throw exception on access and return undefined instead\n */\nconst allowList = new Set([\n 'toJSON', // used by JSON.stringify\n '$$typeof', // used by old React tooling\n 'asymmetricMatch', // used by Jest\n Symbol.iterator, // used by various JS constructs/methods\n Symbol.toStringTag, // Used by .toString()\n Symbol.isConcatSpreadable, // Used by Array#concat,\n Symbol.toPrimitive, // Used when getting converted to primitive values\n])\n/**\n * Generates more strict variant of an enum which, unlike regular enum,\n * throws on non-existing property access. This can be useful in following situations:\n * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input\n * - enum values are generated dynamically from DMMF.\n *\n * In that case, if using normal enums and no compile-time typechecking, using non-existing property\n * will result in `undefined` value being used, which will be accepted. Using strict enum\n * in this case will help to have a runtime exception, telling you that you are probably doing something wrong.\n *\n * Note: if you need to check for existence of a value in the enum you can still use either\n * `in` operator or `hasOwnProperty` function.\n *\n * @param definition\n * @returns\n */\nexport function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T {\n return new Proxy(definition, {\n get(target, property) {\n if (property in target) {\n return target[property]\n }\n if (allowList.has(property)) {\n return undefined\n }\n throw new TypeError(`Invalid enum value: ${String(property)}`)\n },\n })\n}\n", "import { tryLoadEnvs } from '@prisma/internals'\n\nexport function warnEnvConflicts(envPaths) {\n tryLoadEnvs(envPaths, { conflictCheck: 'warn' })\n}\n"],
"mappings": "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b,GACA,wBAAAI,GACA,qBAAAI,GACA,wBAAAC,GACA,oBAAAE,GACA,qBAAAI,GACA,kBAAAC,GACA,mBAAAJ,GACA,YAAAK,GACA,kBAAAE,GACA,mCAAAL,GACA,iCAAAM,GACA,6BAAAI,GACA,kBAAAC,GACA,cAAAC,GACA,2BAAAC,EACF,ICnPA,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAKA,IAAMC,GAA6C,CACjD,SACA,kBACA,kBACA,gBACA,mCACA,+BACA,+BACA,8BACA,gCACA,yBACA,iCACA,gCACA,MACA,QACA,UACA,WACA,gBACA,gBACA,kBACA,aACA,sBACA,mBACA,mBACA,iBACA,mBACA,gBACA,0BACA,sCACA,eACA,SACA,+BACA,6BACA,+BACA,OACA,gBACA,WACA,MACA,OACA,SACA,YACA,UACA,YACA,OACA,OACA,WACA,oBACA,gBACA,WACA,sBACA,aACA,gBACA,OACA,WACA,eACA,SACA,qBACA,SACA,qBACA,sBACA,MACA,QACA,UACA,kBACA,UACA,cACA,uBACA,2BACA,oBACA,yBACA,wBACA,SACA,gBACA,yBACA,oCACA,aACA,YACA,4BACA,wBACA,KACA,sBACA,UACA,oBACA,UACA,4BACA,aACA,OACA,MACA,mBACA,yBACA,yBACA,kBACA,oCACA,eACA,mBACA,kBACF,EAGMC,GAA6B,CAAC,EAGpC,OAAO,eAAeA,GAA4B,IAAI,EAKtD,IAAMC,GAA6B,CAAC,EAGpC,OAAO,eAAeA,GAA4B,IAAI,EAMtD,SAASC,GAAuBC,EAAQ,CACtC,IAAIC,EAASH,GAA2BE,CAAM,EAE9C,OAAIC,IAAW,SACbA,EAAS,OAAO,KAAKD,CAAM,GAGtBC,CACT,CAEA,QAASC,EAAI,EAAGA,EAAIN,GAAqB,OAAQ,EAAEM,EAAG,CACpD,IAAMC,EAAMP,GAAqBM,CAAC,EAC5BE,EAAgBD,EAAI,YAAY,EACtCN,GAA2BM,CAAG,EAAIN,GAA2BO,CAAa,EACxEA,CACJ,CAEAT,GAAO,QAAU,CACf,qBAAAC,GACA,2BAAAC,GACA,sBAAAE,EACF,IC9IA,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,qBAAAC,GACA,2BAAAC,EACF,EAAI,KAEEC,GAAN,MAAMC,CAAQ,CAEZ,MAAQ,KAER,KAAO,KAEP,OAAS,KAET,MAAQ,KAER,KAMA,YAAaC,EAAKC,EAAOC,EAAO,CAC9B,GAAIA,IAAU,QAAaA,GAASF,EAAI,OACtC,MAAM,IAAI,UAAU,aAAa,EAInC,IAFa,KAAK,KAAOA,EAAI,WAAWE,CAAK,GAElC,IACT,MAAM,IAAI,UAAU,0BAA0B,EAE5CF,EAAI,SAAW,EAAEE,EACnB,KAAK,OAAS,IAAIH,EAAQC,EAAKC,EAAOC,CAAK,EAE3C,KAAK,MAAQD,CAEjB,CAOA,IAAKD,EAAKC,EAAO,CACf,IAAME,EAASH,EAAI,OACnB,GAAIG,IAAW,EACb,MAAM,IAAI,UAAU,aAAa,EAEnC,IAAID,EAAQ,EAIRE,EAAO,KACX,OAAa,CACX,IAAMC,EAAOL,EAAI,WAAWE,CAAK,EAEjC,GAAIG,EAAO,IACT,MAAM,IAAI,UAAU,0BAA0B,EAEhD,GAAID,EAAK,OAASC,EAChB,GAAIF,IAAW,EAAED,EAAO,CACtBE,EAAK,MAAQH,EACb,KACF,SAAWG,EAAK,SAAW,KACzBA,EAAOA,EAAK,WACP,CACLA,EAAK,OAAS,IAAIL,EAAQC,EAAKC,EAAOC,CAAK,EAC3C,KACF,SACSE,EAAK,KAAOC,EACrB,GAAID,EAAK,OAAS,KAChBA,EAAOA,EAAK,SACP,CACLA,EAAK,KAAO,IAAIL,EAAQC,EAAKC,EAAOC,CAAK,EACzC,KACF,SACSE,EAAK,QAAU,KACxBA,EAAOA,EAAK,UACP,CACLA,EAAK,MAAQ,IAAIL,EAAQC,EAAKC,EAAOC,CAAK,EAC1C,KACF,CACF,CACF,CAMA,OAAQF,EAAK,CACX,IAAMM,EAAYN,EAAI,OAClBE,EAAQ,EAIRE,EAAO,KACX,KAAOA,IAAS,MAAQF,EAAQI,GAAW,CACzC,IAAID,EAAOL,EAAIE,CAAK,EASpB,IAJIG,GAAQ,IAAQA,GAAQ,KAE1BA,GAAQ,IAEHD,IAAS,MAAM,CACpB,GAAIC,IAASD,EAAK,KAAM,CACtB,GAAIE,IAAc,EAAEJ,EAElB,OAAOE,EAETA,EAAOA,EAAK,OACZ,KACF,CACAA,EAAOA,EAAK,KAAOC,EAAOD,EAAK,KAAOA,EAAK,KAC7C,CACF,CACA,OAAO,IACT,CACF,EAEMG,GAAN,KAAwB,CAEtB,KAAO,KAOP,OAAQP,EAAKC,EAAO,CACd,KAAK,OAAS,KAChB,KAAK,KAAO,IAAIH,GAAQE,EAAKC,EAAO,CAAC,EAErC,KAAK,KAAK,IAAID,EAAKC,CAAK,CAE5B,CAMA,OAAQD,EAAK,CACX,OAAO,KAAK,MAAM,OAAOA,CAAG,GAAG,OAAS,IAC1C,CACF,EAEMQ,GAAO,IAAID,GAEjB,QAASE,EAAI,EAAGA,EAAIb,GAAqB,OAAQ,EAAEa,EAAG,CACpD,IAAMT,EAAMH,GAA2BD,GAAqBa,CAAC,CAAC,EAC9DD,GAAK,OAAOR,EAAKA,CAAG,CACtB,CAEAL,GAAO,QAAU,CACf,kBAAAY,GACA,KAAAC,EACF,IC/JA,IAAAE,EAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,WAAAC,GAAY,UAAAC,GAAW,WAAAC,GAAY,MAAAC,EAAM,EAAI,KAC/C,CAAE,gBAAAC,EAAgB,EAAI,EAAQ,WAAW,EACzCC,GAAS,EAAQ,aAAa,EAC9BC,GAAM,EAAQ,UAAU,EACxB,CAAE,KAAAC,EAAK,EAAI,EAAQ,aAAa,EAChCC,GAAW,EAAQ,WAAW,EAC9B,CAAE,UAAAC,EAAU,EAAI,EAAQ,kBAAkB,EAC1C,CAAE,aAAcC,EAAG,EAAI,EAAQ,aAAa,EAC5C,CAAE,qBAAAC,EAAqB,EAAI,IAC3B,CAAE,2BAAAC,EAA2B,EAAI,KACjC,CAAE,KAAAC,EAAK,EAAI,KAEX,CAACC,GAAWC,EAAS,EAAI,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,IAAIC,GAAK,OAAOA,CAAC,CAAC,EAE5EC,GAAN,KAAwB,CACtB,YAAaC,EAAM,CACjB,KAAKf,EAAK,EAAIe,EACd,KAAKjB,EAAS,EAAI,EACpB,CAEA,OAAS,OAAO,aAAa,GAAK,CAChCF,GAAO,CAAC,KAAKE,EAAS,EAAG,WAAW,EACpC,KAAKA,EAAS,EAAI,GAClB,MAAQ,KAAKE,EAAK,CACpB,CACF,EAMA,SAASgB,GAAiBD,EAAM,CAC9B,OAAIE,GAASF,CAAI,GAIXG,GAAWH,CAAI,IAAM,GACvBA,EACG,GAAG,OAAQ,UAAY,CACtBnB,GAAO,EAAK,CACd,CAAC,EAGD,OAAOmB,EAAK,iBAAoB,YAClCA,EAAKjB,EAAS,EAAI,GAClBS,GAAG,UAAU,GAAG,KAAKQ,EAAM,OAAQ,UAAY,CAC7C,KAAKjB,EAAS,EAAI,EACpB,CAAC,GAGIiB,GACEA,GAAQ,OAAOA,EAAK,QAAW,WAIjC,IAAID,GAAkBC,CAAI,EAEjCA,GACA,OAAOA,GAAS,UAChB,CAAC,YAAY,OAAOA,CAAI,GACxBI,GAAWJ,CAAI,EAIR,IAAID,GAAkBC,CAAI,EAE1BA,CAEX,CAMA,SAASE,GAAUG,EAAK,CACtB,OAAOA,GAAO,OAAOA,GAAQ,UAAY,OAAOA,EAAI,MAAS,YAAc,OAAOA,EAAI,IAAO,UAC/F,CAOA,SAASC,GAAYC,EAAQ,CAC3B,GAAIA,IAAW,KACb,MAAO,GACF,GAAIA,aAAkBlB,GAC3B,MAAO,GACF,GAAI,OAAOkB,GAAW,SAC3B,MAAO,GACF,CACL,IAAMC,EAAOD,EAAO,OAAO,WAAW,EAEtC,OAAQC,IAAS,QAAUA,IAAS,UACjC,WAAYD,GAAU,OAAOA,EAAO,QAAW,YAC/C,gBAAiBA,GAAU,OAAOA,EAAO,aAAgB,WAE9D,CACF,CAOA,SAASE,GAAwBC,EAAKC,EAAa,CACjD,GAAID,EAAI,SAAS,GAAG,GAAKA,EAAI,SAAS,GAAG,EACvC,MAAM,IAAI,MAAM,qEAAqE,EAGvF,IAAME,EAAcrB,GAAUoB,CAAW,EAEzC,OAAIC,IACFF,GAAO,IAAME,GAGRF,CACT,CAMA,SAASG,GAAaC,EAAM,CAC1B,IAAMC,EAAQ,SAASD,EAAM,EAAE,EAC/B,OACEC,IAAU,OAAOD,CAAI,GACrBC,GAAS,GACTA,GAAS,KAEb,CAQA,SAASC,GAAuBD,EAAO,CACrC,OACEA,GAAS,MACTA,EAAM,CAAC,IAAM,KACbA,EAAM,CAAC,IAAM,KACbA,EAAM,CAAC,IAAM,KACbA,EAAM,CAAC,IAAM,MAEXA,EAAM,CAAC,IAAM,KAEXA,EAAM,CAAC,IAAM,KACbA,EAAM,CAAC,IAAM,IAIrB,CAMA,SAASE,GAAUP,EAAK,CACtB,GAAI,OAAOA,GAAQ,SAAU,CAM3B,GAFAA,EAAM,IAAI,IAAIA,CAAG,EAEb,CAACM,GAAsBN,EAAI,QAAUA,EAAI,QAAQ,EACnD,MAAM,IAAIjB,GAAqB,oEAAoE,EAGrG,OAAOiB,CACT,CAEA,GAAI,CAACA,GAAO,OAAOA,GAAQ,SACzB,MAAM,IAAIjB,GAAqB,0DAA0D,EAG3F,GAAI,EAAEiB,aAAe,KAAM,CACzB,GAAIA,EAAI,MAAQ,MAAQA,EAAI,OAAS,IAAMG,GAAYH,EAAI,IAAI,IAAM,GACnE,MAAM,IAAIjB,GAAqB,qFAAqF,EAGtH,GAAIiB,EAAI,MAAQ,MAAQ,OAAOA,EAAI,MAAS,SAC1C,MAAM,IAAIjB,GAAqB,gEAAgE,EAGjG,GAAIiB,EAAI,UAAY,MAAQ,OAAOA,EAAI,UAAa,SAClD,MAAM,IAAIjB,GAAqB,wEAAwE,EAGzG,GAAIiB,EAAI,UAAY,MAAQ,OAAOA,EAAI,UAAa,SAClD,MAAM,IAAIjB,GAAqB,wEAAwE,EAGzG,GAAIiB,EAAI,QAAU,MAAQ,OAAOA,EAAI,QAAW,SAC9C,MAAM,IAAIjB,GAAqB,oEAAoE,EAGrG,GAAI,CAACuB,GAAsBN,EAAI,QAAUA,EAAI,QAAQ,EACnD,MAAM,IAAIjB,GAAqB,oEAAoE,EAGrG,IAAMqB,EAAOJ,EAAI,MAAQ,KACrBA,EAAI,KACHA,EAAI,WAAa,SAAW,IAAM,GACnCQ,EAASR,EAAI,QAAU,KACvBA,EAAI,OACJ,GAAGA,EAAI,UAAY,EAAE,KAAKA,EAAI,UAAY,EAAE,IAAII,CAAI,GACpDK,EAAOT,EAAI,MAAQ,KACnBA,EAAI,KACJ,GAAGA,EAAI,UAAY,EAAE,GAAGA,EAAI,QAAU,EAAE,GAE5C,OAAIQ,EAAOA,EAAO,OAAS,CAAC,IAAM,MAChCA,EAASA,EAAO,MAAM,EAAGA,EAAO,OAAS,CAAC,GAGxCC,GAAQA,EAAK,CAAC,IAAM,MACtBA,EAAO,IAAIA,CAAI,IAMV,IAAI,IAAI,GAAGD,CAAM,GAAGC,CAAI,EAAE,CACnC,CAEA,GAAI,CAACH,GAAsBN,EAAI,QAAUA,EAAI,QAAQ,EACnD,MAAM,IAAIjB,GAAqB,oEAAoE,EAGrG,OAAOiB,CACT,CAMA,SAASU,GAAaV,EAAK,CAGzB,GAFAA,EAAMO,GAASP,CAAG,EAEdA,EAAI,WAAa,KAAOA,EAAI,QAAUA,EAAI,KAC5C,MAAM,IAAIjB,GAAqB,aAAa,EAG9C,OAAOiB,CACT,CAMA,SAASW,GAAaC,EAAM,CAC1B,GAAIA,EAAK,CAAC,IAAM,IAAK,CACnB,IAAMC,EAAMD,EAAK,QAAQ,GAAG,EAE5B,OAAAzC,GAAO0C,IAAQ,EAAE,EACVD,EAAK,UAAU,EAAGC,CAAG,CAC9B,CAEA,IAAMA,EAAMD,EAAK,QAAQ,GAAG,EAC5B,OAAIC,IAAQ,GAAWD,EAEhBA,EAAK,UAAU,EAAGC,CAAG,CAC9B,CAQA,SAASC,GAAeF,EAAM,CAC5B,GAAI,CAACA,EACH,OAAO,KAGTzC,GAAO,OAAOyC,GAAS,QAAQ,EAE/B,IAAMG,EAAaJ,GAAYC,CAAI,EACnC,OAAIlC,GAAI,KAAKqC,CAAU,EACd,GAGFA,CACT,CAQA,SAASC,GAAWrB,EAAK,CACvB,OAAO,KAAK,MAAM,KAAK,UAAUA,CAAG,CAAC,CACvC,CAMA,SAASsB,GAAiBtB,EAAK,CAC7B,OAAUA,GAAO,MAAQ,OAAOA,EAAI,OAAO,aAAa,GAAM,UAChE,CAMA,SAASD,GAAYC,EAAK,CACxB,OAAUA,GAAO,OAAS,OAAOA,EAAI,OAAO,QAAQ,GAAM,YAAc,OAAOA,EAAI,OAAO,aAAa,GAAM,WAC/G,CAMA,SAASF,GAAYH,EAAM,CACzB,GAAIA,GAAQ,KACV,MAAO,GACF,GAAIE,GAASF,CAAI,EAAG,CACzB,IAAM4B,EAAQ5B,EAAK,eACnB,OAAO4B,GAASA,EAAM,aAAe,IAASA,EAAM,QAAU,IAAQ,OAAO,SAASA,EAAM,MAAM,EAC9FA,EAAM,OACN,IACN,KAAO,IAAItB,GAAWN,CAAI,EACxB,OAAOA,EAAK,MAAQ,KAAOA,EAAK,KAAO,KAClC,GAAI6B,GAAS7B,CAAI,EACtB,OAAOA,EAAK,WAGd,OAAO,IACT,CAMA,SAAS8B,GAAa9B,EAAM,CAC1B,OAAOA,GAAQ,CAAC,EAAEA,EAAK,WAAaA,EAAKlB,EAAU,GAAMK,GAAO,cAAca,CAAI,EACpF,CAOA,SAAS+B,GAAS5C,EAAQ6C,EAAK,CACzB7C,GAAU,MAAQ,CAACe,GAASf,CAAM,GAAK2C,GAAY3C,CAAM,IAIzD,OAAOA,EAAO,SAAY,YACxB,OAAO,eAAeA,CAAM,EAAE,cAAgBD,KAEhDC,EAAO,OAAS,MAGlBA,EAAO,QAAQ6C,CAAG,GACTA,GACT,eAAe,IAAM,CACnB7C,EAAO,KAAK,QAAS6C,CAAG,CAC1B,CAAC,EAGC7C,EAAO,YAAc,KACvBA,EAAOL,EAAU,EAAI,IAEzB,CAEA,IAAMmD,GAAyB,gBAK/B,SAASC,GAAuBC,EAAK,CACnC,IAAMC,EAAID,EAAI,MAAMF,EAAsB,EAC1C,OAAOG,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,IAAO,IACzC,CAOA,SAASC,GAAoBtB,EAAO,CAClC,OAAO,OAAOA,GAAU,SACpBrB,GAA2BqB,CAAK,GAAKA,EAAM,YAAY,EACvDpB,GAAK,OAAOoB,CAAK,GAAKA,EAAM,SAAS,QAAQ,EAAE,YAAY,CACjE,CAOA,SAASuB,GAA8BvB,EAAO,CAC5C,OAAOpB,GAAK,OAAOoB,CAAK,GAAKA,EAAM,SAAS,QAAQ,EAAE,YAAY,CACpE,CAOA,SAASwB,GAAcC,EAASnC,EAAK,CAC/BA,IAAQ,SAAWA,EAAM,CAAC,GAE9B,QAASoC,EAAI,EAAGA,EAAID,EAAQ,OAAQC,GAAK,EAAG,CAC1C,IAAMC,EAAML,GAAmBG,EAAQC,CAAC,CAAC,EACrCN,EAAM9B,EAAIqC,CAAG,EAEjB,GAAIP,EACE,OAAOA,GAAQ,WACjBA,EAAM,CAACA,CAAG,EACV9B,EAAIqC,CAAG,EAAIP,GAEbA,EAAI,KAAKK,EAAQC,EAAI,CAAC,EAAE,SAAS,MAAM,CAAC,MACnC,CACL,IAAME,EAAeH,EAAQC,EAAI,CAAC,EAC9B,OAAOE,GAAiB,SAC1BtC,EAAIqC,CAAG,EAAIC,EAEXtC,EAAIqC,CAAG,EAAI,MAAM,QAAQC,CAAY,EAAIA,EAAa,IAAIC,GAAKA,EAAE,SAAS,MAAM,CAAC,EAAID,EAAa,SAAS,MAAM,CAErH,CACF,CAGA,MAAI,mBAAoBtC,GAAO,wBAAyBA,IACtDA,EAAI,qBAAqB,EAAI,OAAO,KAAKA,EAAI,qBAAqB,CAAC,EAAE,SAAS,QAAQ,GAGjFA,CACT,CAMA,SAASwC,GAAiBL,EAAS,CACjC,IAAMM,EAAgBN,EAAQ,OAIxBO,EAAM,IAAI,MAAMD,CAAa,EAE/BE,EAAmB,GACnBC,EAAwB,GACxBP,EACAP,EACAe,EAAO,EAEX,QAASC,EAAI,EAAGA,EAAIL,EAAeK,GAAK,EACtCT,EAAMF,EAAQW,CAAC,EACfhB,EAAMK,EAAQW,EAAI,CAAC,EAEnB,OAAOT,GAAQ,WAAaA,EAAMA,EAAI,SAAS,GAC/C,OAAOP,GAAQ,WAAaA,EAAMA,EAAI,SAAS,MAAM,GAErDe,EAAOR,EAAI,OACPQ,IAAS,IAAMR,EAAI,CAAC,IAAM,MAAQA,IAAQ,kBAAoBA,EAAI,YAAY,IAAM,kBACtFM,EAAmB,GACVE,IAAS,IAAMR,EAAI,CAAC,IAAM,MAAQA,IAAQ,uBAAyBA,EAAI,YAAY,IAAM,yBAClGO,EAAwBE,EAAI,GAE9BJ,EAAII,CAAC,EAAIT,EACTK,EAAII,EAAI,CAAC,EAAIhB,EAIf,OAAIa,GAAoBC,IAA0B,KAChDF,EAAIE,CAAqB,EAAI,OAAO,KAAKF,EAAIE,CAAqB,CAAC,EAAE,SAAS,QAAQ,GAGjFF,CACT,CAMA,SAASK,GAAkBZ,EAAS,CAClC,GAAI,CAAC,MAAM,QAAQA,CAAO,EACxB,MAAM,IAAI,UAAU,iCAAiC,EAEvD,OAAOA,EAAQ,IAAII,GAAK,OAAO,KAAKA,CAAC,CAAC,CACxC,CAMA,SAASf,GAAUwB,EAAQ,CAEzB,OAAOA,aAAkB,YAAc,OAAO,SAASA,CAAM,CAC/D,CAUA,SAASC,GAAsBC,EAASC,EAAQC,EAAS,CACvD,GAAI,CAACF,GAAW,OAAOA,GAAY,SACjC,MAAM,IAAI9D,GAAqB,2BAA2B,EAG5D,GAAI,OAAO8D,EAAQ,gBAAmB,WAKtC,IAAI,OAAOA,EAAQ,WAAc,WAC/B,MAAM,IAAI9D,GAAqB,0BAA0B,EAG3D,GAAI,OAAO8D,EAAQ,SAAY,WAC7B,MAAM,IAAI9D,GAAqB,wBAAwB,EAGzD,GAAI,OAAO8D,EAAQ,YAAe,YAAcA,EAAQ,aAAe,OACrE,MAAM,IAAI9D,GAAqB,2BAA2B,EAG5D,GAAIgE,GAAWD,IAAW,WACxB,GAAI,OAAOD,EAAQ,WAAc,WAC/B,MAAM,IAAI9D,GAAqB,0BAA0B,MAEtD,CACL,GAAI,OAAO8D,EAAQ,WAAc,WAC/B,MAAM,IAAI9D,GAAqB,0BAA0B,EAG3D,GAAI,OAAO8D,EAAQ,QAAW,WAC5B,MAAM,IAAI9D,GAAqB,uBAAuB,EAGxD,GAAI,OAAO8D,EAAQ,YAAe,WAChC,MAAM,IAAI9D,GAAqB,2BAA2B,CAE9D,EACF,CAQA,SAASiE,GAAa1D,EAAM,CAE1B,MAAO,CAAC,EAAEA,IAASb,GAAO,YAAYa,CAAI,GAAKA,EAAKjB,EAAS,GAC/D,CAkBA,SAAS4E,GAAeC,EAAQ,CAC9B,MAAO,CACL,aAAcA,EAAO,aACrB,UAAWA,EAAO,UAClB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,aAAcA,EAAO,aACrB,QAASA,EAAO,QAChB,aAAcA,EAAO,aACrB,UAAWA,EAAO,SACpB,CACF,CAMA,SAASC,GAAoBC,EAAU,CAGrC,IAAIC,EACJ,OAAO,IAAI,eACT,CACE,MAAM,OAAS,CACbA,EAAWD,EAAS,OAAO,aAAa,EAAE,CAC5C,EACA,KAAME,EAAY,CAChB,eAAeC,GAAQ,CACrB,GAAM,CAAE,KAAAC,EAAM,MAAAnD,CAAM,EAAI,MAAMgD,EAAS,KAAK,EAC5C,GAAIG,EACF,eAAe,IAAM,CACnBF,EAAW,MAAM,EACjBA,EAAW,aAAa,QAAQ,CAAC,CACnC,CAAC,MACI,CACL,IAAMG,EAAM,OAAO,SAASpD,CAAK,EAAIA,EAAQ,OAAO,KAAKA,CAAK,EAC9D,GAAIoD,EAAI,WACNH,EAAW,QAAQ,IAAI,WAAWG,CAAG,CAAC,MAEtC,QAAO,MAAMF,EAAK,CAEtB,CACF,CAEA,OAAOA,EAAK,CACd,EACA,MAAM,QAAU,CACd,MAAMF,EAAS,OAAO,CACxB,EACA,KAAM,OACR,CACF,CACF,CAQA,SAASK,GAAgB7D,EAAQ,CAC/B,OACEA,GACA,OAAOA,GAAW,UAClB,OAAOA,EAAO,QAAW,YACzB,OAAOA,EAAO,QAAW,YACzB,OAAOA,EAAO,KAAQ,YACtB,OAAOA,EAAO,QAAW,YACzB,OAAOA,EAAO,KAAQ,YACtB,OAAOA,EAAO,KAAQ,YACtBA,EAAO,OAAO,WAAW,IAAM,UAEnC,CAEA,SAAS8D,GAAkBC,EAAQC,EAAU,CAC3C,MAAI,qBAAsBD,GACxBA,EAAO,iBAAiB,QAASC,EAAU,CAAE,KAAM,EAAK,CAAC,EAClD,IAAMD,EAAO,oBAAoB,QAASC,CAAQ,IAE3DD,EAAO,KAAK,QAASC,CAAQ,EACtB,IAAMD,EAAO,eAAe,QAASC,CAAQ,EACtD,CAOA,IAAMC,GACA,OAAO,OAAO,UAAU,cAAiB,WAKnCzD,GAAU,GAAGA,CAAK,GAAG,aAAa,EAMnCzB,GAAS,YASdmF,GACA,OAAO,OAAO,UAAU,cAAiB,WAKnC1D,GAAU,GAAGA,CAAK,GAAG,aAAa,EAMlCA,GAAUyD,GAAYzD,CAAK,IAAM,GAAGA,CAAK,GASrD,SAAS2D,GAAiBC,EAAG,CAC3B,OAAQA,EAAG,CACT,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KAEH,MAAO,GACT,QAEE,OAAOA,GAAK,IAAQA,GAAK,GAC7B,CACF,CAMA,SAASC,GAAkBC,EAAY,CACrC,GAAIA,EAAW,SAAW,EACxB,MAAO,GAET,QAASpC,EAAI,EAAGA,EAAIoC,EAAW,OAAQ,EAAEpC,EACvC,GAAI,CAACiC,GAAgBG,EAAW,WAAWpC,CAAC,CAAC,EAC3C,MAAO,GAGX,MAAO,EACT,CAWA,IAAMqC,GAAkB,0BAMxB,SAASC,GAAoBF,EAAY,CACvC,MAAO,CAACC,GAAgB,KAAKD,CAAU,CACzC,CAEA,IAAMG,GAAmB,8BAezB,SAASC,GAAkBC,EAAO,CAChC,GAAIA,GAAS,MAAQA,IAAU,GAAI,MAAO,CAAE,MAAO,EAAG,IAAK,KAAM,KAAM,IAAK,EAE5E,IAAM9C,EAAI8C,EAAQA,EAAM,MAAMF,EAAgB,EAAI,KAClD,OAAO5C,EACH,CACE,MAAO,SAASA,EAAE,CAAC,CAAC,EACpB,IAAKA,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,CAAC,EAAI,KAC7B,KAAMA,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,CAAC,EAAI,IAChC,EACA,IACN,CASA,SAAS+C,GAAa9E,EAAK+E,EAAMb,EAAU,CAEzC,OADmBlE,EAAIrB,EAAU,IAAM,CAAC,GAC9B,KAAK,CAACoG,EAAMb,CAAQ,CAAC,EAC/BlE,EAAI,GAAG+E,EAAMb,CAAQ,EACdlE,CACT,CAOA,SAASgF,GAAoBhF,EAAK,CAChC,GAAIA,EAAIrB,EAAU,GAAK,KAAM,CAC3B,OAAW,CAACoG,EAAMb,CAAQ,IAAKlE,EAAIrB,EAAU,EAC3CqB,EAAI,eAAe+E,EAAMb,CAAQ,EAEnClE,EAAIrB,EAAU,EAAI,IACpB,CACA,OAAOqB,CACT,CAOA,SAASiF,GAAcC,EAAQC,EAASxD,EAAK,CAC3C,GAAI,CACFwD,EAAQ,QAAQxD,CAAG,EACnBnD,GAAO2G,EAAQ,OAAO,CACxB,OAASxD,EAAK,CACZuD,EAAO,KAAK,QAASvD,CAAG,CAC1B,CACF,CAEA,IAAMyD,GAAsB,OAAO,OAAO,IAAI,EAC9CA,GAAoB,WAAa,GAEjC,IAAMC,GAA8B,CAClC,OAAQ,SACR,OAAQ,SACR,IAAK,MACL,IAAK,MACL,KAAM,OACN,KAAM,OACN,QAAS,UACT,QAAS,UACT,KAAM,OACN,KAAM,OACN,IAAK,MACL,IAAK,KACP,EAEMC,GAA0B,CAC9B,GAAGD,GACH,MAAO,QACP,MAAO,OACT,EAGA,OAAO,eAAeA,GAA6B,IAAI,EACvD,OAAO,eAAeC,GAAyB,IAAI,EAEnD/G,GAAO,QAAU,CACf,oBAAA6G,GACA,YAAA/B,GACA,YAAAc,GACA,YAAAC,GACA,WAAAnE,GACA,YAAAc,GACA,SAAAH,GACA,cAAAO,GACA,SAAAtB,GACA,WAAAE,GACA,gBAAAuB,GACA,YAAAG,GACA,mBAAAO,GACA,6BAAAC,GACA,YAAA6C,GACA,mBAAAE,GACA,aAAAC,GACA,gBAAAzC,GACA,iBAAAO,GACA,aAAAb,GACA,sBAAAL,GACA,QAAAH,GACA,WAAA5B,GACA,UAAAuB,GACA,mBAAAmC,GACA,SAAAhC,GACA,qBAAAyB,GACA,cAAAK,GACA,eAAAS,GACA,uBAAA3D,GACA,iBAAA4D,GACA,iBAAAO,GACA,mBAAAG,GACA,gBAAAL,GACA,iBAAAO,GACA,4BAAAS,GACA,wBAAAC,GACA,YAAA9E,GACA,sBAAAG,GACA,UAAApB,GACA,UAAAC,GACA,gBAAiB,OAAO,OAAO,CAAC,MAAO,OAAQ,UAAW,OAAO,CAAC,EAClE,gBAAAI,EACF,IC/4BA,IAAA2F,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAqB,EAAQ,0BAA0B,EACvDC,GAAO,EAAQ,WAAW,EAE1BC,GAAiBD,GAAK,SAAS,QAAQ,EACvCE,GAAgBF,GAAK,SAAS,OAAO,EACrCG,GAAoBH,GAAK,SAAS,WAAW,EAE7CI,GAAW,CAEf,cAAeL,GAAmB,QAAQ,6BAA6B,EACvE,UAAWA,GAAmB,QAAQ,yBAAyB,EAC/D,aAAcA,GAAmB,QAAQ,4BAA4B,EACrE,YAAaA,GAAmB,QAAQ,2BAA2B,EAEnE,OAAQA,GAAmB,QAAQ,uBAAuB,EAC1D,SAAUA,GAAmB,QAAQ,yBAAyB,EAC9D,QAASA,GAAmB,QAAQ,wBAAwB,EAC5D,SAAUA,GAAmB,QAAQ,yBAAyB,EAC9D,MAAOA,GAAmB,QAAQ,sBAAsB,EAExD,KAAMA,GAAmB,QAAQ,uBAAuB,EACxD,MAAOA,GAAmB,QAAQ,wBAAwB,EAC1D,YAAaA,GAAmB,QAAQ,+BAA+B,EACvE,KAAMA,GAAmB,QAAQ,uBAAuB,EACxD,KAAMA,GAAmB,QAAQ,uBAAuB,CAC1D,EAEIM,GAAyB,GAE7B,SAASC,GAAmBC,EAAWN,GAAgB,CACjDI,KAIJA,GAAyB,GAEzBN,GAAmB,UAAU,8BAC3BS,GAAO,CACL,GAAM,CACJ,cAAe,CAAE,QAAAC,EAAS,SAAAC,EAAU,KAAAC,EAAM,KAAAC,CAAK,CACjD,EAAIJ,EACJD,EACE,gCACAK,EACAD,EAAO,IAAIA,CAAI,GAAK,GACpBD,EACAD,CACF,CACF,CAAC,EAEHV,GAAmB,UAAU,0BAC3BS,GAAO,CACL,GAAM,CACJ,cAAe,CAAE,QAAAC,EAAS,SAAAC,EAAU,KAAAC,EAAM,KAAAC,CAAK,CACjD,EAAIJ,EACJD,EACE,+BACAK,EACAD,EAAO,IAAIA,CAAI,GAAK,GACpBD,EACAD,CACF,CACF,CAAC,EAEHV,GAAmB,UAAU,6BAC3BS,GAAO,CACL,GAAM,CACJ,cAAe,CAAE,QAAAC,EAAS,SAAAC,EAAU,KAAAC,EAAM,KAAAC,CAAK,EAC/C,MAAAC,CACF,EAAIL,EACJD,EACE,6CACAK,EACAD,EAAO,IAAIA,CAAI,GAAK,GACpBD,EACAD,EACAI,EAAM,OACR,CACF,CAAC,EAEHd,GAAmB,UAAU,4BAC3BS,GAAO,CACL,GAAM,CACJ,QAAS,CAAE,OAAAM,EAAQ,KAAAC,EAAM,OAAAC,CAAO,CAClC,EAAIR,EACJD,EAAS,8BAA+BO,EAAQE,EAAQD,CAAI,CAC9D,CAAC,EACL,CAEA,IAAIE,GAA0B,GAE9B,SAASC,GAAoBX,EAAWN,GAAgB,CAClDgB,KAIJA,GAA0B,GAE1BlB,GAAmB,UAAU,yBAC3BS,GAAO,CACL,GAAM,CACJ,QAAS,CAAE,OAAAM,EAAQ,KAAAC,EAAM,OAAAC,CAAO,EAChC,SAAU,CAAE,WAAAG,CAAW,CACzB,EAAIX,EACJD,EACE,0CACAO,EACAE,EACAD,EACAI,CACF,CACF,CAAC,EAEHpB,GAAmB,UAAU,0BAC3BS,GAAO,CACL,GAAM,CACJ,QAAS,CAAE,OAAAM,EAAQ,KAAAC,EAAM,OAAAC,CAAO,CAClC,EAAIR,EACJD,EAAS,kCAAmCO,EAAQE,EAAQD,CAAI,CAClE,CAAC,EAEHhB,GAAmB,UAAU,uBAC3BS,GAAO,CACL,GAAM,CACJ,QAAS,CAAE,OAAAM,EAAQ,KAAAC,EAAM,OAAAC,CAAO,EAChC,MAAAH,CACF,EAAIL,EACJD,EACE,mCACAO,EACAE,EACAD,EACAF,EAAM,OACR,CACF,CAAC,EACL,CAEA,IAAIO,GAA4B,GAEhC,SAASC,GAAsBd,EAAWJ,GAAmB,CACvDiB,KAIJA,GAA4B,GAE5BrB,GAAmB,UAAU,wBAC3BS,GAAO,CACL,GAAM,CACJ,QAAS,CAAE,QAAAc,EAAS,KAAAX,CAAK,CAC3B,EAAIH,EACJD,EAAS,yBAA0Be,EAASX,EAAO,IAAIA,CAAI,GAAK,EAAE,CACpE,CAAC,EAEHZ,GAAmB,UAAU,yBAC3BS,GAAO,CACL,GAAM,CAAE,UAAAe,EAAW,KAAAC,EAAM,OAAAC,CAAO,EAAIjB,EACpCD,EACE,kCACAgB,EAAU,IACVC,EACAC,CACF,CACF,CAAC,EAEH1B,GAAmB,UAAU,gCAC3B2B,GAAO,CACLnB,EAAS,0BAA2BmB,EAAI,OAAO,CACjD,CAAC,EAEH3B,GAAmB,UAAU,wBAC3BS,GAAO,CACLD,EAAS,eAAe,CAC1B,CAAC,EAEHR,GAAmB,UAAU,wBAC3BS,GAAO,CACLD,EAAS,eAAe,CAC1B,CAAC,EACL,EAEIN,GAAe,SAAWC,GAAc,WAC1CI,GAAkBJ,GAAc,QAAUA,GAAgBD,EAAc,EACxEiB,GAAmBhB,GAAc,QAAUA,GAAgBD,EAAc,GAGvEE,GAAkB,UACpBG,GAAkBL,GAAe,QAAUA,GAAiBE,EAAiB,EAC7EkB,GAAqBlB,EAAiB,GAGxCL,GAAO,QAAU,CACf,SAAAM,EACF,ICnMA,IAAAuB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,qBAAAC,GACA,kBAAAC,EACF,EAAI,IACEC,GAAS,EAAQ,aAAa,EAC9B,CACJ,iBAAAC,GACA,mBAAAC,GACA,SAAAC,GACA,QAAAC,GACA,SAAAC,GACA,eAAAC,GACA,WAAAC,GACA,WAAAC,GACA,uBAAAC,GACA,qBAAAC,GACA,cAAAC,GACA,wBAAAC,EACF,EAAI,IACE,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,2BAAAC,EAA2B,EAAI,KAGjCC,GAAmB,mBAEnBC,GAAW,OAAO,SAAS,EAE3BC,GAAN,KAAc,CACZ,YAAaC,EAAQ,CACnB,KAAAC,EACA,OAAAC,EACA,KAAAC,EACA,QAAAC,EACA,MAAAC,EACA,WAAAC,EACA,SAAAC,EACA,QAAAC,EACA,eAAAC,EACA,YAAAC,EACA,MAAAC,EACA,eAAAC,EACA,WAAAC,EACA,aAAAC,CACF,EAAGC,EAAS,CACV,GAAI,OAAOd,GAAS,SAClB,MAAM,IAAIrB,GAAqB,uBAAuB,EACjD,GACLqB,EAAK,CAAC,IAAM,KACZ,EAAEA,EAAK,WAAW,SAAS,GAAKA,EAAK,WAAW,UAAU,IAC1DC,IAAW,UAEX,MAAM,IAAItB,GAAqB,oDAAoD,EAC9E,GAAIiB,GAAiB,KAAKI,CAAI,EACnC,MAAM,IAAIrB,GAAqB,sBAAsB,EAGvD,GAAI,OAAOsB,GAAW,SACpB,MAAM,IAAItB,GAAqB,yBAAyB,EACnD,GAAIc,GAAwBQ,CAAM,IAAM,QAAa,CAACnB,GAAiBmB,CAAM,EAClF,MAAM,IAAItB,GAAqB,wBAAwB,EAGzD,GAAI4B,GAAW,OAAOA,GAAY,SAChC,MAAM,IAAI5B,GAAqB,0BAA0B,EAG3D,GAAI6B,GAAkB,OAAS,CAAC,OAAO,SAASA,CAAc,GAAKA,EAAiB,GAClF,MAAM,IAAI7B,GAAqB,wBAAwB,EAGzD,GAAI8B,GAAe,OAAS,CAAC,OAAO,SAASA,CAAW,GAAKA,EAAc,GACzE,MAAM,IAAI9B,GAAqB,qBAAqB,EAGtD,GAAI+B,GAAS,MAAQ,OAAOA,GAAU,UACpC,MAAM,IAAI/B,GAAqB,eAAe,EAGhD,GAAIgC,GAAkB,MAAQ,OAAOA,GAAmB,UACtD,MAAM,IAAIhC,GAAqB,wBAAwB,EAGzD,GAAIkC,GAAgB,KAClB,MAAM,IAAIlC,GAAqB,sBAAsB,EAWvD,GARA,KAAK,eAAiB6B,EAEtB,KAAK,YAAcC,EAEnB,KAAK,OAASR,EAEd,KAAK,MAAQ,KAETC,GAAQ,KACV,KAAK,KAAO,aACHlB,GAASkB,CAAI,EAAG,CACzB,KAAK,KAAOA,EAEZ,IAAMa,EAAS,KAAK,KAAK,gBACrB,CAACA,GAAU,CAACA,EAAO,eACrB,KAAK,WAAa,UAAwB,CACxC9B,GAAQ,IAAI,CACd,EACA,KAAK,KAAK,GAAG,MAAO,KAAK,UAAU,GAGrC,KAAK,aAAe+B,GAAO,CACrB,KAAK,MACP,KAAK,MAAMA,CAAG,EAEd,KAAK,MAAQA,CAEjB,EACA,KAAK,KAAK,GAAG,QAAS,KAAK,YAAY,CACzC,SAAW9B,GAASgB,CAAI,EACtB,KAAK,KAAOA,EAAK,WAAaA,EAAO,aAC5B,YAAY,OAAOA,CAAI,EAChC,KAAK,KAAOA,EAAK,OAAO,WAAa,OAAO,KAAKA,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,EAAI,aACzFA,aAAgB,YACzB,KAAK,KAAOA,EAAK,WAAa,OAAO,KAAKA,CAAI,EAAI,aACzC,OAAOA,GAAS,SACzB,KAAK,KAAOA,EAAK,OAAS,OAAO,KAAKA,CAAI,EAAI,aACrCf,GAAee,CAAI,GAAKd,GAAWc,CAAI,GAAKb,GAAWa,CAAI,EACpE,KAAK,KAAOA,MAEZ,OAAM,IAAIvB,GAAqB,uFAAuF,EA+BxH,GA5BA,KAAK,UAAY,GACjB,KAAK,QAAU,GAEf,KAAK,QAAU4B,GAAW,KAE1B,KAAK,KAAOH,EAAQd,GAAuBU,EAAMI,CAAK,EAAIJ,EAE1D,KAAK,OAASD,EAEd,KAAK,WAAaM,IACdJ,IAAW,QAAUA,IAAW,OAGpC,KAAK,SAAWK,GAAY,KAAK,SAAW,OAE5C,KAAK,MAAQI,GAAgB,KAE7B,KAAK,KAAO,KAEZ,KAAK,cAAgB,KAErB,KAAK,YAAc,KAEnB,KAAK,QAAU,CAAC,EAGhB,KAAK,eAAiBC,GAA0C,GAE5D,MAAM,QAAQR,CAAO,EAAG,CAC1B,GAAIA,EAAQ,OAAS,IAAM,EACzB,MAAM,IAAIxB,GAAqB,4BAA4B,EAE7D,QAASsC,EAAI,EAAGA,EAAId,EAAQ,OAAQc,GAAK,EACvCC,GAAc,KAAMf,EAAQc,CAAC,EAAGd,EAAQc,EAAI,CAAC,CAAC,CAElD,SAAWd,GAAW,OAAOA,GAAY,SACvC,GAAIA,EAAQ,OAAO,QAAQ,EACzB,QAAWgB,KAAUhB,EAAS,CAC5B,GAAI,CAAC,MAAM,QAAQgB,CAAM,GAAKA,EAAO,SAAW,EAC9C,MAAM,IAAIxC,GAAqB,0CAA0C,EAE3EuC,GAAc,KAAMC,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CAC1C,KACK,CACL,IAAMC,EAAO,OAAO,KAAKjB,CAAO,EAChC,QAASc,EAAI,EAAGA,EAAIG,EAAK,OAAQ,EAAEH,EACjCC,GAAc,KAAME,EAAKH,CAAC,EAAGd,EAAQiB,EAAKH,CAAC,CAAC,CAAC,CAEjD,SACSd,GAAW,KACpB,MAAM,IAAIxB,GAAqB,uCAAuC,EAGxEY,GAAqBuB,EAASb,EAAQM,CAAO,EAE7C,KAAK,WAAaK,GAAcpB,GAAc,KAAK,IAAI,GAAK,KAE5D,KAAKK,EAAQ,EAAIiB,EAEbpB,GAAS,OAAO,gBAClBA,GAAS,OAAO,QAAQ,CAAE,QAAS,IAAK,CAAC,CAE7C,CAEA,WAAY2B,EAAO,CACjB,GAAI,KAAKxB,EAAQ,EAAE,WACjB,GAAI,CACF,OAAO,KAAKA,EAAQ,EAAE,WAAWwB,CAAK,CACxC,OAASL,EAAK,CACZ,KAAK,MAAMA,CAAG,CAChB,CAEJ,CAEA,eAAiB,CAKf,GAJItB,GAAS,SAAS,gBACpBA,GAAS,SAAS,QAAQ,CAAE,QAAS,IAAK,CAAC,EAGzC,KAAKG,EAAQ,EAAE,cACjB,GAAI,CACF,OAAO,KAAKA,EAAQ,EAAE,cAAc,CACtC,OAASmB,EAAK,CACZ,KAAK,MAAMA,CAAG,CAChB,CAEJ,CAEA,UAAWM,EAAO,CAIhB,GAHAzC,GAAO,CAAC,KAAK,OAAO,EACpBA,GAAO,CAAC,KAAK,SAAS,EAElB,KAAK,MACPyC,EAAM,KAAK,KAAK,MAEhB,aAAK,MAAQA,EACN,KAAKzB,EAAQ,EAAE,UAAUyB,CAAK,CAEzC,CAEA,mBAAqB,CACnB,OAAO,KAAKzB,EAAQ,EAAE,oBAAoB,CAC5C,CAEA,UAAW0B,EAAYpB,EAASqB,EAAQC,EAAY,CAClD5C,GAAO,CAAC,KAAK,OAAO,EACpBA,GAAO,CAAC,KAAK,SAAS,EAElBa,GAAS,QAAQ,gBACnBA,GAAS,QAAQ,QAAQ,CAAE,QAAS,KAAM,SAAU,CAAE,WAAA6B,EAAY,QAAApB,EAAS,WAAAsB,CAAW,CAAE,CAAC,EAG3F,GAAI,CACF,OAAO,KAAK5B,EAAQ,EAAE,UAAU0B,EAAYpB,EAASqB,EAAQC,CAAU,CACzE,OAAST,EAAK,CACZ,KAAK,MAAMA,CAAG,CAChB,CACF,CAEA,OAAQK,EAAO,CACbxC,GAAO,CAAC,KAAK,OAAO,EACpBA,GAAO,CAAC,KAAK,SAAS,EAEtB,GAAI,CACF,OAAO,KAAKgB,EAAQ,EAAE,OAAOwB,CAAK,CACpC,OAASL,EAAK,CACZ,YAAK,MAAMA,CAAG,EACP,EACT,CACF,CAEA,UAAWO,EAAYpB,EAASuB,EAAQ,CACtC,OAAA7C,GAAO,CAAC,KAAK,OAAO,EACpBA,GAAO,CAAC,KAAK,SAAS,EAEf,KAAKgB,EAAQ,EAAE,UAAU0B,EAAYpB,EAASuB,CAAM,CAC7D,CAEA,WAAYC,EAAU,CACpB,KAAK,UAAU,EAEf9C,GAAO,CAAC,KAAK,OAAO,EACpBA,GAAO,CAAC,KAAK,SAAS,EAEtB,KAAK,UAAY,GACba,GAAS,SAAS,gBACpBA,GAAS,SAAS,QAAQ,CAAE,QAAS,KAAM,SAAAiC,CAAS,CAAC,EAGvD,GAAI,CACF,OAAO,KAAK9B,EAAQ,EAAE,WAAW8B,CAAQ,CAC3C,OAASX,EAAK,CAEZ,KAAK,QAAQA,CAAG,CAClB,CACF,CAEA,QAASY,EAAO,CAOd,GANA,KAAK,UAAU,EAEXlC,GAAS,MAAM,gBACjBA,GAAS,MAAM,QAAQ,CAAE,QAAS,KAAM,MAAAkC,CAAM,CAAC,EAG7C,MAAK,QAGT,YAAK,QAAU,GAER,KAAK/B,EAAQ,EAAE,QAAQ+B,CAAK,CACrC,CAEA,WAAa,CACP,KAAK,eACP,KAAK,KAAK,IAAI,QAAS,KAAK,YAAY,EACxC,KAAK,aAAe,MAGlB,KAAK,aACP,KAAK,KAAK,IAAI,MAAO,KAAK,UAAU,EACpC,KAAK,WAAa,KAEtB,CAEA,UAAWC,EAAKC,EAAO,CACrB,OAAAZ,GAAc,KAAMW,EAAKC,CAAK,EACvB,IACT,CACF,EAEA,SAASZ,GAAea,EAASF,EAAKG,EAAK,CACzC,GAAIA,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EACvD,MAAM,IAAIrD,GAAqB,WAAWkD,CAAG,SAAS,EACjD,GAAIG,IAAQ,OACjB,OAGF,IAAIC,EAAatC,GAA2BkC,CAAG,EAE/C,GAAII,IAAe,SACjBA,EAAaJ,EAAI,YAAY,EACzBlC,GAA2BsC,CAAU,IAAM,QAAa,CAACnD,GAAiBmD,CAAU,GACtF,MAAM,IAAItD,GAAqB,oBAAoB,EAIvD,GAAI,MAAM,QAAQqD,CAAG,EAAG,CACtB,IAAME,EAAM,CAAC,EACb,QAAS,EAAI,EAAG,EAAIF,EAAI,OAAQ,IAC9B,GAAI,OAAOA,EAAI,CAAC,GAAM,SAAU,CAC9B,GAAI,CAACjD,GAAmBiD,EAAI,CAAC,CAAC,EAC5B,MAAM,IAAIrD,GAAqB,WAAWkD,CAAG,SAAS,EAExDK,EAAI,KAAKF,EAAI,CAAC,CAAC,CACjB,SAAWA,EAAI,CAAC,IAAM,KACpBE,EAAI,KAAK,EAAE,MACN,IAAI,OAAOF,EAAI,CAAC,GAAM,SAC3B,MAAM,IAAIrD,GAAqB,WAAWkD,CAAG,SAAS,EAEtDK,EAAI,KAAK,GAAGF,EAAI,CAAC,CAAC,EAAE,EAGxBA,EAAME,CACR,SAAW,OAAOF,GAAQ,UACxB,GAAI,CAACjD,GAAmBiD,CAAG,EACzB,MAAM,IAAIrD,GAAqB,WAAWkD,CAAG,SAAS,OAE/CG,IAAQ,KACjBA,EAAM,GAENA,EAAM,GAAGA,CAAG,GAGd,GAAID,EAAQ,OAAS,MAAQE,IAAe,OAAQ,CAClD,GAAI,OAAOD,GAAQ,SACjB,MAAM,IAAIrD,GAAqB,qBAAqB,EAGtDoD,EAAQ,KAAOC,CACjB,SAAWD,EAAQ,gBAAkB,MAAQE,IAAe,kBAE1D,GADAF,EAAQ,cAAgB,SAASC,EAAK,EAAE,EACpC,CAAC,OAAO,SAASD,EAAQ,aAAa,EACxC,MAAM,IAAIpD,GAAqB,+BAA+B,UAEvDoD,EAAQ,cAAgB,MAAQE,IAAe,eACxDF,EAAQ,YAAcC,EACtBD,EAAQ,QAAQ,KAAKF,EAAKG,CAAG,MACxB,IAAIC,IAAe,qBAAuBA,IAAe,cAAgBA,IAAe,UAC7F,MAAM,IAAItD,GAAqB,WAAWsD,CAAU,SAAS,EACxD,GAAIA,IAAe,aAAc,CACtC,IAAMH,EAAQ,OAAOE,GAAQ,SAAWA,EAAI,YAAY,EAAI,KAC5D,GAAIF,IAAU,SAAWA,IAAU,aACjC,MAAM,IAAInD,GAAqB,2BAA2B,EAGxDmD,IAAU,UACZC,EAAQ,MAAQ,GAEpB,KAAO,IAAIE,IAAe,SACxB,MAAM,IAAIrD,GAAkB,6BAA6B,EAEzDmD,EAAQ,QAAQ,KAAKF,EAAKG,CAAG,GAEjC,CAEAtD,GAAO,QAAUoB,KC5YjB,IAAAqC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,qBAAAC,EAAqB,EAAI,IAEjCD,GAAO,QAAU,MAAME,EAAY,CACjCC,GAEA,YAAaC,EAAS,CACpB,KAAKD,GAAWC,CAClB,CAEA,OAAO,KAAMA,EAAS,CAEpB,OAAOA,EAAQ,eAAiBA,EAAU,IAAIF,GAAYE,CAAO,CACnE,CAIA,UAAWC,EAAOC,EAAS,CACzB,OAAO,KAAKH,GAAS,YAAYE,EAAOC,CAAO,CACjD,CAEA,UAAWC,EAAYC,EAAYC,EAAQC,EAAe,CACxD,OAAO,KAAKP,GAAS,YAAYI,EAAYC,EAAYC,EAAQC,CAAa,CAChF,CAEA,UAAWH,EAAYC,EAAYG,EAAQ,CACzC,OAAO,KAAKR,GAAS,YAAYI,EAAYC,EAAYG,CAAM,CACjE,CAEA,OAAQC,EAAM,CACZ,OAAO,KAAKT,GAAS,SAASS,CAAI,CACpC,CAEA,WAAYC,EAAU,CACpB,OAAO,KAAKV,GAAS,aAAaU,CAAQ,CAC5C,CAEA,QAASC,EAAK,CACZ,GAAI,CAAC,KAAKX,GAAS,QACjB,MAAMW,EAGR,OAAO,KAAKX,GAAS,UAAUW,CAAG,CACpC,CAIA,eAAgBC,EAAYT,EAAS,CACnC,KAAKH,GAAS,YAAaa,GAAWD,EAAW,MAAMC,CAAM,EAAGV,CAAO,CACzE,CAEA,iBAAkBS,EAAYR,EAAYU,EAASN,EAAQ,CACzD,IAAMH,EAAa,CAAC,EACpB,OAAW,CAACU,EAAKC,CAAG,IAAK,OAAO,QAAQF,CAAO,EAC7CT,EAAW,KAAK,OAAO,KAAKU,CAAG,EAAG,MAAM,QAAQC,CAAG,EAAIA,EAAI,IAAIC,GAAK,OAAO,KAAKA,CAAC,CAAC,EAAI,OAAO,KAAKD,CAAG,CAAC,EAGxG,KAAKhB,GAAS,YAAYI,EAAYC,EAAYG,CAAM,CAC1D,CAEA,gBAAiBI,EAAYR,EAAYU,EAASP,EAAe,CAC/D,IAAMF,EAAa,CAAC,EACpB,OAAW,CAACU,EAAKC,CAAG,IAAK,OAAO,QAAQF,CAAO,EAC7CT,EAAW,KAAK,OAAO,KAAKU,CAAG,EAAG,MAAM,QAAQC,CAAG,EAAIA,EAAI,IAAIC,GAAK,OAAO,KAAKA,CAAC,CAAC,EAAI,OAAO,KAAKD,CAAG,CAAC,EAGpG,KAAKhB,GAAS,YAAYI,EAAYC,EAAY,IAAMO,EAAW,OAAO,EAAGL,CAAa,IAAM,IAClGK,EAAW,MAAM,CAErB,CAEA,eAAgBA,EAAYH,EAAM,CAC5B,KAAKT,GAAS,SAASS,CAAI,IAAM,IACnCG,EAAW,MAAM,CAErB,CAEA,cAAeA,EAAYF,EAAU,CACnC,IAAMQ,EAAc,CAAC,EACrB,OAAW,CAACH,EAAKC,CAAG,IAAK,OAAO,QAAQN,CAAQ,EAC9CQ,EAAY,KAAK,OAAO,KAAKH,CAAG,EAAG,MAAM,QAAQC,CAAG,EAAIA,EAAI,IAAIC,GAAK,OAAO,KAAKA,CAAC,CAAC,EAAI,OAAO,KAAKD,CAAG,CAAC,EAGzG,KAAKhB,GAAS,aAAakB,CAAW,CACxC,CAEA,gBAAiBN,EAAYD,EAAK,CAChC,GAAI,CAAC,KAAKX,GAAS,QACjB,MAAM,IAAIF,GAAqB,wBAAwB,EAGzD,KAAKE,GAAS,UAAUW,CAAG,CAC7B,CACF,IC9FA,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,IAAMC,GAAe,EAAQ,aAAa,EACpCC,GAAc,KAEdC,GAAmBC,GAAa,CAACC,EAAMC,IAAYF,EAASC,EAAMH,GAAY,KAAKI,CAAO,CAAC,EAE3FC,GAAN,cAAyBN,EAAa,CACpC,UAAY,CACV,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,OAAS,CACP,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,SAAW,CACT,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,WAAYO,EAAM,CAEhB,IAAMC,EAAe,MAAM,QAAQD,EAAK,CAAC,CAAC,EAAIA,EAAK,CAAC,EAAIA,EACpDJ,EAAW,KAAK,SAAS,KAAK,IAAI,EAEtC,QAAWM,KAAeD,EACxB,GAAIC,GAAe,KAInB,IAAI,OAAOA,GAAgB,WACzB,MAAM,IAAI,UAAU,mDAAmD,OAAOA,CAAW,EAAE,EAM7F,GAHAN,EAAWM,EAAYN,CAAQ,EAC/BA,EAAWD,GAAgBC,CAAQ,EAE/BA,GAAY,MAAQ,OAAOA,GAAa,YAAcA,EAAS,SAAW,EAC5E,MAAM,IAAI,UAAU,qBAAqB,EAI7C,OAAO,IAAI,MAAM,KAAM,CACrB,IAAK,CAACO,EAAQC,IAAQA,IAAQ,WAAaR,EAAWO,EAAOC,CAAG,CAClE,CAAC,CACH,CACF,EAEAZ,GAAO,QAAUO,KC/CjB,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,aAAAC,EAAa,EAAI,IACnB,CAAE,qBAAAC,EAAqB,EAAI,IAE3BC,GAAU,OAAO,QAAQ,EAEzBC,GAAN,KAAuB,CACrBC,GAAU,GACVC,GAAU,KACVC,GAAW,GACXC,GAEA,CAACL,EAAO,EAAI,KAEZ,YAAaM,EAAO,CAClB,KAAKD,GAASC,CAChB,CAEA,OAAS,CACP,KAAKJ,GAAU,EACjB,CAEA,QAAU,CACJ,KAAKA,KACP,KAAKA,GAAU,GACf,KAAKF,EAAO,IAAI,EAEpB,CAEA,MAAOO,EAAQ,CACR,KAAKH,KACR,KAAKA,GAAW,GAChB,KAAKD,GAAUI,EACf,KAAKF,GAAOE,CAAM,EAEtB,CAEA,IAAI,SAAW,CACb,OAAO,KAAKH,EACd,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKD,EACd,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKD,EACd,CACF,EAEAL,GAAO,QAAU,MAAMW,EAAc,CACnCC,GACAC,GAEA,YAAaC,EAAS,CACpB,KAAKF,GAAWE,CAClB,CAEA,OAAO,OAAQA,EAAS,CAEtB,OAAQA,EAAQ,eAA2B,IAAIH,GAAcG,CAAO,EAAnCA,CACnC,CAEA,UAAWL,EAAOM,EAAS,CACzB,KAAKF,GAAc,IAAIT,GAAiBK,CAAK,EAC7C,KAAKG,GAAS,iBAAiB,KAAKC,GAAaE,CAAO,CAC1D,CAEA,UAAWC,EAAYC,EAAYC,EAAQ,CACzC,KAAKN,GAAS,mBAAmB,KAAKC,GAAaG,EAAYf,GAAagB,CAAU,EAAGC,CAAM,CACjG,CAEA,UAAWF,EAAYC,EAAYE,EAAQC,EAAe,CACxD,YAAKP,GAAYV,EAAO,EAAIgB,EAC5B,KAAKP,GAAS,kBAAkB,KAAKC,GAAaG,EAAYf,GAAagB,CAAU,EAAGG,CAAa,EAC9F,CAAC,KAAKP,GAAY,MAC3B,CAEA,OAAQQ,EAAM,CACZ,YAAKT,GAAS,iBAAiB,KAAKC,GAAaQ,CAAI,EAC9C,CAAC,KAAKR,GAAY,MAC3B,CAEA,WAAYS,EAAa,CACvB,KAAKV,GAAS,gBAAgB,KAAKC,GAAaZ,GAAaqB,CAAW,CAAC,CAC3E,CAEA,QAASC,EAAK,CACZ,GAAI,CAAC,KAAKX,GAAS,gBACjB,MAAM,IAAIV,GAAqB,wBAAwB,EAGzD,KAAKU,GAAS,kBAAkB,KAAKC,GAAaU,CAAG,CACvD,CACF,IC/FA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAa,KACbC,GAAgB,KAChB,CACJ,qBAAAC,GACA,kBAAAC,GACA,qBAAAC,EACF,EAAI,IACE,CAAE,SAAAC,GAAU,OAAAC,GAAQ,QAAAC,GAAS,WAAAC,GAAY,UAAAC,EAAU,EAAI,KAEvDC,GAAe,OAAO,aAAa,EACnCC,GAAY,OAAO,UAAU,EAE7BC,GAAN,cAA6BZ,EAAW,CACtC,aAAe,CACb,MAAM,EAEN,KAAKQ,EAAU,EAAI,GACnB,KAAKE,EAAY,EAAI,KACrB,KAAKH,EAAO,EAAI,GAChB,KAAKI,EAAS,EAAI,CAAC,CACrB,CAEA,IAAI,WAAa,CACf,OAAO,KAAKH,EAAU,CACxB,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKD,EAAO,CACrB,CAEA,MAAOM,EAAU,CACf,GAAIA,IAAa,OACf,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,KAAK,MAAM,CAACC,EAAKC,IACRD,EAAMD,EAAOC,CAAG,EAAIF,EAAQG,CAAI,CACxC,CACH,CAAC,EAGH,GAAI,OAAOJ,GAAa,WACtB,MAAM,IAAIT,GAAqB,kBAAkB,EAGnD,GAAI,KAAKI,EAAU,EAAG,CACpB,eAAe,IAAMK,EAAS,IAAIX,GAAwB,IAAI,CAAC,EAC/D,MACF,CAEA,GAAI,KAAKK,EAAO,EAAG,CACb,KAAKI,EAAS,EAChB,KAAKA,EAAS,EAAE,KAAKE,CAAQ,EAE7B,eAAe,IAAMA,EAAS,KAAM,IAAI,CAAC,EAE3C,MACF,CAEA,KAAKN,EAAO,EAAI,GAChB,KAAKI,EAAS,EAAE,KAAKE,CAAQ,EAE7B,IAAMK,EAAW,IAAM,CACrB,IAAMC,EAAY,KAAKR,EAAS,EAChC,KAAKA,EAAS,EAAI,KAClB,QAASS,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpCD,EAAUC,CAAC,EAAE,KAAM,IAAI,CAE3B,EAGA,KAAKd,EAAM,EAAE,EACV,KAAK,IAAM,KAAK,QAAQ,CAAC,EACzB,KAAK,IAAM,CACV,eAAeY,CAAQ,CACzB,CAAC,CACL,CAEA,QAASF,EAAKH,EAAU,CAMtB,GALI,OAAOG,GAAQ,aACjBH,EAAWG,EACXA,EAAM,MAGJH,IAAa,OACf,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,KAAK,QAAQC,EAAK,CAACA,EAAKC,IACfD,EAAqDD,EAAOC,CAAG,EAAIF,EAAQG,CAAI,CACvF,CACH,CAAC,EAGH,GAAI,OAAOJ,GAAa,WACtB,MAAM,IAAIT,GAAqB,kBAAkB,EAGnD,GAAI,KAAKI,EAAU,EAAG,CAChB,KAAKE,EAAY,EACnB,KAAKA,EAAY,EAAE,KAAKG,CAAQ,EAEhC,eAAe,IAAMA,EAAS,KAAM,IAAI,CAAC,EAE3C,MACF,CAEKG,IACHA,EAAM,IAAId,IAGZ,KAAKM,EAAU,EAAI,GACnB,KAAKE,EAAY,EAAI,KAAKA,EAAY,GAAK,CAAC,EAC5C,KAAKA,EAAY,EAAE,KAAKG,CAAQ,EAEhC,IAAMQ,EAAc,IAAM,CACxB,IAAMF,EAAY,KAAKT,EAAY,EACnC,KAAKA,EAAY,EAAI,KACrB,QAAS,EAAI,EAAG,EAAIS,EAAU,OAAQ,IACpCA,EAAU,CAAC,EAAE,KAAM,IAAI,CAE3B,EAGA,KAAKd,EAAQ,EAAEW,CAAG,EAAE,KAAK,IAAM,CAC7B,eAAeK,CAAW,CAC5B,CAAC,CACH,CAEA,SAAUC,EAAMC,EAAS,CACvB,GAAI,CAACA,GAAW,OAAOA,GAAY,SACjC,MAAM,IAAInB,GAAqB,2BAA2B,EAG5DmB,EAAUtB,GAAc,OAAOsB,CAAO,EAEtC,GAAI,CACF,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAIlB,GAAqB,yBAAyB,EAG1D,GAAI,KAAKI,EAAU,GAAK,KAAKE,EAAY,EACvC,MAAM,IAAIR,GAGZ,GAAI,KAAKK,EAAO,EACd,MAAM,IAAIJ,GAGZ,OAAO,KAAKM,EAAS,EAAEa,EAAMC,CAAO,CACtC,OAASP,EAAK,CACZ,GAAI,OAAOO,EAAQ,SAAY,WAC7B,MAAMP,EAGR,OAAAO,EAAQ,QAAQP,CAAG,EAEZ,EACT,CACF,CACF,EAEAjB,GAAO,QAAUa,KChKjB,IAAAY,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAqBA,IAAIC,GAAU,EAQRC,GAAgB,IAUhBC,IAAWD,IAAiB,GAAK,EAQnCE,GAOEC,GAAa,OAAO,YAAY,EAOhCC,GAAa,CAAC,EAgBdC,GAAc,GAYdC,GAAgB,GAShBC,GAAU,EASVC,GAAS,EAOf,SAASC,IAAU,CAQjBV,IAAWE,GASX,IAAIS,EAAM,EASNC,EAAMP,GAAW,OAErB,KAAOM,EAAMC,GAAK,CAIhB,IAAMC,EAAQR,GAAWM,CAAG,EAIxBE,EAAM,SAAWL,IAGnBK,EAAM,WAAab,GAAUE,GAC7BW,EAAM,OAASJ,IAEfI,EAAM,SAAWJ,IACjBT,IAAWa,EAAM,WAAaA,EAAM,eAEpCA,EAAM,OAASN,GACfM,EAAM,WAAa,GACnBA,EAAM,WAAWA,EAAM,SAAS,GAG9BA,EAAM,SAAWN,IACnBM,EAAM,OAASP,GAIX,EAAEM,IAAQ,IACZP,GAAWM,CAAG,EAAIN,GAAWO,CAAG,IAGlC,EAAED,CAEN,CAIAN,GAAW,OAASO,EAKhBP,GAAW,SAAW,GACxBS,GAAe,CAEnB,CAEA,SAASA,IAAkB,CAErBX,GACFA,GAAe,QAAQ,GAGvB,aAAaA,EAAc,EAC3BA,GAAiB,WAAWO,GAAQR,EAAO,EAIvCC,GAAe,OACjBA,GAAe,MAAM,EAG3B,CAMA,IAAMY,GAAN,KAAgB,CACd,CAACX,EAAU,EAAI,GAYf,OAASE,GAQT,aAAe,GAUf,WAAa,GAOb,WAQA,UAUA,YAAaU,EAAUC,EAAOC,EAAK,CACjC,KAAK,WAAaF,EAClB,KAAK,aAAeC,EACpB,KAAK,UAAYC,EAEjB,KAAK,QAAQ,CACf,CAWA,SAAW,CAIL,KAAK,SAAWZ,IAClBD,GAAW,KAAK,IAAI,GAKlB,CAACF,IAAkBE,GAAW,SAAW,IAC3CS,GAAe,EAKjB,KAAK,OAASN,EAChB,CAQA,OAAS,CAGP,KAAK,OAASD,GAId,KAAK,WAAa,EACpB,CACF,EAMAR,GAAO,QAAU,CAYf,WAAYiB,EAAUC,EAAOC,EAAK,CAGhC,OAAOD,GAAShB,GACZ,WAAWe,EAAUC,EAAOC,CAAG,EAC/B,IAAIH,GAAUC,EAAUC,EAAOC,CAAG,CACxC,EAOA,aAAcC,EAAS,CAEjBA,EAAQf,EAAU,EAIpBe,EAAQ,MAAM,EAId,aAAaA,CAAO,CAExB,EAYA,eAAgBH,EAAUC,EAAOC,EAAK,CACpC,OAAO,IAAIH,GAAUC,EAAUC,EAAOC,CAAG,CAC3C,EAOA,iBAAkBC,EAAS,CACzBA,EAAQ,MAAM,CAChB,EAMA,KAAO,CACL,OAAOnB,EACT,EAQA,KAAMiB,EAAQ,EAAG,CACfjB,IAAWiB,EAAQhB,GAAgB,EACnCS,GAAO,EACPA,GAAO,CACT,EAOA,OAAS,CACPV,GAAU,EACVK,GAAW,OAAS,EACpB,aAAaF,EAAc,EAC3BA,GAAiB,IACnB,EAMA,WAAAC,EACF,ICtaA,IAAAgB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAM,EAAQ,UAAU,EACxBC,GAAS,EAAQ,aAAa,EAC9BC,GAAO,IACP,CAAE,qBAAAC,GAAsB,oBAAAC,EAAoB,EAAI,IAChDC,GAAS,KAEf,SAASC,IAAQ,CAAC,CAElB,IAAIC,GAOAC,GAGA,OAAO,sBAAwB,EAAE,QAAQ,IAAI,kBAAoB,QAAQ,IAAI,cAC/EA,GAAe,KAAuB,CACpC,YAAaC,EAAmB,CAC9B,KAAK,mBAAqBA,EAC1B,KAAK,cAAgB,IAAI,IACzB,KAAK,iBAAmB,IAAI,OAAO,qBAAsBC,GAAQ,CAC/D,GAAI,KAAK,cAAc,KAAO,KAAK,mBACjC,OAGF,IAAMC,EAAM,KAAK,cAAc,IAAID,CAAG,EAClCC,IAAQ,QAAaA,EAAI,MAAM,IAAM,QACvC,KAAK,cAAc,OAAOD,CAAG,CAEjC,CAAC,CACH,CAEA,IAAKE,EAAY,CACf,IAAMD,EAAM,KAAK,cAAc,IAAIC,CAAU,EAC7C,OAAOD,EAAMA,EAAI,MAAM,EAAI,IAC7B,CAEA,IAAKC,EAAYC,EAAS,CACpB,KAAK,qBAAuB,IAIhC,KAAK,cAAc,IAAID,EAAY,IAAI,QAAQC,CAAO,CAAC,EACvD,KAAK,iBAAiB,SAASA,EAASD,CAAU,EACpD,CACF,EAEAJ,GAAe,KAAyB,CACtC,YAAaC,EAAmB,CAC9B,KAAK,mBAAqBA,EAC1B,KAAK,cAAgB,IAAI,GAC3B,CAEA,IAAKG,EAAY,CACf,OAAO,KAAK,cAAc,IAAIA,CAAU,CAC1C,CAEA,IAAKA,EAAYC,EAAS,CACxB,GAAI,KAAK,qBAAuB,EAIhC,IAAI,KAAK,cAAc,MAAQ,KAAK,mBAAoB,CAEtD,GAAM,CAAE,MAAOC,CAAU,EAAI,KAAK,cAAc,KAAK,EAAE,KAAK,EAC5D,KAAK,cAAc,OAAOA,CAAS,CACrC,CAEA,KAAK,cAAc,IAAIF,EAAYC,CAAO,EAC5C,CACF,EAGF,SAASE,GAAgB,CAAE,QAAAC,EAAS,kBAAAP,EAAmB,WAAAQ,EAAY,QAAAC,EAAS,QAASC,EAAe,GAAGC,CAAK,EAAG,CAC7G,GAAIX,GAAqB,OAAS,CAAC,OAAO,UAAUA,CAAiB,GAAKA,EAAoB,GAC5F,MAAM,IAAIN,GAAqB,sDAAsD,EAGvF,IAAMkB,EAAU,CAAE,KAAMJ,EAAY,GAAGG,CAAK,EACtCE,EAAe,IAAId,GAAaC,GAA4B,GAAuB,EACzF,OAAAS,EAAUA,GAAkB,IAC5BF,EAAUA,GAA4B,GAC/B,SAAkB,CAAE,SAAAO,EAAU,KAAAC,EAAM,SAAAC,EAAU,KAAAC,EAAM,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAGC,EAAU,CAC3G,IAAIC,EACJ,GAAIN,IAAa,SAAU,CACpBlB,KACHA,GAAM,EAAQ,UAAU,GAE1BoB,EAAaA,GAAcN,EAAQ,YAAcnB,GAAK,cAAcsB,CAAI,GAAK,KAE7E,IAAMZ,EAAae,GAAcJ,EACjCtB,GAAOW,CAAU,EAEjB,IAAMC,EAAUM,GAAiBG,EAAa,IAAIV,CAAU,GAAK,KAEjEc,EAAOA,GAAQ,IAEfK,EAASxB,GAAI,QAAQ,CACnB,cAAe,MACf,GAAGc,EACH,WAAAM,EACA,QAAAd,EACA,aAAAe,EAEA,cAAeZ,EAAU,CAAC,WAAY,IAAI,EAAI,CAAC,UAAU,EACzD,OAAQa,EACR,KAAAH,EACA,KAAMH,CACR,CAAC,EAEDQ,EACG,GAAG,UAAW,SAAUlB,EAAS,CAEhCS,EAAa,IAAIV,EAAYC,CAAO,CACtC,CAAC,CACL,MACEZ,GAAO,CAAC4B,EAAY,2CAA2C,EAE/DH,EAAOA,GAAQ,GAEfK,EAAS/B,GAAI,QAAQ,CACnB,cAAe,GAAK,KACpB,GAAGqB,EACH,aAAAO,EACA,KAAAF,EACA,KAAMH,CACR,CAAC,EAIH,GAAIF,EAAQ,WAAa,MAAQA,EAAQ,UAAW,CAClD,IAAMW,EAAwBX,EAAQ,wBAA0B,OAAY,IAAOA,EAAQ,sBAC3FU,EAAO,aAAa,GAAMC,CAAqB,CACjD,CAEA,IAAMC,EAAsBC,GAAoB,IAAI,QAAQH,CAAM,EAAG,CAAE,QAAAb,EAAS,SAAAK,EAAU,KAAAG,CAAK,CAAC,EAEhG,OAAAK,EACG,WAAW,EAAI,EACf,KAAKN,IAAa,SAAW,gBAAkB,UAAW,UAAY,CAGrE,GAFA,eAAeQ,CAAmB,EAE9BH,EAAU,CACZ,IAAMK,EAAKL,EACXA,EAAW,KACXK,EAAG,KAAM,IAAI,CACf,CACF,CAAC,EACA,GAAG,QAAS,SAAUC,EAAK,CAG1B,GAFA,eAAeH,CAAmB,EAE9BH,EAAU,CACZ,IAAMK,EAAKL,EACXA,EAAW,KACXK,EAAGC,CAAG,CACR,CACF,CAAC,EAEIL,CACT,CACF,CAUA,IAAMG,GAAsB,QAAQ,WAAa,QAC7C,CAACG,EAAejB,IAAS,CACvB,GAAI,CAACA,EAAK,QACR,OAAOd,GAGT,IAAIgC,EAAK,KACLC,EAAK,KACHC,EAAYnC,GAAO,eAAe,IAAM,CAE5CiC,EAAK,aAAa,IAAM,CAEtBC,EAAK,aAAa,IAAME,GAAiBJ,EAAc,MAAM,EAAGjB,CAAI,CAAC,CACvE,CAAC,CACH,EAAGA,EAAK,OAAO,EACf,MAAO,IAAM,CACXf,GAAO,iBAAiBmC,CAAS,EACjC,eAAeF,CAAE,EACjB,eAAeC,CAAE,CACnB,CACF,EACA,CAACF,EAAejB,IAAS,CACvB,GAAI,CAACA,EAAK,QACR,OAAOd,GAGT,IAAIgC,EAAK,KACHE,EAAYnC,GAAO,eAAe,IAAM,CAE5CiC,EAAK,aAAa,IAAM,CACtBG,GAAiBJ,EAAc,MAAM,EAAGjB,CAAI,CAC9C,CAAC,CACH,EAAGA,EAAK,OAAO,EACf,MAAO,IAAM,CACXf,GAAO,iBAAiBmC,CAAS,EACjC,eAAeF,CAAE,CACnB,CACF,EASJ,SAASG,GAAkBV,EAAQX,EAAM,CAEvC,GAAIW,GAAU,KACZ,OAGF,IAAIW,EAAU,wBACV,MAAM,QAAQX,EAAO,kCAAkC,EACzDW,GAAW,0BAA0BX,EAAO,mCAAmC,KAAK,IAAI,CAAC,IAEzFW,GAAW,wBAAwBtB,EAAK,QAAQ,IAAIA,EAAK,IAAI,IAG/DsB,GAAW,aAAatB,EAAK,OAAO,MAEpClB,GAAK,QAAQ6B,EAAQ,IAAI3B,GAAoBsC,CAAO,CAAC,CACvD,CAEA3C,GAAO,QAAUgB,sGC7OjB,SAAgB4B,GACdC,EACAC,EAAgC,CAAA,EAChCC,EAAoC,CAAA,EAAE,SAEtC,IAAMC,IAAeC,EAAAH,GAAQ,UAAM,MAAAG,IAAA,OAAAA,EAAI,KAAO,EACxCC,IAAmBC,EAAAJ,GAAY,UAAM,MAAAI,IAAA,OAAAA,EAAI,KAAO,EAEtD,OAAO,OAAO,YAAY,OAAO,QAAQN,CAAG,EAAE,OAAO,CAAC,CAAC,CAAGO,CAAK,IAE3D,OAAOA,GAAU,WAChBJ,GAAeF,EAAO,SAASM,CAAK,KACpCF,GAAmB,CAACH,EAAW,SAASK,CAAK,EAEjD,CAAC,CACJ,CAfAC,GAAA,UAAAT,odCFA,IAAAU,GAAA,KAMaC,EAAA,MAAiB,CAC5B,GAAI,EACJ,SAAU,EACV,OAAQ,EACR,YAAa,GACb,YAAa,EACb,0BAA2B,EAC3B,iBAAkB,GAClB,kBAAmB,EACnB,eAAgB,EAChB,YAAa,EACb,iBAAkB,EAClB,gBAAiB,EACjB,qBAAsB,GACtB,uBAAwB,GACxB,mBAAoB,GACpB,eAAgB,GAChB,kBAAmB,GACnB,0BAA2B,GAE3B,iBAAkB,GAClB,oBAAqB,GACrB,oBAAqB,GACrB,gBAAiB,GACjB,kBAAmB,GAEnB,OAAQ,GACR,eAAgB,GAChB,kBAAmB,GAEnB,KAAM,GAEN,gBAAiB,GACjB,mBAAoB,GACpB,mBAAoB,GACpB,oBAAqB,GACrB,yBAA0B,GAC1B,yBAA0B,GAC1B,iCAAkC,GAClC,kCAAmC,GACnC,SAAU,IAGCA,EAAA,KAAgB,CAC3B,KAAM,EACN,QAAS,EACT,SAAU,GAGCA,EAAA,MAAiB,CAC5B,sBAAuB,EACvB,iBAAkB,EAClB,mBAAoB,EACpB,QAAS,EACT,QAAS,GACT,eAAgB,GAChB,SAAU,GACV,SAAU,IAEV,kBAAmB,KAGRA,EAAA,cAAyB,CACpC,QAAS,EACT,eAAgB,EAChB,WAAY,EACZ,kBAAmB,EACnB,QAAS,GACT,iBAAkB,GAClB,qBAAsB,GACtB,0BAA2B,IAC3B,sBAAuB,IACvB,wBAAyB,KAGdA,EAAA,QAAmB,CAC9B,OAAU,EACV,IAAO,EACP,KAAQ,EACR,KAAQ,EACR,IAAO,EAEP,QAAW,EACX,QAAW,EACX,MAAS,EAET,KAAQ,EACR,KAAQ,EACR,MAAS,GACT,KAAQ,GACR,SAAY,GACZ,UAAa,GACb,OAAU,GACV,OAAU,GACV,KAAQ,GACR,OAAU,GACV,OAAU,GACV,IAAO,GAEP,OAAU,GACV,WAAc,GACd,SAAY,GACZ,MAAS,GAET,WAAY,GACZ,OAAU,GACV,UAAa,GACb,YAAe,GAEf,MAAS,GACT,MAAS,GAET,WAAc,GAEd,KAAQ,GACR,OAAU,GAEV,OAAU,GAEV,IAAO,GAEP,SAAY,GACZ,SAAY,GACZ,MAAS,GACT,KAAQ,GACR,MAAS,GACT,SAAY,GACZ,cAAiB,GACjB,cAAiB,GACjB,SAAY,GACZ,OAAU,GAEV,MAAS,GAET,MAAS,IAGEA,EAAA,SAAoB,CAC/B,SAAU,IACV,oBAAqB,IACrB,WAAY,IACZ,YAAa,IACb,kBAAmB,IACnB,oBAAqB,IACrB,uBAAwB,IACxB,qBAAsB,IACtB,sBAAuB,IACvB,GAAI,IACJ,QAAS,IACT,SAAU,IACV,8BAA+B,IAC/B,WAAY,IACZ,cAAe,IACf,gBAAiB,IACjB,aAAc,IACd,iBAAkB,IAClB,uBAAwB,IACxB,QAAS,IACT,iCAAkC,IAClC,iBAAkB,IAClB,kBAAmB,IACnB,MAAO,IACP,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,mBAAoB,IACpB,mBAAoB,IACpB,YAAa,IACb,aAAc,IACd,iBAAkB,IAClB,UAAW,IACX,UAAW,IACX,mBAAoB,IACpB,eAAgB,IAChB,8BAA+B,IAC/B,gBAAiB,IACjB,SAAU,IACV,KAAM,IACN,gBAAiB,IACjB,oBAAqB,IACrB,kBAAmB,IACnB,aAAc,IACd,uBAAwB,IACxB,sBAAuB,IACvB,mBAAoB,IACpB,YAAa,IACb,aAAc,IACd,kBAAmB,IACnB,oBAAqB,IACrB,qBAAsB,IACtB,OAAQ,IACR,kBAAmB,IACnB,UAAW,IACX,iBAAkB,IAClB,sBAAuB,IACvB,kBAAmB,IACnB,2CAA4C,IAC5C,gCAAiC,IACjC,cAAe,IACf,YAAa,IACb,WAAY,IACZ,4BAA6B,IAC7B,8BAA+B,IAC/B,oCAAqC,IACrC,wBAAyB,IACzB,yBAA0B,IAC1B,sBAAuB,IACvB,yBAA0B,IAC1B,gCAAiC,IACjC,cAAe,IACf,sBAAuB,IACvB,sBAAuB,IACvB,gBAAiB,IACjB,YAAa,IACb,oBAAqB,IACrB,gBAAiB,IACjB,2BAA4B,IAC5B,wBAAyB,IACzB,qBAAsB,IACtB,cAAe,IACf,yBAA0B,IAC1B,aAAc,IACd,gCAAiC,IACjC,yBAA0B,IAC1B,mBAAoB,IACpB,mBAAoB,IACpB,sBAAuB,IACvB,gBAAiB,IACjB,qBAAsB,IACtB,wBAAyB,IACzB,cAAe,IACf,mBAAoB,IACpB,eAAgB,IAChB,uCAAwC,IACxC,qBAAsB,IACtB,wBAAyB,KAGdA,EAAA,OAAkB,CAC7B,KAAM,EACN,aAAc,EACd,OAAQ,GAGGA,EAAA,aAAwB,CACnC,QAAS,EACT,WAAY,EACZ,eAAgB,EAChB,kBAAmB,EACnB,QAAS,EACT,sBAAuB,EACvB,iBAAkB,EAClB,mBAAoB,EACpB,0BAA2B,GAIhBA,EAAA,aAAe,CAC1BA,EAAA,QAAQ,OACRA,EAAA,QAAQ,IACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,IACRA,EAAA,QAAQ,QACRA,EAAA,QAAQ,QACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,UACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,IACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,WACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,UAAU,EAClBA,EAAA,QAAQ,OACRA,EAAA,QAAQ,UACRA,EAAA,QAAQ,YACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,WACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,IAGRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,OAGGA,EAAA,YAAc,CACzBA,EAAA,QAAQ,QAGGA,EAAA,aAAe,CAC1BA,EAAA,QAAQ,QACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,KACRA,EAAA,QAAQ,MACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,cACRA,EAAA,QAAQ,cACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,OACRA,EAAA,QAAQ,MAGRA,EAAA,QAAQ,IACRA,EAAA,QAAQ,MAGGA,EAAA,cAAaD,GAAA,WAAUC,EAAA,OAAO,EAE9BA,EAAA,aAAe,OAAO,YACjC,OAAO,QAAQA,EAAA,OAAO,EAAE,OAAO,CAAC,CAAEC,CAAC,IAAOA,EAAE,WAAW,GAAG,CAAC,CAAC,EAGjDD,EAAA,cAAgB,CAC3BA,EAAA,SAAS,SACTA,EAAA,SAAS,oBACTA,EAAA,SAAS,WACTA,EAAA,SAAS,YACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,oBACTA,EAAA,SAAS,uBACTA,EAAA,SAAS,qBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,GACTA,EAAA,SAAS,QACTA,EAAA,SAAS,SACTA,EAAA,SAAS,8BACTA,EAAA,SAAS,WACTA,EAAA,SAAS,cACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,aACTA,EAAA,SAAS,iBACTA,EAAA,SAAS,uBACTA,EAAA,SAAS,QACTA,EAAA,SAAS,iCACTA,EAAA,SAAS,iBACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,MACTA,EAAA,SAAS,UACTA,EAAA,SAAS,aACTA,EAAA,SAAS,UACTA,EAAA,SAAS,aACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,YACTA,EAAA,SAAS,aACTA,EAAA,SAAS,iBACTA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,eACTA,EAAA,SAAS,8BACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,SACTA,EAAA,SAAS,KACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,oBACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,aACTA,EAAA,SAAS,uBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,YACTA,EAAA,SAAS,aACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,oBACTA,EAAA,SAAS,qBACTA,EAAA,SAAS,OACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,UACTA,EAAA,SAAS,iBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,kBACTA,EAAA,SAAS,2CACTA,EAAA,SAAS,gCACTA,EAAA,SAAS,cACTA,EAAA,SAAS,YACTA,EAAA,SAAS,WACTA,EAAA,SAAS,4BACTA,EAAA,SAAS,8BACTA,EAAA,SAAS,oCACTA,EAAA,SAAS,wBACTA,EAAA,SAAS,yBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,yBACTA,EAAA,SAAS,gCACTA,EAAA,SAAS,cACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,YACTA,EAAA,SAAS,oBACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,2BACTA,EAAA,SAAS,wBACTA,EAAA,SAAS,qBACTA,EAAA,SAAS,cACTA,EAAA,SAAS,yBACTA,EAAA,SAAS,aACTA,EAAA,SAAS,gCACTA,EAAA,SAAS,yBACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,sBACTA,EAAA,SAAS,gBACTA,EAAA,SAAS,qBACTA,EAAA,SAAS,wBACTA,EAAA,SAAS,cACTA,EAAA,SAAS,mBACTA,EAAA,SAAS,eACTA,EAAA,SAAS,uCACTA,EAAA,SAAS,qBACTA,EAAA,SAAS,yBAOEA,EAAA,MAAkB,CAAA,EAE/B,QAASE,EAAI,GAAmBA,GAAK,GAAmBA,IAEtDF,EAAA,MAAM,KAAK,OAAO,aAAaE,CAAC,CAAC,EAGjCF,EAAA,MAAM,KAAK,OAAO,aAAaE,EAAI,EAAI,CAAC,EAG7BF,EAAA,QAAU,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3B,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBA,EAAA,QAAU,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3B,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3B,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAC3C,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,IAGhCA,EAAA,IAAgB,CAC3B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlCA,EAAA,SAAqBA,EAAA,MAAM,OAAOA,EAAA,GAAG,EACrCA,EAAA,KAAiB,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,GAAG,EAC/DA,EAAA,eAA2BA,EAAA,SACrC,OAAOA,EAAA,IAAI,EACX,OAAO,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAE,EAGvCA,EAAA,SAAsB,CACjC,IAAK,IAAK,IAAK,IAAK,IAAK,IACzB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IACpB,IAAK,IAAK,KAAM,IAAK,IAAK,IAC1B,IACA,IAAK,IAAK,IAAK,KACF,OAAOA,EAAA,QAAQ,EAEjBA,EAAA,IAAgBA,EAAA,IAAI,OAC/B,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAE,EASnDA,EAAA,MAAmB,CAC9B,IAAK,IAAK,IAAK,IAAK,IAAK,IACzB,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IACV,IAAK,KACQ,OAAOA,EAAA,QAAQ,EAMjBA,EAAA,aAAyB,CAAE,GAAI,EAC5C,QAASE,EAAI,GAAIA,GAAK,IAAKA,IACrBA,IAAM,KACRF,EAAA,aAAa,KAAKE,CAAC,EAKVF,EAAA,uBACXA,EAAA,aAAa,OAAQG,GAAuBA,IAAM,EAAE,EAEzCH,EAAA,cAA0B,CAAE,IAAM,GAAG,EAClD,QAASE,EAAI,GAAMA,GAAK,IAAMA,IACxBA,IAAM,IAAQA,IAAM,IACtBF,EAAA,cAAc,KAAKE,CAAC,EAIXF,EAAA,uBAAmC,CAAE,IAAM,GAAG,EAG3D,QAASE,EAAI,GAAMA,GAAK,IAAMA,IAC5BF,EAAA,uBAAuB,KAAKE,CAAC,EAG/B,QAASA,EAAI,IAAMA,GAAK,IAAMA,IAC5BF,EAAA,uBAAuB,KAAKE,CAAC,EAGlBF,EAAA,MAAQA,EAAA,QACRA,EAAA,MAAQA,EAAA,MAERA,EAAA,gBAAkB,CAC7B,WAAcA,EAAA,aAAa,WAC3B,iBAAkBA,EAAA,aAAa,eAC/B,mBAAoBA,EAAA,aAAa,WACjC,oBAAqBA,EAAA,aAAa,kBAClC,QAAWA,EAAA,aAAa,WC5hB1B,IAAAI,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,EAAO,EAAI,EAAQ,aAAa,EAElCC,GAAa,mxnEAEfC,GAEJ,OAAO,eAAeH,GAAQ,UAAW,CACvC,IAAK,IACIG,KAEFA,GAAaF,GAAO,KAAKC,GAAY,QAAQ,EAEtD,CAAC,ICdD,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,EAAO,EAAI,EAAQ,aAAa,EAElCC,GAAa,uznEAEfC,GAEJ,OAAO,eAAeH,GAAQ,UAAW,CACvC,IAAK,IACIG,KAEFA,GAAaF,GAAO,KAAKC,GAAY,QAAQ,EAEtD,CAAC,ICdD,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAA8C,CAAC,MAAO,OAAQ,MAAM,EACpEC,GAA2B,IAAI,IAAID,EAAqB,EAExDE,GAAuC,CAAC,IAAK,IAAK,IAAK,GAAG,EAE1DC,GAAuC,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAC/DC,GAAoB,IAAI,IAAID,EAAc,EAK1CE,GAAiC,CACrC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC/G,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvG,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAClG,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OACpG,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OACxG,OAAQ,OACV,EACMC,GAAc,IAAI,IAAID,EAAQ,EAK9BE,GAA6C,CACjD,cACA,6BACA,cACA,SACA,gBACA,2BACA,kCACA,YACF,EAKMC,GAAuC,CAC3C,GACA,GAAGD,EACL,EACME,GAA0B,IAAI,IAAIF,EAAoB,EAEtDG,GAAwC,CAAC,SAAU,SAAU,OAAO,EAEpEC,GAAoC,CAAC,MAAO,OAAQ,UAAW,OAAO,EACtEC,GAAiB,IAAI,IAAID,EAAW,EAEpCE,GAAoC,CAAC,WAAY,cAAe,UAAW,MAAM,EAEjFC,GAA2C,CAAC,OAAQ,cAAe,SAAS,EAE5EC,GAAqC,CACzC,UACA,WACA,SACA,WACA,cACA,gBACF,EAKMC,GAA0C,CAC9C,mBACA,mBACA,mBACA,eAKA,gBACF,EAKMC,GAAsC,CAC1C,MACF,EAKMC,GAAyC,CAAC,UAAW,QAAS,OAAO,EACrEC,GAAsB,IAAI,IAAID,EAAgB,EAE9CE,GAAoC,CACxC,QACA,eACA,OACA,QACA,WACA,eACA,SACA,QACA,QACA,QACA,OACA,EACF,EACMC,GAAiB,IAAI,IAAID,EAAW,EAE1CrB,GAAO,QAAU,CACf,YAAAqB,GACA,iBAAAF,GACA,kBAAAF,GACA,eAAAR,GACA,gBAAAE,GACA,YAAAG,GACA,mBAAAC,GACA,aAAAC,GACA,eAAAZ,GACA,sBAAAH,GACA,eAAAE,GACA,YAAAS,GACA,SAAAN,GACA,cAAAY,GACA,eAAAI,GACA,YAAAf,GACA,kBAAAF,GACA,yBAAAH,GACA,eAAAW,GACA,oBAAAO,GACA,qBAAsBV,EACxB,IClIA,IAAAa,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,IAAMC,GAAe,OAAO,IAAI,uBAAuB,EAEvD,SAASC,IAAmB,CAC1B,OAAO,WAAWD,EAAY,CAChC,CAEA,SAASE,GAAiBC,EAAW,CACnC,GAAIA,IAAc,OAAW,CAC3B,OAAO,eAAe,WAAYH,GAAc,CAC9C,MAAO,OACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,EAED,MACF,CAEA,IAAMI,EAAY,IAAI,IAAID,CAAS,EAEnC,GAAIC,EAAU,WAAa,SAAWA,EAAU,WAAa,SAC3D,MAAM,IAAI,UAAU,gDAAgDA,EAAU,QAAQ,EAAE,EAG1F,OAAO,eAAe,WAAYJ,GAAc,CAC9C,MAAOI,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,CACH,CAEAL,GAAO,QAAU,CACf,gBAAAE,GACA,gBAAAC,EACF,ICvCA,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAE9BC,GAAU,IAAI,YAKdC,GAAwB,gCACxBC,GAAwB,6BACxBC,GAAiC,oCAIjCC,GAA4B,wCAIlC,SAASC,GAAkBC,EAAS,CAElCP,GAAOO,EAAQ,WAAa,OAAO,EAKnC,IAAIC,EAAQC,GAAcF,EAAS,EAAI,EAGvCC,EAAQA,EAAM,MAAM,CAAC,EAGrB,IAAME,EAAW,CAAE,SAAU,CAAE,EAK3BC,EAAWC,GACb,IACAJ,EACAE,CACF,EAQMG,EAAiBF,EAAS,OAKhC,GAJAA,EAAWG,GAAsBH,EAAU,GAAM,EAAI,EAIjDD,EAAS,UAAYF,EAAM,OAC7B,MAAO,UAITE,EAAS,WAGT,IAAMK,EAAcP,EAAM,MAAMK,EAAiB,CAAC,EAG9CG,EAAOC,GAAoBF,CAAW,EAK1C,GAAI,wBAAwB,KAAKJ,CAAQ,EAAG,CAE1C,IAAMO,EAAaC,GAAiBH,CAAI,EAOxC,GAHAA,EAAOI,GAAgBF,CAAU,EAG7BF,IAAS,UACX,MAAO,UAITL,EAAWA,EAAS,MAAM,EAAG,EAAE,EAI/BA,EAAWA,EAAS,QAAQ,aAAc,EAAE,EAG5CA,EAAWA,EAAS,MAAM,EAAG,EAAE,CACjC,CAIIA,EAAS,WAAW,GAAG,IACzBA,EAAW,aAAeA,GAK5B,IAAIU,EAAiBC,GAAcX,CAAQ,EAI3C,OAAIU,IAAmB,YACrBA,EAAiBC,GAAc,6BAA6B,GAMvD,CAAE,SAAUD,EAAgB,KAAAL,CAAK,CAC1C,CAOA,SAASP,GAAec,EAAKC,EAAkB,GAAO,CACpD,GAAI,CAACA,EACH,OAAOD,EAAI,KAGb,IAAME,EAAOF,EAAI,KACXG,EAAaH,EAAI,KAAK,OAEtBI,EAAaD,IAAe,EAAID,EAAOA,EAAK,UAAU,EAAGA,EAAK,OAASC,CAAU,EAEvF,MAAI,CAACA,GAAcD,EAAK,SAAS,GAAG,EAC3BE,EAAW,MAAM,EAAG,EAAE,EAGxBA,CACT,CAQA,SAASC,GAA8BC,EAAWrB,EAAOE,EAAU,CAEjE,IAAIoB,EAAS,GAIb,KAAOpB,EAAS,SAAWF,EAAM,QAAUqB,EAAUrB,EAAME,EAAS,QAAQ,CAAC,GAE3EoB,GAAUtB,EAAME,EAAS,QAAQ,EAGjCA,EAAS,WAIX,OAAOoB,CACT,CAQA,SAASlB,GAAkCmB,EAAMvB,EAAOE,EAAU,CAChE,IAAMsB,EAAMxB,EAAM,QAAQuB,EAAMrB,EAAS,QAAQ,EAC3CuB,EAAQvB,EAAS,SAEvB,OAAIsB,IAAQ,IACVtB,EAAS,SAAWF,EAAM,OACnBA,EAAM,MAAMyB,CAAK,IAG1BvB,EAAS,SAAWsB,EACbxB,EAAM,MAAMyB,EAAOvB,EAAS,QAAQ,EAC7C,CAIA,SAASO,GAAqBT,EAAO,CAEnC,IAAM0B,EAAQjC,GAAQ,OAAOO,CAAK,EAGlC,OAAO2B,GAAcD,CAAK,CAC5B,CAKA,SAASE,GAAeC,EAAM,CAE5B,OAAQA,GAAQ,IAAQA,GAAQ,IAAUA,GAAQ,IAAQA,GAAQ,IAAUA,GAAQ,IAAQA,GAAQ,GACtG,CAKA,SAASC,GAAiBD,EAAM,CAC9B,OAEEA,GAAQ,IAAQA,GAAQ,GACnBA,EAAO,IAGNA,EAAO,KAAQ,EAEzB,CAIA,SAASF,GAAe3B,EAAO,CAC7B,IAAM+B,EAAS/B,EAAM,OAGfgC,EAAS,IAAI,WAAWD,CAAM,EAChCE,EAAI,EAER,QAASC,EAAI,EAAGA,EAAIH,EAAQ,EAAEG,EAAG,CAC/B,IAAML,EAAO7B,EAAMkC,CAAC,EAGhBL,IAAS,GACXG,EAAOC,GAAG,EAAIJ,EAQdA,IAAS,IACT,EAAED,GAAc5B,EAAMkC,EAAI,CAAC,CAAC,GAAKN,GAAc5B,EAAMkC,EAAI,CAAC,CAAC,GAE3DF,EAAOC,GAAG,EAAI,IAOdD,EAAOC,GAAG,EAAKH,GAAgB9B,EAAMkC,EAAI,CAAC,CAAC,GAAK,EAAKJ,GAAgB9B,EAAMkC,EAAI,CAAC,CAAC,EAGjFA,GAAK,EAET,CAGA,OAAOH,IAAWE,EAAID,EAASA,EAAO,SAAS,EAAGC,CAAC,CACrD,CAIA,SAASnB,GAAed,EAAO,CAG7BA,EAAQmC,GAAqBnC,EAAO,GAAM,EAAI,EAI9C,IAAME,EAAW,CAAE,SAAU,CAAE,EAKzBkC,EAAOhC,GACX,IACAJ,EACAE,CACF,EAWA,GANIkC,EAAK,SAAW,GAAK,CAAC1C,GAAsB,KAAK0C,CAAI,GAMrDlC,EAAS,UAAYF,EAAM,OAC7B,MAAO,UAITE,EAAS,WAKT,IAAImC,EAAUjC,GACZ,IACAJ,EACAE,CACF,EAOA,GAJAmC,EAAUF,GAAqBE,EAAS,GAAO,EAAI,EAI/CA,EAAQ,SAAW,GAAK,CAAC3C,GAAsB,KAAK2C,CAAO,EAC7D,MAAO,UAGT,IAAMC,EAAgBF,EAAK,YAAY,EACjCG,EAAmBF,EAAQ,YAAY,EAMvClC,EAAW,CACf,KAAMmC,EACN,QAASC,EAET,WAAY,IAAI,IAEhB,QAAS,GAAGD,CAAa,IAAIC,CAAgB,EAC/C,EAGA,KAAOrC,EAAS,SAAWF,EAAM,QAAQ,CAEvCE,EAAS,WAITkB,GAEEG,GAAQ5B,GAAsB,KAAK4B,CAAI,EACvCvB,EACAE,CACF,EAKA,IAAIsC,EAAgBpB,GACjBG,GAASA,IAAS,KAAOA,IAAS,IACnCvB,EACAE,CACF,EAOA,GAHAsC,EAAgBA,EAAc,YAAY,EAGtCtC,EAAS,SAAWF,EAAM,OAAQ,CAGpC,GAAIA,EAAME,EAAS,QAAQ,IAAM,IAC/B,SAIFA,EAAS,UACX,CAGA,GAAIA,EAAS,UAAYF,EAAM,OAC7B,MAIF,IAAIyC,EAAiB,KAIrB,GAAIzC,EAAME,EAAS,QAAQ,IAAM,IAI/BuC,EAAiBC,GAA0B1C,EAAOE,EAAU,EAAI,EAIhEE,GACE,IACAJ,EACAE,CACF,UAOAuC,EAAiBrC,GACf,IACAJ,EACAE,CACF,EAGAuC,EAAiBN,GAAqBM,EAAgB,GAAO,EAAI,EAG7DA,EAAe,SAAW,EAC5B,SAWFD,EAAc,SAAW,GACzB9C,GAAsB,KAAK8C,CAAa,IACvCC,EAAe,SAAW,GAAK5C,GAA0B,KAAK4C,CAAc,IAC7E,CAACtC,EAAS,WAAW,IAAIqC,CAAa,GAEtCrC,EAAS,WAAW,IAAIqC,EAAeC,CAAc,CAEzD,CAGA,OAAOtC,CACT,CAIA,SAASS,GAAiB+B,EAAM,CAE9BA,EAAOA,EAAK,QAAQ/C,GAAgC,EAAE,EAEtD,IAAIgD,EAAaD,EAAK,OAyBtB,GAtBIC,EAAa,IAAM,GAGjBD,EAAK,WAAWC,EAAa,CAAC,IAAM,KACtC,EAAEA,EACED,EAAK,WAAWC,EAAa,CAAC,IAAM,IACtC,EAAEA,GAOJA,EAAa,IAAM,GASnB,iBAAiB,KAAKD,EAAK,SAAWC,EAAaD,EAAOA,EAAK,UAAU,EAAGC,CAAU,CAAC,EACzF,MAAO,UAGT,IAAMC,EAAS,OAAO,KAAKF,EAAM,QAAQ,EACzC,OAAO,IAAI,WAAWE,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,CAC3E,CASA,SAASH,GAA2B1C,EAAOE,EAAU4C,EAAe,GAAO,CAEzE,IAAMC,EAAgB7C,EAAS,SAG3B8C,EAAQ,GAUZ,IANAxD,GAAOQ,EAAME,EAAS,QAAQ,IAAM,GAAG,EAGvCA,EAAS,WAOP8C,GAAS5B,GACNG,GAASA,IAAS,KAAOA,IAAS,KACnCvB,EACAE,CACF,EAGI,EAAAA,EAAS,UAAYF,EAAM,SAXpB,CAiBX,IAAMiD,EAAmBjD,EAAME,EAAS,QAAQ,EAMhD,GAHAA,EAAS,WAGL+C,IAAqB,KAAM,CAG7B,GAAI/C,EAAS,UAAYF,EAAM,OAAQ,CACrCgD,GAAS,KACT,KACF,CAGAA,GAAShD,EAAME,EAAS,QAAQ,EAGhCA,EAAS,UAGX,KAAO,CAELV,GAAOyD,IAAqB,GAAG,EAG/B,KACF,CACF,CAGA,OAAIH,EACKE,EAKFhD,EAAM,MAAM+C,EAAe7C,EAAS,QAAQ,CACrD,CAKA,SAASgD,GAAoB/C,EAAU,CACrCX,GAAOW,IAAa,SAAS,EAC7B,GAAM,CAAE,WAAAgD,EAAY,QAAAC,CAAQ,EAAIjD,EAI5BkD,EAAgBD,EAGpB,OAAS,CAACE,EAAMN,CAAK,IAAKG,EAAW,QAAQ,EAE3CE,GAAiB,IAGjBA,GAAiBC,EAGjBD,GAAiB,IAIZ3D,GAAsB,KAAKsD,CAAK,IAGnCA,EAAQA,EAAM,QAAQ,UAAW,MAAM,EAGvCA,EAAQ,IAAMA,EAGdA,GAAS,KAIXK,GAAiBL,EAInB,OAAOK,CACT,CAMA,SAASE,GAAkBhC,EAAM,CAE/B,OAAOA,IAAS,IAASA,IAAS,IAASA,IAAS,GAASA,IAAS,EACxE,CAQA,SAASY,GAAsBqB,EAAKC,EAAU,GAAMC,EAAW,GAAM,CACnE,OAAOC,GAAYH,EAAKC,EAASC,EAAUH,EAAgB,CAC7D,CAMA,SAASK,GAAmBrC,EAAM,CAEhC,OAAOA,IAAS,IAASA,IAAS,IAASA,IAAS,GAASA,IAAS,IAASA,IAAS,EAC1F,CAQA,SAASjB,GAAuBkD,EAAKC,EAAU,GAAMC,EAAW,GAAM,CACpE,OAAOC,GAAYH,EAAKC,EAASC,EAAUE,EAAiB,CAC9D,CASA,SAASD,GAAaH,EAAKC,EAASC,EAAUG,EAAW,CACvD,IAAIC,EAAO,EACPC,EAAQP,EAAI,OAAS,EAEzB,GAAIC,EACF,KAAOK,EAAON,EAAI,QAAUK,EAAUL,EAAI,WAAWM,CAAI,CAAC,GAAGA,IAG/D,GAAIJ,EACF,KAAOK,EAAQ,GAAKF,EAAUL,EAAI,WAAWO,CAAK,CAAC,GAAGA,IAGxD,OAAOD,IAAS,GAAKC,IAAUP,EAAI,OAAS,EAAIA,EAAMA,EAAI,MAAMM,EAAMC,EAAQ,CAAC,CACjF,CAOA,SAASpD,GAAkBX,EAAO,CAIhC,IAAM+B,EAAS/B,EAAM,OACrB,GAAK,MAAe+B,EAClB,OAAO,OAAO,aAAa,MAAM,KAAM/B,CAAK,EAE9C,IAAIsB,EAAS,GAAQY,EAAI,EACrB8B,EAAY,MAChB,KAAO9B,EAAIH,GACLG,EAAI8B,EAAWjC,IACjBiC,EAAWjC,EAASG,GAEtBZ,GAAU,OAAO,aAAa,MAAM,KAAMtB,EAAM,SAASkC,EAAGA,GAAK8B,CAAQ,CAAC,EAE5E,OAAO1C,CACT,CAMA,SAAS2C,GAA2B9D,EAAU,CAC5C,OAAQA,EAAS,QAAS,CACxB,IAAK,yBACL,IAAK,yBACL,IAAK,2BACL,IAAK,2BACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,qBACL,IAAK,qBACL,IAAK,qBACL,IAAK,qBACL,IAAK,qBACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,oBAEH,MAAO,kBACT,IAAK,mBACL,IAAK,YAEH,MAAO,mBACT,IAAK,gBAEH,MAAO,gBACT,IAAK,WACL,IAAK,kBAEH,MAAO,iBACX,CAGA,OAAIA,EAAS,QAAQ,SAAS,OAAO,EAC5B,mBAILA,EAAS,QAAQ,SAAS,MAAM,EAC3B,kBAOF,EACT,CAEAZ,GAAO,QAAU,CACf,iBAAAO,GACA,cAAAG,GACA,6BAAAmB,GACA,iCAAAhB,GACA,oBAAAK,GACA,cAAAK,GACA,0BAAA4B,GACA,mBAAAQ,GACA,YAAAS,GACA,qBAAAxB,GACA,0BAAA8B,GACA,sBAAAvE,GACA,iBAAAiB,EACF,ICvuBA,IAAAuD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,MAAAC,GAAO,QAAAC,EAAQ,EAAI,EAAQ,WAAW,EACxC,CAAE,kBAAAC,EAAkB,EAAI,EAAQ,qBAAqB,EACrD,CAAE,YAAAC,EAAY,EAAI,IAElBC,GAAY,EACZC,GAAU,EACVC,GAAS,EACTC,GAAS,EACTC,GAAS,EACTC,GAAS,EACTC,GAAO,EACPC,GAAS,EAETC,GAAqC,SAAS,KAAK,KAAK,SAAS,UAAU,OAAO,WAAW,CAAC,EAG9FC,EAAS,CACb,WAAY,CAAC,EACb,KAAM,CAAC,EACP,OAAQ,CAAC,EACT,GAAI,CAAC,CACP,EAEAA,EAAO,OAAO,UAAY,SAAUC,EAAS,CAC3C,OAAO,IAAI,UAAU,GAAGA,EAAQ,MAAM,KAAKA,EAAQ,OAAO,EAAE,CAC9D,EAEAD,EAAO,OAAO,iBAAmB,SAAUE,EAAS,CAClD,IAAMC,EAASD,EAAQ,MAAM,SAAW,EAAI,GAAK,UAC3CD,EACJ,GAAGC,EAAQ,QAAQ,6BAChBC,CAAM,KAAKD,EAAQ,MAAM,KAAK,IAAI,CAAC,IAExC,OAAOF,EAAO,OAAO,UAAU,CAC7B,OAAQE,EAAQ,OAChB,QAAAD,CACF,CAAC,CACH,EAEAD,EAAO,OAAO,gBAAkB,SAAUE,EAAS,CACjD,OAAOF,EAAO,OAAO,UAAU,CAC7B,OAAQE,EAAQ,OAChB,QAAS,IAAIA,EAAQ,KAAK,mBAAmBA,EAAQ,IAAI,GAC3D,CAAC,CACH,EAGAF,EAAO,WAAa,SAAUI,EAAGC,EAAG,CAClC,GAAI,CAACN,GAAmCM,EAAGD,CAAC,EAAG,CAC7C,IAAME,EAAM,IAAI,UAAU,oBAAoB,EAC9C,MAAAA,EAAI,KAAO,mBACLA,CACR,CACF,EAEAN,EAAO,mBAAqB,SAAUO,EAAM,CAC1C,IAAMC,EAAaD,EAAK,IAAKE,GAAMT,EAAO,KAAK,kBAAkBS,CAAC,CAAC,EAEnE,OAAQL,GAAM,CACZ,GAAII,EAAW,MAAME,GAAa,CAACA,EAAUN,CAAC,CAAC,EAAG,CAChD,IAAME,EAAM,IAAI,UAAU,oBAAoB,EAC9C,MAAAA,EAAI,KAAO,mBACLA,CACR,CACF,CACF,EAEAN,EAAO,oBAAsB,SAAU,CAAE,OAAAW,CAAO,EAAGC,EAAKC,EAAK,CAC3D,GAAIF,EAASC,EACX,MAAMZ,EAAO,OAAO,UAAU,CAC5B,QAAS,GAAGY,CAAG,YAAYA,IAAQ,EAAI,IAAM,EAAE,iBAChCD,EAAS,QAAU,EAAE,IAAIA,CAAM,UAC9C,OAAQE,CACV,CAAC,CAEL,EAEAb,EAAO,mBAAqB,UAAY,CACtC,MAAMA,EAAO,OAAO,UAAU,CAC5B,OAAQ,YACR,QAAS,qBACX,CAAC,CACH,EAEAA,EAAO,KAAK,kBAAoB,SAAUK,EAAG,CAC3C,OAAQS,GAAMf,GAAmCM,EAAGS,CAAC,CACvD,EAGAd,EAAO,KAAK,KAAO,SAAUI,EAAG,CAC9B,OAAQ,OAAOA,EAAG,CAChB,IAAK,YAAa,OAAOb,GACzB,IAAK,UAAW,OAAOC,GACvB,IAAK,SAAU,OAAOC,GACtB,IAAK,SAAU,OAAOC,GACtB,IAAK,SAAU,OAAOC,GACtB,IAAK,SAAU,OAAOC,GACtB,IAAK,WACL,IAAK,SACH,OAAIQ,IAAM,KACDP,GAGFC,EAEX,CACF,EAEAE,EAAO,KAAK,MAAQ,CAClB,UAAAT,GACA,QAAAC,GACA,OAAAC,GACA,OAAAC,GACA,OAAAC,GACA,OAAAC,GACA,KAAAC,GACA,OAAAC,EACF,EAEAE,EAAO,KAAK,kBAAoB,SAAUe,EAAG,CAC3C,OAAQf,EAAO,KAAK,KAAKe,CAAC,EAAG,CAC3B,KAAKxB,GAAW,MAAO,YACvB,KAAKC,GAAS,MAAO,UACrB,KAAKC,GAAQ,MAAO,SACpB,KAAKC,GAAQ,MAAO,SACpB,KAAKC,GAAQ,MAAO,SACpB,KAAKC,GAAQ,MAAO,SACpB,KAAKC,GAAM,MAAO,OAClB,KAAKC,GAAQ,MAAO,QACtB,CACF,EAEAE,EAAO,KAAK,kBAAoBX,KAAsB,IAAM,CAAC,GAG7DW,EAAO,KAAK,aAAe,SAAUI,EAAGY,EAAWC,EAAYC,EAAM,CACnE,IAAIC,EACAC,EAGAJ,IAAc,IAEhBG,EAAa,KAAK,IAAI,EAAG,EAAE,EAAI,EAG3BF,IAAe,WACjBG,EAAa,EAGbA,EAAa,KAAK,IAAI,GAAI,EAAE,EAAI,GAEzBH,IAAe,YAIxBG,EAAa,EAGbD,EAAa,KAAK,IAAI,EAAGH,CAAS,EAAI,IAKtCI,EAAa,KAAK,IAAI,GAAIJ,CAAS,EAAI,EAGvCG,EAAa,KAAK,IAAI,EAAGH,EAAY,CAAC,EAAI,GAI5C,IAAIK,EAAI,OAAOjB,CAAC,EAShB,GANIiB,IAAM,IACRA,EAAI,GAKFH,GAAM,eAAiB,GAAM,CAE/B,GACE,OAAO,MAAMG,CAAC,GACdA,IAAM,OAAO,mBACbA,IAAM,OAAO,kBAEb,MAAMrB,EAAO,OAAO,UAAU,CAC5B,OAAQ,qBACR,QAAS,qBAAqBA,EAAO,KAAK,UAAUI,CAAC,CAAC,iBACxD,CAAC,EAQH,GAJAiB,EAAIrB,EAAO,KAAK,YAAYqB,CAAC,EAIzBA,EAAID,GAAcC,EAAIF,EACxB,MAAMnB,EAAO,OAAO,UAAU,CAC5B,OAAQ,qBACR,QAAS,yBAAyBoB,CAAU,IAAID,CAAU,SAASE,CAAC,GACtE,CAAC,EAIH,OAAOA,CACT,CAKA,MAAI,CAAC,OAAO,MAAMA,CAAC,GAAKH,GAAM,QAAU,IAEtCG,EAAI,KAAK,IAAI,KAAK,IAAIA,EAAGD,CAAU,EAAGD,CAAU,EAK5C,KAAK,MAAME,CAAC,EAAI,IAAM,EACxBA,EAAI,KAAK,MAAMA,CAAC,EAEhBA,EAAI,KAAK,KAAKA,CAAC,EAIVA,GAKP,OAAO,MAAMA,CAAC,GACbA,IAAM,GAAK,OAAO,GAAG,EAAGA,CAAC,GAC1BA,IAAM,OAAO,mBACbA,IAAM,OAAO,kBAEN,GAITA,EAAIrB,EAAO,KAAK,YAAYqB,CAAC,EAG7BA,EAAIA,EAAI,KAAK,IAAI,EAAGL,CAAS,EAIzBC,IAAe,UAAYI,GAAK,KAAK,IAAI,EAAGL,CAAS,EAAI,EACpDK,EAAI,KAAK,IAAI,EAAGL,CAAS,EAI3BK,EACT,EAGArB,EAAO,KAAK,YAAc,SAAUsB,EAAG,CAErC,IAAMC,EAAI,KAAK,MAAM,KAAK,IAAID,CAAC,CAAC,EAGhC,OAAIA,EAAI,EACC,GAAKC,EAIPA,CACT,EAEAvB,EAAO,KAAK,UAAY,SAAUI,EAAG,CAGnC,OAFaJ,EAAO,KAAK,KAAKI,CAAC,EAEjB,CACZ,KAAKV,GACH,MAAO,UAAUU,EAAE,WAAW,IAChC,KAAKN,GACH,OAAOV,GAAQgB,CAAC,EAClB,KAAKX,GACH,MAAO,IAAIW,CAAC,IACd,QACE,MAAO,GAAGA,CAAC,EACf,CACF,EAGAJ,EAAO,kBAAoB,SAAUwB,EAAW,CAC9C,MAAO,CAACpB,EAAGqB,EAAQC,EAAUC,IAAa,CAExC,GAAI3B,EAAO,KAAK,KAAKI,CAAC,IAAMN,GAC1B,MAAME,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGC,CAAQ,KAAK1B,EAAO,KAAK,UAAUI,CAAC,CAAC,oBACnD,CAAC,EAKH,IAAMwB,EAAS,OAAOD,GAAa,WAAaA,EAAS,EAAIvB,IAAI,OAAO,QAAQ,IAAI,EAC9EyB,EAAM,CAAC,EACTC,EAAQ,EAGZ,GACEF,IAAW,QACX,OAAOA,EAAO,MAAS,WAEvB,MAAM5B,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGC,CAAQ,mBACtB,CAAC,EAIH,OAAa,CACX,GAAM,CAAE,KAAAK,EAAM,MAAAC,CAAM,EAAIJ,EAAO,KAAK,EAEpC,GAAIG,EACF,MAGFF,EAAI,KAAKL,EAAUQ,EAAOP,EAAQ,GAAGC,CAAQ,IAAII,GAAO,GAAG,CAAC,CAC9D,CAEA,OAAOD,CACT,CACF,EAGA7B,EAAO,gBAAkB,SAAUiC,EAAcC,EAAgB,CAC/D,MAAO,CAACpB,EAAGW,EAAQC,IAAa,CAE9B,GAAI1B,EAAO,KAAK,KAAKc,CAAC,IAAMhB,GAC1B,MAAME,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGC,CAAQ,MAAM1B,EAAO,KAAK,kBAAkBc,CAAC,CAAC,sBAC5D,CAAC,EAIH,IAAMqB,EAAS,CAAC,EAEhB,GAAI,CAAChD,GAAM,QAAQ2B,CAAC,EAAG,CAErB,IAAMsB,EAAO,CAAC,GAAG,OAAO,oBAAoBtB,CAAC,EAAG,GAAG,OAAO,sBAAsBA,CAAC,CAAC,EAElF,QAAWuB,KAAOD,EAAM,CACtB,IAAME,EAAUtC,EAAO,KAAK,UAAUqC,CAAG,EAGnCE,EAAWN,EAAaI,EAAKZ,EAAQ,OAAOa,CAAO,OAAOZ,CAAQ,EAAE,EAIpEc,EAAaN,EAAepB,EAAEuB,CAAG,EAAGZ,EAAQ,GAAGC,CAAQ,IAAIY,CAAO,GAAG,EAG3EH,EAAOI,CAAQ,EAAIC,CACrB,CAGA,OAAOL,CACT,CAGA,IAAMC,EAAO,QAAQ,QAAQtB,CAAC,EAG9B,QAAWuB,KAAOD,EAKhB,GAHa,QAAQ,yBAAyBtB,EAAGuB,CAAG,GAG1C,WAAY,CAEpB,IAAME,EAAWN,EAAaI,EAAKZ,EAAQC,CAAQ,EAI7Cc,EAAaN,EAAepB,EAAEuB,CAAG,EAAGZ,EAAQC,CAAQ,EAG1DS,EAAOI,CAAQ,EAAIC,CACrB,CAIF,OAAOL,CACT,CACF,EAEAnC,EAAO,mBAAqB,SAAUyC,EAAWC,EAAM,CACrD,MAAO,CAACtC,EAAGqB,EAAQC,IAAa,CAC9B,GAAI,CAACe,EAAUrC,CAAC,EACd,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,YAAYC,CAAQ,MAAM1B,EAAO,KAAK,UAAUI,CAAC,CAAC,2BAA2BsC,CAAI,GAC5F,CAAC,EAGH,OAAOtC,CACT,CACF,EAEAJ,EAAO,oBAAsB,SAAU2C,EAAY,CACjD,MAAO,CAACC,EAAYnB,EAAQC,IAAa,CACvC,IAAMmB,EAAO,CAAC,EAEd,GAAID,GAAc,MAAQ5C,EAAO,KAAK,KAAK4C,CAAU,IAAM9C,GACzD,MAAME,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,YAAYmB,CAAU,yCACjC,CAAC,EAGH,QAAWE,KAAWH,EAAY,CAChC,GAAM,CAAE,IAAAN,EAAK,aAAAU,EAAc,SAAAC,EAAU,UAAAxB,CAAU,EAAIsB,EAEnD,GAAIE,IAAa,KACXJ,GAAc,MAAQ,CAAC,OAAO,OAAOA,EAAYP,CAAG,GACtD,MAAMrC,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,yBAAyBY,CAAG,IACvC,CAAC,EAIL,IAAIL,EAAQY,IAAaP,CAAG,EACtBY,EAAaF,IAAiB,OAWpC,GAPIE,GAAcjB,IAAU,SAC1BA,EAAQe,EAAa,GAMnBC,GAAYC,GAAcjB,IAAU,OAAW,CAGjD,GAFAA,EAAQR,EAAUQ,EAAOP,EAAQ,GAAGC,CAAQ,IAAIW,CAAG,EAAE,EAGnDS,EAAQ,eACR,CAACA,EAAQ,cAAc,SAASd,CAAK,EAErC,MAAMhC,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGO,CAAK,6CAA6Cc,EAAQ,cAAc,KAAK,IAAI,CAAC,GAChG,CAAC,EAGHD,EAAKR,CAAG,EAAIL,CACd,CACF,CAEA,OAAOa,CACT,CACF,EAEA7C,EAAO,kBAAoB,SAAUwB,EAAW,CAC9C,MAAO,CAACpB,EAAGqB,EAAQC,IACbtB,IAAM,KACDA,EAGFoB,EAAUpB,EAAGqB,EAAQC,CAAQ,CAExC,EAEA1B,EAAO,GAAG,eAAiBA,EAAO,KAAK,kBAAkB,cAAc,EACvEA,EAAO,GAAG,KAAOA,EAAO,KAAK,kBAAkB,IAAI,EACnDA,EAAO,GAAG,gBAAkBA,EAAO,KAAK,kBAAkB,eAAe,EACzEA,EAAO,GAAG,KAAOA,EAAO,KAAK,kBAAkB,WAAW,MAAQ,EAAQ,aAAa,EAAE,IAAI,EAC7FA,EAAO,GAAG,IAAMA,EAAO,KAAK,kBAAkB,GAAG,EACjDA,EAAO,GAAG,YAAcA,EAAO,KAAK,kBAAkB,WAAW,EACjEA,EAAO,GAAG,YAAcA,EAAO,KAAK,kBAAkB,WAAW,EAGjEA,EAAO,WAAW,UAAY,SAAUI,EAAGqB,EAAQC,EAAUR,EAAM,CAKjE,GAAId,IAAM,MAAQc,GAAM,wBACtB,MAAO,GAIT,GAAI,OAAOd,GAAM,SACf,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGC,CAAQ,yDACtB,CAAC,EAMH,OAAO,OAAOtB,CAAC,CACjB,EAGAJ,EAAO,WAAW,WAAa,SAAUI,EAAGqB,EAAQC,EAAU,CAE5D,GAAI,OAAOtB,GAAM,SACf,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGC,CAAQ,0DACtB,CAAC,EAGH,IAAML,EAAI,OAAOjB,CAAC,EAIlB,QAAS0B,EAAQ,EAAGA,EAAQT,EAAE,OAAQS,IACpC,GAAIT,EAAE,WAAWS,CAAK,EAAI,IACxB,MAAM,IAAI,UACR,0EACSA,CAAK,mBAAmBT,EAAE,WAAWS,CAAK,CAAC,6BACtD,EAOJ,OAAOT,CACT,EAIArB,EAAO,WAAW,UAAYV,GAG9BU,EAAO,WAAW,QAAU,SAAUI,EAAG,CAMvC,MAJU,EAAQA,CAKpB,EAGAJ,EAAO,WAAW,IAAM,SAAUI,EAAG,CACnC,OAAOA,CACT,EAGAJ,EAAO,WAAW,WAAW,EAAI,SAAUI,EAAGqB,EAAQC,EAAU,CAM9D,OAJU1B,EAAO,KAAK,aAAaI,EAAG,GAAI,SAAU,OAAWqB,EAAQC,CAAQ,CAKjF,EAGA1B,EAAO,WAAW,oBAAoB,EAAI,SAAUI,EAAGqB,EAAQC,EAAU,CAMvE,OAJU1B,EAAO,KAAK,aAAaI,EAAG,GAAI,WAAY,OAAWqB,EAAQC,CAAQ,CAKnF,EAGA1B,EAAO,WAAW,eAAe,EAAI,SAAUI,EAAGqB,EAAQC,EAAU,CAMlE,OAJU1B,EAAO,KAAK,aAAaI,EAAG,GAAI,WAAY,OAAWqB,EAAQC,CAAQ,CAKnF,EAGA1B,EAAO,WAAW,gBAAgB,EAAI,SAAUI,EAAGqB,EAAQC,EAAUR,EAAM,CAMzE,OAJUlB,EAAO,KAAK,aAAaI,EAAG,GAAI,WAAYc,EAAMO,EAAQC,CAAQ,CAK9E,EAGA1B,EAAO,WAAW,YAAc,SAAUI,EAAGqB,EAAQC,EAAUR,EAAM,CAMnE,GACElB,EAAO,KAAK,KAAKI,CAAC,IAAMN,IACxB,CAACX,GAAM,iBAAiBiB,CAAC,EAEzB,MAAMJ,EAAO,OAAO,iBAAiB,CACnC,OAAAyB,EACA,SAAU,GAAGC,CAAQ,MAAM1B,EAAO,KAAK,UAAUI,CAAC,CAAC,KACnD,MAAO,CAAC,aAAa,CACvB,CAAC,EAOH,GAAIc,GAAM,cAAgB,IAAS/B,GAAM,oBAAoBiB,CAAC,EAC5D,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAOH,GAAII,EAAE,WAAaA,EAAE,SACnB,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAKH,OAAOI,CACT,EAEAJ,EAAO,WAAW,WAAa,SAAUI,EAAG8C,EAAGzB,EAAQiB,EAAMxB,EAAM,CAMjE,GACElB,EAAO,KAAK,KAAKI,CAAC,IAAMN,IACxB,CAACX,GAAM,aAAaiB,CAAC,GACrBA,EAAE,YAAY,OAAS8C,EAAE,KAEzB,MAAMlD,EAAO,OAAO,iBAAiB,CACnC,OAAAyB,EACA,SAAU,GAAGiB,CAAI,MAAM1C,EAAO,KAAK,UAAUI,CAAC,CAAC,KAC/C,MAAO,CAAC8C,EAAE,IAAI,CAChB,CAAC,EAOH,GAAIhC,GAAM,cAAgB,IAAS/B,GAAM,oBAAoBiB,EAAE,MAAM,EACnE,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAOH,GAAII,EAAE,OAAO,WAAaA,EAAE,OAAO,SACjC,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAKH,OAAOI,CACT,EAEAJ,EAAO,WAAW,SAAW,SAAUI,EAAGqB,EAAQiB,EAAMxB,EAAM,CAG5D,GAAIlB,EAAO,KAAK,KAAKI,CAAC,IAAMN,IAAU,CAACX,GAAM,WAAWiB,CAAC,EACvD,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQyB,EACR,QAAS,GAAGiB,CAAI,qBAClB,CAAC,EAOH,GAAIxB,GAAM,cAAgB,IAAS/B,GAAM,oBAAoBiB,EAAE,MAAM,EACnE,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAOH,GAAII,EAAE,OAAO,WAAaA,EAAE,OAAO,SACjC,MAAMJ,EAAO,OAAO,UAAU,CAC5B,OAAQ,cACR,QAAS,mCACX,CAAC,EAKH,OAAOI,CACT,EAEAJ,EAAO,WAAW,sBAAsB,EAAIA,EAAO,kBACjDA,EAAO,WAAW,UACpB,EAEAA,EAAO,WAAW,gCAAgC,EAAIA,EAAO,kBAC3DA,EAAO,WAAW,sBAAsB,CAC1C,EAEAA,EAAO,WAAW,gCAAgC,EAAIA,EAAO,gBAC3DA,EAAO,WAAW,WAClBA,EAAO,WAAW,UACpB,EAEAA,EAAO,WAAW,KAAOA,EAAO,mBAAmBA,EAAO,GAAG,KAAM,MAAM,EAEzEA,EAAO,WAAW,YAAcA,EAAO,mBACrCA,EAAO,GAAG,YACV,aACF,EAEAd,GAAO,QAAU,CACf,OAAAc,CACF,ICnuBA,IAAAmD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,UAAAC,EAAU,EAAI,EAAQ,aAAa,EACrCC,GAAO,EAAQ,WAAW,EAC1B,CAAE,kBAAAC,GAAmB,qBAAAC,GAAsB,YAAAC,EAAY,EAAI,KAC3D,CAAE,gBAAAC,EAAgB,EAAI,KACtB,CAAE,6BAAAC,GAA8B,0BAAAC,GAA2B,YAAAC,GAAa,cAAAC,EAAc,EAAI,KAC1F,CAAE,YAAAC,EAAY,EAAI,EAAQ,iBAAiB,EAC3C,CAAE,mBAAAC,GAAoB,iBAAAC,GAAkB,4BAAAC,EAA4B,EAAI,IACxEC,GAAS,EAAQ,aAAa,EAC9B,CAAE,aAAAC,EAAa,EAAI,EAAQ,iBAAiB,EAC5C,CAAE,OAAAC,EAAO,EAAI,KAEfC,GAAkB,CAAC,EAInBC,GACJ,GAAI,CACFA,GAAS,EAAQ,aAAa,EAC9B,IAAMC,EAAyB,CAAC,SAAU,SAAU,QAAQ,EAC5DF,GAAkBC,GAAO,UAAU,EAAE,OAAQE,GAASD,EAAuB,SAASC,CAAI,CAAC,CAE7F,MAAQ,CAER,CAEA,SAASC,GAAaC,EAAU,CAI9B,IAAMC,EAAUD,EAAS,QACnBE,EAASD,EAAQ,OACvB,OAAOC,IAAW,EAAI,KAAOD,EAAQC,EAAS,CAAC,EAAE,SAAS,CAC5D,CAGA,SAASC,GAAqBH,EAAUI,EAAiB,CAEvD,GAAI,CAACxB,GAAkB,IAAIoB,EAAS,MAAM,EACxC,OAAO,KAKT,IAAIK,EAAWL,EAAS,YAAY,IAAI,WAAY,EAAI,EAIxD,OAAIK,IAAa,MAAQC,GAAmBD,CAAQ,IAC7CE,GAAkBF,CAAQ,IAI7BA,EAAWG,GAA4BH,CAAQ,GAEjDA,EAAW,IAAI,IAAIA,EAAUN,GAAYC,CAAQ,CAAC,GAKhDK,GAAY,CAACA,EAAS,OACxBA,EAAS,KAAOD,GAIXC,CACT,CAOA,SAASE,GAAmBE,EAAK,CAC/B,QAASC,EAAI,EAAGA,EAAID,EAAI,OAAQ,EAAEC,EAAG,CACnC,IAAMC,EAAOF,EAAI,WAAWC,CAAC,EAE7B,GACEC,EAAO,KACPA,EAAO,GAEP,MAAO,EAEX,CACA,MAAO,EACT,CAQA,SAASH,GAA6BI,EAAO,CAC3C,OAAO,OAAO,KAAKA,EAAO,QAAQ,EAAE,SAAS,MAAM,CACrD,CAGA,SAASC,GAAmBC,EAAS,CACnC,OAAOA,EAAQ,QAAQA,EAAQ,QAAQ,OAAS,CAAC,CACnD,CAEA,SAASC,GAAgBD,EAAS,CAEhC,IAAML,EAAMI,GAAkBC,CAAO,EAIrC,OAAIE,GAAqBP,CAAG,GAAK3B,GAAY,IAAI2B,EAAI,IAAI,EAChD,UAIF,SACT,CAEA,SAASQ,GAAaC,EAAQ,CAC5B,OAAOA,aAAkB,OACvBA,GAAQ,aAAa,OAAS,SAC9BA,GAAQ,aAAa,OAAS,cAElC,CAQA,SAASC,GAAqBC,EAAY,CACxC,QAASV,EAAI,EAAGA,EAAIU,EAAW,OAAQ,EAAEV,EAAG,CAC1C,IAAMW,EAAID,EAAW,WAAWV,CAAC,EACjC,GACE,EAEIW,IAAM,GACLA,GAAK,IAAQA,GAAK,KAClBA,GAAK,KAAQA,GAAK,KAIvB,MAAO,EAEX,CACA,MAAO,EACT,CAMA,IAAMC,GAAoBhC,GAM1B,SAASgB,GAAoBiB,EAAgB,CAG3C,OACEA,EAAe,CAAC,IAAM,KACtBA,EAAe,CAAC,IAAM,KACtBA,EAAeA,EAAe,OAAS,CAAC,IAAM,KAC9CA,EAAeA,EAAe,OAAS,CAAC,IAAM,KAC9CA,EAAe,SAAS;AAAA,CAAI,GAC5BA,EAAe,SAAS,IAAI,GAC5BA,EAAe,SAAS,IAAI,KACxB,EACR,CAMA,SAASC,GAAqBC,EAAgB,CAE5C,IAAMC,GAAgBD,EAAe,YAAY,IAAI,kBAAmB,EAAI,GAAK,IAAI,MAAM,GAAG,EAG1FE,EAAS,GAQb,GAAID,EAAa,OAGf,QAAShB,EAAIgB,EAAa,OAAQhB,IAAM,EAAGA,IAAK,CAC9C,IAAMkB,EAAQF,EAAahB,EAAI,CAAC,EAAE,KAAK,EACvC,GAAI7B,GAAqB,IAAI+C,CAAK,EAAG,CACnCD,EAASC,EACT,KACF,CACF,CAIF,OAAOD,CACT,CAUA,SAASE,GAAoCf,EAASW,EAAgB,CAGpE,IAAME,EAASH,GAAoBC,CAAc,EAG7CE,IAAW,KACbb,EAAQ,eAAiBa,EAE7B,CAGA,SAASG,IAAkC,CAEzC,MAAO,SACT,CAGA,SAASC,IAAa,CAEpB,MAAO,SACT,CAGA,SAASC,IAAY,CAEnB,MAAO,SACT,CAEA,SAASC,GAAqBC,EAAa,CAUzC,IAAIC,EAAS,KAGbA,EAASD,EAAY,KAGrBA,EAAY,YAAY,IAAI,iBAAkBC,EAAQ,EAAI,CAO5D,CAGA,SAASC,GAA2BtB,EAAS,CAI3C,IAAIuB,EAAmBvB,EAAQ,OAQ/B,GAAI,EAAAuB,IAAqB,UAAYA,IAAqB,SAO1D,GAAIvB,EAAQ,mBAAqB,QAAUA,EAAQ,OAAS,YAC1DA,EAAQ,YAAY,OAAO,SAAUuB,EAAkB,EAAI,UAClDvB,EAAQ,SAAW,OAASA,EAAQ,SAAW,OAAQ,CAEhE,OAAQA,EAAQ,eAAgB,CAC9B,IAAK,cAEHuB,EAAmB,KACnB,MACF,IAAK,6BACL,IAAK,gBACL,IAAK,kCAICvB,EAAQ,QAAUwB,GAAkBxB,EAAQ,MAAM,GAAK,CAACwB,GAAkBzB,GAAkBC,CAAO,CAAC,IACtGuB,EAAmB,MAErB,MACF,IAAK,cAGEE,GAAWzB,EAASD,GAAkBC,CAAO,CAAC,IACjDuB,EAAmB,MAErB,MACF,QAEF,CAGAvB,EAAQ,YAAY,OAAO,SAAUuB,EAAkB,EAAI,CAC7D,EACF,CAGA,SAASG,GAAaC,EAAWC,EAA+B,CAE9D,OAAOD,CACT,CAGA,SAASE,GAAqCC,EAAsBC,EAAkBH,EAA+B,CACnH,MAAI,CAACE,GAAsB,WAAaA,EAAqB,UAAYC,EAChE,CACL,sBAAuBA,EACvB,oBAAqBA,EACrB,oBAAqBA,EACrB,kBAAmBA,EACnB,0BAA2BA,EAC3B,uBAAwBD,GAAsB,sBAChD,EAGK,CACL,sBAAuBJ,GAAYI,EAAqB,sBAAuBF,CAA6B,EAC5G,oBAAqBF,GAAYI,EAAqB,oBAAqBF,CAA6B,EACxG,oBAAqBF,GAAYI,EAAqB,oBAAqBF,CAA6B,EACxG,kBAAmBF,GAAYI,EAAqB,kBAAmBF,CAA6B,EACpG,0BAA2BF,GAAYI,EAAqB,0BAA2BF,CAA6B,EACpH,uBAAwBE,EAAqB,sBAC/C,CACF,CAGA,SAASE,GAA4BJ,EAA+B,CAClE,OAAOF,GAAYpD,GAAY,IAAI,EAAGsD,CAA6B,CACrE,CAGA,SAASK,GAAwBC,EAAY,CAC3C,MAAO,CACL,UAAWA,EAAW,WAAa,EACnC,kBAAmB,EACnB,gBAAiB,EACjB,sBAAuBA,EAAW,WAAa,EAC/C,4BAA6B,EAC7B,8BAA+B,EAC/B,6BAA8B,EAC9B,QAAS,EACT,gBAAiB,EACjB,gBAAiB,EACjB,0BAA2B,IAC7B,CACF,CAGA,SAASC,IAAuB,CAE9B,MAAO,CACL,eAAgB,iCAClB,CACF,CAGA,SAASC,GAAsBC,EAAiB,CAC9C,MAAO,CACL,eAAgBA,EAAgB,cAClC,CACF,CAOA,SAASC,GAA2BtC,EAAS,CAM3C,IAAMa,EAASb,EAAQ,eAGvBtB,GAAOmC,CAAM,EAIb,IAAI0B,EAAiB,KAKrB,GAAIvC,EAAQ,WAAa,SAAU,CAIjC,IAAMwC,EAAevE,GAAgB,EAErC,GAAI,CAACuE,GAAgBA,EAAa,SAAW,OAC3C,MAAO,cAITD,EAAiB,IAAI,IAAIC,CAAY,CAEvC,MAAW5D,GAAO,GAAG,IAAIoB,EAAQ,QAAQ,IAEvCuC,EAAiBvC,EAAQ,UAK3B,IAAIyC,EAAcC,GAAoBH,CAAc,EAI9CI,EAAiBD,GAAoBH,EAAgB,EAAI,EAc/D,OAVIE,EAAY,SAAS,EAAE,OAAS,OAClCA,EAAcE,GASR9B,EAAQ,CACd,IAAK,cAEH,MAAO,cACT,IAAK,SAEH,OAAI8B,GAGGD,GAAoBH,EAAgB,EAAI,EACjD,IAAK,aAEH,OAAOE,EACT,IAAK,gBAAiB,CACpB,IAAMG,EAAa7C,GAAkBC,CAAO,EAK5C,OAAI6C,GAA4BJ,CAAW,GAAK,CAACI,GAA4BD,CAAU,EAC9E,cAGFD,CACT,CACA,IAAK,kCAAmC,CACtC,IAAMC,EAAa7C,GAAkBC,CAAO,EAI5C,OAAIyB,GAAWgB,EAAaG,CAAU,EAC7BH,EAMLI,GAA4BJ,CAAW,GAAK,CAACI,GAA4BD,CAAU,EAC9E,cAIFD,CACT,CACA,IAAK,cAGH,OAAIlB,GAAWzB,EAASyC,CAAW,EAC1BA,EAGF,cACT,IAAK,2BAGH,OAAIhB,GAAWzB,EAASyC,CAAW,EAC1BA,EAGFE,EACT,IAAK,6BAA8B,CACjC,IAAMC,EAAa7C,GAAkBC,CAAO,EAK5C,OAAI6C,GAA4BJ,CAAW,GAAK,CAACI,GAA4BD,CAAU,EAC9E,cAGFD,CACT,CACF,CACF,CAcA,SAASD,GAAqB/C,EAAKmD,EAAa,GAAO,CAQrD,OANApE,GAAOE,GAAO,GAAG,IAAIe,CAAG,CAAC,EAGzBA,EAAM,IAAI,IAAIA,CAAG,EAGboD,GAAWpD,CAAG,EACT,eAITA,EAAI,SAAW,GAGfA,EAAI,SAAW,GAGfA,EAAI,KAAO,GAGPmD,IAAe,KAEjBnD,EAAI,SAAW,GAGfA,EAAI,OAAS,IAIRA,EACT,CAEA,IAAMqD,GAAmC,IAAI,OAAO,oIAIhD,EAEEC,GAAmC,IAAI,OAAO,iGAIhD,EAQJ,SAASC,GAAkCC,EAAQ,CAEjD,OAAIA,EAAO,SAAS,GAAG,GAEjBA,EAAO,CAAC,IAAM,KAAOA,EAAOA,EAAO,OAAS,CAAC,IAAM,MACrDA,EAASA,EAAO,MAAM,EAAG,EAAE,GAEtBF,GAAiC,KAAKE,CAAM,GAI9CH,GAAiC,KAAKG,CAAM,CACrD,CAaA,SAASC,GAAgCD,EAAQ,CAE/C,OAAIA,GAAU,MAAQA,IAAW,OACxB,IAITA,EAAS,IAAI,IAAIA,CAAM,EAInB,GAAAA,EAAO,WAAa,UAAYA,EAAO,WAAa,QAMpDD,GAAiCC,EAAO,QAAQ,GAQhDA,EAAO,WAAa,aAAeA,EAAO,WAAa,cAKvDA,EAAO,SAAS,SAAS,YAAY,GAAKA,EAAO,SAAS,SAAS,aAAa,GAKhFA,EAAO,WAAa,SAY1B,CAcA,SAASN,GAA6BlD,EAAK,CAGzC,OAAKf,GAAO,GAAG,IAAIe,CAAG,EAMlBA,EAAI,OAAS,eAAiBA,EAAI,OAAS,gBAK3CA,EAAI,WAAa,SAKjBA,EAAI,WAAa,QAAgB,GAI9ByD,GAA+BzD,EAAI,MAAM,EAnBvC,EAoBX,CAOA,SAAS0D,GAAYC,EAAOC,EAAc,CAKxC,GAAIzE,KAAW,OACb,MAAO,GAIT,IAAM0E,EAAiBC,GAAcF,CAAY,EAWjD,GARIC,IAAmB,eAQnBA,EAAe,SAAW,EAC5B,MAAO,GAKT,IAAME,EAAYC,GAAqBH,CAAc,EAC/CI,EAAWC,GAA8BL,EAAgBE,CAAS,EAGxE,QAAWI,KAAQF,EAAU,CAE3B,IAAMG,EAAYD,EAAK,KAGjBE,EAAgBF,EAAK,KAMvBG,EAAcnF,GAAO,WAAWiF,CAAS,EAAE,OAAOT,CAAK,EAAE,OAAO,QAAQ,EAY5E,GAVIW,EAAYA,EAAY,OAAS,CAAC,IAAM,MACtCA,EAAYA,EAAY,OAAS,CAAC,IAAM,IAC1CA,EAAcA,EAAY,MAAM,EAAG,EAAE,EAErCA,EAAcA,EAAY,MAAM,EAAG,EAAE,GAMrCC,GAAmBD,EAAaD,CAAa,EAC/C,MAAO,EAEX,CAGA,MAAO,EACT,CAKA,IAAMG,GAAuB,oGAM7B,SAASV,GAAeG,EAAU,CAGhC,IAAMQ,EAAS,CAAC,EAGZC,EAAQ,GAGZ,QAAWvD,KAAS8C,EAAS,MAAM,GAAG,EAAG,CAEvCS,EAAQ,GAGR,IAAMC,EAAcH,GAAqB,KAAKrD,CAAK,EAGnD,GACEwD,IAAgB,MAChBA,EAAY,SAAW,QACvBA,EAAY,OAAO,OAAS,OAM5B,SAIF,IAAMP,EAAYO,EAAY,OAAO,KAAK,YAAY,EAIlDzF,GAAgB,SAASkF,CAAS,GACpCK,EAAO,KAAKE,EAAY,MAAM,CAElC,CAGA,OAAID,IAAU,GACL,cAGFD,CACT,CAKA,SAAST,GAAsBJ,EAAc,CAG3C,IAAIQ,EAAYR,EAAa,CAAC,EAAE,KAGhC,GAAIQ,EAAU,CAAC,IAAM,IACnB,OAAOA,EAGT,QAASnE,EAAI,EAAGA,EAAI2D,EAAa,OAAQ,EAAE3D,EAAG,CAC5C,IAAMgE,EAAWL,EAAa3D,CAAC,EAG/B,GAAIgE,EAAS,KAAK,CAAC,IAAM,IAAK,CAC5BG,EAAY,SACZ,KAEF,KAAO,IAAIA,EAAU,CAAC,IAAM,IAC1B,SAGSH,EAAS,KAAK,CAAC,IAAM,MAC9BG,EAAY,UAEhB,CACA,OAAOA,CACT,CAEA,SAASF,GAA+BN,EAAcQ,EAAW,CAC/D,GAAIR,EAAa,SAAW,EAC1B,OAAOA,EAGT,IAAIgB,EAAM,EACV,QAAS3E,EAAI,EAAGA,EAAI2D,EAAa,OAAQ,EAAE3D,EACrC2D,EAAa3D,CAAC,EAAE,OAASmE,IAC3BR,EAAagB,GAAK,EAAIhB,EAAa3D,CAAC,GAIxC,OAAA2D,EAAa,OAASgB,EAEfhB,CACT,CAUA,SAASW,GAAoBD,EAAaD,EAAe,CACvD,GAAIC,EAAY,SAAWD,EAAc,OACvC,MAAO,GAET,QAASpE,EAAI,EAAGA,EAAIqE,EAAY,OAAQ,EAAErE,EACxC,GAAIqE,EAAYrE,CAAC,IAAMoE,EAAcpE,CAAC,EAAG,CACvC,GACGqE,EAAYrE,CAAC,IAAM,KAAOoE,EAAcpE,CAAC,IAAM,KAC/CqE,EAAYrE,CAAC,IAAM,KAAOoE,EAAcpE,CAAC,IAAM,IAEhD,SAEF,MAAO,EACT,CAGF,MAAO,EACT,CAGA,SAAS4E,GAA+CxE,EAAS,CAEjE,CAOA,SAASyB,GAAYgD,EAAGC,EAAG,CAQzB,OANID,EAAE,SAAWC,EAAE,QAAUD,EAAE,SAAW,QAMtCA,EAAE,WAAaC,EAAE,UAAYD,EAAE,WAAaC,EAAE,UAAYD,EAAE,OAASC,EAAE,IAM7E,CAEA,SAASC,IAAyB,CAChC,IAAIC,EACAC,EAMJ,MAAO,CAAE,QALO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/CH,EAAME,EACND,EAAME,CACR,CAAC,EAEiB,QAASH,EAAK,OAAQC,CAAI,CAC9C,CAEA,SAASG,GAAWC,EAAa,CAC/B,OAAOA,EAAY,WAAW,QAAU,SAC1C,CAEA,SAASC,GAAaD,EAAa,CACjC,OAAOA,EAAY,WAAW,QAAU,WACtCA,EAAY,WAAW,QAAU,YACrC,CAMA,SAASE,GAAiBC,EAAQ,CAChC,OAAO3G,GAA4B2G,EAAO,YAAY,CAAC,GAAKA,CAC9D,CAGA,SAASC,GAAsCvF,EAAO,CAEpD,IAAMsE,EAAS,KAAK,UAAUtE,CAAK,EAGnC,GAAIsE,IAAW,OACb,MAAM,IAAI,UAAU,gCAAgC,EAItD,OAAA1F,GAAO,OAAO0F,GAAW,QAAQ,EAG1BA,CACT,CAGA,IAAMkB,GAAsB,OAAO,eAAe,OAAO,eAAe,CAAC,EAAE,OAAO,QAAQ,EAAE,CAAC,CAAC,EAS9F,SAASC,GAAgBC,EAAMC,EAAmBC,EAAW,EAAGC,EAAa,EAAG,CAC9E,MAAMC,CAAqB,CAEzBC,GAEAC,GAEAC,GAOA,YAAaC,EAAQC,EAAM,CACzB,KAAKJ,GAAUG,EACf,KAAKF,GAAQG,EACb,KAAKF,GAAS,CAChB,CAEA,MAAQ,CAQN,GAAI,OAAO,MAAS,UAAY,OAAS,MAAQ,EAAEF,MAAW,MAC5D,MAAM,IAAI,UACR,gEAAgEL,CAAI,YACtE,EAMF,IAAMU,EAAQ,KAAKH,GACbI,EAASV,EAAkB,KAAKI,EAAO,EAGvCO,EAAMD,EAAO,OAInB,GAAID,GAASE,EACX,MAAO,CACL,MAAO,OACP,KAAM,EACR,EAIF,GAAM,CAAE,CAACV,CAAQ,EAAGW,EAAK,CAACV,CAAU,EAAG7F,CAAM,EAAIqG,EAAOD,CAAK,EAG7D,KAAKH,GAASG,EAAQ,EAOtB,IAAI9B,EACJ,OAAQ,KAAK0B,GAAO,CAClB,IAAK,MAKH1B,EAASiC,EACT,MACF,IAAK,QAKHjC,EAAStE,EACT,MACF,IAAK,YAWHsE,EAAS,CAACiC,EAAKvG,CAAK,EACpB,KACJ,CAGA,MAAO,CACL,MAAOsE,EACP,KAAM,EACR,CACF,CACF,CAIA,cAAOwB,EAAqB,UAAU,YAEtC,OAAO,eAAeA,EAAqB,UAAWN,EAAmB,EAEzE,OAAO,iBAAiBM,EAAqB,UAAW,CACtD,CAAC,OAAO,WAAW,EAAG,CACpB,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAO,GAAGJ,CAAI,WAChB,EACA,KAAM,CAAE,SAAU,GAAM,WAAY,GAAM,aAAc,EAAK,CAC/D,CAAC,EAOM,SAAUQ,EAAQC,EAAM,CAC7B,OAAO,IAAIL,EAAqBI,EAAQC,CAAI,CAC9C,CACF,CAUA,SAASK,GAAed,EAAMpF,EAAQqF,EAAmBC,EAAW,EAAGC,EAAa,EAAG,CACrF,IAAMY,EAAehB,GAAeC,EAAMC,EAAmBC,EAAUC,CAAU,EAE3Ea,EAAa,CACjB,KAAM,CACJ,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAO,UAAiB,CACtB,OAAA5H,GAAO,WAAW,KAAMwB,CAAM,EACvBmG,EAAa,KAAM,KAAK,CACjC,CACF,EACA,OAAQ,CACN,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAO,UAAmB,CACxB,OAAA3H,GAAO,WAAW,KAAMwB,CAAM,EACvBmG,EAAa,KAAM,OAAO,CACnC,CACF,EACA,QAAS,CACP,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAO,UAAoB,CACzB,OAAA3H,GAAO,WAAW,KAAMwB,CAAM,EACvBmG,EAAa,KAAM,WAAW,CACvC,CACF,EACA,QAAS,CACP,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAO,SAAkBE,EAAYC,EAAU,WAAY,CAGzD,GAFA9H,GAAO,WAAW,KAAMwB,CAAM,EAC9BxB,GAAO,oBAAoB,UAAW,EAAG,GAAG4G,CAAI,UAAU,EACtD,OAAOiB,GAAe,WACxB,MAAM,IAAI,UACR,mCAAmCjB,CAAI,2CACzC,EAEF,OAAW,CAAE,EAAGa,EAAK,EAAGvG,CAAM,IAAKyG,EAAa,KAAM,WAAW,EAC/DE,EAAW,KAAKC,EAAS5G,EAAOuG,EAAK,IAAI,CAE7C,CACF,CACF,EAEA,OAAO,OAAO,iBAAiBjG,EAAO,UAAW,CAC/C,GAAGoG,EACH,CAAC,OAAO,QAAQ,EAAG,CACjB,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAOA,EAAW,QAAQ,KAC5B,CACF,CAAC,CACH,CAKA,SAASG,GAAeC,EAAMC,EAAaC,EAAkB,CAM3D,IAAMC,EAAeF,EAIfG,EAAaF,EAKfG,EAEJ,GAAI,CACFA,EAASL,EAAK,OAAO,UAAU,CACjC,OAASM,EAAG,CACVF,EAAWE,CAAC,EACZ,MACF,CAGAC,GAAaF,EAAQF,EAAcC,CAAU,CAC/C,CAKA,SAASI,GAAqBC,EAAY,CACxC,GAAI,CACFA,EAAW,MAAM,EACjBA,EAAW,aAAa,QAAQ,CAAC,CACnC,OAASC,EAAK,CAEZ,GAAI,CAACA,EAAI,QAAQ,SAAS,8BAA8B,GAAK,CAACA,EAAI,QAAQ,SAAS,kCAAkC,EACnH,MAAMA,CAEV,CACF,CAEA,IAAMC,GAAoC,eAM1C,SAASC,GAAkBC,EAAO,CAEhC,OAAA/I,GAAO,CAAC6I,GAAkC,KAAKE,CAAK,CAAC,EAK9CA,CACT,CASA,eAAeN,GAAcF,EAAQF,EAAcW,EAAc,CAC/D,IAAMpE,EAAQ,CAAC,EACXqE,EAAa,EAEjB,GAAI,CACF,EAAG,CACD,GAAM,CAAE,KAAAC,EAAM,MAAOC,CAAM,EAAI,MAAMZ,EAAO,KAAK,EAEjD,GAAIW,EAAM,CAERb,EAAa,OAAO,OAAOzD,EAAOqE,CAAU,CAAC,EAC7C,MACF,CAIA,GAAI,CAAChJ,GAAakJ,CAAK,EAAG,CACxBH,EAAa,UAAU,+BAA+B,CAAC,EACvD,MACF,CAGApE,EAAM,KAAKuE,CAAK,EAChBF,GAAcE,EAAM,MAGtB,OAAS,GACX,OAASX,EAAG,CAEVQ,EAAaR,CAAC,CAChB,CACF,CAOA,SAASnE,GAAYpD,EAAK,CACxBjB,GAAO,aAAciB,CAAG,EAExB,IAAMmI,EAAWnI,EAAI,SAIrB,OAAOmI,IAAa,UAAYA,IAAa,SAAWA,IAAa,OACvE,CAMA,SAAStG,GAAmB7B,EAAK,CAC/B,OAEI,OAAOA,GAAQ,UACfA,EAAI,CAAC,IAAM,KACXA,EAAI,CAAC,IAAM,KACXA,EAAI,CAAC,IAAM,KACXA,EAAI,CAAC,IAAM,KACXA,EAAI,CAAC,IAAM,KACXA,EAAI,CAAC,IAAM,KAEbA,EAAI,WAAa,QAErB,CAMA,SAASO,GAAsBP,EAAK,CAClCjB,GAAO,aAAciB,CAAG,EAExB,IAAMmI,EAAWnI,EAAI,SAErB,OAAOmI,IAAa,SAAWA,IAAa,QAC9C,CAOA,SAASC,GAAwBjI,EAAOkI,EAAiB,CAIvD,IAAMC,EAAOnI,EAGb,GAAI,CAACmI,EAAK,WAAW,OAAO,EAC1B,MAAO,UAIT,IAAMC,EAAW,CAAE,SAAU,CAAE,EAa/B,GATIF,GACF9J,GACGiK,GAASA,IAAS,KAAQA,IAAS,IACpCF,EACAC,CACF,EAIED,EAAK,WAAWC,EAAS,QAAQ,IAAM,GACzC,MAAO,UAITA,EAAS,WAILF,GACF9J,GACGiK,GAASA,IAAS,KAAQA,IAAS,IACpCF,EACAC,CACF,EAKF,IAAME,EAAalK,GAChBiK,GAAS,CACR,IAAMtI,EAAOsI,EAAK,WAAW,CAAC,EAE9B,OAAOtI,GAAQ,IAAQA,GAAQ,EACjC,EACAoI,EACAC,CACF,EAIMG,EAAkBD,EAAW,OAAS,OAAOA,CAAU,EAAI,KAajE,GATIJ,GACF9J,GACGiK,GAASA,IAAS,KAAQA,IAAS,IACpCF,EACAC,CACF,EAIED,EAAK,WAAWC,EAAS,QAAQ,IAAM,GACzC,MAAO,UAITA,EAAS,WAKLF,GACF9J,GACGiK,GAASA,IAAS,KAAQA,IAAS,IACpCF,EACAC,CACF,EAMF,IAAMI,EAAWpK,GACdiK,GAAS,CACR,IAAMtI,EAAOsI,EAAK,WAAW,CAAC,EAE9B,OAAOtI,GAAQ,IAAQA,GAAQ,EACjC,EACAoI,EACAC,CACF,EAMMK,EAAgBD,EAAS,OAAS,OAAOA,CAAQ,EAAI,KAe3D,OAZIJ,EAAS,SAAWD,EAAK,QAKzBM,IAAkB,MAAQF,IAAoB,MAO9CA,EAAkBE,EACb,UAIF,CAAE,gBAAAF,EAAiB,cAAAE,CAAc,CAC1C,CAQA,SAASC,GAAmBJ,EAAYE,EAAUG,EAAY,CAE5D,IAAIC,EAAe,SAGnB,OAAAA,GAAgBlB,GAAiB,GAAGY,CAAU,EAAE,EAGhDM,GAAgB,IAGhBA,GAAgBlB,GAAiB,GAAGc,CAAQ,EAAE,EAG9CI,GAAgB,IAGhBA,GAAgBlB,GAAiB,GAAGiB,CAAU,EAAE,EAGzCC,CACT,CAOA,IAAMC,GAAN,cAA4B/K,EAAU,CACpCgL,GAGA,YAAaC,EAAa,CACxB,MAAM,EACN,KAAKD,GAAeC,CACtB,CAEA,WAAYhB,EAAOiB,EAAUC,EAAU,CACrC,GAAI,CAAC,KAAK,eAAgB,CACxB,GAAIlB,EAAM,SAAW,EAAG,CACtBkB,EAAS,EACT,MACF,CACA,KAAK,gBAAkBlB,EAAM,CAAC,EAAI,MAAU,EACxChK,GAAK,cAAc,KAAK+K,EAAY,EACpC/K,GAAK,iBAAiB,KAAK+K,EAAY,EAE3C,KAAK,eAAe,GAAG,OAAQ,KAAK,KAAK,KAAK,IAAI,CAAC,EACnD,KAAK,eAAe,GAAG,MAAO,IAAM,KAAK,KAAK,IAAI,CAAC,EACnD,KAAK,eAAe,GAAG,QAAUtB,GAAQ,KAAK,QAAQA,CAAG,CAAC,CAC5D,CAEA,KAAK,eAAe,MAAMO,EAAOiB,EAAUC,CAAQ,CACrD,CAEA,OAAQA,EAAU,CACZ,KAAK,iBACP,KAAK,eAAe,IAAI,EACxB,KAAK,eAAiB,MAExBA,EAAS,CACX,CACF,EAMA,SAASC,GAAeH,EAAa,CACnC,OAAO,IAAIF,GAAcE,CAAW,CACtC,CAMA,SAASI,GAAiBC,EAAS,CAEjC,IAAIC,EAAU,KAGVC,EAAU,KAGVC,EAAW,KAGTlD,EAASmD,GAAe,eAAgBJ,CAAO,EAGrD,GAAI/C,IAAW,KACb,MAAO,UAIT,QAAWrG,KAASqG,EAAQ,CAE1B,IAAMoD,EAAoBlL,GAAcyB,CAAK,EAGzCyJ,IAAsB,WAAaA,EAAkB,UAAY,QAKrEF,EAAWE,EAGPF,EAAS,UAAYD,GAEvBD,EAAU,KAINE,EAAS,WAAW,IAAI,SAAS,IACnCF,EAAUE,EAAS,WAAW,IAAI,SAAS,GAI7CD,EAAUC,EAAS,SACV,CAACA,EAAS,WAAW,IAAI,SAAS,GAAKF,IAAY,MAG5DE,EAAS,WAAW,IAAI,UAAWF,CAAO,EAE9C,CAGA,OAAIE,GACK,SAKX,CAMA,SAASG,GAA0B1J,EAAO,CAExC,IAAM2H,EAAQ3H,EAGRoI,EAAW,CAAE,SAAU,CAAE,EAGzB/B,EAAS,CAAC,EAGZsD,EAAiB,GAGrB,KAAOvB,EAAS,SAAWT,EAAM,QAAQ,CAUvC,GAPAgC,GAAkBvL,GACfiK,GAASA,IAAS,KAAOA,IAAS,IACnCV,EACAS,CACF,EAGIA,EAAS,SAAWT,EAAM,OAE5B,GAAIA,EAAM,WAAWS,EAAS,QAAQ,IAAM,IAQ1C,GANAuB,GAAkBtL,GAChBsJ,EACAS,CACF,EAGIA,EAAS,SAAWT,EAAM,OAC5B,cAMF/I,GAAO+I,EAAM,WAAWS,EAAS,QAAQ,IAAM,EAAI,EAGnDA,EAAS,WAKbuB,EAAiBrL,GAAYqL,EAAgB,GAAM,GAAOtB,GAASA,IAAS,GAAOA,IAAS,EAAI,EAGhGhC,EAAO,KAAKsD,CAAc,EAG1BA,EAAiB,EACnB,CAGA,OAAOtD,CACT,CAOA,SAASmD,GAAgB9D,EAAMkE,EAAM,CAEnC,IAAM5J,EAAQ4J,EAAK,IAAIlE,EAAM,EAAI,EAGjC,OAAI1F,IAAU,KACL,KAIF0J,GAAyB1J,CAAK,CACvC,CAEA,IAAM6J,GAAc,IAAI,YAMxB,SAASC,GAAiBC,EAAQ,CAChC,OAAIA,EAAO,SAAW,EACb,IAQLA,EAAO,CAAC,IAAM,KAAQA,EAAO,CAAC,IAAM,KAAQA,EAAO,CAAC,IAAM,MAC5DA,EAASA,EAAO,SAAS,CAAC,GAKbF,GAAY,OAAOE,CAAM,EAI1C,CAEA,IAAMC,GAAN,KAAoC,CAClC,IAAI,SAAW,CACb,OAAO7L,GAAgB,CACzB,CAEA,IAAI,QAAU,CACZ,OAAO,KAAK,SAAS,MACvB,CAEA,gBAAkBkE,GAAoB,CACxC,EAEM4H,GAAN,KAAgC,CAC9B,eAAiB,IAAID,EACvB,EAEME,GAA4B,IAAID,GAEtCpM,GAAO,QAAU,CACf,UAAAqH,GACA,YAAAE,GACA,kBAAAzF,GACA,sBAAAkF,GACA,mBAAApG,GACA,8CAAAiG,GACA,oCAAA3C,GACA,2BAAAG,GACA,0BAAAM,GACA,oBAAAH,GACA,qBAAAC,GACA,oBAAAjB,GACA,0BAAAG,GACA,SAAAJ,GACA,UAAAD,GACA,+BAAAD,GACA,uBAAAiB,GACA,mCAAAlB,GACA,iBAAAvC,GACA,eAAAyB,GACA,kBAAAF,GACA,YAAAd,GACA,oBAAAI,GACA,4BAAAwD,GACA,oBAAAxC,GACA,WAAAoB,GACA,gBAAA0D,GACA,qCAAAE,GACA,cAAAiB,GACA,eAAAf,GACA,kBAAA/E,GACA,mBAAAhB,GACA,YAAAW,GACA,cAAAwG,GACA,WAAAtD,GACA,oBAAA+D,GACA,iBAAAI,GACA,WAAAzE,GACA,kBAAAvB,GACA,qBAAAtB,GACA,aAAAiH,GACA,uBAAAY,GACA,kBAAAS,GACA,cAAA/E,GACA,cAAAuF,GACA,gBAAAC,GACA,eAAAK,GACA,gBAAAM,GACA,0BAAAI,GACA,iCAAA9G,EACF,ICrvDA,IAAA+G,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,KAAMC,EAAW,EAAI,EAAQ,aAAa,EAC5CC,GAAW,EAAQ,WAAW,EAG9BC,GAAO,WAAW,MAAQF,GAG1BG,GAAN,MAAMC,CAAS,CACbC,GAAS,CAAC,EAEV,YAAaC,EAAM,CAGjB,GAFAP,EAAO,KAAK,kBAAkB,IAAI,EAE9BO,IAAS,OACX,MAAMP,EAAO,OAAO,iBAAiB,CACnC,OAAQ,uBACR,SAAU,aACV,MAAO,CAAC,WAAW,CACrB,CAAC,CAEL,CAEA,OAAQQ,EAAMC,EAAOC,EAAW,OAAW,CACzCV,EAAO,WAAW,KAAMK,CAAQ,EAEhC,IAAMM,EAAS,kBACfX,EAAO,oBAAoB,UAAW,EAAGW,CAAM,EAE/CH,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAEnC,UAAU,SAAW,GAAKR,EAAO,GAAG,KAAKS,CAAK,GAChDA,EAAQT,EAAO,WAAW,KAAKS,EAAOE,EAAQ,OAAO,EAEjDD,IAAa,SACfA,EAAWV,EAAO,WAAW,UAAUU,CAAQ,IAGjDD,EAAQT,EAAO,WAAW,UAAUS,CAAK,EAO3C,IAAMG,EAAQC,GAAUL,EAAMC,EAAOC,CAAQ,EAG7C,KAAKJ,GAAO,KAAKM,CAAK,CACxB,CAEA,OAAQJ,EAAM,CACZR,EAAO,WAAW,KAAMK,CAAQ,EAGhCL,EAAO,oBAAoB,UAAW,EADvB,iBACgC,EAE/CQ,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAIvC,KAAKF,GAAS,KAAKA,GAAO,OAAOM,GAASA,EAAM,OAASJ,CAAI,CAC/D,CAEA,IAAKA,EAAM,CACTR,EAAO,WAAW,KAAMK,CAAQ,EAGhCL,EAAO,oBAAoB,UAAW,EADvB,cACgC,EAE/CQ,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAIvC,IAAMM,EAAM,KAAKR,GAAO,UAAWM,GAAUA,EAAM,OAASJ,CAAI,EAChE,OAAIM,IAAQ,GACH,KAKF,KAAKR,GAAOQ,CAAG,EAAE,KAC1B,CAEA,OAAQN,EAAM,CACZ,OAAAR,EAAO,WAAW,KAAMK,CAAQ,EAGhCL,EAAO,oBAAoB,UAAW,EADvB,iBACgC,EAE/CQ,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAMhC,KAAKF,GACT,OAAQM,GAAUA,EAAM,OAASJ,CAAI,EACrC,IAAKI,GAAUA,EAAM,KAAK,CAC/B,CAEA,IAAKJ,EAAM,CACT,OAAAR,EAAO,WAAW,KAAMK,CAAQ,EAGhCL,EAAO,oBAAoB,UAAW,EADvB,cACgC,EAE/CQ,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAIhC,KAAKF,GAAO,UAAWM,GAAUA,EAAM,OAASJ,CAAI,IAAM,EACnE,CAEA,IAAKA,EAAMC,EAAOC,EAAW,OAAW,CACtCV,EAAO,WAAW,KAAMK,CAAQ,EAEhC,IAAMM,EAAS,eACfX,EAAO,oBAAoB,UAAW,EAAGW,CAAM,EAE/CH,EAAOR,EAAO,WAAW,UAAUQ,CAAI,EAEnC,UAAU,SAAW,GAAKR,EAAO,GAAG,KAAKS,CAAK,GAChDA,EAAQT,EAAO,WAAW,KAAKS,EAAOE,EAAQ,OAAO,EAEjDD,IAAa,SACfA,EAAWV,EAAO,WAAW,UAAUU,CAAQ,IAGjDD,EAAQT,EAAO,WAAW,UAAUS,CAAK,EAU3C,IAAMG,EAAQC,GAAUL,EAAMC,EAAOC,CAAQ,EAIvCI,EAAM,KAAKR,GAAO,UAAWM,GAAUA,EAAM,OAASJ,CAAI,EAC5DM,IAAQ,GACV,KAAKR,GAAS,CACZ,GAAG,KAAKA,GAAO,MAAM,EAAGQ,CAAG,EAC3BF,EACA,GAAG,KAAKN,GAAO,MAAMQ,EAAM,CAAC,EAAE,OAAQF,GAAUA,EAAM,OAASJ,CAAI,CACrE,EAGA,KAAKF,GAAO,KAAKM,CAAK,CAE1B,CAEA,CAACV,GAAS,QAAQ,MAAM,EAAGa,EAAOC,EAAS,CACzC,IAAMC,EAAQ,KAAKX,GAAO,OAAO,CAACY,EAAGC,KAC/BD,EAAEC,EAAE,IAAI,EACN,MAAM,QAAQD,EAAEC,EAAE,IAAI,CAAC,EACzBD,EAAEC,EAAE,IAAI,EAAE,KAAKA,EAAE,KAAK,EAEtBD,EAAEC,EAAE,IAAI,EAAI,CAACD,EAAEC,EAAE,IAAI,EAAGA,EAAE,KAAK,EAGjCD,EAAEC,EAAE,IAAI,EAAIA,EAAE,MAGTD,GACN,CAAE,UAAW,IAAK,CAAC,EAEtBF,EAAQ,QAAUD,EAClBC,EAAQ,SAAW,GAEnB,IAAMI,EAASlB,GAAS,kBAAkBc,EAASC,CAAK,EAGxD,MAAO,YAAYG,EAAO,MAAMA,EAAO,QAAQ,GAAG,EAAI,CAAC,CAAC,EAC1D,CAKA,OAAO,iBAAkBC,EAAU,CACjC,OAAOA,EAASf,EAClB,CAMA,OAAO,iBAAkBe,EAAUC,EAAU,CAC3CD,EAASf,GAASgB,CACpB,CACF,EAEM,CAAE,iBAAAC,GAAkB,iBAAAC,EAAiB,EAAIpB,GAC/C,QAAQ,eAAeA,GAAU,kBAAkB,EACnD,QAAQ,eAAeA,GAAU,kBAAkB,EAEnDN,GAAc,WAAYM,GAAUmB,GAAkB,OAAQ,OAAO,EAErE,OAAO,iBAAiBnB,GAAS,UAAW,CAC1C,OAAQL,GACR,OAAQA,GACR,IAAKA,GACL,OAAQA,GACR,IAAKA,GACL,IAAKA,GACL,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,WACP,aAAc,EAChB,CACF,CAAC,EASD,SAASc,GAAWL,EAAMC,EAAOC,EAAU,CAMzC,GAAI,OAAOD,GAAU,UAanB,GANKT,EAAO,GAAG,KAAKS,CAAK,IACvBA,EAAQ,IAAIN,GAAK,CAACM,CAAK,EAAG,OAAQ,CAAE,KAAMA,EAAM,IAAK,CAAC,GAKpDC,IAAa,OAAW,CAE1B,IAAMM,EAAU,CACd,KAAMP,EAAM,KACZ,aAAcA,EAAM,YACtB,EAEAA,EAAQ,IAAIN,GAAK,CAACM,CAAK,EAAGC,EAAUM,CAAO,CAC7C,EAIF,MAAO,CAAE,KAAAR,EAAM,MAAAC,CAAM,CACvB,CAEAT,EAAO,GAAG,SAAWA,EAAO,KAAK,kBAAkBI,EAAQ,EAE3DP,GAAO,QAAU,CAAE,SAAAO,GAAU,UAAAS,GAAW,iBAAAW,EAAiB,ICtQzD,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,YAAAC,GAAa,6BAAAC,EAA6B,EAAI,IAChD,CAAE,gBAAAC,EAAgB,EAAI,KACtB,CAAE,sBAAAC,GAAuB,iBAAAC,EAAiB,EAAI,KAC9C,CAAE,UAAAC,EAAU,EAAI,KAChB,CAAE,OAAAC,EAAO,EAAI,KACbC,GAAS,EAAQ,aAAa,EAC9B,CAAE,KAAMC,EAAS,EAAI,EAAQ,aAAa,EAE1CC,GAAO,WAAW,MAAQD,GAE1BE,GAAqB,OAAO,KAAK,mBAAmB,EACpDC,GAAiB,OAAO,KAAK,UAAU,EACvCC,GAAK,OAAO,KAAK,IAAI,EACrBC,GAAS,OAAO,KAAK;AAAA,CAAQ,EAKnC,SAASC,GAAeC,EAAO,CAC7B,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQ,EAAEC,EAClC,IAAKD,EAAM,WAAWC,CAAC,EAAI,QAAW,EACpC,MAAO,GAGX,MAAO,EACT,CAMA,SAASC,GAAkBC,EAAU,CACnC,IAAMC,EAASD,EAAS,OAGxB,GAAIC,EAAS,IAAMA,EAAS,GAC1B,MAAO,GAMT,QAASH,EAAI,EAAGA,EAAIG,EAAQ,EAAEH,EAAG,CAC/B,IAAMI,EAAKF,EAAS,WAAWF,CAAC,EAEhC,GAAI,EACDI,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,KACrBA,IAAO,IACPA,IAAO,IACPA,IAAO,IAEP,MAAO,EAEX,CAEA,MAAO,EACT,CAOA,SAASC,GAAyBC,EAAOC,EAAU,CAEjDhB,GAAOgB,IAAa,WAAaA,EAAS,UAAY,qBAAqB,EAE3E,IAAMC,EAAiBD,EAAS,WAAW,IAAI,UAAU,EAKzD,GAAIC,IAAmB,OACrB,MAAMC,GAAa,yCAAyC,EAG9D,IAAMP,EAAW,OAAO,KAAK,KAAKM,CAAc,GAAI,MAAM,EAGpDE,EAAY,CAAC,EAIbC,EAAW,CAAE,SAAU,CAAE,EAG/B,KAAOL,EAAMK,EAAS,QAAQ,IAAM,IAAQL,EAAMK,EAAS,SAAW,CAAC,IAAM,IAC3EA,EAAS,UAAY,EAGvB,IAAIC,EAAWN,EAAM,OAErB,KAAOA,EAAMM,EAAW,CAAC,IAAM,IAAQN,EAAMM,EAAW,CAAC,IAAM,IAC7DA,GAAY,EAQd,IALIA,IAAaN,EAAM,SACrBA,EAAQA,EAAM,SAAS,EAAGM,CAAQ,KAIvB,CAKX,GAAIN,EAAM,SAASK,EAAS,SAAUA,EAAS,SAAWT,EAAS,MAAM,EAAE,OAAOA,CAAQ,EACxFS,EAAS,UAAYT,EAAS,WAE9B,OAAMO,GAAa,oDAAoD,EAMzE,GACGE,EAAS,WAAaL,EAAM,OAAS,GAAKO,GAAiBP,EAAOV,GAAIe,CAAQ,GAC9EA,EAAS,WAAaL,EAAM,OAAS,GAAKO,GAAiBP,EAAOT,GAAQc,CAAQ,EAEnF,OAAOD,EAKT,GAAIJ,EAAMK,EAAS,QAAQ,IAAM,IAAQL,EAAMK,EAAS,SAAW,CAAC,IAAM,GACxE,MAAMF,GAAa,eAAe,EAIpCE,EAAS,UAAY,EAKrB,IAAMG,EAASC,GAA8BT,EAAOK,CAAQ,EAExD,CAAE,KAAAK,EAAM,SAAAC,EAAU,YAAAC,EAAa,SAAAC,CAAS,EAAIL,EAIhDH,EAAS,UAAY,EAGrB,IAAIS,EAIJ,CACE,IAAMC,EAAgBf,EAAM,QAAQJ,EAAS,SAAS,CAAC,EAAGS,EAAS,QAAQ,EAE3E,GAAIU,IAAkB,GACpB,MAAMZ,GAAa,8BAA8B,EAGnDW,EAAOd,EAAM,SAASK,EAAS,SAAUU,EAAgB,CAAC,EAE1DV,EAAS,UAAYS,EAAK,OAItBD,IAAa,WACfC,EAAO,OAAO,KAAKA,EAAK,SAAS,EAAG,QAAQ,EAEhD,CAIA,GAAId,EAAMK,EAAS,QAAQ,IAAM,IAAQL,EAAMK,EAAS,SAAW,CAAC,IAAM,GACxE,MAAMF,GAAa,eAAe,EAElCE,EAAS,UAAY,EAIvB,IAAIW,EAEAL,IAAa,MAEfC,IAAgB,aAMXpB,GAAcoB,CAAW,IAC5BA,EAAc,IAIhBI,EAAQ,IAAI7B,GAAK,CAAC2B,CAAI,EAAGH,EAAU,CAAE,KAAMC,CAAY,CAAC,GAKxDI,EAAQpC,GAAgB,OAAO,KAAKkC,CAAI,CAAC,EAI3C7B,GAAOP,GAAYgC,CAAI,CAAC,EACxBzB,GAAQ,OAAO+B,GAAU,UAAYtC,GAAYsC,CAAK,GAAMhC,GAAO,GAAG,KAAKgC,CAAK,CAAC,EAGjFZ,EAAU,KAAKrB,GAAU2B,EAAMM,EAAOL,CAAQ,CAAC,CACjD,CACF,CAOA,SAASF,GAA+BT,EAAOK,EAAU,CAEvD,IAAIK,EAAO,KACPC,EAAW,KACXC,EAAc,KACdC,EAAW,KAGf,OAAa,CAEX,GAAIb,EAAMK,EAAS,QAAQ,IAAM,IAAQL,EAAMK,EAAS,SAAW,CAAC,IAAM,GAAM,CAE9E,GAAIK,IAAS,KACX,MAAMP,GAAa,qBAAqB,EAI1C,MAAO,CAAE,KAAAO,EAAM,SAAAC,EAAU,YAAAC,EAAa,SAAAC,CAAS,CACjD,CAIA,IAAII,EAAaC,GACdC,GAASA,IAAS,IAAQA,IAAS,IAAQA,IAAS,GACrDnB,EACAK,CACF,EAMA,GAHAY,EAAaG,GAAYH,EAAY,GAAM,GAAOE,GAASA,IAAS,GAAOA,IAAS,EAAI,EAGpF,CAACtC,GAAsB,KAAKoC,EAAW,SAAS,CAAC,EACnD,MAAMd,GAAa,4DAA4D,EAIjF,GAAIH,EAAMK,EAAS,QAAQ,IAAM,GAC/B,MAAMF,GAAa,YAAY,EAejC,OAXAE,EAAS,WAITa,GACGC,GAASA,IAAS,IAAQA,IAAS,EACpCnB,EACAK,CACF,EAGQ1B,GAA6BsC,CAAU,EAAG,CAChD,IAAK,sBAAuB,CAM1B,GAJAP,EAAOC,EAAW,KAId,CAACJ,GAAiBP,EAAOZ,GAAoBiB,CAAQ,EACvD,MAAMF,GAAa,2DAA2D,EAahF,GARAE,EAAS,UAAY,GAKrBK,EAAOW,GAA2BrB,EAAOK,CAAQ,EAG7CL,EAAMK,EAAS,QAAQ,IAAM,IAAgBL,EAAMK,EAAS,SAAW,CAAC,IAAM,GAAgB,CAChG,IAAMiB,EAAK,CAAE,SAAUjB,EAAS,SAAW,CAAE,EAE7C,GAAIE,GAAiBP,EAAOX,GAAgBiC,CAAE,EAC5C,GAAItB,EAAMsB,EAAG,SAAW,CAAC,IAAM,GAAgB,CAC7CA,EAAG,UAAY,GAIfJ,GACGC,GAASA,IAAS,IAAQA,IAAS,EACpCnB,EACAsB,CACF,EAEA,IAAMC,EAAcL,GACjBC,GAASA,IAAS,IAAQA,IAAS,IAAQA,IAAS,GACrDnB,EACAsB,CACF,EAEA,GACGC,EAAY,CAAC,IAAM,KAAQA,EAAY,CAAC,IAAM,IAC9CA,EAAY,CAAC,IAAM,KAAQA,EAAY,CAAC,IAAM,IAC9CA,EAAY,CAAC,IAAM,KAAQA,EAAY,CAAC,IAAM,IAC/CA,EAAY,CAAC,IAAM,IACnBA,EAAY,CAAC,IAAM,GAEnB,MAAMpB,GAAa,oCAAsC,EAI3DQ,EAAW,mBAAmB,IAAI,YAAY,EAAE,OAAOY,EAAY,SAAS,CAAC,CAAC,CAAC,EAE/ElB,EAAS,SAAWiB,EAAG,QACzB,MAGEjB,EAAS,UAAY,GAIrBa,GACGC,GAASA,IAAS,IAAQA,IAAS,EACpCnB,EACAK,CACF,EAEAA,EAAS,WAITM,EAAWU,GAA2BrB,EAAOK,CAAQ,CAG3D,CAEA,KACF,CACA,IAAK,eAAgB,CAGnB,IAAIkB,EAAcL,GACfC,GAASA,IAAS,IAAQA,IAAS,GACpCnB,EACAK,CACF,EAGAkB,EAAcH,GAAYG,EAAa,GAAO,GAAOJ,GAASA,IAAS,GAAOA,IAAS,EAAI,EAG3FP,EAAc9B,GAAiByC,CAAW,EAE1C,KACF,CACA,IAAK,4BAA6B,CAChC,IAAIA,EAAcL,GACfC,GAASA,IAAS,IAAQA,IAAS,GACpCnB,EACAK,CACF,EAEAkB,EAAcH,GAAYG,EAAa,GAAO,GAAOJ,GAASA,IAAS,GAAOA,IAAS,EAAI,EAE3FN,EAAW/B,GAAiByC,CAAW,EAEvC,KACF,CACA,QAGEL,GACGC,GAASA,IAAS,IAAQA,IAAS,GACpCnB,EACAK,CACF,CAEJ,CAIA,GAAIL,EAAMK,EAAS,QAAQ,IAAM,IAAQL,EAAMK,EAAS,SAAW,CAAC,IAAM,GACxE,MAAMF,GAAa,eAAe,EAElCE,EAAS,UAAY,CAEzB,CACF,CAOA,SAASgB,GAA4BrB,EAAOK,EAAU,CAEpDpB,GAAOe,EAAMK,EAAS,SAAW,CAAC,IAAM,EAAI,EAI5C,IAAIK,EAAOQ,GACRC,GAASA,IAAS,IAAQA,IAAS,IAAQA,IAAS,GACrDnB,EACAK,CACF,EAGA,GAAIL,EAAMK,EAAS,QAAQ,IAAM,GAC/B,MAAMF,GAAa,YAAY,EAE/B,OAAAE,EAAS,WAOXK,EAAO,IAAI,YAAY,EAAE,OAAOA,CAAI,EACjC,QAAQ,QAAS;AAAA,CAAI,EACrB,QAAQ,QAAS,IAAI,EACrB,QAAQ,OAAQ,GAAG,EAGfA,CACT,CAOA,SAASQ,GAAyBM,EAAWxB,EAAOK,EAAU,CAC5D,IAAIoB,EAAQpB,EAAS,SAErB,KAAOoB,EAAQzB,EAAM,QAAUwB,EAAUxB,EAAMyB,CAAK,CAAC,GACnD,EAAEA,EAGJ,OAAOzB,EAAM,SAASK,EAAS,SAAWA,EAAS,SAAWoB,CAAM,CACtE,CASA,SAASL,GAAaM,EAAKC,EAASrB,EAAUsB,EAAW,CACvD,IAAIC,EAAO,EACPC,EAAQJ,EAAI,OAAS,EAEzB,GAAIC,EACF,KAAOE,EAAOH,EAAI,QAAUE,EAAUF,EAAIG,CAAI,CAAC,GAAGA,IAGpD,GAAIvB,EACF,KAAOwB,EAAQ,GAAKF,EAAUF,EAAII,CAAK,CAAC,GAAGA,IAG7C,OAAOD,IAAS,GAAKC,IAAUJ,EAAI,OAAS,EAAIA,EAAMA,EAAI,SAASG,EAAMC,EAAQ,CAAC,CACpF,CAQA,SAASvB,GAAkBwB,EAAQN,EAAOpB,EAAU,CAClD,GAAI0B,EAAO,OAASN,EAAM,OACxB,MAAO,GAGT,QAAS/B,EAAI,EAAGA,EAAI+B,EAAM,OAAQ/B,IAChC,GAAI+B,EAAM/B,CAAC,IAAMqC,EAAO1B,EAAS,SAAWX,CAAC,EAC3C,MAAO,GAIX,MAAO,EACT,CAEA,SAASS,GAAc6B,EAAO,CAC5B,OAAO,IAAI,UAAU,oCAAqC,CAAE,MAAO,IAAI,UAAUA,CAAK,CAAE,CAAC,CAC3F,CAEAvD,GAAO,QAAU,CACf,wBAAAsB,GACA,iBAAAJ,EACF,ICpfA,IAAAsC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAO,IACP,CACJ,mBAAAC,GACA,oBAAAC,GACA,sBAAAC,GACA,cAAAC,GACA,gBAAAC,GACA,gBAAAC,EACF,EAAI,KACE,CAAE,SAAAC,GAAU,iBAAAC,EAAiB,EAAI,KACjC,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,KAAAC,EAAK,EAAI,EAAQ,aAAa,EAChCC,GAAS,EAAQ,aAAa,EAC9B,CAAE,UAAAC,GAAW,YAAAC,EAAY,EAAI,EAAQ,aAAa,EAClD,CAAE,cAAAC,EAAc,EAAI,EAAQ,iBAAiB,EAC7C,CAAE,mBAAAC,EAAmB,EAAI,KACzB,CAAE,wBAAAC,EAAwB,EAAI,KAChCC,GAEJ,GAAI,CACF,IAAMC,EAAS,EAAQ,aAAa,EACpCD,GAAUE,GAAQD,EAAO,UAAU,EAAGC,CAAG,CAC3C,MAAQ,CACNF,GAAUE,GAAQ,KAAK,MAAM,KAAK,OAAO,EAAIA,CAAG,CAClD,CAEA,IAAMC,GAAc,IAAI,YACxB,SAASC,IAAQ,CAAC,CAElB,IAAMC,GAA0B,WAAW,sBAAwB,QAAQ,QAAQ,QAAQ,KAAK,IAAM,EAClGC,GAEAD,KACFC,GAAiB,IAAI,qBAAsBC,GAAY,CACrD,IAAMC,EAASD,EAAQ,MAAM,EACzBC,GAAU,CAACA,EAAO,QAAU,CAACZ,GAAYY,CAAM,GAAK,CAACb,GAAUa,CAAM,GACvEA,EAAO,OAAO,4CAA4C,EAAE,MAAMJ,EAAI,CAE1E,CAAC,GAIH,SAASK,GAAaC,EAAQC,EAAY,GAAO,CAE/C,IAAIH,EAAS,KAGThB,GAAO,GAAG,eAAekB,CAAM,EACjCF,EAASE,EACAlB,GAAO,GAAG,KAAKkB,CAAM,EAG9BF,EAASE,EAAO,OAAO,EAIvBF,EAAS,IAAI,eAAe,CAC1B,MAAM,KAAMI,EAAY,CACtB,IAAMC,EAAS,OAAOC,GAAW,SAAWX,GAAY,OAAOW,CAAM,EAAIA,EAErED,EAAO,YACTD,EAAW,QAAQC,CAAM,EAG3B,eAAe,IAAM5B,GAAoB2B,CAAU,CAAC,CACtD,EACA,OAAS,CAAC,EACV,KAAM,OACR,CAAC,EAIHlB,GAAOF,GAAO,GAAG,eAAegB,CAAM,CAAC,EAGvC,IAAIO,EAAS,KAGTD,EAAS,KAGTE,EAAS,KAGTC,EAAO,KAGX,GAAI,OAAOP,GAAW,SAGpBI,EAASJ,EAGTO,EAAO,mCACEzB,GAAO,GAAG,gBAAgBkB,CAAM,EASzCI,EAASJ,EAAO,SAAS,EAGzBO,EAAO,0DACEpB,GAAca,CAAM,EAI7BI,EAAS,IAAI,WAAWJ,EAAO,MAAM,CAAC,UAC7B,YAAY,OAAOA,CAAM,EAIlCI,EAAS,IAAI,WAAWJ,EAAO,OAAO,MAAMA,EAAO,WAAYA,EAAO,WAAaA,EAAO,UAAU,CAAC,UAC5FlB,GAAO,GAAG,SAASkB,CAAM,EAAG,CACrC,IAAMQ,EAAW,wBAAwB,GAAGlB,GAAO,IAAI,CAAC,GAAG,SAAS,GAAI,GAAG,CAAC,GACtEmB,EAAS,KAAKD,CAAQ;AAAA,gCAG5B,IAAME,EAAUC,GACdA,EAAI,QAAQ,MAAO,KAAK,EAAE,QAAQ,MAAO,KAAK,EAAE,QAAQ,KAAM,KAAK,EAC/DC,EAAsBC,GAAUA,EAAM,QAAQ,YAAa;AAAA,CAAM,EAQjEC,EAAY,CAAC,EACbC,EAAK,IAAI,WAAW,CAAC,GAAI,EAAE,CAAC,EAClCT,EAAS,EACT,IAAIU,EAAsB,GAE1B,OAAW,CAACC,EAAMJ,CAAK,IAAKb,EAC1B,GAAI,OAAOa,GAAU,SAAU,CAC7B,IAAMK,EAAQzB,GAAY,OAAOgB,EAC/B,WAAWC,EAAOE,EAAmBK,CAAI,CAAC,CAAC;AAAA;AAAA,EAChCL,EAAmBC,CAAK,CAAC;AAAA,CAAM,EAC5CC,EAAU,KAAKI,CAAK,EACpBZ,GAAUY,EAAM,UAClB,KAAO,CACL,IAAMA,EAAQzB,GAAY,OAAO,GAAGgB,CAAM,WAAWC,EAAOE,EAAmBK,CAAI,CAAC,CAAC,KAClFJ,EAAM,KAAO,eAAeH,EAAOG,EAAM,IAAI,CAAC,IAAM,IAAM;AAAA,gBAEzDA,EAAM,MAAQ,0BAChB;AAAA;AAAA,CAAU,EACZC,EAAU,KAAKI,EAAOL,EAAOE,CAAE,EAC3B,OAAOF,EAAM,MAAS,SACxBP,GAAUY,EAAM,WAAaL,EAAM,KAAOE,EAAG,WAE7CC,EAAsB,EAE1B,CAMF,IAAME,EAAQzB,GAAY,OAAO,KAAKe,CAAQ;AAAA,CAAQ,EACtDM,EAAU,KAAKI,CAAK,EACpBZ,GAAUY,EAAM,WACZF,IACFV,EAAS,MAIXF,EAASJ,EAETK,EAAS,iBAAoB,CAC3B,QAAWc,KAAQL,EACbK,EAAK,OACP,MAAQA,EAAK,OAAO,EAEpB,MAAMA,CAGZ,EAKAZ,EAAO,iCAAiCC,CAAQ,EAClD,SAAW1B,GAAO,GAAG,KAAKkB,CAAM,EAI9BI,EAASJ,EAGTM,EAASN,EAAO,KAIZA,EAAO,OACTO,EAAOP,EAAO,cAEP,OAAOA,EAAO,OAAO,aAAa,GAAM,WAAY,CAE7D,GAAIC,EACF,MAAM,IAAI,UAAU,WAAW,EAIjC,GAAI5B,GAAK,YAAY2B,CAAM,GAAKA,EAAO,OACrC,MAAM,IAAI,UACR,wDACF,EAGFF,EACEhB,GAAO,GAAG,eAAekB,CAAM,EAAIA,EAAS1B,GAAmB0B,CAAM,CACzE,CASA,IALI,OAAOI,GAAW,UAAY/B,GAAK,SAAS+B,CAAM,KACpDE,EAAS,OAAO,WAAWF,CAAM,GAI/BC,GAAU,KAAM,CAElB,IAAIe,EACJtB,EAAS,IAAI,eAAe,CAC1B,MAAM,OAAS,CACbsB,EAAWf,EAAOL,CAAM,EAAE,OAAO,aAAa,EAAE,CAClD,EACA,MAAM,KAAME,EAAY,CACtB,GAAM,CAAE,MAAAW,EAAO,KAAAQ,CAAK,EAAI,MAAMD,EAAS,KAAK,EAC5C,GAAIC,EAEF,eAAe,IAAM,CACnBnB,EAAW,MAAM,EACjBA,EAAW,aAAa,QAAQ,CAAC,CACnC,CAAC,UAKG,CAACjB,GAAUa,CAAM,EAAG,CACtB,IAAMK,EAAS,IAAI,WAAWU,CAAK,EAC/BV,EAAO,YACTD,EAAW,QAAQC,CAAM,CAE7B,CAEF,OAAOD,EAAW,YAAc,CAClC,EACA,MAAM,OAAQoB,EAAQ,CACpB,MAAMF,EAAS,OAAO,CACxB,EACA,KAAM,OACR,CAAC,CACH,CAOA,MAAO,CAHM,CAAE,OAAAtB,EAAQ,OAAAM,EAAQ,OAAAE,CAAO,EAGxBC,CAAI,CACpB,CAGA,SAASgB,GAAmBvB,EAAQC,EAAY,GAAO,CAKrD,OAAInB,GAAO,GAAG,eAAekB,CAAM,IAGjChB,GAAO,CAACX,GAAK,YAAY2B,CAAM,EAAG,qCAAqC,EAEvEhB,GAAO,CAACgB,EAAO,OAAQ,uBAAuB,GAIzCD,GAAYC,EAAQC,CAAS,CACtC,CAEA,SAASuB,GAAWC,EAAUC,EAAM,CAMlC,GAAM,CAACC,EAAMC,CAAI,EAAIF,EAAK,OAAO,IAAI,EAErC,OAAI/B,IACFC,GAAe,SAAS6B,EAAU,IAAI,QAAQE,CAAI,CAAC,EAIrDD,EAAK,OAASC,EAGP,CACL,OAAQC,EACR,OAAQF,EAAK,OACb,OAAQA,EAAK,MACf,CACF,CAEA,SAASG,GAAgBC,EAAO,CAC9B,GAAIA,EAAM,QACR,MAAM,IAAI,aAAa,6BAA8B,YAAY,CAErE,CAEA,SAASC,GAAkBN,EAAUO,EAAkB,CAuGrD,MAtGgB,CACd,MAAQ,CAMN,OAAOC,GAAY,KAAOC,GAAU,CAClC,IAAIC,EAAWC,GAAaJ,EAAiB,IAAI,CAAC,EAElD,OAAIG,IAAa,KACfA,EAAW,GACFA,IACTA,EAAW/C,GAAmB+C,CAAQ,GAKjC,IAAIpD,GAAK,CAACmD,CAAK,EAAG,CAAE,KAAMC,CAAS,CAAC,CAC7C,EAAGV,EAAUO,CAAgB,CAC/B,EAEA,aAAe,CAKb,OAAOC,GAAY,KAAOC,GACjB,IAAI,WAAWA,CAAK,EAAE,OAC5BT,EAAUO,CAAgB,CAC/B,EAEA,MAAQ,CAGN,OAAOC,GAAY,KAAMtD,GAAiB8C,EAAUO,CAAgB,CACtE,EAEA,MAAQ,CAGN,OAAOC,GAAY,KAAMI,GAAoBZ,EAAUO,CAAgB,CACzE,EAEA,UAAY,CAGV,OAAOC,GAAY,KAAOpB,GAAU,CAElC,IAAMsB,EAAWC,GAAaJ,EAAiB,IAAI,CAAC,EAIpD,GAAIG,IAAa,KACf,OAAQA,EAAS,QAAS,CACxB,IAAK,sBAAuB,CAG1B,IAAMG,EAASjD,GAAwBwB,EAAOsB,CAAQ,EAIhDI,EAAK,IAAI3D,GACf,OAAAC,GAAiB0D,EAAID,CAAM,EAEpBC,CACT,CACA,IAAK,oCAAqC,CAExC,IAAMC,EAAU,IAAI,gBAAgB3B,EAAM,SAAS,CAAC,EAK9C0B,EAAK,IAAI3D,GAEf,OAAW,CAACqC,EAAMJ,CAAK,IAAK2B,EAC1BD,EAAG,OAAOtB,EAAMJ,CAAK,EAGvB,OAAO0B,CACT,CACF,CAIF,MAAM,IAAI,UACR,2FACF,CACF,EAAGd,EAAUO,CAAgB,CAC/B,EAEA,OAAS,CAIP,OAAOC,GAAY,KAAOC,GACjB,IAAI,WAAWA,CAAK,EAC1BT,EAAUO,CAAgB,CAC/B,CACF,CAGF,CAEA,SAASS,GAAWC,EAAWV,EAAkB,CAC/C,OAAO,OAAOU,EAAU,UAAWX,GAAiBW,EAAWV,CAAgB,CAAC,CAClF,CASA,eAAeC,GAAajC,EAAQ2C,EAAuBlB,EAAUO,EAAkB,CACrFlD,GAAO,WAAWkB,EAAQyB,CAAQ,EAElC,IAAMK,EAAQE,EAAiBhC,CAAM,EAIrC,GAAI4C,GAAad,CAAK,EACpB,MAAM,IAAI,UAAU,8CAA8C,EAGpED,GAAeC,CAAK,EAGpB,IAAMe,EAAUrE,GAAsB,EAGhCsE,EAAcC,GAAUF,EAAQ,OAAOE,CAAK,EAM5CC,EAAgBC,GAAS,CAC7B,GAAI,CACFJ,EAAQ,QAAQF,EAAsBM,CAAI,CAAC,CAC7C,OAASC,EAAG,CACVJ,EAAWI,CAAC,CACd,CACF,EAIA,OAAIpB,EAAM,MAAQ,MAChBkB,EAAa,OAAO,YAAY,CAAC,CAAC,EAC3BH,EAAQ,UAKjBpE,GAAcqD,EAAM,KAAMkB,EAAcF,CAAU,EAG3CD,EAAQ,QACjB,CAMA,SAASD,GAAc5C,EAAQ,CAC7B,IAAM0B,EAAO1B,EAAO,KAKpB,OAAO0B,GAAQ,OAASA,EAAK,OAAO,QAAUrD,GAAK,YAAYqD,EAAK,MAAM,EAC5E,CAMA,SAASW,GAAoBH,EAAO,CAClC,OAAO,KAAK,MAAMvD,GAAgBuD,CAAK,CAAC,CAC1C,CAMA,SAASE,GAAce,EAAmB,CAKxC,IAAMC,EAAUD,EAAkB,YAG5BhB,EAAWzD,GAAgB0E,CAAO,EAGxC,OAAIjB,IAAa,UACR,KAIFA,CACT,CAEA/D,GAAO,QAAU,CACf,YAAA2B,GACA,kBAAAwB,GACA,UAAAC,GACA,UAAAiB,GACA,eAAA7C,GACA,wBAAAD,GACA,aAAAiD,EACF,ICnhBA,IAAAS,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,IAAMC,EAAS,EAAQ,aAAa,EAC9BC,EAAO,IACP,CAAE,SAAAC,EAAS,EAAI,KACfC,GAAS,KACT,CACJ,kCAAAC,GACA,mCAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,qBAAAC,GACA,YAAAC,GACA,mBAAAC,GACA,iBAAAC,GACA,gBAAAC,GACA,6BAAAC,EACF,EAAI,IACE,CACJ,KAAAC,GACA,OAAAC,GACA,QAAAC,GACA,QAAAC,GACA,UAAAC,GACA,SAAAC,GACA,SAAAC,GACA,MAAAC,GACA,SAAAC,GACA,OAAAC,GACA,OAAAC,GACA,yBAAAC,GACA,YAAAC,GACA,YAAAC,GACA,YAAAC,GACA,OAAAC,GACA,YAAAC,GACA,QAAAC,GACA,uBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,2BAAAC,GACA,gBAAAC,GACA,aAAAC,GACA,qBAAAC,GACA,aAAAC,GACA,SAAAC,GACA,iBAAAC,GACA,SAAAC,GACA,QAAAC,GACA,aAAAC,GACA,QAAAC,EACF,EAAI,KAEEC,GAAY,KACZC,GAAY,OAAO,MAAM,CAAC,EAC1BC,GAAa,OAAO,OAAO,OAAO,EAClCC,GAAqBhD,EAAK,mBAE5BiD,GAEJ,eAAeC,IAAc,CAC3B,IAAMC,EAAiB,QAAQ,IAAI,eAAiB,KAAsC,OAEtFC,EACJ,GAAI,CACFA,EAAM,MAAM,YAAY,QAAQ,IAAwC,CAC1E,MAAY,CAOVA,EAAM,MAAM,YAAY,QAAQD,GAAkB,IAAmC,CACvF,CAEA,OAAO,MAAM,YAAY,YAAYC,EAAK,CACxC,IAAK,CAOH,YAAa,CAACC,EAAGC,EAAIC,IAEZ,EAQT,eAAgB,CAACF,EAAGC,EAAIC,IAAQ,CAC9BxD,EAAOyD,GAAc,MAAQH,CAAC,EAC9B,IAAMI,EAAQH,EAAKI,GAAmBC,GAAiB,WACvD,OAAOH,GAAc,SAAS,IAAIT,GAAWY,GAAiB,OAAQF,EAAOF,CAAG,CAAC,CACnF,EAKA,sBAAwBF,IACtBtD,EAAOyD,GAAc,MAAQH,CAAC,EACvBG,GAAc,eAAe,GAQtC,qBAAsB,CAACH,EAAGC,EAAIC,IAAQ,CACpCxD,EAAOyD,GAAc,MAAQH,CAAC,EAC9B,IAAMI,EAAQH,EAAKI,GAAmBC,GAAiB,WACvD,OAAOH,GAAc,cAAc,IAAIT,GAAWY,GAAiB,OAAQF,EAAOF,CAAG,CAAC,CACxF,EAOA,qBAAsB,CAACF,EAAGC,EAAIC,IAAQ,CACpCxD,EAAOyD,GAAc,MAAQH,CAAC,EAC9B,IAAMI,EAAQH,EAAKI,GAAmBC,GAAiB,WACvD,OAAOH,GAAc,cAAc,IAAIT,GAAWY,GAAiB,OAAQF,EAAOF,CAAG,CAAC,CACxF,EAQA,yBAA0B,CAACF,EAAGO,EAAYC,EAASC,KACjD/D,EAAOyD,GAAc,MAAQH,CAAC,EACvBG,GAAc,kBAAkBI,EAAYC,IAAY,EAAGC,IAAoB,CAAC,GAQzF,aAAc,CAACT,EAAGC,EAAIC,IAAQ,CAC5BxD,EAAOyD,GAAc,MAAQH,CAAC,EAC9B,IAAMI,EAAQH,EAAKI,GAAmBC,GAAiB,WACvD,OAAOH,GAAc,OAAO,IAAIT,GAAWY,GAAiB,OAAQF,EAAOF,CAAG,CAAC,CACjF,EAKA,yBAA2BF,IACzBtD,EAAOyD,GAAc,MAAQH,CAAC,EACvBG,GAAc,kBAAkB,EAG3C,CACF,CAAC,CACH,CAEA,IAAIO,GAAiB,KAIjBC,GAAgBd,GAAW,EAC/Bc,GAAc,MAAM,EAKpB,IAAIR,GAAgB,KAChBG,GAAmB,KAInBM,GAAoB,EACpBP,GAAmB,KAEjBQ,GAAmB,EACnBC,GAAiB,EAIjBC,GAAkB,EAAID,GACtBE,GAAe,EAAIF,GAInBG,GAAqB,EAAIJ,GAEzBK,GAAN,KAAa,CAMX,YAAaC,EAAQC,EAAQ,CAAE,QAAA5E,CAAQ,EAAG,CACxC,KAAK,OAASA,EACd,KAAK,IAAM,KAAK,OAAO,aAAagD,GAAU,KAAK,QAAQ,EAC3D,KAAK,OAAS2B,EAId,KAAK,OAASC,EACd,KAAK,QAAU,KACf,KAAK,aAAe,KACpB,KAAK,YAAc,KACnB,KAAK,WAAa,EAClB,KAAK,WAAa,GAClB,KAAK,QAAU,GACf,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,EACnB,KAAK,eAAiBD,EAAOxC,EAAe,EAC5C,KAAK,gBAAkB,GACvB,KAAK,OAAS,GACd,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EAEnC,KAAK,UAAY,EAEjB,KAAK,UAAY,GACjB,KAAK,cAAgB,GACrB,KAAK,WAAa,GAClB,KAAK,gBAAkBwC,EAAOhC,EAAgB,CAChD,CAEA,WAAYkC,EAAOC,EAAM,CAKrBD,IAAU,KAAK,cACdC,EAAOR,GAAmB,KAAK,YAAcA,IAI1C,KAAK,UACPjE,GAAO,aAAa,KAAK,OAAO,EAChC,KAAK,QAAU,MAGbwE,IACEC,EAAOR,GACT,KAAK,QAAUjE,GAAO,eAAe0E,GAAiBF,EAAO,IAAI,QAAQ,IAAI,CAAC,GAE9E,KAAK,QAAU,WAAWE,GAAiBF,EAAO,IAAI,QAAQ,IAAI,CAAC,EACnE,KAAK,QAAQ,MAAM,IAIvB,KAAK,aAAeA,GACX,KAAK,SAEV,KAAK,QAAQ,SACf,KAAK,QAAQ,QAAQ,EAIzB,KAAK,YAAcC,CACrB,CAEA,QAAU,CACJ,KAAK,OAAO,WAAa,CAAC,KAAK,SAInC5E,EAAO,KAAK,KAAO,IAAI,EACvBA,EAAOyD,KAAkB,IAAI,EAE7B,KAAK,OAAO,cAAc,KAAK,GAAG,EAElCzD,EAAO,KAAK,cAAgBsE,EAAY,EACpC,KAAK,SAEH,KAAK,QAAQ,SACf,KAAK,QAAQ,QAAQ,EAIzB,KAAK,OAAS,GACd,KAAK,QAAQ,KAAK,OAAO,KAAK,GAAKvB,EAAS,EAC5C,KAAK,SAAS,EAChB,CAEA,UAAY,CACV,KAAO,CAAC,KAAK,QAAU,KAAK,KAAK,CAC/B,IAAM+B,EAAQ,KAAK,OAAO,KAAK,EAC/B,GAAIA,IAAU,KACZ,MAEF,KAAK,QAAQA,CAAK,CACpB,CACF,CAKA,QAASA,EAAO,CACd9E,EAAOyD,KAAkB,IAAI,EAC7BzD,EAAO,KAAK,KAAO,IAAI,EACvBA,EAAO,CAAC,KAAK,MAAM,EAEnB,GAAM,CAAE,OAAA0E,EAAQ,OAAAK,CAAO,EAAI,KAGvBD,EAAM,OAASZ,KACbP,IACFoB,EAAO,KAAKpB,EAAgB,EAG9BO,GAAoB,KAAK,KAAKY,EAAM,OAAS,IAAI,EAAI,KACrDnB,GAAmBoB,EAAO,OAAOb,EAAiB,GAGpD,IAAI,WAAWa,EAAO,OAAO,OAAQpB,GAAkBO,EAAiB,EAAE,IAAIY,CAAK,EAMnF,GAAI,CACF,IAAIE,EAEJ,GAAI,CACFpB,GAAmBkB,EACnBrB,GAAgB,KAChBuB,EAAMD,EAAO,eAAe,KAAK,IAAKpB,GAAkBmB,EAAM,MAAM,CAEtE,OAASG,EAAK,CAEZ,MAAMA,CACR,QAAE,CACAxB,GAAgB,KAChBG,GAAmB,IACrB,CAEA,GAAIoB,IAAQlC,GAAU,MAAM,GAAI,CAC9B,IAAMoC,EAAOJ,EAAM,SAASC,EAAO,qBAAqB,KAAK,GAAG,EAAIpB,EAAgB,EAEpF,GAAIqB,IAAQlC,GAAU,MAAM,eAC1B,KAAK,UAAUoC,CAAI,UACVF,IAAQlC,GAAU,MAAM,OACjC,KAAK,OAAS,GACd4B,EAAO,QAAQQ,CAAI,MACd,CACL,IAAMC,EAAMJ,EAAO,wBAAwB,KAAK,GAAG,EAC/CK,EAAU,GAEd,GAAID,EAAK,CACP,IAAM3B,EAAM,IAAI,WAAWuB,EAAO,OAAO,OAAQI,CAAG,EAAE,QAAQ,CAAC,EAC/DC,EACE,kDACA,OAAO,KAAKL,EAAO,OAAO,OAAQI,EAAK3B,CAAG,EAAE,SAAS,EACrD,GACJ,CACA,MAAM,IAAI5C,GAAgBwE,EAAStC,GAAU,MAAMkC,CAAG,EAAGE,CAAI,CAC/D,CACF,CACF,OAASD,EAAK,CACZhF,EAAK,QAAQyE,EAAQO,CAAG,CAC1B,CACF,CAEA,SAAW,CACTjF,EAAOyD,KAAkB,IAAI,EAC7BzD,EAAO,KAAK,KAAO,IAAI,EAEvB,KAAK,OAAO,YAAY,KAAK,GAAG,EAChC,KAAK,IAAM,KAEX,KAAK,SAAWG,GAAO,aAAa,KAAK,OAAO,EAChD,KAAK,QAAU,KACf,KAAK,aAAe,KACpB,KAAK,YAAc,KAEnB,KAAK,OAAS,EAChB,CAMA,SAAUkF,EAAK,CACb,YAAK,WAAaA,EAAI,SAAS,EACxB,CACT,CAKA,gBAAkB,CAChB,GAAM,CAAE,OAAAX,EAAQ,OAAAD,CAAO,EAAI,KAG3B,GAAIC,EAAO,UACT,MAAO,GAGT,IAAMY,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAClD,OAAK0D,GAGLA,EAAQ,kBAAkB,EAEnB,GAJE,EAKX,CAMA,cAAeD,EAAK,CAClB,IAAM7B,EAAM,KAAK,QAAQ,OAEzB,OAAKA,EAAM,KAAO,EAChB,KAAK,QAAQ,KAAK6B,CAAG,EAErB,KAAK,QAAQ7B,EAAM,CAAC,EAAI,OAAO,OAAO,CAAC,KAAK,QAAQA,EAAM,CAAC,EAAG6B,CAAG,CAAC,EAGpE,KAAK,YAAYA,EAAI,MAAM,EAEpB,CACT,CAMA,cAAeA,EAAK,CAClB,IAAI7B,EAAM,KAAK,QAAQ,QAElBA,EAAM,KAAO,GAChB,KAAK,QAAQ,KAAK6B,CAAG,EACrB7B,GAAO,GAEP,KAAK,QAAQA,EAAM,CAAC,EAAI,OAAO,OAAO,CAAC,KAAK,QAAQA,EAAM,CAAC,EAAG6B,CAAG,CAAC,EAGpE,IAAME,EAAM,KAAK,QAAQ/B,EAAM,CAAC,EAChC,GAAI+B,EAAI,SAAW,GAAI,CACrB,IAAMC,EAAavF,EAAK,6BAA6BsF,CAAG,EACpDC,IAAe,aACjB,KAAK,WAAaH,EAAI,SAAS,EACtBG,IAAe,eACxB,KAAK,YAAcH,EAAI,SAAS,EAEpC,MAAWE,EAAI,SAAW,IAAMtF,EAAK,6BAA6BsF,CAAG,IAAM,mBACzE,KAAK,eAAiBF,EAAI,SAAS,GAGrC,YAAK,YAAYA,EAAI,MAAM,EAEpB,CACT,CAKA,YAAa7B,EAAK,CAChB,KAAK,aAAeA,EAChB,KAAK,aAAe,KAAK,gBAC3BvD,EAAK,QAAQ,KAAK,OAAQ,IAAIO,EAAsB,CAExD,CAKA,UAAWiF,EAAM,CACf,GAAM,CAAE,QAAA3B,EAAS,OAAAW,EAAQ,OAAAC,EAAQ,QAAAgB,EAAS,WAAA7B,CAAW,EAAI,KAEzD7D,EAAO8D,CAAO,EACd9D,EAAOyE,EAAO1C,EAAO,IAAM2C,CAAM,EACjC1E,EAAO,CAAC0E,EAAO,SAAS,EACxB1E,EAAO,CAAC,KAAK,MAAM,EACnBA,GAAQ0F,EAAQ,OAAS,KAAO,CAAC,EAEjC,IAAMJ,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAClD5B,EAAOsF,CAAO,EACdtF,EAAOsF,EAAQ,SAAWA,EAAQ,SAAW,SAAS,EAEtD,KAAK,WAAa,EAClB,KAAK,WAAa,GAClB,KAAK,gBAAkB,GAEvB,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,EAEnBZ,EAAO,QAAQe,CAAI,EAEnBf,EAAOzD,EAAO,EAAE,QAAQ,EACxByD,EAAOzD,EAAO,EAAI,KAElByD,EAAO1D,EAAO,EAAI,KAClB0D,EAAO7C,EAAM,EAAI,KAEjBoB,GAAmByB,CAAM,EAEzBD,EAAO1C,EAAO,EAAI,KAClB0C,EAAO7B,EAAY,EAAI,KACvB6B,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,GAAG,EAAI,KACxC6C,EAAO,KAAK,aAAcA,EAAO3D,EAAI,EAAG,CAAC2D,CAAM,EAAG,IAAI/D,GAAmB,SAAS,CAAC,EAEnF,GAAI,CACF4E,EAAQ,UAAUzB,EAAY6B,EAAShB,CAAM,CAC/C,OAASO,EAAK,CACZhF,EAAK,QAAQyE,EAAQO,CAAG,CAC1B,CAEAR,EAAO9B,EAAO,EAAE,CAClB,CAQA,kBAAmBkB,EAAYC,EAASC,EAAiB,CACvD,GAAM,CAAE,OAAAU,EAAQ,OAAAC,EAAQ,QAAAgB,EAAS,WAAAC,CAAW,EAAI,KAGhD,GAAIjB,EAAO,UACT,MAAO,GAGT,IAAMY,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAGlD,GAAI,CAAC0D,EACH,MAAO,GAMT,GAHAtF,EAAO,CAAC,KAAK,OAAO,EACpBA,EAAO,KAAK,WAAa,GAAG,EAExB6D,IAAe,IACjB,OAAA5D,EAAK,QAAQyE,EAAQ,IAAIjE,GAAY,eAAgBR,EAAK,cAAcyE,CAAM,CAAC,CAAC,EACzE,GAIT,GAAIZ,GAAW,CAACwB,EAAQ,QACtB,OAAArF,EAAK,QAAQyE,EAAQ,IAAIjE,GAAY,cAAeR,EAAK,cAAcyE,CAAM,CAAC,CAAC,EACxE,GAYT,GATA1E,EAAO,KAAK,cAAgBqE,EAAe,EAE3C,KAAK,WAAaR,EAClB,KAAK,gBACHE,GAECuB,EAAQ,SAAW,QAAU,CAACZ,EAAO3D,EAAM,GAAK,KAAK,WAAW,YAAY,IAAM,aAGjF,KAAK,YAAc,IAAK,CAC1B,IAAM6E,EAAcN,EAAQ,aAAe,KACvCA,EAAQ,YACRb,EAAOpC,EAAY,EACvB,KAAK,WAAWuD,EAAatB,EAAY,CAC3C,MAAW,KAAK,SAEV,KAAK,QAAQ,SACf,KAAK,QAAQ,QAAQ,EAIzB,GAAIgB,EAAQ,SAAW,UACrB,OAAAtF,EAAOyE,EAAOtD,EAAQ,IAAM,CAAC,EAC7B,KAAK,QAAU,GACR,EAGT,GAAI2C,EACF,OAAA9D,EAAOyE,EAAOtD,EAAQ,IAAM,CAAC,EAC7B,KAAK,QAAU,GACR,EAOT,GAJAnB,GAAQ,KAAK,QAAQ,OAAS,KAAO,CAAC,EACtC,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,EAEf,KAAK,iBAAmByE,EAAO3C,EAAW,EAAG,CAC/C,IAAM+D,EAAmB,KAAK,UAAY5F,EAAK,sBAAsB,KAAK,SAAS,EAAI,KAEvF,GAAI4F,GAAoB,KAAM,CAC5B,IAAMC,EAAU,KAAK,IACnBD,EAAmBpB,EAAOtC,EAA0B,EACpDsC,EAAOvC,EAAoB,CAC7B,EACI4D,GAAW,EACbpB,EAAO3D,EAAM,EAAI,GAEjB0D,EAAOzC,EAAsB,EAAI8D,CAErC,MACErB,EAAOzC,EAAsB,EAAIyC,EAAOhD,EAAwB,CAEpE,MAEEiD,EAAO3D,EAAM,EAAI,GAGnB,IAAMgF,EAAQT,EAAQ,UAAUzB,EAAY6B,EAAS,KAAK,OAAQC,CAAU,IAAM,GAElF,OAAIL,EAAQ,QACH,GAGLA,EAAQ,SAAW,QAInBzB,EAAa,IACR,GAGLa,EAAOxD,EAAS,IAClBwD,EAAOxD,EAAS,EAAI,GACpBuD,EAAO9B,EAAO,EAAE,GAGXoD,EAAQjD,GAAU,MAAM,OAAS,EAC1C,CAMA,OAAQuC,EAAK,CACX,GAAM,CAAE,OAAAZ,EAAQ,OAAAC,EAAQ,WAAAb,EAAY,gBAAAmC,CAAgB,EAAI,KAExD,GAAItB,EAAO,UACT,MAAO,GAGT,IAAMY,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAalD,OAZA5B,EAAOsF,CAAO,EAEdtF,EAAO,KAAK,cAAgBsE,EAAY,EACpC,KAAK,SAEH,KAAK,QAAQ,SACf,KAAK,QAAQ,QAAQ,EAIzBtE,EAAO6D,GAAc,GAAG,EAEpBmC,EAAkB,IAAM,KAAK,UAAYX,EAAI,OAASW,GACxD/F,EAAK,QAAQyE,EAAQ,IAAI7D,EAA8B,EAChD,KAGT,KAAK,WAAawE,EAAI,OAElBC,EAAQ,OAAOD,CAAG,IAAM,GACnBvC,GAAU,MAAM,OAGlB,EACT,CAKA,mBAAqB,CACnB,GAAM,CAAE,OAAA2B,EAAQ,OAAAC,EAAQ,WAAAb,EAAY,QAAAC,EAAS,QAAA4B,EAAS,cAAAO,EAAe,UAAAC,EAAW,gBAAAnC,CAAgB,EAAI,KAEpG,GAAIW,EAAO,YAAc,CAACb,GAAcE,GACtC,MAAO,GAGT,GAAID,EACF,MAAO,GAGT9D,EAAO6D,GAAc,GAAG,EACxB7D,GAAQ,KAAK,QAAQ,OAAS,KAAO,CAAC,EAEtC,IAAMsF,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAalD,GAZA5B,EAAOsF,CAAO,EAEd,KAAK,WAAa,EAClB,KAAK,WAAa,GAClB,KAAK,UAAY,EACjB,KAAK,cAAgB,GACrB,KAAK,UAAY,GACjB,KAAK,WAAa,GAElB,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,EAEfzB,EAAa,IACf,MAAO,GAIT,GAAIyB,EAAQ,SAAW,QAAUW,GAAiBC,IAAc,SAASD,EAAe,EAAE,EACxF,OAAAhG,EAAK,QAAQyE,EAAQ,IAAIrE,EAAoC,EACtD,GAOT,GAJAiF,EAAQ,WAAWI,CAAO,EAE1BjB,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,GAAG,EAAI,KAEpC8C,EAAOpD,EAAQ,EACjB,OAAAtB,EAAOyE,EAAOtD,EAAQ,IAAM,CAAC,EAE7BlB,EAAK,QAAQyE,EAAQ,IAAIhE,GAAmB,OAAO,CAAC,EAC7CoC,GAAU,MAAM,OAClB,GAAKiB,EAGL,IAAIW,EAAO3D,EAAM,GAAK0D,EAAOtD,EAAQ,IAAM,EAKhD,OAAAlB,EAAK,QAAQyE,EAAQ,IAAIhE,GAAmB,OAAO,CAAC,EAC7CoC,GAAU,MAAM,OACd2B,EAAO3C,EAAW,GAAK,MAAQ2C,EAAO3C,EAAW,IAAM,EAIhE,aAAa,IAAM2C,EAAO9B,EAAO,EAAE,CAAC,EAEpC8B,EAAO9B,EAAO,EAAE,MAfhB,QAAA1C,EAAK,QAAQyE,EAAQ,IAAIhE,GAAmB,OAAO,CAAC,EAC7CoC,GAAU,MAAM,OAiBzB,MAAO,EACT,CACF,EAEA,SAAS+B,GAAiBsB,EAAQ,CAChC,GAAM,CAAE,OAAAzB,EAAQ,YAAA0B,EAAa,OAAA3B,EAAQ,OAAA4B,CAAO,EAAIF,EAAO,MAAM,EAGzDC,IAAgB/B,IACd,CAACK,EAAOpD,EAAQ,GAAKoD,EAAO,mBAAqBD,EAAOtD,EAAQ,EAAI,KACtEnB,EAAO,CAACqG,EAAQ,4CAA4C,EAC5DpG,EAAK,QAAQyE,EAAQ,IAAInE,EAAqB,GAEvC6F,IAAgB9B,GACpB+B,GACHpG,EAAK,QAAQyE,EAAQ,IAAI/D,EAAkB,EAEpCyF,IAAgB7B,KACzBvE,EAAOyE,EAAOtD,EAAQ,IAAM,GAAKsD,EAAOzC,EAAsB,CAAC,EAC/D/B,EAAK,QAAQyE,EAAQ,IAAIhE,GAAmB,qBAAqB,CAAC,EAEtE,CAOA,eAAe4F,GAAW7B,EAAQC,EAAQ,CAGxC,GAFAD,EAAO1C,EAAO,EAAI2C,EAEd,CAACV,GAAgB,CACnB,IAAMuC,EAAO,IAAM,CAAC,EACpB7B,EAAO,GAAG,QAAS6B,CAAI,EACvBvC,GAAiB,MAAMC,GACvBA,GAAgB,KAChBS,EAAO,IAAI,QAAS6B,CAAI,CAC1B,CAEA,GAAI7B,EAAO,QACT,MAAMA,EAAO,QAGf,GAAIA,EAAO,UACT,MAAM,IAAIjE,GAAY,WAAW,EAGnC,OAAAiE,EAAOlD,EAAM,EAAI,GACjBkD,EAAOpD,EAAQ,EAAI,GACnBoD,EAAO3D,EAAM,EAAI,GACjB2D,EAAOxD,EAAS,EAAI,GACpBwD,EAAOzD,EAAO,EAAI,IAAIuD,GAAOC,EAAQC,EAAQV,EAAc,EAE3D/D,EAAK,YAAYyE,EAAQ,QAAS8B,EAAiB,EACnDvG,EAAK,YAAYyE,EAAQ,WAAY+B,EAAoB,EACzDxG,EAAK,YAAYyE,EAAQ,MAAOgC,EAAe,EAC/CzG,EAAK,YAAYyE,EAAQ,QAASiC,EAAiB,EAEnDjC,EAAO7B,EAAO,EAAI,GAClB6B,EAAO,GAAG,QAASkC,EAAa,EAEzB,CACL,QAAS,KACT,kBAAmB,EACnB,MAAOtB,EAAS,CACd,OAAOuB,GAAQpC,EAAQa,CAAO,CAChC,EACA,QAAU,CACRwB,GAASrC,CAAM,CACjB,EAKA,QAASQ,EAAK8B,EAAU,CAClBrC,EAAO7B,EAAO,EAChB,eAAekE,CAAQ,GAEvBrC,EAAO,GAAG,QAASqC,CAAQ,EAC3BrC,EAAO,QAAQO,CAAG,EAEtB,EAIA,IAAI,WAAa,CACf,OAAOP,EAAO,SAChB,EAKA,KAAMY,EAAS,CAKb,MAJI,GAAAZ,EAAOpD,EAAQ,GAAKoD,EAAO3D,EAAM,GAAK2D,EAAOxD,EAAS,GAItDoE,IACEb,EAAOtD,EAAQ,EAAI,GAAK,CAACmE,EAAQ,YAOjCb,EAAOtD,EAAQ,EAAI,IAAMmE,EAAQ,SAAWA,EAAQ,SAAW,YAO/Db,EAAOtD,EAAQ,EAAI,GAAKlB,EAAK,WAAWqF,EAAQ,IAAI,IAAM,IAC3DrF,EAAK,SAASqF,EAAQ,IAAI,GAAKrF,EAAK,gBAAgBqF,EAAQ,IAAI,GAAKrF,EAAK,eAAeqF,EAAQ,IAAI,IAc5G,CACF,CACF,CAEA,SAASkB,GAAmBvB,EAAK,CAC/BjF,EAAOiF,EAAI,OAAS,8BAA8B,EAElD,IAAMkB,EAAS,KAAKlF,EAAO,EAI3B,GAAIgE,EAAI,OAAS,cAAgBkB,EAAO,YAAc,CAACA,EAAO,gBAAiB,CAE7EA,EAAO,kBAAkB,EACzB,MACF,CAEA,KAAKtE,EAAM,EAAIoD,EAEf,KAAKjE,EAAO,EAAE0B,EAAQ,EAAEuC,CAAG,CAC7B,CAEA,SAASwB,IAAwB,CAC/B,KAAKxF,EAAO,GAAG,SAAS,CAC1B,CAEA,SAASyF,IAAmB,CAC1B,IAAMP,EAAS,KAAKlF,EAAO,EAE3B,GAAIkF,EAAO,YAAc,CAACA,EAAO,gBAAiB,CAEhDA,EAAO,kBAAkB,EACzB,MACF,CAEAlG,EAAK,QAAQ,KAAM,IAAIQ,GAAY,oBAAqBR,EAAK,cAAc,IAAI,CAAC,CAAC,CACnF,CAEA,SAAS0G,IAAqB,CAC5B,IAAMR,EAAS,KAAKlF,EAAO,EAEvBkF,IACE,CAAC,KAAKtE,EAAM,GAAKsE,EAAO,YAAc,CAACA,EAAO,iBAEhDA,EAAO,kBAAkB,EAG3B,KAAKlF,EAAO,EAAE,QAAQ,EACtB,KAAKA,EAAO,EAAI,MAGlB,IAAMgE,EAAM,KAAKpD,EAAM,GAAK,IAAIpB,GAAY,SAAUR,EAAK,cAAc,IAAI,CAAC,EAExEwE,EAAS,KAAKzD,EAAO,EAK3B,GAHAyD,EAAO1C,EAAO,EAAI,KAClB0C,EAAO7B,EAAY,EAAI,KAEnB6B,EAAO,UAAW,CACpBzE,EAAOyE,EAAOrD,EAAQ,IAAM,CAAC,EAG7B,IAAM4F,EAAWvC,EAAOlD,EAAM,EAAE,OAAOkD,EAAO7C,EAAW,CAAC,EAC1D,QAASqF,EAAI,EAAGA,EAAID,EAAS,OAAQC,IAAK,CACxC,IAAM3B,EAAU0B,EAASC,CAAC,EAC1BhH,EAAK,aAAawE,EAAQa,EAASL,CAAG,CACxC,CACF,SAAWR,EAAOtD,EAAQ,EAAI,GAAK8D,EAAI,OAAS,eAAgB,CAE9D,IAAMK,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAClD6C,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,GAAG,EAAI,KAExC3B,EAAK,aAAawE,EAAQa,EAASL,CAAG,CACxC,CAEAR,EAAO9C,EAAW,EAAI8C,EAAO7C,EAAW,EAExC5B,EAAOyE,EAAOtD,EAAQ,IAAM,CAAC,EAE7BsD,EAAO,KAAK,aAAcA,EAAO3D,EAAI,EAAG,CAAC2D,CAAM,EAAGQ,CAAG,EAErDR,EAAO9B,EAAO,EAAE,CAClB,CAEA,SAASiE,IAAiB,CACxB,KAAK/D,EAAO,EAAI,EAClB,CAKA,SAASiE,GAAUrC,EAAQ,CACzB,IAAMC,EAASD,EAAO1C,EAAO,EAE7B,GAAI2C,GAAU,CAACA,EAAO,WAWpB,GAVID,EAAOpD,EAAK,IAAM,EAChB,CAACqD,EAAOlD,EAAM,GAAKkD,EAAO,QAC5BA,EAAO,MAAM,EACbA,EAAOlD,EAAM,EAAI,IAEVkD,EAAOlD,EAAM,GAAKkD,EAAO,MAClCA,EAAO,IAAI,EACXA,EAAOlD,EAAM,EAAI,IAGfiD,EAAOpD,EAAK,IAAM,EAChBqD,EAAOzD,EAAO,EAAE,cAAgBsD,IAClCG,EAAOzD,EAAO,EAAE,WAAWwD,EAAOzC,EAAsB,EAAGuC,EAAkB,UAEtEE,EAAOtD,EAAQ,EAAI,GAAKuD,EAAOzD,EAAO,EAAE,WAAa,KAC1DyD,EAAOzD,EAAO,EAAE,cAAgBoD,GAAiB,CACnD,IAAMiB,EAAUb,EAAOlD,EAAM,EAAEkD,EAAO7C,EAAW,CAAC,EAC5CsF,EAAiB5B,EAAQ,gBAAkB,KAC7CA,EAAQ,eACRb,EAAOrC,EAAe,EAC1BsC,EAAOzD,EAAO,EAAE,WAAWiG,EAAgB7C,EAAe,CAC5D,EAGN,CAGA,SAAS8C,GAAyBC,EAAQ,CACxC,OAAOA,IAAW,OAASA,IAAW,QAAUA,IAAW,WAAaA,IAAW,SAAWA,IAAW,SAC3G,CAOA,SAASP,GAASpC,EAAQa,EAAS,CACjC,GAAM,CAAE,OAAA8B,EAAQ,KAAAC,EAAM,KAAAC,EAAM,QAAAxD,EAAS,SAAAyD,EAAU,MAAAC,CAAM,EAAIlC,EAErD,CAAE,KAAAmC,EAAM,QAAA/B,EAAS,cAAAO,CAAc,EAAIX,EAWjCoC,EACJN,IAAW,OACXA,IAAW,QACXA,IAAW,SACXA,IAAW,SACXA,IAAW,YACXA,IAAW,YAGb,GAAInH,EAAK,eAAewH,CAAI,EAAG,CACxBvE,KACHA,GAAc,KAAgC,aAGhD,GAAM,CAACyE,EAAYC,CAAW,EAAI1E,GAAYuE,CAAI,EAC9CnC,EAAQ,aAAe,MACzBI,EAAQ,KAAK,eAAgBkC,CAAW,EAE1CH,EAAOE,EAAW,OAClB1B,EAAgB0B,EAAW,MAC7B,MAAW1H,EAAK,WAAWwH,CAAI,GAAKnC,EAAQ,aAAe,MAAQmC,EAAK,MACtE/B,EAAQ,KAAK,eAAgB+B,EAAK,IAAI,EAGpCA,GAAQ,OAAOA,EAAK,MAAS,YAE/BA,EAAK,KAAK,CAAC,EAGb,IAAMI,EAAa5H,EAAK,WAAWwH,CAAI,EAmBvC,GAjBAxB,EAAgB4B,GAAc5B,EAE1BA,IAAkB,OACpBA,EAAgBX,EAAQ,eAGtBW,IAAkB,GAAK,CAACyB,IAM1BzB,EAAgB,MAKdkB,GAAwBC,CAAM,GAAKnB,EAAgB,GAAKX,EAAQ,gBAAkB,MAAQA,EAAQ,gBAAkBW,EAAe,CACrI,GAAIxB,EAAOnC,EAAoB,EAC7B,OAAArC,EAAK,aAAawE,EAAQa,EAAS,IAAIlF,EAAmC,EACnE,GAGT,QAAQ,YAAY,IAAIA,EAAmC,CAC7D,CAEA,IAAMsE,EAASD,EAAO1C,EAAO,EAMvB+F,EAAS7C,GAAQ,CACjBK,EAAQ,SAAWA,EAAQ,YAI/BrF,EAAK,aAAawE,EAAQa,EAASL,GAAO,IAAI3E,EAAqB,EAEnEL,EAAK,QAAQwH,CAAI,EACjBxH,EAAK,QAAQyE,EAAQ,IAAIhE,GAAmB,SAAS,CAAC,EACxD,EAEA,GAAI,CACF4E,EAAQ,UAAUwC,CAAK,CACzB,OAAS7C,EAAK,CACZhF,EAAK,aAAawE,EAAQa,EAASL,CAAG,CACxC,CAEA,GAAIK,EAAQ,QACV,MAAO,GAGL8B,IAAW,SAKb1C,EAAO3D,EAAM,EAAI,KAGf+C,GAAWsD,IAAW,aAIxB1C,EAAO3D,EAAM,EAAI,IAGfyG,GAAS,OACX9C,EAAO3D,EAAM,EAAIyG,GAGf/C,EAAOlC,EAAY,GAAKmC,EAAOlC,EAAQ,KAAOiC,EAAOlC,EAAY,IACnEmC,EAAO3D,EAAM,EAAI,IAGfwG,IACF7C,EAAOxD,EAAS,EAAI,IAGtB,IAAI6G,EAAS,GAAGX,CAAM,IAAIC,CAAI;AAAA,EAgB9B,GAdI,OAAOC,GAAS,SAClBS,GAAU,SAAST,CAAI;AAAA,EAEvBS,GAAUtD,EAAO/C,EAAW,EAG1BoC,EACFiE,GAAU;AAAA,WAAmCjE,CAAO;AAAA,EAC3CW,EAAO3C,EAAW,GAAK,CAAC4C,EAAO3D,EAAM,EAC9CgH,GAAU;AAAA,EAEVA,GAAU;AAAA,EAGR,MAAM,QAAQrC,CAAO,EACvB,QAASsC,EAAI,EAAGA,EAAItC,EAAQ,OAAQsC,GAAK,EAAG,CAC1C,IAAMzC,EAAMG,EAAQsC,EAAI,CAAC,EACnBC,EAAMvC,EAAQsC,EAAI,CAAC,EAEzB,GAAI,MAAM,QAAQC,CAAG,EACnB,QAAShB,EAAI,EAAGA,EAAIgB,EAAI,OAAQhB,IAC9Bc,GAAU,GAAGxC,CAAG,KAAK0C,EAAIhB,CAAC,CAAC;AAAA,OAG7Bc,GAAU,GAAGxC,CAAG,KAAK0C,CAAG;AAAA,CAE5B,CAGF,OAAI/H,GAAS,YAAY,gBACvBA,GAAS,YAAY,QAAQ,CAAE,QAAAoF,EAAS,QAASyC,EAAQ,OAAArD,CAAO,CAAC,EAI/D,CAAC+C,GAAQI,IAAe,EAC1BK,GAAYJ,EAAO,KAAMrD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAC9EzH,EAAK,SAASwH,CAAI,EAC3BS,GAAYJ,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAC9EzH,EAAK,WAAWwH,CAAI,EACzB,OAAOA,EAAK,QAAW,WACzBU,GAAcL,EAAOL,EAAK,OAAO,EAAGhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAElGU,GAAUN,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAE9EzH,EAAK,SAASwH,CAAI,EAC3BY,GAAYP,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAC9EzH,EAAK,WAAWwH,CAAI,EAC7BU,GAAcL,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,CAAc,EAEzF1H,EAAO,EAAK,EAGP,EACT,CAYA,SAASqI,GAAaP,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,EAAgB,CACjG1H,EAAOiG,IAAkB,GAAKxB,EAAOtD,EAAQ,IAAM,EAAG,iCAAiC,EAEvF,IAAImH,EAAW,GAETC,EAAS,IAAIC,GAAY,CAAE,MAAAV,EAAO,OAAApD,EAAQ,QAAAY,EAAS,cAAAW,EAAe,OAAAxB,EAAQ,eAAAiD,EAAgB,OAAAK,CAAO,CAAC,EAMlGU,EAAS,SAAU3D,EAAO,CAC9B,GAAI,CAAAwD,EAIJ,GAAI,CACE,CAACC,EAAO,MAAMzD,CAAK,GAAK,KAAK,OAC/B,KAAK,MAAM,CAEf,OAASG,EAAK,CACZhF,EAAK,QAAQ,KAAMgF,CAAG,CACxB,CACF,EAKMyD,EAAU,UAAY,CACtBJ,GAIAb,EAAK,QACPA,EAAK,OAAO,CAEhB,EAKMkB,EAAU,UAAY,CAS1B,GANA,eAAe,IAAM,CAGnBlB,EAAK,eAAe,QAASmB,CAAU,CACzC,CAAC,EAEG,CAACN,EAAU,CACb,IAAMrD,EAAM,IAAI3E,GAChB,eAAe,IAAMsI,EAAW3D,CAAG,CAAC,CACtC,CACF,EAMM2D,EAAa,SAAU3D,EAAK,CAChC,GAAI,CAAAqD,EAiBJ,IAbAA,EAAW,GAEXtI,EAAO0E,EAAO,WAAcA,EAAOpD,EAAQ,GAAKmD,EAAOtD,EAAQ,GAAK,CAAE,EAEtEuD,EACG,IAAI,QAASgE,CAAO,EACpB,IAAI,QAASE,CAAU,EAE1BnB,EACG,eAAe,OAAQgB,CAAM,EAC7B,eAAe,MAAOG,CAAU,EAChC,eAAe,QAASD,CAAO,EAE9B,CAAC1D,EACH,GAAI,CACFsD,EAAO,IAAI,CACb,OAASM,EAAI,CACX5D,EAAM4D,CACR,CAGFN,EAAO,QAAQtD,CAAG,EAEdA,IAAQA,EAAI,OAAS,gBAAkBA,EAAI,UAAY,SACzDhF,EAAK,QAAQwH,EAAMxC,CAAG,EAEtBhF,EAAK,QAAQwH,CAAI,EAErB,EAEAA,EACG,GAAG,OAAQgB,CAAM,EACjB,GAAG,MAAOG,CAAU,EACpB,GAAG,QAASA,CAAU,EACtB,GAAG,QAASD,CAAO,EAElBlB,EAAK,QACPA,EAAK,OAAO,EAGd/C,EACG,GAAG,QAASgE,CAAO,EACnB,GAAG,QAASE,CAAU,EAErBnB,EAAK,cAAgBA,EAAK,QAC5B,aAAa,IAAMmB,EAAWnB,EAAK,OAAO,CAAC,GAClCA,EAAK,YAAcA,EAAK,gBACjC,aAAa,IAAMmB,EAAW,IAAI,CAAC,GAGjCnB,EAAK,cAAgBA,EAAK,SAC5B,aAAakB,CAAO,CAExB,CAoBA,SAAST,GAAaJ,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,EAAgB,CACjG,GAAI,CACGD,EAOMxH,EAAK,SAASwH,CAAI,IAC3BzH,EAAOiG,IAAkBwB,EAAK,WAAY,sCAAsC,EAEhF/C,EAAO,KAAK,EACZA,EAAO,MAAM,GAAGqD,CAAM,mBAAmB9B,CAAa;AAAA;AAAA,EAAY,QAAQ,EAC1EvB,EAAO,MAAM+C,CAAI,EACjB/C,EAAO,OAAO,EACdY,EAAQ,WAAWmC,CAAI,EAEnB,CAACC,GAAkBpC,EAAQ,QAAU,KACvCZ,EAAO3D,EAAM,EAAI,KAhBfkF,IAAkB,EACpBvB,EAAO,MAAM,GAAGqD,CAAM;AAAA;AAAA,EAA6B,QAAQ,GAE3D/H,EAAOiG,IAAkB,KAAM,sCAAsC,EACrEvB,EAAO,MAAM,GAAGqD,CAAM;AAAA,EAAQ,QAAQ,GAe1CzC,EAAQ,cAAc,EAEtBb,EAAO9B,EAAO,EAAE,CAClB,OAASsC,EAAK,CACZ6C,EAAM7C,CAAG,CACX,CACF,CAaA,eAAemD,GAAWN,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,EAAgB,CACrG1H,EAAOiG,IAAkBwB,EAAK,KAAM,oCAAoC,EAExE,GAAI,CACF,GAAIxB,GAAiB,MAAQA,IAAkBwB,EAAK,KAClD,MAAM,IAAIrH,GAGZ,IAAM0I,EAAS,OAAO,KAAK,MAAMrB,EAAK,YAAY,CAAC,EAEnD/C,EAAO,KAAK,EACZA,EAAO,MAAM,GAAGqD,CAAM,mBAAmB9B,CAAa;AAAA;AAAA,EAAY,QAAQ,EAC1EvB,EAAO,MAAMoE,CAAM,EACnBpE,EAAO,OAAO,EAEdY,EAAQ,WAAWwD,CAAM,EACzBxD,EAAQ,cAAc,EAElB,CAACoC,GAAkBpC,EAAQ,QAAU,KACvCZ,EAAO3D,EAAM,EAAI,IAGnB0D,EAAO9B,EAAO,EAAE,CAClB,OAASsC,EAAK,CACZ6C,EAAM7C,CAAG,CACX,CACF,CAaA,eAAekD,GAAeL,EAAOL,EAAMhD,EAAQa,EAASZ,EAAQuB,EAAe8B,EAAQL,EAAgB,CACzG1H,EAAOiG,IAAkB,GAAKxB,EAAOtD,EAAQ,IAAM,EAAG,mCAAmC,EAEzF,IAAI4F,EAAW,KACf,SAAS2B,GAAW,CAClB,GAAI3B,EAAU,CACZ,IAAMgC,EAAKhC,EACXA,EAAW,KACXgC,EAAG,CACL,CACF,CAEA,IAAMC,EAAe,IAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC1DlJ,EAAO+G,IAAa,IAAI,EAEpBrC,EAAO7C,EAAM,EACfqH,EAAOxE,EAAO7C,EAAM,CAAC,EAErBkF,EAAWkC,CAEf,CAAC,EAEDvE,EACG,GAAG,QAASgE,CAAO,EACnB,GAAG,QAASA,CAAO,EAEtB,IAAMH,EAAS,IAAIC,GAAY,CAAE,MAAAV,EAAO,OAAApD,EAAQ,QAAAY,EAAS,cAAAW,EAAe,OAAAxB,EAAQ,eAAAiD,EAAgB,OAAAK,CAAO,CAAC,EACxG,GAAI,CAEF,cAAiBjD,KAAS2C,EAAM,CAC9B,GAAI/C,EAAO7C,EAAM,EACf,MAAM6C,EAAO7C,EAAM,EAGhB0G,EAAO,MAAMzD,CAAK,GACrB,MAAMkE,EAAa,CAEvB,CAEAT,EAAO,IAAI,CACb,OAAStD,EAAK,CACZsD,EAAO,QAAQtD,CAAG,CACpB,QAAE,CACAP,EACG,IAAI,QAASgE,CAAO,EACpB,IAAI,QAASA,CAAO,CACzB,CACF,CAEA,IAAMF,GAAN,KAAkB,CAYhB,YAAa,CAAE,MAAAV,EAAO,OAAApD,EAAQ,QAAAY,EAAS,cAAAW,EAAe,OAAAxB,EAAQ,eAAAiD,EAAgB,OAAAK,CAAO,EAAG,CACtF,KAAK,OAASrD,EACd,KAAK,QAAUY,EACf,KAAK,cAAgBW,EACrB,KAAK,OAASxB,EACd,KAAK,aAAe,EACpB,KAAK,eAAiBiD,EACtB,KAAK,OAASK,EACd,KAAK,MAAQD,EAEbpD,EAAOpD,EAAQ,EAAI,EACrB,CAMA,MAAOwD,EAAO,CACZ,GAAM,CAAE,OAAAJ,EAAQ,QAAAY,EAAS,cAAAW,EAAe,OAAAxB,EAAQ,aAAA0E,EAAc,eAAAzB,EAAgB,OAAAK,CAAO,EAAI,KAEzF,GAAIrD,EAAO7C,EAAM,EACf,MAAM6C,EAAO7C,EAAM,EAGrB,GAAI6C,EAAO,UACT,MAAO,GAGT,IAAMlB,EAAM,OAAO,WAAWsB,CAAK,EACnC,GAAI,CAACtB,EACH,MAAO,GAIT,GAAIyC,IAAkB,MAAQkD,EAAe3F,EAAMyC,EAAe,CAChE,GAAIxB,EAAOnC,EAAoB,EAC7B,MAAM,IAAIlC,GAGZ,QAAQ,YAAY,IAAIA,EAAmC,CAC7D,CAEAsE,EAAO,KAAK,EAERyE,IAAiB,IACf,CAACzB,GAAkBpC,EAAQ,QAAU,KACvCZ,EAAO3D,EAAM,EAAI,IAGfkF,IAAkB,KACpBvB,EAAO,MAAM,GAAGqD,CAAM;AAAA,EAAkC,QAAQ,EAEhErD,EAAO,MAAM,GAAGqD,CAAM,mBAAmB9B,CAAa;AAAA;AAAA,EAAY,QAAQ,GAI1EA,IAAkB,MACpBvB,EAAO,MAAM;AAAA,EAAOlB,EAAI,SAAS,EAAE,CAAC;AAAA,EAAQ,QAAQ,EAGtD,KAAK,cAAgBA,EAErB,IAAMwB,EAAMN,EAAO,MAAMI,CAAK,EAE9B,OAAAJ,EAAO,OAAO,EAEdY,EAAQ,WAAWR,CAAK,EAEnBE,GACCN,EAAOzD,EAAO,EAAE,SAAWyD,EAAOzD,EAAO,EAAE,cAAgBoD,IAEzDK,EAAOzD,EAAO,EAAE,QAAQ,SAC1ByD,EAAOzD,EAAO,EAAE,QAAQ,QAAQ,EAK/B+D,CACT,CAKA,KAAO,CACL,GAAM,CAAE,OAAAN,EAAQ,cAAAuB,EAAe,OAAAxB,EAAQ,aAAA0E,EAAc,eAAAzB,EAAgB,OAAAK,EAAQ,QAAAzC,CAAQ,EAAI,KAKzF,GAJAA,EAAQ,cAAc,EAEtBZ,EAAOpD,EAAQ,EAAI,GAEfoD,EAAO7C,EAAM,EACf,MAAM6C,EAAO7C,EAAM,EAGrB,GAAI,CAAA6C,EAAO,UAmBX,IAfIyE,IAAiB,EACfzB,EAMFhD,EAAO,MAAM,GAAGqD,CAAM;AAAA;AAAA,EAA6B,QAAQ,EAE3DrD,EAAO,MAAM,GAAGqD,CAAM;AAAA,EAAQ,QAAQ,EAE/B9B,IAAkB,MAC3BvB,EAAO,MAAM;AAAA;AAAA;AAAA,EAAiB,QAAQ,EAGpCuB,IAAkB,MAAQkD,IAAiBlD,EAAe,CAC5D,GAAIxB,EAAOnC,EAAoB,EAC7B,MAAM,IAAIlC,GAEV,QAAQ,YAAY,IAAIA,EAAmC,CAE/D,CAEIsE,EAAOzD,EAAO,EAAE,SAAWyD,EAAOzD,EAAO,EAAE,cAAgBoD,IAEzDK,EAAOzD,EAAO,EAAE,QAAQ,SAC1ByD,EAAOzD,EAAO,EAAE,QAAQ,QAAQ,EAIpCwD,EAAO9B,EAAO,EAAE,EAClB,CAMA,QAASsC,EAAK,CACZ,GAAM,CAAE,OAAAP,EAAQ,OAAAD,EAAQ,MAAAqD,CAAM,EAAI,KAElCpD,EAAOpD,EAAQ,EAAI,GAEf2D,IACFjF,EAAOyE,EAAOtD,EAAQ,GAAK,EAAG,2CAA2C,EACzE2G,EAAM7C,CAAG,EAEb,CACF,EAEAlF,GAAO,QAAUuG,KC9kDjB,IAAA8C,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpCC,EAAO,IACP,CACJ,kCAAAC,GACA,oBAAAC,GACA,YAAAC,GACA,mBAAAC,EACF,EAAI,IACE,CACJ,KAAAC,GACA,OAAAC,GACA,QAAAC,GACA,SAAAC,GACA,SAAAC,GACA,OAAAC,GACA,YAAAC,GACA,YAAAC,GACA,OAAAC,GACA,QAAAC,GACA,qBAAAC,GACA,SAAAC,GACA,sBAAAC,GACA,cAAAC,GACA,QAAAC,GACA,MAAAC,GACA,aAAAC,GACA,QAAAC,GACA,aAAAC,EACF,EAAI,KACE,CAAE,SAAAC,EAAS,EAAI,KAEfC,GAAe,OAAO,cAAc,EAEtCC,GAGAC,GACJ,GAAI,CACFA,GAAQ,EAAQ,YAAY,CAC9B,MAAQ,CAENA,GAAQ,CAAE,UAAW,CAAC,CAAE,CAC1B,CAEA,GAAM,CACJ,UAAW,CACT,uBAAAC,GACA,oBAAAC,GACA,kBAAAC,GACA,oBAAAC,GACA,4BAAAC,GACA,oBAAAC,GACA,oBAAAC,EACF,CACF,EAAIP,GAEJ,SAASQ,GAAgBC,EAAS,CAChC,IAAMC,EAAS,CAAC,EAEhB,OAAW,CAACC,EAAMC,CAAK,IAAK,OAAO,QAAQH,CAAO,EAGhD,GAAI,MAAM,QAAQG,CAAK,EACrB,QAAWC,KAAYD,EAGrBF,EAAO,KAAK,OAAO,KAAKC,CAAI,EAAG,OAAO,KAAKE,CAAQ,CAAC,OAGtDH,EAAO,KAAK,OAAO,KAAKC,CAAI,EAAG,OAAO,KAAKC,CAAK,CAAC,EAIrD,OAAOF,CACT,CAEA,eAAeI,GAAWC,EAAQC,EAAQ,CACxCD,EAAO5B,EAAO,EAAI6B,EAElB,IAAMC,EAAUjB,GAAM,QAAQe,EAAOrC,EAAI,EAAG,CAC1C,iBAAkB,IAAMsC,EACxB,yBAA0BD,EAAOzB,EAAqB,EACtD,SAAU,CAER,WAAY,EACd,CACF,CAAC,EAED,OAAA2B,EAAQnB,EAAY,EAAI,EACxBmB,EAAQrC,EAAO,EAAImC,EACnBE,EAAQ9B,EAAO,EAAI6B,EACnBC,EAAQ1B,EAAa,EAAI,KAEzBlB,EAAK,YAAY4C,EAAS,QAASC,EAAmB,EACtD7C,EAAK,YAAY4C,EAAS,aAAcE,EAAiB,EACzD9C,EAAK,YAAY4C,EAAS,MAAOG,EAAiB,EAClD/C,EAAK,YAAY4C,EAAS,SAAUI,EAAoB,EACxDhD,EAAK,YAAY4C,EAAS,QAASK,EAAmB,EAEtDL,EAAQ,MAAM,EAEdF,EAAOxB,EAAa,EAAI0B,EACxBD,EAAOzB,EAAa,EAAI0B,EAExB5C,EAAK,YAAY2C,EAAQ,QAASO,EAAkB,EACpDlD,EAAK,YAAY2C,EAAQ,MAAOQ,EAAgB,EAChDnD,EAAK,YAAY2C,EAAQ,QAASS,EAAkB,EAEpDT,EAAOrB,EAAO,EAAI,GAClBqB,EAAO,GAAG,QAASU,EAAa,EAEzB,CACL,QAAS,KACT,kBAAmB,IACnB,MAAOC,EAAS,CACd,OAAOC,GAAQb,EAAQY,CAAO,CAChC,EACA,QAAU,CACRE,GAASd,CAAM,CACjB,EACA,QAASe,EAAKC,EAAU,CAClBf,EAAOrB,EAAO,EAChB,eAAeoC,CAAQ,EAEvBf,EAAO,QAAQc,CAAG,EAAE,GAAG,QAASC,CAAQ,CAE5C,EACA,IAAI,WAAa,CACf,OAAOf,EAAO,SAChB,EACA,MAAQ,CACN,MAAO,EACT,CACF,CACF,CAEA,SAASa,GAAUd,EAAQ,CACzB,IAAMC,EAASD,EAAO5B,EAAO,EAEzB6B,GAAQ,YAAc,KACpBD,EAAOtB,EAAK,IAAM,GAAKsB,EAAOzB,EAAqB,IAAM,GAC3D0B,EAAO,MAAM,EACbD,EAAOxB,EAAa,EAAE,MAAM,IAE5ByB,EAAO,IAAI,EACXD,EAAOxB,EAAa,EAAE,IAAI,GAGhC,CAEA,SAAS2B,GAAqBY,EAAK,CACjC3D,GAAO2D,EAAI,OAAS,8BAA8B,EAElD,KAAK3C,EAAO,EAAED,EAAM,EAAI4C,EACxB,KAAKlD,EAAO,EAAES,EAAQ,EAAEyC,CAAG,CAC7B,CAEA,SAASX,GAAmBa,EAAMC,EAAMC,EAAI,CAC1C,GAAIA,IAAO,EAAG,CACZ,IAAMJ,EAAM,IAAIrD,GAAmB,wCAAwCuD,CAAI,UAAUC,CAAI,EAAE,EAC/F,KAAK9C,EAAO,EAAED,EAAM,EAAI4C,EACxB,KAAKlD,EAAO,EAAES,EAAQ,EAAEyC,CAAG,CAC7B,CACF,CAEA,SAASV,IAAqB,CAC5B,IAAMU,EAAM,IAAItD,GAAY,oBAAqBH,EAAK,cAAc,KAAKc,EAAO,CAAC,CAAC,EAClF,KAAK,QAAQ2C,CAAG,EAChBzD,EAAK,QAAQ,KAAKc,EAAO,EAAG2C,CAAG,CACjC,CAUA,SAAST,GAAsBc,EAAW,CAKxC,IAAML,EAAM,KAAK5C,EAAM,GAAK,IAAIV,GAAY,6CAA6C2D,CAAS,GAAI9D,EAAK,cAAc,KAAKc,EAAO,CAAC,CAAC,EACjI4B,EAAS,KAAKnC,EAAO,EAY3B,GAVAmC,EAAO5B,EAAO,EAAI,KAClB4B,EAAOrB,EAAY,EAAI,KAGvB,KAAK,MAAM,EACX,KAAKH,EAAa,EAAI,KAEtBlB,EAAK,QAAQ,KAAKc,EAAO,EAAG2C,CAAG,EAG3Bf,EAAO9B,EAAW,EAAI8B,EAAOhC,EAAM,EAAE,OAAQ,CAC/C,IAAM4C,EAAUZ,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,CAAC,EAClD8B,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,GAAG,EAAI,KACxCZ,EAAK,aAAa0C,EAAQY,EAASG,CAAG,EACtCf,EAAO/B,EAAW,EAAI+B,EAAO9B,EAAW,CAC1C,CAEAd,GAAO4C,EAAOlC,EAAQ,IAAM,CAAC,EAE7BkC,EAAO,KAAK,aAAcA,EAAOrC,EAAI,EAAG,CAACqC,CAAM,EAAGe,CAAG,EAErDf,EAAOvB,EAAO,EAAE,CAClB,CAEA,SAAS8B,IAAuB,CAC9B,GAAM,CAAE,CAAC1C,EAAO,EAAGmC,CAAO,EAAI,KACxB,CAAE,CAAC5B,EAAO,EAAG6B,CAAO,EAAID,EAExBe,EAAM,KAAK3C,EAAO,EAAED,EAAM,GAAK,KAAKA,EAAM,GAAK,IAAIV,GAAY,SAAUH,EAAK,cAAc2C,CAAM,CAAC,EAKzG,GAHAD,EAAO5B,EAAO,EAAI,KAClB4B,EAAOrB,EAAY,EAAI,KAEnBqB,EAAO,UAAW,CACpB5C,GAAO4C,EAAOjC,EAAQ,IAAM,CAAC,EAG7B,IAAMsD,EAAWrB,EAAOhC,EAAM,EAAE,OAAOgC,EAAO9B,EAAW,CAAC,EAC1D,QAASoD,EAAI,EAAGA,EAAID,EAAS,OAAQC,IAAK,CACxC,IAAMV,EAAUS,EAASC,CAAC,EAC1BhE,EAAK,aAAa0C,EAAQY,EAASG,CAAG,CACxC,CACF,CACF,CAEA,SAASL,IAAsB,CAC7B,IAAMK,EAAM,KAAK5C,EAAM,GAAK,IAAIV,GAAY,SAAUH,EAAK,cAAc,IAAI,CAAC,EAExE0C,EAAS,KAAKxB,EAAa,EAAEX,EAAO,EAE1CmC,EAAO5B,EAAO,EAAI,KAClB4B,EAAOrB,EAAY,EAAI,KAEnB,KAAKH,EAAa,IAAM,MAC1B,KAAKA,EAAa,EAAE,QAAQuC,CAAG,EAGjCf,EAAO/B,EAAW,EAAI+B,EAAO9B,EAAW,EAExCd,GAAO4C,EAAOlC,EAAQ,IAAM,CAAC,EAE7BkC,EAAO,KAAK,aAAcA,EAAOrC,EAAI,EAAG,CAACqC,CAAM,EAAGe,CAAG,EAErDf,EAAOvB,EAAO,EAAE,CAClB,CAEA,SAAS+B,GAAoBO,EAAK,CAChC3D,GAAO2D,EAAI,OAAS,8BAA8B,EAElD,KAAK5C,EAAM,EAAI4C,EAEf,KAAKlD,EAAO,EAAES,EAAQ,EAAEyC,CAAG,CAC7B,CAEA,SAASN,IAAoB,CAC3BnD,EAAK,QAAQ,KAAM,IAAIG,GAAY,oBAAqBH,EAAK,cAAc,IAAI,CAAC,CAAC,CACnF,CAEA,SAASqD,IAAiB,CACxB,KAAK/B,EAAO,EAAI,EAClB,CAGA,SAAS2C,GAAyBC,EAAQ,CACxC,OAAOA,IAAW,OAASA,IAAW,QAAUA,IAAW,WAAaA,IAAW,SAAWA,IAAW,SAC3G,CAEA,SAASX,GAASb,EAAQY,EAAS,CACjC,IAAMa,EAAiBb,EAAQ,aAAeZ,EAAOnB,EAAY,EAC3DqB,EAAUF,EAAOxB,EAAa,EAC9B,CAAE,OAAAgD,EAAQ,KAAAE,EAAM,KAAAC,EAAM,QAAAC,EAAS,eAAAC,EAAgB,OAAAC,EAAQ,QAASC,CAAW,EAAInB,EACjF,CAAE,KAAAoB,CAAK,EAAIpB,EAEf,GAAIgB,EACF,OAAAtE,EAAK,aAAa0C,EAAQY,EAAS,IAAI,MAAM,8BAA8B,CAAC,EACrE,GAGT,IAAMlB,EAAU,CAAC,EACjB,QAASuC,EAAI,EAAGA,EAAIF,EAAW,OAAQE,GAAK,EAAG,CAC7C,IAAMC,EAAMH,EAAWE,EAAI,CAAC,EACtBE,EAAMJ,EAAWE,EAAI,CAAC,EAE5B,GAAI,MAAM,QAAQE,CAAG,EACnB,QAASb,EAAI,EAAGA,EAAIa,EAAI,OAAQb,IAC1B5B,EAAQwC,CAAG,EACbxC,EAAQwC,CAAG,GAAK,IAAIC,EAAIb,CAAC,CAAC,GAE1B5B,EAAQwC,CAAG,EAAIC,EAAIb,CAAC,OAIxB5B,EAAQwC,CAAG,EAAIC,CAEnB,CAGA,IAAIC,EAAS,KAEP,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAItC,EAAOrC,EAAI,EAEtC+B,EAAQR,EAAsB,EAAIyC,GAAQ,GAAGU,CAAQ,GAAGC,EAAO,IAAIA,CAAI,GAAK,EAAE,GAC9E5C,EAAQP,EAAmB,EAAIqC,EAE/B,IAAMe,EAASxB,GAAQ,CACjBH,EAAQ,SAAWA,EAAQ,YAI/BG,EAAMA,GAAO,IAAIvD,GAEjBF,EAAK,aAAa0C,EAAQY,EAASG,CAAG,EAElCqB,GAAU,OAGZA,EAAO,mBAAmB,MAAM,EAGhCA,EAAO,MAAM,EAGbpC,EAAO1B,EAAQ,EAAEyC,CAAG,EACpBf,EAAOvB,EAAO,EAAE,GAKlBnB,EAAK,QAAQ0E,EAAMjB,CAAG,EACxB,EAEA,GAAI,CAGFH,EAAQ,UAAU2B,CAAK,CACzB,OAASxB,EAAK,CACZzD,EAAK,aAAa0C,EAAQY,EAASG,CAAG,CACxC,CAEA,GAAIH,EAAQ,QACV,MAAO,GAGT,GAAIY,IAAW,UACb,OAAAtB,EAAQ,IAAI,EAKZkC,EAASlC,EAAQ,QAAQR,EAAS,CAAE,UAAW,GAAO,OAAAoC,CAAO,CAAC,EAEzDM,EAAO,QAKVA,EAAO,KAAK,QAAS,IAAM,CACzBxB,EAAQ,UAAU,KAAM,KAAMwB,CAAM,EACpC,EAAElC,EAAQnB,EAAY,EACtBiB,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,GAAG,EAAI,IAC1C,CAAC,GARD0C,EAAQ,UAAU,KAAM,KAAMwB,CAAM,EACpC,EAAElC,EAAQnB,EAAY,EACtBiB,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,GAAG,EAAI,MAS1CkE,EAAO,KAAK,QAAS,IAAM,CACzBlC,EAAQnB,EAAY,GAAK,EACrBmB,EAAQnB,EAAY,IAAM,GAAGmB,EAAQ,MAAM,CACjD,CAAC,EACDkC,EAAO,WAAWX,CAAc,EAEzB,GAMT/B,EAAQN,EAAiB,EAAIsC,EAC7BhC,EAAQL,EAAmB,EAAI,QAW/B,IAAMmD,EACJhB,IAAW,OACXA,IAAW,QACXA,IAAW,QAGTQ,GAAQ,OAAOA,EAAK,MAAS,YAE/BA,EAAK,KAAK,CAAC,EAGb,IAAIS,EAAgBnF,EAAK,WAAW0E,CAAI,EAExC,GAAI1E,EAAK,eAAe0E,CAAI,EAAG,CAC7BhD,KAAgB,KAAgC,YAEhD,GAAM,CAAC0D,EAAYC,CAAW,EAAI3D,GAAYgD,CAAI,EAClDtC,EAAQ,cAAc,EAAIiD,EAE1BX,EAAOU,EAAW,OAClBD,EAAgBC,EAAW,MAC7B,CAiBA,GAfID,GAAiB,OACnBA,EAAgB7B,EAAQ,gBAGtB6B,IAAkB,GAAK,CAACD,KAM1BC,EAAgB,MAKdlB,GAAwBC,CAAM,GAAKiB,EAAgB,GAAK7B,EAAQ,eAAiB,MAAQA,EAAQ,gBAAkB6B,EAAe,CACpI,GAAIzC,EAAO3B,EAAoB,EAC7B,OAAAf,EAAK,aAAa0C,EAAQY,EAAS,IAAIrD,EAAmC,EACnE,GAGT,QAAQ,YAAY,IAAIA,EAAmC,CAC7D,CASA,GAPIkF,GAAiB,OACnBrF,GAAO4E,EAAM,sCAAsC,EACnDtC,EAAQJ,EAA2B,EAAI,GAAGmD,CAAa,IAGzDvC,EAAQ,IAAI,EAERpB,GAAS,YAAY,eAAgB,CACvC,IAAI8D,EAAS,GACb,QAAWV,KAAOxC,EAChBkD,GAAU,GAAGV,CAAG,KAAKxC,EAAQwC,CAAG,CAAC;AAAA,EAEnCpD,GAAS,YAAY,QAAQ,CAAE,QAAA8B,EAAS,QAASgC,EAAQ,OAAQ1C,EAAQ9B,EAAO,CAAE,CAAC,CACrF,CAGA,IAAMyE,EAAkBrB,IAAW,OAASA,IAAW,QAAUQ,IAAS,KAC1E,OAAIH,GACFnC,EAAQH,EAAmB,EAAI,eAC/B6C,EAASlC,EAAQ,QAAQR,EAAS,CAAE,UAAWmD,EAAiB,OAAAf,CAAO,CAAC,EAExEM,EAAO,KAAK,WAAYU,CAAW,IAEnCV,EAASlC,EAAQ,QAAQR,EAAS,CAChC,UAAWmD,EACX,OAAAf,CACF,CAAC,EAEDgB,EAAY,GAId,EAAE5C,EAAQnB,EAAY,EACtBqD,EAAO,WAAWX,CAAc,EAEhCW,EAAO,KAAK,WAAY1C,GAAW,CACjC,GAAM,CAAE,CAACF,EAAmB,EAAGuD,EAAY,GAAGC,CAAY,EAAItD,EAQ9D,GAPAkB,EAAQ,kBAAkB,EAOtBA,EAAQ,QAAS,CACnBwB,EAAO,mBAAmB,MAAM,EAChC,MACF,CAEIxB,EAAQ,UAAU,OAAOmC,CAAU,EAAGtD,GAAeuD,CAAW,EAAGZ,EAAO,OAAO,KAAKA,CAAM,EAAG,EAAE,IAAM,IACzGA,EAAO,MAAM,CAEjB,CAAC,EAEDA,EAAO,GAAG,OAASa,GAAU,CACvBrC,EAAQ,OAAOqC,CAAK,IAAM,IAC5Bb,EAAO,MAAM,CAEjB,CAAC,EAEDA,EAAO,KAAK,MAAQrB,GAAQ,CAC1BqB,EAAO,mBAAmB,MAAM,EAI5BA,EAAO,OAAO,OAAS,MAAQA,EAAO,MAAM,MAAQ,GAGlD,CAACxB,EAAQ,SAAW,CAACA,EAAQ,WAC/BA,EAAQ,WAAW,CAAC,CAAC,EAGvBZ,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,GAAG,EAAI,KACxC8B,EAAOvB,EAAO,EAAE,IAKhB,EAAEyB,EAAQnB,EAAY,EAClBmB,EAAQnB,EAAY,IAAM,GAC5BmB,EAAQ,MAAM,EAGhBqC,EAAMxB,GAAO,IAAIrD,GAAmB,qCAAqC,CAAC,EAC1EsC,EAAOhC,EAAM,EAAEgC,EAAO9B,EAAW,GAAG,EAAI,KACxC8B,EAAO/B,EAAW,EAAI+B,EAAO9B,EAAW,EACxC8B,EAAOvB,EAAO,EAAE,EAEpB,CAAC,EAED2D,EAAO,KAAK,QAAS,IAAM,CACzBA,EAAO,mBAAmB,MAAM,EAChClC,EAAQnB,EAAY,GAAK,EACrBmB,EAAQnB,EAAY,IAAM,GAC5BmB,EAAQ,MAAM,CAElB,CAAC,EAEDkC,EAAO,KAAK,QAAS,SAAUrB,EAAK,CAClCqB,EAAO,mBAAmB,MAAM,EAChCG,EAAMxB,CAAG,CACX,CAAC,EAEDqB,EAAO,KAAK,aAAc,CAACnB,EAAMC,IAAS,CACxCkB,EAAO,mBAAmB,MAAM,EAChCG,EAAM,IAAI7E,GAAmB,wCAAwCuD,CAAI,UAAUC,CAAI,EAAE,CAAC,CAC5F,CAAC,EAEDkB,EAAO,GAAG,UAAW,IAAM,CACzBA,EAAO,mBAAmB,MAAM,CAClC,CAAC,EAEDA,EAAO,GAAG,UAAW,IAAM,CACzB,IAAMrB,EAAM,IAAIrD,GAAmB,iCAAiC+D,CAAc,GAAG,EACrFW,EAAO,mBAAmB,MAAM,EAChClC,EAAQnB,EAAY,GAAK,EAErBmB,EAAQnB,EAAY,IAAM,GAC5BmB,EAAQ,MAAM,EAGhBqC,EAAMxB,CAAG,CACX,CAAC,EAEDqB,EAAO,KAAK,WAAYc,GAAY,CAC9BtC,EAAQ,SAAWA,EAAQ,WAI/BA,EAAQ,WAAWsC,CAAQ,CAC7B,CAAC,EAEM,GAEP,SAASJ,GAAe,CAElB,CAACd,GAAQS,IAAkB,EAC7BU,GACEZ,EACAH,EACA,KACApC,EACAY,EACAZ,EAAO5B,EAAO,EACdqE,EACAD,CACF,EACSlF,EAAK,SAAS0E,CAAI,EAC3BmB,GACEZ,EACAH,EACAJ,EACAhC,EACAY,EACAZ,EAAO5B,EAAO,EACdqE,EACAD,CACF,EACSlF,EAAK,WAAW0E,CAAI,EACzB,OAAOA,EAAK,QAAW,WACzBoB,GACEb,EACAH,EACAJ,EAAK,OAAO,EACZhC,EACAY,EACAZ,EAAO5B,EAAO,EACdqE,EACAD,CACF,EAEAa,GACEd,EACAH,EACAJ,EACAhC,EACAY,EACAZ,EAAO5B,EAAO,EACdqE,EACAD,CACF,EAEOlF,EAAK,SAAS0E,CAAI,EAC3BsB,GACEf,EACAvC,EAAO5B,EAAO,EACdoE,EACAJ,EACAJ,EACAhC,EACAY,EACA6B,CACF,EACSnF,EAAK,WAAW0E,CAAI,EAC7BoB,GACEb,EACAH,EACAJ,EACAhC,EACAY,EACAZ,EAAO5B,EAAO,EACdqE,EACAD,CACF,EAEApF,GAAO,EAAK,CAEhB,CACF,CAEA,SAAS+F,GAAaZ,EAAOgB,EAAUvB,EAAMhC,EAAQY,EAASX,EAAQwC,EAAeD,EAAgB,CACnG,GAAI,CACER,GAAQ,MAAQ1E,EAAK,SAAS0E,CAAI,IACpC5E,GAAOqF,IAAkBT,EAAK,WAAY,sCAAsC,EAChFuB,EAAS,KAAK,EACdA,EAAS,MAAMvB,CAAI,EACnBuB,EAAS,OAAO,EAChBA,EAAS,IAAI,EAEb3C,EAAQ,WAAWoB,CAAI,GAGpBQ,IACHvC,EAAOrC,EAAM,EAAI,IAGnBgD,EAAQ,cAAc,EACtBZ,EAAOvB,EAAO,EAAE,CAClB,OAAS+E,EAAO,CACdjB,EAAMiB,CAAK,CACb,CACF,CAEA,SAASF,GAAaf,EAAOtC,EAAQuC,EAAgBe,EAAUvB,EAAMhC,EAAQY,EAAS6B,EAAe,CACnGrF,GAAOqF,IAAkB,GAAKzC,EAAOlC,EAAQ,IAAM,EAAG,iCAAiC,EAGvF,IAAM2F,EAAOpG,GACX2E,EACAuB,EACCxC,GAAQ,CACHA,GACFzD,EAAK,QAAQmG,EAAM1C,CAAG,EACtBwB,EAAMxB,CAAG,IAETzD,EAAK,mBAAmBmG,CAAI,EAC5B7C,EAAQ,cAAc,EAEjB4B,IACHvC,EAAOrC,EAAM,EAAI,IAGnBoC,EAAOvB,EAAO,EAAE,EAEpB,CACF,EAEAnB,EAAK,YAAYmG,EAAM,OAAQC,CAAU,EAEzC,SAASA,EAAYT,EAAO,CAC1BrC,EAAQ,WAAWqC,CAAK,CAC1B,CACF,CAEA,eAAeI,GAAWd,EAAOgB,EAAUvB,EAAMhC,EAAQY,EAASX,EAAQwC,EAAeD,EAAgB,CACvGpF,GAAOqF,IAAkBT,EAAK,KAAM,oCAAoC,EAExE,GAAI,CACF,GAAIS,GAAiB,MAAQA,IAAkBT,EAAK,KAClD,MAAM,IAAIzE,GAGZ,IAAMoG,EAAS,OAAO,KAAK,MAAM3B,EAAK,YAAY,CAAC,EAEnDuB,EAAS,KAAK,EACdA,EAAS,MAAMI,CAAM,EACrBJ,EAAS,OAAO,EAChBA,EAAS,IAAI,EAEb3C,EAAQ,WAAW+C,CAAM,EACzB/C,EAAQ,cAAc,EAEjB4B,IACHvC,EAAOrC,EAAM,EAAI,IAGnBoC,EAAOvB,EAAO,EAAE,CAClB,OAASsC,EAAK,CACZwB,EAAMxB,CAAG,CACX,CACF,CAEA,eAAeqC,GAAeb,EAAOgB,EAAUvB,EAAMhC,EAAQY,EAASX,EAAQwC,EAAeD,EAAgB,CAC3GpF,GAAOqF,IAAkB,GAAKzC,EAAOlC,EAAQ,IAAM,EAAG,mCAAmC,EAEzF,IAAIkD,EAAW,KACf,SAAS4C,GAAW,CAClB,GAAI5C,EAAU,CACZ,IAAM6C,EAAK7C,EACXA,EAAW,KACX6C,EAAG,CACL,CACF,CAEA,IAAMC,EAAe,IAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC1D5G,GAAO4D,IAAa,IAAI,EAEpBf,EAAO9B,EAAM,EACf6F,EAAO/D,EAAO9B,EAAM,CAAC,EAErB6C,EAAW+C,CAEf,CAAC,EAEDR,EACG,GAAG,QAASK,CAAO,EACnB,GAAG,QAASA,CAAO,EAEtB,GAAI,CAEF,cAAiBX,KAASjB,EAAM,CAC9B,GAAI/B,EAAO9B,EAAM,EACf,MAAM8B,EAAO9B,EAAM,EAGrB,IAAM8F,EAAMV,EAAS,MAAMN,CAAK,EAChCrC,EAAQ,WAAWqC,CAAK,EACnBgB,GACH,MAAMH,EAAa,CAEvB,CAEAP,EAAS,IAAI,EAEb3C,EAAQ,cAAc,EAEjB4B,IACHvC,EAAOrC,EAAM,EAAI,IAGnBoC,EAAOvB,EAAO,EAAE,CAClB,OAASsC,EAAK,CACZwB,EAAMxB,CAAG,CACX,QAAE,CACAwC,EACG,IAAI,QAASK,CAAO,EACpB,IAAI,QAASA,CAAO,CACzB,CACF,CAEAzG,GAAO,QAAU4C,KC1xBjB,IAAAmE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9BC,GAAM,EAAQ,UAAU,EACxBC,GAAO,EAAQ,WAAW,EAC1BC,GAAO,IACP,CAAE,SAAAC,EAAS,EAAI,KACfC,GAAU,KACVC,GAAiB,KACjB,CACJ,qBAAAC,GACA,mBAAAC,GACA,qBAAAC,EACF,EAAI,IACEC,GAAiB,KACjB,CACJ,KAAAC,GACA,YAAAC,GACA,QAAAC,GACA,MAAAC,GACA,SAAAC,GACA,UAAAC,GACA,SAAAC,GACA,SAAAC,GACA,MAAAC,GACA,OAAAC,GACA,WAAAC,GACA,YAAAC,GACA,WAAAC,GACA,yBAAAC,GACA,YAAAC,GACA,YAAAC,GACA,YAAAC,GACA,OAAAC,GACA,YAAAC,GACA,uBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,2BAAAC,GACA,gBAAAC,GACA,aAAAC,GACA,qBAAAC,GACA,WAAAC,GACA,aAAAC,GACA,SAAAC,GACA,OAAAC,GACA,SAAAC,GACA,UAAAC,GACA,cAAAC,GACA,iBAAAC,GACA,SAAAC,GACA,aAAAC,GACA,sBAAAC,GACA,QAAAC,EACF,EAAI,KACEC,GAAY,KACZC,GAAY,KAEZC,GAAiB,OAAO,gBAAgB,EAExCC,GAA8BlD,IAClCA,GAAK,eACL,OAAO,UAAUA,GAAK,aAAa,GACnCA,GAAK,cAAgB,EACnB,IAAMA,GAAK,cACX,IAAM,CAAE,MAAM,IAAIK,GAAqB,yDAAyD,CAAE,EAEhG8C,GAAO,IAAM,CAAC,EAEpB,SAASC,GAAeC,EAAQ,CAC9B,OAAOA,EAAO1B,EAAW,GAAK0B,EAAOT,EAAY,GAAG,mBAAqB,CAC3E,CAKA,IAAMU,GAAN,cAAqBlD,EAAe,CAMlC,YAAamD,EAAK,CAChB,cAAAC,EACA,eAAAC,EACA,cAAAC,EACA,eAAAC,EACA,eAAAC,EACA,YAAAC,EACA,YAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,oBAAAC,EACA,oBAAAC,EACA,0BAAAC,EACA,WAAAC,EACA,WAAAC,EACA,IAAAC,EACA,oBAAAC,EACA,kBAAAC,EACA,QAAAC,EACA,qBAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,+BAAAC,EAEA,qBAAAC,GACA,QAAAC,EACF,EAAI,CAAC,EAAG,CACN,GAAIjB,IAAc,OAChB,MAAM,IAAI1D,GAAqB,iDAAiD,EAGlF,GAAIqD,IAAkB,OACpB,MAAM,IAAIrD,GAAqB,qEAAqE,EAGtG,GAAIsD,IAAmB,OACrB,MAAM,IAAItD,GAAqB,sEAAsE,EAGvG,GAAIyD,IAAgB,OAClB,MAAM,IAAIzD,GAAqB,uDAAuD,EAGxF,GAAI4D,IAAwB,OAC1B,MAAM,IAAI5D,GAAqB,kEAAkE,EAGnG,GAAImD,GAAiB,MACnB,GAAI,CAAC,OAAO,UAAUA,CAAa,GAAKA,EAAgB,EACtD,MAAM,IAAInD,GAAqB,uBAAuB,OAKxDmD,EAAgBN,GAA4B,EAG9C,GAAIkB,GAAc,MAAQ,OAAOA,GAAe,SAC9C,MAAM,IAAI/D,GAAqB,oBAAoB,EAGrD,GAAIuD,GAAkB,OAAS,CAAC,OAAO,SAASA,CAAc,GAAKA,EAAiB,GAClF,MAAM,IAAIvD,GAAqB,wBAAwB,EAGzD,GAAI2D,GAAoB,OAAS,CAAC,OAAO,SAASA,CAAgB,GAAKA,GAAoB,GACzF,MAAM,IAAI3D,GAAqB,0BAA0B,EAG3D,GAAI6D,GAAuB,OAAS,CAAC,OAAO,SAASA,CAAmB,GAAKA,GAAuB,GAClG,MAAM,IAAI7D,GAAqB,6BAA6B,EAG9D,GAAI8D,GAA6B,MAAQ,CAAC,OAAO,SAASA,CAAyB,EACjF,MAAM,IAAI9D,GAAqB,mCAAmC,EAGpE,GAAIoD,GAAkB,OAAS,CAAC,OAAO,UAAUA,CAAc,GAAKA,EAAiB,GACnF,MAAM,IAAIpD,GAAqB,mDAAmD,EAGpF,GAAIwD,GAAe,OAAS,CAAC,OAAO,UAAUA,CAAW,GAAKA,EAAc,GAC1E,MAAM,IAAIxD,GAAqB,gDAAgD,EAGjF,GAAIoE,GAAW,MAAQ,OAAOA,GAAY,YAAc,OAAOA,GAAY,SACzE,MAAM,IAAIpE,GAAqB,yCAAyC,EAG1E,GAAIqE,GAAwB,OAAS,CAAC,OAAO,UAAUA,CAAoB,GAAKA,EAAuB,GACrG,MAAM,IAAIrE,GAAqB,gDAAgD,EAGjF,GAAIsE,GAAgB,OAAS,OAAOA,GAAiB,UAAY5E,GAAI,KAAK4E,CAAY,IAAM,GAC1F,MAAM,IAAItE,GAAqB,8CAA8C,EAG/E,GAAIuE,GAAmB,OAAS,CAAC,OAAO,UAAUA,CAAe,GAAKA,EAAkB,IACtF,MAAM,IAAIvE,GAAqB,2CAA2C,EAG5E,GACEyE,GAAkC,OACjC,CAAC,OAAO,UAAUA,CAA8B,GAAKA,EAAiC,IAEvF,MAAM,IAAIzE,GAAqB,0DAA0D,EAI3F,GAAI2E,IAAW,MAAQ,OAAOA,IAAY,UACxC,MAAM,IAAI3E,GAAqB,uCAAuC,EAGxE,GAAI0E,IAAwB,OAAS,OAAOA,IAAyB,UAAYA,GAAuB,GACtG,MAAM,IAAI1E,GAAqB,iEAAiE,EAGlG,MAAM,EAEF,OAAOoE,GAAY,aACrBA,EAAUjE,GAAe,CACvB,GAAG8D,EACH,kBAAAE,EACA,QAAAQ,GACA,WAAAZ,EACA,QAASR,EACT,GAAIiB,EAAmB,CAAE,iBAAAA,EAAkB,+BAAAC,CAA+B,EAAI,OAC9E,GAAGL,CACL,CAAC,GAGH,KAAKhE,EAAI,EAAIR,GAAK,YAAYsD,CAAG,EACjC,KAAKpB,EAAU,EAAIsC,EACnB,KAAK9C,EAAW,EAAI0C,GAAkC,EACtD,KAAKxC,EAAe,EAAI2B,EACxB,KAAKlC,EAAwB,EAAI0C,GAA2B,IAC5D,KAAKlC,EAAoB,EAAIoC,GAA8B,IAC3D,KAAKnC,EAA0B,EAAIoC,GAAoC,IACvE,KAAKvC,EAAsB,EAAI,KAAKN,EAAwB,EAC5D,KAAKZ,EAAW,EAAI,KACpB,KAAK+B,EAAa,EAAIkC,GAAsC,KAC5D,KAAK7D,EAAS,EAAI,EAClB,KAAKO,EAAU,EAAI,EACnB,KAAKE,EAAW,EAAI,SAAS,KAAKd,EAAI,EAAE,QAAQ,GAAG,KAAKA,EAAI,EAAE,KAAO,IAAI,KAAKA,EAAI,EAAE,IAAI,GAAK,EAAE;AAAA,EAC/F,KAAKwB,EAAY,EAAI4B,GAAoC,IACzD,KAAK7B,EAAe,EAAIyB,GAA0C,IAClE,KAAKvB,EAAoB,EAAIqC,GAA8B,GAC3D,KAAKnC,EAAY,EAAIsC,EACrB,KAAKzB,EAAc,EAAI,KACvB,KAAKP,EAAgB,EAAIkC,EAAkB,GAAKA,EAAkB,GAClE,KAAK/B,EAAqB,EAAIkC,IAAsD,IACpF,KAAKnC,EAAY,EAAI,KAWrB,KAAK1B,EAAM,EAAI,CAAC,EAChB,KAAKO,EAAW,EAAI,EACpB,KAAKD,EAAW,EAAI,EAEpB,KAAKsB,EAAO,EAAKmC,IAASC,GAAO,KAAMD,EAAI,EAC3C,KAAKtC,EAAQ,EAAKwC,IAAQC,GAAQ,KAAMD,EAAG,CAC7C,CAEA,IAAI,YAAc,CAChB,OAAO,KAAKxD,EAAW,CACzB,CAEA,IAAI,WAAY0D,EAAO,CACrB,KAAK1D,EAAW,EAAI0D,EACpB,KAAKvC,EAAO,EAAE,EAAI,CACpB,CAEA,IAAK9B,EAAQ,GAAK,CAChB,OAAO,KAAKE,EAAM,EAAE,OAAS,KAAKM,EAAW,CAC/C,CAEA,IAAKT,EAAQ,GAAK,CAChB,OAAO,KAAKS,EAAW,EAAI,KAAKC,EAAW,CAC7C,CAEA,IAAKR,EAAK,GAAK,CACb,OAAO,KAAKC,EAAM,EAAE,OAAS,KAAKO,EAAW,CAC/C,CAEA,IAAKN,EAAU,GAAK,CAClB,MAAO,CAAC,CAAC,KAAKyB,EAAY,GAAK,CAAC,KAAKxB,EAAW,GAAK,CAAC,KAAKwB,EAAY,EAAE,SAC3E,CAEA,IAAKhC,EAAK,GAAK,CACb,MAAO,GACL,KAAKgC,EAAY,GAAG,KAAK,IAAI,GAC5B,KAAK3B,EAAK,IAAMmC,GAAc,IAAI,GAAK,IACxC,KAAKpC,EAAQ,EAAI,EAErB,CAGA,CAACH,EAAQ,EAAGyE,EAAI,CACdb,GAAQ,IAAI,EACZ,KAAK,KAAK,UAAWa,CAAE,CACzB,CAEA,CAAC9C,EAAS,EAAG+C,EAAMC,EAAS,CAC1B,IAAMC,EAASF,EAAK,QAAU,KAAK9E,EAAI,EAAE,OACnCiF,EAAU,IAAIvF,GAAQsF,EAAQF,EAAMC,CAAO,EAEjD,YAAKtE,EAAM,EAAE,KAAKwE,CAAO,EACrB,KAAK5E,EAAS,IAEPb,GAAK,WAAWyF,EAAQ,IAAI,GAAK,MAAQzF,GAAK,WAAWyF,EAAQ,IAAI,GAE9E,KAAK5E,EAAS,EAAI,EAClB,eAAe,IAAMoE,GAAO,IAAI,CAAC,GAEjC,KAAKpC,EAAO,EAAE,EAAI,GAGhB,KAAKhC,EAAS,GAAK,KAAKO,EAAU,IAAM,GAAK,KAAKT,EAAK,IACzD,KAAKS,EAAU,EAAI,GAGd,KAAKA,EAAU,EAAI,CAC5B,CAEA,MAAOiB,EAAM,GAAK,CAGhB,OAAO,IAAI,QAASqD,GAAY,CAC1B,KAAK1E,EAAK,EACZ,KAAKgC,EAAc,EAAI0C,EAEvBA,EAAQ,IAAI,CAEhB,CAAC,CACH,CAEA,MAAOpD,EAAQ,EAAG4C,EAAK,CACrB,OAAO,IAAI,QAASQ,GAAY,CAC9B,IAAMC,EAAW,KAAK1E,EAAM,EAAE,OAAO,KAAKM,EAAW,CAAC,EACtD,QAAS,EAAI,EAAG,EAAIoE,EAAS,OAAQ,IAAK,CACxC,IAAMF,EAAUE,EAAS,CAAC,EAC1B3F,GAAK,aAAa,KAAMyF,EAASP,CAAG,CACtC,CAEA,IAAMU,EAAW,IAAM,CACjB,KAAK5C,EAAc,IAErB,KAAKA,EAAc,EAAE,EACrB,KAAKA,EAAc,EAAI,MAEzB0C,EAAQ,IAAI,CACd,EAEI,KAAK/C,EAAY,GACnB,KAAKA,EAAY,EAAE,QAAQuC,EAAKU,CAAQ,EACxC,KAAKjD,EAAY,EAAI,MAErB,eAAeiD,CAAQ,EAGzB,KAAK/C,EAAO,EAAE,CAChB,CAAC,CACH,CACF,EAEA,SAASsC,GAAS/B,EAAQ8B,EAAK,CAC7B,GACE9B,EAAOtC,EAAQ,IAAM,GACrBoE,EAAI,OAAS,gBACbA,EAAI,OAAS,iBACb,CAIArF,GAAOuD,EAAO7B,EAAW,IAAM6B,EAAO5B,EAAW,CAAC,EAElD,IAAMmE,EAAWvC,EAAOnC,EAAM,EAAE,OAAOmC,EAAO5B,EAAW,CAAC,EAE1D,QAASqE,EAAI,EAAGA,EAAIF,EAAS,OAAQE,IAAK,CACxC,IAAMJ,EAAUE,EAASE,CAAC,EAC1B7F,GAAK,aAAaoD,EAAQqC,EAASP,CAAG,CACxC,CACArF,GAAOuD,EAAOpC,EAAK,IAAM,CAAC,CAC5B,CACF,CAMA,eAAewD,GAASpB,EAAQ,CAC9BvD,GAAO,CAACuD,EAAOjC,EAAW,CAAC,EAC3BtB,GAAO,CAACuD,EAAOT,EAAY,CAAC,EAE5B,GAAI,CAAE,KAAAmD,EAAM,SAAAC,EAAU,SAAAC,EAAU,KAAAC,CAAK,EAAI7C,EAAO5C,EAAI,EAGpD,GAAIuF,EAAS,CAAC,IAAM,IAAK,CACvB,IAAMG,EAAMH,EAAS,QAAQ,GAAG,EAEhClG,GAAOqG,IAAQ,EAAE,EACjB,IAAMC,EAAKJ,EAAS,UAAU,EAAGG,CAAG,EAEpCrG,GAAOC,GAAI,OAAOqG,CAAE,CAAC,EACrBJ,EAAWI,CACb,CAEA/C,EAAOjC,EAAW,EAAI,GAElBlB,GAAS,cAAc,gBACzBA,GAAS,cAAc,QAAQ,CAC7B,cAAe,CACb,KAAA6F,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EACA,QAAS7C,EAAOT,EAAY,GAAG,QAC/B,WAAYS,EAAO3C,EAAW,EAC9B,aAAc2C,EAAOZ,EAAa,CACpC,EACA,UAAWY,EAAOlB,EAAU,CAC9B,CAAC,EAGH,GAAI,CACF,IAAMkE,EAAS,MAAM,IAAI,QAAQ,CAACV,EAASW,IAAW,CACpDjD,EAAOlB,EAAU,EAAE,CACjB,KAAA4D,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EACA,WAAY7C,EAAO3C,EAAW,EAC9B,aAAc2C,EAAOZ,EAAa,CACpC,EAAG,CAAC0C,EAAKkB,IAAW,CACdlB,EACFmB,EAAOnB,CAAG,EAEVQ,EAAQU,CAAM,CAElB,CAAC,CACH,CAAC,EAED,GAAIhD,EAAO,UAAW,CACpBpD,GAAK,QAAQoG,EAAO,GAAG,QAASlD,EAAI,EAAG,IAAI5C,EAAsB,EACjE,MACF,CAEAT,GAAOuG,CAAM,EAEb,GAAI,CACFhD,EAAOT,EAAY,EAAIyD,EAAO,eAAiB,KAC3C,MAAMrD,GAAUK,EAAQgD,CAAM,EAC9B,MAAMtD,GAAUM,EAAQgD,CAAM,CACpC,OAASlB,EAAK,CACZ,MAAAkB,EAAO,QAAQ,EAAE,GAAG,QAASlD,EAAI,EAC3BgC,CACR,CAEA9B,EAAOjC,EAAW,EAAI,GAEtBiF,EAAOhE,EAAQ,EAAI,EACnBgE,EAAOjE,EAAY,EAAIiB,EAAOjB,EAAY,EAC1CiE,EAAO1F,EAAO,EAAI0C,EAClBgD,EAAO3E,EAAM,EAAI,KAEbxB,GAAS,UAAU,gBACrBA,GAAS,UAAU,QAAQ,CACzB,cAAe,CACb,KAAA6F,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EACA,QAAS7C,EAAOT,EAAY,GAAG,QAC/B,WAAYS,EAAO3C,EAAW,EAC9B,aAAc2C,EAAOZ,EAAa,CACpC,EACA,UAAWY,EAAOlB,EAAU,EAC5B,OAAAkE,CACF,CAAC,EAEHhD,EAAO,KAAK,UAAWA,EAAO5C,EAAI,EAAG,CAAC4C,CAAM,CAAC,CAC/C,OAAS8B,EAAK,CACZ,GAAI9B,EAAO,UACT,OAqBF,GAlBAA,EAAOjC,EAAW,EAAI,GAElBlB,GAAS,aAAa,gBACxBA,GAAS,aAAa,QAAQ,CAC5B,cAAe,CACb,KAAA6F,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EACA,QAAS7C,EAAOT,EAAY,GAAG,QAC/B,WAAYS,EAAO3C,EAAW,EAC9B,aAAc2C,EAAOZ,EAAa,CACpC,EACA,UAAWY,EAAOlB,EAAU,EAC5B,MAAOgD,CACT,CAAC,EAGCA,EAAI,OAAS,+BAEf,IADArF,GAAOuD,EAAOtC,EAAQ,IAAM,CAAC,EACtBsC,EAAOrC,EAAQ,EAAI,GAAKqC,EAAOnC,EAAM,EAAEmC,EAAO7B,EAAW,CAAC,EAAE,aAAe6B,EAAO3C,EAAW,GAAG,CACrG,IAAMgF,EAAUrC,EAAOnC,EAAM,EAAEmC,EAAO7B,EAAW,GAAG,EACpDvB,GAAK,aAAaoD,EAAQqC,EAASP,CAAG,CACxC,MAEAC,GAAQ/B,EAAQ8B,CAAG,EAGrB9B,EAAO,KAAK,kBAAmBA,EAAO5C,EAAI,EAAG,CAAC4C,CAAM,EAAG8B,CAAG,CAC5D,CAEA9B,EAAOP,EAAO,EAAE,CAClB,CAEA,SAASyD,GAAWlD,EAAQ,CAC1BA,EAAOhC,EAAU,EAAI,EACrBgC,EAAO,KAAK,QAASA,EAAO5C,EAAI,EAAG,CAAC4C,CAAM,CAAC,CAC7C,CAEA,SAAS6B,GAAQ7B,EAAQ4B,EAAM,CACzB5B,EAAOvC,EAAS,IAAM,IAI1BuC,EAAOvC,EAAS,EAAI,EAEpB0F,GAAQnD,EAAQ4B,CAAI,EACpB5B,EAAOvC,EAAS,EAAI,EAEhBuC,EAAO5B,EAAW,EAAI,MACxB4B,EAAOnC,EAAM,EAAE,OAAO,EAAGmC,EAAO5B,EAAW,CAAC,EAC5C4B,EAAO7B,EAAW,GAAK6B,EAAO5B,EAAW,EACzC4B,EAAO5B,EAAW,EAAI,GAE1B,CAEA,SAAS+E,GAASnD,EAAQ4B,EAAM,CAC9B,OAAa,CACX,GAAI5B,EAAO,UAAW,CACpBvD,GAAOuD,EAAOrC,EAAQ,IAAM,CAAC,EAC7B,MACF,CAEA,GAAIqC,EAAOJ,EAAc,GAAK,CAACI,EAAOpC,EAAK,EAAG,CAC5CoC,EAAOJ,EAAc,EAAE,EACvBI,EAAOJ,EAAc,EAAI,KACzB,MACF,CAMA,GAJII,EAAOT,EAAY,GACrBS,EAAOT,EAAY,EAAE,OAAO,EAG1BS,EAAOzC,EAAK,EACdyC,EAAOhC,EAAU,EAAI,UACZgC,EAAOhC,EAAU,IAAM,EAAG,CAC/B4D,GACF5B,EAAOhC,EAAU,EAAI,EACrB,eAAe,IAAMkF,GAAUlD,CAAM,CAAC,GAEtCkD,GAAUlD,CAAM,EAElB,QACF,CAMA,GAJIA,EAAOrC,EAAQ,IAAM,GAIrBqC,EAAOtC,EAAQ,IAAMqC,GAAcC,CAAM,GAAK,GAChD,OAGF,IAAMqC,EAAUrC,EAAOnC,EAAM,EAAEmC,EAAO7B,EAAW,CAAC,EAElD,GAAI6B,EAAO5C,EAAI,EAAE,WAAa,UAAY4C,EAAO3C,EAAW,IAAMgF,EAAQ,WAAY,CACpF,GAAIrC,EAAOtC,EAAQ,EAAI,EACrB,OAGFsC,EAAO3C,EAAW,EAAIgF,EAAQ,WAC9BrC,EAAOT,EAAY,GAAG,QAAQ,IAAItC,GAAmB,oBAAoB,EAAG,IAAM,CAChF+C,EAAOT,EAAY,EAAI,KACvBsC,GAAO7B,CAAM,CACf,CAAC,CACH,CAEA,GAAIA,EAAOjC,EAAW,EACpB,OAGF,GAAI,CAACiC,EAAOT,EAAY,EAAG,CACzB6B,GAAQpB,CAAM,EACd,MACF,CAMA,GAJIA,EAAOT,EAAY,EAAE,WAIrBS,EAAOT,EAAY,EAAE,KAAK8C,CAAO,EACnC,OAGE,CAACA,EAAQ,SAAWrC,EAAOT,EAAY,EAAE,MAAM8C,CAAO,EACxDrC,EAAO7B,EAAW,IAElB6B,EAAOnC,EAAM,EAAE,OAAOmC,EAAO7B,EAAW,EAAG,CAAC,CAEhD,CACF,CAEA3B,GAAO,QAAUyD,KChmBjB,IAAAmD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cA4DA,IAAMC,GAAN,KAA0B,CACxB,aAAe,CAIb,KAAK,OAAS,EAId,KAAK,IAAM,EAIX,KAAK,KAAO,IAAI,MAAM,IAAK,EAAE,KAAK,MAAS,EAI3C,KAAK,KAAO,IACd,CAKA,SAAW,CACT,OAAO,KAAK,MAAQ,KAAK,MAC3B,CAKA,QAAU,CACR,OAAS,KAAK,IAAM,EAAK,QAAW,KAAK,MAC3C,CAMA,KAAMC,EAAM,CACV,KAAK,KAAK,KAAK,GAAG,EAAIA,EACtB,KAAK,IAAO,KAAK,IAAM,EAAK,IAC9B,CAKA,OAAS,CACP,IAAMC,EAAW,KAAK,KAAK,KAAK,MAAM,EACtC,OAAIA,IAAa,OAAoB,MACrC,KAAK,KAAK,KAAK,MAAM,EAAI,OACzB,KAAK,OAAU,KAAK,OAAS,EAAK,KAC3BA,EACT,CACF,EAKAH,GAAO,QAAU,KAAiB,CAChC,aAAe,CAIb,KAAK,KAAO,KAAK,KAAO,IAAIC,EAC9B,CAKA,SAAW,CACT,OAAO,KAAK,KAAK,QAAQ,CAC3B,CAKA,KAAMC,EAAM,CACN,KAAK,KAAK,OAAO,IAGnB,KAAK,KAAO,KAAK,KAAK,KAAO,IAAID,IAEnC,KAAK,KAAK,KAAKC,CAAI,CACrB,CAKA,OAAS,CACP,IAAME,EAAO,KAAK,KACZC,EAAOD,EAAK,MAAM,EACxB,OAAIA,EAAK,QAAQ,GAAKA,EAAK,OAAS,OAElC,KAAK,KAAOA,EAAK,KACjBA,EAAK,KAAO,MAEPC,CACT,CACF,IC9JA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,MAAAC,GAAO,WAAAC,GAAY,SAAAC,GAAU,QAAAC,GAAS,SAAAC,GAAU,MAAAC,EAAM,EAAI,KAC5DC,GAAQ,OAAO,MAAM,EAErBC,GAAN,KAAgB,CACd,YAAaC,EAAM,CACjB,KAAKF,EAAK,EAAIE,CAChB,CAEA,IAAI,WAAa,CACf,OAAO,KAAKF,EAAK,EAAEL,EAAU,CAC/B,CAEA,IAAI,MAAQ,CACV,OAAO,KAAKK,EAAK,EAAEN,EAAK,CAC1B,CAEA,IAAI,SAAW,CACb,OAAO,KAAKM,EAAK,EAAEJ,EAAQ,CAC7B,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKI,EAAK,EAAEH,EAAO,CAC5B,CAEA,IAAI,SAAW,CACb,OAAO,KAAKG,EAAK,EAAEF,EAAQ,CAC7B,CAEA,IAAI,MAAQ,CACV,OAAO,KAAKE,EAAK,EAAED,EAAK,CAC1B,CACF,EAEAN,GAAO,QAAUQ,KCnCjB,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAiB,KACjBC,GAAa,KACb,CAAE,WAAAC,GAAY,MAAAC,GAAO,SAAAC,GAAU,SAAAC,GAAU,QAAAC,GAAS,MAAAC,GAAO,MAAAC,GAAO,KAAAC,GAAM,OAAAC,GAAQ,SAAAC,GAAU,UAAAC,EAAU,EAAI,KACtGC,GAAY,KAEZC,GAAW,OAAO,SAAS,EAC3BC,GAAa,OAAO,WAAW,EAC/BC,GAAS,OAAO,OAAO,EACvBC,GAAiB,OAAO,gBAAgB,EACxCC,GAAW,OAAO,SAAS,EAC3BC,GAAa,OAAO,WAAW,EAC/BC,GAAgB,OAAO,cAAc,EACrCC,GAAqB,OAAO,mBAAmB,EAC/CC,GAAiB,OAAO,gBAAgB,EACxCC,GAAa,OAAO,YAAY,EAChCC,GAAgB,OAAO,eAAe,EACtCC,GAAS,OAAO,OAAO,EAEvBC,GAAN,cAAuB1B,EAAe,CACpC,aAAe,CACb,MAAM,EAEN,KAAKgB,EAAM,EAAI,IAAIf,GACnB,KAAKa,EAAQ,EAAI,CAAC,EAClB,KAAKR,EAAO,EAAI,EAEhB,IAAMqB,EAAO,KAEb,KAAKT,EAAQ,EAAI,SAAkBU,EAAQC,EAAS,CAClD,IAAMC,EAAQH,EAAKX,EAAM,EAErBe,EAAY,GAEhB,KAAO,CAACA,GAAW,CACjB,IAAMC,EAAOF,EAAM,MAAM,EACzB,GAAI,CAACE,EACH,MAEFL,EAAKrB,EAAO,IACZyB,EAAY,CAAC,KAAK,SAASC,EAAK,KAAMA,EAAK,OAAO,CACpD,CAEA,KAAKjB,EAAU,EAAIgB,EAEf,CAAC,KAAKhB,EAAU,GAAKY,EAAKZ,EAAU,IACtCY,EAAKZ,EAAU,EAAI,GACnBY,EAAK,KAAK,QAASC,EAAQ,CAACD,EAAM,GAAGE,CAAO,CAAC,GAG3CF,EAAKV,EAAc,GAAKa,EAAM,QAAQ,GACxC,QACG,IAAIH,EAAKb,EAAQ,EAAE,IAAImB,GAAKA,EAAE,MAAM,CAAC,CAAC,EACtC,KAAKN,EAAKV,EAAc,CAAC,CAEhC,EAEA,KAAKE,EAAU,EAAI,CAACS,EAAQC,IAAY,CACtCF,EAAK,KAAK,UAAWC,EAAQ,CAACD,EAAM,GAAGE,CAAO,CAAC,CACjD,EAEA,KAAKT,EAAa,EAAI,CAACQ,EAAQC,EAASK,IAAQ,CAC9CP,EAAK,KAAK,aAAcC,EAAQ,CAACD,EAAM,GAAGE,CAAO,EAAGK,CAAG,CACzD,EAEA,KAAKb,EAAkB,EAAI,CAACO,EAAQC,EAASK,IAAQ,CACnDP,EAAK,KAAK,kBAAmBC,EAAQ,CAACD,EAAM,GAAGE,CAAO,EAAGK,CAAG,CAC9D,EAEA,KAAKT,EAAM,EAAI,IAAIZ,GAAU,IAAI,CACnC,CAEA,IAAKN,EAAK,GAAK,CACb,OAAO,KAAKQ,EAAU,CACxB,CAEA,IAAKb,EAAU,GAAK,CAClB,OAAO,KAAKY,EAAQ,EAAE,OAAOqB,GAAUA,EAAOjC,EAAU,CAAC,EAAE,MAC7D,CAEA,IAAKM,EAAK,GAAK,CACb,OAAO,KAAKM,EAAQ,EAAE,OAAOqB,GAAUA,EAAOjC,EAAU,GAAK,CAACiC,EAAOpB,EAAU,CAAC,EAAE,MACpF,CAEA,IAAKV,EAAQ,GAAK,CAChB,IAAI+B,EAAM,KAAK9B,EAAO,EACtB,OAAW,CAAE,CAACD,EAAQ,EAAGgC,CAAQ,IAAK,KAAKvB,EAAQ,EACjDsB,GAAOC,EAET,OAAOD,CACT,CAEA,IAAKhC,EAAQ,GAAK,CAChB,IAAIgC,EAAM,EACV,OAAW,CAAE,CAAChC,EAAQ,EAAGkC,CAAQ,IAAK,KAAKxB,EAAQ,EACjDsB,GAAOE,EAET,OAAOF,CACT,CAEA,IAAKjC,EAAK,GAAK,CACb,IAAIiC,EAAM,KAAK9B,EAAO,EACtB,OAAW,CAAE,CAACH,EAAK,EAAGoC,CAAK,IAAK,KAAKzB,EAAQ,EAC3CsB,GAAOG,EAET,OAAOH,CACT,CAEA,IAAI,OAAS,CACX,OAAO,KAAKX,EAAM,CACpB,CAEA,MAAOf,EAAM,GAAK,CACZ,KAAKM,EAAM,EAAE,QAAQ,EACvB,MAAM,QAAQ,IAAI,KAAKF,EAAQ,EAAE,IAAImB,GAAKA,EAAE,MAAM,CAAC,CAAC,EAEpD,MAAM,IAAI,QAASO,GAAY,CAC7B,KAAKvB,EAAc,EAAIuB,CACzB,CAAC,CAEL,CAEA,MAAO7B,EAAQ,EAAGuB,EAAK,CACrB,OAAa,CACX,IAAMF,EAAO,KAAKhB,EAAM,EAAE,MAAM,EAChC,GAAI,CAACgB,EACH,MAEFA,EAAK,QAAQ,QAAQE,CAAG,CAC1B,CAEA,MAAM,QAAQ,IAAI,KAAKpB,EAAQ,EAAE,IAAImB,GAAKA,EAAE,QAAQC,CAAG,CAAC,CAAC,CAC3D,CAEA,CAACtB,EAAS,EAAG6B,EAAMC,EAAS,CAC1B,IAAMC,EAAa,KAAKrB,EAAc,EAAE,EAExC,OAAKqB,EAIOA,EAAW,SAASF,EAAMC,CAAO,IAC3CC,EAAW5B,EAAU,EAAI,GACzB,KAAKA,EAAU,EAAI,CAAC,KAAKO,EAAc,EAAE,IALzC,KAAKP,EAAU,EAAI,GACnB,KAAKC,EAAM,EAAE,KAAK,CAAE,KAAAyB,EAAM,QAAAC,CAAQ,CAAC,EACnC,KAAKpC,EAAO,KAMP,CAAC,KAAKS,EAAU,CACzB,CAEA,CAACQ,EAAU,EAAGY,EAAQ,CACpB,OAAAA,EACG,GAAG,QAAS,KAAKjB,EAAQ,CAAC,EAC1B,GAAG,UAAW,KAAKC,EAAU,CAAC,EAC9B,GAAG,aAAc,KAAKC,EAAa,CAAC,EACpC,GAAG,kBAAmB,KAAKC,EAAkB,CAAC,EAEjD,KAAKP,EAAQ,EAAE,KAAKqB,CAAM,EAEtB,KAAKpB,EAAU,GACjB,eAAe,IAAM,CACf,KAAKA,EAAU,GACjB,KAAKG,EAAQ,EAAEiB,EAAO1B,EAAI,EAAG,CAAC,KAAM0B,CAAM,CAAC,CAE/C,CAAC,EAGI,IACT,CAEA,CAACX,EAAa,EAAGW,EAAQ,CACvBA,EAAO,MAAM,IAAM,CACjB,IAAMS,EAAM,KAAK9B,EAAQ,EAAE,QAAQqB,CAAM,EACrCS,IAAQ,IACV,KAAK9B,EAAQ,EAAE,OAAO8B,EAAK,CAAC,CAEhC,CAAC,EAED,KAAK7B,EAAU,EAAI,KAAKD,EAAQ,EAAE,KAAK6B,GACrC,CAACA,EAAW5B,EAAU,GACtB4B,EAAW,SAAW,IACtBA,EAAW,YAAc,EAC1B,CACH,CACF,EAEA5C,GAAO,QAAU,CACf,SAAA2B,GACA,SAAAZ,GACA,WAAAC,GACA,WAAAQ,GACA,cAAAC,GACA,eAAAF,EACF,ICjMA,IAAAuB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,SAAAC,GACA,SAAAC,GACA,WAAAC,GACA,WAAAC,GACA,eAAAC,EACF,EAAI,KACEC,GAAS,KACT,CACJ,qBAAAC,EACF,EAAI,IACEC,GAAO,IACP,CAAE,KAAAC,EAAK,EAAI,KACXC,GAAiB,KAEjBC,GAAW,OAAO,SAAS,EAC3BC,GAAe,OAAO,aAAa,EACnCC,GAAW,OAAO,SAAS,EAEjC,SAASC,GAAgBC,EAAQC,EAAM,CACrC,OAAO,IAAIV,GAAOS,EAAQC,CAAI,CAChC,CAEA,IAAMC,GAAN,cAAmBhB,EAAS,CAC1B,YAAac,EAAQ,CACnB,YAAAG,EACA,QAAAC,EAAUL,GACV,QAAAM,EACA,eAAAC,EACA,IAAAC,EACA,kBAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,+BAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAI,CAAC,EAAG,CACN,GAAIV,GAAe,OAAS,CAAC,OAAO,SAASA,CAAW,GAAKA,EAAc,GACzE,MAAM,IAAIX,GAAqB,qBAAqB,EAGtD,GAAI,OAAOY,GAAY,WACrB,MAAM,IAAIZ,GAAqB,6BAA6B,EAG9D,GAAIa,GAAW,MAAQ,OAAOA,GAAY,YAAc,OAAOA,GAAY,SACzE,MAAM,IAAIb,GAAqB,yCAAyC,EAG1E,MAAM,EAEF,OAAOa,GAAY,aACrBA,EAAUV,GAAe,CACvB,GAAGY,EACH,kBAAAC,EACA,QAAAI,EACA,WAAAH,EACA,QAASH,EACT,GAAII,EAAmB,CAAE,iBAAAA,EAAkB,+BAAAC,CAA+B,EAAI,OAC9E,GAAGN,CACL,CAAC,GAGH,KAAKR,EAAY,EAAIM,GAAe,KACpC,KAAKT,EAAI,EAAID,GAAK,YAAYO,CAAM,EACpC,KAAKJ,EAAQ,EAAI,CAAE,GAAGH,GAAK,UAAUoB,CAAO,EAAG,QAAAR,EAAS,QAAAO,CAAQ,EAChE,KAAKhB,EAAQ,EAAE,aAAeiB,EAAQ,aAClC,CAAE,GAAGA,EAAQ,YAAa,EAC1B,OACJ,KAAKf,EAAQ,EAAIM,CACnB,CAEA,CAACd,EAAc,GAAK,CAClB,QAAWwB,KAAU,KAAK3B,EAAQ,EAChC,GAAI,CAAC2B,EAAO1B,EAAU,EACpB,OAAO0B,EAIX,GAAI,CAAC,KAAKjB,EAAY,GAAK,KAAKV,EAAQ,EAAE,OAAS,KAAKU,EAAY,EAAG,CACrE,IAAMkB,EAAa,KAAKjB,EAAQ,EAAE,KAAKJ,EAAI,EAAG,KAAKE,EAAQ,CAAC,EAC5D,YAAKP,EAAU,EAAE0B,CAAU,EACpBA,CACT,CACF,CACF,EAEA9B,GAAO,QAAUiB,KCzFjB,IAAAc,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,iCAAAC,GACA,qBAAAC,EACF,EAAI,IACE,CACJ,SAAAC,GACA,SAAAC,GACA,WAAAC,GACA,WAAAC,GACA,cAAAC,GACA,eAAAC,EACF,EAAI,KACEC,GAAO,KACP,CAAE,KAAAC,EAAK,EAAI,KACX,CAAE,YAAAC,EAAY,EAAI,IAClBC,GAAW,OAAO,SAAS,EAE3BC,GAAW,OAAO,SAAS,EAC3BC,GAAyB,OAAO,wBAAwB,EACxDC,GAAiB,OAAO,gBAAgB,EACxCC,GAAS,OAAO,QAAQ,EACxBC,GAAU,OAAO,SAAS,EAC1BC,GAAsB,OAAO,qBAAqB,EAClDC,GAAgB,OAAO,eAAe,EAU5C,SAASC,GAA0BC,EAAGC,EAAG,CACvC,GAAID,IAAM,EAAG,OAAOC,EAEpB,KAAOA,IAAM,GAAG,CACd,IAAMC,EAAID,EACVA,EAAID,EAAIC,EACRD,EAAIE,CACN,CACA,OAAOF,CACT,CAEA,SAASG,GAAgBC,EAAQC,EAAM,CACrC,OAAO,IAAIjB,GAAKgB,EAAQC,CAAI,CAC9B,CAEA,IAAMC,GAAN,cAA2BxB,EAAS,CAClC,YAAayB,EAAY,CAAC,EAAG,CAAE,QAAAC,EAAUL,GAAgB,GAAGE,CAAK,EAAI,CAAC,EAAG,CACvE,GAAI,OAAOG,GAAY,WACrB,MAAM,IAAI3B,GAAqB,6BAA6B,EAG9D,MAAM,EAEN,KAAKW,EAAQ,EAAIa,EACjB,KAAKV,EAAM,EAAI,GACf,KAAKD,EAAc,EAAI,EAEvB,KAAKG,EAAmB,EAAI,KAAKL,EAAQ,EAAE,oBAAsB,IACjE,KAAKM,EAAa,EAAI,KAAKN,EAAQ,EAAE,cAAgB,GAEhD,MAAM,QAAQe,CAAS,IAC1BA,EAAY,CAACA,CAAS,GAGxB,KAAKhB,EAAQ,EAAIiB,EAEjB,QAAWC,KAAYF,EACrB,KAAK,YAAYE,CAAQ,EAE3B,KAAK,yBAAyB,CAChC,CAEA,YAAaA,EAAU,CACrB,IAAMC,EAAiBpB,GAAYmB,CAAQ,EAAE,OAE7C,GAAI,KAAK1B,EAAQ,EAAE,KAAM4B,GACvBA,EAAKtB,EAAI,EAAE,SAAWqB,GACtBC,EAAK,SAAW,IAChBA,EAAK,YAAc,EACpB,EACC,OAAO,KAET,IAAMA,EAAO,KAAKpB,EAAQ,EAAEmB,EAAgB,OAAO,OAAO,CAAC,EAAG,KAAKlB,EAAQ,CAAC,CAAC,EAE7E,KAAKP,EAAU,EAAE0B,CAAI,EACrBA,EAAK,GAAG,UAAW,IAAM,CACvBA,EAAKf,EAAO,EAAI,KAAK,IAAI,KAAKC,EAAmB,EAAGc,EAAKf,EAAO,EAAI,KAAKE,EAAa,CAAC,CACzF,CAAC,EAEDa,EAAK,GAAG,kBAAmB,IAAM,CAC/BA,EAAKf,EAAO,EAAI,KAAK,IAAI,EAAGe,EAAKf,EAAO,EAAI,KAAKE,EAAa,CAAC,EAC/D,KAAK,yBAAyB,CAChC,CAAC,EAEDa,EAAK,GAAG,aAAc,IAAIC,IAAS,CACjC,IAAMC,EAAMD,EAAK,CAAC,EACdC,GAAOA,EAAI,OAAS,mBAEtBF,EAAKf,EAAO,EAAI,KAAK,IAAI,EAAGe,EAAKf,EAAO,EAAI,KAAKE,EAAa,CAAC,EAC/D,KAAK,yBAAyB,EAElC,CAAC,EAED,QAAWgB,KAAU,KAAK/B,EAAQ,EAChC+B,EAAOlB,EAAO,EAAI,KAAKC,EAAmB,EAG5C,YAAK,yBAAyB,EAEvB,IACT,CAEA,0BAA4B,CAC1B,IAAIkB,EAAS,EACb,QAASC,EAAI,EAAGA,EAAI,KAAKjC,EAAQ,EAAE,OAAQiC,IACzCD,EAAShB,GAAyB,KAAKhB,EAAQ,EAAEiC,CAAC,EAAEpB,EAAO,EAAGmB,CAAM,EAGtE,KAAKtB,EAAsB,EAAIsB,CACjC,CAEA,eAAgBN,EAAU,CACxB,IAAMC,EAAiBpB,GAAYmB,CAAQ,EAAE,OAEvCE,EAAO,KAAK5B,EAAQ,EAAE,KAAM4B,GAChCA,EAAKtB,EAAI,EAAE,SAAWqB,GACtBC,EAAK,SAAW,IAChBA,EAAK,YAAc,EACpB,EAED,OAAIA,GACF,KAAKzB,EAAa,EAAEyB,CAAI,EAGnB,IACT,CAEA,IAAI,WAAa,CACf,OAAO,KAAK5B,EAAQ,EACjB,OAAOkC,GAAcA,EAAW,SAAW,IAAQA,EAAW,YAAc,EAAI,EAChF,IAAKC,GAAMA,EAAE7B,EAAI,EAAE,MAAM,CAC9B,CAEA,CAACF,EAAc,GAAK,CAIlB,GAAI,KAAKJ,EAAQ,EAAE,SAAW,EAC5B,MAAM,IAAIH,GAeZ,GANI,CANe,KAAKG,EAAQ,EAAE,KAAKkC,GACrC,CAACA,EAAWjC,EAAU,GACtBiC,EAAW,SAAW,IACtBA,EAAW,YAAc,EAC1B,GAMsB,KAAKlC,EAAQ,EAAE,IAAI4B,GAAQA,EAAK3B,EAAU,CAAC,EAAE,OAAO,CAACgB,EAAGC,IAAMD,GAAKC,EAAG,EAAI,EAG/F,OAGF,IAAIkB,EAAU,EAEVC,EAAiB,KAAKrC,EAAQ,EAAE,UAAU4B,GAAQ,CAACA,EAAK3B,EAAU,CAAC,EAEvE,KAAOmC,IAAY,KAAKpC,EAAQ,EAAE,QAAQ,CACxC,KAAKY,EAAM,GAAK,KAAKA,EAAM,EAAI,GAAK,KAAKZ,EAAQ,EAAE,OACnD,IAAM4B,EAAO,KAAK5B,EAAQ,EAAE,KAAKY,EAAM,CAAC,EAgBxC,GAbIgB,EAAKf,EAAO,EAAI,KAAKb,EAAQ,EAAEqC,CAAc,EAAExB,EAAO,GAAK,CAACe,EAAK3B,EAAU,IAC7EoC,EAAiB,KAAKzB,EAAM,GAI1B,KAAKA,EAAM,IAAM,IAEnB,KAAKD,EAAc,EAAI,KAAKA,EAAc,EAAI,KAAKD,EAAsB,EAErE,KAAKC,EAAc,GAAK,IAC1B,KAAKA,EAAc,EAAI,KAAKG,EAAmB,IAG/Cc,EAAKf,EAAO,GAAK,KAAKF,EAAc,GAAM,CAACiB,EAAK3B,EAAU,EAC5D,OAAO2B,CAEX,CAEA,YAAKjB,EAAc,EAAI,KAAKX,EAAQ,EAAEqC,CAAc,EAAExB,EAAO,EAC7D,KAAKD,EAAM,EAAIyB,EACR,KAAKrC,EAAQ,EAAEqC,CAAc,CACtC,CACF,EAEAzC,GAAO,QAAU2B,KC7MjB,IAAAe,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,qBAAAC,EAAqB,EAAI,IAC3B,CAAE,SAAAC,GAAU,SAAAC,GAAU,OAAAC,GAAQ,SAAAC,GAAU,UAAAC,EAAU,EAAI,KACtDC,GAAiB,KACjBC,GAAO,KACPC,GAAS,KACTC,GAAO,IAEPC,GAAa,OAAO,WAAW,EAC/BC,GAAgB,OAAO,cAAc,EACrCC,GAAqB,OAAO,mBAAmB,EAC/CC,GAAW,OAAO,SAAS,EAC3BC,GAAW,OAAO,SAAS,EAC3BC,GAAW,OAAO,SAAS,EAEjC,SAASC,GAAgBC,EAAQC,EAAM,CACrC,OAAOA,GAAQA,EAAK,cAAgB,EAChC,IAAIV,GAAOS,EAAQC,CAAI,EACvB,IAAIX,GAAKU,EAAQC,CAAI,CAC3B,CAEA,IAAMC,GAAN,cAAoBb,EAAe,CACjC,YAAa,CAAE,QAAAc,EAAUJ,GAAgB,QAAAK,EAAS,GAAGC,CAAQ,EAAI,CAAC,EAAG,CACnE,GAAI,OAAOF,GAAY,WACrB,MAAM,IAAIpB,GAAqB,6BAA6B,EAG9D,GAAIqB,GAAW,MAAQ,OAAOA,GAAY,YAAc,OAAOA,GAAY,SACzE,MAAM,IAAIrB,GAAqB,yCAAyC,EAG1E,MAAM,EAEFqB,GAAW,OAAOA,GAAY,aAChCA,EAAU,CAAE,GAAGA,CAAQ,GAGzB,KAAKN,EAAQ,EAAI,CAAE,GAAGN,GAAK,UAAUa,CAAO,EAAG,QAAAD,CAAQ,EACvD,KAAKP,EAAQ,EAAIM,EACjB,KAAKnB,EAAQ,EAAI,IAAI,IAErB,KAAKY,EAAQ,EAAI,CAACI,EAAQM,IAAY,CACpC,KAAK,KAAK,QAASN,EAAQ,CAAC,KAAM,GAAGM,CAAO,CAAC,CAC/C,EAEA,KAAKb,EAAU,EAAI,CAACO,EAAQM,IAAY,CACtC,KAAK,KAAK,UAAWN,EAAQ,CAAC,KAAM,GAAGM,CAAO,CAAC,CACjD,EAEA,KAAKZ,EAAa,EAAI,CAACM,EAAQM,EAASC,IAAQ,CAC9C,KAAK,KAAK,aAAcP,EAAQ,CAAC,KAAM,GAAGM,CAAO,EAAGC,CAAG,CACzD,EAEA,KAAKZ,EAAkB,EAAI,CAACK,EAAQM,EAASC,IAAQ,CACnD,KAAK,KAAK,kBAAmBP,EAAQ,CAAC,KAAM,GAAGM,CAAO,EAAGC,CAAG,CAC9D,CACF,CAEA,IAAKtB,EAAQ,GAAK,CAChB,IAAIuB,EAAM,EACV,QAAWC,KAAU,KAAKzB,EAAQ,EAAE,OAAO,EACzCwB,GAAOC,EAAOxB,EAAQ,EAExB,OAAOuB,CACT,CAEA,CAACpB,EAAS,EAAGa,EAAMS,EAAS,CAC1B,IAAIC,EACJ,GAAIV,EAAK,SAAW,OAAOA,EAAK,QAAW,UAAYA,EAAK,kBAAkB,KAC5EU,EAAM,OAAOV,EAAK,MAAM,MAExB,OAAM,IAAIlB,GAAqB,gDAAgD,EAGjF,IAAI6B,EAAa,KAAK5B,EAAQ,EAAE,IAAI2B,CAAG,EAEvC,OAAKC,IACHA,EAAa,KAAKf,EAAQ,EAAEI,EAAK,OAAQ,KAAKH,EAAQ,CAAC,EACpD,GAAG,QAAS,KAAKF,EAAQ,CAAC,EAC1B,GAAG,UAAW,KAAKH,EAAU,CAAC,EAC9B,GAAG,aAAc,KAAKC,EAAa,CAAC,EACpC,GAAG,kBAAmB,KAAKC,EAAkB,CAAC,EAKjD,KAAKX,EAAQ,EAAE,IAAI2B,EAAKC,CAAU,GAG7BA,EAAW,SAASX,EAAMS,CAAO,CAC1C,CAEA,MAAOxB,EAAM,GAAK,CAChB,IAAM2B,EAAgB,CAAC,EACvB,QAAWJ,KAAU,KAAKzB,EAAQ,EAAE,OAAO,EACzC6B,EAAc,KAAKJ,EAAO,MAAM,CAAC,EAEnC,KAAKzB,EAAQ,EAAE,MAAM,EAErB,MAAM,QAAQ,IAAI6B,CAAa,CACjC,CAEA,MAAO1B,EAAQ,EAAGoB,EAAK,CACrB,IAAMO,EAAkB,CAAC,EACzB,QAAWL,KAAU,KAAKzB,EAAQ,EAAE,OAAO,EACzC8B,EAAgB,KAAKL,EAAO,QAAQF,CAAG,CAAC,EAE1C,KAAKvB,EAAQ,EAAE,MAAM,EAErB,MAAM,QAAQ,IAAI8B,CAAe,CACnC,CACF,EAEAhC,GAAO,QAAUoB,KClHjB,IAAAa,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,GAAQ,OAAAC,GAAQ,SAAAC,EAAS,EAAI,KAC/B,CAAE,IAAAC,EAAI,EAAI,EAAQ,UAAU,EAC5BC,GAAQ,KACRC,GAAO,KACPC,GAAiB,KACjB,CAAE,qBAAAC,GAAsB,oBAAAC,GAAqB,2BAAAC,EAA2B,EAAI,IAC5EC,GAAiB,KAEjBC,GAAS,OAAO,aAAa,EAC7BC,GAAU,OAAO,cAAc,EAC/BC,GAAgB,OAAO,eAAe,EACtCC,GAAc,OAAO,sBAAsB,EAC3CC,GAAY,OAAO,oBAAoB,EACvCC,GAAmB,OAAO,2BAA2B,EAE3D,SAASC,GAAqBC,EAAU,CACtC,OAAOA,IAAa,SAAW,IAAM,EACvC,CAEA,SAASC,GAAgBC,EAAQC,EAAM,CACrC,OAAO,IAAIhB,GAAKe,EAAQC,CAAI,CAC9B,CAEA,IAAMC,GAAO,IAAM,CAAC,EAEdC,GAAN,cAAyBjB,EAAe,CACtC,YAAae,EAAM,CACjB,GAAI,CAACA,GAAS,OAAOA,GAAS,UAAY,EAAEA,aAAgBlB,KAAQ,CAACkB,EAAK,IACxE,MAAM,IAAId,GAAqB,wBAAwB,EAGzD,GAAM,CAAE,cAAAiB,EAAgBL,EAAe,EAAIE,EAC3C,GAAI,OAAOG,GAAkB,WAC3B,MAAM,IAAIjB,GAAqB,8CAA8C,EAG/E,MAAM,EAEN,IAAMkB,EAAM,KAAKC,GAAQL,CAAI,EACvB,CAAE,KAAAM,EAAM,OAAAP,EAAQ,KAAAQ,EAAM,SAAAV,EAAU,SAAAW,EAAU,SAAAC,EAAU,SAAUC,CAAc,EAAIN,EAOtF,GALA,KAAKzB,EAAM,EAAI,CAAE,IAAK2B,EAAM,SAAAT,CAAS,EACrC,KAAKJ,EAAW,EAAIO,EAAK,WACzB,KAAKN,EAAS,EAAIM,EAAK,SACvB,KAAKR,EAAa,EAAIQ,EAAK,SAAW,CAAC,EAEnCA,EAAK,MAAQA,EAAK,MACpB,MAAM,IAAId,GAAqB,yDAAyD,EAC/Ec,EAAK,KAEd,KAAKR,EAAa,EAAE,qBAAqB,EAAI,SAASQ,EAAK,IAAI,GACtDA,EAAK,MACd,KAAKR,EAAa,EAAE,qBAAqB,EAAIQ,EAAK,MACzCQ,GAAYC,IACrB,KAAKjB,EAAa,EAAE,qBAAqB,EAAI,SAAS,OAAO,KAAK,GAAG,mBAAmBgB,CAAQ,CAAC,IAAI,mBAAmBC,CAAQ,CAAC,EAAE,EAAE,SAAS,QAAQ,CAAC,IAGzJ,IAAME,EAAUtB,GAAe,CAAE,GAAGW,EAAK,QAAS,CAAC,EACnD,KAAKL,EAAgB,EAAIN,GAAe,CAAE,GAAGW,EAAK,UAAW,CAAC,EAC9D,KAAKT,EAAO,EAAIY,EAAcC,EAAK,CAAE,QAAAO,CAAQ,CAAC,EAC9C,KAAKrB,EAAM,EAAI,IAAIP,GAAM,CACvB,GAAGiB,EACH,QAAS,MAAOA,EAAMY,IAAa,CACjC,IAAIC,EAAgBb,EAAK,KACpBA,EAAK,OACRa,GAAiB,IAAIjB,GAAoBI,EAAK,QAAQ,CAAC,IAEzD,GAAI,CACF,GAAM,CAAE,OAAAc,EAAQ,WAAAC,CAAW,EAAI,MAAM,KAAKxB,EAAO,EAAE,QAAQ,CACzD,OAAAQ,EACA,KAAAQ,EACA,KAAMM,EACN,OAAQb,EAAK,OACb,QAAS,CACP,GAAG,KAAKR,EAAa,EACrB,KAAMQ,EAAK,IACb,EACA,WAAY,KAAKN,EAAS,GAAG,YAAcgB,CAC7C,CAAC,EAKD,GAJIK,IAAe,MACjBD,EAAO,GAAG,QAASb,EAAI,EAAE,QAAQ,EACjCW,EAAS,IAAIzB,GAAoB,mBAAmB4B,CAAU,+BAA+B,CAAC,GAE5Ff,EAAK,WAAa,SAAU,CAC9BY,EAAS,KAAME,CAAM,EACrB,MACF,CACA,IAAIE,EACA,KAAKvB,EAAW,EAClBuB,EAAa,KAAKvB,EAAW,EAAE,WAE/BuB,EAAahB,EAAK,WAEpB,KAAKL,EAAgB,EAAE,CAAE,GAAGK,EAAM,WAAAgB,EAAY,WAAYF,CAAO,EAAGF,CAAQ,CAC9E,OAASK,EAAK,CACRA,EAAI,OAAS,+BAEfL,EAAS,IAAIxB,GAA2B6B,CAAG,CAAC,EAE5CL,EAASK,CAAG,CAEhB,CACF,CACF,CAAC,CACH,CAEA,SAAUjB,EAAMkB,EAAS,CACvB,IAAMC,EAAUC,GAAapB,EAAK,OAAO,EAGzC,GAFAqB,GAAuBF,CAAO,EAE1BA,GAAW,EAAE,SAAUA,IAAY,EAAE,SAAUA,GAAU,CAC3D,GAAM,CAAE,KAAAG,CAAK,EAAI,IAAIxC,GAAIkB,EAAK,MAAM,EACpCmB,EAAQ,KAAOG,CACjB,CAEA,OAAO,KAAKhC,EAAM,EAAE,SAClB,CACE,GAAGU,EACH,QAAAmB,CACF,EACAD,CACF,CACF,CAMAb,GAASL,EAAM,CACb,OAAI,OAAOA,GAAS,SACX,IAAIlB,GAAIkB,CAAI,EACVA,aAAgBlB,GAClBkB,EAEA,IAAIlB,GAAIkB,EAAK,GAAG,CAE3B,CAEA,MAAOpB,EAAM,GAAK,CAChB,MAAM,KAAKU,EAAM,EAAE,MAAM,EACzB,MAAM,KAAKC,EAAO,EAAE,MAAM,CAC5B,CAEA,MAAOV,EAAQ,GAAK,CAClB,MAAM,KAAKS,EAAM,EAAE,QAAQ,EAC3B,MAAM,KAAKC,EAAO,EAAE,QAAQ,CAC9B,CACF,EAMA,SAAS6B,GAAcD,EAAS,CAG9B,GAAI,MAAM,QAAQA,CAAO,EAAG,CAE1B,IAAMI,EAAc,CAAC,EAErB,QAASC,EAAI,EAAGA,EAAIL,EAAQ,OAAQK,GAAK,EACvCD,EAAYJ,EAAQK,CAAC,CAAC,EAAIL,EAAQK,EAAI,CAAC,EAGzC,OAAOD,CACT,CAEA,OAAOJ,CACT,CAUA,SAASE,GAAwBF,EAAS,CAGxC,GAFuBA,GAAW,OAAO,KAAKA,CAAO,EAClD,KAAMM,GAAQA,EAAI,YAAY,IAAM,qBAAqB,EAE1D,MAAM,IAAIvC,GAAqB,8DAA8D,CAEjG,CAEAR,GAAO,QAAUwB,KC5LjB,IAAAwB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAiB,KACjB,CAAE,OAAAC,GAAQ,SAAAC,GAAU,QAAAC,GAAS,WAAAC,GAAY,UAAAC,GAAW,cAAAC,GAAe,gBAAAC,GAAiB,iBAAAC,EAAiB,EAAI,KACzGC,GAAa,KACbC,GAAQ,KAERC,GAAgB,CACpB,QAAS,GACT,SAAU,GACZ,EAEMC,GAAN,cAAgCZ,EAAe,CAC7Ca,GAAgB,KAChBC,GAAkB,KAClBC,GAAQ,KAER,YAAaC,EAAO,CAAC,EAAG,CACtB,MAAM,EACN,KAAKD,GAAQC,EAEb,GAAM,CAAE,UAAAC,EAAW,WAAAC,EAAY,QAAAC,EAAS,GAAGC,CAAU,EAAIJ,EAEzD,KAAKV,EAAa,EAAI,IAAII,GAAMU,CAAS,EAEzC,IAAMC,EAAaJ,GAAa,QAAQ,IAAI,YAAc,QAAQ,IAAI,WAClEI,EACF,KAAKd,EAAe,EAAI,IAAIE,GAAW,CAAE,GAAGW,EAAW,IAAKC,CAAW,CAAC,EAExE,KAAKd,EAAe,EAAI,KAAKD,EAAa,EAG5C,IAAMgB,EAAcJ,GAAc,QAAQ,IAAI,aAAe,QAAQ,IAAI,YACrEI,EACF,KAAKd,EAAgB,EAAI,IAAIC,GAAW,CAAE,GAAGW,EAAW,IAAKE,CAAY,CAAC,EAE1E,KAAKd,EAAgB,EAAI,KAAKD,EAAe,EAG/C,KAAKgB,GAAc,CACrB,CAEA,CAAClB,EAAS,EAAGW,EAAMQ,EAAS,CAC1B,IAAMC,EAAM,IAAI,IAAIT,EAAK,MAAM,EAE/B,OADc,KAAKU,GAAqBD,CAAG,EAC9B,SAAST,EAAMQ,CAAO,CACrC,CAEA,MAAOvB,EAAM,GAAK,CAChB,MAAM,KAAKK,EAAa,EAAE,MAAM,EAC3B,KAAKC,EAAe,EAAEJ,EAAO,GAChC,MAAM,KAAKI,EAAe,EAAE,MAAM,EAE/B,KAAKC,EAAgB,EAAEL,EAAO,GACjC,MAAM,KAAKK,EAAgB,EAAE,MAAM,CAEvC,CAEA,MAAON,EAAQ,EAAGyB,EAAK,CACrB,MAAM,KAAKrB,EAAa,EAAE,QAAQqB,CAAG,EAChC,KAAKpB,EAAe,EAAEH,EAAU,GACnC,MAAM,KAAKG,EAAe,EAAE,QAAQoB,CAAG,EAEpC,KAAKnB,EAAgB,EAAEJ,EAAU,GACpC,MAAM,KAAKI,EAAgB,EAAE,QAAQmB,CAAG,CAE5C,CAEAD,GAAsBD,EAAK,CACzB,GAAI,CAAE,SAAAG,EAAU,KAAMC,EAAU,KAAAC,CAAK,EAAIL,EAMzC,OAFAI,EAAWA,EAAS,QAAQ,QAAS,EAAE,EAAE,YAAY,EACrDC,EAAO,OAAO,SAASA,EAAM,EAAE,GAAKnB,GAAciB,CAAQ,GAAK,EAC1D,KAAKG,GAAaF,EAAUC,CAAI,EAGjCF,IAAa,SACR,KAAKpB,EAAgB,EAEvB,KAAKD,EAAe,EALlB,KAAKD,EAAa,CAM7B,CAEAyB,GAAcF,EAAUC,EAAM,CAK5B,GAJI,KAAKE,IACP,KAAKT,GAAc,EAGjB,KAAKT,GAAgB,SAAW,EAClC,MAAO,GAET,GAAI,KAAKD,KAAkB,IACzB,MAAO,GAGT,QAASoB,EAAI,EAAGA,EAAI,KAAKnB,GAAgB,OAAQmB,IAAK,CACpD,IAAMC,EAAQ,KAAKpB,GAAgBmB,CAAC,EACpC,GAAI,EAAAC,EAAM,MAAQA,EAAM,OAASJ,IAGjC,GAAK,QAAQ,KAAKI,EAAM,QAAQ,GAO9B,GAAIL,EAAS,SAASK,EAAM,SAAS,QAAQ,MAAO,EAAE,CAAC,EACrD,MAAO,WANLL,IAAaK,EAAM,SACrB,MAAO,GAQb,CAEA,MAAO,EACT,CAEAX,IAAiB,CACf,IAAMY,EAAe,KAAKpB,GAAM,SAAW,KAAKqB,GAC1CC,EAAeF,EAAa,MAAM,OAAO,EACzCG,EAAiB,CAAC,EAExB,QAASL,EAAI,EAAGA,EAAII,EAAa,OAAQJ,IAAK,CAC5C,IAAMC,EAAQG,EAAaJ,CAAC,EAC5B,GAAI,CAACC,EACH,SAEF,IAAMK,EAASL,EAAM,MAAM,cAAc,EACzCI,EAAe,KAAK,CAClB,UAAWC,EAASA,EAAO,CAAC,EAAIL,GAAO,YAAY,EACnD,KAAMK,EAAS,OAAO,SAASA,EAAO,CAAC,EAAG,EAAE,EAAI,CAClD,CAAC,CACH,CAEA,KAAK1B,GAAgBsB,EACrB,KAAKrB,GAAkBwB,CACzB,CAEA,GAAIN,IAAmB,CACrB,OAAI,KAAKjB,GAAM,UAAY,OAClB,GAEF,KAAKF,KAAkB,KAAKuB,EACrC,CAEA,GAAIA,IAAe,CACjB,OAAO,QAAQ,IAAI,UAAY,QAAQ,IAAI,UAAY,EACzD,CACF,EAEArC,GAAO,QAAUa,KCtJjB,IAAA4B,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,IAAMC,GAAS,EAAQ,aAAa,EAE9B,CAAE,0BAAAC,EAA0B,EAAI,KAChC,CAAE,kBAAAC,EAAkB,EAAI,IACxBC,GAAc,KACd,CACJ,YAAAC,GACA,iBAAAC,GACA,gBAAAC,EACF,EAAI,IAEJ,SAASC,GAA2BC,EAAY,CAC9C,IAAMC,EAAU,KAAK,IAAI,EACzB,OAAO,IAAI,KAAKD,CAAU,EAAE,QAAQ,EAAIC,CAC1C,CAEA,IAAMC,GAAN,MAAMC,CAAa,CACjB,YAAaC,EAAM,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAG,CACxC,GAAM,CAAE,aAAAC,EAAc,GAAGC,CAAa,EAAIJ,EACpC,CAEJ,MAAOK,EACP,WAAAC,EACA,WAAAC,EACA,WAAAC,EACA,cAAAC,EAEA,QAAAC,EACA,WAAAC,EACA,WAAAf,EACA,YAAAgB,CACF,EAAIT,GAAgB,CAAC,EAErB,KAAK,SAAWF,EAChB,KAAK,QAAUV,GAAY,KAAKW,CAAO,EACvC,KAAK,KAAO,CAAE,GAAGE,EAAc,KAAMV,GAAgBM,EAAK,IAAI,CAAE,EAChE,KAAK,UAAY,CACf,MAAOK,GAAWN,EAAaV,EAAyB,EACxD,WAAYO,GAAc,GAC1B,WAAYW,GAAc,GAAK,IAC/B,WAAYC,GAAc,IAC1B,cAAeC,GAAiB,EAChC,WAAYH,GAAc,EAE1B,QAASI,GAAW,CAAC,MAAO,OAAQ,UAAW,MAAO,SAAU,OAAO,EAEvE,YAAaE,GAAe,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAEpD,WAAYD,GAAc,CACxB,aACA,eACA,YACA,WACA,cACA,YACA,eACA,QACA,gBACF,CACF,EAEA,KAAK,WAAa,EAClB,KAAK,qBAAuB,EAC5B,KAAK,YAAc,GACnB,KAAK,MAAQ,EACb,KAAK,IAAM,KACX,KAAK,KAAO,IACd,CAEA,eAAgBE,EAAYC,EAAS,CAC9B,KAAK,aACR,KAAK,QAAQ,iBAAiBD,EAAYC,CAAO,CAErD,CAEA,iBAAkBD,EAAYE,EAAYC,EAASC,EAAQ,CACzD,KAAK,QAAQ,mBAAmBJ,EAAYE,EAAYC,EAASC,CAAM,CACzE,CAEA,OAAQ5B,EAAyB,EAAG6B,EAAK,CAAE,MAAAC,EAAO,KAAAnB,CAAK,EAAGoB,EAAI,CAC5D,GAAM,CAAE,WAAAL,EAAY,KAAAM,EAAM,QAAAL,CAAQ,EAAIE,EAChC,CAAE,OAAAI,EAAQ,aAAAnB,CAAa,EAAIH,EAC3B,CACJ,WAAAM,EACA,WAAAE,EACA,WAAAD,EACA,cAAAE,EACA,YAAAG,EACA,WAAAD,EACA,QAAAD,CACF,EAAIP,EACE,CAAE,QAAAoB,CAAQ,EAAIJ,EAGpB,GAAIE,GAAQA,IAAS,qBAAuB,CAACV,EAAW,SAASU,CAAI,EAAG,CACtED,EAAGF,CAAG,EACN,MACF,CAGA,GAAI,MAAM,QAAQR,CAAO,GAAK,CAACA,EAAQ,SAASY,CAAM,EAAG,CACvDF,EAAGF,CAAG,EACN,MACF,CAGA,GACEH,GAAc,MACd,MAAM,QAAQH,CAAW,GACzB,CAACA,EAAY,SAASG,CAAU,EAChC,CACAK,EAAGF,CAAG,EACN,MACF,CAGA,GAAIK,EAAUjB,EAAY,CACxBc,EAAGF,CAAG,EACN,MACF,CAEA,IAAIM,EAAmBR,IAAU,aAAa,EAC1CQ,IACFA,EAAmB,OAAOA,CAAgB,EAC1CA,EAAmB,OAAO,MAAMA,CAAgB,EAC5C7B,GAA0B6B,CAAgB,EAC1CA,EAAmB,KAGzB,IAAMC,EACJD,EAAmB,EACf,KAAK,IAAIA,EAAkBjB,CAAU,EACrC,KAAK,IAAIC,EAAaC,IAAkBc,EAAU,GAAIhB,CAAU,EAEtE,WAAW,IAAMa,EAAG,IAAI,EAAGK,CAAY,CACzC,CAEA,gBAAiBZ,EAAYE,EAAYC,EAASU,EAAe,CAG/D,GAFA,KAAK,YAAc,EAEfX,GAAc,IAChB,GAAI,KAAK,UAAU,YAAY,SAASA,CAAU,IAAM,GAAO,CAC7D,KAAK,YAAc,GACnB,KAAK,QAAQ,kBACXF,EACAE,EACAC,EACAU,CACF,EACA,MACF,KACE,OAAM,IAAIpC,GAAkB,iBAAkByB,EAAY,CACxD,QAAAC,EACA,KAAM,CACJ,MAAO,KAAK,UACd,CACF,CAAC,EAKL,GAAI,KAAK,YAAa,CAKpB,GAAID,IAAe,MAAQ,KAAK,MAAQ,GAAKA,IAAe,KAC1D,MAAM,IAAIzB,GAAkB,kFAAmFyB,EAAY,CACzH,QAAAC,EACA,KAAM,CAAE,MAAO,KAAK,UAAW,CACjC,CAAC,EAGH,IAAMW,EAAelC,GAAiBuB,EAAQ,eAAe,CAAC,EAE9D,GAAI,CAACW,EACH,MAAM,IAAIrC,GAAkB,yBAA0ByB,EAAY,CAChE,QAAAC,EACA,KAAM,CAAE,MAAO,KAAK,UAAW,CACjC,CAAC,EAIH,GAAI,KAAK,MAAQ,MAAQ,KAAK,OAASA,EAAQ,KAC7C,MAAM,IAAI1B,GAAkB,gBAAiByB,EAAY,CACvD,QAAAC,EACA,KAAM,CAAE,MAAO,KAAK,UAAW,CACjC,CAAC,EAGH,GAAM,CAAE,MAAAY,EAAO,KAAAC,EAAM,IAAAC,EAAMD,EAAOA,EAAO,EAAI,IAAK,EAAIF,EAEtDvC,GAAO,KAAK,QAAUwC,EAAO,wBAAwB,EACrDxC,GAAO,KAAK,KAAO,MAAQ,KAAK,MAAQ0C,EAAK,wBAAwB,EAErE,MACF,CAEA,GAAI,KAAK,KAAO,KAAM,CACpB,GAAIf,IAAe,IAAK,CAEtB,IAAMgB,EAAQtC,GAAiBuB,EAAQ,eAAe,CAAC,EAEvD,GAAIe,GAAS,KAAM,CACjB,KAAK,YAAc,GACnB,KAAK,QAAQ,kBACXlB,EACAE,EACAC,EACAU,CACF,EACA,MACF,CAEA,GAAM,CAAE,MAAAE,EAAO,KAAAC,EAAM,IAAAC,EAAMD,EAAOA,EAAO,EAAI,IAAK,EAAIE,EACtD3C,GACEwC,GAAS,MAAQ,OAAO,SAASA,CAAK,EACtC,wBACF,EACAxC,GAAO0C,GAAO,MAAQ,OAAO,SAASA,CAAG,EAAG,wBAAwB,EAEpE,KAAK,MAAQF,EACb,KAAK,IAAME,CACb,CAGA,GAAI,KAAK,KAAO,KAAM,CACpB,IAAME,EAAgBhB,EAAQ,gBAAgB,EAC9C,KAAK,IAAMgB,GAAiB,KAAO,OAAOA,CAAa,EAAI,EAAI,IACjE,CAEA5C,GAAO,OAAO,SAAS,KAAK,KAAK,CAAC,EAClCA,GACE,KAAK,KAAO,MAAQ,OAAO,SAAS,KAAK,GAAG,EAC5C,wBACF,EAEA,KAAK,OAAS,GACd,KAAK,KAAO4B,EAAQ,MAAQ,KAAOA,EAAQ,KAAO,KAMhD,KAAK,MAAQ,MACb,KAAK,KAAK,CAAC,IAAM,KACjB,KAAK,KAAK,CAAC,IAAM,MAEjB,KAAK,KAAO,MAGd,KAAK,YAAc,GACnB,KAAK,QAAQ,kBACXH,EACAE,EACAC,EACAU,CACF,CACF,KACE,OAAM,IAAIpC,GAAkB,iBAAkByB,EAAY,CACxD,QAAAC,EACA,KAAM,CAAE,MAAO,KAAK,UAAW,CACjC,CAAC,CAEL,CAEA,eAAgBH,EAAYoB,EAAO,CACjC,KAAK,OAASA,EAAM,OAEpB,KAAK,QAAQ,iBAAiBpB,EAAYoB,CAAK,CACjD,CAEA,cAAepB,EAAYqB,EAAU,CACnC,YAAK,WAAa,EACX,KAAK,QAAQ,gBAAgBrB,EAAYqB,CAAQ,CAC1D,CAEA,gBAAiBrB,EAAYK,EAAK,CAChC,GAAIL,GAAY,SAAWrB,GAAY,KAAK,KAAK,IAAI,EAAG,CACtD,KAAK,QAAQ,kBAAkBqB,EAAYK,CAAG,EAC9C,MACF,CAII,KAAK,WAAa,KAAK,qBAAuB,EAEhD,KAAK,WACH,KAAK,sBACJ,KAAK,WAAa,KAAK,sBAE1B,KAAK,YAAc,EAGrB,KAAK,UAAU,MACbA,EACA,CACE,MAAO,CAAE,QAAS,KAAK,UAAW,EAClC,KAAM,CAAE,aAAc,KAAK,UAAW,GAAG,KAAK,IAAK,CACrD,EACAiB,EAAQ,KAAK,IAAI,CACnB,EAOA,SAASA,EAASjB,EAAK,CACrB,GAAIA,GAAO,MAAQL,GAAY,SAAWrB,GAAY,KAAK,KAAK,IAAI,EAClE,OAAO,KAAK,QAAQ,kBAAkBqB,EAAYK,CAAG,EAGvD,GAAI,KAAK,QAAU,EAAG,CACpB,IAAMF,EAAU,CAAE,MAAO,SAAS,KAAK,KAAK,IAAI,KAAK,KAAO,EAAE,EAAG,EAG7D,KAAK,MAAQ,OACfA,EAAQ,UAAU,EAAI,KAAK,MAG7B,KAAK,KAAO,CACV,GAAG,KAAK,KACR,QAAS,CACP,GAAG,KAAK,KAAK,QACb,GAAGA,CACL,CACF,CACF,CAEA,GAAI,CACF,KAAK,qBAAuB,KAAK,WACjC,KAAK,SAAS,KAAK,KAAM,IAAI,CAC/B,OAASE,EAAK,CACZ,KAAK,QAAQ,kBAAkBL,EAAYK,CAAG,CAChD,CACF,CACF,CACF,EAEA/B,GAAO,QAAUW,KCrVjB,IAAAsC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAa,KACbC,GAAe,KAEfC,GAAN,cAAyBF,EAAW,CAClCG,GAAS,KACTC,GAAW,KACX,YAAaC,EAAOC,EAAU,CAAC,EAAG,CAChC,MAAMA,CAAO,EACb,KAAKH,GAASE,EACd,KAAKD,GAAWE,CAClB,CAEA,SAAUC,EAAMC,EAAS,CACvB,IAAMC,EAAQ,IAAIR,GAAa,CAC7B,GAAGM,EACH,aAAc,KAAKH,EACrB,EAAG,CACD,SAAU,KAAKD,GAAO,SAAS,KAAK,KAAKA,EAAM,EAC/C,QAAAK,CACF,CAAC,EACD,OAAO,KAAKL,GAAO,SAASI,EAAME,CAAK,CACzC,CAEA,OAAS,CACP,OAAO,KAAKN,GAAO,MAAM,CAC3B,CAEA,SAAW,CACT,OAAO,KAAKA,GAAO,QAAQ,CAC7B,CACF,EAEAJ,GAAO,QAAUG,KClCjB,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpC,CAAE,oBAAAC,GAAqB,kBAAAC,GAAmB,qBAAAC,GAAsB,WAAAC,EAAW,EAAI,IAC/EC,GAAO,IACP,CAAE,mBAAAC,EAAmB,EAAI,IAEzBC,GAAW,OAAO,UAAU,EAC5BC,GAAW,OAAO,UAAU,EAC5BC,GAAQ,OAAO,OAAO,EACtBC,GAAS,OAAO,QAAQ,EACxBC,GAAe,OAAO,cAAc,EACpCC,GAAiB,OAAO,gBAAgB,EACxCC,GAAQ,OAAO,OAAO,EACtBC,GAAa,OAAO,YAAY,EAEhCC,GAAO,IAAM,CAAC,EAOdC,GAAN,cAA2BhB,EAAS,CASlC,YAAa,CACX,OAAAiB,EACA,MAAAC,EACA,YAAAC,EAAc,GACd,cAAAC,EACA,cAAAC,EAAgB,GAAK,IACvB,EAAG,CACD,MAAM,CACJ,YAAa,GACb,KAAMJ,EACN,cAAAI,CACF,CAAC,EAED,KAAK,eAAe,YAAc,GAElC,KAAKX,EAAM,EAAIQ,EAKf,KAAKX,EAAQ,EAAI,KACjB,KAAKO,EAAU,EAAI,EAInB,KAAKL,EAAK,EAAI,KACd,KAAKI,EAAK,EAAI,GACd,KAAKF,EAAY,EAAIQ,EACrB,KAAKP,EAAc,EAAI,OAAO,SAASQ,CAAa,EAAIA,EAAgB,KAMxE,KAAKZ,EAAQ,EAAI,EACnB,CAOA,SAAUc,EAAKC,EAAU,CACnB,CAACD,GAAO,CAAC,KAAK,eAAe,aAC/BA,EAAM,IAAIrB,IAGRqB,GACF,KAAKZ,EAAM,EAAE,EAOV,KAAKG,EAAK,EAKbU,EAASD,CAAG,EAJZ,aAAa,IAAM,CACjBC,EAASD,CAAG,CACd,CAAC,CAIL,CAOA,GAAIE,EAAOC,EAAU,CACnB,OAAID,IAAU,QAAUA,IAAU,cAChC,KAAKhB,EAAQ,EAAI,GACjB,KAAKK,EAAK,EAAI,IAET,MAAM,GAAGW,EAAOC,CAAQ,CACjC,CAOA,YAAaD,EAAOC,EAAU,CAC5B,OAAO,KAAK,GAAGD,EAAOC,CAAQ,CAChC,CAOA,IAAKD,EAAOC,EAAU,CACpB,IAAMC,EAAM,MAAM,IAAIF,EAAOC,CAAQ,EACrC,OAAID,IAAU,QAAUA,IAAU,cAChC,KAAKhB,EAAQ,EACX,KAAK,cAAc,MAAM,EAAI,GAC7B,KAAK,cAAc,UAAU,EAAI,GAG9BkB,CACT,CAOA,eAAgBF,EAAOC,EAAU,CAC/B,OAAO,KAAK,IAAID,EAAOC,CAAQ,CACjC,CAMA,KAAME,EAAO,CAGX,OAFA,KAAKb,EAAU,GAAKa,EAAQA,EAAM,OAAS,EAEvC,KAAKpB,EAAQ,GAAKoB,IAAU,MAC9BC,GAAY,KAAKrB,EAAQ,EAAGoB,CAAK,EAC1B,KAAKnB,EAAQ,EAAI,MAAM,KAAKmB,CAAK,EAAI,IAEvC,MAAM,KAAKA,CAAK,CACzB,CAQA,MAAQ,CACN,OAAOE,GAAQ,KAAM,MAAM,CAC7B,CAQA,MAAQ,CACN,OAAOA,GAAQ,KAAM,MAAM,CAC7B,CAQA,MAAQ,CACN,OAAOA,GAAQ,KAAM,MAAM,CAC7B,CAQA,OAAS,CACP,OAAOA,GAAQ,KAAM,OAAO,CAC9B,CAQA,aAAe,CACb,OAAOA,GAAQ,KAAM,aAAa,CACpC,CAQA,MAAM,UAAY,CAEhB,MAAM,IAAI3B,EACZ,CAUA,IAAI,UAAY,CACd,OAAOG,GAAK,YAAY,IAAI,CAC9B,CAOA,IAAI,MAAQ,CACV,OAAK,KAAKI,EAAK,IACb,KAAKA,EAAK,EAAIH,GAAmB,IAAI,EACjC,KAAKC,EAAQ,IAEf,KAAKE,EAAK,EAAE,UAAU,EACtBV,GAAO,KAAKU,EAAK,EAAE,MAAM,IAGtB,KAAKA,EAAK,CACnB,CASA,MAAM,KAAMqB,EAAM,CAChB,IAAMC,EAASD,GAAM,OAErB,GAAIC,GAAU,OAAS,OAAOA,GAAW,UAAY,EAAE,YAAaA,IAClE,MAAM,IAAI5B,GAAqB,+BAA+B,EAGhE,IAAM6B,EAAQF,GAAM,OAAS,OAAO,SAASA,EAAK,KAAK,EACnDA,EAAK,MACL,IAAM,KAIV,OAFAC,GAAQ,eAAe,EAEnB,KAAK,eAAe,aACf,KAGF,MAAM,IAAI,QAAQ,CAACE,EAASC,IAAW,CAQ5C,IANG,KAAKtB,EAAc,GAAM,KAAKA,EAAc,EAAIoB,GACjD,KAAKlB,EAAU,EAAIkB,IAEnB,KAAK,QAAQ,IAAI5B,EAAY,EAG3B2B,EAAQ,CACV,IAAMI,EAAU,IAAM,CACpB,KAAK,QAAQJ,EAAO,QAAU,IAAI3B,EAAY,CAChD,EACA2B,EAAO,iBAAiB,QAASI,CAAO,EACxC,KACG,GAAG,QAAS,UAAY,CACvBJ,EAAO,oBAAoB,QAASI,CAAO,EACvCJ,EAAO,QACTG,EAAOH,EAAO,QAAU,IAAI3B,EAAY,EAExC6B,EAAQ,IAAI,CAEhB,CAAC,CACL,MACE,KAAK,GAAG,QAASA,CAAO,EAG1B,KACG,GAAG,QAASlB,EAAI,EAChB,GAAG,OAAQ,IAAM,CACZ,KAAKD,EAAU,EAAIkB,GACrB,KAAK,QAAQ,CAEjB,CAAC,EACA,OAAO,CACZ,CAAC,CACH,CAMA,YAAaI,EAAU,CACrB,OAAI,OAAO,WAAWA,CAAQ,IAC5B,KAAK,eAAe,SAAWA,GAE1B,IACT,CACF,EAOA,SAASC,GAAUC,EAAc,CAE/B,OAAOA,EAAa7B,EAAK,GAAG,SAAW,IAAQ6B,EAAa/B,EAAQ,IAAM,IAC5E,CAOA,SAASgC,GAAYD,EAAc,CACjC,OAAOjC,GAAK,YAAYiC,CAAY,GAAKD,GAASC,CAAY,CAChE,CAiBA,SAAST,GAASW,EAAQC,EAAM,CAC9B,OAAA1C,GAAO,CAACyC,EAAOjC,EAAQ,CAAC,EAEjB,IAAI,QAAQ,CAAC0B,EAASC,IAAW,CACtC,GAAIK,GAAWC,CAAM,EAAG,CACtB,IAAME,EAASF,EAAO,eAClBE,EAAO,WAAaA,EAAO,eAAiB,GAC9CF,EACG,GAAG,QAASlB,GAAO,CAClBY,EAAOZ,CAAG,CACZ,CAAC,EACA,GAAG,QAAS,IAAM,CACjBY,EAAO,IAAI,UAAU,UAAU,CAAC,CAClC,CAAC,EAEHA,EAAOQ,EAAO,SAAW,IAAI,UAAU,UAAU,CAAC,CAEtD,MACE,eAAe,IAAM,CACnBF,EAAOjC,EAAQ,EAAI,CACjB,KAAAkC,EACA,OAAAD,EACA,QAAAP,EACA,OAAAC,EACA,OAAQ,EACR,KAAM,CAAC,CACT,EAEAM,EACG,GAAG,QAAS,SAAUlB,EAAK,CAC1BqB,GAAc,KAAKpC,EAAQ,EAAGe,CAAG,CACnC,CAAC,EACA,GAAG,QAAS,UAAY,CACnB,KAAKf,EAAQ,EAAE,OAAS,MAC1BoC,GAAc,KAAKpC,EAAQ,EAAG,IAAIN,EAAqB,CAE3D,CAAC,EAEH2C,GAAaJ,EAAOjC,EAAQ,CAAC,CAC/B,CAAC,CAEL,CAAC,CACH,CAMA,SAASqC,GAAcf,EAAS,CAC9B,GAAIA,EAAQ,OAAS,KACnB,OAGF,GAAM,CAAE,eAAgBgB,CAAM,EAAIhB,EAAQ,OAE1C,GAAIgB,EAAM,YAAa,CACrB,IAAMC,EAAQD,EAAM,YACdE,EAAMF,EAAM,OAAO,OACzB,QAASG,EAAIF,EAAOE,EAAID,EAAKC,IAC3BpB,GAAYC,EAASgB,EAAM,OAAOG,CAAC,CAAC,CAExC,KACE,SAAWrB,KAASkB,EAAM,OACxBjB,GAAYC,EAASF,CAAK,EAc9B,IAVIkB,EAAM,WACRI,GAAW,KAAK1C,EAAQ,EAAG,KAAK,eAAe,QAAQ,EAEvDsB,EAAQ,OAAO,GAAG,MAAO,UAAY,CACnCoB,GAAW,KAAK1C,EAAQ,EAAG,KAAK,eAAe,QAAQ,CACzD,CAAC,EAGHsB,EAAQ,OAAO,OAAO,EAEfA,EAAQ,OAAO,KAAK,GAAK,MAAM,CAGxC,CAQA,SAASqB,GAAcC,EAAQC,EAAQhB,EAAU,CAC/C,GAAIe,EAAO,SAAW,GAAKC,IAAW,EACpC,MAAO,GAET,IAAMC,EAASF,EAAO,SAAW,EAAIA,EAAO,CAAC,EAAI,OAAO,OAAOA,EAAQC,CAAM,EACvEE,EAAeD,EAAO,OAGtBP,EACJQ,EAAe,GACfD,EAAO,CAAC,IAAM,KACdA,EAAO,CAAC,IAAM,KACdA,EAAO,CAAC,IAAM,IACV,EACA,EACN,MAAI,CAACjB,GAAYA,IAAa,QAAUA,IAAa,QAC5CiB,EAAO,UAAUP,EAAOQ,CAAY,EAEpCD,EAAO,SAASP,EAAOQ,CAAY,EAAE,SAASlB,CAAQ,CAEjE,CAOA,SAASmB,GAAcJ,EAAQC,EAAQ,CACrC,GAAID,EAAO,SAAW,GAAKC,IAAW,EACpC,OAAO,IAAI,WAAW,CAAC,EAEzB,GAAID,EAAO,SAAW,EAEpB,OAAO,IAAI,WAAWA,EAAO,CAAC,CAAC,EAEjC,IAAME,EAAS,IAAI,WAAW,OAAO,gBAAgBD,CAAM,EAAE,MAAM,EAE/DI,EAAS,EACb,QAASC,EAAI,EAAGA,EAAIN,EAAO,OAAQ,EAAEM,EAAG,CACtC,IAAM9B,EAAQwB,EAAOM,CAAC,EACtBJ,EAAO,IAAI1B,EAAO6B,CAAM,EACxBA,GAAU7B,EAAM,MAClB,CAEA,OAAO0B,CACT,CAOA,SAASJ,GAAYpB,EAASO,EAAU,CACtC,GAAM,CAAE,KAAAK,EAAM,KAAAiB,EAAM,QAAAzB,EAAS,OAAAO,EAAQ,OAAAY,CAAO,EAAIvB,EAEhD,GAAI,CACEY,IAAS,OACXR,EAAQiB,GAAaQ,EAAMN,EAAQhB,CAAQ,CAAC,EACnCK,IAAS,OAClBR,EAAQ,KAAK,MAAMiB,GAAaQ,EAAMN,EAAQhB,CAAQ,CAAC,CAAC,EAC/CK,IAAS,cAClBR,EAAQsB,GAAaG,EAAMN,CAAM,EAAE,MAAM,EAChCX,IAAS,OAClBR,EAAQ,IAAI,KAAKyB,EAAM,CAAE,KAAMlB,EAAO7B,EAAY,CAAE,CAAC,CAAC,EAC7C8B,IAAS,SAClBR,EAAQsB,GAAaG,EAAMN,CAAM,CAAC,EAGpCT,GAAcd,CAAO,CACvB,OAASP,EAAK,CACZkB,EAAO,QAAQlB,CAAG,CACpB,CACF,CAOA,SAASM,GAAaC,EAASF,EAAO,CACpCE,EAAQ,QAAUF,EAAM,OACxBE,EAAQ,KAAK,KAAKF,CAAK,CACzB,CAOA,SAASgB,GAAed,EAASP,EAAK,CAChCO,EAAQ,OAAS,OAIjBP,EACFO,EAAQ,OAAOP,CAAG,EAElBO,EAAQ,QAAQ,EAIlBA,EAAQ,KAAO,KACfA,EAAQ,OAAS,KACjBA,EAAQ,QAAU,KAClBA,EAAQ,OAAS,KACjBA,EAAQ,OAAS,EACjBA,EAAQ,KAAO,KACjB,CAEA/B,GAAO,QAAU,CACf,SAAUkB,GACV,aAAAkC,EACF,IC7iBA,IAAAS,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,cAAAC,EAAc,EAAI,EAAQ,kBAAkB,EAC9C,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,qBAAAC,GAAsB,oBAAAC,EAAoB,EAAI,IAChDC,GAAO,IAEb,SAASC,IAAQ,CAAC,CAElB,IAAMC,GAAN,cAA6BN,EAAc,CACzC,YAAaO,EAAMC,EAAU,CAC3B,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAIL,GAAqB,cAAc,EAG/C,GAAM,CAAE,OAAAO,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,OAAAC,EAAQ,gBAAAC,EAAiB,cAAAC,CAAc,EAAIR,EAEjF,GAAI,CACF,GAAI,OAAOC,GAAa,WACtB,MAAM,IAAIN,GAAqB,kBAAkB,EAGnD,GAAIa,IAAkB,OAAOA,GAAkB,UAAYA,EAAgB,GACzE,MAAM,IAAIb,GAAqB,uBAAuB,EAGxD,GAAIO,GAAU,OAAOA,EAAO,IAAO,YAAc,OAAOA,EAAO,kBAAqB,WAClF,MAAM,IAAIP,GAAqB,+CAA+C,EAGhF,GAAIQ,IAAW,UACb,MAAM,IAAIR,GAAqB,gBAAgB,EAGjD,GAAIW,GAAU,OAAOA,GAAW,WAC9B,MAAM,IAAIX,GAAqB,yBAAyB,EAG1D,MAAM,gBAAgB,CACxB,OAASc,EAAK,CACZ,MAAIZ,GAAK,SAASQ,CAAI,GACpBR,GAAK,QAAQQ,EAAK,GAAG,QAASP,EAAI,EAAGW,CAAG,EAEpCA,CACR,CAEA,KAAK,OAASN,EACd,KAAK,gBAAkBI,GAAmB,KAC1C,KAAK,OAASH,GAAU,KACxB,KAAK,SAAWH,EAChB,KAAK,IAAM,KACX,KAAK,MAAQ,KACb,KAAK,KAAOI,EACZ,KAAK,SAAW,CAAC,EACjB,KAAK,QAAU,KACf,KAAK,OAASC,GAAU,KACxB,KAAK,cAAgBE,EACrB,KAAK,OAAS,KACd,KAAK,oBAAsB,KAEvBN,GAAQ,QACV,KAAK,OAASA,EAAO,QAAU,IAAIN,GAC1BM,IACT,KAAK,oBAAsBL,GAAK,iBAAiBK,EAAQ,IAAM,CAC7D,KAAK,OAASA,EAAO,QAAU,IAAIN,GAC/B,KAAK,IACPC,GAAK,QAAQ,KAAK,IAAI,GAAG,QAASC,EAAI,EAAG,KAAK,MAAM,EAC3C,KAAK,OACd,KAAK,MAAM,KAAK,MAAM,CAE1B,CAAC,EAEL,CAEA,UAAWY,EAAOC,EAAS,CACzB,GAAI,KAAK,OAAQ,CACfD,EAAM,KAAK,MAAM,EACjB,MACF,CAEAlB,GAAO,KAAK,QAAQ,EAEpB,KAAK,MAAQkB,EACb,KAAK,QAAUC,CACjB,CAEA,UAAWC,EAAYC,EAAYC,EAAQC,EAAe,CACxD,GAAM,CAAE,SAAAd,EAAU,OAAAG,EAAQ,MAAAM,EAAO,QAAAC,EAAS,gBAAAJ,EAAiB,cAAAC,CAAc,EAAI,KAEvEQ,EAAUT,IAAoB,MAAQV,GAAK,gBAAgBgB,CAAU,EAAIhB,GAAK,aAAagB,CAAU,EAE3G,GAAID,EAAa,IAAK,CAChB,KAAK,QACP,KAAK,OAAO,CAAE,WAAAA,EAAY,QAAAI,CAAQ,CAAC,EAErC,MACF,CAEA,IAAMC,EAAgBV,IAAoB,MAAQV,GAAK,aAAagB,CAAU,EAAIG,EAC5EE,EAAcD,EAAc,cAAc,EAC1CE,EAAgBF,EAAc,gBAAgB,EAC9CG,EAAM,IAAI1B,GAAS,CACvB,OAAAoB,EACA,MAAAJ,EACA,YAAAQ,EACA,cAAe,KAAK,SAAW,QAAUC,EACrC,OAAOA,CAAa,EACpB,KACJ,cAAAX,CACF,CAAC,EAEG,KAAK,sBACPY,EAAI,GAAG,QAAS,KAAK,mBAAmB,EACxC,KAAK,oBAAsB,MAG7B,KAAK,SAAW,KAChB,KAAK,IAAMA,EACPnB,IAAa,MACf,KAAK,gBAAgBA,EAAU,KAAM,KAAM,CACzC,WAAAW,EACA,QAAAI,EACA,SAAU,KAAK,SACf,OAAAZ,EACA,KAAMgB,EACN,QAAAT,CACF,CAAC,CAEL,CAEA,OAAQU,EAAO,CACb,OAAO,KAAK,IAAI,KAAKA,CAAK,CAC5B,CAEA,WAAYC,EAAU,CACpBzB,GAAK,aAAayB,EAAU,KAAK,QAAQ,EACzC,KAAK,IAAI,KAAK,IAAI,CACpB,CAEA,QAASb,EAAK,CACZ,GAAM,CAAE,IAAAW,EAAK,SAAAnB,EAAU,KAAAI,EAAM,OAAAD,CAAO,EAAI,KAEpCH,IAEF,KAAK,SAAW,KAChB,eAAe,IAAM,CACnB,KAAK,gBAAgBA,EAAU,KAAMQ,EAAK,CAAE,OAAAL,CAAO,CAAC,CACtD,CAAC,GAGCgB,IACF,KAAK,IAAM,KAEX,eAAe,IAAM,CACnBvB,GAAK,QAAQuB,EAAI,GAAG,QAAStB,EAAI,EAAGW,CAAG,CACzC,CAAC,GAGCJ,IACF,KAAK,KAAO,KAERR,GAAK,SAASQ,CAAI,IACpBA,EAAK,GAAG,QAASP,EAAI,EACrBD,GAAK,QAAQQ,EAAMI,CAAG,IAItB,KAAK,sBACP,KAAK,oBAAoB,EACzB,KAAK,oBAAsB,KAE/B,CACF,EAEA,SAASc,GAASvB,EAAMC,EAAU,CAChC,GAAIA,IAAa,OACf,OAAO,IAAI,QAAQ,CAACuB,EAASC,IAAW,CACtCF,GAAQ,KAAK,KAAMvB,EAAM,CAACS,EAAKiB,IACtBjB,EAAMgB,EAAOhB,CAAG,EAAIe,EAAQE,CAAI,CACxC,CACH,CAAC,EAGH,GAAI,CACF,IAAMC,EAAU,IAAI5B,GAAeC,EAAMC,CAAQ,EAEjD,KAAK,SAASD,EAAM2B,CAAO,CAC7B,OAASlB,EAAK,CACZ,GAAI,OAAOR,GAAa,WACtB,MAAMQ,EAER,IAAML,EAASJ,GAAM,OACrB,eAAe,IAAMC,EAASQ,EAAK,CAAE,OAAAL,CAAO,CAAC,CAAC,CAChD,CACF,CAEAb,GAAO,QAAUgC,GACjBhC,GAAO,QAAQ,eAAiBQ,KCtMhC,IAAA6B,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,iBAAAC,EAAiB,EAAI,IACvB,CAAE,oBAAAC,EAAoB,EAAI,IAE1BC,GAAY,OAAO,WAAW,EAC9BC,GAAU,OAAO,SAAS,EAEhC,SAASC,GAAOC,EAAM,CAChBA,EAAK,MACPA,EAAK,MAAMA,EAAKF,EAAO,GAAG,MAAM,EAEhCE,EAAK,OAASA,EAAKF,EAAO,GAAG,QAAU,IAAIF,GAE7CK,GAAaD,CAAI,CACnB,CAEA,SAASE,GAAWF,EAAMG,EAAQ,CAMhC,GALAH,EAAK,OAAS,KAEdA,EAAKF,EAAO,EAAI,KAChBE,EAAKH,EAAS,EAAI,KAEd,EAACM,EAIL,IAAIA,EAAO,QAAS,CAClBJ,GAAMC,CAAI,EACV,MACF,CAEAA,EAAKF,EAAO,EAAIK,EAChBH,EAAKH,EAAS,EAAI,IAAM,CACtBE,GAAMC,CAAI,CACZ,EAEAL,GAAiBK,EAAKF,EAAO,EAAGE,EAAKH,EAAS,CAAC,EACjD,CAEA,SAASI,GAAcD,EAAM,CACtBA,EAAKF,EAAO,IAIb,wBAAyBE,EAAKF,EAAO,EACvCE,EAAKF,EAAO,EAAE,oBAAoB,QAASE,EAAKH,EAAS,CAAC,EAE1DG,EAAKF,EAAO,EAAE,eAAe,QAASE,EAAKH,EAAS,CAAC,EAGvDG,EAAKF,EAAO,EAAI,KAChBE,EAAKH,EAAS,EAAI,KACpB,CAEAH,GAAO,QAAU,CACf,UAAAQ,GACA,aAAAD,EACF,IC1DA,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpC,CAAE,cAAAC,EAAc,EAAI,EAAQ,kBAAkB,EAC9C,CAAE,qBAAAC,GAAsB,wBAAAC,EAAwB,EAAI,IACpDC,GAAO,IACP,CAAE,UAAAC,GAAW,aAAAC,EAAa,EAAI,KAEpC,SAASC,IAAQ,CAAC,CAElB,IAAMC,GAAN,cAA4BP,EAAc,CACxC,YAAaQ,EAAMC,EAASC,EAAU,CACpC,GAAI,CAACF,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAIP,GAAqB,cAAc,EAG/C,GAAM,CAAE,OAAAU,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,OAAAC,EAAQ,gBAAAC,CAAgB,EAAIR,EAElE,GAAI,CACF,GAAI,OAAOE,GAAa,WACtB,MAAM,IAAIT,GAAqB,kBAAkB,EAGnD,GAAI,OAAOQ,GAAY,WACrB,MAAM,IAAIR,GAAqB,iBAAiB,EAGlD,GAAIU,GAAU,OAAOA,EAAO,IAAO,YAAc,OAAOA,EAAO,kBAAqB,WAClF,MAAM,IAAIV,GAAqB,+CAA+C,EAGhF,GAAIW,IAAW,UACb,MAAM,IAAIX,GAAqB,gBAAgB,EAGjD,GAAIc,GAAU,OAAOA,GAAW,WAC9B,MAAM,IAAId,GAAqB,yBAAyB,EAG1D,MAAM,eAAe,CACvB,OAASgB,EAAK,CACZ,MAAId,GAAK,SAASW,CAAI,GACpBX,GAAK,QAAQW,EAAK,GAAG,QAASR,EAAI,EAAGW,CAAG,EAEpCA,CACR,CAEA,KAAK,gBAAkBD,GAAmB,KAC1C,KAAK,OAASH,GAAU,KACxB,KAAK,QAAUJ,EACf,KAAK,SAAWC,EAChB,KAAK,IAAM,KACX,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,SAAW,KAChB,KAAK,KAAOI,EACZ,KAAK,OAASC,GAAU,KAEpBZ,GAAK,SAASW,CAAI,GACpBA,EAAK,GAAG,QAAUG,GAAQ,CACxB,KAAK,QAAQA,CAAG,CAClB,CAAC,EAGHb,GAAU,KAAMO,CAAM,CACxB,CAEA,UAAWO,EAAOC,EAAS,CACzB,GAAI,KAAK,OAAQ,CACfD,EAAM,KAAK,MAAM,EACjB,MACF,CAEApB,GAAO,KAAK,QAAQ,EAEpB,KAAK,MAAQoB,EACb,KAAK,QAAUC,CACjB,CAEA,UAAWC,EAAYC,EAAYC,EAAQC,EAAe,CACxD,GAAM,CAAE,QAAAd,EAAS,OAAAI,EAAQ,QAAAM,EAAS,gBAAAH,CAAgB,EAAI,KAEhDQ,EAAUR,IAAoB,MAAQb,GAAK,gBAAgBkB,CAAU,EAAIlB,GAAK,aAAakB,CAAU,EAE3G,GAAID,EAAa,IAAK,CAChB,KAAK,QACP,KAAK,OAAO,CAAE,WAAAA,EAAY,QAAAI,CAAQ,CAAC,EAErC,MACF,CAIA,GAFA,KAAK,QAAU,KAEXf,IAAY,KACd,OAGF,IAAMgB,EAAM,KAAK,gBAAgBhB,EAAS,KAAM,CAC9C,WAAAW,EACA,QAAAI,EACA,OAAAX,EACA,QAAAM,CACF,CAAC,EAED,GACE,CAACM,GACD,OAAOA,EAAI,OAAU,YACrB,OAAOA,EAAI,KAAQ,YACnB,OAAOA,EAAI,IAAO,WAElB,MAAM,IAAIvB,GAAwB,mBAAmB,EAIvD,OAAAH,GAAS0B,EAAK,CAAE,SAAU,EAAM,EAAIR,GAAQ,CAC1C,GAAM,CAAE,SAAAP,EAAU,IAAAe,EAAK,OAAAZ,EAAQ,SAAAa,EAAU,MAAAR,CAAM,EAAI,KAEnD,KAAK,IAAM,MACPD,GAAO,CAACQ,EAAI,WACdtB,GAAK,QAAQsB,EAAKR,CAAG,EAGvB,KAAK,SAAW,KAChB,KAAK,gBAAgBP,EAAU,KAAMO,GAAO,KAAM,CAAE,OAAAJ,EAAQ,SAAAa,CAAS,CAAC,EAElET,GACFC,EAAM,CAEV,CAAC,EAEDO,EAAI,GAAG,QAASH,CAAM,EAEtB,KAAK,IAAMG,GAEOA,EAAI,oBAAsB,OACxCA,EAAI,kBACJA,EAAI,gBAAgB,aAEH,EACvB,CAEA,OAAQE,EAAO,CACb,GAAM,CAAE,IAAAF,CAAI,EAAI,KAEhB,OAAOA,EAAMA,EAAI,MAAME,CAAK,EAAI,EAClC,CAEA,WAAYD,EAAU,CACpB,GAAM,CAAE,IAAAD,CAAI,EAAI,KAEhBpB,GAAa,IAAI,EAEZoB,IAIL,KAAK,SAAWtB,GAAK,aAAauB,CAAQ,EAE1CD,EAAI,IAAI,EACV,CAEA,QAASR,EAAK,CACZ,GAAM,CAAE,IAAAQ,EAAK,SAAAf,EAAU,OAAAG,EAAQ,KAAAC,CAAK,EAAI,KAExCT,GAAa,IAAI,EAEjB,KAAK,QAAU,KAEXoB,GACF,KAAK,IAAM,KACXtB,GAAK,QAAQsB,EAAKR,CAAG,GACZP,IACT,KAAK,SAAW,KAChB,eAAe,IAAM,CACnB,KAAK,gBAAgBA,EAAU,KAAMO,EAAK,CAAE,OAAAJ,CAAO,CAAC,CACtD,CAAC,GAGCC,IACF,KAAK,KAAO,KACZX,GAAK,QAAQW,EAAMG,CAAG,EAE1B,CACF,EAEA,SAASW,GAAQpB,EAAMC,EAASC,EAAU,CACxC,GAAIA,IAAa,OACf,OAAO,IAAI,QAAQ,CAACmB,EAASC,IAAW,CACtCF,GAAO,KAAK,KAAMpB,EAAMC,EAAS,CAACQ,EAAKc,IAC9Bd,EAAMa,EAAOb,CAAG,EAAIY,EAAQE,CAAI,CACxC,CACH,CAAC,EAGH,GAAI,CACF,IAAMC,EAAU,IAAIzB,GAAcC,EAAMC,EAASC,CAAQ,EAEzD,KAAK,SAASF,EAAMwB,CAAO,CAC7B,OAASf,EAAK,CACZ,GAAI,OAAOP,GAAa,WACtB,MAAMO,EAER,IAAMJ,EAASL,GAAM,OACrB,eAAe,IAAME,EAASO,EAAK,CAAE,OAAAJ,CAAO,CAAC,CAAC,CAChD,CACF,CAEAhB,GAAO,QAAU+B,KChNjB,IAAAK,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,SAAAC,GACA,OAAAC,GACA,YAAAC,EACF,EAAI,EAAQ,aAAa,EACnBC,GAAS,EAAQ,aAAa,EAC9B,CAAE,cAAAC,EAAc,EAAI,EAAQ,kBAAkB,EAC9C,CACJ,qBAAAC,GACA,wBAAAC,GACA,oBAAAC,EACF,EAAI,IACEC,GAAO,IACP,CAAE,UAAAC,GAAW,aAAAC,EAAa,EAAI,KAEpC,SAASC,IAAQ,CAAC,CAElB,IAAMC,GAAU,OAAO,QAAQ,EAEzBC,GAAN,cAA8Bb,EAAS,CACrC,aAAe,CACb,MAAM,CAAE,YAAa,EAAK,CAAC,EAE3B,KAAKY,EAAO,EAAI,IAClB,CAEA,OAAS,CACP,GAAM,CAAE,CAACA,EAAO,EAAGE,CAAO,EAAI,KAE1BA,IACF,KAAKF,EAAO,EAAI,KAChBE,EAAO,EAEX,CAEA,SAAUC,EAAKC,EAAU,CACvB,KAAK,MAAM,EAEXA,EAASD,CAAG,CACd,CACF,EAEME,GAAN,cAA+BjB,EAAS,CACtC,YAAac,EAAQ,CACnB,MAAM,CAAE,YAAa,EAAK,CAAC,EAC3B,KAAKF,EAAO,EAAIE,CAClB,CAEA,OAAS,CACP,KAAKF,EAAO,EAAE,CAChB,CAEA,SAAUG,EAAKC,EAAU,CACnB,CAACD,GAAO,CAAC,KAAK,eAAe,aAC/BA,EAAM,IAAIR,IAGZS,EAASD,CAAG,CACd,CACF,EAEMG,GAAN,cAA8Bd,EAAc,CAC1C,YAAae,EAAMC,EAAS,CAC1B,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAId,GAAqB,cAAc,EAG/C,GAAI,OAAOe,GAAY,WACrB,MAAM,IAAIf,GAAqB,iBAAiB,EAGlD,GAAM,CAAE,OAAAgB,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,gBAAAC,CAAgB,EAAIN,EAE5D,GAAIE,GAAU,OAAOA,EAAO,IAAO,YAAc,OAAOA,EAAO,kBAAqB,WAClF,MAAM,IAAIhB,GAAqB,+CAA+C,EAGhF,GAAIiB,IAAW,UACb,MAAM,IAAIjB,GAAqB,gBAAgB,EAGjD,GAAImB,GAAU,OAAOA,GAAW,WAC9B,MAAM,IAAInB,GAAqB,yBAAyB,EAG1D,MAAM,iBAAiB,EAEvB,KAAK,OAASkB,GAAU,KACxB,KAAK,gBAAkBE,GAAmB,KAC1C,KAAK,QAAUL,EACf,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,OAASI,GAAU,KAExB,KAAK,IAAM,IAAIX,GAAgB,EAAE,GAAG,QAASF,EAAI,EAEjD,KAAK,IAAM,IAAIV,GAAO,CACpB,mBAAoBkB,EAAK,WACzB,YAAa,GACb,KAAM,IAAM,CACV,GAAM,CAAE,KAAAO,CAAK,EAAI,KAEbA,GAAM,QACRA,EAAK,OAAO,CAEhB,EACA,MAAO,CAACC,EAAOC,EAAUZ,IAAa,CACpC,GAAM,CAAE,IAAAa,CAAI,EAAI,KAEZA,EAAI,KAAKF,EAAOC,CAAQ,GAAKC,EAAI,eAAe,UAClDb,EAAS,EAETa,EAAIjB,EAAO,EAAII,CAEnB,EACA,QAAS,CAACD,EAAKC,IAAa,CAC1B,GAAM,CAAE,KAAAU,EAAM,IAAAG,EAAK,IAAAC,EAAK,IAAAC,EAAK,MAAAC,CAAM,EAAI,KAEnC,CAACjB,GAAO,CAACgB,EAAI,eAAe,aAC9BhB,EAAM,IAAIR,IAGRyB,GAASjB,GACXiB,EAAM,EAGRxB,GAAK,QAAQkB,EAAMX,CAAG,EACtBP,GAAK,QAAQqB,EAAKd,CAAG,EACrBP,GAAK,QAAQsB,EAAKf,CAAG,EAErBL,GAAa,IAAI,EAEjBM,EAASD,CAAG,CACd,CACF,CAAC,EAAE,GAAG,YAAa,IAAM,CACvB,GAAM,CAAE,IAAAc,CAAI,EAAI,KAGhBA,EAAI,KAAK,IAAI,CACf,CAAC,EAED,KAAK,IAAM,KAEXpB,GAAU,KAAMY,CAAM,CACxB,CAEA,UAAWW,EAAOC,EAAS,CACzB,GAAM,CAAE,IAAAH,CAAI,EAAI,KAEhB,GAAI,KAAK,OAAQ,CACfE,EAAM,KAAK,MAAM,EACjB,MACF,CAEA7B,GAAO,CAAC2B,EAAK,4BAA4B,EAEzC,KAAK,MAAQE,EACb,KAAK,QAAUC,CACjB,CAEA,UAAWC,EAAYC,EAAYrB,EAAQ,CACzC,GAAM,CAAE,OAAAS,EAAQ,QAAAH,EAAS,QAAAa,CAAQ,EAAI,KAErC,GAAIC,EAAa,IAAK,CACpB,GAAI,KAAK,OAAQ,CACf,IAAME,EAAU,KAAK,kBAAoB,MAAQ5B,GAAK,gBAAgB2B,CAAU,EAAI3B,GAAK,aAAa2B,CAAU,EAChH,KAAK,OAAO,CAAE,WAAAD,EAAY,QAAAE,CAAQ,CAAC,CACrC,CACA,MACF,CAEA,KAAK,IAAM,IAAInB,GAAiBH,CAAM,EAEtC,IAAIY,EACJ,GAAI,CACF,KAAK,QAAU,KACf,IAAMU,EAAU,KAAK,kBAAoB,MAAQ5B,GAAK,gBAAgB2B,CAAU,EAAI3B,GAAK,aAAa2B,CAAU,EAChHT,EAAO,KAAK,gBAAgBN,EAAS,KAAM,CACzC,WAAAc,EACA,QAAAE,EACA,OAAAb,EACA,KAAM,KAAK,IACX,QAAAU,CACF,CAAC,CACH,OAASlB,EAAK,CACZ,WAAK,IAAI,GAAG,QAASJ,EAAI,EACnBI,CACR,CAEA,GAAI,CAACW,GAAQ,OAAOA,EAAK,IAAO,WAC9B,MAAM,IAAIpB,GAAwB,mBAAmB,EAGvDoB,EACG,GAAG,OAASC,GAAU,CACrB,GAAM,CAAE,IAAAI,EAAK,KAAAL,CAAK,EAAI,KAElB,CAACK,EAAI,KAAKJ,CAAK,GAAKD,EAAK,OAC3BA,EAAK,MAAM,CAEf,CAAC,EACA,GAAG,QAAUX,GAAQ,CACpB,GAAM,CAAE,IAAAgB,CAAI,EAAI,KAEhBvB,GAAK,QAAQuB,EAAKhB,CAAG,CACvB,CAAC,EACA,GAAG,MAAO,IAAM,CACf,GAAM,CAAE,IAAAgB,CAAI,EAAI,KAEhBA,EAAI,KAAK,IAAI,CACf,CAAC,EACA,GAAG,QAAS,IAAM,CACjB,GAAM,CAAE,IAAAA,CAAI,EAAI,KAEXA,EAAI,eAAe,OACtBvB,GAAK,QAAQuB,EAAK,IAAIxB,EAAqB,CAE/C,CAAC,EAEH,KAAK,KAAOmB,CACd,CAEA,OAAQC,EAAO,CACb,GAAM,CAAE,IAAAG,CAAI,EAAI,KAChB,OAAOA,EAAI,KAAKH,CAAK,CACvB,CAEA,WAAYU,EAAU,CACpB,GAAM,CAAE,IAAAP,CAAI,EAAI,KAChBA,EAAI,KAAK,IAAI,CACf,CAEA,QAASf,EAAK,CACZ,GAAM,CAAE,IAAAgB,CAAI,EAAI,KAChB,KAAK,QAAU,KACfvB,GAAK,QAAQuB,EAAKhB,CAAG,CACvB,CACF,EAEA,SAASuB,GAAUnB,EAAMC,EAAS,CAChC,GAAI,CACF,IAAMmB,EAAkB,IAAIrB,GAAgBC,EAAMC,CAAO,EACzD,YAAK,SAAS,CAAE,GAAGD,EAAM,KAAMoB,EAAgB,GAAI,EAAGA,CAAe,EAC9DA,EAAgB,GACzB,OAASxB,EAAK,CACZ,OAAO,IAAIb,GAAY,EAAE,QAAQa,CAAG,CACtC,CACF,CAEAhB,GAAO,QAAUuC,KC3PjB,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,qBAAAC,GAAsB,YAAAC,EAAY,EAAI,IACxC,CAAE,cAAAC,EAAc,EAAI,EAAQ,kBAAkB,EAC9CC,GAAS,EAAQ,aAAa,EAC9BC,GAAO,IACP,CAAE,UAAAC,GAAW,aAAAC,EAAa,EAAI,KAE9BC,GAAN,cAA6BL,EAAc,CACzC,YAAaM,EAAMC,EAAU,CAC3B,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAIR,GAAqB,cAAc,EAG/C,GAAI,OAAOS,GAAa,WACtB,MAAM,IAAIT,GAAqB,kBAAkB,EAGnD,GAAM,CAAE,OAAAU,EAAQ,OAAAC,EAAQ,gBAAAC,CAAgB,EAAIJ,EAE5C,GAAIE,GAAU,OAAOA,EAAO,IAAO,YAAc,OAAOA,EAAO,kBAAqB,WAClF,MAAM,IAAIV,GAAqB,+CAA+C,EAGhF,MAAM,gBAAgB,EAEtB,KAAK,gBAAkBY,GAAmB,KAC1C,KAAK,OAASD,GAAU,KACxB,KAAK,SAAWF,EAChB,KAAK,MAAQ,KACb,KAAK,QAAU,KAEfJ,GAAU,KAAMK,CAAM,CACxB,CAEA,UAAWG,EAAOC,EAAS,CACzB,GAAI,KAAK,OAAQ,CACfD,EAAM,KAAK,MAAM,EACjB,MACF,CAEAV,GAAO,KAAK,QAAQ,EAEpB,KAAK,MAAQU,EACb,KAAK,QAAU,IACjB,CAEA,WAAa,CACX,MAAM,IAAIZ,GAAY,cAAe,IAAI,CAC3C,CAEA,UAAWc,EAAYC,EAAYC,EAAQ,CACzCd,GAAOY,IAAe,GAAG,EAEzB,GAAM,CAAE,SAAAN,EAAU,OAAAE,EAAQ,QAAAG,CAAQ,EAAI,KAEtCR,GAAa,IAAI,EAEjB,KAAK,SAAW,KAChB,IAAMY,EAAU,KAAK,kBAAoB,MAAQd,GAAK,gBAAgBY,CAAU,EAAIZ,GAAK,aAAaY,CAAU,EAChH,KAAK,gBAAgBP,EAAU,KAAM,KAAM,CACzC,QAAAS,EACA,OAAAD,EACA,OAAAN,EACA,QAAAG,CACF,CAAC,CACH,CAEA,QAASK,EAAK,CACZ,GAAM,CAAE,SAAAV,EAAU,OAAAE,CAAO,EAAI,KAE7BL,GAAa,IAAI,EAEbG,IACF,KAAK,SAAW,KAChB,eAAe,IAAM,CACnB,KAAK,gBAAgBA,EAAU,KAAMU,EAAK,CAAE,OAAAR,CAAO,CAAC,CACtD,CAAC,EAEL,CACF,EAEA,SAASS,GAASZ,EAAMC,EAAU,CAChC,GAAIA,IAAa,OACf,OAAO,IAAI,QAAQ,CAACY,EAASC,IAAW,CACtCF,GAAQ,KAAK,KAAMZ,EAAM,CAACW,EAAKI,IACtBJ,EAAMG,EAAOH,CAAG,EAAIE,EAAQE,CAAI,CACxC,CACH,CAAC,EAGH,GAAI,CACF,IAAMC,EAAiB,IAAIjB,GAAeC,EAAMC,CAAQ,EAClDgB,EAAc,CAClB,GAAGjB,EACH,OAAQA,EAAK,QAAU,MACvB,QAASA,EAAK,UAAY,WAC5B,EAEA,KAAK,SAASiB,EAAaD,CAAc,CAC3C,OAASL,EAAK,CACZ,GAAI,OAAOV,GAAa,WACtB,MAAMU,EAER,IAAMR,EAASH,GAAM,OACrB,eAAe,IAAMC,EAASU,EAAK,CAAE,OAAAR,CAAO,CAAC,CAAC,CAChD,CACF,CAEAZ,GAAO,QAAUqB,KC7GjB,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,cAAAC,EAAc,EAAI,EAAQ,kBAAkB,EAC9C,CAAE,qBAAAC,GAAsB,YAAAC,EAAY,EAAI,IACxCC,GAAO,IACP,CAAE,UAAAC,GAAW,aAAAC,EAAa,EAAI,KAE9BC,GAAN,cAA6BN,EAAc,CACzC,YAAaO,EAAMC,EAAU,CAC3B,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAC3B,MAAM,IAAIN,GAAqB,cAAc,EAG/C,GAAI,OAAOO,GAAa,WACtB,MAAM,IAAIP,GAAqB,kBAAkB,EAGnD,GAAM,CAAE,OAAAQ,EAAQ,OAAAC,EAAQ,gBAAAC,CAAgB,EAAIJ,EAE5C,GAAIE,GAAU,OAAOA,EAAO,IAAO,YAAc,OAAOA,EAAO,kBAAqB,WAClF,MAAM,IAAIR,GAAqB,+CAA+C,EAGhF,MAAM,gBAAgB,EAEtB,KAAK,OAASS,GAAU,KACxB,KAAK,gBAAkBC,GAAmB,KAC1C,KAAK,SAAWH,EAChB,KAAK,MAAQ,KAEbJ,GAAU,KAAMK,CAAM,CACxB,CAEA,UAAWG,EAAOC,EAAS,CACzB,GAAI,KAAK,OAAQ,CACfD,EAAM,KAAK,MAAM,EACjB,MACF,CAEAb,GAAO,KAAK,QAAQ,EAEpB,KAAK,MAAQa,EACb,KAAK,QAAUC,CACjB,CAEA,WAAa,CACX,MAAM,IAAIX,GAAY,cAAe,IAAI,CAC3C,CAEA,UAAWY,EAAYC,EAAYC,EAAQ,CACzC,GAAM,CAAE,SAAAR,EAAU,OAAAE,EAAQ,QAAAG,CAAQ,EAAI,KAEtCR,GAAa,IAAI,EAEjB,KAAK,SAAW,KAEhB,IAAIY,EAAUF,EAEVE,GAAW,OACbA,EAAU,KAAK,kBAAoB,MAAQd,GAAK,gBAAgBY,CAAU,EAAIZ,GAAK,aAAaY,CAAU,GAG5G,KAAK,gBAAgBP,EAAU,KAAM,KAAM,CACzC,WAAAM,EACA,QAAAG,EACA,OAAAD,EACA,OAAAN,EACA,QAAAG,CACF,CAAC,CACH,CAEA,QAASK,EAAK,CACZ,GAAM,CAAE,SAAAV,EAAU,OAAAE,CAAO,EAAI,KAE7BL,GAAa,IAAI,EAEbG,IACF,KAAK,SAAW,KAChB,eAAe,IAAM,CACnB,KAAK,gBAAgBA,EAAU,KAAMU,EAAK,CAAE,OAAAR,CAAO,CAAC,CACtD,CAAC,EAEL,CACF,EAEA,SAASS,GAASZ,EAAMC,EAAU,CAChC,GAAIA,IAAa,OACf,OAAO,IAAI,QAAQ,CAACY,EAASC,IAAW,CACtCF,GAAQ,KAAK,KAAMZ,EAAM,CAACW,EAAKI,IACtBJ,EAAMG,EAAOH,CAAG,EAAIE,EAAQE,CAAI,CACxC,CACH,CAAC,EAGH,GAAI,CACF,IAAMC,EAAiB,IAAIjB,GAAeC,EAAMC,CAAQ,EAClDgB,EAAiB,CAAE,GAAGjB,EAAM,OAAQ,SAAU,EAEpD,KAAK,SAASiB,EAAgBD,CAAc,CAC9C,OAASL,EAAK,CACZ,GAAI,OAAOV,GAAa,WACtB,MAAMU,EAER,IAAMR,EAASH,GAAM,OACrB,eAAe,IAAMC,EAASU,EAAK,CAAE,OAAAR,CAAO,CAAC,CAAC,CAChD,CACF,CAEAZ,GAAO,QAAUqB,KC7GjB,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEAA,GAAO,QAAQ,QAAU,KACzBA,GAAO,QAAQ,OAAS,KACxBA,GAAO,QAAQ,SAAW,KAC1BA,GAAO,QAAQ,QAAU,KACzBA,GAAO,QAAQ,QAAU,OCNzB,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,YAAAC,EAAY,EAAI,IAKlBC,GAAN,cAAkCD,EAAY,CAC5C,YAAaE,EAAS,CACpB,MAAMA,CAAO,EACb,KAAK,KAAO,sBACZ,KAAK,QAAUA,GAAW,4DAC1B,KAAK,KAAO,+BACd,CACF,EAEAH,GAAO,QAAU,CACf,oBAAAE,EACF,IClBA,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEAA,GAAO,QAAU,CACf,OAAQ,OAAO,OAAO,EACtB,SAAU,OAAO,SAAS,EAC1B,SAAU,OAAO,SAAS,EAC1B,YAAa,OAAO,YAAY,EAChC,aAAc,OAAO,cAAc,EACnC,gBAAiB,OAAO,iBAAiB,EACzC,iBAAkB,OAAO,kBAAkB,EAC3C,eAAgB,OAAO,gBAAgB,EACvC,WAAY,OAAO,YAAY,EAC/B,cAAe,OAAO,gBAAgB,EACtC,cAAe,OAAO,gBAAgB,EACtC,cAAe,OAAO,eAAe,EACrC,OAAQ,OAAO,OAAO,EACtB,eAAgB,OAAO,sBAAsB,EAC7C,kBAAmB,OAAO,mBAAmB,EAC7C,QAAS,OAAO,QAAQ,EACxB,cAAe,OAAO,gBAAgB,EACtC,YAAa,OAAO,aAAa,EACjC,eAAgB,OAAO,iBAAiB,EACxC,WAAY,OAAO,WAAW,EAC9B,qBAAsB,OAAO,uBAAuB,CACtD,ICxBA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,oBAAAC,EAAoB,EAAI,KAC1B,CACJ,YAAAC,GACA,WAAAC,GACA,kBAAAC,GACA,QAAAC,GACA,eAAAC,EACF,EAAI,KACE,CAAE,uBAAAC,EAAuB,EAAI,IAC7B,CAAE,aAAAC,EAAa,EAAI,EAAQ,WAAW,EACtC,CACJ,MAAO,CACL,UAAAC,EACF,CACF,EAAI,EAAQ,WAAW,EAEvB,SAASC,GAAYC,EAAOC,EAAO,CACjC,OAAI,OAAOD,GAAU,SACZA,IAAUC,EAEfD,aAAiB,OACZA,EAAM,KAAKC,CAAK,EAErB,OAAOD,GAAU,WACZA,EAAMC,CAAK,IAAM,GAEnB,EACT,CAEA,SAASC,GAAkBC,EAAS,CAClC,OAAO,OAAO,YACZ,OAAO,QAAQA,CAAO,EAAE,IAAI,CAAC,CAACC,EAAYC,CAAW,IAC5C,CAACD,EAAW,kBAAkB,EAAGC,CAAW,CACpD,CACH,CACF,CAMA,SAASC,GAAiBH,EAASI,EAAK,CACtC,GAAI,MAAM,QAAQJ,CAAO,EAAG,CAC1B,QAASK,EAAI,EAAGA,EAAIL,EAAQ,OAAQK,GAAK,EACvC,GAAIL,EAAQK,CAAC,EAAE,kBAAkB,IAAMD,EAAI,kBAAkB,EAC3D,OAAOJ,EAAQK,EAAI,CAAC,EAIxB,MACF,KAAO,QAAI,OAAOL,EAAQ,KAAQ,WACzBA,EAAQ,IAAII,CAAG,EAEfL,GAAiBC,CAAO,EAAEI,EAAI,kBAAkB,CAAC,CAE5D,CAGA,SAASE,GAAuBN,EAAS,CACvC,IAAMO,EAAQP,EAAQ,MAAM,EACtBQ,EAAU,CAAC,EACjB,QAASC,EAAQ,EAAGA,EAAQF,EAAM,OAAQE,GAAS,EACjDD,EAAQ,KAAK,CAACD,EAAME,CAAK,EAAGF,EAAME,EAAQ,CAAC,CAAC,CAAC,EAE/C,OAAO,OAAO,YAAYD,CAAO,CACnC,CAEA,SAASE,GAAcC,EAAcX,EAAS,CAC5C,GAAI,OAAOW,EAAa,SAAY,WAClC,OAAI,MAAM,QAAQX,CAAO,IACvBA,EAAUM,GAAsBN,CAAO,GAElCW,EAAa,QAAQX,EAAUD,GAAiBC,CAAO,EAAI,CAAC,CAAC,EAEtE,GAAI,OAAOW,EAAa,QAAY,IAClC,MAAO,GAET,GAAI,OAAOX,GAAY,UAAY,OAAOW,EAAa,SAAY,SACjE,MAAO,GAGT,OAAW,CAACC,EAAiBC,CAAgB,IAAK,OAAO,QAAQF,EAAa,OAAO,EAAG,CACtF,IAAMT,EAAcC,GAAgBH,EAASY,CAAe,EAE5D,GAAI,CAAChB,GAAWiB,EAAkBX,CAAW,EAC3C,MAAO,EAEX,CACA,MAAO,EACT,CAEA,SAASY,GAASC,EAAM,CACtB,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAGT,IAAMC,EAAeD,EAAK,MAAM,GAAG,EAEnC,GAAIC,EAAa,SAAW,EAC1B,OAAOD,EAGT,IAAME,EAAK,IAAI,gBAAgBD,EAAa,IAAI,CAAC,EACjD,OAAAC,EAAG,KAAK,EACD,CAAC,GAAGD,EAAcC,EAAG,SAAS,CAAC,EAAE,KAAK,GAAG,CAClD,CAEA,SAASC,GAAUP,EAAc,CAAE,KAAAI,EAAM,OAAAI,EAAQ,KAAAC,EAAM,QAAApB,CAAQ,EAAG,CAChE,IAAMqB,EAAYzB,GAAWe,EAAa,KAAMI,CAAI,EAC9CO,EAAc1B,GAAWe,EAAa,OAAQQ,CAAM,EACpDI,EAAY,OAAOZ,EAAa,KAAS,IAAcf,GAAWe,EAAa,KAAMS,CAAI,EAAI,GAC7FI,EAAed,GAAaC,EAAcX,CAAO,EACvD,OAAOqB,GAAaC,GAAeC,GAAaC,CAClD,CAEA,SAASC,GAAiBC,EAAM,CAC9B,OAAI,OAAO,SAASA,CAAI,GAEbA,aAAgB,YAEhBA,aAAgB,YAHlBA,EAKE,OAAOA,GAAS,SAClB,KAAK,UAAUA,CAAI,EACjBA,EACFA,EAAK,SAAS,EAEd,EAEX,CAEA,SAASC,GAAiBC,EAAgBxB,EAAK,CAC7C,IAAMyB,EAAWzB,EAAI,MAAQX,GAAuBW,EAAI,KAAMA,EAAI,KAAK,EAAIA,EAAI,KACzE0B,EAAe,OAAOD,GAAa,SAAWf,GAAQe,CAAQ,EAAIA,EAElEE,EAAmCC,GAAoBF,CAAY,EAGrEG,EAAwBL,EACzB,OAAO,CAAC,CAAE,SAAAM,CAAS,IAAM,CAACA,CAAQ,EAClC,OAAO,CAAC,CAAE,KAAAnB,EAAM,oBAAAoB,CAAoB,IAC5BA,EACHvC,GAAWoC,GAAoBlB,GAAQC,CAAI,CAAC,EAAGgB,CAAgC,EAC/EnC,GAAWkB,GAAQC,CAAI,EAAGe,CAAY,CAC3C,EACH,GAAIG,EAAsB,SAAW,EACnC,MAAM,IAAI9C,GAAoB,uCAAuC2C,CAAY,GAAG,EAKtF,GADAG,EAAwBA,EAAsB,OAAO,CAAC,CAAE,OAAAd,CAAO,IAAMvB,GAAWuB,EAAQf,EAAI,MAAM,CAAC,EAC/F6B,EAAsB,SAAW,EACnC,MAAM,IAAI9C,GAAoB,yCAAyCiB,EAAI,MAAM,cAAc0B,CAAY,GAAG,EAKhH,GADAG,EAAwBA,EAAsB,OAAO,CAAC,CAAE,KAAAb,CAAK,IAAM,OAAOA,EAAS,IAAcxB,GAAWwB,EAAMhB,EAAI,IAAI,EAAI,EAAI,EAC9H6B,EAAsB,SAAW,EACnC,MAAM,IAAI9C,GAAoB,uCAAuCiB,EAAI,IAAI,cAAc0B,CAAY,GAAG,EAK5G,GADAG,EAAwBA,EAAsB,OAAQtB,GAAiBD,GAAaC,EAAcP,EAAI,OAAO,CAAC,EAC1G6B,EAAsB,SAAW,EAAG,CACtC,IAAMjC,EAAU,OAAOI,EAAI,SAAY,SAAW,KAAK,UAAUA,EAAI,OAAO,EAAIA,EAAI,QACpF,MAAM,IAAIjB,GAAoB,0CAA0Ca,CAAO,cAAc8B,CAAY,GAAG,CAC9G,CAEA,OAAOG,EAAsB,CAAC,CAChC,CAEA,SAASG,GAAiBR,EAAgBxB,EAAKsB,EAAMW,EAAM,CACzD,IAAMC,EAAW,CAAE,aAAc,EAAG,MAAO,EAAG,QAAS,GAAO,SAAU,GAAO,GAAGD,CAAK,EACjFE,EAAY,OAAOb,GAAS,WAAa,CAAE,SAAUA,CAAK,EAAI,CAAE,GAAGA,CAAK,EACxEc,EAAkB,CAAE,GAAGF,EAAU,GAAGlC,EAAK,QAAS,GAAM,KAAM,CAAE,MAAO,KAAM,GAAGmC,CAAU,CAAE,EAClG,OAAAX,EAAe,KAAKY,CAAe,EAC5BA,CACT,CAEA,SAASC,GAAoBb,EAAgBxB,EAAK,CAChD,IAAMK,EAAQmB,EAAe,UAAUc,GAChCA,EAAS,SAGPxB,GAASwB,EAAUtC,CAAG,EAFpB,EAGV,EACGK,IAAU,IACZmB,EAAe,OAAOnB,EAAO,CAAC,CAElC,CAKA,SAASuB,GAAqBjB,EAAM,CAClC,KAAOA,EAAK,SAAS,GAAG,GACtBA,EAAOA,EAAK,MAAM,EAAG,EAAE,EAGzB,OAAIA,EAAK,SAAW,IAClBA,EAAO,KAGFA,CACT,CAEA,SAAS4B,GAAUN,EAAM,CACvB,GAAM,CAAE,KAAAtB,EAAM,OAAAI,EAAQ,KAAAC,EAAM,QAAApB,EAAS,MAAA4C,CAAM,EAAIP,EAE/C,MAAO,CACL,KAAAtB,EACA,OAAAI,EACA,KAAAC,EACA,QAAApB,EACA,MAAA4C,CACF,CACF,CAEA,SAASC,GAAmBnB,EAAM,CAChC,IAAMoB,EAAO,OAAO,KAAKpB,CAAI,EACvBqB,EAAS,CAAC,EAChB,QAAS1C,EAAI,EAAGA,EAAIyC,EAAK,OAAQ,EAAEzC,EAAG,CACpC,IAAMD,EAAM0C,EAAKzC,CAAC,EACZP,EAAQ4B,EAAKtB,CAAG,EAChB4C,EAAO,OAAO,KAAK,GAAG5C,CAAG,EAAE,EACjC,GAAI,MAAM,QAAQN,CAAK,EACrB,QAASmD,EAAI,EAAGA,EAAInD,EAAM,OAAQ,EAAEmD,EAClCF,EAAO,KAAKC,EAAM,OAAO,KAAK,GAAGlD,EAAMmD,CAAC,CAAC,EAAE,CAAC,OAG9CF,EAAO,KAAKC,EAAM,OAAO,KAAK,GAAGlD,CAAK,EAAE,CAAC,CAE7C,CACA,OAAOiD,CACT,CAMA,SAASG,GAAeC,EAAY,CAClC,OAAOzD,GAAayD,CAAU,GAAK,SACrC,CAEA,eAAeC,GAAahC,EAAM,CAChC,IAAMiC,EAAU,CAAC,EACjB,cAAiB3B,KAAQN,EACvBiC,EAAQ,KAAK3B,CAAI,EAEnB,OAAO,OAAO,OAAO2B,CAAO,EAAE,SAAS,MAAM,CAC/C,CAKA,SAAS1C,GAAc0B,EAAMiB,EAAS,CAEpC,IAAMlD,EAAMuC,GAASN,CAAI,EACnB1B,EAAegB,GAAgB,KAAKvC,EAAW,EAAGgB,CAAG,EAE3DO,EAAa,eAGTA,EAAa,KAAK,WACpBA,EAAa,KAAO,CAAE,GAAGA,EAAa,KAAM,GAAGA,EAAa,KAAK,SAAS0B,CAAI,CAAE,GAIlF,GAAM,CAAE,KAAM,CAAE,WAAAc,EAAY,KAAAzB,EAAM,QAAA1B,EAAS,SAAAuD,EAAU,MAAAC,CAAM,EAAG,MAAAC,EAAO,QAAAC,CAAQ,EAAI/C,EAC3E,CAAE,aAAAgD,EAAc,MAAAC,CAAM,EAAIjD,EAOhC,GAJAA,EAAa,SAAW,CAAC+C,GAAWC,GAAgBC,EACpDjD,EAAa,QAAUgD,EAAeC,EAGlCJ,IAAU,KACZ,OAAAf,GAAmB,KAAKrD,EAAW,EAAGgB,CAAG,EACzCkD,EAAQ,QAAQE,CAAK,EACd,GAIL,OAAOC,GAAU,UAAYA,EAAQ,EACvC,WAAW,IAAM,CACfI,EAAY,KAAKzE,EAAW,CAAC,CAC/B,EAAGqE,CAAK,EAERI,EAAY,KAAKzE,EAAW,CAAC,EAG/B,SAASyE,EAAajC,EAAgBkC,EAAQpC,EAAM,CAElD,IAAMqC,EAAc,MAAM,QAAQ1B,EAAK,OAAO,EAC1C/B,GAAsB+B,EAAK,OAAO,EAClCA,EAAK,QACHjB,EAAO,OAAO0C,GAAU,WAC1BA,EAAM,CAAE,GAAGzB,EAAM,QAAS0B,CAAY,CAAC,EACvCD,EAGJ,GAAInE,GAAUyB,CAAI,EAAG,CAMnBA,EAAK,KAAM4C,GAAYH,EAAYjC,EAAgBoC,CAAO,CAAC,EAC3D,MACF,CAEA,IAAMC,EAAexC,GAAgBL,CAAI,EACnC8C,EAAkBrB,GAAkB7C,CAAO,EAC3CmE,EAAmBtB,GAAkBU,CAAQ,EAEnDD,EAAQ,YAAYc,GAAOd,EAAQ,QAAQc,CAAG,EAAG,IAAI,EACrDd,EAAQ,YAAYH,EAAYe,EAAiBG,EAAQnB,GAAcC,CAAU,CAAC,EAClFG,EAAQ,SAAS,OAAO,KAAKW,CAAY,CAAC,EAC1CX,EAAQ,aAAaa,CAAgB,EACrC1B,GAAmBb,EAAgBxB,CAAG,CACxC,CAEA,SAASiE,GAAU,CAAC,CAEpB,MAAO,EACT,CAEA,SAASC,IAAqB,CAC5B,IAAMC,EAAQ,KAAKlF,EAAU,EACvBmF,EAAS,KAAKjF,EAAO,EACrBkF,EAAmB,KAAKnF,EAAiB,EAE/C,OAAO,SAAmB+C,EAAMiB,EAAS,CACvC,GAAIiB,EAAM,aACR,GAAI,CACF5D,GAAa,KAAK,KAAM0B,EAAMiB,CAAO,CACvC,OAASE,EAAO,CACd,GAAIA,aAAiBrE,GAAqB,CACxC,IAAMuF,EAAaH,EAAM/E,EAAc,EAAE,EACzC,GAAIkF,IAAe,GACjB,MAAM,IAAIvF,GAAoB,GAAGqE,EAAM,OAAO,kCAAkCgB,CAAM,yCAAyC,EAEjI,GAAIG,GAAgBD,EAAYF,CAAM,EACpCC,EAAiB,KAAK,KAAMpC,EAAMiB,CAAO,MAEzC,OAAM,IAAInE,GAAoB,GAAGqE,EAAM,OAAO,kCAAkCgB,CAAM,+DAA+D,CAEzJ,KACE,OAAMhB,CAEV,MAEAiB,EAAiB,KAAK,KAAMpC,EAAMiB,CAAO,CAE7C,CACF,CAEA,SAASqB,GAAiBD,EAAYF,EAAQ,CAC5C,IAAMI,EAAM,IAAI,IAAIJ,CAAM,EAC1B,OAAIE,IAAe,GACV,GACE,SAAM,QAAQA,CAAU,GAAKA,EAAW,KAAMG,GAAYjF,GAAWiF,EAASD,EAAI,IAAI,CAAC,EAIpG,CAEA,SAASE,GAAkBzC,EAAM,CAC/B,GAAIA,EAAM,CACR,GAAM,CAAE,MAAAkC,EAAO,GAAGQ,CAAY,EAAI1C,EAClC,OAAO0C,CACT,CACF,CAEA7F,GAAO,QAAU,CACf,gBAAAuC,GACA,gBAAAE,GACA,gBAAAS,GACA,mBAAAK,GACA,SAAAE,GACA,kBAAAE,GACA,WAAAjD,GACA,YAAAwD,GACA,cAAAF,GACA,aAAAvC,GACA,kBAAA2D,GACA,gBAAAK,GACA,iBAAAG,GACA,gBAAA3E,GACA,sBAAAG,EACF,ICxYA,IAAA0E,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,gBAAAC,GAAiB,SAAAC,GAAU,gBAAAC,EAAgB,EAAI,KACjD,CACJ,YAAAC,GACA,aAAAC,GACA,gBAAAC,GACA,iBAAAC,GACA,eAAAC,GACA,cAAAC,GACA,qBAAAC,EACF,EAAI,KACE,CAAE,qBAAAC,EAAqB,EAAI,IAC3B,CAAE,uBAAAC,EAAuB,EAAI,IAK7BC,GAAN,KAAgB,CACd,YAAaC,EAAc,CACzB,KAAKL,EAAa,EAAIK,CACxB,CAKA,MAAOC,EAAU,CACf,GAAI,OAAOA,GAAa,UAAY,CAAC,OAAO,UAAUA,CAAQ,GAAKA,GAAY,EAC7E,MAAM,IAAIJ,GAAqB,sCAAsC,EAGvE,YAAKF,EAAa,EAAE,MAAQM,EACrB,IACT,CAKA,SAAW,CACT,YAAKN,EAAa,EAAE,QAAU,GACvB,IACT,CAKA,MAAOO,EAAa,CAClB,GAAI,OAAOA,GAAgB,UAAY,CAAC,OAAO,UAAUA,CAAW,GAAKA,GAAe,EACtF,MAAM,IAAIL,GAAqB,yCAAyC,EAG1E,YAAKF,EAAa,EAAE,MAAQO,EACrB,IACT,CACF,EAKMC,GAAN,KAAsB,CACpB,YAAaC,EAAMC,EAAgB,CACjC,GAAI,OAAOD,GAAS,SAClB,MAAM,IAAIP,GAAqB,wBAAwB,EAEzD,GAAI,OAAOO,EAAK,KAAS,IACvB,MAAM,IAAIP,GAAqB,2BAA2B,EAQ5D,GANI,OAAOO,EAAK,OAAW,MACzBA,EAAK,OAAS,OAKZ,OAAOA,EAAK,MAAS,SACvB,GAAIA,EAAK,MACPA,EAAK,KAAON,GAAuBM,EAAK,KAAMA,EAAK,KAAK,MACnD,CAEL,IAAME,EAAY,IAAI,IAAIF,EAAK,KAAM,SAAS,EAC9CA,EAAK,KAAOE,EAAU,SAAWA,EAAU,MAC7C,CAEE,OAAOF,EAAK,QAAW,WACzBA,EAAK,OAASA,EAAK,OAAO,YAAY,GAGxC,KAAKb,EAAY,EAAIH,GAASgB,CAAI,EAClC,KAAKd,EAAW,EAAIe,EACpB,KAAKT,EAAoB,EAAIQ,EAAK,qBAAuB,GACzD,KAAKZ,EAAe,EAAI,CAAC,EACzB,KAAKC,EAAgB,EAAI,CAAC,EAC1B,KAAKC,EAAc,EAAI,EACzB,CAEA,4BAA6B,CAAE,WAAAa,EAAY,KAAAC,EAAM,gBAAAC,CAAgB,EAAG,CAClE,IAAMC,EAAevB,GAAgBqB,CAAI,EACnCG,EAAgB,KAAKjB,EAAc,EAAI,CAAE,iBAAkBgB,EAAa,MAAO,EAAI,CAAC,EACpFE,EAAU,CAAE,GAAG,KAAKpB,EAAe,EAAG,GAAGmB,EAAe,GAAGF,EAAgB,OAAQ,EACnFI,EAAW,CAAE,GAAG,KAAKpB,EAAgB,EAAG,GAAGgB,EAAgB,QAAS,EAE1E,MAAO,CAAE,WAAAF,EAAY,KAAAC,EAAM,QAAAI,EAAS,SAAAC,CAAS,CAC/C,CAEA,wBAAyBC,EAAiB,CACxC,GAAI,OAAOA,EAAgB,WAAe,IACxC,MAAM,IAAIjB,GAAqB,4BAA4B,EAE7D,GAAI,OAAOiB,EAAgB,iBAAoB,UAAYA,EAAgB,kBAAoB,KAC7F,MAAM,IAAIjB,GAAqB,mCAAmC,CAEtE,CAKA,MAAOkB,EAAkC,CAGvC,GAAI,OAAOA,GAAqC,WAAY,CAI1D,IAAMC,EAA2BZ,GAAS,CAExC,IAAMa,EAAeF,EAAiCX,CAAI,EAG1D,GAAI,OAAOa,GAAiB,UAAYA,IAAiB,KACvD,MAAM,IAAIpB,GAAqB,8CAA8C,EAG/E,IAAMiB,EAAkB,CAAE,KAAM,GAAI,gBAAiB,CAAC,EAAG,GAAGG,CAAa,EACzE,YAAK,wBAAwBH,CAAe,EAGrC,CACL,GAAG,KAAK,4BAA4BA,CAAe,CACrD,CACF,EAGMI,EAAkB7B,GAAgB,KAAKC,EAAW,EAAG,KAAKC,EAAY,EAAGyB,EAAyB,CAAE,oBAAqB,KAAKpB,EAAoB,CAAE,CAAC,EAC3J,OAAO,IAAIG,GAAUmB,CAAe,CACtC,CAMA,IAAMJ,EAAkB,CACtB,WAAYC,EACZ,KAAM,UAAU,CAAC,IAAM,OAAY,GAAK,UAAU,CAAC,EACnD,gBAAiB,UAAU,CAAC,IAAM,OAAY,CAAC,EAAI,UAAU,CAAC,CAChE,EACA,KAAK,wBAAwBD,CAAe,EAG5C,IAAMK,EAAe,KAAK,4BAA4BL,CAAe,EAC/DI,EAAkB7B,GAAgB,KAAKC,EAAW,EAAG,KAAKC,EAAY,EAAG4B,EAAc,CAAE,oBAAqB,KAAKvB,EAAoB,CAAE,CAAC,EAChJ,OAAO,IAAIG,GAAUmB,CAAe,CACtC,CAKA,eAAgBE,EAAO,CACrB,GAAI,OAAOA,EAAU,IACnB,MAAM,IAAIvB,GAAqB,uBAAuB,EAGxD,IAAMqB,EAAkB7B,GAAgB,KAAKC,EAAW,EAAG,KAAKC,EAAY,EAAG,CAAE,MAAA6B,CAAM,EAAG,CAAE,oBAAqB,KAAKxB,EAAoB,CAAE,CAAC,EAC7I,OAAO,IAAIG,GAAUmB,CAAe,CACtC,CAKA,oBAAqBN,EAAS,CAC5B,GAAI,OAAOA,EAAY,IACrB,MAAM,IAAIf,GAAqB,yBAAyB,EAG1D,YAAKL,EAAe,EAAIoB,EACjB,IACT,CAKA,qBAAsBC,EAAU,CAC9B,GAAI,OAAOA,EAAa,IACtB,MAAM,IAAIhB,GAAqB,0BAA0B,EAG3D,YAAKJ,EAAgB,EAAIoB,EAClB,IACT,CAKA,oBAAsB,CACpB,YAAKnB,EAAc,EAAI,GAChB,IACT,CACF,EAEAR,GAAO,QAAQ,gBAAkBiB,GACjCjB,GAAO,QAAQ,UAAYa,KChN3B,IAAAsB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,UAAAC,EAAU,EAAI,EAAQ,WAAW,EACnCC,GAAS,KACT,CAAE,kBAAAC,EAAkB,EAAI,KACxB,CACJ,YAAAC,GACA,WAAAC,GACA,OAAAC,GACA,eAAAC,GACA,QAAAC,GACA,kBAAAC,GACA,WAAAC,GACA,qBAAAC,EACF,EAAI,KACE,CAAE,gBAAAC,EAAgB,EAAI,KACtBC,GAAU,KACV,CAAE,qBAAAC,EAAqB,EAAI,IAK3BC,GAAN,cAAyBb,EAAO,CAC9B,YAAac,EAAQC,EAAM,CACzB,GAAI,CAACA,GAAQ,CAACA,EAAK,OAAS,OAAOA,EAAK,MAAM,UAAa,WACzD,MAAM,IAAIH,GAAqB,0CAA0C,EAG3E,MAAME,EAAQC,CAAI,EAElB,KAAKZ,EAAU,EAAIY,EAAK,MACxB,KAAKT,EAAO,EAAIQ,EAChB,KAAKL,EAAoB,EAAIM,EAAK,qBAAuB,GACzD,KAAKb,EAAW,EAAI,CAAC,EACrB,KAAKM,EAAU,EAAI,EACnB,KAAKD,EAAiB,EAAI,KAAK,SAC/B,KAAKF,EAAc,EAAI,KAAK,MAAM,KAAK,IAAI,EAE3C,KAAK,SAAWJ,GAAkB,KAAK,IAAI,EAC3C,KAAK,MAAQ,KAAKG,EAAM,CAC1B,CAEA,IAAKO,GAAQ,UAAU,GAAK,CAC1B,OAAO,KAAKH,EAAU,CACxB,CAKA,UAAWO,EAAM,CACf,OAAO,IAAIL,GACTK,GAAQ,CAAE,oBAAqB,KAAKN,EAAoB,EAAG,GAAGM,CAAK,EACnE,KAAKb,EAAW,CAClB,CACF,CAEA,MAAOE,EAAM,GAAK,CAChB,MAAML,GAAU,KAAKM,EAAc,CAAC,EAAE,EACtC,KAAKG,EAAU,EAAI,EACnB,KAAKL,EAAU,EAAEQ,GAAQ,QAAQ,EAAE,OAAO,KAAKL,EAAO,CAAC,CACzD,CACF,EAEAR,GAAO,QAAUe,KC/DjB,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,UAAAC,EAAU,EAAI,EAAQ,WAAW,EACnCC,GAAO,KACP,CAAE,kBAAAC,EAAkB,EAAI,KACxB,CACJ,YAAAC,GACA,WAAAC,GACA,OAAAC,GACA,eAAAC,GACA,QAAAC,GACA,kBAAAC,GACA,WAAAC,GACA,qBAAAC,EACF,EAAI,KACE,CAAE,gBAAAC,EAAgB,EAAI,KACtBC,GAAU,KACV,CAAE,qBAAAC,EAAqB,EAAI,IAK3BC,GAAN,cAAuBb,EAAK,CAC1B,YAAac,EAAQC,EAAM,CACzB,GAAI,CAACA,GAAQ,CAACA,EAAK,OAAS,OAAOA,EAAK,MAAM,UAAa,WACzD,MAAM,IAAIH,GAAqB,0CAA0C,EAG3E,MAAME,EAAQC,CAAI,EAElB,KAAKZ,EAAU,EAAIY,EAAK,MACxB,KAAKT,EAAO,EAAIQ,EAChB,KAAKL,EAAoB,EAAIM,EAAK,qBAAuB,GACzD,KAAKb,EAAW,EAAI,CAAC,EACrB,KAAKM,EAAU,EAAI,EACnB,KAAKD,EAAiB,EAAI,KAAK,SAC/B,KAAKF,EAAc,EAAI,KAAK,MAAM,KAAK,IAAI,EAE3C,KAAK,SAAWJ,GAAkB,KAAK,IAAI,EAC3C,KAAK,MAAQ,KAAKG,EAAM,CAC1B,CAEA,IAAKO,GAAQ,UAAU,GAAK,CAC1B,OAAO,KAAKH,EAAU,CACxB,CAKA,UAAWO,EAAM,CACf,OAAO,IAAIL,GACTK,GAAQ,CAAE,oBAAqB,KAAKN,EAAoB,EAAG,GAAGM,CAAK,EACnE,KAAKb,EAAW,CAClB,CACF,CAEA,MAAOE,EAAM,GAAK,CAChB,MAAML,GAAU,KAAKM,EAAc,CAAC,EAAE,EACtC,KAAKG,EAAU,EAAI,EACnB,KAAKL,EAAU,EAAEQ,GAAQ,QAAQ,EAAE,OAAO,KAAKL,EAAO,CAAC,CACzD,CACF,EAEAR,GAAO,QAAUe,KC/DjB,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,UAAAC,EAAU,EAAI,EAAQ,aAAa,EACrC,CAAE,QAAAC,EAAQ,EAAI,EAAQ,cAAc,EAEpCC,GAAa,QAAQ,SAAS,IAAM,SAAM,KAC1CC,GAAiB,QAAQ,SAAS,IAAM,SAAM,KAKpDJ,GAAO,QAAU,KAAmC,CAClD,YAAa,CAAE,cAAAK,CAAc,EAAI,CAAC,EAAG,CACnC,KAAK,UAAY,IAAIJ,GAAU,CAC7B,UAAWK,EAAOC,EAAMC,EAAI,CAC1BA,EAAG,KAAMF,CAAK,CAChB,CACF,CAAC,EAED,KAAK,OAAS,IAAIJ,GAAQ,CACxB,OAAQ,KAAK,UACb,eAAgB,CACd,OAAQ,CAACG,GAAiB,CAAC,QAAQ,IAAI,EACzC,CACF,CAAC,CACH,CAEA,OAAQI,EAAqB,CAC3B,IAAMC,EAAoBD,EAAoB,IAC5C,CAAC,CAAE,OAAAE,EAAQ,KAAAC,EAAM,KAAM,CAAE,WAAAC,CAAW,EAAG,QAAAC,EAAS,MAAAC,EAAO,aAAAC,EAAc,OAAAC,CAAO,KAAO,CACjF,OAAQN,EACR,OAAQM,EACR,KAAML,EACN,cAAeC,EACf,WAAYC,EAAUX,GAAaC,GACnC,YAAaY,EACb,UAAWF,EAAU,IAAWC,EAAQC,CAC1C,EAAE,EAEJ,YAAK,OAAO,MAAMN,CAAiB,EAC5B,KAAK,UAAU,KAAK,EAAE,SAAS,CACxC,CACF,IC1CA,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,SAAAC,EAAS,EAAI,KACfC,GAAQ,KACR,CACJ,OAAAC,GACA,cAAAC,GACA,cAAAC,GACA,YAAAC,GACA,cAAAC,GACA,YAAAC,GACA,eAAAC,GACA,SAAAC,GACA,SAAAC,EACF,EAAI,KACEC,GAAa,KACbC,GAAW,KACX,CAAE,WAAAC,GAAY,iBAAAC,EAAiB,EAAI,KACnC,CAAE,qBAAAC,GAAsB,YAAAC,EAAY,EAAI,IACxCC,GAAa,KACbC,GAA+B,KAE/BC,GAAN,cAAwBF,EAAW,CACjC,YAAaG,EAAM,CAOjB,GANA,MAAMA,CAAI,EAEV,KAAKb,EAAW,EAAI,GACpB,KAAKD,EAAa,EAAI,GAGjBc,GAAM,OAAS,OAAOA,EAAK,MAAM,UAAa,WACjD,MAAM,IAAIL,GAAqB,0CAA0C,EAE3E,IAAMM,EAAQD,GAAM,MAAQA,EAAK,MAAQ,IAAInB,GAAMmB,CAAI,EACvD,KAAKlB,EAAM,EAAImB,EAEf,KAAKrB,EAAQ,EAAIqB,EAAMrB,EAAQ,EAC/B,KAAKS,EAAQ,EAAIK,GAAiBM,CAAI,CACxC,CAEA,IAAKE,EAAQ,CACX,IAAIC,EAAa,KAAKnB,EAAa,EAAEkB,CAAM,EAE3C,OAAKC,IACHA,EAAa,KAAKb,EAAQ,EAAEY,CAAM,EAClC,KAAKnB,EAAa,EAAEmB,EAAQC,CAAU,GAEjCA,CACT,CAEA,SAAUH,EAAMI,EAAS,CAEvB,YAAK,IAAIJ,EAAK,MAAM,EACb,KAAKlB,EAAM,EAAE,SAASkB,EAAMI,CAAO,CAC5C,CAEA,MAAM,OAAS,CACb,MAAM,KAAKtB,EAAM,EAAE,MAAM,EACzB,KAAKF,EAAQ,EAAE,MAAM,CACvB,CAEA,YAAc,CACZ,KAAKM,EAAa,EAAI,EACxB,CAEA,UAAY,CACV,KAAKA,EAAa,EAAI,EACxB,CAEA,iBAAkBmB,EAAS,CACzB,GAAI,OAAOA,GAAY,UAAY,OAAOA,GAAY,YAAcA,aAAmB,OACjF,MAAM,QAAQ,KAAKlB,EAAW,CAAC,EACjC,KAAKA,EAAW,EAAE,KAAKkB,CAAO,EAE9B,KAAKlB,EAAW,EAAI,CAACkB,CAAO,UAErB,OAAOA,EAAY,IAC5B,KAAKlB,EAAW,EAAI,OAEpB,OAAM,IAAIQ,GAAqB,6DAA6D,CAEhG,CAEA,mBAAqB,CACnB,KAAKR,EAAW,EAAI,EACtB,CAIA,IAAI,cAAgB,CAClB,OAAO,KAAKD,EAAa,CAC3B,CAEA,CAACH,EAAa,EAAGmB,EAAQC,EAAY,CACnC,KAAKvB,EAAQ,EAAE,IAAIsB,EAAQC,CAAU,CACvC,CAEA,CAACb,EAAQ,EAAGY,EAAQ,CAClB,IAAMI,EAAc,OAAO,OAAO,CAAE,MAAO,IAAK,EAAG,KAAKjB,EAAQ,CAAC,EACjE,OAAO,KAAKA,EAAQ,GAAK,KAAKA,EAAQ,EAAE,cAAgB,EACpD,IAAIE,GAAWW,EAAQI,CAAW,EAClC,IAAId,GAASU,EAAQI,CAAW,CACtC,CAEA,CAACtB,EAAa,EAAGkB,EAAQ,CAEvB,IAAMK,EAAS,KAAK3B,EAAQ,EAAE,IAAIsB,CAAM,EACxC,GAAIK,EACF,OAAOA,EAIT,GAAI,OAAOL,GAAW,SAAU,CAC9B,IAAMC,EAAa,KAAKb,EAAQ,EAAE,uBAAuB,EACzD,YAAKP,EAAa,EAAEmB,EAAQC,CAAU,EAC/BA,CACT,CAGA,OAAW,CAACK,EAAYC,CAAqB,IAAK,MAAM,KAAK,KAAK7B,EAAQ,CAAC,EACzE,GAAI6B,GAAyB,OAAOD,GAAe,UAAYf,GAAWe,EAAYN,CAAM,EAAG,CAC7F,IAAMC,EAAa,KAAKb,EAAQ,EAAEY,CAAM,EACxC,YAAKnB,EAAa,EAAEmB,EAAQC,CAAU,EACtCA,EAAWlB,EAAW,EAAIwB,EAAsBxB,EAAW,EACpDkB,CACT,CAEJ,CAEA,CAACf,EAAc,GAAK,CAClB,OAAO,KAAKD,EAAW,CACzB,CAEA,qBAAuB,CACrB,IAAMuB,EAAmB,KAAK9B,EAAQ,EAEtC,OAAO,MAAM,KAAK8B,EAAiB,QAAQ,CAAC,EACzC,QAAQ,CAAC,CAACR,EAAQS,CAAK,IAAMA,EAAM1B,EAAW,EAAE,IAAI2B,IAAa,CAAE,GAAGA,EAAU,OAAAV,CAAO,EAAE,CAAC,EAC1F,OAAO,CAAC,CAAE,QAAAW,CAAQ,IAAMA,CAAO,CACpC,CAEA,4BAA6B,CAAE,6BAAAC,EAA+B,IAAIhB,EAA+B,EAAI,CAAC,EAAG,CACvG,IAAMe,EAAU,KAAK,oBAAoB,EAEzC,GAAIA,EAAQ,SAAW,EAIvB,MAAM,IAAIjB,GACRiB,EAAQ,SAAW,EACf;AAAA;AAAA,EAAgCC,EAA6B,OAAOD,CAAO,CAAC,GAAG,KAAK,EACpF,GAAGA,EAAQ,MAAM;AAAA;AAAA,EAAiCC,EAA6B,OAAOD,CAAO,CAAC,GAAG,KAAK,CAC5G,CACF,CACF,EAEAlC,GAAO,QAAUoB,KC5JjB,IAAAgB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,IAAMC,GAAmB,OAAO,IAAI,2BAA2B,EACzD,CAAE,qBAAAC,EAAqB,EAAI,IAC3BC,GAAQ,KAEVC,GAAoB,IAAM,QAC5BC,GAAoB,IAAIF,EAAO,EAGjC,SAASE,GAAqBC,EAAO,CACnC,GAAI,CAACA,GAAS,OAAOA,EAAM,UAAa,WACtC,MAAM,IAAIJ,GAAqB,qCAAqC,EAEtE,OAAO,eAAe,WAAYD,GAAkB,CAClD,MAAOK,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,CACH,CAEA,SAASF,IAAuB,CAC9B,OAAO,WAAWH,EAAgB,CACpC,CAEAD,GAAO,QAAU,CACf,oBAAAK,GACA,oBAAAD,EACF,IC/BA,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9BC,GAAc,KAKpBF,GAAO,QAAU,KAAuB,CACtCG,GACAC,GAAoB,GACpBC,GAAiB,GACjBC,GAAyB,GAEzB,YAAaC,EAAS,CACpB,GAAI,OAAOA,GAAY,UAAYA,IAAY,KAC7C,MAAM,IAAI,UAAU,2BAA2B,EAEjD,KAAKJ,GAAWD,GAAY,KAAKK,CAAO,CAC1C,CAEA,kBAAmBC,EAAM,CACvB,KAAKL,GAAS,iBAAiB,GAAGK,CAAI,CACxC,CAEA,oBAAqBA,EAAM,CACzB,OAAAP,GAAO,CAAC,KAAKG,EAAiB,EAC9BH,GAAO,CAAC,KAAKI,EAAc,EAEpB,KAAKF,GAAS,mBAAmB,GAAGK,CAAI,CACjD,CAEA,mBAAoBA,EAAM,CACxB,OAAAP,GAAO,CAAC,KAAKG,EAAiB,EAC9BH,GAAO,CAAC,KAAKI,EAAc,EAC3BJ,GAAO,CAAC,KAAKK,EAAsB,EAEnC,KAAKA,GAAyB,GAEvB,KAAKH,GAAS,kBAAkB,GAAGK,CAAI,CAChD,CAEA,kBAAmBA,EAAM,CACvB,OAAAP,GAAO,CAAC,KAAKG,EAAiB,EAC9BH,GAAO,CAAC,KAAKI,EAAc,EAEpB,KAAKF,GAAS,iBAAiB,GAAGK,CAAI,CAC/C,CAEA,iBAAkBA,EAAM,CACtB,OAAAP,GAAO,CAAC,KAAKG,EAAiB,EAC9BH,GAAO,CAAC,KAAKI,EAAc,EAE3B,KAAKD,GAAoB,GAClB,KAAKD,GAAS,gBAAgB,GAAGK,CAAI,CAC9C,CAEA,mBAAoBA,EAAM,CACxB,YAAKH,GAAiB,GACf,KAAKF,GAAS,kBAAkB,GAAGK,CAAI,CAChD,CAKA,YAAc,CAAC,CACjB,IClEA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAO,IACP,CAAE,UAAAC,EAAU,EAAI,KAChBC,GAAS,EAAQ,aAAa,EAC9B,CAAE,qBAAAC,EAAqB,EAAI,IAC3BC,GAAK,EAAQ,aAAa,EAE1BC,GAA0B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAEvDC,GAAQ,OAAO,MAAM,EAErBC,GAAO,IAAM,CAAC,EAEdC,GAAN,KAAwB,CACtB,YAAaC,EAAM,CACjB,KAAKH,EAAK,EAAIG,EACd,KAAKR,EAAS,EAAI,EACpB,CAEA,OAAS,OAAO,aAAa,GAAK,CAChCC,GAAO,CAAC,KAAKD,EAAS,EAAG,WAAW,EACpC,KAAKA,EAAS,EAAI,GAClB,MAAQ,KAAKK,EAAK,CACpB,CACF,EAEMI,GAAN,MAAMC,CAAgB,CACpB,OAAO,cAAeC,EAAYC,EAAiB,CACjD,GAAIA,GAAmB,OAAS,CAAC,OAAO,UAAUA,CAAe,GAAKA,EAAkB,GACtF,MAAM,IAAIV,GAAqB,2CAA2C,EAG5E,IAAMW,EAAWF,EAAW,SAAS,KAAKA,CAAU,EACpD,MAAO,CAACG,EAAMC,IAAoBF,EAASC,EAAM,IAAIJ,EAAgBG,EAAUD,EAAiBE,EAAMC,CAAe,CAAC,CACxH,CAEA,YAAaF,EAAUD,EAAiBE,EAAME,EAAS,CACrD,GAAIJ,GAAmB,OAAS,CAAC,OAAO,UAAUA,CAAe,GAAKA,EAAkB,GACtF,MAAM,IAAIV,GAAqB,2CAA2C,EAG5E,KAAK,SAAWW,EAChB,KAAK,SAAW,KAChB,KAAK,KAAO,CAAE,GAAGC,EAAM,gBAAiB,CAAE,EAC1C,KAAK,gBAAkBF,EACvB,KAAK,QAAUI,EACf,KAAK,QAAU,CAAC,EAEZjB,GAAK,SAAS,KAAK,KAAK,IAAI,GAI1BA,GAAK,WAAW,KAAK,KAAK,IAAI,IAAM,GACtC,KAAK,KAAK,KACP,GAAG,OAAQ,UAAY,CACtBE,GAAO,EAAK,CACd,CAAC,EAGD,OAAO,KAAK,KAAK,KAAK,iBAAoB,YAC5C,KAAK,KAAK,KAAKD,EAAS,EAAI,GAC5BG,GAAG,UAAU,GAAG,KAAK,KAAK,KAAK,KAAM,OAAQ,UAAY,CACvD,KAAKH,EAAS,EAAI,EACpB,CAAC,IAEM,KAAK,KAAK,MAAQ,OAAO,KAAK,KAAK,KAAK,QAAW,WAI5D,KAAK,KAAK,KAAO,IAAIO,GAAkB,KAAK,KAAK,IAAI,EAErD,KAAK,KAAK,MACV,OAAO,KAAK,KAAK,MAAS,UAC1B,CAAC,YAAY,OAAO,KAAK,KAAK,IAAI,GAClCR,GAAK,WAAW,KAAK,KAAK,IAAI,GAC9B,CAACA,GAAK,eAAe,KAAK,KAAK,IAAI,IAInC,KAAK,KAAK,KAAO,IAAIQ,GAAkB,KAAK,KAAK,IAAI,EAEzD,CAEA,eAAgBU,EAAYC,EAAS,CACnC,KAAK,QAAQ,iBAAiBD,EAAY,CAAE,GAAGC,EAAS,QAAS,KAAK,OAAQ,CAAC,CACjF,CAEA,iBAAkBD,EAAYE,EAAYC,EAASC,EAAQ,CACzD,KAAK,QAAQ,mBAAmBJ,EAAYE,EAAYC,EAASC,CAAM,CACzE,CAEA,gBAAiBJ,EAAYE,EAAYC,EAASE,EAAe,CAC/D,GAAI,KAAK,KAAK,oBAAsB,KAAK,QAAQ,QAAU,KAAK,gBAC9D,MAAM,IAAI,MAAM,eAAe,EAgCjC,IA1BKH,IAAe,KAAOA,IAAe,MAAQ,KAAK,KAAK,SAAW,SACrE,KAAK,KAAK,OAAS,MACfpB,GAAK,SAAS,KAAK,KAAK,IAAI,GAC9BA,GAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,QAASO,EAAI,CAAC,EAE/C,KAAK,KAAK,KAAO,MAKfa,IAAe,KAAO,KAAK,KAAK,SAAW,SAC7C,KAAK,KAAK,OAAS,MACfpB,GAAK,SAAS,KAAK,KAAK,IAAI,GAC9BA,GAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,QAASO,EAAI,CAAC,EAE/C,KAAK,KAAK,KAAO,MAGnB,KAAK,SAAW,KAAK,QAAQ,QAAU,KAAK,iBAAmBP,GAAK,YAAY,KAAK,KAAK,IAAI,GAAKK,GAAwB,QAAQe,CAAU,IAAM,GAC/I,KACAC,EAAQ,SAER,KAAK,KAAK,QACZ,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,KAAM,KAAK,KAAK,MAAM,CAAC,EAGzD,CAAC,KAAK,SAAU,CAClB,KAAK,QAAQ,kBAAkBH,EAAYE,EAAYC,EAASE,CAAa,EAC7E,MACF,CAEA,GAAM,CAAE,OAAAC,EAAQ,SAAAC,EAAU,OAAAC,CAAO,EAAI1B,GAAK,SAAS,IAAI,IAAI,KAAK,SAAU,KAAK,KAAK,QAAU,IAAI,IAAI,KAAK,KAAK,KAAM,KAAK,KAAK,MAAM,CAAC,CAAC,EAClI2B,EAAOD,EAAS,GAAGD,CAAQ,GAAGC,CAAM,GAAKD,EAK/C,KAAK,KAAK,QAAUG,GAAoB,KAAK,KAAK,QAASR,IAAe,IAAK,KAAK,KAAK,SAAWI,CAAM,EAC1G,KAAK,KAAK,KAAOG,EACjB,KAAK,KAAK,OAASH,EACnB,KAAK,KAAK,gBAAkB,EAC5B,KAAK,KAAK,MAAQ,IACpB,CAEA,eAAgBN,EAAYW,EAAO,CAC7B,KAAK,UAmBP,KAAK,QAAQ,iBAAiBX,EAAYW,CAAK,CAEnD,CAEA,cAAeX,EAAYY,EAAU,CAC/B,KAAK,SASP,KAAK,SAAS,KAAK,KAAM,IAAI,EAE7B,KAAK,QAAQ,cAAcZ,EAAYY,CAAQ,CAEnD,CAEA,gBAAiBZ,EAAYa,EAAO,CAClC,KAAK,QAAQ,kBAAkBb,EAAYa,CAAK,CAClD,CACF,EAGA,SAASC,GAAoBC,EAAQC,EAAeC,EAAe,CACjE,GAAIF,EAAO,SAAW,EACpB,OAAOjC,GAAK,mBAAmBiC,CAAM,IAAM,OAE7C,GAAIC,GAAiBlC,GAAK,mBAAmBiC,CAAM,EAAE,WAAW,UAAU,EACxE,MAAO,GAET,GAAIE,IAAkBF,EAAO,SAAW,IAAMA,EAAO,SAAW,GAAKA,EAAO,SAAW,IAAK,CAC1F,IAAMG,EAAOpC,GAAK,mBAAmBiC,CAAM,EAC3C,OAAOG,IAAS,iBAAmBA,IAAS,UAAYA,IAAS,qBACnE,CACA,MAAO,EACT,CAGA,SAASR,GAAqBP,EAASa,EAAeC,EAAe,CACnE,IAAME,EAAM,CAAC,EACb,GAAI,MAAM,QAAQhB,CAAO,EACvB,QAASiB,EAAI,EAAGA,EAAIjB,EAAQ,OAAQiB,GAAK,EAClCN,GAAmBX,EAAQiB,CAAC,EAAGJ,EAAeC,CAAa,GAC9DE,EAAI,KAAKhB,EAAQiB,CAAC,EAAGjB,EAAQiB,EAAI,CAAC,CAAC,UAG9BjB,GAAW,OAAOA,GAAY,SAAU,CACjD,IAAMkB,EAAU,OAAOlB,EAAQ,OAAO,QAAQ,GAAM,WAAaA,EAAU,OAAO,QAAQA,CAAO,EACjG,OAAW,CAACmB,EAAKC,CAAK,IAAKF,EACpBP,GAAmBQ,EAAKN,EAAeC,CAAa,GACvDE,EAAI,KAAKG,EAAKC,CAAK,CAGzB,MACEvC,GAAOmB,GAAW,KAAM,uCAAuC,EAEjE,OAAOgB,CACT,CAEAtC,GAAO,QAAUW,KClOjB,IAAAgC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAkB,KAExB,SAASC,GAA2B,CAAE,gBAAiBC,CAAuB,EAAI,CAAC,EAAG,CACpF,OAAQC,GACC,SAAoBC,EAAMC,EAAS,CACxC,GAAM,CAAE,gBAAAC,EAAkBJ,EAAwB,GAAGK,CAAK,EAAIH,EAE9D,GAAIE,GAAmB,MAAQA,IAAoB,EACjD,OAAOH,EAASC,EAAMC,CAAO,EAG/B,IAAMG,EAAe,CAAE,GAAGD,EAAM,gBAAiB,CAAE,EAC7CE,EAAkB,IAAIT,GAAgBG,EAAUG,EAAiBE,EAAcH,CAAO,EAC5F,OAAOF,EAASK,EAAcC,CAAe,CAC/C,CAEJ,CAEAV,GAAO,QAAUE,KCpBjB,IAAAS,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAGA,IAAMC,GAAmB,KACnB,CAAE,cAAAC,EAAc,EAAI,IAEpBC,GAAN,cAAmCF,EAAiB,CAClDG,GACAC,GACAC,GACAC,GACAC,GAEA,YAAaC,EAAO,CAAE,QAAAC,CAAQ,EAAG,CAC/B,MAAMA,CAAO,CACf,CAEAC,GAAmBC,EAAa,CAC9B,OAAQ,KAAKP,IAAgB,IAAI,QAAQO,CAAW,IAAM,CAC5D,CAEA,eAAgBC,EAAYC,EAAS,CACnC,YAAKV,GAAc,EACnB,KAAKC,GAAe,KACpB,KAAKC,GAAW,KAChB,KAAKC,GAAW,KAChB,KAAKC,GAAQ,GAEN,MAAM,eAAeK,EAAYC,CAAO,CACjD,CAEA,gBAAiBD,EAAYE,EAAYC,EAASC,EAAe,CAK/D,GAJA,KAAKb,GAAcW,EACnB,KAAKR,GAAWS,EAChB,KAAKX,GAAeW,EAAQ,cAAc,EAEtC,KAAKZ,GAAc,IACrB,OAAO,MAAM,gBAAgBS,EAAYE,EAAYC,EAASC,CAAa,GAGzE,KAAKN,GAAkB,kBAAkB,GAAK,KAAKA,GAAkB,YAAY,KACnF,KAAKL,GAAW,IAAI,YAAY,OAAO,EAE3C,CAEA,eAAgBO,EAAYK,EAAO,CACjC,GAAI,KAAKd,GAAc,IACrB,OAAO,MAAM,eAAeS,EAAYK,CAAK,EAG/C,KAAKV,IAAS,KAAKF,IAAU,OAAOY,EAAO,CAAE,OAAQ,EAAK,CAAC,GAAK,EAClE,CAEA,cAAeL,EAAYM,EAAU,CACnC,GAAI,KAAKf,IAAe,IAAK,CAG3B,GAFA,KAAKI,IAAS,KAAKF,IAAU,OAAO,OAAW,CAAE,OAAQ,EAAM,CAAC,GAAK,GAEjE,KAAKK,GAAkB,kBAAkB,EAC3C,GAAI,CACF,KAAKH,GAAQ,KAAK,MAAM,KAAKA,EAAK,CACpC,MAAQ,CAER,CAGF,IAAIY,EACEC,EAAkB,MAAM,gBAC9B,MAAM,gBAAkB,EACxB,GAAI,CACFD,EAAM,IAAIlB,GAAc,iBAAkB,KAAKE,GAAa,CAC1D,KAAM,KAAKI,GACX,QAAS,KAAKD,EAChB,CAAC,CACH,QAAE,CACA,MAAM,gBAAkBc,CAC1B,CAEA,MAAM,gBAAgBR,EAAYO,CAAG,CACvC,MACE,MAAM,cAAcP,EAAYM,CAAQ,CAE5C,CAEA,gBAAiBN,EAAYO,EAAK,CAChC,MAAM,gBAAgBP,EAAYO,CAAG,CACvC,CACF,EAEApB,GAAO,QAAU,IACPsB,GACC,SAAoBC,EAAMb,EAAS,CACxC,OAAOY,EAASC,EAAM,IAAIpB,GAAqBoB,EAAM,CAAE,QAAAb,CAAQ,CAAC,CAAC,CACnE,IC5FJ,IAAAc,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,IAAMC,GAAe,KAErBD,GAAO,QAAUE,GACRC,GACE,SAA2BC,EAAMC,EAAS,CAC/C,OAAOF,EACLC,EACA,IAAIH,GACF,CAAE,GAAGG,EAAM,aAAc,CAAE,GAAGF,EAAY,GAAGE,EAAK,YAAa,CAAE,EACjE,CACE,QAAAC,EACA,SAAAF,CACF,CACF,CACF,CACF,IChBJ,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,qBAAAC,GAAsB,oBAAAC,EAAoB,EAAI,IAChDC,GAAmB,KAEnBC,GAAN,cAA0BD,EAAiB,CACzCE,GAAW,KAAO,KAClBC,GAAU,GACVC,GAAQ,EACRC,GAAc,KACd,QAAU,GACV,OAAS,GAET,YAAa,CAAE,QAAAC,EAAS,OAAAC,CAAO,EAAGC,EAAS,CACzC,GAAIF,GAAW,OAAS,CAAC,OAAO,SAASA,CAAO,GAAKA,EAAU,GAC7D,MAAM,IAAIR,GAAqB,yCAAyC,EAG1E,MAAMU,CAAO,EAEb,KAAKN,GAAWI,GAAW,KAAKJ,EAElC,CAEAO,GAAQC,EAAQ,CACd,KAAK,QAAU,GACf,KAAK,OAASA,CAChB,CAEA,eAAgBC,EAAYC,EAAS,CACnC,OAAAD,EAAW,MAAQ,KAAKF,GAAO,KAAK,IAAI,EACxC,KAAKJ,GAAcM,EAEZ,MAAM,eAAeA,EAAYC,CAAO,CACjD,CAEA,gBAAiBD,EAAYE,EAAYC,EAASC,EAAe,CAC/D,IAAMC,EAAgBF,EAAQ,gBAAgB,EAE9C,GAAIE,GAAiB,MAAQA,EAAgB,KAAKd,GAChD,MAAM,IAAIH,GACR,kBAAkBiB,CAAa,0BAC7B,KAAKd,EACP,GACF,EAGF,OAAI,KAAK,UAAY,GACZ,GAGF,MAAM,gBAAgBS,EAAYE,EAAYC,EAASC,CAAa,CAC7E,CAEA,gBAAiBJ,EAAYM,EAAK,CAC5B,KAAKd,KAITc,EAAM,KAAKZ,GAAY,QAAUY,EAEjC,MAAM,gBAAgBN,EAAYM,CAAG,EACvC,CAEA,eAAgBN,EAAYO,EAAO,CACjC,YAAKd,GAAQ,KAAKA,GAAQc,EAAM,OAE5B,KAAKd,IAAS,KAAKF,KACrB,KAAKC,GAAU,GAEX,KAAK,UAAY,GACnB,MAAM,gBAAgBQ,EAAY,KAAK,MAAM,EAE7C,MAAM,cAAcA,EAAY,CAAC,CAAC,GAI/B,EACT,CAEA,cAAeA,EAAYQ,EAAU,CACnC,GAAI,MAAKhB,GAIT,IAAI,KAAKE,GAAY,UAAY,GAAM,CACrC,MAAM,gBAAgBM,EAAY,KAAK,MAAM,EAC7C,MACF,CAEA,MAAM,cAAcA,EAAYQ,CAAQ,EAC1C,CACF,EAEA,SAASC,GACP,CAAE,QAASC,CAAe,EAAI,CAC5B,QAAS,KAAO,IAClB,EACA,CACA,OAAOC,GACE,SAAoBC,EAAMf,EAAS,CACxC,GAAM,CAAE,YAAAgB,EAAcH,CAAe,EAAIE,EAEnCE,EAAc,IAAIxB,GAAY,CAAE,QAASuB,EAAa,OAAQD,EAAK,MAAO,EAAGf,CAAO,EAE1F,OAAOc,EAASC,EAAME,CAAW,CACnC,CAEJ,CAEA5B,GAAO,QAAUuB,KC9GjB,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,GAAM,CAAE,KAAAC,EAAK,EAAI,EAAQ,UAAU,EAC7B,CAAE,OAAAC,EAAO,EAAI,EAAQ,UAAU,EAC/BC,GAAmB,KACnB,CAAE,qBAAAC,GAAsB,mBAAAC,EAAmB,EAAI,IAC/CC,GAAS,KAAK,IAAI,EAAG,EAAE,EAAI,EAE3BC,GAAN,KAAkB,CAChBC,GAAU,EACVC,GAAY,EACZC,GAAW,IAAI,IACf,UAAY,GACZ,SAAW,KACX,OAAS,KACT,KAAO,KAEP,YAAaC,EAAM,CACjB,KAAKH,GAAUG,EAAK,OACpB,KAAKF,GAAYE,EAAK,SACtB,KAAK,UAAYA,EAAK,UACtB,KAAK,SAAWA,EAAK,SACrB,KAAK,OAASA,EAAK,QAAU,KAAKC,GAClC,KAAK,KAAOD,EAAK,MAAQ,KAAKE,EAChC,CAEA,IAAI,MAAQ,CACV,OAAO,KAAKH,GAAS,OAAS,KAAKD,EACrC,CAEA,UAAWK,EAAQH,EAAMI,EAAI,CAC3B,IAAMC,EAAM,KAAKN,GAAS,IAAII,EAAO,QAAQ,EAG7C,GAAIE,GAAO,MAAQ,KAAK,KAAM,CAC5BD,EAAG,KAAMD,CAAM,EACf,MACF,CAEA,IAAMG,EAAU,CACd,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,OAAQ,KAAK,OACb,KAAM,KAAK,KACX,GAAGN,EAAK,IACR,OAAQ,KAAKH,GACb,SAAU,KAAKC,EACjB,EAGA,GAAIO,GAAO,KACT,KAAK,OAAOF,EAAQG,EAAS,CAACC,EAAKC,IAAc,CAC/C,GAAID,GAAOC,GAAa,MAAQA,EAAU,SAAW,EAAG,CACtDJ,EAAGG,GAAO,IAAIb,GAAmB,sBAAsB,CAAC,EACxD,MACF,CAEA,KAAK,WAAWS,EAAQK,CAAS,EACjC,IAAMC,EAAU,KAAKV,GAAS,IAAII,EAAO,QAAQ,EAE3CO,EAAK,KAAK,KACdP,EACAM,EACAH,EAAQ,QACV,EAEIK,EACA,OAAOD,EAAG,MAAS,SACrBC,EAAO,IAAID,EAAG,IAAI,GACTP,EAAO,OAAS,GACzBQ,EAAO,IAAIR,EAAO,IAAI,GAEtBQ,EAAO,GAGTP,EACE,KACA,IAAI,IAAI,GAAGD,EAAO,QAAQ,KACxBO,EAAG,SAAW,EAAI,IAAIA,EAAG,OAAO,IAAMA,EAAG,OAC3C,GAAGC,CAAI,EAAE,CACX,CACF,CAAC,MACI,CAEL,IAAMD,EAAK,KAAK,KACdP,EACAE,EACAC,EAAQ,QACV,EAGA,GAAII,GAAM,KAAM,CACd,KAAKX,GAAS,OAAOI,EAAO,QAAQ,EACpC,KAAK,UAAUA,EAAQH,EAAMI,CAAE,EAC/B,MACF,CAEA,IAAIO,EACA,OAAOD,EAAG,MAAS,SACrBC,EAAO,IAAID,EAAG,IAAI,GACTP,EAAO,OAAS,GACzBQ,EAAO,IAAIR,EAAO,IAAI,GAEtBQ,EAAO,GAGTP,EACE,KACA,IAAI,IAAI,GAAGD,EAAO,QAAQ,KACxBO,EAAG,SAAW,EAAI,IAAIA,EAAG,OAAO,IAAMA,EAAG,OAC3C,GAAGC,CAAI,EAAE,CACX,CACF,CACF,CAEAV,GAAgBE,EAAQH,EAAMI,EAAI,CAChCb,GACEY,EAAO,SACP,CACE,IAAK,GACL,OAAQ,KAAK,YAAc,GAAQ,KAAK,SAAW,EACnD,MAAO,WACT,EACA,CAACI,EAAKC,IAAc,CAClB,GAAID,EACF,OAAOH,EAAGG,CAAG,EAGf,IAAMK,EAAU,IAAI,IAEpB,QAAWC,KAAQL,EAGjBI,EAAQ,IAAI,GAAGC,EAAK,OAAO,IAAIA,EAAK,MAAM,GAAIA,CAAI,EAGpDT,EAAG,KAAMQ,EAAQ,OAAO,CAAC,CAC3B,CACF,CACF,CAEAV,GAAcC,EAAQW,EAAiBC,EAAU,CAC/C,IAAIL,EAAK,KACH,CAAE,QAAAD,EAAS,OAAAO,CAAO,EAAIF,EAExBG,EAuBJ,GAtBI,KAAK,WACHF,GAAY,OAEVC,GAAU,MAAQA,IAAWrB,IAC/BmB,EAAgB,OAAS,EACzBC,EAAW,IAEXD,EAAgB,SAChBC,GAAYD,EAAgB,OAAS,KAAO,EAAI,EAAI,IAIpDL,EAAQM,CAAQ,GAAK,MAAQN,EAAQM,CAAQ,EAAE,IAAI,OAAS,EAC9DE,EAASR,EAAQM,CAAQ,EAEzBE,EAASR,EAAQM,IAAa,EAAI,EAAI,CAAC,GAGzCE,EAASR,EAAQM,CAAQ,EAIvBE,GAAU,MAAQA,EAAO,IAAI,SAAW,EAC1C,OAAOP,EAGLO,EAAO,QAAU,MAAQA,EAAO,SAAWtB,GAC7CsB,EAAO,OAAS,EAEhBA,EAAO,SAGT,IAAMC,EAAWD,EAAO,OAASA,EAAO,IAAI,OAG5C,OAFAP,EAAKO,EAAO,IAAIC,CAAQ,GAAK,KAEzBR,GAAM,KACDA,EAGL,KAAK,IAAI,EAAIA,EAAG,UAAYA,EAAG,KAGjCO,EAAO,IAAI,OAAOC,EAAU,CAAC,EACtB,KAAK,KAAKf,EAAQW,EAAiBC,CAAQ,GAG7CL,CACT,CAEA,WAAYP,EAAQgB,EAAU,CAC5B,IAAMV,EAAU,KAAKV,GAAS,IAAII,EAAO,QAAQ,GAAG,QACpD,GAAI,CAACM,EACH,OAAO,KAGT,IAAMQ,EAASR,EAAQU,CAAQ,EAC/B,GAAI,CAACF,EACH,OAAO,KAGLA,EAAO,QAAU,MAAQA,EAAO,SAAWtB,GAC7CsB,EAAO,OAAS,EAEhBA,EAAO,SAGT,IAAMC,EAAWD,EAAO,OAASA,EAAO,IAAI,OACtCP,EAAKO,EAAO,IAAIC,CAAQ,GAAK,KACnC,OAAIR,GAAM,MAIN,KAAK,IAAI,EAAIA,EAAG,UAAYA,EAAG,KAGjCO,EAAO,IAAI,OAAOC,EAAU,CAAC,EAGxBR,CACT,CAEA,WAAYP,EAAQK,EAAW,CAC7B,IAAMY,EAAY,KAAK,IAAI,EACrBX,EAAU,CAAE,QAAS,CAAE,EAAG,KAAM,EAAG,IAAK,CAAE,EAChD,QAAWY,KAAUb,EAAW,CAC9Ba,EAAO,UAAYD,EACf,OAAOC,EAAO,KAAQ,SAExBA,EAAO,IAAM,KAAK,IAAIA,EAAO,IAAK,KAAKxB,EAAO,EAE9CwB,EAAO,IAAM,KAAKxB,GAGpB,IAAMyB,EAAgBb,EAAQ,QAAQY,EAAO,MAAM,GAAK,CAAE,IAAK,CAAC,CAAE,EAElEC,EAAc,IAAI,KAAKD,CAAM,EAC7BZ,EAAQ,QAAQY,EAAO,MAAM,EAAIC,CACnC,CAEA,KAAKvB,GAAS,IAAII,EAAO,SAAUM,CAAO,CAC5C,CAEA,cAAeN,EAAQ,CACrB,KAAKJ,GAAS,OAAOI,EAAO,QAAQ,CACtC,CAEA,WAAYoB,EAAMvB,EAAM,CACtB,OAAO,IAAIwB,GAAmB,KAAMD,EAAMvB,CAAI,CAChD,CACF,EAEMwB,GAAN,cAAiChC,EAAiB,CAChDiC,GAAS,KACTC,GAAQ,KACRC,GAAY,KACZC,GAAU,KACVC,GAAc,KACdC,GAAa,KACbC,GAAY,GAEZ,YAAaC,EAAO,CAAE,OAAA7B,EAAQ,QAAA8B,EAAS,SAAAC,EAAU,UAAAC,CAAU,EAAGnC,EAAM,CAClE,MAAMiC,CAAO,EACb,KAAKL,GAAUzB,EACf,KAAK2B,GAAaK,EAClB,KAAKT,GAAQ,CAAE,GAAG1B,CAAK,EACvB,KAAKyB,GAASO,EACd,KAAKL,GAAYO,CACnB,CAEA,gBAAiBE,EAAY7B,EAAK,CAChC,OAAQA,EAAI,KAAM,CAChB,IAAK,YACL,IAAK,eAAgB,CACnB,GAAI,KAAKkB,GAAO,UAAW,CACzB,GAAI,CAAC,KAAKM,GAAW,CACnB,MAAM,gBAAgBK,EAAY7B,CAAG,EACrC,MACF,CACA,KAAKwB,GAAY,GAGjB,IAAMM,EAAc,KAAKP,GAAW,SAAS,CAAC,IAAM,IAAM,EAAI,EACxDpB,EAAK,KAAKe,GAAO,WAAW,KAAKG,GAASS,CAAW,EAC3D,GAAI3B,GAAM,KAAM,CACd,MAAM,gBAAgB0B,EAAY7B,CAAG,EACrC,MACF,CAEA,IAAII,EACA,OAAOD,EAAG,MAAS,SACrBC,EAAO,IAAID,EAAG,IAAI,GACT,KAAKkB,GAAQ,OAAS,GAC/BjB,EAAO,IAAI,KAAKiB,GAAQ,IAAI,GAE5BjB,EAAO,GAGT,IAAM2B,EAAe,CACnB,GAAG,KAAKZ,GACR,OAAQ,GAAG,KAAKE,GAAQ,QAAQ,KAC5BlB,EAAG,SAAW,EAAI,IAAIA,EAAG,OAAO,IAAMA,EAAG,OAC3C,GAAGC,CAAI,EACX,EACA,KAAKgB,GAAUW,EAAc,IAAI,EACjC,MACF,CAGA,MAAM,gBAAgBF,EAAY7B,CAAG,EACrC,KACF,CACA,IAAK,YACH,KAAKkB,GAAO,cAAc,KAAKG,EAAO,EACtC,MAAM,gBAAgBQ,EAAY7B,CAAG,EACrC,MACF,QACE,MAAM,gBAAgB6B,EAAY7B,CAAG,EACrC,KACJ,CACF,CACF,EAEAlB,GAAO,QAAUkD,GAAmB,CAClC,GACEA,GAAiB,QAAU,OAC1B,OAAOA,GAAiB,QAAW,UAAYA,GAAiB,OAAS,GAE1E,MAAM,IAAI9C,GAAqB,2CAA2C,EAG5E,GACE8C,GAAiB,UAAY,OAC5B,OAAOA,GAAiB,UAAa,UACpCA,GAAiB,SAAW,GAE9B,MAAM,IAAI9C,GACR,mEACF,EAGF,GACE8C,GAAiB,UAAY,MAC7BA,GAAiB,WAAa,GAC9BA,GAAiB,WAAa,EAE9B,MAAM,IAAI9C,GAAqB,yCAAyC,EAG1E,GACE8C,GAAiB,WAAa,MAC9B,OAAOA,GAAiB,WAAc,UAEtC,MAAM,IAAI9C,GAAqB,sCAAsC,EAGvE,GACE8C,GAAiB,QAAU,MAC3B,OAAOA,GAAiB,QAAW,WAEnC,MAAM,IAAI9C,GAAqB,oCAAoC,EAGrE,GACE8C,GAAiB,MAAQ,MACzB,OAAOA,GAAiB,MAAS,WAEjC,MAAM,IAAI9C,GAAqB,kCAAkC,EAGnE,IAAM+C,EAAYD,GAAiB,WAAa,GAC5CxB,EACAyB,EACFzB,EAAWwB,GAAiB,UAAY,KAExCxB,EAAWwB,GAAiB,UAAY,EAG1C,IAAMvC,EAAO,CACX,OAAQuC,GAAiB,QAAU,IACnC,OAAQA,GAAiB,QAAU,KACnC,KAAMA,GAAiB,MAAQ,KAC/B,UAAAC,EACA,SAAAzB,EACA,SAAUwB,GAAiB,UAAY,GACzC,EAEME,EAAW,IAAI7C,GAAYI,CAAI,EAErC,OAAOkC,GACE,SAAyBQ,EAAkBT,EAAS,CACzD,IAAM9B,EACJuC,EAAiB,OAAO,cAAgB,IACpCA,EAAiB,OACjB,IAAI,IAAIA,EAAiB,MAAM,EAErC,OAAIpD,GAAKa,EAAO,QAAQ,IAAM,EACrB+B,EAASQ,EAAkBT,CAAO,GAG3CQ,EAAS,UAAUtC,EAAQuC,EAAkB,CAACnC,EAAK4B,IAAc,CAC/D,GAAI5B,EACF,OAAO0B,EAAQ,gBAAgB,KAAM1B,CAAG,EAG1C,IAAM+B,EAAe,CACnB,GAAGI,EACH,WAAYvC,EAAO,SACnB,OAAQgC,EAAU,OAClB,QAAS,CACP,KAAMhC,EAAO,KACb,GAAGuC,EAAiB,OACtB,CACF,EAEAR,EACEI,EACAG,EAAS,WACP,CAAE,OAAAtC,EAAQ,SAAA+B,EAAU,QAAAD,EAAS,UAAAE,CAAU,EACvCO,CACF,CACF,CACF,CAAC,EAEM,GACT,CAEJ,IC/aA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CACJ,gBAAAC,EACF,EAAI,IAKJ,SAASC,GAAcC,EAAM,CAC3B,GAAI,CAACA,EAAK,OACR,MAAM,IAAI,MAAM,0BAA0B,EAI5C,IAAIC,EACJ,GAAID,EAAK,SAAW,KAClBC,EAAU,CAAC,UACF,OAAOD,EAAK,QAAQ,OAAO,QAAQ,GAAM,WAAY,CAC9DC,EAAU,CAAC,EACX,QAAWC,KAAKF,EAAK,QAAS,CAC5B,GAAI,CAAC,MAAM,QAAQE,CAAC,EAClB,MAAM,IAAI,MAAM,wCAAwC,EAE1D,GAAM,CAACC,EAAKC,CAAG,EAAIF,EACnB,GAAI,OAAOC,GAAQ,UAAY,OAAOC,GAAQ,SAC5C,MAAM,IAAI,MAAM,wCAAwC,EAE1DH,EAAQE,EAAI,YAAY,CAAC,EAAIC,CAC/B,CACF,SAAW,OAAOJ,EAAK,SAAY,SAAU,CAC3CC,EAAU,CAAC,EAEX,QAAWE,KAAO,OAAO,KAAKH,EAAK,OAAO,EACxCC,EAAQE,EAAI,YAAY,CAAC,EAAIH,EAAK,QAAQG,CAAG,CAEjD,KACE,OAAM,IAAI,MAAM,+BAA+B,EAGjD,MAAO,CACL,OAAQH,EAAK,OAAO,SAAS,EAC7B,OAAQA,EAAK,OACb,KAAMA,EAAK,KACX,QAAAC,CACF,CACF,CAKA,SAASI,GAAgBF,EAAK,CAC5B,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,UAAU,kCAAkC,OAAOA,CAAG,EAAE,EAGpE,QAAWG,IAAY,CAAC,SAAU,SAAU,MAAM,EAChD,GAAI,OAAOH,EAAIG,CAAQ,GAAM,SAC3B,MAAM,IAAI,UAAU,gBAAgBA,CAAQ,sBAAsB,OAAOH,EAAIG,CAAQ,CAAC,EAAE,EAI5F,GAAIH,EAAI,UAAY,QAAa,OAAOA,EAAI,SAAY,SACtD,MAAM,IAAI,UAAU,sCAAsC,OAAOA,CAAG,EAAE,CAE1E,CAKA,SAASI,GAAkBC,EAAO,CAChC,GAAI,OAAOA,GAAU,SACnB,MAAM,IAAI,UAAU,oCAAoC,OAAOA,CAAK,EAAE,EAGxE,QAAWF,IAAY,CAAC,aAAc,WAAY,UAAW,UAAU,EACrE,GAAI,OAAOE,EAAMF,CAAQ,GAAM,SAC7B,MAAM,IAAI,UAAU,kBAAkBA,CAAQ,sBAAsB,OAAOE,EAAMF,CAAQ,CAAC,EAAE,EAIhG,GAAI,OAAOE,EAAM,eAAkB,SACjC,MAAM,IAAI,UAAU,kDAAkD,OAAOA,EAAM,aAAa,EAAE,EAGpG,GAAIA,EAAM,SAAW,MAAQ,OAAOA,EAAM,SAAY,SACpD,MAAM,IAAI,UAAU,+CAA+C,OAAOA,EAAM,OAAO,EAAE,EAG3F,GAAIA,EAAM,OAAS,QAAa,OAAOA,EAAM,MAAS,SACpD,MAAM,IAAI,UAAU,yCAAyC,OAAOA,EAAM,IAAI,EAAE,EAGlF,GAAIA,EAAM,OAAS,QAAa,OAAOA,EAAM,MAAS,SACpD,MAAM,IAAI,UAAU,yCAAyC,OAAOA,EAAM,IAAI,EAAE,CAEpF,CASA,SAASC,GAAyBC,EAAQ,CAIxC,IAAMC,EAAS,CAAC,EAEZC,EACJ,GAAI,MAAM,QAAQF,CAAM,EAAG,CACzBE,EAAa,CAAC,EAEd,QAAWC,KAAaH,EACtBE,EAAW,KAAK,GAAGC,EAAU,MAAM,GAAG,CAAC,CAE3C,MACED,EAAaF,EAAO,MAAM,GAAG,EAG/B,QAASI,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IAAK,CAC1C,IAAMD,EAAYD,EAAWE,CAAC,EAAE,YAAY,EACtCC,EAAoBF,EAAU,QAAQ,GAAG,EAE3CV,EACAK,EAQJ,OAPIO,IAAsB,IACxBZ,EAAMU,EAAU,UAAU,EAAGE,CAAiB,EAAE,UAAU,EAC1DP,EAAQK,EAAU,UAAUE,EAAoB,CAAC,GAEjDZ,EAAMU,EAAU,KAAK,EAGfV,EAAK,CACX,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,yBACL,IAAK,iBAAkB,CACrB,GAAIK,IAAU,QAAaA,EAAM,CAAC,IAAM,IACtC,SAIAA,EAAM,QAAU,GAChBA,EAAM,CAAC,IAAM,KACbA,EAAMA,EAAM,OAAS,CAAC,IAAM,MAE5BA,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAAS,CAAC,GAG7C,IAAMQ,EAAc,SAASR,EAAO,EAAE,EAMtC,GAJIQ,IAAgBA,GAIhBb,IAAQ,WAAaA,KAAOQ,GAAUA,EAAOR,CAAG,GAAKa,EACvD,SAGFL,EAAOR,CAAG,EAAIa,EAEd,KACF,CACA,IAAK,UACL,IAAK,WACH,GAAIR,EAAO,CAYT,GAAIA,EAAM,CAAC,IAAM,IAAK,CAIpB,IAAMP,EAAU,CAACO,EAAM,UAAU,CAAC,CAAC,EAE/BS,EAAmBT,EAAMA,EAAM,OAAS,CAAC,IAAM,IACnD,GAAI,CAACS,EAGH,QAASC,EAAIJ,EAAI,EAAGI,EAAIN,EAAW,OAAQM,IAAK,CAC9C,IAAMC,EAAWP,EAAWM,CAAC,EACvBE,EAAiBD,EAAS,OAIhC,GAFAlB,EAAQ,KAAKkB,EAAS,KAAK,CAAC,EAExBC,IAAmB,GAAKD,EAASC,EAAiB,CAAC,IAAM,IAAK,CAChEH,EAAmB,GACnB,KACF,CACF,CAGF,GAAIA,EAAkB,CACpB,IAAII,EAAapB,EAAQA,EAAQ,OAAS,CAAC,EACvCoB,EAAWA,EAAW,OAAS,CAAC,IAAM,MACxCA,EAAaA,EAAW,UAAU,EAAGA,EAAW,OAAS,CAAC,EAC1DpB,EAAQA,EAAQ,OAAS,CAAC,EAAIoB,GAG5BlB,KAAOQ,EACTA,EAAOR,CAAG,EAAIQ,EAAOR,CAAG,EAAE,OAAOF,CAAO,EAExCU,EAAOR,CAAG,EAAIF,CAElB,CACF,MAEME,KAAOQ,EACTA,EAAOR,CAAG,EAAIQ,EAAOR,CAAG,EAAE,OAAOK,CAAK,EAEtCG,EAAOR,CAAG,EAAI,CAACK,CAAK,EAIxB,KACF,CAGF,IAAK,SACL,IAAK,WACL,IAAK,kBACL,IAAK,mBACL,IAAK,YACL,IAAK,eACL,IAAK,kBACL,IAAK,iBACH,GAAIA,EAGF,SAGFG,EAAOR,CAAG,EAAI,GACd,MACF,QAEE,QACJ,CACF,CAEA,OAAOQ,CACT,CAOA,SAASW,GAAiBC,EAAYtB,EAAS,CAC7C,GAAI,OAAOsB,GAAe,UAAYA,EAAW,SAAS,GAAG,EAC3D,OAAOtB,EAGT,IAAMU,EAAkE,CAAC,EAEnEa,EAAiB,OAAOD,GAAe,SACzCA,EAAW,MAAM,GAAG,EACpBA,EAEJ,QAAWb,KAAUc,EAAgB,CACnC,IAAMC,EAAgBf,EAAO,KAAK,EAAE,YAAY,EAEhDC,EAAOc,CAAa,EAAIxB,EAAQwB,CAAa,GAAK,IACpD,CAEA,OAAOd,CACT,CAWA,SAASe,GAAcC,EAAM,CAC3B,OAAIA,EAAK,QAAU,EAGV,GAGLA,EAAK,CAAC,IAAM,KAAOA,EAAKA,EAAK,OAAS,CAAC,IAAM,IAIxC,EAAEA,EAAK,CAAC,IAAM,KAAOA,EAAK,WAAW,KAAK,GAG/CA,EAAK,WAAW,KAAK,GAAKA,EAAKA,EAAK,OAAS,CAAC,IAAM,IAI/CA,EAAK,SAAW,EAIlB,EACT,CAMA,SAASC,GAAkBC,EAAOC,EAAO,aAAc,CACrD,GAAI,OAAOD,GAAU,UAAYA,IAAU,KACzC,MAAM,IAAI,UAAU,oBAAoBC,CAAI,4BAA4BD,IAAU,KAAO,OAAS,OAAOA,CAAK,EAAE,EAGlH,QAAWE,IAAM,CAAC,MAAO,oBAAqB,QAAQ,EACpD,GAAI,OAAOF,EAAME,CAAE,GAAM,WACvB,MAAM,IAAI,UAAU,GAAGD,CAAI,sBAAsBC,CAAE,eAAe,CAGxE,CAKA,SAASC,GAAoBC,EAASH,EAAO,eAAgB,CAC3D,GAAI,CAAC,MAAM,QAAQG,CAAO,EACxB,MAAM,IAAI,UAAU,oBAAoBH,CAAI,8BAA8BG,IAAY,KAAO,OAAS,OAAOA,CAAO,EAAE,EAGxH,GAAIA,EAAQ,SAAW,EACrB,MAAM,IAAI,UAAU,GAAGH,CAAI,oCAAoC,EAGjE,QAAWI,KAAUD,EACnB,GAAI,CAACnC,GAAgB,SAASoC,CAAM,EAClC,MAAM,IAAI,UAAU,cAAcJ,CAAI,+CAA+ChC,GAAgB,KAAK,IAAI,CAAC,SAASoC,CAAM,EAAE,CAGtI,CAEArC,GAAO,QAAU,CACf,aAAAE,GACA,eAAAM,GACA,iBAAAE,GACA,wBAAAE,GACA,gBAAAa,GACA,aAAAI,GACA,mBAAAM,GACA,iBAAAJ,EACF,ICvWA,IAAAO,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC3DC,GAAa,CAAC,EAAG,EAAG,GAAI,GAAI,EAAE,EAC9BC,GAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAChGC,GAAa,CAAC,GAAI,EAAE,EAEpBC,GAAiB,CAAC,EAAG,EAAG,GAAI,EAAE,EAE9BC,GAAc,CAAC,SAAU,UAAW,YAAa,WAAY,SAAU,WAAY,QAAQ,EASjG,SAASC,GAAeC,EAAMC,EAAK,CAOjC,OAFAD,EAAOA,EAAK,YAAY,EAEhBA,EAAK,CAAC,EAAG,CACf,IAAK,IAAK,OAAOE,GAAaF,CAAI,EAClC,IAAK,IAAK,OAAOG,GAAiBH,CAAI,EACtC,QAAS,OAAOI,GAAgBJ,EAAMC,CAAG,CAC3C,CACF,CAQA,SAASC,GAAcF,EAAM,CAK3B,GAJIA,EAAK,SAAW,IAIhB,CAACA,EAAK,SAAS,KAAK,EAEtB,OAGF,QAAWK,KAAYX,GACrB,GAAIM,EAAKK,CAAQ,IAAM,IACrB,OAIJ,QAAWC,KAAYV,GACrB,GAAII,EAAKM,CAAQ,IAAM,IACrB,OAIJ,IAAMC,EAAUP,EAAK,UAAU,EAAG,CAAC,EACnC,GAAI,CAACP,GAAS,SAASc,CAAO,EAC5B,OAGF,IAAMC,EAAYR,EAAK,UAAU,EAAG,CAAC,EAC/BS,EAAM,OAAO,SAASD,CAAS,EACrC,GAAI,MAAMC,CAAG,GAAMA,EAAM,IAAMD,EAAU,CAAC,IAAM,IAE9C,OAGF,IAAME,EAAQV,EAAK,UAAU,EAAG,EAAE,EAC5BW,EAAWhB,GAAW,QAAQe,CAAK,EACzC,GAAIC,IAAa,GACf,OAGF,IAAMC,EAAO,OAAO,SAASZ,EAAK,UAAU,GAAI,EAAE,CAAC,EACnD,GAAI,MAAMY,CAAI,EACZ,OAGF,IAAMC,EAAab,EAAK,UAAU,GAAI,EAAE,EAClCc,EAAO,OAAO,SAASD,CAAU,EACvC,GAAI,MAAMC,CAAI,GAAMA,EAAO,IAAMD,EAAW,CAAC,IAAM,IACjD,OAGF,IAAME,EAAef,EAAK,UAAU,GAAI,EAAE,EACpCgB,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,MAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,IACvD,OAGF,IAAME,EAAejB,EAAK,UAAU,GAAI,EAAE,EACpCkB,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,QAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,KAIzD,OAAO,IAAI,KAAK,KAAK,IAAIL,EAAMD,EAAUF,EAAKK,EAAME,EAAQE,CAAM,CAAC,CACrE,CAQA,SAASf,GAAkBH,EAAM,CAG/B,GAAIA,EAAK,SAAW,GAClB,OAGF,QAAWmB,KAAYtB,GACrB,GAAIG,EAAKmB,CAAQ,IAAM,IACrB,OAIJ,IAAMZ,EAAUP,EAAK,UAAU,EAAG,CAAC,EACnC,GAAI,CAACP,GAAS,SAASc,CAAO,EAC5B,OAGF,IAAMG,EAAQV,EAAK,UAAU,EAAG,CAAC,EAC3BW,EAAWhB,GAAW,QAAQe,CAAK,EACzC,GAAIC,IAAa,GACf,OAGF,IAAMH,EAAYR,EAAK,UAAU,EAAG,EAAE,EAChCS,EAAM,OAAO,SAASD,CAAS,EACrC,GAAI,MAAMC,CAAG,GAAMA,EAAM,IAAMD,EAAU,CAAC,IAAM,IAC9C,OAGF,IAAMK,EAAab,EAAK,UAAU,GAAI,EAAE,EAClCc,EAAO,OAAO,SAASD,CAAU,EACvC,GAAI,MAAMC,CAAI,GAAMA,EAAO,IAAMD,EAAW,CAAC,IAAM,IACjD,OAGF,IAAME,EAAef,EAAK,UAAU,GAAI,EAAE,EACpCgB,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,MAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,IACvD,OAGF,IAAME,EAAejB,EAAK,UAAU,GAAI,EAAE,EACpCkB,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,MAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,IACvD,OAGF,IAAML,EAAO,OAAO,SAASZ,EAAK,UAAU,GAAI,EAAE,CAAC,EACnD,GAAI,OAAMY,CAAI,EAId,OAAO,IAAI,KAAK,KAAK,IAAIA,EAAMD,EAAUF,EAAKK,EAAME,EAAQE,CAAM,CAAC,CACrE,CASA,SAASd,GAAiBJ,EAAMC,EAAM,IAAI,KAAQ,CAChD,GAAI,CAACD,EAAK,SAAS,KAAK,EAEtB,OAGF,IAAMoB,EAAapB,EAAK,QAAQ,GAAG,EAKnC,GAJIoB,IAAe,IAIdpB,EAAK,OAASoB,EAAa,IAAO,GACrC,OAGF,IAAMb,EAAUP,EAAK,UAAU,EAAGoB,CAAU,EAK5C,GAJI,CAACtB,GAAY,SAASS,CAAO,GAK/BP,EAAKoB,EAAa,CAAC,IAAM,KACzBpB,EAAKoB,EAAa,CAAC,IAAM,KACzBpB,EAAKoB,EAAa,CAAC,IAAM,KACzBpB,EAAKoB,EAAa,EAAE,IAAM,KAC1BpB,EAAKoB,EAAa,EAAE,IAAM,KAC1BpB,EAAKoB,EAAa,EAAE,IAAM,KAC1BpB,EAAKoB,EAAa,EAAE,IAAM,IAE1B,OAGF,IAAMZ,EAAYR,EAAK,UAAUoB,EAAa,EAAGA,EAAa,CAAC,EACzDX,EAAM,OAAO,SAASD,CAAS,EACrC,GAAI,MAAMC,CAAG,GAAMA,EAAM,IAAMD,EAAU,CAAC,IAAM,IAE9C,OAGF,IAAME,EAAQV,EAAK,UAAUoB,EAAa,EAAGA,EAAa,CAAC,EACrDT,EAAWhB,GAAW,QAAQe,CAAK,EACzC,GAAIC,IAAa,GACf,OAIF,IAAIC,EAAO,OAAO,SAASZ,EAAK,UAAUoB,EAAa,EAAGA,EAAa,EAAE,CAAC,EAC1E,GAAI,MAAMR,CAAI,EACZ,OAGF,IAAMS,EAAcpB,EAAI,eAAe,EACjCqB,EAAgBD,EAAc,IAC9BE,EAAiB,KAAK,MAAMF,EAAc,GAAG,EAE/CT,EAAOU,GAAiBV,EAAOU,GAAiB,GAElDV,IAASW,EAAiB,GAAK,IAE/BX,GAAQW,EAAiB,IAG3B,IAAMV,EAAab,EAAK,UAAUoB,EAAa,GAAIA,EAAa,EAAE,EAC5DN,EAAO,OAAO,SAASD,CAAU,EACvC,GAAI,MAAMC,CAAI,GAAMA,EAAO,IAAMD,EAAW,CAAC,IAAM,IACjD,OAGF,IAAME,EAAef,EAAK,UAAUoB,EAAa,GAAIA,EAAa,EAAE,EAC9DJ,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,MAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,IACvD,OAGF,IAAME,EAAejB,EAAK,UAAUoB,EAAa,GAAIA,EAAa,EAAE,EAC9DF,EAAS,OAAO,SAASD,CAAY,EAC3C,GAAI,QAAMC,CAAM,GAAMA,EAAS,IAAMD,EAAa,CAAC,IAAM,KAIzD,OAAO,IAAI,KAAK,KAAK,IAAIL,EAAMD,EAAUF,EAAKK,EAAME,EAAQE,CAAM,CAAC,CACrE,CAEA1B,GAAO,QAAU,CACf,cAAAO,EACF,IClQA,IAAAyB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAO,IACP,CACJ,wBAAAC,GACA,gBAAAC,GACA,aAAAC,EACF,EAAI,KACE,CAAE,cAAAC,EAAc,EAAI,KAE1B,SAASC,IAAQ,CAAC,CAGlB,IAAMC,GAAuC,CAC3C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACzD,EAEMC,GAAmB,aAOnBC,GAAN,KAAmB,CAIjBC,GAKAC,GAKAC,GAKAC,GAKAC,GAKAC,GAOA,YAAa,CAAE,MAAAC,EAAO,KAAAC,EAAM,eAAAC,CAAe,EAAGC,EAAUC,EAAS,CAC/D,KAAKP,GAASG,EACd,KAAKL,GAAaM,EAClB,KAAKL,GAAkBM,EACvB,KAAKR,GAAYS,EACjB,KAAKL,GAAWM,CAClB,CAEA,eAAgBC,EAAYC,EAAS,CACnC,KAAKP,IAAc,QAAQ,EAC3B,KAAKA,GAAe,OACpB,KAAKD,GAAS,iBAAiBO,EAAYC,CAAO,CACpD,CAEA,iBAAkBD,EAAYE,EAAYC,EAASC,EAAQ,CACzD,KAAKX,GAAS,mBAAmBO,EAAYE,EAAYC,EAASC,CAAM,CAC1E,CAQA,gBACEJ,EACAE,EACAG,EACAC,EACA,CACA,IAAMC,EAAsB,IAC1B,KAAKd,GAAS,kBACZO,EACAE,EACAG,EACAC,CACF,EAEF,GACE,CAAC1B,GAAK,gBAAgB,SAAS,KAAKS,GAAU,MAAM,GACpDa,GAAc,KACdA,GAAc,IACd,CAGA,GAAI,CACF,KAAKV,GAAO,OAAO,KAAKH,EAAS,GAAG,QAAQJ,EAAI,CAClD,MAAQ,CAER,CACA,OAAOsB,EAAoB,CAC7B,CAEA,IAAMC,EAAqBH,EAAW,eAAe,EAC/CI,EAAyBJ,EAAW,eAAe,GAAKnB,GAAqC,SAASgB,CAAU,EACtH,GACE,CAACM,GACD,CAACH,EAAW,SACZ,CAACI,GACD,CAAC,KAAKlB,GAIN,OAAOgB,EAAoB,EAG7B,IAAMG,EAAyBF,EAAqB3B,GAAwB2B,CAAkB,EAAI,CAAC,EACnG,GAAI,CAACG,GAAiB,KAAKrB,GAAYY,EAAYG,EAAYK,CAAsB,EACnF,OAAOH,EAAoB,EAG7B,IAAMK,EAAM,KAAK,IAAI,EACfC,EAASR,EAAW,IAAMS,GAAOT,EAAW,GAAG,EAAI,OACzD,GAAIQ,GAAUA,GAAU1B,GAEtB,OAAOoB,EAAoB,EAG7B,IAAMQ,EAAU,OAAOV,EAAW,MAAS,SACvCrB,GAAcqB,EAAW,IAAI,EAC7B,OAEEW,EACJC,GAAiB,KAAK3B,GAAYsB,EAAKC,EAAQR,EAAYU,EAASL,CAAsB,GAC1F,KAAKnB,GACP,GAAIyB,IAAY,QAAcH,GAAUA,EAASG,EAC/C,OAAOT,EAAoB,EAG7B,IAAMW,EAAWH,EAAUA,EAAQ,QAAQ,EAAIH,EACzCO,EAAkBH,EAAUE,EAClC,GAAIN,GAAOO,EAET,OAAOZ,EAAoB,EAG7B,IAAIa,EACJ,GAAI,KAAK/B,GAAU,SAAWgB,EAAW,OACvCe,EAAiBtC,GAAgBuB,EAAW,KAAM,KAAKhB,GAAU,OAAO,EACpE,CAAC+B,GAEH,OAAOb,EAAoB,EAI/B,IAAMc,EAAWC,GAAkBJ,EAAUR,EAAwBS,CAAe,EAC9EI,EAAkBC,GAAsBnB,EAAYK,CAAsB,EAK1Ee,EAAQ,CACZ,WAAAvB,EACA,cAAAI,EACA,QAASiB,EACT,KAAMH,EACN,uBAAAV,EACA,SAAUG,EAASD,EAAMC,EAASD,EAClC,QAASO,EACT,SAAAE,CACF,EAOA,GALI,OAAOhB,EAAW,MAAS,UAAYtB,GAAasB,EAAW,IAAI,IACrEoB,EAAM,KAAOpB,EAAW,MAG1B,KAAKX,GAAe,KAAKF,GAAO,kBAAkB,KAAKH,GAAWoC,CAAK,EACnE,CAAC,KAAK/B,GACR,OAAOa,EAAoB,EAG7B,IAAMR,EAAU,KAChB,YAAKL,GACF,GAAG,QAAS,IAAMM,EAAW,OAAO,CAAC,EACrC,GAAG,QAAS,UAAY,CAEvBD,EAAQL,GAAe,OAIvBK,EAAQP,GAAO,OAAOO,EAAQV,EAAS,CACzC,CAAC,EACA,GAAG,QAAS,UAAY,CACnBU,EAAQL,KAAiB,OAC3BK,EAAQL,GAAe,QAIzBM,EAAW,OAAO,CACpB,CAAC,EAEIO,EAAoB,CAC7B,CAEA,eAAgBP,EAAY0B,EAAO,CAC7B,KAAKhC,IAAc,MAAMgC,CAAK,IAAM,IACtC1B,EAAW,MAAM,EAGnB,KAAKP,GAAS,iBAAiBO,EAAY0B,CAAK,CAClD,CAEA,cAAe1B,EAAY2B,EAAU,CACnC,KAAKjC,IAAc,IAAI,EACvB,KAAKD,GAAS,gBAAgBO,EAAY2B,CAAQ,CACpD,CAEA,gBAAiB3B,EAAY4B,EAAK,CAChC,KAAKlC,IAAc,QAAQkC,CAAG,EAC9B,KAAKlC,GAAe,OACpB,KAAKD,GAAS,kBAAkBO,EAAY4B,CAAG,CACjD,CACF,EAUA,SAASjB,GAAkBkB,EAAW3B,EAAYG,EAAYK,EAAwB,CAmBpF,MAlBI,EAAAR,IAAe,KAAOA,IAAe,KAIrCQ,EAAuB,UAAU,GAIjCmB,IAAc,UAAYnB,EAAuB,UAAY,IAK7DL,EAAW,MAAM,SAAS,GAAG,GAK7BA,EAAW,gBACT,CAACK,EAAuB,QAAU,OAAOL,EAAW,eAAkB,UAKxE,MAAM,QAAQK,EAAuB,UAAU,CAAC,GAChDA,EAAuB,UAAU,EAAE,SAAS,eAAe,GAM3D,MAAM,QAAQA,EAAuB,OAAU,GAC/CA,EAAuB,QAAW,SAAS,eAAe,GAOhE,CAMA,SAASI,GAAQgB,EAAW,CAC1B,IAAMC,EAAM,SAAS,MAAM,QAAQD,CAAS,EAAIA,EAAU,CAAC,EAAIA,CAAS,EAExE,OAAO,MAAMC,CAAG,EAAI,OAAYA,EAAM,GACxC,CAYA,SAASd,GAAkBY,EAAWjB,EAAKmB,EAAK1B,EAAY2B,EAActB,EAAwB,CAChG,GAAImB,IAAc,SAAU,CAI1B,IAAMI,EAAUvB,EAAuB,UAAU,EACjD,GAAIuB,IAAY,OACd,OAAOA,EAAU,EAAIA,EAAU,IAAO,MAE1C,CAEA,IAAMC,EAASxB,EAAuB,SAAS,EAC/C,GAAIwB,IAAW,OACb,OAAOA,EAAS,EAAIA,EAAS,IAAO,OAGtC,GAAI,OAAO7B,EAAW,SAAY,SAAU,CAE1C,IAAM8B,EAAcnD,GAAcqB,EAAW,OAAO,EACpD,GAAI8B,EAKF,OAJIvB,GAAOuB,EAAY,QAAQ,GAI3BH,IACEA,GAAgBG,GAIhBJ,IAAQ,QAAaA,EAAOI,EAAcH,GAC5C,OAIGG,EAAY,QAAQ,EAAIvB,CAEnC,CAEA,GAAI,OAAOP,EAAW,eAAe,GAAM,SAAU,CAEnD,IAAM+B,EAAe,IAAI,KAAK/B,EAAW,eAAe,CAAC,EACzD,GAAIgC,GAAYD,CAAY,EAC1B,OAAIA,EAAa,QAAQ,GAAKxB,EAC5B,QAGkBA,EAAMwB,EAAa,QAAQ,GAE1B,EAEzB,CAEA,GAAI1B,EAAuB,UAEzB,MAAO,QAIX,CAOA,SAASY,GAAmBV,EAAKF,EAAwBM,EAAS,CAChE,IAAIsB,EAAuB,KACvBC,EAAe,KACfC,EAAY,KAEhB,OAAI9B,EAAuB,wBAAwB,IACjD4B,EAAuBtB,EAAWN,EAAuB,wBAAwB,EAAI,KAGnFA,EAAuB,gBAAgB,IACzC6B,EAAevB,EAAWN,EAAuB,gBAAgB,EAAI,KAGnE4B,IAAyB,MAAaC,IAAiB,OACzDC,EAAY5B,EAAM,SAGb,KAAK,IAAII,EAASsB,EAAsBC,EAAcC,CAAS,CACxE,CAQA,SAAShB,GAAuBnB,EAAYK,EAAwB,CAClE,IAAM+B,EAAkB,CACtB,aACA,qBACA,4BACA,sBACA,mBACA,KACA,oBACA,UAEA,KACF,EAEIpC,EAAW,aACT,MAAM,QAAQA,EAAW,UAAa,EAGxCoC,EAAgB,KAAK,GAAGpC,EAAW,WAAc,IAAIqC,GAAUA,EAAO,KAAK,CAAC,CAAC,EAG7ED,EAAgB,KAAK,GAAGpC,EAAW,WAAc,MAAM,GAAG,EAAE,IAAIqC,GAAUA,EAAO,KAAK,CAAC,CAAC,GAIxF,MAAM,QAAQhC,EAAuB,UAAU,CAAC,GAClD+B,EAAgB,KAAK,GAAG/B,EAAuB,UAAU,CAAC,EAGxD,MAAM,QAAQA,EAAuB,OAAU,GACjD+B,EAAgB,KAAK,GAAG/B,EAAuB,OAAU,EAG3D,IAAIa,EACJ,QAAWoB,KAAcF,EACnBpC,EAAWsC,CAAU,IACvBpB,IAAoB,CAAE,GAAGlB,CAAW,EACpC,OAAOkB,EAAgBoB,CAAU,GAIrC,OAAOpB,GAAmBlB,CAC5B,CAMA,SAASgC,GAAaO,EAAM,CAC1B,OAAOA,aAAgB,MAAQ,OAAO,SAASA,EAAK,QAAQ,CAAC,CAC/D,CAEAjE,GAAO,QAAUS,KC/bjB,IAAAyD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpC,CAAE,eAAAC,GAAgB,iBAAAC,EAAiB,EAAI,KAYvCC,GAAN,KAAuB,CACrBC,GAAY,IACZC,GAAW,IACXC,GAAgB,IAEhBC,GAAQ,EACRC,GAAS,EACTC,GAAW,IAAI,IAKf,YAAaC,EAAM,CACjB,GAAIA,EAAM,CACR,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,4CAA4C,EAGlE,GAAIA,EAAK,WAAa,OAAW,CAC/B,GACE,OAAOA,EAAK,UAAa,UACzB,CAAC,OAAO,UAAUA,EAAK,QAAQ,GAC/BA,EAAK,SAAW,EAEhB,MAAM,IAAI,UAAU,kEAAkE,EAExF,KAAKN,GAAYM,EAAK,QACxB,CAEA,GAAIA,EAAK,UAAY,OAAW,CAC9B,GACE,OAAOA,EAAK,SAAY,UACxB,CAAC,OAAO,UAAUA,EAAK,OAAO,GAC9BA,EAAK,QAAU,EAEf,MAAM,IAAI,UAAU,iEAAiE,EAEvF,KAAKL,GAAWK,EAAK,OACvB,CAEA,GAAIA,EAAK,eAAiB,OAAW,CACnC,GACE,OAAOA,EAAK,cAAiB,UAC7B,CAAC,OAAO,UAAUA,EAAK,YAAY,GACnCA,EAAK,aAAe,EAEpB,MAAM,IAAI,UAAU,sEAAsE,EAE5F,KAAKJ,GAAgBI,EAAK,YAC5B,CACF,CACF,CAMA,IAAKC,EAAK,CACRV,GAAeU,CAAG,EAElB,IAAMC,EAAc,GAAGD,EAAI,MAAM,IAAIA,EAAI,IAAI,GAEvCE,EAAM,KAAK,IAAI,EACfC,EAAQ,KAAKL,GAAS,IAAIG,CAAW,GAAG,KAAME,GAClDA,EAAM,SAAWD,GACjBC,EAAM,SAAWH,EAAI,SACpBG,EAAM,MAAQ,MAAQ,OAAO,KAAKA,EAAM,IAAI,EAAE,MAAMC,GAC/CD,EAAM,KAAKC,CAAU,IAAM,KACtBJ,EAAI,QAAQI,CAAU,IAAM,OAG9BD,EAAM,KAAKC,CAAU,IAAMJ,EAAI,QAAQI,CAAU,CACzD,EACF,EAED,OAAOD,GAAS,KACZ,OACA,CACE,cAAeA,EAAM,cACrB,WAAYA,EAAM,WAClB,QAASA,EAAM,QACf,KAAMA,EAAM,KACZ,KAAMA,EAAM,KAAOA,EAAM,KAAO,OAChC,KAAMA,EAAM,KACZ,uBAAwBA,EAAM,uBAC9B,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,QAClB,CACN,CAOA,kBAAmBH,EAAKK,EAAK,CAC3Bf,GAAeU,CAAG,EAClBT,GAAiBc,CAAG,EAEpB,IAAMJ,EAAc,GAAGD,EAAI,MAAM,IAAIA,EAAI,IAAI,GAEvCM,EAAQ,KACRH,EAAQ,CAAE,GAAGH,EAAK,GAAGK,EAAK,KAAM,CAAC,EAAG,KAAM,CAAE,EAElD,OAAO,IAAIhB,GAAS,CAClB,MAAOkB,EAAOC,EAAUC,EAAU,CAC5B,OAAOF,GAAU,WACnBA,EAAQ,OAAO,KAAKA,EAAOC,CAAQ,GAGrCL,EAAM,MAAQI,EAAM,WAEhBJ,EAAM,MAAQG,EAAMX,GACtB,KAAK,QAAQ,EAEbQ,EAAM,KAAK,KAAKI,CAAK,EAGvBE,EAAS,IAAI,CACf,EACA,MAAOA,EAAU,CACf,IAAIC,EAAUJ,EAAMR,GAAS,IAAIG,CAAW,EAU5C,GATKS,IACHA,EAAU,CAAC,EACXJ,EAAMR,GAAS,IAAIG,EAAaS,CAAO,GAEzCA,EAAQ,KAAKP,CAAK,EAElBG,EAAMV,IAASO,EAAM,KACrBG,EAAMT,IAAU,EAEZS,EAAMV,GAAQU,EAAMZ,IAAYY,EAAMT,GAASS,EAAMb,GACvD,OAAW,CAACO,EAAKU,CAAO,IAAKJ,EAAMR,GAAU,CAC3C,QAAWK,KAASO,EAAQ,OAAO,EAAGA,EAAQ,OAAS,CAAC,EACtDJ,EAAMV,IAASO,EAAM,KACrBG,EAAMT,IAAU,EAEda,EAAQ,SAAW,GACrBJ,EAAMR,GAAS,OAAOE,CAAG,CAE7B,CAGFS,EAAS,IAAI,CACf,CACF,CAAC,CACH,CAKA,OAAQT,EAAK,CACX,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,UAAU,kCAAkC,OAAOA,CAAG,EAAE,EAGpE,IAAMC,EAAc,GAAGD,EAAI,MAAM,IAAIA,EAAI,IAAI,GAE7C,QAAWG,KAAS,KAAKL,GAAS,IAAIG,CAAW,GAAK,CAAC,EACrD,KAAKL,IAASO,EAAM,KACpB,KAAKN,IAAU,EAEjB,KAAKC,GAAS,OAAOG,CAAW,CAClC,CACF,EAEAb,GAAO,QAAUI,KCtLjB,IAAAmB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAe9BC,GAAN,KAA+B,CAC7BC,GAAc,GAKdC,GAKAC,GAEAC,GAKAC,GAOA,YAAaC,EAAUC,EAASC,EAAuB,CACrD,GAAI,OAAOF,GAAa,WACtB,MAAM,IAAI,UAAU,6BAA6B,EAGnD,KAAKJ,GAAYI,EACjB,KAAKH,GAAWI,EAChB,KAAKF,GAAyBG,CAChC,CAEA,eAAgBC,EAAGC,EAAS,CAC1B,KAAKT,GAAc,GACnB,KAAKG,GAAWM,CAClB,CAEA,iBAAkBC,EAAYC,EAAYC,EAASC,EAAQ,CACzD,KAAKX,GAAS,mBAAmBQ,EAAYC,EAAYC,EAASC,CAAM,CAC1E,CAEA,gBACEH,EACAC,EACAC,EACAE,EACA,CAUA,GATAhB,GAAO,KAAKG,IAAa,IAAI,EAI7B,KAAKD,GAAcW,IAAe,KAC/B,KAAKP,IAA0BO,GAAc,KAAOA,GAAc,IACrE,KAAKV,GAAU,KAAKD,GAAa,KAAKG,EAAQ,EAC9C,KAAKF,GAAY,KAEb,KAAKD,GACP,MAAO,GAGT,KAAKE,GAAS,iBAAiBQ,EAAY,KAAKP,EAAQ,EACxD,KAAKD,GAAS,kBACZQ,EACAC,EACAC,EACAE,CACF,CACF,CAEA,eAAgBJ,EAAYK,EAAO,CACjC,GAAI,MAAKf,GAIT,OAAO,KAAKE,GAAS,iBAAiBQ,EAAYK,CAAK,CACzD,CAEA,cAAeL,EAAYM,EAAU,CAC/B,KAAKhB,IAIT,KAAKE,GAAS,gBAAgBQ,EAAYM,CAAQ,CACpD,CAEA,gBAAiBN,EAAYO,EAAK,CAChC,GAAI,MAAKjB,GAST,GALI,KAAKC,KACP,KAAKA,GAAU,EAAK,EACpB,KAAKA,GAAY,MAGf,OAAO,KAAKC,GAAS,iBAAoB,WAC3C,KAAKA,GAAS,gBAAgBQ,EAAYO,CAAG,MAE7C,OAAMA,CAEV,CACF,EAEApB,GAAO,QAAUE,KC3HjB,IAAAmB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpCC,GAAO,IACPC,GAAe,KACfC,GAAmB,KACnBC,GAA2B,KAC3B,CAAE,iBAAAC,GAAkB,mBAAAC,GAAoB,aAAAC,GAAc,wBAAAC,EAAwB,EAAI,KAClF,CAAE,WAAAC,EAAW,EAAI,IAWvB,SAASC,GAAmBC,EAAQC,EAAwB,CAC1D,GAAIA,IAAyB,UAAU,EAErC,MAAO,GAGT,IAAMC,EAAM,KAAK,IAAI,EACrB,GAAIA,EAAMF,EAAO,QAAS,CAExB,GAAIC,IAAyB,WAAW,EAAG,CAIzC,IAAME,EAAcH,EAAO,QAAWC,EAAuB,WAAW,EAAI,IAC5E,OAAOC,EAAMC,CACf,CAEA,MAAO,EACT,CAEA,GAAIF,IAAyB,WAAW,EAAG,CAIzC,IAAMG,EAAoBJ,EAAO,QAAUE,EACrCG,EAAYJ,EAAuB,WAAW,EAAI,IAExD,OAAOG,GAAqBC,CAC9B,CAEA,MAAO,EACT,CAUA,SAASC,GACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CACA,GAAIA,IAAkB,gBAAgB,EAAG,CACvC,IAAIC,EAAU,GACd,GAAI,CAWF,GAVI,OAAOH,EAAQ,WAAc,aAC/BA,EAAQ,UAAU,IAAM,CACtBG,EAAU,EACZ,CAAC,EAEGA,IAKF,OAAOH,EAAQ,WAAc,aAC/BA,EAAQ,UAAU,IAAK,CAAC,EAAG,IAAM,CAAC,EAAG,iBAAiB,EAClDG,GACF,OAIA,OAAOH,EAAQ,YAAe,YAChCA,EAAQ,WAAW,CAAC,CAAC,CAEzB,OAASI,EAAK,CACR,OAAOJ,EAAQ,SAAY,YAC7BA,EAAQ,QAAQI,CAAG,CAEvB,CAEA,MAAO,EACT,CAEA,OAAOP,EAASI,EAAM,IAAIpB,GAAaiB,EAAYC,EAAUC,CAAO,CAAC,CACvE,CAUA,SAASK,GAAiBL,EAASC,EAAMX,EAAQgB,EAAKC,EAASC,EAAS,CAEtE,IAAMC,EAAS7B,GAAK,SAASU,EAAO,IAAI,EACpCA,EAAO,KACPX,GAAS,KAAKW,EAAO,MAAQ,CAAC,CAAC,EAEnCZ,GAAO,CAAC+B,EAAO,UAAW,gCAAgC,EAC1D/B,GAAO,CAAC+B,EAAO,gBAAiB,sCAAsC,EAEtE,IAAMC,EAAa,CACjB,QAAU,CACRD,EAAO,OAAO,CAChB,EACA,OAAS,CACPA,EAAO,MAAM,CACf,EACA,IAAI,QAAU,CACZ,OAAOA,EAAO,SAAS,CACzB,EACA,IAAI,SAAW,CACb,OAAOA,EAAO,SAChB,EACA,IAAI,QAAU,CACZ,OAAOA,EAAO,OAChB,EACA,MAAOE,EAAQ,CACbF,EAAO,QAAQE,GAAU,IAAIvB,EAAY,CAC3C,CACF,EAoBA,GAlBAqB,EACG,GAAG,QAAS,SAAUL,EAAK,CAC1B,GAAI,CAAC,KAAK,cACR,GAAI,OAAOJ,EAAQ,iBAAoB,WACrCA,EAAQ,gBAAgBU,EAAYN,CAAG,MAEvC,OAAMA,CAGZ,CAAC,EACA,GAAG,QAAS,UAAY,CAClB,KAAK,SACRJ,EAAQ,gBAAgBU,EAAY,CAAC,CAAC,CAE1C,CAAC,EAEHV,EAAQ,iBAAiBU,EAAYH,CAAO,EAExCE,EAAO,UACT,OAKF,IAAMG,EAAU,CAAE,GAAGtB,EAAO,QAAS,IAAK,OAAOgB,CAAG,CAAE,EAElDE,IAGFI,EAAQ,QAAU,6BAGpBZ,EAAQ,kBAAkBU,EAAYpB,EAAO,WAAYsB,EAAStB,EAAO,aAAa,EAElFW,EAAK,SAAW,OAClBQ,EAAO,QAAQ,EAEfA,EAAO,GAAG,OAAQ,SAAUI,EAAO,CACjCb,EAAQ,iBAAiBU,EAAYG,CAAK,CAC5C,CAAC,CAEL,CAWA,SAASC,GACPjB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,EACA,CACA,GAAI,CAACA,EACH,OAAOM,GAAuBC,EAAUC,EAAYC,EAAUC,EAASC,EAAMC,CAAe,EAG9F,IAAMV,EAAM,KAAK,IAAI,EACrB,GAAIA,EAAMF,EAAO,SAEf,OAAOO,EAASI,EAAM,IAAIpB,GAAaiB,EAAYC,EAAUC,CAAO,CAAC,EAGvE,IAAMM,EAAM,KAAK,OAAOd,EAAMF,EAAO,UAAY,GAAI,EACrD,GAAIY,IAAkB,SAAS,GAAKI,GAAOJ,EAAgB,SAAS,EAGlE,OAAOL,EAASI,EAAMD,CAAO,EAI/B,GAAIX,GAAkBC,EAAQY,CAAe,EAAG,CAC9C,GAAItB,GAAK,SAASqB,EAAK,IAAI,GAAKrB,GAAK,WAAWqB,EAAK,IAAI,IAAM,EAG7D,OAAOJ,EAASI,EAAM,IAAIpB,GAAaiB,EAAYC,EAAUC,CAAO,CAAC,EAGvE,IAAIe,EAA8B,GAC5BC,EAAqB1B,EAAO,uBAAuB,gBAAgB,GAAKY,IAAkB,gBAAgB,EAC5Gc,IACFD,EAA8BvB,EAAOF,EAAO,QAAW0B,EAAqB,KAG9E,IAAIJ,EAAU,CACZ,GAAGX,EAAK,QACR,oBAAqB,IAAI,KAAKX,EAAO,QAAQ,EAAE,YAAY,CAC7D,EAEA,OAAIA,EAAO,OACTsB,EAAQ,eAAe,EAAItB,EAAO,MAGhCA,EAAO,OACTsB,EAAU,CACR,GAAGA,EACH,GAAGtB,EAAO,IACZ,GAIKO,EACL,CACE,GAAGI,EACH,QAAAW,CACF,EACA,IAAI7B,GACF,CAACkC,EAASV,IAAY,CAChBU,EACFZ,GAAgBL,EAASC,EAAMX,EAAQgB,EAAKC,EAAS,EAAI,EAChD3B,GAAK,SAASU,EAAO,IAAI,GAClCA,EAAO,KAAK,GAAG,QAAS,IAAM,CAAC,CAAC,EAAE,QAAQ,CAE9C,EACA,IAAIT,GAAaiB,EAAYC,EAAUC,CAAO,EAC9Ce,CACF,CACF,CACF,CAGInC,GAAK,SAASqB,EAAK,IAAI,GACzBA,EAAK,KAAK,GAAG,QAAS,IAAM,CAAC,CAAC,EAAE,QAAQ,EAG1CI,GAAgBL,EAASC,EAAMX,EAAQgB,EAAK,KAAM,EAAK,CACzD,CAMA7B,GAAO,QAAU,CAACwB,EAAO,CAAC,IAAM,CAC9B,GAAM,CACJ,MAAAiB,EAAQ,IAAIpC,GACZ,QAAAqC,EAAU,CAAC,KAAK,EAChB,eAAAC,EAAiB,OACjB,KAAAC,EAAO,QACT,EAAIpB,EAEJ,GAAI,OAAOA,GAAS,UAAYA,IAAS,KACvC,MAAM,IAAI,UAAU,8CAA8CA,IAAS,KAAO,OAAS,OAAOA,CAAI,EAAE,EAM1G,GAHAjB,GAAiBkC,EAAO,YAAY,EACpCjC,GAAmBkC,EAAS,cAAc,EAEtC,OAAOC,EAAmB,KAAe,OAAOA,GAAmB,SACrE,MAAM,IAAI,UAAU,+DAA+D,OAAOA,CAAc,EAAE,EAG5G,GAAI,OAAOC,EAAS,KAAeA,IAAS,UAAYA,IAAS,UAC/D,MAAM,IAAI,UAAU,+DAA+D,OAAOA,CAAI,EAAE,EAGlG,IAAMvB,EAAa,CACjB,MAAAoB,EACA,QAAAC,EACA,eAAAC,EACA,KAAAC,CACF,EAEMC,EAAwB1C,GAAK,gBAAgB,OAAO2C,GAAUJ,EAAQ,SAASI,CAAM,IAAM,EAAK,EAEtG,OAAO1B,GACE,CAACI,EAAMD,IAAY,CACxB,GAAI,CAACC,EAAK,QAAUqB,EAAsB,SAASrB,EAAK,MAAM,EAE5D,OAAOJ,EAASI,EAAMD,CAAO,EAG/B,IAAME,EAAkBD,EAAK,UAAU,eAAe,EAClDd,GAAwBc,EAAK,QAAQ,eAAe,CAAC,EACrD,OAEJ,GAAIC,IAAkB,UAAU,EAC9B,OAAOL,EAASI,EAAMD,CAAO,EAM/B,IAAMD,EAAWb,GAAae,CAAI,EAC5BX,EAAS4B,EAAM,IAAInB,CAAQ,EAEjC,OAAIT,GAAU,OAAOA,EAAO,MAAS,WACnCA,EAAO,KAAKA,GAAU,CACpBwB,GAAajB,EACXC,EACAC,EACAC,EACAC,EACAC,EACAZ,CACF,CACF,CAAC,EAEDwB,GACEjB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,CACF,EAGK,EACT,CAEJ,ICzWA,IAAAkC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAQ,EAC/B,CAAE,eAAAC,GAAgB,iBAAAC,EAAiB,EAAI,KAEzCC,GAEEC,GAAU,EAGVC,GAAiB,EAAI,IAAO,IAAO,IAoBzCN,GAAO,QAAU,KAAuB,CACtCO,GAAgBD,GAChBE,GAAY,IAKZC,GAKAC,GAKAC,GAKAC,GAKAC,GAKAC,GAKAC,GAKAC,GAKA,YAAaC,EAAM,CACjB,GAAIA,EAAM,CACR,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,4CAA4C,EAGlE,GAAIA,EAAK,eAAiB,OAAW,CACnC,GACE,OAAOA,EAAK,cAAiB,UAC7B,CAAC,OAAO,UAAUA,EAAK,YAAY,GACnCA,EAAK,aAAe,EAEpB,MAAM,IAAI,UAAU,sEAAsE,EAG5F,GAAIA,EAAK,aAAeX,GACtB,MAAM,IAAI,UAAU,6DAA6D,EAGnF,KAAKC,GAAgBU,EAAK,YAC5B,CAEA,GAAIA,EAAK,WAAa,OAAW,CAC/B,GACE,OAAOA,EAAK,UAAa,UACzB,CAAC,OAAO,UAAUA,EAAK,QAAQ,GAC/BA,EAAK,SAAW,EAEhB,MAAM,IAAI,UAAU,kEAAkE,EAExF,KAAKT,GAAYS,EAAK,QACxB,CACF,CAEKb,KACHA,GAAe,EAAQ,aAAa,EAAE,cAExC,KAAKK,GAAM,IAAIL,GAAaa,GAAM,UAAY,UAAU,EAExD,KAAKR,GAAI,KAAK;AAAA,oDACkCJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wDAmBHA,EAAO,4BAA4BA,EAAO;AAAA,wDAC1CA,EAAO,+BAA+BA,EAAO;AAAA,wDAC7CA,EAAO,iCAAiCA,EAAO;AAAA,KAClG,EAED,KAAKK,GAAkB,KAAKD,GAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAadJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMhC,EAED,KAAKM,GAAoB,KAAKF,GAAI,QAAQ;AAAA,gCACdJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAYlC,EAED,KAAKO,GAAoB,KAAKH,GAAI,QAAQ;AAAA,qCACTJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAcvC,EAED,KAAKS,GAAoB,KAAKL,GAAI,QAChC,gCAAgCJ,EAAO,gBACzC,EAEA,KAAKU,GAAqB,KAAKN,GAAI,QACjC,kDAAkDJ,EAAO,EAC3D,EAEA,KAAKQ,GAA4B,KAAKJ,GAAI,QACxC,gCAAgCJ,EAAO,sBACzC,EAEA,KAAKW,GAAwB,KAAKR,KAAc,IAC5C,KACA,KAAKC,GAAI,QAAQ;AAAA,uCACcJ,EAAO;AAAA;AAAA;AAAA;AAAA,kCAIZA,EAAO;AAAA;AAAA;AAAA;AAAA,OAIlC,CACL,CAEA,OAAS,CACP,KAAKI,GAAI,MAAM,CACjB,CAMA,IAAKS,EAAK,CACRhB,GAAegB,CAAG,EAElB,IAAMC,EAAQ,KAAKC,GAAWF,CAAG,EACjC,OAAOC,EACH,CACE,KAAMA,EAAM,KAAO,OAAO,KAAKA,EAAM,KAAK,OAAQA,EAAM,KAAK,WAAYA,EAAM,KAAK,UAAU,EAAI,OAClG,WAAYA,EAAM,WAClB,cAAeA,EAAM,cACrB,QAASA,EAAM,QAAU,KAAK,MAAMA,EAAM,OAAO,EAAI,OACrD,KAAMA,EAAM,KAAOA,EAAM,KAAO,OAChC,KAAMA,EAAM,KAAO,KAAK,MAAMA,EAAM,IAAI,EAAI,OAC5C,uBAAwBA,EAAM,uBAC1B,KAAK,MAAMA,EAAM,sBAAsB,EACvC,OACJ,SAAUA,EAAM,SAChB,QAASA,EAAM,QACf,SAAUA,EAAM,QAClB,EACA,MACN,CAMA,IAAKD,EAAKC,EAAO,CACfjB,GAAegB,CAAG,EAElB,IAAMG,EAAM,KAAKC,GAAcJ,CAAG,EAC5BK,EAAO,MAAM,QAAQJ,EAAM,IAAI,EAAI,OAAO,OAAOA,EAAM,IAAI,EAAIA,EAAM,KACrEK,EAAOD,GAAM,WAEnB,GAAIC,GAAQA,EAAO,KAAKjB,GACtB,OAGF,IAAMkB,EAAgB,KAAKL,GAAWF,EAAK,EAAI,EAC3CO,EAEF,KAAKd,GAAkB,IACrBY,EACAJ,EAAM,SACNA,EAAM,WACNA,EAAM,cACNA,EAAM,QAAU,KAAK,UAAUA,EAAM,OAAO,EAAI,KAChDA,EAAM,KAAOA,EAAM,KAAO,KAC1BA,EAAM,uBAAyB,KAAK,UAAUA,EAAM,sBAAsB,EAAI,KAC9EA,EAAM,SACNA,EAAM,QACNM,EAAc,EAChB,GAEA,KAAKC,GAAO,EAEZ,KAAKd,GAAkB,IACrBS,EACAH,EAAI,OACJK,EACAJ,EAAM,SACNA,EAAM,WACNA,EAAM,cACNA,EAAM,QAAU,KAAK,UAAUA,EAAM,OAAO,EAAI,KAChDA,EAAM,KAAOA,EAAM,KAAO,KAC1BA,EAAM,uBAAyB,KAAK,UAAUA,EAAM,sBAAsB,EAAI,KAC9EA,EAAM,KAAO,KAAK,UAAUA,EAAM,IAAI,EAAI,KAC1CA,EAAM,SACNA,EAAM,OACR,EAEJ,CAOA,kBAAmBD,EAAKC,EAAO,CAC7BjB,GAAegB,CAAG,EAClBf,GAAiBgB,CAAK,EAEtB,IAAIK,EAAO,EAILD,EAAO,CAAC,EACRI,EAAQ,KAEd,OAAO,IAAI1B,GAAS,CAClB,cAAe,GACf,MAAO2B,EAAOC,EAAUC,EAAU,CAChCN,GAAQI,EAAM,WAEVJ,EAAOG,EAAMpB,GACfgB,EAAK,KAAKK,CAAK,EAEf,KAAK,QAAQ,EAGfE,EAAS,CACX,EACA,MAAOA,EAAU,CACfH,EAAM,IAAIT,EAAK,CAAE,GAAGC,EAAO,KAAAI,CAAK,CAAC,EACjCO,EAAS,CACX,CACF,CAAC,CACH,CAKA,OAAQZ,EAAK,CACX,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,UAAU,kCAAkC,OAAOA,CAAG,EAAE,EAGpE,KAAKJ,GAAkB,IAAI,KAAKQ,GAAcJ,CAAG,CAAC,CACpD,CAEAQ,IAAU,CACR,GAAI,KAAK,MAAQ,KAAKlB,GACpB,MAAO,GAGT,CACE,IAAMuB,EAAU,KAAKlB,GAA0B,IAAI,KAAK,IAAI,CAAC,EAAE,QAC/D,GAAIkB,EACF,OAAOA,CAEX,CAEA,CACE,IAAMA,EAAU,KAAKf,IAAuB,IAAI,KAAK,IAAI,KAAK,MAAM,KAAKR,GAAY,EAAG,EAAG,CAAC,CAAC,EAAE,QAC/F,GAAIuB,EACF,OAAOA,CAEX,CAEA,MAAO,EACT,CAMA,IAAI,MAAQ,CACV,GAAM,CAAE,MAAAC,CAAM,EAAI,KAAKjB,GAAmB,IAAI,EAC9C,OAAOiB,CACT,CAMAV,GAAeJ,EAAK,CAClB,MAAO,GAAGA,EAAI,MAAM,IAAIA,EAAI,IAAI,EAClC,CAOAE,GAAYF,EAAKe,EAAe,GAAO,CACrC,IAAMZ,EAAM,KAAKC,GAAcJ,CAAG,EAC5B,CAAE,QAAAgB,EAAS,OAAAC,CAAO,EAAIjB,EAKtBkB,EAAS,KAAK1B,GAAgB,IAAIW,EAAKc,CAAM,EAEnD,GAAIC,EAAO,SAAW,EACpB,OAGF,IAAMC,EAAM,KAAK,IAAI,EACrB,QAAWlB,KAASiB,EAAQ,CAC1B,GAAIC,GAAOlB,EAAM,UAAY,CAACc,EAC5B,OAGF,IAAIK,EAAU,GAEd,GAAInB,EAAM,KAAM,CACd,IAAMoB,EAAO,KAAK,MAAMpB,EAAM,IAAI,EAElC,QAAWqB,KAAUD,EACnB,GAAI,CAACE,GAAkBP,EAAQM,CAAM,EAAGD,EAAKC,CAAM,CAAC,EAAG,CACrDF,EAAU,GACV,KACF,CAEJ,CAEA,GAAIA,EACF,OAAOnB,CAEX,CAGF,CACF,EAOA,SAASsB,GAAmBC,EAAKC,EAAK,CACpC,OAAID,GAAO,MAAQC,GAAO,KACjB,GAGJD,GAAO,MAAQC,GAAO,MACtBD,GAAO,MAAQC,GAAO,KAClB,GAGL,MAAM,QAAQD,CAAG,GAAK,MAAM,QAAQC,CAAG,EACrCD,EAAI,SAAWC,EAAI,OACd,GAGFD,EAAI,MAAM,CAACE,EAAGC,IAAMD,IAAMD,EAAIE,CAAC,CAAC,EAGlCH,IAAQC,CACjB,ICxcA,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,GAAM,CAAE,WAAAC,EAAW,EAAI,KACjB,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CACJ,cAAAC,GACA,kBAAAC,GACA,mBAAAC,EACF,EAAI,KACE,CAAE,OAAAC,CAAO,EAAI,KACbC,GAAS,EAAQ,aAAa,EAC9BC,GAAO,EAAQ,WAAW,EAMhC,SAASC,GAA0BC,EAAM,CACvC,OAAOA,IAAS,IAAQA,IAAS,IAAQA,IAAS,GAAQA,IAAS,EACrE,CAOA,SAASC,GAAsBC,EAAgB,CAI7C,IAAIC,EAAI,EAAOC,EAAIF,EAAe,OAElC,KAAOE,EAAID,GAAKJ,GAAyBG,EAAe,WAAWE,EAAI,CAAC,CAAC,GAAG,EAAEA,EAC9E,KAAOA,EAAID,GAAKJ,GAAyBG,EAAe,WAAWC,CAAC,CAAC,GAAG,EAAEA,EAE1E,OAAOA,IAAM,GAAKC,IAAMF,EAAe,OAASA,EAAiBA,EAAe,UAAUC,EAAGC,CAAC,CAChG,CAMA,SAASC,GAAMC,EAASC,EAAQ,CAK9B,GAAI,MAAM,QAAQA,CAAM,EACtB,QAASJ,EAAI,EAAGA,EAAII,EAAO,OAAQ,EAAEJ,EAAG,CACtC,IAAMK,EAASD,EAAOJ,CAAC,EAEvB,GAAIK,EAAO,SAAW,EACpB,MAAMZ,EAAO,OAAO,UAAU,CAC5B,OAAQ,sBACR,QAAS,kDAAkDY,EAAO,MAAM,GAC1E,CAAC,EAIHC,GAAaH,EAASE,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CAC5C,SACS,OAAOD,GAAW,UAAYA,IAAW,KAAM,CAKxD,IAAMG,EAAO,OAAO,KAAKH,CAAM,EAC/B,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EACjCM,GAAaH,EAASI,EAAKP,CAAC,EAAGI,EAAOG,EAAKP,CAAC,CAAC,CAAC,CAElD,KACE,OAAMP,EAAO,OAAO,iBAAiB,CACnC,OAAQ,sBACR,SAAU,aACV,MAAO,CAAC,iCAAkC,gCAAgC,CAC5E,CAAC,CAEL,CAQA,SAASa,GAAcH,EAASK,EAAMC,EAAO,CAM3C,GAJAA,EAAQX,GAAqBW,CAAK,EAI7BlB,GAAkBiB,CAAI,GAMpB,GAAI,CAAChB,GAAmBiB,CAAK,EAClC,MAAMhB,EAAO,OAAO,gBAAgB,CAClC,OAAQ,iBACR,MAAAgB,EACA,KAAM,cACR,CAAC,MAVD,OAAMhB,EAAO,OAAO,gBAAgB,CAClC,OAAQ,iBACR,MAAOe,EACP,KAAM,aACR,CAAC,EAeH,GAAIE,GAAgBP,CAAO,IAAM,YAC/B,MAAM,IAAI,UAAU,WAAW,EAOjC,OAAOQ,GAAeR,CAAO,EAAE,OAAOK,EAAMC,EAAO,EAAK,CAI1D,CAMA,SAASG,GAA2BC,EAAQ,CAC1C,IAAMC,EAAcH,GAAeE,CAAM,EAEzC,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,GAAIA,EAAY,UACd,OAAOA,EAAY,UAKrB,IAAMX,EAAU,CAAC,EAIXY,EAAQD,EAAY,cAAc,EAElCE,EAAUF,EAAY,QAG5B,GAAIE,IAAY,MAAQA,EAAQ,SAAW,EAEzC,OAAQF,EAAY,UAAYC,EAIlC,QAAS,EAAI,EAAG,EAAIA,EAAM,OAAQ,EAAE,EAAG,CACrC,GAAM,CAAE,EAAGP,EAAM,EAAGC,CAAM,EAAIM,EAAM,CAAC,EAErC,GAAIP,IAAS,aAMX,QAASP,EAAI,EAAGA,EAAIe,EAAQ,OAAQ,EAAEf,EACpCE,EAAQ,KAAK,CAACK,EAAMQ,EAAQf,CAAC,CAAC,CAAC,OAWjCE,EAAQ,KAAK,CAACK,EAAMC,CAAK,CAAC,CAE9B,CAGA,OAAQK,EAAY,UAAYX,CAClC,CAEA,SAASc,GAAmBC,EAAGC,EAAG,CAChC,OAAOD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAI,GAAK,CAC5B,CAEA,IAAMC,GAAN,MAAMC,CAAY,CAEhB,QAAU,KAEV,UACA,WAEA,YAAaC,EAAM,CACbA,aAAgBD,GAClB,KAAK,WAAa,IAAI,IAAIC,EAAK,UAAU,EACzC,KAAK,UAAYA,EAAK,UACtB,KAAK,QAAUA,EAAK,UAAY,KAAO,KAAO,CAAC,GAAGA,EAAK,OAAO,IAE9D,KAAK,WAAa,IAAI,IAAIA,CAAI,EAC9B,KAAK,UAAY,KAErB,CAOA,SAAUd,EAAMe,EAAa,CAK3B,OAAO,KAAK,WAAW,IAAIA,EAAcf,EAAOA,EAAK,YAAY,CAAC,CACpE,CAEA,OAAS,CACP,KAAK,WAAW,MAAM,EACtB,KAAK,UAAY,KACjB,KAAK,QAAU,IACjB,CAQA,OAAQA,EAAMC,EAAOc,EAAa,CAChC,KAAK,UAAY,KAIjB,IAAMC,EAAgBD,EAAcf,EAAOA,EAAK,YAAY,EACtDiB,EAAS,KAAK,WAAW,IAAID,CAAa,EAGhD,GAAIC,EAAQ,CACV,IAAMC,EAAYF,IAAkB,SAAW,KAAO,KACtD,KAAK,WAAW,IAAIA,EAAe,CACjC,KAAMC,EAAO,KACb,MAAO,GAAGA,EAAO,KAAK,GAAGC,CAAS,GAAGjB,CAAK,EAC5C,CAAC,CACH,MACE,KAAK,WAAW,IAAIe,EAAe,CAAE,KAAAhB,EAAM,MAAAC,CAAM,CAAC,EAGhDe,IAAkB,eACnB,KAAK,UAAY,CAAC,GAAG,KAAKf,CAAK,CAEpC,CAQA,IAAKD,EAAMC,EAAOc,EAAa,CAC7B,KAAK,UAAY,KACjB,IAAMC,EAAgBD,EAAcf,EAAOA,EAAK,YAAY,EAExDgB,IAAkB,eACpB,KAAK,QAAU,CAACf,CAAK,GAOvB,KAAK,WAAW,IAAIe,EAAe,CAAE,KAAAhB,EAAM,MAAAC,CAAM,CAAC,CACpD,CAOA,OAAQD,EAAMe,EAAa,CACzB,KAAK,UAAY,KACZA,IAAaf,EAAOA,EAAK,YAAY,GAEtCA,IAAS,eACX,KAAK,QAAU,MAGjB,KAAK,WAAW,OAAOA,CAAI,CAC7B,CAQA,IAAKA,EAAMe,EAAa,CAKtB,OAAO,KAAK,WAAW,IAAIA,EAAcf,EAAOA,EAAK,YAAY,CAAC,GAAG,OAAS,IAChF,CAEA,EAAG,OAAO,QAAQ,GAAK,CAErB,OAAW,CAAE,EAAGA,EAAM,EAAG,CAAE,MAAAC,CAAM,CAAE,IAAK,KAAK,WAC3C,KAAM,CAACD,EAAMC,CAAK,CAEtB,CAEA,IAAI,SAAW,CACb,IAAMN,EAAU,CAAC,EAEjB,GAAI,KAAK,WAAW,OAAS,EAC3B,OAAW,CAAE,KAAAK,EAAM,MAAAC,CAAM,IAAK,KAAK,WAAW,OAAO,EACnDN,EAAQK,CAAI,EAAIC,EAIpB,OAAON,CACT,CAEA,WAAa,CACX,OAAO,KAAK,WAAW,OAAO,CAChC,CAEA,IAAI,aAAe,CACjB,IAAMA,EAAU,CAAC,EAEjB,GAAI,KAAK,WAAW,OAAS,EAC3B,OAAW,CAAE,EAAGwB,EAAW,EAAG,CAAE,KAAAnB,EAAM,MAAAC,CAAM,CAAE,IAAK,KAAK,WACtD,GAAIkB,IAAc,aAChB,QAAWC,KAAU,KAAK,QACxBzB,EAAQ,KAAK,CAACK,EAAMoB,CAAM,CAAC,OAG7BzB,EAAQ,KAAK,CAACK,EAAMC,CAAK,CAAC,EAKhC,OAAON,CACT,CAGA,eAAiB,CACf,IAAM0B,EAAO,KAAK,WAAW,KACvBC,EAAQ,IAAI,MAAMD,CAAI,EAG5B,GAAIA,GAAQ,GAAI,CACd,GAAIA,IAAS,EAEX,OAAOC,EAIT,IAAMC,EAAW,KAAK,WAAW,OAAO,QAAQ,EAAE,EAC5CC,EAAaD,EAAS,KAAK,EAAE,MAEnCD,EAAM,CAAC,EAAI,CAACE,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAE,KAAK,EAG9CtC,GAAOsC,EAAW,CAAC,EAAE,QAAU,IAAI,EACnC,QACM,EAAI,EAAG/B,EAAI,EAAGgC,EAAQ,EAAGC,EAAO,EAAGC,EAAQ,EAAGC,EAAG3B,EACrD,EAAIoB,EACJ,EAAE,EACF,CAWA,IATApB,EAAQsB,EAAS,KAAK,EAAE,MAExBK,EAAIN,EAAM,CAAC,EAAI,CAACrB,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAE,KAAK,EAGxCf,GAAO0C,EAAE,CAAC,IAAM,IAAI,EACpBF,EAAO,EACPD,EAAQ,EAEDC,EAAOD,GAEZE,EAAQD,GAASD,EAAQC,GAAS,GAE9BJ,EAAMK,CAAK,EAAE,CAAC,GAAKC,EAAE,CAAC,EACxBF,EAAOC,EAAQ,EAEfF,EAAQE,EAGZ,GAAI,IAAMA,EAAO,CAEf,IADAlC,EAAI,EACGA,EAAIiC,GACTJ,EAAM7B,CAAC,EAAI6B,EAAM,EAAE7B,CAAC,EAEtB6B,EAAMI,CAAI,EAAIE,CAChB,CACF,CAEA,GAAI,CAACL,EAAS,KAAK,EAAE,KAEnB,MAAM,IAAI,UAAU,aAAa,EAEnC,OAAOD,CACT,KAAO,CAGL,IAAI9B,EAAI,EACR,OAAW,CAAE,EAAGQ,EAAM,EAAG,CAAE,MAAAC,CAAM,CAAE,IAAK,KAAK,WAC3CqB,EAAM9B,GAAG,EAAI,CAACQ,EAAMC,CAAK,EAGzBf,GAAOe,IAAU,IAAI,EAEvB,OAAOqB,EAAM,KAAKb,EAAiB,CACrC,CACF,CACF,EAGMoB,GAAN,MAAMC,CAAQ,CACZC,GAIAC,GAMA,YAAalB,EAAO,OAAW,CAC7B7B,EAAO,KAAK,kBAAkB,IAAI,EAE9B6B,IAASlC,KAIb,KAAKoD,GAAe,IAAIpB,GAKxB,KAAKmB,GAAS,OAGVjB,IAAS,SACXA,EAAO7B,EAAO,WAAW,YAAY6B,EAAM,sBAAuB,MAAM,EACxEpB,GAAK,KAAMoB,CAAI,GAEnB,CAGA,OAAQd,EAAMC,EAAO,CACnBhB,EAAO,WAAW,KAAM6C,CAAO,EAE/B7C,EAAO,oBAAoB,UAAW,EAAG,gBAAgB,EAEzD,IAAMgD,EAAS,iBACf,OAAAjC,EAAOf,EAAO,WAAW,WAAWe,EAAMiC,EAAQ,MAAM,EACxDhC,EAAQhB,EAAO,WAAW,WAAWgB,EAAOgC,EAAQ,OAAO,EAEpDnC,GAAa,KAAME,EAAMC,CAAK,CACvC,CAGA,OAAQD,EAAM,CASZ,GARAf,EAAO,WAAW,KAAM6C,CAAO,EAE/B7C,EAAO,oBAAoB,UAAW,EAAG,gBAAgB,EAGzDe,EAAOf,EAAO,WAAW,WAAWe,EADrB,iBACmC,MAAM,EAGpD,CAACjB,GAAkBiB,CAAI,EACzB,MAAMf,EAAO,OAAO,gBAAgB,CAClC,OAAQ,iBACR,MAAOe,EACP,KAAM,aACR,CAAC,EAaH,GAAI,KAAK+B,KAAW,YAClB,MAAM,IAAI,UAAU,WAAW,EAK5B,KAAKC,GAAa,SAAShC,EAAM,EAAK,GAO3C,KAAKgC,GAAa,OAAOhC,EAAM,EAAK,CACtC,CAGA,IAAKA,EAAM,CACTf,EAAO,WAAW,KAAM6C,CAAO,EAE/B7C,EAAO,oBAAoB,UAAW,EAAG,aAAa,EAEtD,IAAMgD,EAAS,cAIf,GAHAjC,EAAOf,EAAO,WAAW,WAAWe,EAAMiC,EAAQ,MAAM,EAGpD,CAAClD,GAAkBiB,CAAI,EACzB,MAAMf,EAAO,OAAO,gBAAgB,CAClC,OAAAgD,EACA,MAAOjC,EACP,KAAM,aACR,CAAC,EAKH,OAAO,KAAKgC,GAAa,IAAIhC,EAAM,EAAK,CAC1C,CAGA,IAAKA,EAAM,CACTf,EAAO,WAAW,KAAM6C,CAAO,EAE/B7C,EAAO,oBAAoB,UAAW,EAAG,aAAa,EAEtD,IAAMgD,EAAS,cAIf,GAHAjC,EAAOf,EAAO,WAAW,WAAWe,EAAMiC,EAAQ,MAAM,EAGpD,CAAClD,GAAkBiB,CAAI,EACzB,MAAMf,EAAO,OAAO,gBAAgB,CAClC,OAAAgD,EACA,MAAOjC,EACP,KAAM,aACR,CAAC,EAKH,OAAO,KAAKgC,GAAa,SAAShC,EAAM,EAAK,CAC/C,CAGA,IAAKA,EAAMC,EAAO,CAChBhB,EAAO,WAAW,KAAM6C,CAAO,EAE/B7C,EAAO,oBAAoB,UAAW,EAAG,aAAa,EAEtD,IAAMgD,EAAS,cASf,GARAjC,EAAOf,EAAO,WAAW,WAAWe,EAAMiC,EAAQ,MAAM,EACxDhC,EAAQhB,EAAO,WAAW,WAAWgB,EAAOgC,EAAQ,OAAO,EAG3DhC,EAAQX,GAAqBW,CAAK,EAI7BlB,GAAkBiB,CAAI,GAMpB,GAAI,CAAChB,GAAmBiB,CAAK,EAClC,MAAMhB,EAAO,OAAO,gBAAgB,CAClC,OAAAgD,EACA,MAAAhC,EACA,KAAM,cACR,CAAC,MAVD,OAAMhB,EAAO,OAAO,gBAAgB,CAClC,OAAAgD,EACA,MAAOjC,EACP,KAAM,aACR,CAAC,EAkBH,GAAI,KAAK+B,KAAW,YAClB,MAAM,IAAI,UAAU,WAAW,EAMjC,KAAKC,GAAa,IAAIhC,EAAMC,EAAO,EAAK,CAC1C,CAGA,cAAgB,CACdhB,EAAO,WAAW,KAAM6C,CAAO,EAM/B,IAAMI,EAAO,KAAKF,GAAa,QAE/B,OAAIE,EACK,CAAC,GAAGA,CAAI,EAGV,CAAC,CACV,CAEA,CAAC/C,GAAK,QAAQ,MAAM,EAAGgD,EAAOC,EAAS,CACrC,OAAAA,EAAQ,QAAUD,EAEX,WAAWhD,GAAK,kBAAkBiD,EAAS,KAAKJ,GAAa,OAAO,CAAC,EAC9E,CAEA,OAAO,gBAAiBK,EAAG,CACzB,OAAOA,EAAEN,EACX,CAEA,OAAO,gBAAiBM,EAAGC,EAAO,CAChCD,EAAEN,GAASO,CACb,CAKA,OAAO,eAAgBD,EAAG,CACxB,OAAOA,EAAEL,EACX,CAMA,OAAO,eAAgB3B,EAAQ6B,EAAM,CACnC7B,EAAO2B,GAAeE,CACxB,CACF,EAEM,CAAE,gBAAAhC,GAAiB,gBAAAqC,GAAiB,eAAApC,GAAgB,eAAAqC,EAAe,EAAIX,GAC7E,QAAQ,eAAeA,GAAS,iBAAiB,EACjD,QAAQ,eAAeA,GAAS,iBAAiB,EACjD,QAAQ,eAAeA,GAAS,gBAAgB,EAChD,QAAQ,eAAeA,GAAS,gBAAgB,EAEhD/C,GAAc,UAAW+C,GAASzB,GAA2B,EAAG,CAAC,EAEjE,OAAO,iBAAiByB,GAAQ,UAAW,CACzC,OAAQhD,GACR,OAAQA,GACR,IAAKA,GACL,IAAKA,GACL,IAAKA,GACL,aAAcA,GACd,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,UACP,aAAc,EAChB,EACA,CAACM,GAAK,QAAQ,MAAM,EAAG,CACrB,WAAY,EACd,CACF,CAAC,EAEDF,EAAO,WAAW,YAAc,SAAUwD,EAAGR,EAAQS,EAAU,CAC7D,GAAIzD,EAAO,KAAK,KAAKwD,CAAC,IAAMxD,EAAO,KAAK,MAAM,OAAQ,CACpD,IAAMsC,EAAW,QAAQ,IAAIkB,EAAG,OAAO,QAAQ,EAI/C,GAAI,CAACtD,GAAK,MAAM,QAAQsD,CAAC,GAAKlB,IAAaM,GAAQ,UAAU,QAC3D,GAAI,CACF,OAAO1B,GAAesC,CAAC,EAAE,WAC3B,MAAQ,CAER,CAGF,OAAI,OAAOlB,GAAa,WACftC,EAAO,WAAW,gCAAgC,EAAEwD,EAAGR,EAAQS,EAAUnB,EAAS,KAAKkB,CAAC,CAAC,EAG3FxD,EAAO,WAAW,gCAAgC,EAAEwD,EAAGR,EAAQS,CAAQ,CAChF,CAEA,MAAMzD,EAAO,OAAO,iBAAiB,CACnC,OAAQ,sBACR,SAAU,aACV,MAAO,CAAC,iCAAkC,gCAAgC,CAC5E,CAAC,CACH,EAEAN,GAAO,QAAU,CACf,KAAAe,GAEA,kBAAAe,GACA,QAAAoB,GACA,YAAAjB,GACA,gBAAAV,GACA,gBAAAqC,GACA,eAAAC,GACA,eAAArC,EACF,IC9sBA,IAAAwC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,QAAAC,GAAS,YAAAC,GAAa,KAAAC,GAAM,gBAAAC,GAAiB,gBAAAC,GAAiB,eAAAC,EAAe,EAAI,KACnF,CAAE,YAAAC,GAAa,UAAAC,GAAW,UAAAC,GAAW,wBAAAC,GAAyB,eAAAC,GAAgB,aAAAC,EAAa,EAAI,KAC/FC,GAAO,IACPC,GAAW,EAAQ,WAAW,EAC9B,CAAE,oBAAAC,EAAoB,EAAIF,GAC1B,CACJ,oBAAAG,GACA,YAAAC,GACA,UAAAC,GACA,qCAAAC,GACA,YAAAC,GACA,iBAAAC,GACA,0BAA2BC,EAC7B,EAAI,KACE,CACJ,kBAAAC,GACA,eAAAC,EACF,EAAI,KACE,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,WAAAC,EAAW,EAAI,KACjBC,GAAS,EAAQ,aAAa,EAC9B,CAAE,MAAAC,EAAM,EAAI,EAAQ,WAAW,EAE/BC,GAAc,IAAI,YAAY,OAAO,EAGrCC,GAAN,MAAMC,CAAS,CAEbC,GAEAC,GAGA,OAAO,OAAS,CAMd,OAFuBC,GAAkBC,GAAiB,EAAG,WAAW,CAG1E,CAGA,OAAO,KAAMC,EAAMC,EAAO,OAAW,CACnCb,EAAO,oBAAoB,UAAW,EAAG,eAAe,EAEpDa,IAAS,OACXA,EAAOb,EAAO,WAAW,aAAaa,CAAI,GAI5C,IAAMC,EAAQT,GAAY,OACxBX,GAAqCkB,CAAI,CAC3C,EAGMG,EAAOjC,GAAYgC,CAAK,EAIxBE,EAAiBN,GAAkBO,GAAa,CAAC,CAAC,EAAG,UAAU,EAGrE,OAAAC,GAAmBF,EAAgBH,EAAM,CAAE,KAAME,EAAK,CAAC,EAAG,KAAM,kBAAmB,CAAC,EAG7EC,CACT,CAGA,OAAO,SAAUG,EAAKC,EAAS,IAAK,CAClCpB,EAAO,oBAAoB,UAAW,EAAG,mBAAmB,EAE5DmB,EAAMnB,EAAO,WAAW,UAAUmB,CAAG,EACrCC,EAASpB,EAAO,WAAW,gBAAgB,EAAEoB,CAAM,EAMnD,IAAIC,EACJ,GAAI,CACFA,EAAY,IAAI,IAAIF,EAAKtB,GAAc,eAAe,OAAO,CAC/D,OAASyB,EAAK,CACZ,MAAM,IAAI,UAAU,4BAA4BH,CAAG,GAAI,CAAE,MAAOG,CAAI,CAAC,CACvE,CAGA,GAAI,CAACxB,GAAkB,IAAIsB,CAAM,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAM,EAAE,EAKtD,IAAMJ,EAAiBN,GAAkBO,GAAa,CAAC,CAAC,EAAG,WAAW,EAGtED,EAAeP,GAAO,OAASW,EAG/B,IAAMG,EAAQ3B,GAAiBK,GAAcoB,CAAS,CAAC,EAGvD,OAAAL,EAAeP,GAAO,YAAY,OAAO,WAAYc,EAAO,EAAI,EAGzDP,CACT,CAGA,YAAaD,EAAO,KAAMF,EAAO,OAAW,CAG1C,GAFAb,EAAO,KAAK,kBAAkB,IAAI,EAE9Be,IAASb,GACX,OAGEa,IAAS,OACXA,EAAOf,EAAO,WAAW,SAASe,CAAI,GAGxCF,EAAOb,EAAO,WAAW,aAAaa,CAAI,EAG1C,KAAKJ,GAASQ,GAAa,CAAC,CAAC,EAK7B,KAAKT,GAAW,IAAIhC,GAAQ0B,EAAU,EACtCtB,GAAgB,KAAK4B,GAAU,UAAU,EACzC3B,GAAe,KAAK2B,GAAU,KAAKC,GAAO,WAAW,EAGrD,IAAIe,EAAe,KAGnB,GAAIT,GAAQ,KAAM,CAChB,GAAM,CAACU,EAAeC,CAAI,EAAI5C,GAAYiC,CAAI,EAC9CS,EAAe,CAAE,KAAMC,EAAe,KAAAC,CAAK,CAC7C,CAGAR,GAAmB,KAAML,EAAMW,CAAY,CAC7C,CAGA,IAAI,MAAQ,CACV,OAAAxB,EAAO,WAAW,KAAMO,CAAQ,EAGzB,KAAKE,GAAO,IACrB,CAGA,IAAI,KAAO,CACTT,EAAO,WAAW,KAAMO,CAAQ,EAEhC,IAAMoB,EAAU,KAAKlB,GAAO,QAKtBU,EAAMQ,EAAQA,EAAQ,OAAS,CAAC,GAAK,KAE3C,OAAIR,IAAQ,KACH,GAGFlB,GAAckB,EAAK,EAAI,CAChC,CAGA,IAAI,YAAc,CAChB,OAAAnB,EAAO,WAAW,KAAMO,CAAQ,EAIzB,KAAKE,GAAO,QAAQ,OAAS,CACtC,CAGA,IAAI,QAAU,CACZ,OAAAT,EAAO,WAAW,KAAMO,CAAQ,EAGzB,KAAKE,GAAO,MACrB,CAGA,IAAI,IAAM,CACR,OAAAT,EAAO,WAAW,KAAMO,CAAQ,EAIzB,KAAKE,GAAO,QAAU,KAAO,KAAKA,GAAO,QAAU,GAC5D,CAGA,IAAI,YAAc,CAChB,OAAAT,EAAO,WAAW,KAAMO,CAAQ,EAIzB,KAAKE,GAAO,UACrB,CAGA,IAAI,SAAW,CACb,OAAAT,EAAO,WAAW,KAAMO,CAAQ,EAGzB,KAAKC,EACd,CAEA,IAAI,MAAQ,CACV,OAAAR,EAAO,WAAW,KAAMO,CAAQ,EAEzB,KAAKE,GAAO,KAAO,KAAKA,GAAO,KAAK,OAAS,IACtD,CAEA,IAAI,UAAY,CACd,OAAAT,EAAO,WAAW,KAAMO,CAAQ,EAEzB,CAAC,CAAC,KAAKE,GAAO,MAAQrB,GAAK,YAAY,KAAKqB,GAAO,KAAK,MAAM,CACvE,CAGA,OAAS,CAIP,GAHAT,EAAO,WAAW,KAAMO,CAAQ,EAG5BpB,GAAa,KAAKsB,EAAM,EAC1B,MAAMT,EAAO,OAAO,UAAU,CAC5B,OAAQ,iBACR,QAAS,iCACX,CAAC,EAIH,IAAM4B,EAAiBC,GAAc,KAAKpB,EAAM,EAIhD,OAAOC,GAAkBkB,EAAgBjD,GAAgB,KAAK6B,EAAQ,CAAC,CACzE,CAEA,CAACnB,GAAS,QAAQ,MAAM,EAAGyC,EAAOC,EAAS,CACrCA,EAAQ,QAAU,OACpBA,EAAQ,MAAQ,GAGlBA,EAAQ,SAAW,GAEnB,IAAMC,EAAa,CACjB,OAAQ,KAAK,OACb,WAAY,KAAK,WACjB,QAAS,KAAK,QACd,KAAM,KAAK,KACX,SAAU,KAAK,SACf,GAAI,KAAK,GACT,WAAY,KAAK,WACjB,KAAM,KAAK,KACX,IAAK,KAAK,GACZ,EAEA,MAAO,YAAY3C,GAAS,kBAAkB0C,EAASC,CAAU,CAAC,EACpE,CAKA,OAAO,mBAAoBC,EAAU,CACnC,OAAOA,EAASzB,EAClB,CAMA,OAAO,mBAAoByB,EAAUC,EAAY,CAC/CD,EAASzB,GAAW0B,CACtB,CAKA,OAAO,iBAAkBD,EAAU,CACjC,OAAOA,EAASxB,EAClB,CAMA,OAAO,iBAAkBwB,EAAUE,EAAU,CAC3CF,EAASxB,GAAS0B,CACpB,CACF,EAEM,CAAE,mBAAAC,GAAoB,mBAAAC,GAAoB,iBAAAC,GAAkB,iBAAAC,EAAiB,EAAIjC,GACvF,QAAQ,eAAeA,GAAU,oBAAoB,EACrD,QAAQ,eAAeA,GAAU,oBAAoB,EACrD,QAAQ,eAAeA,GAAU,kBAAkB,EACnD,QAAQ,eAAeA,GAAU,kBAAkB,EAEnDtB,GAAUsB,GAAUgC,EAAgB,EAEpC,OAAO,iBAAiBhC,GAAS,UAAW,CAC1C,KAAMhB,GACN,IAAKA,GACL,OAAQA,GACR,GAAIA,GACJ,WAAYA,GACZ,WAAYA,GACZ,QAASA,GACT,MAAOA,GACP,KAAMA,GACN,SAAUA,GACV,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,WACP,aAAc,EAChB,CACF,CAAC,EAED,OAAO,iBAAiBgB,GAAU,CAChC,KAAMhB,GACN,SAAUA,GACV,MAAOA,EACT,CAAC,EAGD,SAASuC,GAAeI,EAAU,CAMhC,GAAIA,EAAS,iBACX,OAAOO,GACLX,GAAcI,EAAS,gBAAgB,EACvCA,EAAS,IACX,EAIF,IAAMQ,EAAcxB,GAAa,CAAE,GAAGgB,EAAU,KAAM,IAAK,CAAC,EAI5D,OAAIA,EAAS,MAAQ,OACnBQ,EAAY,KAAO1D,GAAU0D,EAAaR,EAAS,IAAI,GAIlDQ,CACT,CAEA,SAASxB,GAAcJ,EAAM,CAC3B,MAAO,CACL,QAAS,GACT,eAAgB,GAChB,kBAAmB,GACnB,2BAA4B,GAC5B,KAAM,UACN,OAAQ,IACR,WAAY,KACZ,WAAY,GACZ,WAAY,GACZ,GAAGA,EACH,YAAaA,GAAM,YACf,IAAIpC,GAAYoC,GAAM,WAAW,EACjC,IAAIpC,GACR,QAASoC,GAAM,QAAU,CAAC,GAAGA,EAAK,OAAO,EAAI,CAAC,CAChD,CACF,CAEA,SAASF,GAAkB+B,EAAQ,CACjC,IAAMC,EAAUhD,GAAY+C,CAAM,EAClC,OAAOzB,GAAa,CAClB,KAAM,QACN,OAAQ,EACR,MAAO0B,EACHD,EACA,IAAI,MAAMA,GAAS,OAAOA,CAAM,CAAU,EAC9C,QAASA,GAAUA,EAAO,OAAS,YACrC,CAAC,CACH,CAGA,SAASE,GAAgBX,EAAU,CACjC,OAEEA,EAAS,OAAS,SAElBA,EAAS,SAAW,CAExB,CAEA,SAASY,GAAsBZ,EAAUa,EAAO,CAC9C,OAAAA,EAAQ,CACN,iBAAkBb,EAClB,GAAGa,CACL,EAEO,IAAI,MAAMb,EAAU,CACzB,IAAKc,EAAQC,EAAG,CACd,OAAOA,KAAKF,EAAQA,EAAME,CAAC,EAAID,EAAOC,CAAC,CACzC,EACA,IAAKD,EAAQC,EAAGzB,EAAO,CACrB,OAAApB,GAAO,EAAE6C,KAAKF,EAAM,EACpBC,EAAOC,CAAC,EAAIzB,EACL,EACT,CACF,CAAC,CACH,CAGA,SAASiB,GAAgBP,EAAUP,EAAM,CAGvC,GAAIA,IAAS,QAMX,OAAOmB,GAAqBZ,EAAU,CACpC,KAAM,QACN,YAAaA,EAAS,WACxB,CAAC,EACI,GAAIP,IAAS,OAOlB,OAAOmB,GAAqBZ,EAAU,CACpC,KAAM,OACN,YAAaA,EAAS,WACxB,CAAC,EACI,GAAIP,IAAS,SAKlB,OAAOmB,GAAqBZ,EAAU,CACpC,KAAM,SACN,QAAS,OAAO,OAAO,CAAC,CAAC,EACzB,OAAQ,EACR,WAAY,GACZ,KAAM,IACR,CAAC,EACI,GAAIP,IAAS,iBAKlB,OAAOmB,GAAqBZ,EAAU,CACpC,KAAM,iBACN,OAAQ,EACR,WAAY,GACZ,YAAa,CAAC,EACd,KAAM,IACR,CAAC,EAED9B,GAAO,EAAK,CAEhB,CAGA,SAAS8C,GAA6BC,EAAa5B,EAAM,KAAM,CAE7D,OAAAnB,GAAOX,GAAY0D,CAAW,CAAC,EAIxBzD,GAAUyD,CAAW,EACxBvC,GAAiB,OAAO,OAAO,IAAI,aAAa,6BAA8B,YAAY,EAAG,CAAE,MAAOW,CAAI,CAAC,CAAC,EAC5GX,GAAiB,OAAO,OAAO,IAAI,aAAa,wBAAwB,EAAG,CAAE,MAAOW,CAAI,CAAC,CAAC,CAChG,CAGA,SAASJ,GAAoBe,EAAUpB,EAAME,EAAM,CAGjD,GAAIF,EAAK,SAAW,OAASA,EAAK,OAAS,KAAOA,EAAK,OAAS,KAC9D,MAAM,IAAI,WAAW,+DAA+D,EAKtF,GAAI,eAAgBA,GAAQA,EAAK,YAAc,MAGzC,CAACtB,GAAoB,OAAOsB,EAAK,UAAU,CAAC,EAC9C,MAAM,IAAI,UAAU,oBAAoB,EAoB5C,GAfI,WAAYA,GAAQA,EAAK,QAAU,OACrCyB,GAAiBL,CAAQ,EAAE,OAASpB,EAAK,QAIvC,eAAgBA,GAAQA,EAAK,YAAc,OAC7CyB,GAAiBL,CAAQ,EAAE,WAAapB,EAAK,YAI3C,YAAaA,GAAQA,EAAK,SAAW,MACvCnC,GAAK0D,GAAmBH,CAAQ,EAAGpB,EAAK,OAAO,EAI7CE,EAAM,CAER,GAAIhB,GAAe,SAASkC,EAAS,MAAM,EACzC,MAAMjC,EAAO,OAAO,UAAU,CAC5B,OAAQ,uBACR,QAAS,gCAAgCiC,EAAS,MAAM,EAC1D,CAAC,EAIHK,GAAiBL,CAAQ,EAAE,KAAOlB,EAAK,KAInCA,EAAK,MAAQ,MAAQ,CAACuB,GAAiBL,CAAQ,EAAE,YAAY,SAAS,eAAgB,EAAI,GAC5FK,GAAiBL,CAAQ,EAAE,YAAY,OAAO,eAAgBlB,EAAK,KAAM,EAAI,CAEjF,CACF,CAQA,SAASL,GAAmByC,EAAeC,EAAO,CAChD,IAAMnB,EAAW,IAAI3B,GAASJ,EAAU,EACxCqC,GAAiBN,EAAUkB,CAAa,EACxC,IAAME,EAAU,IAAI7E,GAAQ0B,EAAU,EACtC,OAAAmC,GAAmBJ,EAAUoB,CAAO,EACpCxE,GAAewE,EAASF,EAAc,WAAW,EACjDvE,GAAgByE,EAASD,CAAK,EAE1BnE,IAA2BkE,EAAc,MAAM,QAMjDjE,GAAe,SAAS+C,EAAU,IAAI,QAAQkB,EAAc,KAAK,MAAM,CAAC,EAGnElB,CACT,CAGAjC,EAAO,WAAW,uBAAyB,SAAUsD,EAAGC,EAAQC,EAAM,CACpE,OAAI,OAAOF,GAAM,SACRtD,EAAO,WAAW,UAAUsD,EAAGC,EAAQC,CAAI,EAGhDxD,EAAO,GAAG,KAAKsD,CAAC,GAIhB,YAAY,OAAOA,CAAC,GAAKlD,GAAM,cAAckD,CAAC,GAI9CtD,EAAO,GAAG,SAASsD,CAAC,GAIpBtD,EAAO,GAAG,gBAAgBsD,CAAC,EACtBA,EAGFtD,EAAO,WAAW,UAAUsD,EAAGC,EAAQC,CAAI,CACpD,EAGAxD,EAAO,WAAW,SAAW,SAAUsD,EAAGC,EAAQE,EAAU,CAO1D,OANIzD,EAAO,GAAG,eAAesD,CAAC,GAM1BA,IAAI,OAAO,aAAa,EACnBA,EAGFtD,EAAO,WAAW,uBAAuBsD,EAAGC,EAAQE,CAAQ,CACrE,EAEAzD,EAAO,WAAW,aAAeA,EAAO,oBAAoB,CAC1D,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,gBAAgB,EAC7C,aAAc,IAAM,GACtB,EACA,CACE,IAAK,aACL,UAAWA,EAAO,WAAW,WAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,UACL,UAAWA,EAAO,WAAW,WAC/B,CACF,CAAC,EAEDA,EAAO,GAAG,SAAWA,EAAO,KAAK,kBAAkBM,EAAQ,EAE3D/B,GAAO,QAAU,CACf,eAAAqE,GACA,iBAAAjC,GACA,aAAAM,GACA,4BAAAgC,GACA,eAAAT,GACA,SAAAlC,GACA,cAAAuB,GACA,kBAAAnB,GACA,iBAAA4B,EACF,IC3nBA,IAAAoB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,WAAAC,GAAY,MAAAC,EAAM,EAAI,KAExBC,GAAN,KAAoB,CAClB,YAAaC,EAAO,CAClB,KAAK,MAAQA,CACf,CAEA,OAAS,CACP,OAAO,KAAK,MAAMH,EAAU,IAAM,GAAK,KAAK,MAAMC,EAAK,IAAM,EACzD,OACA,KAAK,KACX,CACF,EAEMG,GAAN,KAAsB,CACpB,YAAaC,EAAW,CACtB,KAAK,UAAYA,CACnB,CAEA,SAAUC,EAAYC,EAAK,CACrBD,EAAW,IACbA,EAAW,GAAG,aAAc,IAAM,CAC5BA,EAAWN,EAAU,IAAM,GAAKM,EAAWL,EAAK,IAAM,GACxD,KAAK,UAAUM,CAAG,CAEtB,CAAC,CAEL,CAEA,WAAYA,EAAK,CAAC,CACpB,EAEAR,GAAO,QAAU,UAAY,CAG3B,OAAI,QAAQ,IAAI,kBAAoB,QAAQ,QAAQ,WAAW,KAAK,GAClE,QAAQ,UAAU,sDAAsD,EACjE,CACL,QAASG,GACT,qBAAsBE,EACxB,GAEK,CAAE,QAAS,oBAAqB,CACzC,IC7CA,IAAAI,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,GAAM,CAAE,YAAAC,GAAa,UAAAC,GAAW,UAAAC,GAAW,aAAAC,EAAa,EAAI,KACtD,CAAE,QAAAC,GAAS,KAAMC,GAAa,YAAAC,GAAa,gBAAAC,GAAiB,gBAAAC,GAAiB,eAAAC,GAAgB,eAAAC,EAAe,EAAI,KAChH,CAAE,qBAAAC,EAAqB,EAAI,KAAgC,EAC3DC,GAAO,IACPC,GAAW,EAAQ,WAAW,EAC9B,CACJ,iBAAAC,GACA,WAAAC,GACA,0BAAAC,EACF,EAAI,KACE,CACJ,oBAAAC,GACA,yBAAAC,GACA,eAAAC,GACA,gBAAAC,GACA,YAAAC,GACA,mBAAAC,GACA,aAAAC,GACA,cAAAC,EACF,EAAI,KACE,CAAE,oBAAAC,GAAqB,4BAAAC,GAA6B,wBAAAC,EAAwB,EAAIf,GAChF,CAAE,OAAAgB,CAAO,EAAI,KACb,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,WAAAC,EAAW,EAAI,KACjBC,GAAS,EAAQ,aAAa,EAC9B,CAAE,gBAAAC,GAAiB,gBAAAC,GAAiB,oBAAAC,EAAoB,EAAI,EAAQ,aAAa,EAEjFC,GAAmB,OAAO,iBAAiB,EAE3CC,GAAmB,IAAIzB,GAAqB,CAAC,CAAE,OAAA0B,EAAQ,MAAAC,CAAM,IAAM,CACvED,EAAO,oBAAoB,QAASC,CAAK,CAC3C,CAAC,EAEKC,GAAyB,IAAI,QAE/BC,GAEJ,GAAI,CACFA,GAAwCR,GAAgB,IAAI,gBAAgB,EAAE,MAAM,EAAI,CAC1F,MAAQ,CACNQ,GAAwC,EAC1C,CAEA,SAASC,GAAYC,EAAO,CAC1B,OAAOJ,EAEP,SAASA,GAAS,CAChB,IAAMK,EAAKD,EAAM,MAAM,EACvB,GAAIC,IAAO,OAAW,CAOpBP,GAAiB,WAAWE,CAAK,EAIjC,KAAK,oBAAoB,QAASA,CAAK,EAEvCK,EAAG,MAAM,KAAK,MAAM,EAEpB,IAAMC,EAAiBL,GAAuB,IAAII,EAAG,MAAM,EAE3D,GAAIC,IAAmB,OAAW,CAChC,GAAIA,EAAe,OAAS,EAAG,CAC7B,QAAWC,KAAOD,EAAgB,CAChC,IAAME,EAAOD,EAAI,MAAM,EACnBC,IAAS,QACXA,EAAK,MAAM,KAAK,MAAM,CAE1B,CACAF,EAAe,MAAM,CACvB,CACAL,GAAuB,OAAOI,EAAG,MAAM,CACzC,CACF,CACF,CACF,CAEA,IAAII,GAAqB,GAGnBC,GAAN,MAAMC,CAAQ,CAEZC,GAGAC,GAGAC,GAEAC,GAGA,YAAaC,EAAOC,EAAO,OAAW,CAGpC,GAFA3B,EAAO,KAAK,kBAAkB,IAAI,EAE9B0B,IAAUxB,GACZ,OAGF,IAAM0B,EAAS,sBACf5B,EAAO,oBAAoB,UAAW,EAAG4B,CAAM,EAE/CF,EAAQ1B,EAAO,WAAW,YAAY0B,EAAOE,EAAQ,OAAO,EAC5DD,EAAO3B,EAAO,WAAW,YAAY2B,EAAMC,EAAQ,MAAM,EAGzD,IAAIC,EAAU,KAGVC,EAAe,KAGbC,EAAU3C,GAA0B,eAAe,QAGrDqB,EAAS,KAGb,GAAI,OAAOiB,GAAU,SAAU,CAC7B,KAAKH,GAAcI,EAAK,WAIxB,IAAIK,EACJ,GAAI,CACFA,EAAY,IAAI,IAAIN,EAAOK,CAAO,CACpC,OAASE,EAAK,CACZ,MAAM,IAAI,UAAU,4BAA8BP,EAAO,CAAE,MAAOO,CAAI,CAAC,CACzE,CAGA,GAAID,EAAU,UAAYA,EAAU,SAClC,MAAM,IAAI,UACR,uEACEN,CACJ,EAIFG,EAAUK,GAAY,CAAE,QAAS,CAACF,CAAS,CAAE,CAAC,EAG9CF,EAAe,MACjB,MAIE3B,GAAOH,EAAO,GAAG,QAAQ0B,CAAK,CAAC,EAG/BG,EAAUH,EAAMD,GAGhBhB,EAASiB,EAAMJ,GAEf,KAAKC,GAAcI,EAAK,YAAcD,EAAMH,GAI9C,IAAMY,EAAS/C,GAA0B,eAAe,OAGpDgD,EAAS,SAYb,GAPEP,EAAQ,QAAQ,aAAa,OAAS,6BACtC1C,GAAW0C,EAAQ,OAAQM,CAAM,IAEjCC,EAASP,EAAQ,QAIfF,EAAK,QAAU,KACjB,MAAM,IAAI,UAAU,oBAAoBS,CAAM,gBAAgB,EAI5D,WAAYT,IACdS,EAAS,aAIXP,EAAUK,GAAY,CAIpB,OAAQL,EAAQ,OAGhB,YAAaA,EAAQ,YAErB,cAAeA,EAAQ,cAEvB,OAAQzC,GAA0B,eAElC,OAAAgD,EAEA,SAAUP,EAAQ,SAIlB,OAAQA,EAAQ,OAEhB,SAAUA,EAAQ,SAElB,eAAgBA,EAAQ,eAExB,KAAMA,EAAQ,KAEd,YAAaA,EAAQ,YAErB,MAAOA,EAAQ,MAEf,SAAUA,EAAQ,SAElB,UAAWA,EAAQ,UAEnB,UAAWA,EAAQ,UAEnB,iBAAkBA,EAAQ,iBAE1B,kBAAmBA,EAAQ,kBAE3B,QAAS,CAAC,GAAGA,EAAQ,OAAO,CAC9B,CAAC,EAED,IAAMQ,EAAa,OAAO,KAAKV,CAAI,EAAE,SAAW,EAgChD,GA7BIU,IAEER,EAAQ,OAAS,aACnBA,EAAQ,KAAO,eAIjBA,EAAQ,iBAAmB,GAG3BA,EAAQ,kBAAoB,GAG5BA,EAAQ,OAAS,SAGjBA,EAAQ,SAAW,SAGnBA,EAAQ,eAAiB,GAGzBA,EAAQ,IAAMA,EAAQ,QAAQA,EAAQ,QAAQ,OAAS,CAAC,EAGxDA,EAAQ,QAAU,CAACA,EAAQ,GAAG,GAI5BF,EAAK,WAAa,OAAW,CAE/B,IAAMW,EAAWX,EAAK,SAGtB,GAAIW,IAAa,GACfT,EAAQ,SAAW,kBACd,CAIL,IAAIU,EACJ,GAAI,CACFA,EAAiB,IAAI,IAAID,EAAUP,CAAO,CAC5C,OAASE,EAAK,CACZ,MAAM,IAAI,UAAU,aAAaK,CAAQ,wBAAyB,CAAE,MAAOL,CAAI,CAAC,CAClF,CAOGM,EAAe,WAAa,UAAYA,EAAe,WAAa,UACpEJ,GAAU,CAAChD,GAAWoD,EAAgBnD,GAA0B,eAAe,OAAO,EAEvFyC,EAAQ,SAAW,SAGnBA,EAAQ,SAAWU,CAEvB,CACF,CAIIZ,EAAK,iBAAmB,SAC1BE,EAAQ,eAAiBF,EAAK,gBAIhC,IAAIa,EAQJ,GAPIb,EAAK,OAAS,OAChBa,EAAOb,EAAK,KAEZa,EAAOV,EAILU,IAAS,WACX,MAAMxC,EAAO,OAAO,UAAU,CAC5B,OAAQ,sBACR,QAAS,gCACX,CAAC,EAqBH,GAjBIwC,GAAQ,OACVX,EAAQ,KAAOW,GAKbb,EAAK,cAAgB,SACvBE,EAAQ,YAAcF,EAAK,aAIzBA,EAAK,QAAU,SACjBE,EAAQ,MAAQF,EAAK,OAKnBE,EAAQ,QAAU,kBAAoBA,EAAQ,OAAS,cACzD,MAAM,IAAI,UACR,0DACF,EAmBF,GAfIF,EAAK,WAAa,SACpBE,EAAQ,SAAWF,EAAK,UAItBA,EAAK,WAAa,OACpBE,EAAQ,UAAY,OAAOF,EAAK,SAAS,GAIvCA,EAAK,YAAc,SACrBE,EAAQ,UAAY,EAAQF,EAAK,WAI/BA,EAAK,SAAW,OAAW,CAE7B,IAAIc,EAASd,EAAK,OAEZe,EAAkB3C,GAAwB0C,CAAM,EAEtD,GAAIC,IAAoB,OAEtBb,EAAQ,OAASa,MACZ,CAGL,GAAI,CAACxD,GAAiBuD,CAAM,EAC1B,MAAM,IAAI,UAAU,IAAIA,CAAM,+BAA+B,EAG/D,IAAME,EAAYF,EAAO,YAAY,EAErC,GAAIpD,GAAoB,IAAIsD,CAAS,EACnC,MAAM,IAAI,UAAU,IAAIF,CAAM,+BAA+B,EAM/DA,EAAS3C,GAA4B6C,CAAS,GAAKF,EAGnDZ,EAAQ,OAASY,CACnB,CAEI,CAACtB,IAAsBU,EAAQ,SAAW,UAC5C,QAAQ,YAAY,kHAAmH,CACrI,KAAM,oBACR,CAAC,EAEDV,GAAqB,GAEzB,CAGIQ,EAAK,SAAW,SAClBlB,EAASkB,EAAK,QAIhB,KAAKF,GAASI,EAMd,IAAMd,EAAK,IAAI,gBAIf,GAHA,KAAKO,GAAUP,EAAG,OAGdN,GAAU,KACZ,GAAIA,EAAO,QACTM,EAAG,MAAMN,EAAO,MAAM,MACjB,CAKL,KAAKF,EAAgB,EAAIQ,EAEzB,IAAMD,EAAQ,IAAI,QAAQC,CAAE,EACtBL,EAAQG,GAAWC,CAAK,EAG1BF,IAAyCR,GAAgBK,CAAM,IAAMH,IACvED,GAAgB,KAAMI,CAAM,EAG9BzB,GAAK,iBAAiByB,EAAQC,CAAK,EAKnCF,GAAiB,SAASO,EAAI,CAAE,OAAAN,EAAQ,MAAAC,CAAM,EAAGA,CAAK,CACxD,CAWF,GALA,KAAKc,GAAW,IAAIhD,GAAQ0B,EAAU,EACtCrB,GAAe,KAAK2C,GAAUK,EAAQ,WAAW,EACjDlD,GAAgB,KAAK6C,GAAU,SAAS,EAGpCgB,IAAS,UAAW,CAGtB,GAAI,CAAClD,GAAyB,IAAIuC,EAAQ,MAAM,EAC9C,MAAM,IAAI,UACR,IAAIA,EAAQ,MAAM,kCACpB,EAIFlD,GAAgB,KAAK6C,GAAU,iBAAiB,CAClD,CAGA,GAAIa,EAAY,CAEd,IAAMO,EAAc9D,GAAe,KAAK0C,EAAQ,EAI1CqB,EAAUlB,EAAK,UAAY,OAAYA,EAAK,QAAU,IAAIjD,GAAYkE,CAAW,EAOvF,GAJAA,EAAY,MAAM,EAIdC,aAAmBnE,GAAa,CAClC,OAAW,CAAE,KAAAoE,EAAM,MAAAC,CAAM,IAAKF,EAAQ,UAAU,EAC9CD,EAAY,OAAOE,EAAMC,EAAO,EAAK,EAGvCH,EAAY,QAAUC,EAAQ,OAChC,MAEEpE,GAAY,KAAK+C,GAAUqB,CAAO,CAEtC,CAIA,IAAMG,EAAYhD,EAAO,GAAG,QAAQ0B,CAAK,EAAIA,EAAMD,GAAO,KAAO,KAKjE,IACGE,EAAK,MAAQ,MAAQqB,GAAa,QAClCnB,EAAQ,SAAW,OAASA,EAAQ,SAAW,QAEhD,MAAM,IAAI,UAAU,gDAAgD,EAItE,IAAIoB,EAAW,KAGf,GAAItB,EAAK,MAAQ,KAAM,CAIrB,GAAM,CAACuB,EAAeC,CAAW,EAAI/E,GACnCuD,EAAK,KACLE,EAAQ,SACV,EACAoB,EAAWC,EAKPC,GAAe,CAACrE,GAAe,KAAK0C,EAAQ,EAAE,SAAS,eAAgB,EAAI,GAC7E,KAAKA,GAAS,OAAO,eAAgB2B,EAAa,EAAI,CAE1D,CAIA,IAAMC,EAAkBH,GAAYD,EAIpC,GAAII,GAAmB,MAAQA,EAAgB,QAAU,KAAM,CAG7D,GAAIH,GAAY,MAAQtB,EAAK,QAAU,KACrC,MAAM,IAAI,UAAU,6DAA6D,EAKnF,GAAIE,EAAQ,OAAS,eAAiBA,EAAQ,OAAS,OACrD,MAAM,IAAI,UACR,gFACF,EAIFA,EAAQ,qBAAuB,EACjC,CAGA,IAAIwB,EAAYD,EAGhB,GAAIH,GAAY,MAAQD,GAAa,KAAM,CAEzC,GAAIzE,GAAamD,EAAMD,EAAM,EAC3B,MAAM,IAAI,UACR,8EACF,EAKF,IAAM6B,EAAoB,IAAI,gBAC9BN,EAAU,OAAO,YAAYM,CAAiB,EAC9CD,EAAY,CACV,OAAQL,EAAU,OAClB,OAAQA,EAAU,OAClB,OAAQM,EAAkB,QAC5B,CACF,CAGA,KAAK7B,GAAO,KAAO4B,CACrB,CAGA,IAAI,QAAU,CACZ,OAAArD,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,MACrB,CAGA,IAAI,KAAO,CACT,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxBpB,GAAc,KAAKwB,GAAO,GAAG,CACtC,CAKA,IAAI,SAAW,CACb,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKG,EACd,CAIA,IAAI,aAAe,CACjB,OAAAxB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,WACrB,CAOA,IAAI,UAAY,CAKd,OAJAzB,EAAO,WAAW,KAAMqB,CAAO,EAI3B,KAAKI,GAAO,WAAa,cACpB,GAKL,KAAKA,GAAO,WAAa,SACpB,eAIF,KAAKA,GAAO,SAAS,SAAS,CACvC,CAKA,IAAI,gBAAkB,CACpB,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,cACrB,CAKA,IAAI,MAAQ,CACV,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,IACrB,CAKA,IAAI,aAAe,CACjB,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,WACrB,CAKA,IAAI,OAAS,CACX,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,KACrB,CAMA,IAAI,UAAY,CACd,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,QACrB,CAKA,IAAI,WAAa,CACf,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAIxB,KAAKI,GAAO,SACrB,CAIA,IAAI,WAAa,CACf,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKI,GAAO,SACrB,CAIA,IAAI,oBAAsB,CACxB,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAIxB,KAAKI,GAAO,gBACrB,CAIA,IAAI,qBAAuB,CACzB,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAIxB,KAAKI,GAAO,iBACrB,CAKA,IAAI,QAAU,CACZ,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAGxB,KAAKC,EACd,CAEA,IAAI,MAAQ,CACV,OAAAtB,EAAO,WAAW,KAAMqB,CAAO,EAExB,KAAKI,GAAO,KAAO,KAAKA,GAAO,KAAK,OAAS,IACtD,CAEA,IAAI,UAAY,CACd,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAExB,CAAC,CAAC,KAAKI,GAAO,MAAQzC,GAAK,YAAY,KAAKyC,GAAO,KAAK,MAAM,CACvE,CAEA,IAAI,QAAU,CACZ,OAAAzB,EAAO,WAAW,KAAMqB,CAAO,EAExB,MACT,CAGA,OAAS,CAIP,GAHArB,EAAO,WAAW,KAAMqB,CAAO,EAG3B9C,GAAa,KAAKkD,EAAM,EAC1B,MAAM,IAAI,UAAU,UAAU,EAIhC,IAAM8B,EAAgBC,GAAa,KAAK/B,EAAM,EAKxCV,EAAK,IAAI,gBACf,GAAI,KAAK,OAAO,QACdA,EAAG,MAAM,KAAK,OAAO,MAAM,MACtB,CACL,IAAI0C,EAAO9C,GAAuB,IAAI,KAAK,MAAM,EAC7C8C,IAAS,SACXA,EAAO,IAAI,IACX9C,GAAuB,IAAI,KAAK,OAAQ8C,CAAI,GAE9C,IAAM3C,EAAQ,IAAI,QAAQC,CAAE,EAC5B0C,EAAK,IAAI3C,CAAK,EACd9B,GAAK,iBACH+B,EAAG,OACHF,GAAWC,CAAK,CAClB,CACF,CAGA,OAAO4C,GAAiBH,EAAe,KAAKhC,GAAaR,EAAG,OAAQnC,GAAgB,KAAK4C,EAAQ,CAAC,CACpG,CAEA,CAACvC,GAAS,QAAQ,MAAM,EAAG0E,EAAOC,EAAS,CACrCA,EAAQ,QAAU,OACpBA,EAAQ,MAAQ,GAGlBA,EAAQ,SAAW,GAEnB,IAAMC,EAAa,CACjB,OAAQ,KAAK,OACb,IAAK,KAAK,IACV,QAAS,KAAK,QACd,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,eAAgB,KAAK,eACrB,KAAM,KAAK,KACX,YAAa,KAAK,YAClB,MAAO,KAAK,MACZ,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,UAAW,KAAK,UAChB,mBAAoB,KAAK,mBACzB,oBAAqB,KAAK,oBAC1B,OAAQ,KAAK,MACf,EAEA,MAAO,WAAW5E,GAAS,kBAAkB2E,EAASC,CAAU,CAAC,EACnE,CAMA,OAAO,iBAAkBhC,EAASiC,EAAW,CAC3C,OAAAjC,EAAQP,GAAUwC,EACXjC,CACT,CAKA,OAAO,qBAAsBA,EAAS,CACpC,OAAOA,EAAQN,EACjB,CAMA,OAAO,qBAAsBM,EAASkC,EAAe,CACnDlC,EAAQN,GAAcwC,CACxB,CAMA,OAAO,kBAAmBlC,EAASmC,EAAY,CAC7CnC,EAAQL,GAAWwC,CACrB,CAKA,OAAO,gBAAiBnC,EAAS,CAC/B,OAAOA,EAAQJ,EACjB,CAMA,OAAO,gBAAiBI,EAASoC,EAAU,CACzCpC,EAAQJ,GAASwC,CACnB,CACF,EAEM,CAAE,iBAAAC,GAAkB,qBAAAC,GAAsB,qBAAAC,GAAsB,kBAAAC,GAAmB,gBAAAC,GAAiB,gBAAAC,EAAgB,EAAInD,GAC9H,QAAQ,eAAeA,GAAS,kBAAkB,EAClD,QAAQ,eAAeA,GAAS,sBAAsB,EACtD,QAAQ,eAAeA,GAAS,sBAAsB,EACtD,QAAQ,eAAeA,GAAS,mBAAmB,EACnD,QAAQ,eAAeA,GAAS,iBAAiB,EACjD,QAAQ,eAAeA,GAAS,iBAAiB,EAEjD/C,GAAU+C,GAASkD,EAAe,EAGlC,SAASpC,GAAaP,EAAM,CAC1B,MAAO,CACL,OAAQA,EAAK,QAAU,MACvB,cAAeA,EAAK,eAAiB,GACrC,cAAeA,EAAK,eAAiB,GACrC,KAAMA,EAAK,MAAQ,KACnB,OAAQA,EAAK,QAAU,KACvB,eAAgBA,EAAK,gBAAkB,KACvC,iBAAkBA,EAAK,kBAAoB,GAC3C,OAAQA,EAAK,QAAU,SACvB,UAAWA,EAAK,WAAa,GAC7B,eAAgBA,EAAK,gBAAkB,MACvC,UAAWA,EAAK,WAAa,GAC7B,YAAaA,EAAK,aAAe,GACjC,SAAUA,EAAK,UAAY,KAC3B,OAAQA,EAAK,QAAU,SACvB,gBAAiBA,EAAK,iBAAmB,SACzC,SAAUA,EAAK,UAAY,SAC3B,eAAgBA,EAAK,gBAAkB,GACvC,KAAMA,EAAK,MAAQ,UACnB,qBAAsBA,EAAK,sBAAwB,GACnD,YAAaA,EAAK,aAAe,cACjC,eAAgBA,EAAK,gBAAkB,GACvC,MAAOA,EAAK,OAAS,UACrB,SAAUA,EAAK,UAAY,SAC3B,UAAWA,EAAK,WAAa,GAC7B,4BAA6BA,EAAK,6BAA+B,GACjE,eAAgBA,EAAK,gBAAkB,GACvC,iBAAkBA,EAAK,kBAAoB,GAC3C,kBAAmBA,EAAK,mBAAqB,GAC7C,eAAgBA,EAAK,gBAAkB,GACvC,cAAeA,EAAK,eAAiB,GACrC,cAAeA,EAAK,eAAiB,EACrC,iBAAkBA,EAAK,kBAAoB,QAC3C,6CAA8CA,EAAK,8CAAgD,GACnG,KAAMA,EAAK,MAAQ,GACnB,kBAAmBA,EAAK,mBAAqB,GAC7C,QAASA,EAAK,QACd,IAAKA,EAAK,QAAQ,CAAC,EACnB,YAAaA,EAAK,YACd,IAAIjD,GAAYiD,EAAK,WAAW,EAChC,IAAIjD,EACV,CACF,CAGA,SAAS8E,GAAc3B,EAAS,CAI9B,IAAM2C,EAAatC,GAAY,CAAE,GAAGL,EAAS,KAAM,IAAK,CAAC,EAIzD,OAAIA,EAAQ,MAAQ,OAClB2C,EAAW,KAAOlG,GAAUkG,EAAY3C,EAAQ,IAAI,GAI/C2C,CACT,CAUA,SAASd,GAAkBe,EAAcC,EAAYjE,EAAQkE,EAAO,CAClE,IAAM9C,EAAU,IAAIT,GAAQlB,EAAU,EACtCqE,GAAgB1C,EAAS4C,CAAY,EACrCL,GAAqBvC,EAAS6C,CAAU,EACxCR,GAAiBrC,EAASpB,CAAM,EAChC,IAAMoC,EAAU,IAAIrE,GAAQ0B,EAAU,EACtC,OAAAmE,GAAkBxC,EAASgB,CAAO,EAClChE,GAAegE,EAAS4B,EAAa,WAAW,EAChD9F,GAAgBkE,EAAS8B,CAAK,EACvB9C,CACT,CAEA,OAAO,iBAAiBT,GAAQ,UAAW,CACzC,OAAQvB,GACR,IAAKA,GACL,QAASA,GACT,SAAUA,GACV,MAAOA,GACP,OAAQA,GACR,OAAQA,GACR,YAAaA,GACb,KAAMA,GACN,SAAUA,GACV,oBAAqBA,GACrB,mBAAoBA,GACpB,UAAWA,GACX,UAAWA,GACX,MAAOA,GACP,YAAaA,GACb,UAAWA,GACX,eAAgBA,GAChB,SAAUA,GACV,KAAMA,GACN,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,UACP,aAAc,EAChB,CACF,CAAC,EAEDG,EAAO,GAAG,QAAUA,EAAO,KAAK,kBAAkBoB,EAAO,EAGzDpB,EAAO,WAAW,YAAc,SAAU4E,EAAGhD,EAAQiD,EAAU,CAC7D,OAAI,OAAOD,GAAM,SACR5E,EAAO,WAAW,UAAU4E,CAAC,EAGlC5E,EAAO,GAAG,QAAQ4E,CAAC,EACdA,EAGF5E,EAAO,WAAW,UAAU4E,CAAC,CACtC,EAGA5E,EAAO,WAAW,YAAcA,EAAO,oBAAoB,CACzD,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,UAC/B,EACA,CACE,IAAK,UACL,UAAWA,EAAO,WAAW,WAC/B,EACA,CACE,IAAK,OACL,UAAWA,EAAO,kBAChBA,EAAO,WAAW,QACpB,CACF,EACA,CACE,IAAK,WACL,UAAWA,EAAO,WAAW,SAC/B,EACA,CACE,IAAK,iBACL,UAAWA,EAAO,WAAW,UAE7B,cAAeT,EACjB,EACA,CACE,IAAK,OACL,UAAWS,EAAO,WAAW,UAE7B,cAAeP,EACjB,EACA,CACE,IAAK,cACL,UAAWO,EAAO,WAAW,UAE7B,cAAeN,EACjB,EACA,CACE,IAAK,QACL,UAAWM,EAAO,WAAW,UAE7B,cAAeL,EACjB,EACA,CACE,IAAK,WACL,UAAWK,EAAO,WAAW,UAE7B,cAAeR,EACjB,EACA,CACE,IAAK,YACL,UAAWQ,EAAO,WAAW,SAC/B,EACA,CACE,IAAK,YACL,UAAWA,EAAO,WAAW,OAC/B,EACA,CACE,IAAK,SACL,UAAWA,EAAO,kBACfS,GAAWT,EAAO,WAAW,YAC5BS,EACA,cACA,QACF,CACF,CACF,EACA,CACE,IAAK,SACL,UAAWT,EAAO,WAAW,GAC/B,EACA,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,UAC7B,cAAeJ,EACjB,EACA,CACE,IAAK,aACL,UAAWI,EAAO,WAAW,GAC/B,CACF,CAAC,EAED7B,GAAO,QAAU,CACf,QAAAiD,GACA,YAAAc,GACA,iBAAAwB,GACA,aAAAF,GACA,qBAAAW,GACA,gBAAAG,EACF,IC1kCA,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAIA,GAAM,CACJ,iBAAAC,EACA,4BAAAC,GACA,eAAAC,GACA,aAAAC,GACA,kBAAAC,GACA,iBAAAC,EACF,EAAI,KACE,CAAE,YAAAC,EAAY,EAAI,KAClB,CAAE,QAAAC,GAAS,aAAAC,GAAc,qBAAAC,GAAsB,gBAAAC,EAAgB,EAAI,KACnEC,GAAO,EAAQ,WAAW,EAC1B,CACJ,WAAAC,GACA,oBAAAC,GACA,qBAAAC,GACA,eAAAC,GACA,SAAAC,GACA,0BAAAC,GACA,oBAAAC,GACA,kBAAAC,GACA,mCAAAC,GACA,8CAAAC,GACA,uBAAAC,GACA,oBAAAC,GACA,UAAAC,GACA,+BAAAC,GACA,0BAAAC,GACA,2BAAAC,GACA,sBAAAC,GACA,WAAAC,GACA,YAAAC,GACA,UAAAC,GACA,YAAAC,GACA,cAAAC,GACA,oBAAAC,GACA,iBAAAC,GACA,WAAAC,GACA,qBAAAC,GACA,kBAAAC,GACA,oCAAAC,GACA,uBAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,gBAAAC,EACF,EAAI,KACEC,GAAS,EAAQ,aAAa,EAC9B,CAAE,kBAAAC,GAAmB,YAAAC,EAAY,EAAI,KACrC,CACJ,kBAAAC,GACA,eAAAC,GACA,eAAAC,GACA,kBAAAC,GACA,eAAAC,EACF,EAAI,KACEC,GAAK,EAAQ,aAAa,EAC1B,CAAE,SAAAC,GAAU,SAAAC,GAAU,SAAAC,GAAU,UAAAC,GAAW,WAAAC,EAAW,EAAI,EAAQ,aAAa,EAC/E,CAAE,iBAAAC,GAAkB,6BAAAC,EAA6B,EAAI,IACrD,CAAE,iBAAAC,GAAkB,mBAAAC,GAAoB,0BAAAC,EAA0B,EAAI,KACtE,CAAE,oBAAAC,EAAoB,EAAI,KAC1B,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,aAAAC,EAAa,EAAI,EAAQ,WAAW,EACtCC,GAAc,CAAC,MAAO,MAAM,EAE5BC,GAAmB,OAAO,mBAAuB,KAAe,OAAO,iBAAqB,IAC9F,OACA,SAGAC,GAEEC,GAAN,cAAoBjB,EAAG,CACrB,YAAakB,EAAY,CACvB,MAAM,EAEN,KAAK,WAAaA,EAClB,KAAK,WAAa,KAClB,KAAK,KAAO,GACZ,KAAK,MAAQ,SACf,CAEA,UAAWC,EAAQ,CACb,KAAK,QAAU,YAInB,KAAK,MAAQ,aACb,KAAK,YAAY,QAAQA,CAAM,EAC/B,KAAK,KAAK,aAAcA,CAAM,EAChC,CAGA,MAAOC,EAAO,CACR,KAAK,QAAU,YAKnB,KAAK,MAAQ,UAIRA,IACHA,EAAQ,IAAI,aAAa,6BAA8B,YAAY,GAQrE,KAAK,sBAAwBA,EAE7B,KAAK,YAAY,QAAQA,CAAK,EAC9B,KAAK,KAAK,aAAcA,CAAK,EAC/B,CACF,EAEA,SAASC,GAAiBC,EAAU,CAClCC,GAAwBD,EAAU,OAAO,CAC3C,CAGA,SAASE,GAAOC,EAAOC,EAAO,OAAW,CACvCd,GAAO,oBAAoB,UAAW,EAAG,kBAAkB,EAG3D,IAAIe,EAAInD,GAAsB,EAK1BoD,EAEJ,GAAI,CACFA,EAAgB,IAAIzE,GAAQsE,EAAOC,CAAI,CACzC,OAASG,EAAG,CACV,OAAAF,EAAE,OAAOE,CAAC,EACHF,EAAE,OACX,CAGA,IAAMG,EAAUxE,GAAgBsE,CAAa,EAG7C,GAAIA,EAAc,OAAO,QAGvB,OAAAG,GAAWJ,EAAGG,EAAS,KAAMF,EAAc,OAAO,MAAM,EAGjDD,EAAE,QAIUG,EAAQ,OAAO,cAIlB,aAAa,OAAS,6BACtCA,EAAQ,eAAiB,QAI3B,IAAIE,EAAiB,KAKjBC,EAAiB,GAGjBC,EAAa,KAGjB,OAAA5B,GACEsB,EAAc,OACd,IAAM,CAEJK,EAAiB,GAGjBzC,GAAO0C,GAAc,IAAI,EAGzBA,EAAW,MAAMN,EAAc,OAAO,MAAM,EAE5C,IAAMO,EAAeH,GAAgB,MAAM,EAI3CD,GAAWJ,EAAGG,EAASK,EAAcP,EAAc,OAAO,MAAM,CAClE,CACF,EA6CAM,EAAaE,GAAS,CACpB,QAAAN,EACA,yBAA0BT,GAC1B,gBAtCuBC,GAAa,CAEpC,GAAI,CAAAW,EAKJ,IAAIX,EAAS,QAAS,CAQpBS,GAAWJ,EAAGG,EAASE,EAAgBE,EAAW,qBAAqB,EACvE,MACF,CAIA,GAAIZ,EAAS,OAAS,QAAS,CAC7BK,EAAE,OAAO,IAAI,UAAU,eAAgB,CAAE,MAAOL,EAAS,KAAM,CAAC,CAAC,EACjE,MACF,CAIAU,EAAiB,IAAI,QAAQhF,GAAkBsE,EAAU,WAAW,CAAC,EAGrEK,EAAE,QAAQK,EAAe,MAAM,CAAC,EAChCL,EAAI,KACN,EAME,WAAYtE,GAAqBuE,CAAa,CAChD,CAAC,EAGMD,EAAE,OACX,CAGA,SAASJ,GAAyBD,EAAUe,EAAgB,QAAS,CAOnE,GALIf,EAAS,OAAS,SAAWA,EAAS,SAKtC,CAACA,EAAS,SAAS,OACrB,OAIF,IAAMgB,EAAchB,EAAS,QAAQ,CAAC,EAGlCiB,EAAajB,EAAS,WAGtBkB,EAAalB,EAAS,WAGrBrC,GAAqBqD,CAAW,GAKjCC,IAAe,OAKdjB,EAAS,oBAEZiB,EAAarE,GAAuB,CAClC,UAAWqE,EAAW,SACxB,CAAC,EAGDC,EAAa,IAQfD,EAAW,QAAUhE,GAA2B,EAGhD+C,EAAS,WAAaiB,EAItBE,GACEF,EACAD,EAAY,KACZD,EACA,WACAG,CACF,EACF,CAGA,IAAMC,GAAqB,YAAY,mBAGvC,SAASV,GAAYJ,EAAGG,EAASE,EAAgBZ,EAAO,CAoBtD,GAlBIO,GAEFA,EAAE,OAAOP,CAAK,EAKZU,EAAQ,MAAM,QAAU,MAAQzB,GAAWyB,EAAQ,KAAK,MAAM,GAChEA,EAAQ,KAAK,OAAO,OAAOV,CAAK,EAAE,MAAOsB,GAAQ,CAC/C,GAAIA,EAAI,OAAS,oBAIjB,MAAMA,CACR,CAAC,EAICV,GAAkB,KACpB,OAIF,IAAMV,EAAWrE,GAAiB+E,CAAc,EAI5CV,EAAS,MAAM,QAAU,MAAQjB,GAAWiB,EAAS,KAAK,MAAM,GAClEA,EAAS,KAAK,OAAO,OAAOF,CAAK,EAAE,MAAOsB,GAAQ,CAChD,GAAIA,EAAI,OAAS,oBAIjB,MAAMA,CACR,CAAC,CAEL,CAGA,SAASN,GAAU,CACjB,QAAAN,EACA,8BAAAa,EACA,wBAAAC,EACA,gBAAAC,EACA,yBAAAC,EACA,2BAAAC,EACA,iBAAAC,EAAmB,GACnB,WAAA9B,EAAaP,GAAoB,CACnC,EAAG,CAEDnB,GAAO0B,CAAU,EAGjB,IAAI+B,EAAkB,KAGlBC,EAAgC,GAGhCpB,EAAQ,QAAU,OAEpBmB,EAAkBnB,EAAQ,OAAO,aAIjCoB,EACEpB,EAAQ,OAAO,+BAUnB,IAAMqB,EAAc5E,GAA2B2E,CAA6B,EACtEX,EAAarE,GAAuB,CACxC,UAAWiF,CACb,CAAC,EAYKC,EAAc,CAClB,WAAY,IAAInC,GAAMC,CAAU,EAChC,QAAAY,EACA,WAAAS,EACA,8BAAAI,EACA,wBAAAC,EACA,gBAAAC,EACA,2BAAAE,EACA,yBAAAD,EACA,gBAAAG,EACA,8BAAAC,CACF,EAMA,OAAA1D,GAAO,CAACsC,EAAQ,MAAQA,EAAQ,KAAK,MAAM,EAKvCA,EAAQ,SAAW,WAErBA,EAAQ,OACNA,EAAQ,QAAQ,cAAc,aAAa,OAAS,SAChDA,EAAQ,OACR,aAKJA,EAAQ,SAAW,WACrBA,EAAQ,OAASA,EAAQ,OAAO,QAO9BA,EAAQ,kBAAoB,WAG1BA,EAAQ,QAAU,KACpBA,EAAQ,gBAAkBpE,GACxBoE,EAAQ,OAAO,eACjB,EAIAA,EAAQ,gBAAkBrE,GAAoB,GAK7CqE,EAAQ,YAAY,SAAS,SAAU,EAAI,GAiB9CA,EAAQ,YAAY,OAAO,SAfb,MAe8B,EAAI,EAM7CA,EAAQ,YAAY,SAAS,kBAAmB,EAAI,GACvDA,EAAQ,YAAY,OAAO,kBAAmB,IAAK,EAAI,EAMrDA,EAAQ,SAKR/B,GAAe,IAAI+B,EAAQ,WAAW,EAK1CuB,GAAUD,CAAW,EAClB,MAAMV,GAAO,CACZU,EAAY,WAAW,UAAUV,CAAG,CACtC,CAAC,EAGIU,EAAY,UACrB,CAGA,eAAeC,GAAWD,EAAaE,EAAY,GAAO,CAExD,IAAMxB,EAAUsB,EAAY,QAGxB9B,EAAW,KAkDf,GA9CIQ,EAAQ,eAAiB,CAAC9C,GAAWjB,GAAkB+D,CAAO,CAAC,IACjER,EAAW1E,EAAiB,iBAAiB,GAO/CqB,GAA8C6D,CAAO,EAKjDnE,GAAemE,CAAO,IAAM,YAC9BR,EAAW1E,EAAiB,UAAU,GAOpCkF,EAAQ,iBAAmB,KAC7BA,EAAQ,eAAiBA,EAAQ,gBAAgB,gBAK/CA,EAAQ,WAAa,gBACvBA,EAAQ,SAAWxD,GAA0BwD,CAAO,GAkBlDR,IAAa,KAAM,CACrB,IAAMiC,EAAaxF,GAAkB+D,CAAO,EAIzCrD,GAAW8E,EAAYzB,EAAQ,GAAG,GAAKA,EAAQ,mBAAqB,SAEpEyB,EAAW,WAAa,SAExBzB,EAAQ,OAAS,YAAcA,EAAQ,OAAS,aAGjDA,EAAQ,iBAAmB,QAG3BR,EAAW,MAAMkC,GAAYJ,CAAW,GAG/BtB,EAAQ,OAAS,cAE1BR,EAAW1E,EAAiB,sCAAsC,EAGzDkF,EAAQ,OAAS,UAGtBA,EAAQ,WAAa,SACvBR,EAAW1E,EACT,wDACF,GAGAkF,EAAQ,iBAAmB,SAG3BR,EAAW,MAAMkC,GAAYJ,CAAW,GAGhCnE,GAAqBlB,GAAkB+D,CAAO,CAAC,GAmBzDA,EAAQ,iBAAmB,OAG3BR,EAAW,MAAMmC,GAAUL,CAAW,GApBtC9B,EAAW1E,EAAiB,qCAAqC,CAsBrE,CAGA,GAAI0G,EACF,OAAOhC,EAKLA,EAAS,SAAW,GAAK,CAACA,EAAS,mBAEjCQ,EAAQ,iBAeRA,EAAQ,mBAAqB,QAC/BR,EAAWxE,GAAewE,EAAU,OAAO,EAClCQ,EAAQ,mBAAqB,OACtCR,EAAWxE,GAAewE,EAAU,MAAM,EACjCQ,EAAQ,mBAAqB,SACtCR,EAAWxE,GAAewE,EAAU,QAAQ,EAE5C9B,GAAO,EAAK,GAMhB,IAAIkE,EACFpC,EAAS,SAAW,EAAIA,EAAWA,EAAS,iBAkD9C,GA9CIoC,EAAiB,QAAQ,SAAW,GACtCA,EAAiB,QAAQ,KAAK,GAAG5B,EAAQ,OAAO,EAK7CA,EAAQ,oBACXR,EAAS,kBAAoB,IAgB7BA,EAAS,OAAS,UAClBoC,EAAiB,SAAW,KAC5BA,EAAiB,gBACjB,CAAC5B,EAAQ,QAAQ,SAAS,QAAS,EAAI,IAEvCR,EAAWoC,EAAmB9G,EAAiB,GAQ/C0E,EAAS,SAAW,IACnBQ,EAAQ,SAAW,QAClBA,EAAQ,SAAW,WACnBlC,GAAe,SAAS8D,EAAiB,MAAM,KAEjDA,EAAiB,KAAO,KACxBN,EAAY,WAAW,KAAO,IAI5BtB,EAAQ,UAAW,CAGrB,IAAM6B,EAAoBxC,GACxByC,GAAYR,EAAaxG,EAAiBuE,CAAM,CAAC,EAInD,GAAIW,EAAQ,mBAAqB,UAAYR,EAAS,MAAQ,KAAM,CAClEqC,EAAiBrC,EAAS,KAAK,EAC/B,MACF,CAGA,IAAMuC,EAAeC,GAAU,CAG7B,GAAI,CAACtG,GAAWsG,EAAOhC,EAAQ,SAAS,EAAG,CACzC6B,EAAiB,oBAAoB,EACrC,MACF,CAGArC,EAAS,KAAO7B,GAAkBqE,CAAK,EAAE,CAAC,EAG1CF,GAAYR,EAAa9B,CAAQ,CACnC,EAGA,MAAMzC,GAAcyC,EAAS,KAAMuC,EAAaF,CAAgB,CAClE,MAEEC,GAAYR,EAAa9B,CAAQ,CAErC,CAIA,SAASkC,GAAaJ,EAAa,CAKjC,GAAI1E,GAAY0E,CAAW,GAAKA,EAAY,QAAQ,gBAAkB,EACpE,OAAO,QAAQ,QAAQvG,GAA4BuG,CAAW,CAAC,EAIjE,GAAM,CAAE,QAAAtB,CAAQ,EAAIsB,EAEd,CAAE,SAAUW,CAAO,EAAIhG,GAAkB+D,CAAO,EAGtD,OAAQiC,EAAQ,CACd,IAAK,SAMH,OAAO,QAAQ,QAAQnH,EAAiB,+BAA+B,CAAC,EAE1E,IAAK,QAAS,CACPoE,KACHA,GAAmB,EAAQ,aAAa,EAAE,kBAI5C,IAAMgD,EAAejG,GAAkB+D,CAAO,EAI9C,GAAIkC,EAAa,OAAO,SAAW,EACjC,OAAO,QAAQ,QAAQpH,EAAiB,iDAAiD,CAAC,EAG5F,IAAMqH,EAAOjD,GAAiBgD,EAAa,SAAS,CAAC,EAIrD,GAAIlC,EAAQ,SAAW,OAAS,CAAClB,GAAO,GAAG,KAAKqD,CAAI,EAClD,OAAO,QAAQ,QAAQrH,EAAiB,gBAAgB,CAAC,EAO3D,IAAM0E,EAAWvE,GAAa,EAGxBmH,EAAaD,EAAK,KAGlBE,EAAuBpF,GAAiB,GAAGmF,CAAU,EAAE,EAGvDE,EAAOH,EAAK,KAIlB,GAAKnC,EAAQ,YAAY,SAAS,QAAS,EAAI,EAgBxC,CAELR,EAAS,eAAiB,GAG1B,IAAM+C,EAAcvC,EAAQ,YAAY,IAAI,QAAS,EAAI,EAGnDwC,EAAalF,GAAuBiF,EAAa,EAAI,EAG3D,GAAIC,IAAe,UACjB,OAAO,QAAQ,QAAQ1H,EAAiB,8BAA8B,CAAC,EAIzE,GAAI,CAAE,gBAAiB2H,EAAY,cAAeC,CAAS,EAAIF,EAI/D,GAAIC,IAAe,KAEjBA,EAAaL,EAAaM,EAG1BA,EAAWD,EAAaC,EAAW,MAC9B,CAEL,GAAID,GAAcL,EAChB,OAAO,QAAQ,QAAQtH,EAAiB,8CAA+C,CAAC,GAKtF4H,IAAa,MAAQA,GAAYN,KACnCM,EAAWN,EAAa,EAE5B,CAIA,IAAMO,EAAaR,EAAK,MAAMM,EAAYC,EAAUJ,CAAI,EAIlDM,EAAqBhF,GAAY+E,CAAU,EAGjDnD,EAAS,KAAOoD,EAAmB,CAAC,EAGpC,IAAMC,EAAyB5F,GAAiB,GAAG0F,EAAW,IAAI,EAAE,EAI9DG,EAAevF,GAAkBkF,EAAYC,EAAUN,CAAU,EAGvE5C,EAAS,OAAS,IAGlBA,EAAS,WAAa,kBAItBA,EAAS,YAAY,IAAI,iBAAkBqD,EAAwB,EAAI,EACvErD,EAAS,YAAY,IAAI,eAAgB8C,EAAM,EAAI,EACnD9C,EAAS,YAAY,IAAI,gBAAiBsD,EAAc,EAAI,CAC9D,KApFkD,CAKhD,IAAMC,EAAenF,GAAYuE,CAAI,EAGrC3C,EAAS,WAAa,KAGtBA,EAAS,KAAOuD,EAAa,CAAC,EAG9BvD,EAAS,YAAY,IAAI,iBAAkB6C,EAAsB,EAAI,EACrE7C,EAAS,YAAY,IAAI,eAAgB8C,EAAM,EAAI,CACrD,CAuEA,OAAO,QAAQ,QAAQ9C,CAAQ,CACjC,CACA,IAAK,QAAS,CAGZ,IAAMiC,EAAaxF,GAAkB+D,CAAO,EACtCgD,EAAgBtE,GAAiB+C,CAAU,EAIjD,GAAIuB,IAAkB,UACpB,OAAO,QAAQ,QAAQlI,EAAiB,8BAA8B,CAAC,EAIzE,IAAMmI,EAAWtE,GAAmBqE,EAAc,QAAQ,EAK1D,OAAO,QAAQ,QAAQ/H,GAAa,CAClC,WAAY,KACZ,YAAa,CACX,CAAC,eAAgB,CAAE,KAAM,eAAgB,MAAOgI,CAAS,CAAC,CAC5D,EACA,KAAMtF,GAAkBqF,EAAc,IAAI,EAAE,CAAC,CAC/C,CAAC,CAAC,CACJ,CACA,IAAK,QAGH,OAAO,QAAQ,QAAQlI,EAAiB,2BAA2B,CAAC,EAEtE,IAAK,QACL,IAAK,SAGH,OAAO6G,GAAUL,CAAW,EACzB,MAAOV,GAAQ9F,EAAiB8F,CAAG,CAAC,EAEzC,QACE,OAAO,QAAQ,QAAQ9F,EAAiB,gBAAgB,CAAC,CAE7D,CACF,CAGA,SAASoI,GAAkB5B,EAAa9B,EAAU,CAEhD8B,EAAY,QAAQ,KAAO,GAKvBA,EAAY,qBAAuB,MACrC,eAAe,IAAMA,EAAY,oBAAoB9B,CAAQ,CAAC,CAElE,CAGA,SAASsC,GAAaR,EAAa9B,EAAU,CAE3C,IAAIiB,EAAaa,EAAY,WAQvBN,EAA2B,IAAM,CAErC,IAAMmC,EAAgB,KAAK,IAAI,EAI3B7B,EAAY,QAAQ,cAAgB,aACtCA,EAAY,WAAW,eAAiBb,GAI1Ca,EAAY,WAAW,kBAAoB,IAAM,CAE/C,GAAIA,EAAY,QAAQ,IAAI,WAAa,SACvC,OAIFb,EAAW,QAAU0C,EAGrB,IAAIzC,EAAalB,EAAS,WAGpB4D,EAAW5D,EAAS,SAIrBA,EAAS,oBACZiB,EAAarE,GAAuBqE,CAAU,EAE9CC,EAAa,IAIf,IAAI2C,EAAiB,EAGrB,GAAI/B,EAAY,QAAQ,OAAS,aAAe,CAAC9B,EAAS,wBAAyB,CAEjF6D,EAAiB7D,EAAS,OAG1B,IAAMyD,EAAWxF,GAAgB+B,EAAS,WAAW,EAGjDyD,IAAa,YACfG,EAAS,YAAcxE,GAA0BqE,CAAQ,EAE7D,CAKI3B,EAAY,QAAQ,eAAiB,MAEvCX,GAAmBF,EAAYa,EAAY,QAAQ,IAAI,KAAMA,EAAY,QAAQ,cAAe,WAAYZ,EAAY0C,EAAUC,CAAc,CAEpJ,EAGA,IAAMC,EAA+B,IAAM,CAEzChC,EAAY,QAAQ,KAAO,GAIvBA,EAAY,0BAA4B,MAC1C,eAAe,IAAMA,EAAY,yBAAyB9B,CAAQ,CAAC,EAMjE8B,EAAY,QAAQ,eAAiB,MACvCA,EAAY,WAAW,kBAAkB,CAE7C,EAGA,eAAe,IAAMgC,EAA6B,CAAC,CACrD,EAIIhC,EAAY,iBAAmB,MACjC,eAAe,IAAM,CACnBA,EAAY,gBAAgB9B,CAAQ,EACpC8B,EAAY,gBAAkB,IAChC,CAAC,EAIH,IAAMM,EAAmBpC,EAAS,OAAS,QAAUA,EAAYA,EAAS,kBAAoBA,EAI1FoC,EAAiB,MAAQ,KAC3BZ,EAAyB,EAYzB3C,GAASuD,EAAiB,KAAK,OAAQ,IAAM,CAC3CZ,EAAyB,CAC3B,CAAC,CAEL,CAGA,eAAeW,GAAWL,EAAa,CAErC,IAAMtB,EAAUsB,EAAY,QAGxB9B,EAAW,KAGX+D,EAAiB,KAGf9C,EAAaa,EAAY,WAQ/B,GALItB,EAAQ,eAKRR,IAAa,KAAM,CAgBrB,GAVIQ,EAAQ,WAAa,WACvBA,EAAQ,eAAiB,QAK3BuD,EAAiB/D,EAAW,MAAMgE,GAAwBlC,CAAW,EAKnEtB,EAAQ,mBAAqB,QAC7B1D,GAAU0D,EAASR,CAAQ,IAAM,UAEjC,OAAO1E,EAAiB,cAAc,EAKpCgB,GAASkE,EAASR,CAAQ,IAAM,YAClCQ,EAAQ,kBAAoB,GAEhC,CAMA,OACGA,EAAQ,mBAAqB,UAAYR,EAAS,OAAS,WAC5DjD,GACEyD,EAAQ,OACRA,EAAQ,OACRA,EAAQ,YACRuD,CACF,IAAM,UAECzI,EAAiB,SAAS,GAI/B+C,GAAkB,IAAI0F,EAAe,MAAM,IAKzCvD,EAAQ,WAAa,UACvBsB,EAAY,WAAW,WAAW,QAAQ,OAAW,EAAK,EAIxDtB,EAAQ,WAAa,QAEvBR,EAAW1E,EAAiB,qBAAqB,EACxCkF,EAAQ,WAAa,SAM9BR,EAAW+D,EACFvD,EAAQ,WAAa,SAG9BR,EAAW,MAAMiE,GAAkBnC,EAAa9B,CAAQ,EAExD9B,GAAO,EAAK,GAKhB8B,EAAS,WAAaiB,EAGfjB,EACT,CAGA,SAASiE,GAAmBnC,EAAa9B,EAAU,CAEjD,IAAMQ,EAAUsB,EAAY,QAItBiC,EAAiB/D,EAAS,iBAC5BA,EAAS,iBACTA,EAIAkE,EAEJ,GAAI,CAOF,GANAA,EAAc1H,GACZuH,EACAtH,GAAkB+D,CAAO,EAAE,IAC7B,EAGI0D,GAAe,KACjB,OAAOlE,CAEX,OAASoB,EAAK,CAEZ,OAAO,QAAQ,QAAQ9F,EAAiB8F,CAAG,CAAC,CAC9C,CAIA,GAAI,CAACzD,GAAqBuG,CAAW,EACnC,OAAO,QAAQ,QAAQ5I,EAAiB,qCAAqC,CAAC,EAIhF,GAAIkF,EAAQ,gBAAkB,GAC5B,OAAO,QAAQ,QAAQlF,EAAiB,yBAAyB,CAAC,EASpE,GALAkF,EAAQ,eAAiB,EAMvBA,EAAQ,OAAS,SAChB0D,EAAY,UAAYA,EAAY,WACrC,CAAC/G,GAAWqD,EAAS0D,CAAW,EAEhC,OAAO,QAAQ,QAAQ5I,EAAiB,kDAAkD,CAAC,EAK7F,GACEkF,EAAQ,mBAAqB,SAC5B0D,EAAY,UAAYA,EAAY,UAErC,OAAO,QAAQ,QAAQ5I,EACrB,wDACF,CAAC,EAKH,GACEyI,EAAe,SAAW,KAC1BvD,EAAQ,MAAQ,MAChBA,EAAQ,KAAK,QAAU,KAEvB,OAAO,QAAQ,QAAQlF,EAAiB,CAAC,EAM3C,GACG,CAAC,IAAK,GAAG,EAAE,SAASyI,EAAe,MAAM,GAAKvD,EAAQ,SAAW,QACjEuD,EAAe,SAAW,KACzB,CAACvE,GAAY,SAASgB,EAAQ,MAAM,EACtC,CAGAA,EAAQ,OAAS,MACjBA,EAAQ,KAAO,KAIf,QAAW2D,KAAc3F,GACvBgC,EAAQ,YAAY,OAAO2D,CAAU,CAEzC,CAKKhH,GAAWV,GAAkB+D,CAAO,EAAG0D,CAAW,IAErD1D,EAAQ,YAAY,OAAO,gBAAiB,EAAI,EAGhDA,EAAQ,YAAY,OAAO,sBAAuB,EAAI,EAGtDA,EAAQ,YAAY,OAAO,SAAU,EAAI,EACzCA,EAAQ,YAAY,OAAO,OAAQ,EAAI,GAKrCA,EAAQ,MAAQ,OAClBtC,GAAOsC,EAAQ,KAAK,QAAU,IAAI,EAClCA,EAAQ,KAAOrC,GAAkBqC,EAAQ,KAAK,MAAM,EAAE,CAAC,GAIzD,IAAMS,EAAaa,EAAY,WAK/B,OAAAb,EAAW,gBAAkBA,EAAW,sBACtChE,GAA2B6E,EAAY,6BAA6B,EAIlEb,EAAW,oBAAsB,IACnCA,EAAW,kBAAoBA,EAAW,WAI5CT,EAAQ,QAAQ,KAAK0D,CAAW,EAIhCxH,GAAmC8D,EAASuD,CAAc,EAGnDhC,GAAUD,EAAa,EAAI,CACpC,CAGA,eAAekC,GACblC,EACAsC,EAAwB,GACxBC,EAAuB,GACvB,CAEA,IAAM7D,EAAUsB,EAAY,QAGxBwC,EAAkB,KAGlBC,EAAc,KAGdvE,EAAW,KAMTwE,EAAY,KAGZC,EAAmB,GAOrBjE,EAAQ,SAAW,aAAeA,EAAQ,WAAa,SACzD8D,EAAkBxC,EAClByC,EAAc/D,IAKd+D,EAAczI,GAAa0E,CAAO,EAGlC8D,EAAkB,CAAE,GAAGxC,CAAY,EAGnCwC,EAAgB,QAAUC,GAI5B,IAAMG,EACJlE,EAAQ,cAAgB,WACvBA,EAAQ,cAAgB,eACvBA,EAAQ,mBAAqB,QAI3BmE,EAAgBJ,EAAY,KAAOA,EAAY,KAAK,OAAS,KAG/DK,EAA2B,KAkJ/B,GA7IEL,EAAY,MAAQ,MACpB,CAAC,OAAQ,KAAK,EAAE,SAASA,EAAY,MAAM,IAE3CK,EAA2B,KAKzBD,GAAiB,OACnBC,EAA2BnH,GAAiB,GAAGkH,CAAa,EAAE,GAM5DC,GAA4B,MAC9BL,EAAY,YAAY,OAAO,iBAAkBK,EAA0B,EAAI,EAQ7ED,GAAiB,MAAQJ,EAAY,UAOrCjF,GAAO,GAAG,IAAIiF,EAAY,QAAQ,GACpCA,EAAY,YAAY,OAAO,UAAW9G,GAAiB8G,EAAY,SAAS,IAAI,EAAG,EAAI,EAI7FhI,GAA0BgI,CAAW,EAGrC1H,GAAoB0H,CAAW,EAK1BA,EAAY,YAAY,SAAS,aAAc,EAAI,GACtDA,EAAY,YAAY,OAAO,aAAc9E,GAAkB,EAAI,EAQnE8E,EAAY,QAAU,YACrBA,EAAY,YAAY,SAAS,oBAAqB,EAAI,GACzDA,EAAY,YAAY,SAAS,gBAAiB,EAAI,GACtDA,EAAY,YAAY,SAAS,sBAAuB,EAAI,GAC5DA,EAAY,YAAY,SAAS,WAAY,EAAI,GACjDA,EAAY,YAAY,SAAS,WAAY,EAAI,KAEnDA,EAAY,MAAQ,YAQpBA,EAAY,QAAU,YACtB,CAACA,EAAY,8CACb,CAACA,EAAY,YAAY,SAAS,gBAAiB,EAAI,GAEvDA,EAAY,YAAY,OAAO,gBAAiB,YAAa,EAAI,GAI/DA,EAAY,QAAU,YAAcA,EAAY,QAAU,YAGvDA,EAAY,YAAY,SAAS,SAAU,EAAI,GAClDA,EAAY,YAAY,OAAO,SAAU,WAAY,EAAI,EAKtDA,EAAY,YAAY,SAAS,gBAAiB,EAAI,GACzDA,EAAY,YAAY,OAAO,gBAAiB,WAAY,EAAI,GAMhEA,EAAY,YAAY,SAAS,QAAS,EAAI,GAChDA,EAAY,YAAY,OAAO,kBAAmB,WAAY,EAAI,EAM/DA,EAAY,YAAY,SAAS,kBAAmB,EAAI,IACvD3G,GAAkBnB,GAAkB8H,CAAW,CAAC,EAClDA,EAAY,YAAY,OAAO,kBAAmB,oBAAqB,EAAI,EAE3EA,EAAY,YAAY,OAAO,kBAAmB,gBAAiB,EAAI,GAI3EA,EAAY,YAAY,OAAO,OAAQ,EAAI,EAoBvCC,GAAa,OACfD,EAAY,MAAQ,YAKlBA,EAAY,QAAU,YAAcA,EAAY,MAQhDvE,GAAY,KAAM,CAGpB,GAAIuE,EAAY,QAAU,iBACxB,OAAOjJ,EAAiB,gBAAgB,EAK1C,IAAMuJ,EAAkB,MAAMC,GAC5BR,EACAI,EACAL,CACF,EAOE,CAAC9F,GAAe,IAAIgG,EAAY,MAAM,GACtCM,EAAgB,QAAU,KAC1BA,EAAgB,QAAU,IAOxBJ,GAAoBI,EAAgB,OAKpC7E,GAAY,OAEdA,EAAW6E,EAMf,CAoBA,GAjBA7E,EAAS,QAAU,CAAC,GAAGuE,EAAY,OAAO,EAItCA,EAAY,YAAY,SAAS,QAAS,EAAI,IAChDvE,EAAS,eAAiB,IAI5BA,EAAS,2BAA6B0E,EAQlC1E,EAAS,SAAW,IAEtB,OAAIQ,EAAQ,SAAW,YACdlF,EAAiB,EAMtB8B,GAAY0E,CAAW,EAClBvG,GAA4BuG,CAAW,EAUzCxG,EAAiB,+BAA+B,EAIzD,GAEE0E,EAAS,SAAW,KAEpB,CAACqE,IAEA7D,EAAQ,MAAQ,MAAQA,EAAQ,KAAK,QAAU,MAChD,CAIA,GAAIpD,GAAY0E,CAAW,EACzB,OAAOvG,GAA4BuG,CAAW,EAShDA,EAAY,WAAW,WAAW,QAAQ,EAE1C9B,EAAW,MAAMgE,GACflC,EACAsC,EACA,EACF,CACF,CAQA,OAAOpE,CACT,CAGA,eAAe8E,GACbhD,EACA4C,EAAqB,GACrBK,EAAqB,GACrB,CACA7G,GAAO,CAAC4D,EAAY,WAAW,YAAcA,EAAY,WAAW,WAAW,SAAS,EAExFA,EAAY,WAAW,WAAa,CAClC,MAAO,KACP,UAAW,GACX,QAASV,EAAK4D,EAAQ,GAAM,CACrB,KAAK,YACR,KAAK,UAAY,GACbA,GACF,KAAK,QAAQ5D,GAAO,IAAI,aAAa,6BAA8B,YAAY,CAAC,EAGtF,CACF,EAGA,IAAMZ,EAAUsB,EAAY,QAGxB9B,EAAW,KAGTiB,EAAaa,EAAY,WAKb,MAGD,OACftB,EAAQ,MAAQ,YASlB,IAAMyE,EAAgBF,EAAqB,MAAQ,KAG/CvE,EAAQ,KAgEZ,IAAI0E,EAAc,KAIlB,GAAI1E,EAAQ,MAAQ,MAAQsB,EAAY,wBACtC,eAAe,IAAMA,EAAY,wBAAwB,CAAC,UACjDtB,EAAQ,MAAQ,KAAM,CAI/B,IAAM2E,EAAmB,gBAAkB3C,EAAO,CAE5CpF,GAAY0E,CAAW,IAK3B,MAAMU,EAINV,EAAY,gCAAgCU,EAAM,UAAU,EAC9D,EAGM4C,EAAmB,IAAM,CAEzBhI,GAAY0E,CAAW,GAMvBA,EAAY,yBACdA,EAAY,wBAAwB,CAExC,EAGMO,EAAoB9B,GAAM,CAE1BnD,GAAY0E,CAAW,IAKvBvB,EAAE,OAAS,aACbuB,EAAY,WAAW,MAAM,EAE7BA,EAAY,WAAW,UAAUvB,CAAC,EAEtC,EAIA2E,EAAe,iBAAoB,CACjC,GAAI,CACF,cAAiB1C,KAAShC,EAAQ,KAAK,OACrC,MAAQ2E,EAAiB3C,CAAK,EAEhC4C,EAAiB,CACnB,OAAShE,EAAK,CACZiB,EAAiBjB,CAAG,CACtB,CACF,EAAG,CACL,CAEA,GAAI,CAEF,GAAM,CAAE,KAAAiE,EAAM,OAAAC,EAAQ,WAAAC,EAAY,YAAAC,EAAa,OAAAC,CAAO,EAAI,MAAMC,EAAS,CAAE,KAAMR,CAAY,CAAC,EAE9F,GAAIO,EACFzF,EAAWvE,GAAa,CAAE,OAAA6J,EAAQ,WAAAC,EAAY,YAAAC,EAAa,OAAAC,CAAO,CAAC,MAC9D,CACL,IAAME,EAAWN,EAAK,OAAO,aAAa,EAAE,EAC5CvD,EAAY,WAAW,KAAO,IAAM6D,EAAS,KAAK,EAElD3F,EAAWvE,GAAa,CAAE,OAAA6J,EAAQ,WAAAC,EAAY,YAAAC,CAAY,CAAC,CAC7D,CACF,OAASpE,EAAK,CAEZ,OAAIA,EAAI,OAAS,cAEfU,EAAY,WAAW,WAAW,QAAQ,EAGnCvG,GAA4BuG,EAAaV,CAAG,GAG9C9F,EAAiB8F,CAAG,CAC7B,CAIA,IAAMwE,EAAgB,IACb9D,EAAY,WAAW,OAAO,EAKjC+D,EAAmBhG,GAAW,CAG7BzC,GAAY0E,CAAW,GAC1BA,EAAY,WAAW,MAAMjC,CAAM,CAEvC,EAaMiG,EAAS,IAAI,eACjB,CACE,MAAM,MAAOlF,EAAY,CACvBkB,EAAY,WAAW,WAAalB,CACtC,EACA,MAAM,KAAMA,EAAY,CACtB,MAAMgF,EAAchF,CAAU,CAChC,EACA,MAAM,OAAQf,EAAQ,CACpB,MAAMgG,EAAgBhG,CAAM,CAC9B,EACA,KAAM,OACR,CACF,EAKAG,EAAS,KAAO,CAAE,OAAA8F,EAAQ,OAAQ,KAAM,OAAQ,IAAK,EAmBhDhE,EAAY,WAAW,QAC1BA,EAAY,WAAW,GAAG,aAAciE,CAAS,EAGnDjE,EAAY,WAAW,OAAS,SAAY,CAE1C,OAAa,CAKX,IAAIU,EACAwD,EACJ,GAAI,CACF,GAAM,CAAE,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMpE,EAAY,WAAW,KAAK,EAE1D,GAAIzE,GAAUyE,CAAW,EACvB,MAGFU,EAAQyD,EAAO,OAAYC,CAC7B,OAAS9E,EAAK,CACRU,EAAY,WAAW,OAAS,CAACb,EAAW,gBAE9CuB,EAAQ,QAERA,EAAQpB,EAIR4E,EAAY,GAEhB,CAEA,GAAIxD,IAAU,OAAW,CAKvBhF,GAAoBsE,EAAY,WAAW,UAAU,EAErD4B,GAAiB5B,EAAa9B,CAAQ,EAEtC,MACF,CAMA,GAHAiB,EAAW,iBAAmBuB,GAAO,YAAc,EAG/CwD,EAAW,CACblE,EAAY,WAAW,UAAUU,CAAK,EACtC,MACF,CAIA,IAAM2D,EAAS,IAAI,WAAW3D,CAAK,EAMnC,GALI2D,EAAO,YACTrE,EAAY,WAAW,WAAW,QAAQqE,CAAM,EAI9CrH,GAAUgH,CAAM,EAAG,CACrBhE,EAAY,WAAW,UAAU,EACjC,MACF,CAIA,GAAIA,EAAY,WAAW,WAAW,aAAe,EACnD,MAEJ,CACF,EAGA,SAASiE,EAAWlG,EAAQ,CAEtBxC,GAAUyE,CAAW,GAEvB9B,EAAS,QAAU,GAMfjB,GAAW+G,CAAM,GACnBhE,EAAY,WAAW,WAAW,MAChCA,EAAY,WAAW,qBACzB,GAIE/C,GAAW+G,CAAM,GACnBhE,EAAY,WAAW,WAAW,MAAM,IAAI,UAAU,aAAc,CAClE,MAAOxE,GAAYuC,CAAM,EAAIA,EAAS,MACxC,CAAC,CAAC,EAMNiC,EAAY,WAAW,WAAW,QAAQ,CAC5C,CAGA,OAAO9B,EAEP,SAAS0F,EAAU,CAAE,KAAAL,CAAK,EAAG,CAC3B,IAAMe,EAAM3J,GAAkB+D,CAAO,EAE/B6F,EAAQvE,EAAY,WAAW,WAErC,OAAO,IAAI,QAAQ,CAACwE,EAASC,IAAWF,EAAM,SAC5C,CACE,KAAMD,EAAI,SAAWA,EAAI,OACzB,OAAQA,EAAI,OACZ,OAAQ5F,EAAQ,OAChB,KAAM6F,EAAM,aAAe7F,EAAQ,OAASA,EAAQ,KAAK,QAAUA,EAAQ,KAAK,QAAU6E,EAC1F,QAAS7E,EAAQ,YAAY,QAC7B,gBAAiB,EACjB,QAASA,EAAQ,OAAS,YAAc,YAAc,MACxD,EACA,CACE,KAAM,KACN,MAAO,KAEP,UAAWwE,EAAO,CAEhB,GAAM,CAAE,WAAAwB,CAAW,EAAI1E,EAAY,WAMnCb,EAAW,0BAA4BpD,GAAoC,OAAWoD,EAAW,sBAAuBa,EAAY,6BAA6B,EAE7J0E,EAAW,UACbxB,EAAM,IAAI,aAAa,6BAA8B,YAAY,CAAC,GAElElD,EAAY,WAAW,GAAG,aAAckD,CAAK,EAC7C,KAAK,MAAQwB,EAAW,MAAQxB,GAKlC/D,EAAW,6BAA+BhE,GAA2B6E,EAAY,6BAA6B,CAChH,EAEA,mBAAqB,CAKnBb,EAAW,8BAAgChE,GAA2B6E,EAAY,6BAA6B,CACjH,EAEA,UAAWwD,EAAQmB,EAAYC,EAAQnB,EAAY,CACjD,GAAID,EAAS,IACX,OAIF,IAAIqB,EAAU,CAAC,EACXC,EAAW,GAETpB,GAAc,IAAI5J,GAExB,QAASiL,GAAI,EAAGA,GAAIJ,EAAW,OAAQI,IAAK,EAC1CrB,GAAY,OAAOvG,GAA6BwH,EAAWI,EAAC,CAAC,EAAGJ,EAAWI,GAAI,CAAC,EAAE,SAAS,QAAQ,EAAG,EAAI,EAE5G,IAAMC,GAAkBtB,GAAY,IAAI,mBAAoB,EAAI,EAC5DsB,KAGFH,EAAUG,GAAgB,YAAY,EAAE,MAAM,GAAG,EAAE,IAAKC,IAAMA,GAAE,KAAK,CAAC,GAExEH,EAAWpB,GAAY,IAAI,WAAY,EAAI,EAE3C,KAAK,KAAO,IAAI7G,GAAS,CAAE,KAAM+H,CAAO,CAAC,EAEzC,IAAMM,GAAW,CAAC,EAEZC,GAAaL,GAAYpG,EAAQ,WAAa,UAClDnC,GAAkB,IAAIiH,CAAM,EAG9B,GAAIqB,EAAQ,SAAW,GAAKnG,EAAQ,SAAW,QAAUA,EAAQ,SAAW,WAAa,CAAClC,GAAe,SAASgH,CAAM,GAAK,CAAC2B,GAC5H,QAASJ,GAAIF,EAAQ,OAAS,EAAGE,IAAK,EAAG,EAAEA,GAAG,CAC5C,IAAMK,GAASP,EAAQE,EAAC,EAExB,GAAIK,KAAW,UAAYA,KAAW,OACpCF,GAAS,KAAK/K,GAAK,aAAa,CAK9B,MAAOA,GAAK,UAAU,aACtB,YAAaA,GAAK,UAAU,YAC9B,CAAC,CAAC,UACOiL,KAAW,UACpBF,GAAS,KAAKhJ,GAAc,CAC1B,MAAO/B,GAAK,UAAU,aACtB,YAAaA,GAAK,UAAU,YAC9B,CAAC,CAAC,UACOiL,KAAW,KACpBF,GAAS,KAAK/K,GAAK,uBAAuB,CACxC,MAAOA,GAAK,UAAU,uBACtB,YAAaA,GAAK,UAAU,sBAC9B,CAAC,CAAC,MACG,CACL+K,GAAS,OAAS,EAClB,KACF,CACF,CAGF,IAAMG,GAAU,KAAK,QAAQ,KAAK,IAAI,EAEtC,OAAAb,EAAQ,CACN,OAAAhB,EACA,WAAAC,EACA,YAAAC,GACA,KAAMwB,GAAS,OACXpI,GAAS,KAAK,KAAM,GAAGoI,GAAW5F,IAAQ,CACtCA,IACF,KAAK,QAAQA,EAAG,CAEpB,CAAC,EAAE,GAAG,QAAS+F,EAAO,EACpB,KAAK,KAAK,GAAG,QAASA,EAAO,CACnC,CAAC,EAEM,EACT,EAEA,OAAQC,EAAO,CACb,GAAItF,EAAY,WAAW,KACzB,OAOF,IAAMU,EAAQ4E,EAOd,OAAAnG,EAAW,iBAAmBuB,EAAM,WAI7B,KAAK,KAAK,KAAKA,CAAK,CAC7B,EAEA,YAAc,CACR,KAAK,OACPV,EAAY,WAAW,IAAI,aAAc,KAAK,KAAK,EAGrDA,EAAY,WAAW,MAAQ,GAE/B,KAAK,KAAK,KAAK,IAAI,CACrB,EAEA,QAAShC,EAAO,CACV,KAAK,OACPgC,EAAY,WAAW,IAAI,aAAc,KAAK,KAAK,EAGrD,KAAK,MAAM,QAAQhC,CAAK,EAExBgC,EAAY,WAAW,UAAUhC,CAAK,EAEtCyG,EAAOzG,CAAK,CACd,EAEA,UAAWwF,EAAQmB,EAAYhB,EAAQ,CACrC,GAAIH,IAAW,IACb,OAGF,IAAME,EAAc,IAAI5J,GAExB,QAASiL,EAAI,EAAGA,EAAIJ,EAAW,OAAQI,GAAK,EAC1CrB,EAAY,OAAOvG,GAA6BwH,EAAWI,CAAC,CAAC,EAAGJ,EAAWI,EAAI,CAAC,EAAE,SAAS,QAAQ,EAAG,EAAI,EAG5G,OAAAP,EAAQ,CACN,OAAAhB,EACA,WAAY/F,GAAa+F,CAAM,EAC/B,YAAAE,EACA,OAAAC,CACF,CAAC,EAEM,EACT,CACF,CACF,CAAC,CACH,CACF,CAEApK,GAAO,QAAU,CACf,MAAA6E,GACA,MAAAP,GACA,SAAAmB,GACA,wBAAAb,EACF,IChtEA,IAAAoH,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAS,EAAQ,aAAa,EAC9B,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,kBAAAC,EAAkB,EAAI,KAS9B,SAASC,GAAWC,EAAGC,EAAGC,EAAkB,GAAO,CACjD,IAAMC,EAAcN,GAAcG,EAAGE,CAAe,EAE9CE,EAAcP,GAAcI,EAAGC,CAAe,EAEpD,OAAOC,IAAgBC,CACzB,CAMA,SAASC,GAAgBC,EAAQ,CAC/BV,GAAOU,IAAW,IAAI,EAEtB,IAAMC,EAAS,CAAC,EAEhB,QAASC,KAASF,EAAO,MAAM,GAAG,EAChCE,EAAQA,EAAM,KAAK,EAEfV,GAAkBU,CAAK,GACzBD,EAAO,KAAKC,CAAK,EAIrB,OAAOD,CACT,CAEAZ,GAAO,QAAU,CACf,UAAAI,GACA,eAAAM,EACF,IC5CA,IAAAI,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,WAAAC,EAAW,EAAI,KACjB,CAAE,UAAAC,GAAW,eAAAC,EAAe,EAAI,KAChC,CAAE,oBAAAC,GAAqB,YAAAC,EAAY,EAAI,IACvC,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,cAAAC,GAAe,kBAAAC,GAAmB,iBAAAC,EAAiB,EAAI,KACzD,CAAE,QAAAC,GAAS,iBAAAC,GAAkB,gBAAAC,EAAgB,EAAI,KACjD,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,qBAAAC,GAAsB,sBAAAC,GAAuB,aAAAC,EAAa,EAAI,KAChEC,GAAS,EAAQ,aAAa,EAgB9BC,GAAN,MAAMC,CAAM,CAKVC,GAEA,aAAe,CACT,UAAU,CAAC,IAAMnB,IACnBK,EAAO,mBAAmB,EAG5BA,EAAO,KAAK,kBAAkB,IAAI,EAClC,KAAKc,GAA+B,UAAU,CAAC,CACjD,CAEA,MAAM,MAAOC,EAASC,EAAU,CAAC,EAAG,CAClChB,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,cACfjB,EAAO,oBAAoB,UAAW,EAAGiB,CAAM,EAE/CF,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,EAClED,EAAUhB,EAAO,WAAW,kBAAkBgB,EAASC,EAAQ,SAAS,EAExE,IAAMC,EAAI,KAAKC,GAAkBJ,EAASC,EAAS,CAAC,EAEpD,GAAIE,EAAE,SAAW,EAIjB,OAAOA,EAAE,CAAC,CACZ,CAEA,MAAM,SAAUH,EAAU,OAAWC,EAAU,CAAC,EAAG,CACjDhB,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,iBACf,OAAIF,IAAY,SAAWA,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,GAC7FD,EAAUhB,EAAO,WAAW,kBAAkBgB,EAASC,EAAQ,SAAS,EAEjE,KAAKE,GAAkBJ,EAASC,CAAO,CAChD,CAEA,MAAM,IAAKD,EAAS,CAClBf,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,YACfjB,EAAO,oBAAoB,UAAW,EAAGiB,CAAM,EAE/CF,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,EAGlE,IAAMG,EAAW,CAACL,CAAO,EAMzB,OAAO,MAHsB,KAAK,OAAOK,CAAQ,CAInD,CAEA,MAAM,OAAQA,EAAU,CACtBpB,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,eACfjB,EAAO,oBAAoB,UAAW,EAAGiB,CAAM,EAG/C,IAAMI,EAAmB,CAAC,EAGpBC,EAAc,CAAC,EAGrB,QAASP,KAAWK,EAAU,CAC5B,GAAIL,IAAY,OACd,MAAMf,EAAO,OAAO,iBAAiB,CACnC,OAAAiB,EACA,SAAU,aACV,MAAO,CAAC,0BAA0B,CACpC,CAAC,EAKH,GAFAF,EAAUf,EAAO,WAAW,YAAYe,CAAO,EAE3C,OAAOA,GAAY,SACrB,SAIF,IAAMQ,EAAIjB,GAAgBS,CAAO,EAGjC,GAAI,CAACP,GAAqBe,EAAE,GAAG,GAAKA,EAAE,SAAW,MAC/C,MAAMvB,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,gDACX,CAAC,CAEL,CAIA,IAAMO,EAAmB,CAAC,EAG1B,QAAWT,KAAWK,EAAU,CAE9B,IAAMG,EAAIjB,GAAgB,IAAIF,GAAQW,CAAO,CAAC,EAG9C,GAAI,CAACP,GAAqBe,EAAE,GAAG,EAC7B,MAAMvB,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,yBACX,CAAC,EAIHM,EAAE,UAAY,QACdA,EAAE,YAAc,cAGhBD,EAAY,KAAKC,CAAC,EAGlB,IAAME,EAAkBhB,GAAsB,EAG9Ce,EAAiB,KAAKjB,GAAS,CAC7B,QAASgB,EACT,gBAAiBG,EAAU,CAEzB,GAAIA,EAAS,OAAS,SAAWA,EAAS,SAAW,KAAOA,EAAS,OAAS,KAAOA,EAAS,OAAS,IACrGD,EAAgB,OAAOzB,EAAO,OAAO,UAAU,CAC7C,OAAQ,eACR,QAAS,wDACX,CAAC,CAAC,UACO0B,EAAS,YAAY,SAAS,MAAM,EAAG,CAEhD,IAAMC,EAAc9B,GAAe6B,EAAS,YAAY,IAAI,MAAM,CAAC,EAGnE,QAAWE,KAAcD,EAEvB,GAAIC,IAAe,IAAK,CACtBH,EAAgB,OAAOzB,EAAO,OAAO,UAAU,CAC7C,OAAQ,eACR,QAAS,0BACX,CAAC,CAAC,EAEF,QAAW6B,KAAcL,EACvBK,EAAW,MAAM,EAGnB,MACF,CAEJ,CACF,EACA,yBAA0BH,EAAU,CAElC,GAAIA,EAAS,QAAS,CACpBD,EAAgB,OAAO,IAAI,aAAa,UAAW,YAAY,CAAC,EAChE,MACF,CAGAA,EAAgB,QAAQC,CAAQ,CAClC,CACF,CAAC,CAAC,EAGFL,EAAiB,KAAKI,EAAgB,OAAO,CAC/C,CAMA,IAAMK,EAAY,MAHR,QAAQ,IAAIT,CAAgB,EAMhCU,EAAa,CAAC,EAGhBC,EAAQ,EAGZ,QAAWN,KAAYI,EAAW,CAGhC,IAAMG,EAAY,CAChB,KAAM,MACN,QAASX,EAAYU,CAAK,EAC1B,SAAAN,CACF,EAEAK,EAAW,KAAKE,CAAS,EAEzBD,GACF,CAGA,IAAME,EAAkBzB,GAAsB,EAG1C0B,EAAY,KAGhB,GAAI,CACF,KAAKC,GAAsBL,CAAU,CACvC,OAASM,EAAG,CACVF,EAAYE,CACd,CAGA,sBAAe,IAAM,CAEfF,IAAc,KAChBD,EAAgB,QAAQ,MAAS,EAGjCA,EAAgB,OAAOC,CAAS,CAEpC,CAAC,EAGMD,EAAgB,OACzB,CAEA,MAAM,IAAKnB,EAASW,EAAU,CAC5B1B,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,YACfjB,EAAO,oBAAoB,UAAW,EAAGiB,CAAM,EAE/CF,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,EAClES,EAAW1B,EAAO,WAAW,SAAS0B,EAAUT,EAAQ,UAAU,EAGlE,IAAIqB,EAAe,KAUnB,GAPItC,EAAO,GAAG,QAAQe,CAAO,EAC3BuB,EAAehC,GAAgBS,CAAO,EAEtCuB,EAAehC,GAAgB,IAAIF,GAAQW,CAAO,CAAC,EAIjD,CAACP,GAAqB8B,EAAa,GAAG,GAAKA,EAAa,SAAW,MACrE,MAAMtC,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,kDACX,CAAC,EAIH,IAAMsB,EAAgBpC,GAAiBuB,CAAQ,EAG/C,GAAIa,EAAc,SAAW,IAC3B,MAAMvC,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,gBACX,CAAC,EAIH,GAAIsB,EAAc,YAAY,SAAS,MAAM,EAAG,CAE9C,IAAMZ,EAAc9B,GAAe0C,EAAc,YAAY,IAAI,MAAM,CAAC,EAGxE,QAAWX,KAAcD,EAEvB,GAAIC,IAAe,IACjB,MAAM5B,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,wBACX,CAAC,CAGP,CAGA,GAAIsB,EAAc,OAASxC,GAAYwC,EAAc,KAAK,MAAM,GAAKA,EAAc,KAAK,OAAO,QAC7F,MAAMvC,EAAO,OAAO,UAAU,CAC5B,OAAQiB,EACR,QAAS,sCACX,CAAC,EAIH,IAAMuB,EAAiBvC,GAAcsC,CAAa,EAG5CE,EAAkBhC,GAAsB,EAG9C,GAAI8B,EAAc,MAAQ,KAAM,CAK9B,IAAMG,EAHSH,EAAc,KAAK,OAGZ,UAAU,EAGhC7B,GAAagC,EAAQD,EAAgB,QAASA,EAAgB,MAAM,CACtE,MACEA,EAAgB,QAAQ,MAAS,EAKnC,IAAMV,EAAa,CAAC,EAIdE,EAAY,CAChB,KAAM,MACN,QAASK,EACT,SAAUE,CACZ,EAGAT,EAAW,KAAKE,CAAS,EAGzB,IAAMU,EAAQ,MAAMF,EAAgB,QAEhCD,EAAe,MAAQ,OACzBA,EAAe,KAAK,OAASG,GAI/B,IAAMT,EAAkBzB,GAAsB,EAG1C0B,EAAY,KAGhB,GAAI,CACF,KAAKC,GAAsBL,CAAU,CACvC,OAASM,EAAG,CACVF,EAAYE,CACd,CAGA,sBAAe,IAAM,CAEfF,IAAc,KAChBD,EAAgB,QAAQ,EAExBA,EAAgB,OAAOC,CAAS,CAEpC,CAAC,EAEMD,EAAgB,OACzB,CAEA,MAAM,OAAQnB,EAASC,EAAU,CAAC,EAAG,CACnChB,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,eACfjB,EAAO,oBAAoB,UAAW,EAAGiB,CAAM,EAE/CF,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,EAClED,EAAUhB,EAAO,WAAW,kBAAkBgB,EAASC,EAAQ,SAAS,EAKxE,IAAIM,EAAI,KAER,GAAIvB,EAAO,GAAG,QAAQe,CAAO,GAG3B,GAFAQ,EAAIjB,GAAgBS,CAAO,EAEvBQ,EAAE,SAAW,OAAS,CAACP,EAAQ,aACjC,MAAO,QAGTL,GAAO,OAAOI,GAAY,QAAQ,EAElCQ,EAAIjB,GAAgB,IAAIF,GAAQW,CAAO,CAAC,EAI1C,IAAMgB,EAAa,CAAC,EAGdE,EAAY,CAChB,KAAM,SACN,QAASV,EACT,QAAAP,CACF,EAEAe,EAAW,KAAKE,CAAS,EAEzB,IAAMC,EAAkBzB,GAAsB,EAE1C0B,EAAY,KACZS,EAEJ,GAAI,CACFA,EAAmB,KAAKR,GAAsBL,CAAU,CAC1D,OAASM,EAAG,CACVF,EAAYE,CACd,CAEA,sBAAe,IAAM,CACfF,IAAc,KAChBD,EAAgB,QAAQ,CAAC,CAACU,GAAkB,MAAM,EAElDV,EAAgB,OAAOC,CAAS,CAEpC,CAAC,EAEMD,EAAgB,OACzB,CAQA,MAAM,KAAMnB,EAAU,OAAWC,EAAU,CAAC,EAAG,CAC7ChB,EAAO,WAAW,KAAMa,CAAK,EAE7B,IAAMI,EAAS,aAEXF,IAAY,SAAWA,EAAUf,EAAO,WAAW,YAAYe,EAASE,EAAQ,SAAS,GAC7FD,EAAUhB,EAAO,WAAW,kBAAkBgB,EAASC,EAAQ,SAAS,EAGxE,IAAIM,EAAI,KAGR,GAAIR,IAAY,OAEd,GAAIf,EAAO,GAAG,QAAQe,CAAO,GAK3B,GAHAQ,EAAIjB,GAAgBS,CAAO,EAGvBQ,EAAE,SAAW,OAAS,CAACP,EAAQ,aACjC,MAAO,CAAC,OAED,OAAOD,GAAY,WAC5BQ,EAAIjB,GAAgB,IAAIF,GAAQW,CAAO,CAAC,GAK5C,IAAM8B,EAAUpC,GAAsB,EAIhCW,EAAW,CAAC,EAGlB,GAAIL,IAAY,OAEd,QAAW+B,KAAmB,KAAKhC,GAEjCM,EAAS,KAAK0B,EAAgB,CAAC,CAAC,MAE7B,CAEL,IAAMF,EAAmB,KAAKG,GAAYxB,EAAGP,CAAO,EAGpD,QAAW8B,KAAmBF,EAE5BxB,EAAS,KAAK0B,EAAgB,CAAC,CAAC,CAEpC,CAGA,sBAAe,IAAM,CAEnB,IAAMxB,EAAc,CAAC,EAGrB,QAAWP,KAAWK,EAAU,CAC9B,IAAM4B,EAAgB3C,GACpBU,EACA,OACA,IAAI,gBAAgB,EAAE,OACtB,WACF,EAEAO,EAAY,KAAK0B,CAAa,CAChC,CAGAH,EAAQ,QAAQ,OAAO,OAAOvB,CAAW,CAAC,CAC5C,CAAC,EAEMuB,EAAQ,OACjB,CAOAT,GAAuBL,EAAY,CAEjC,IAAMkB,EAAQ,KAAKnC,GAGboC,EAAc,CAAC,GAAGD,CAAK,EAGvBE,EAAa,CAAC,EAGdC,EAAa,CAAC,EAEpB,GAAI,CAEF,QAAWnB,KAAaF,EAAY,CAElC,GAAIE,EAAU,OAAS,UAAYA,EAAU,OAAS,MACpD,MAAMjC,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,iDACX,CAAC,EAIH,GAAIiC,EAAU,OAAS,UAAYA,EAAU,UAAY,KACvD,MAAMjC,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,yDACX,CAAC,EAIH,GAAI,KAAK+C,GAAYd,EAAU,QAASA,EAAU,QAASkB,CAAU,EAAE,OACrE,MAAM,IAAI,aAAa,MAAO,mBAAmB,EAInD,IAAIP,EAGJ,GAAIX,EAAU,OAAS,SAAU,CAK/B,GAHAW,EAAmB,KAAKG,GAAYd,EAAU,QAASA,EAAU,OAAO,EAGpEW,EAAiB,SAAW,EAC9B,MAAO,CAAC,EAIV,QAAWE,KAAmBF,EAAkB,CAC9C,IAAMS,EAAMJ,EAAM,QAAQH,CAAe,EACzCnC,GAAO0C,IAAQ,EAAE,EAGjBJ,EAAM,OAAOI,EAAK,CAAC,CACrB,CACF,SAAWpB,EAAU,OAAS,MAAO,CAEnC,GAAIA,EAAU,UAAY,KACxB,MAAMjC,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,kDACX,CAAC,EAIH,IAAMuB,EAAIU,EAAU,QAGpB,GAAI,CAACzB,GAAqBe,EAAE,GAAG,EAC7B,MAAMvB,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,+BACX,CAAC,EAIH,GAAIuB,EAAE,SAAW,MACf,MAAMvB,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,gBACX,CAAC,EAIH,GAAIiC,EAAU,SAAW,KACvB,MAAMjC,EAAO,OAAO,UAAU,CAC5B,OAAQ,8BACR,QAAS,6BACX,CAAC,EAIH4C,EAAmB,KAAKG,GAAYd,EAAU,OAAO,EAGrD,QAAWa,KAAmBF,EAAkB,CAC9C,IAAMS,EAAMJ,EAAM,QAAQH,CAAe,EACzCnC,GAAO0C,IAAQ,EAAE,EAGjBJ,EAAM,OAAOI,EAAK,CAAC,CACrB,CAGAJ,EAAM,KAAK,CAAChB,EAAU,QAASA,EAAU,QAAQ,CAAC,EAGlDkB,EAAW,KAAK,CAAClB,EAAU,QAASA,EAAU,QAAQ,CAAC,CACzD,CAGAmB,EAAW,KAAK,CAACnB,EAAU,QAASA,EAAU,QAAQ,CAAC,CACzD,CAGA,OAAOmB,CACT,OAASf,EAAG,CAEV,WAAKvB,GAA6B,OAAS,EAG3C,KAAKA,GAA+BoC,EAG9Bb,CACR,CACF,CASAU,GAAaO,EAActC,EAASuC,EAAe,CAEjD,IAAMH,EAAa,CAAC,EAEdI,EAAUD,GAAiB,KAAKzC,GAEtC,QAAWgC,KAAmBU,EAAS,CACrC,GAAM,CAACC,EAAeC,CAAc,EAAIZ,EACpC,KAAKa,GAA0BL,EAAcG,EAAeC,EAAgB1C,CAAO,GACrFoC,EAAW,KAAKN,CAAe,CAEnC,CAEA,OAAOM,CACT,CAUAO,GAA2BL,EAAcvC,EAASW,EAAW,KAAMV,EAAS,CAK1E,IAAM4C,EAAW,IAAI,IAAIN,EAAa,GAAG,EAEnCO,EAAY,IAAI,IAAI9C,EAAQ,GAAG,EAQrC,GANIC,GAAS,eACX6C,EAAU,OAAS,GAEnBD,EAAS,OAAS,IAGhB,CAAChE,GAAUgE,EAAUC,EAAW,EAAI,EACtC,MAAO,GAGT,GACEnC,GAAY,MACZV,GAAS,YACT,CAACU,EAAS,YAAY,SAAS,MAAM,EAErC,MAAO,GAGT,IAAMC,EAAc9B,GAAe6B,EAAS,YAAY,IAAI,MAAM,CAAC,EAEnE,QAAWE,KAAcD,EAAa,CACpC,GAAIC,IAAe,IACjB,MAAO,GAGT,IAAMkC,EAAe/C,EAAQ,YAAY,IAAIa,CAAU,EACjDmC,EAAaT,EAAa,YAAY,IAAI1B,CAAU,EAI1D,GAAIkC,IAAiBC,EACnB,MAAO,EAEX,CAEA,MAAO,EACT,CAEA5C,GAAmBJ,EAASC,EAASgD,EAAe,IAAU,CAE5D,IAAIzC,EAAI,KAGR,GAAIR,IAAY,OACd,GAAIf,EAAO,GAAG,QAAQe,CAAO,GAK3B,GAHAQ,EAAIjB,GAAgBS,CAAO,EAGvBQ,EAAE,SAAW,OAAS,CAACP,EAAQ,aACjC,MAAO,CAAC,OAED,OAAOD,GAAY,WAE5BQ,EAAIjB,GAAgB,IAAIF,GAAQW,CAAO,CAAC,GAM5C,IAAMe,EAAY,CAAC,EAGnB,GAAIf,IAAY,OAEd,QAAW+B,KAAmB,KAAKhC,GACjCgB,EAAU,KAAKgB,EAAgB,CAAC,CAAC,MAE9B,CAEL,IAAMF,EAAmB,KAAKG,GAAYxB,EAAGP,CAAO,EAGpD,QAAW8B,KAAmBF,EAC5Bd,EAAU,KAAKgB,EAAgB,CAAC,CAAC,CAErC,CAMA,IAAMmB,EAAe,CAAC,EAGtB,QAAWvC,KAAYI,EAAW,CAEhC,IAAMoC,EAAiBhE,GAAkBwB,EAAU,WAAW,EAI9D,GAFAuC,EAAa,KAAKC,EAAe,MAAM,CAAC,EAEpCD,EAAa,QAAUD,EACzB,KAEJ,CAGA,OAAO,OAAO,OAAOC,CAAY,CACnC,CACF,EAEA,OAAO,iBAAiBrD,GAAM,UAAW,CACvC,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,QACP,aAAc,EAChB,EACA,MAAOd,GACP,SAAUA,GACV,IAAKA,GACL,OAAQA,GACR,IAAKA,GACL,OAAQA,GACR,KAAMA,EACR,CAAC,EAED,IAAMqE,GAA6B,CACjC,CACE,IAAK,eACL,UAAWnE,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,eACL,UAAWA,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,aACL,UAAWA,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,CACF,EAEAA,EAAO,WAAW,kBAAoBA,EAAO,oBAAoBmE,EAA0B,EAE3FnE,EAAO,WAAW,uBAAyBA,EAAO,oBAAoB,CACpE,GAAGmE,GACH,CACE,IAAK,YACL,UAAWnE,EAAO,WAAW,SAC/B,CACF,CAAC,EAEDA,EAAO,WAAW,SAAWA,EAAO,mBAClCA,EAAO,GAAG,SACV,UACF,EAEAA,EAAO,WAAW,uBAAuB,EAAIA,EAAO,kBAClDA,EAAO,WAAW,WACpB,EAEAN,GAAO,QAAU,CACf,MAAAkB,EACF,IC71BA,IAAAwD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,MAAAC,EAAM,EAAI,KACZ,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CAAE,WAAAC,EAAW,EAAI,KAEjBC,GAAN,MAAMC,CAAa,CAKjBC,GAAU,IAAI,IAEd,aAAe,CACT,UAAU,CAAC,IAAMH,IACnBF,GAAO,mBAAmB,EAG5BA,GAAO,KAAK,kBAAkB,IAAI,CACpC,CAEA,MAAM,MAAOM,EAASC,EAAU,CAAC,EAAG,CAQlC,GAPAP,GAAO,WAAW,KAAMI,CAAY,EACpCJ,GAAO,oBAAoB,UAAW,EAAG,oBAAoB,EAE7DM,EAAUN,GAAO,WAAW,YAAYM,CAAO,EAC/CC,EAAUP,GAAO,WAAW,uBAAuBO,CAAO,EAGtDA,EAAQ,WAAa,MAEvB,GAAI,KAAKF,GAAQ,IAAIE,EAAQ,SAAS,EAAG,CAEvC,IAAMC,EAAY,KAAKH,GAAQ,IAAIE,EAAQ,SAAS,EAGpD,OAAO,MAFO,IAAIR,GAAMG,GAAYM,CAAS,EAE1B,MAAMF,EAASC,CAAO,CAC3C,MAGA,SAAWC,KAAa,KAAKH,GAAQ,OAAO,EAAG,CAI7C,IAAMI,EAAW,MAHH,IAAIV,GAAMG,GAAYM,CAAS,EAGhB,MAAMF,EAASC,CAAO,EAEnD,GAAIE,IAAa,OACf,OAAOA,CAEX,CAEJ,CAOA,MAAM,IAAKC,EAAW,CACpBV,GAAO,WAAW,KAAMI,CAAY,EAEpC,IAAMO,EAAS,mBACf,OAAAX,GAAO,oBAAoB,UAAW,EAAGW,CAAM,EAE/CD,EAAYV,GAAO,WAAW,UAAUU,EAAWC,EAAQ,WAAW,EAI/D,KAAKN,GAAQ,IAAIK,CAAS,CACnC,CAOA,MAAM,KAAMA,EAAW,CACrBV,GAAO,WAAW,KAAMI,CAAY,EAEpC,IAAMO,EAAS,oBAMf,GALAX,GAAO,oBAAoB,UAAW,EAAGW,CAAM,EAE/CD,EAAYV,GAAO,WAAW,UAAUU,EAAWC,EAAQ,WAAW,EAGlE,KAAKN,GAAQ,IAAIK,CAAS,EAAG,CAI/B,IAAME,EAAQ,KAAKP,GAAQ,IAAIK,CAAS,EAGxC,OAAO,IAAIX,GAAMG,GAAYU,CAAK,CACpC,CAGA,IAAMA,EAAQ,CAAC,EAGf,YAAKP,GAAQ,IAAIK,EAAWE,CAAK,EAG1B,IAAIb,GAAMG,GAAYU,CAAK,CACpC,CAOA,MAAM,OAAQF,EAAW,CACvBV,GAAO,WAAW,KAAMI,CAAY,EAEpC,IAAMO,EAAS,sBACf,OAAAX,GAAO,oBAAoB,UAAW,EAAGW,CAAM,EAE/CD,EAAYV,GAAO,WAAW,UAAUU,EAAWC,EAAQ,WAAW,EAE/D,KAAKN,GAAQ,OAAOK,CAAS,CACtC,CAMA,MAAM,MAAQ,CACZ,OAAAV,GAAO,WAAW,KAAMI,CAAY,EAM7B,CAAC,GAHK,KAAKC,GAAQ,KAAK,CAGhB,CACjB,CACF,EAEA,OAAO,iBAAiBF,GAAa,UAAW,CAC9C,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,eACP,aAAc,EAChB,EACA,MAAOF,GACP,IAAKA,GACL,KAAMA,GACN,OAAQA,GACR,KAAMA,EACR,CAAC,EAEDH,GAAO,QAAU,CACf,aAAAK,EACF,ICvJA,IAAAU,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAQAA,GAAO,QAAU,CACf,2BACA,yBACF,ICXA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAMA,SAASC,GAAoBC,EAAO,CAClC,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQ,EAAEC,EAAG,CACrC,IAAMC,EAAOF,EAAM,WAAWC,CAAC,EAE/B,GACGC,GAAQ,GAAQA,GAAQ,GACxBA,GAAQ,IAAQA,GAAQ,IACzBA,IAAS,IAET,MAAO,EAEX,CACA,MAAO,EACT,CAWA,SAASC,GAAoBC,EAAM,CACjC,QAASH,EAAI,EAAGA,EAAIG,EAAK,OAAQ,EAAEH,EAAG,CACpC,IAAMC,EAAOE,EAAK,WAAWH,CAAC,EAE9B,GACEC,EAAO,IACPA,EAAO,KACPA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,KACTA,IAAS,IAET,MAAM,IAAI,MAAM,qBAAqB,CAEzC,CACF,CAUA,SAASG,GAAqBL,EAAO,CACnC,IAAIM,EAAMN,EAAM,OACZC,EAAI,EAGR,GAAID,EAAM,CAAC,IAAM,IAAK,CACpB,GAAIM,IAAQ,GAAKN,EAAMM,EAAM,CAAC,IAAM,IAClC,MAAM,IAAI,MAAM,sBAAsB,EAExC,EAAEA,EACF,EAAEL,CACJ,CAEA,KAAOA,EAAIK,GAAK,CACd,IAAMJ,EAAOF,EAAM,WAAWC,GAAG,EAEjC,GACEC,EAAO,IACPA,EAAO,KACPA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,GAET,MAAM,IAAI,MAAM,sBAAsB,CAE1C,CACF,CAMA,SAASK,GAAoBC,EAAM,CACjC,QAASP,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAAG,CACpC,IAAMC,EAAOM,EAAK,WAAWP,CAAC,EAE9B,GACEC,EAAO,IACPA,IAAS,KACTA,IAAS,GAET,MAAM,IAAI,MAAM,qBAAqB,CAEzC,CACF,CAOA,SAASO,GAAsBC,EAAQ,CACrC,GACEA,EAAO,WAAW,GAAG,GACrBA,EAAO,SAAS,GAAG,GACnBA,EAAO,SAAS,GAAG,EAEnB,MAAM,IAAI,MAAM,uBAAuB,CAE3C,CAEA,IAAMC,GAAU,CACd,MAAO,MAAO,MAAO,MACrB,MAAO,MAAO,KAChB,EAEMC,GAAY,CAChB,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,MAAO,MAAO,MAAO,MAAO,MAAO,KACrC,EAEMC,GAAmB,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAACC,EAAGb,IAAMA,EAAE,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,EA2CtF,SAASc,GAAWC,EAAM,CACxB,OAAI,OAAOA,GAAS,WAClBA,EAAO,IAAI,KAAKA,CAAI,GAGf,GAAGL,GAAQK,EAAK,UAAU,CAAC,CAAC,KAAKH,GAAiBG,EAAK,WAAW,CAAC,CAAC,IAAIJ,GAAUI,EAAK,YAAY,CAAC,CAAC,IAAIA,EAAK,eAAe,CAAC,IAAIH,GAAiBG,EAAK,YAAY,CAAC,CAAC,IAAIH,GAAiBG,EAAK,cAAc,CAAC,CAAC,IAAIH,GAAiBG,EAAK,cAAc,CAAC,CAAC,MACnQ,CASA,SAASC,GAAsBC,EAAQ,CACrC,GAAIA,EAAS,EACX,MAAM,IAAI,MAAM,wBAAwB,CAE5C,CAMA,SAASC,GAAWC,EAAQ,CAC1B,GAAIA,EAAO,KAAK,SAAW,EACzB,OAAO,KAGTjB,GAAmBiB,EAAO,IAAI,EAC9Bf,GAAoBe,EAAO,KAAK,EAEhC,IAAMC,EAAM,CAAC,GAAGD,EAAO,IAAI,IAAIA,EAAO,KAAK,EAAE,EAIzCA,EAAO,KAAK,WAAW,WAAW,IACpCA,EAAO,OAAS,IAGdA,EAAO,KAAK,WAAW,SAAS,IAClCA,EAAO,OAAS,GAChBA,EAAO,OAAS,KAChBA,EAAO,KAAO,KAGZA,EAAO,QACTC,EAAI,KAAK,QAAQ,EAGfD,EAAO,UACTC,EAAI,KAAK,UAAU,EAGjB,OAAOD,EAAO,QAAW,WAC3BH,GAAqBG,EAAO,MAAM,EAClCC,EAAI,KAAK,WAAWD,EAAO,MAAM,EAAE,GAGjCA,EAAO,SACTX,GAAqBW,EAAO,MAAM,EAClCC,EAAI,KAAK,UAAUD,EAAO,MAAM,EAAE,GAGhCA,EAAO,OACTb,GAAmBa,EAAO,IAAI,EAC9BC,EAAI,KAAK,QAAQD,EAAO,IAAI,EAAE,GAG5BA,EAAO,SAAWA,EAAO,QAAQ,SAAS,IAAM,gBAClDC,EAAI,KAAK,WAAWN,GAAUK,EAAO,OAAO,CAAC,EAAE,EAG7CA,EAAO,UACTC,EAAI,KAAK,YAAYD,EAAO,QAAQ,EAAE,EAGxC,QAAWE,KAAQF,EAAO,SAAU,CAClC,GAAI,CAACE,EAAK,SAAS,GAAG,EACpB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,GAAM,CAACC,EAAK,GAAGvB,CAAK,EAAIsB,EAAK,MAAM,GAAG,EAEtCD,EAAI,KAAK,GAAGE,EAAI,KAAK,CAAC,IAAIvB,EAAM,KAAK,GAAG,CAAC,EAAE,CAC7C,CAEA,OAAOqB,EAAI,KAAK,IAAI,CACtB,CAEAvB,GAAO,QAAU,CACf,mBAAAC,GACA,mBAAAI,GACA,mBAAAI,GACA,oBAAAF,GACA,UAAAU,GACA,UAAAI,EACF,ICzRA,IAAAK,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,qBAAAC,GAAsB,sBAAAC,EAAsB,EAAI,KAClD,CAAE,mBAAAC,EAAmB,EAAI,KACzB,CAAE,iCAAAC,EAAiC,EAAI,KACvCC,GAAS,EAAQ,aAAa,EAC9B,CAAE,SAAAC,EAAS,EAAI,EAAQ,kBAAkB,EAQ/C,SAASC,GAAgBC,EAAQ,CAI/B,GAAIL,GAAmBK,CAAM,EAC3B,OAAO,KAGT,IAAIC,EAAgB,GAChBC,EAAqB,GACrBC,EAAO,GACPC,EAAQ,GAGZ,GAAIJ,EAAO,SAAS,GAAG,EAAG,CAKxB,IAAMK,EAAW,CAAE,SAAU,CAAE,EAE/BJ,EAAgBL,GAAiC,IAAKI,EAAQK,CAAQ,EACtEH,EAAqBF,EAAO,MAAMK,EAAS,QAAQ,CACrD,MAMEJ,EAAgBD,EAMlB,GAAI,CAACC,EAAc,SAAS,GAAG,EAC7BG,EAAQH,MACH,CAKL,IAAMI,EAAW,CAAE,SAAU,CAAE,EAC/BF,EAAOP,GACL,IACAK,EACAI,CACF,EACAD,EAAQH,EAAc,MAAMI,EAAS,SAAW,CAAC,CACnD,CAUA,OANAF,EAAOA,EAAK,KAAK,EACjBC,EAAQA,EAAM,KAAK,EAKfD,EAAK,OAASC,EAAM,OAASX,GACxB,KASF,CACL,KAAAU,EAAM,MAAOL,GAASM,CAAK,EAAG,GAAGE,GAAwBJ,CAAkB,CAC7E,CACF,CAQA,SAASI,GAAyBJ,EAAoBK,EAAsB,CAAC,EAAG,CAG9E,GAAIL,EAAmB,SAAW,EAChC,OAAOK,EAKTV,GAAOK,EAAmB,CAAC,IAAM,GAAG,EACpCA,EAAqBA,EAAmB,MAAM,CAAC,EAE/C,IAAIM,EAAW,GAIXN,EAAmB,SAAS,GAAG,GAGjCM,EAAWZ,GACT,IACAM,EACA,CAAE,SAAU,CAAE,CAChB,EACAA,EAAqBA,EAAmB,MAAMM,EAAS,MAAM,IAK7DA,EAAWN,EACXA,EAAqB,IAKvB,IAAIO,EAAgB,GAChBC,EAAiB,GAGrB,GAAIF,EAAS,SAAS,GAAG,EAAG,CAM1B,IAAMH,EAAW,CAAE,SAAU,CAAE,EAE/BI,EAAgBb,GACd,IACAY,EACAH,CACF,EACAK,EAAiBF,EAAS,MAAMH,EAAS,SAAW,CAAC,CACvD,MAKEI,EAAgBD,EAUlB,GALAC,EAAgBA,EAAc,KAAK,EACnCC,EAAiBA,EAAe,KAAK,EAIjCA,EAAe,OAAShB,GAC1B,OAAOY,GAAwBJ,EAAoBK,CAAmB,EAMxE,IAAMI,EAAyBF,EAAc,YAAY,EAKzD,GAAIE,IAA2B,UAAW,CAGxC,IAAMC,EAAa,IAAI,KAAKF,CAAc,EAK1CH,EAAoB,QAAUK,CAChC,SAAWD,IAA2B,UAAW,CAO/C,IAAME,EAAWH,EAAe,WAAW,CAAC,EAQ5C,IANKG,EAAW,IAAMA,EAAW,KAAOH,EAAe,CAAC,IAAM,KAM1D,CAAC,QAAQ,KAAKA,CAAc,EAC9B,OAAOJ,GAAwBJ,EAAoBK,CAAmB,EAIxE,IAAMO,EAAe,OAAOJ,CAAc,EAiB1CH,EAAoB,OAASO,CAC/B,SAAWH,IAA2B,SAAU,CAM9C,IAAII,EAAeL,EAIfK,EAAa,CAAC,IAAM,MACtBA,EAAeA,EAAa,MAAM,CAAC,GAIrCA,EAAeA,EAAa,YAAY,EAIxCR,EAAoB,OAASQ,CAC/B,SAAWJ,IAA2B,OAAQ,CAO5C,IAAIK,EAAa,GACbN,EAAe,SAAW,GAAKA,EAAe,CAAC,IAAM,IAEvDM,EAAa,IAKbA,EAAaN,EAKfH,EAAoB,KAAOS,CAC7B,SAAWL,IAA2B,SAMpCJ,EAAoB,OAAS,WACpBI,IAA2B,WAOpCJ,EAAoB,SAAW,WACtBI,IAA2B,WAAY,CAMhD,IAAIM,EAAc,UAEZC,EAA0BR,EAAe,YAAY,EAGvDQ,EAAwB,SAAS,MAAM,IACzCD,EAAc,QAKZC,EAAwB,SAAS,QAAQ,IAC3CD,EAAc,UAKZC,EAAwB,SAAS,KAAK,IACxCD,EAAc,OAMhBV,EAAoB,SAAWU,CACjC,MACEV,EAAoB,WAAa,CAAC,EAElCA,EAAoB,SAAS,KAAK,GAAGE,CAAa,IAAIC,CAAc,EAAE,EAIxE,OAAOJ,GAAwBJ,EAAoBK,CAAmB,CACxE,CAEAf,GAAO,QAAU,CACf,eAAAO,GACA,wBAAAO,EACF,ICjUA,IAAAa,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,eAAAC,EAAe,EAAI,KACrB,CAAE,UAAAC,EAAU,EAAI,KAChB,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,QAAAC,EAAQ,EAAI,KAEdC,GAAcF,EAAO,mBAAmB,CAACC,GAAS,WAAW,OAAO,EAAE,OAAO,OAAO,CAAC,EAoB3F,SAASE,GAAYC,EAAS,CAC5BJ,EAAO,oBAAoB,UAAW,EAAG,YAAY,EAErDE,GAAYE,CAAO,EAEnB,IAAMC,EAASD,EAAQ,IAAI,QAAQ,EAG7BE,EAAM,CAAC,EAEb,GAAI,CAACD,EACH,OAAOC,EAGT,QAAWC,KAASF,EAAO,MAAM,GAAG,EAAG,CACrC,GAAM,CAACG,EAAM,GAAGC,CAAK,EAAIF,EAAM,MAAM,GAAG,EAExCD,EAAIE,EAAK,KAAK,CAAC,EAAIC,EAAM,KAAK,GAAG,CACnC,CAEA,OAAOH,CACT,CAQA,SAASI,GAAcN,EAASI,EAAMG,EAAY,CAChDT,GAAYE,CAAO,EAEnB,IAAMQ,EAAS,eACfZ,EAAO,oBAAoB,UAAW,EAAGY,CAAM,EAE/CJ,EAAOR,EAAO,WAAW,UAAUQ,EAAMI,EAAQ,MAAM,EACvDD,EAAaX,EAAO,WAAW,uBAAuBW,CAAU,EAIhEE,GAAUT,EAAS,CACjB,KAAAI,EACA,MAAO,GACP,QAAS,IAAI,KAAK,CAAC,EACnB,GAAGG,CACL,CAAC,CACH,CAMA,SAASG,GAAeV,EAAS,CAC/BJ,EAAO,oBAAoB,UAAW,EAAG,eAAe,EAExDE,GAAYE,CAAO,EAEnB,IAAMW,EAAUX,EAAQ,aAAa,EAErC,OAAKW,EAIEA,EAAQ,IAAKC,GAASlB,GAAekB,CAAI,CAAC,EAHxC,CAAC,CAIZ,CAMA,SAASC,GAAaZ,EAAQ,CAC5B,OAAAA,EAASL,EAAO,WAAW,UAAUK,CAAM,EAEpCP,GAAeO,CAAM,CAC9B,CAOA,SAASQ,GAAWT,EAASC,EAAQ,CACnCL,EAAO,oBAAoB,UAAW,EAAG,WAAW,EAEpDE,GAAYE,CAAO,EAEnBC,EAASL,EAAO,WAAW,OAAOK,CAAM,EAExC,IAAMa,EAAMnB,GAAUM,CAAM,EAExBa,GACFd,EAAQ,OAAO,aAAcc,EAAK,EAAI,CAE1C,CAEAlB,EAAO,WAAW,uBAAyBA,EAAO,oBAAoB,CACpE,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,SAAS,EAC/D,IAAK,OACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,SAAS,EAC/D,IAAK,SACL,aAAc,IAAM,IACtB,CACF,CAAC,EAEDA,EAAO,WAAW,OAASA,EAAO,oBAAoB,CACpD,CACE,UAAWA,EAAO,WAAW,UAC7B,IAAK,MACP,EACA,CACE,UAAWA,EAAO,WAAW,UAC7B,IAAK,OACP,EACA,CACE,UAAWA,EAAO,kBAAmBS,GAC/B,OAAOA,GAAU,SACZT,EAAO,WAAW,oBAAoB,EAAES,CAAK,EAG/C,IAAI,KAAKA,CAAK,CACtB,EACD,IAAK,UACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWT,EAAO,kBAAkBA,EAAO,WAAW,WAAW,CAAC,EAClE,IAAK,SACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,SAAS,EAC/D,IAAK,SACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,SAAS,EAC/D,IAAK,OACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,OAAO,EAC7D,IAAK,SACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,OAAO,EAC7D,IAAK,WACL,aAAc,IAAM,IACtB,EACA,CACE,UAAWA,EAAO,WAAW,UAC7B,IAAK,WACL,cAAe,CAAC,SAAU,MAAO,MAAM,CACzC,EACA,CACE,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,SAAS,EAC/D,IAAK,WACL,aAAc,IAAM,IAAI,MAAM,CAAC,CACjC,CACF,CAAC,EAEDH,GAAO,QAAU,CACf,WAAAM,GACA,aAAAO,GACA,cAAAI,GACA,UAAAD,GACA,YAAAI,EACF,ICtMA,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CAAE,WAAAC,EAAW,EAAI,KAKjBC,GAAN,MAAMC,UAAqB,KAAM,CAC/BC,GAEA,YAAaC,EAAMC,EAAgB,CAAC,EAAG,CACrC,GAAID,IAASJ,GAAY,CACvB,MAAM,UAAU,CAAC,EAAG,UAAU,CAAC,CAAC,EAChCF,EAAO,KAAK,kBAAkB,IAAI,EAClC,MACF,CAEA,IAAMQ,EAAS,2BACfR,EAAO,oBAAoB,UAAW,EAAGQ,CAAM,EAE/CF,EAAON,EAAO,WAAW,UAAUM,EAAME,EAAQ,MAAM,EACvDD,EAAgBP,EAAO,WAAW,iBAAiBO,EAAeC,EAAQ,eAAe,EAEzF,MAAMF,EAAMC,CAAa,EAEzB,KAAKF,GAAaE,EAClBP,EAAO,KAAK,kBAAkB,IAAI,CACpC,CAEA,IAAI,MAAQ,CACV,OAAAA,EAAO,WAAW,KAAMI,CAAY,EAE7B,KAAKC,GAAW,IACzB,CAEA,IAAI,QAAU,CACZ,OAAAL,EAAO,WAAW,KAAMI,CAAY,EAE7B,KAAKC,GAAW,MACzB,CAEA,IAAI,aAAe,CACjB,OAAAL,EAAO,WAAW,KAAMI,CAAY,EAE7B,KAAKC,GAAW,WACzB,CAEA,IAAI,QAAU,CACZ,OAAAL,EAAO,WAAW,KAAMI,CAAY,EAE7B,KAAKC,GAAW,MACzB,CAEA,IAAI,OAAS,CACX,OAAAL,EAAO,WAAW,KAAMI,CAAY,EAE/B,OAAO,SAAS,KAAKC,GAAW,KAAK,GACxC,OAAO,OAAO,KAAKA,GAAW,KAAK,EAG9B,KAAKA,GAAW,KACzB,CAEA,iBACEC,EACAG,EAAU,GACVC,EAAa,GACbC,EAAO,KACPC,EAAS,GACTC,EAAc,GACdC,EAAS,KACTC,EAAQ,CAAC,EACT,CACA,OAAAf,EAAO,WAAW,KAAMI,CAAY,EAEpCJ,EAAO,oBAAoB,UAAW,EAAG,+BAA+B,EAEjE,IAAII,EAAaE,EAAM,CAC5B,QAAAG,EAAS,WAAAC,EAAY,KAAAC,EAAM,OAAAC,EAAQ,YAAAC,EAAa,OAAAC,EAAQ,MAAAC,CAC1D,CAAC,CACH,CAEA,OAAO,uBAAwBT,EAAMU,EAAM,CACzC,IAAMC,EAAe,IAAIb,EAAaF,GAAYI,EAAMU,CAAI,EAC5D,OAAAC,EAAaZ,GAAaW,EAC1BC,EAAaZ,GAAW,OAAS,KACjCY,EAAaZ,GAAW,SAAW,GACnCY,EAAaZ,GAAW,cAAgB,GACxCY,EAAaZ,GAAW,SAAW,KACnCY,EAAaZ,GAAW,QAAU,CAAC,EAC5BY,CACT,CACF,EAEM,CAAE,uBAAAC,EAAuB,EAAIf,GACnC,OAAOA,GAAa,uBAKpB,IAAMgB,GAAN,MAAMC,UAAmB,KAAM,CAC7Bf,GAEA,YAAaC,EAAMC,EAAgB,CAAC,EAAG,CACrC,IAAMC,EAAS,yBACfR,EAAO,oBAAoB,UAAW,EAAGQ,CAAM,EAE/CF,EAAON,EAAO,WAAW,UAAUM,EAAME,EAAQ,MAAM,EACvDD,EAAgBP,EAAO,WAAW,eAAeO,CAAa,EAE9D,MAAMD,EAAMC,CAAa,EAEzB,KAAKF,GAAaE,EAClBP,EAAO,KAAK,kBAAkB,IAAI,CACpC,CAEA,IAAI,UAAY,CACd,OAAAA,EAAO,WAAW,KAAMoB,CAAU,EAE3B,KAAKf,GAAW,QACzB,CAEA,IAAI,MAAQ,CACV,OAAAL,EAAO,WAAW,KAAMoB,CAAU,EAE3B,KAAKf,GAAW,IACzB,CAEA,IAAI,QAAU,CACZ,OAAAL,EAAO,WAAW,KAAMoB,CAAU,EAE3B,KAAKf,GAAW,MACzB,CACF,EAGMgB,GAAN,MAAMC,UAAmB,KAAM,CAC7BjB,GAEA,YAAaC,EAAMC,EAAe,CAChC,IAAMC,EAAS,yBACfR,EAAO,oBAAoB,UAAW,EAAGQ,CAAM,EAE/C,MAAMF,EAAMC,CAAa,EACzBP,EAAO,KAAK,kBAAkB,IAAI,EAElCM,EAAON,EAAO,WAAW,UAAUM,EAAME,EAAQ,MAAM,EACvDD,EAAgBP,EAAO,WAAW,eAAeO,GAAiB,CAAC,CAAC,EAEpE,KAAKF,GAAaE,CACpB,CAEA,IAAI,SAAW,CACb,OAAAP,EAAO,WAAW,KAAMsB,CAAU,EAE3B,KAAKjB,GAAW,OACzB,CAEA,IAAI,UAAY,CACd,OAAAL,EAAO,WAAW,KAAMsB,CAAU,EAE3B,KAAKjB,GAAW,QACzB,CAEA,IAAI,QAAU,CACZ,OAAAL,EAAO,WAAW,KAAMsB,CAAU,EAE3B,KAAKjB,GAAW,MACzB,CAEA,IAAI,OAAS,CACX,OAAAL,EAAO,WAAW,KAAMsB,CAAU,EAE3B,KAAKjB,GAAW,KACzB,CAEA,IAAI,OAAS,CACX,OAAAL,EAAO,WAAW,KAAMsB,CAAU,EAE3B,KAAKjB,GAAW,KACzB,CACF,EAEA,OAAO,iBAAiBF,GAAa,UAAW,CAC9C,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,eACP,aAAc,EAChB,EACA,KAAMF,GACN,OAAQA,GACR,YAAaA,GACb,OAAQA,GACR,MAAOA,GACP,iBAAkBA,EACpB,CAAC,EAED,OAAO,iBAAiBkB,GAAW,UAAW,CAC5C,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,aACP,aAAc,EAChB,EACA,OAAQlB,GACR,KAAMA,GACN,SAAUA,EACZ,CAAC,EAED,OAAO,iBAAiBoB,GAAW,UAAW,CAC5C,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,aACP,aAAc,EAChB,EACA,QAASpB,GACT,SAAUA,GACV,OAAQA,GACR,MAAOA,GACP,MAAOA,EACT,CAAC,EAEDD,EAAO,WAAW,YAAcA,EAAO,mBACrCA,EAAO,GAAG,YACV,aACF,EAEAA,EAAO,WAAW,uBAAuB,EAAIA,EAAO,kBAClDA,EAAO,WAAW,WACpB,EAEA,IAAMuB,GAAY,CAChB,CACE,IAAK,UACL,UAAWvB,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,aACL,UAAWA,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,WACL,UAAWA,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,CACF,EAEAA,EAAO,WAAW,iBAAmBA,EAAO,oBAAoB,CAC9D,GAAGuB,GACH,CACE,IAAK,OACL,UAAWvB,EAAO,WAAW,IAC7B,aAAc,IAAM,IACtB,EACA,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,cACL,UAAWA,EAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,SAGL,UAAWA,EAAO,kBAAkBA,EAAO,WAAW,WAAW,EACjE,aAAc,IAAM,IACtB,EACA,CACE,IAAK,QACL,UAAWA,EAAO,WAAW,uBAAuB,EACpD,aAAc,IAAM,IAAI,MAAM,CAAC,CACjC,CACF,CAAC,EAEDA,EAAO,WAAW,eAAiBA,EAAO,oBAAoB,CAC5D,GAAGuB,GACH,CACE,IAAK,WACL,UAAWvB,EAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,OACL,UAAWA,EAAO,WAAW,gBAAgB,EAC7C,aAAc,IAAM,CACtB,EACA,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,CACF,CAAC,EAEDA,EAAO,WAAW,eAAiBA,EAAO,oBAAoB,CAC5D,GAAGuB,GACH,CACE,IAAK,UACL,UAAWvB,EAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,WACL,UAAWA,EAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,SACL,UAAWA,EAAO,WAAW,eAAe,EAC5C,aAAc,IAAM,CACtB,EACA,CACE,IAAK,QACL,UAAWA,EAAO,WAAW,eAAe,EAC5C,aAAc,IAAM,CACtB,EACA,CACE,IAAK,QACL,UAAWA,EAAO,WAAW,GAC/B,CACF,CAAC,EAEDD,GAAO,QAAU,CACf,aAAAI,GACA,WAAAgB,GACA,WAAAE,GACA,uBAAAH,EACF,IC1UA,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAQA,IAAMC,GAAM,uCAKNC,GAA4B,CAChC,WAAY,GACZ,SAAU,GACV,aAAc,EAChB,EAYMC,GAAS,CACb,WAAY,EACZ,KAAM,EACN,QAAS,EACT,OAAQ,CACV,EASMC,GAAsB,CAC1B,KAAM,EACN,SAAU,CACZ,EAeMC,GAAU,CACd,aAAc,EACd,KAAM,EACN,OAAQ,EACR,MAAO,EACP,KAAM,EACN,KAAM,EACR,EAOMC,GAAmB,MAYnBC,GAAe,CACnB,KAAM,EACN,iBAAkB,EAClB,iBAAkB,EAClB,UAAW,CACb,EAOMC,GAAc,OAAO,YAAY,CAAC,EASlCC,GAAY,CAChB,KAAM,EACN,WAAY,EACZ,YAAa,EACb,KAAM,CACR,EAEAT,GAAO,QAAU,CACf,IAAAC,GACA,oBAAAG,GACA,0BAAAF,GACA,OAAAC,GACA,QAAAE,GACA,iBAAAC,GACA,aAAAC,GACA,YAAAC,GACA,UAAAC,EACF,IC7HA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,GAAQ,QAAAC,EAAQ,EAAI,KACtB,CAAE,OAAAC,EAAO,EAAI,EAAQ,aAAa,EAClC,CAAE,iCAAAC,GAAkC,qBAAAC,EAAqB,EAAI,KAMnE,SAASC,GAAcC,EAAY,CAGjC,OAAOA,IAAeN,GAAO,UAC/B,CAMA,SAASO,GAAeD,EAAY,CAIlC,OAAOA,IAAeN,GAAO,IAC/B,CAMA,SAASQ,GAAWF,EAAY,CAI9B,OAAOA,IAAeN,GAAO,OAC/B,CAMA,SAASS,GAAUH,EAAY,CAC7B,OAAOA,IAAeN,GAAO,MAC/B,CAUA,SAASU,GAAWC,EAAGC,EAAQC,EAAe,CAACC,EAAMC,IAAS,IAAI,MAAMD,EAAMC,CAAI,EAAGC,EAAgB,CAAC,EAAG,CAMvG,IAAMC,EAAQJ,EAAaF,EAAGK,CAAa,EAO3CJ,EAAO,cAAcK,CAAK,CAC5B,CASA,SAASC,GAA0BC,EAASL,EAAMM,EAAM,CACtDD,EAAQ,UAAUL,EAAMM,CAAI,CAC9B,CAMA,SAASC,GAAeC,EAAQ,CAC9B,OAAIA,EAAO,aAAeA,EAAO,OAAO,WAC/BA,EAAO,OAET,IAAI,WAAWA,CAAM,EAAE,MAChC,CASA,SAASC,GAAoBC,EAAU,CAOrC,GAAIA,EAAS,SAAW,EACtB,MAAO,GAGT,QAASC,EAAI,EAAGA,EAAID,EAAS,OAAQ,EAAEC,EAAG,CACxC,IAAMC,EAAOF,EAAS,WAAWC,CAAC,EAElC,GACEC,EAAO,IACPA,EAAO,KACPA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,IACTA,IAAS,KACTA,IAAS,IAET,MAAO,EAEX,CAEA,MAAO,EACT,CAOA,SAASC,GAAmBD,EAAM,CAChC,OAAIA,GAAQ,KAAQA,EAAO,KAEvBA,IAAS,MACTA,IAAS,MACTA,IAAS,KAINA,GAAQ,KAAQA,GAAQ,IACjC,CAOA,SAASE,GAAgBC,EAAQ,CAC/B,OACEA,IAAW5B,GAAQ,OACnB4B,IAAW5B,GAAQ,MACnB4B,IAAW5B,GAAQ,IAEvB,CAMA,SAAS6B,GAAqBD,EAAQ,CACpC,OAAOA,IAAW5B,GAAQ,YAC5B,CAMA,SAAS8B,GAAmBF,EAAQ,CAClC,OAAOA,IAAW5B,GAAQ,MAAQ4B,IAAW5B,GAAQ,MACvD,CAOA,SAAS+B,GAAeH,EAAQ,CAC9B,OAAOE,GAAkBF,CAAM,GAAKC,GAAoBD,CAAM,GAAKD,GAAeC,CAAM,CAC1F,CAQA,SAASI,GAAiBC,EAAY,CACpC,IAAMC,EAAW,CAAE,SAAU,CAAE,EACzBC,EAAgB,IAAI,IAE1B,KAAOD,EAAS,SAAWD,EAAW,QAAQ,CAC5C,IAAMG,EAAOlC,GAAiC,IAAK+B,EAAYC,CAAQ,EACjE,CAACG,EAAMC,EAAQ,EAAE,EAAIF,EAAK,MAAM,GAAG,EAEzCD,EAAc,IACZhC,GAAqBkC,EAAM,GAAM,EAAK,EACtClC,GAAqBmC,EAAO,GAAO,EAAI,CACzC,EAEAJ,EAAS,UACX,CAEA,OAAOC,CACT,CAQA,SAASI,GAAyBD,EAAO,CACvC,QAASd,EAAI,EAAGA,EAAIc,EAAM,OAAQd,IAAK,CACrC,IAAMgB,EAAOF,EAAM,WAAWd,CAAC,EAE/B,GAAIgB,EAAO,IAAQA,EAAO,GACxB,MAAO,EAEX,CAEA,MAAO,EACT,CAOA,SAASC,GAAcC,EAAKC,EAAS,CAGnC,IAAIC,EAEJ,GAAI,CACFA,EAAY,IAAI,IAAIF,EAAKC,CAAO,CAClC,OAASjC,EAAG,CACV,MAAM,IAAI,aAAaA,EAAG,aAAa,CACzC,CAWA,GAPIkC,EAAU,WAAa,QACzBA,EAAU,SAAW,MACZA,EAAU,WAAa,WAChCA,EAAU,SAAW,QAInBA,EAAU,WAAa,OAASA,EAAU,WAAa,OACzD,MAAM,IAAI,aAAa,6BAA8B,aAAa,EAIpE,GAAIA,EAAU,KAAK,QAAUA,EAAU,KAAK,SAAS,GAAG,EACtD,MAAM,IAAI,aAAa,OAAQ,aAAa,EAI9C,OAAOA,CACT,CAGA,SAASC,GAA4BpB,EAAMqB,EAAQ,CAIjD,GAAIrB,IAAS,MACPA,IAAS,MAASA,EAAO,KAAQA,EAAO,MAC1C,MAAM,IAAI,aAAa,eAAgB,oBAAoB,EAK/D,GAAIqB,IAAW,KAAM,CAInB,IAAMC,EAAoB,OAAO,WAAWD,CAAM,EAElD,GAAIC,EAAoB,IACtB,MAAM,IAAI,aAAa,gDAAgDA,CAAiB,GAAI,aAAa,CAE7G,CACF,CAMA,IAAMC,IAAc,IAAM,CACxB,GAAI,OAAO,QAAQ,SAAS,KAAQ,SAAU,CAC5C,IAAMC,EAAe,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,EAC7D,OAAOA,EAAa,OAAO,KAAKA,CAAY,CAC9C,CACA,OAAO,SAAU5B,EAAQ,CACvB,GAAIpB,GAAOoB,CAAM,EACf,OAAOA,EAAO,SAAS,OAAO,EAEhC,MAAM,IAAI,UAAU,yBAAyB,CAC/C,CACF,GAAG,EAEHvB,GAAO,QAAU,CACf,aAAAM,GACA,cAAAE,GACA,UAAAC,GACA,SAAAC,GACA,UAAAC,GACA,mBAAAa,GACA,kBAAAI,GACA,yBAAAT,GACA,WAAA+B,GACA,eAAArB,GACA,oBAAAE,GACA,kBAAAC,GACA,cAAAC,GACA,gBAAAC,GACA,wBAAAO,GACA,cAAAnB,GACA,aAAAqB,GACA,2BAAAI,EACF,ICjVA,IAAAK,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,iBAAAC,GAAkB,QAAAC,EAAQ,EAAI,KAEhCC,GAAc,EAAI,KAGpBC,GACAC,GAAS,KACTC,GAASH,GAEb,GAAI,CACFC,GAAS,EAAQ,aAAa,CAEhC,MAAQ,CACNA,GAAS,CAEP,eAAgB,SAAyBC,EAAQE,EAASC,EAAO,CAC/D,QAASC,EAAI,EAAGA,EAAIJ,EAAO,OAAQ,EAAEI,EACnCJ,EAAOI,CAAC,EAAI,KAAK,OAAO,EAAI,IAAM,EAEpC,OAAOJ,CACT,CACF,CACF,CAEA,SAASK,IAAgB,CACvB,OAAIJ,KAAWH,KACbG,GAAS,EACTF,GAAO,eAAgBC,KAAW,OAAO,gBAAgBF,EAAW,EAAI,EAAGA,EAAW,GAEjF,CAACE,GAAOC,IAAQ,EAAGD,GAAOC,IAAQ,EAAGD,GAAOC,IAAQ,EAAGD,GAAOC,IAAQ,CAAC,CAChF,CAEA,IAAMK,GAAN,KAAyB,CAIvB,YAAaC,EAAM,CACjB,KAAK,UAAYA,CACnB,CAEA,YAAaC,EAAQ,CACnB,IAAMC,EAAY,KAAK,UACjBC,EAAUL,GAAa,EACvBM,EAAaF,GAAW,YAAc,EAGxCG,EAAgBD,EAChBE,EAAS,EAETF,EAAaf,IACfiB,GAAU,EACVD,EAAgB,KACPD,EAAa,MACtBE,GAAU,EACVD,EAAgB,KAGlB,IAAMZ,EAAS,OAAO,YAAYW,EAAaE,CAAM,EAGrDb,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAI,EACxBA,EAAO,CAAC,GAAK,IACbA,EAAO,CAAC,GAAKA,EAAO,CAAC,EAAI,KAAQQ,EAGjCR,EAAOa,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC9BV,EAAOa,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC9BV,EAAOa,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC9BV,EAAOa,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAE9BV,EAAO,CAAC,EAAIY,EAERA,IAAkB,IACpBZ,EAAO,cAAcW,EAAY,CAAC,EACzBC,IAAkB,MAE3BZ,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAI,EACxBA,EAAO,YAAYW,EAAY,EAAG,CAAC,GAGrCX,EAAO,CAAC,GAAK,IAGb,QAASI,EAAI,EAAGA,EAAIO,EAAY,EAAEP,EAChCJ,EAAOa,EAAST,CAAC,EAAIK,EAAUL,CAAC,EAAIM,EAAQN,EAAI,CAAC,EAGnD,OAAOJ,CACT,CAKA,OAAO,oBAAqBA,EAAQ,CAClC,IAAMU,EAAUL,GAAa,EAEvBM,EAAaX,EAAO,OAG1B,QAASI,EAAI,EAAGA,EAAIO,EAAY,EAAEP,EAChCJ,EAAOI,CAAC,GAAKM,EAAQN,EAAI,CAAC,EAG5B,IAAIQ,EAAgBD,EAChBE,EAAS,EAETF,EAAaf,IACfiB,GAAU,EACVD,EAAgB,KACPD,EAAa,MACtBE,GAAU,EACVD,EAAgB,KAElB,IAAME,EAAO,OAAO,gBAAgBD,CAAM,EAE1C,OAAAC,EAAK,CAAC,EAAI,IAAiBjB,GAAQ,KACnCiB,EAAK,CAAC,EAAIF,EAAgB,IAC1BE,EAAKD,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC5BI,EAAKD,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC5BI,EAAKD,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAC5BI,EAAKD,EAAS,CAAC,EAAIH,EAAQ,CAAC,EAExBE,IAAkB,IACpBE,EAAK,cAAcH,EAAY,CAAC,EACvBC,IAAkB,MAC3BE,EAAK,CAAC,EAAIA,EAAK,CAAC,EAAI,EACpBA,EAAK,YAAYH,EAAY,EAAG,CAAC,GAG5B,CAACG,EAAMd,CAAM,CACtB,CACF,EAEAL,GAAO,QAAU,CACf,mBAAAW,EACF,ICzIA,IAAAS,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,IAAAC,GAAK,OAAAC,GAAQ,oBAAAC,GAAqB,YAAAC,GAAa,QAAAC,EAAQ,EAAI,KAC7D,CAAE,gBAAAC,GAAiB,SAAAC,GAAU,UAAAC,GAAW,cAAAC,GAAe,2BAAAC,EAA2B,EAAI,KACtF,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,YAAAC,EAAY,EAAI,KAClB,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,QAAAC,GAAS,eAAAC,EAAe,EAAI,KAC9B,CAAE,eAAAC,EAAe,EAAI,KACrB,CAAE,mBAAAC,EAAmB,EAAI,KACzBC,GAAS,EAAQ,aAAa,EAGhCC,GACJ,GAAI,CACFA,GAAS,EAAQ,aAAa,CAEhC,MAAQ,CAER,CASA,SAASC,GAA8BC,EAAKC,EAAWC,EAAQC,EAASC,EAAS,CAG/E,IAAMC,EAAaL,EAEnBK,EAAW,SAAWL,EAAI,WAAa,MAAQ,QAAU,SAMzD,IAAMM,EAAUf,GAAY,CAC1B,QAAS,CAACc,CAAU,EACpB,OAAAH,EACA,eAAgB,OAChB,SAAU,cACV,KAAM,YACN,YAAa,UACb,MAAO,WACP,SAAU,OACZ,CAAC,EAGD,GAAIE,EAAQ,QAAS,CACnB,IAAMG,EAAcb,GAAe,IAAID,GAAQW,EAAQ,OAAO,CAAC,EAE/DE,EAAQ,YAAcC,CACxB,CAUA,IAAMC,EAAWV,GAAO,YAAY,EAAE,EAAE,SAAS,QAAQ,EAIzDQ,EAAQ,YAAY,OAAO,oBAAqBE,EAAU,EAAI,EAI9DF,EAAQ,YAAY,OAAO,wBAAyB,KAAM,EAAI,EAK9D,QAAWG,KAAYR,EACrBK,EAAQ,YAAY,OAAO,yBAA0BG,EAAU,EAAI,EAUrE,OAAAH,EAAQ,YAAY,OAAO,2BAJD,6CAIgD,EAAI,EAI3Dd,GAAS,CAC1B,QAAAc,EACA,iBAAkB,GAClB,WAAYF,EAAQ,WACpB,gBAAiBM,EAAU,CASzB,GARIA,EAAS,OAAS,UAGpBP,EAAQ,WAAatB,GAAO,QAK1B6B,EAAS,OAAS,SAAWA,EAAS,SAAW,IAAK,CACxDC,GAAwBR,EAAS,KAAM,gDAAgD,EACvF,MACF,CAMA,GAAIF,EAAU,SAAW,GAAK,CAACS,EAAS,YAAY,IAAI,wBAAwB,EAAG,CACjFC,GAAwBR,EAAS,KAAM,6CAA6C,EACpF,MACF,CAYA,GAAIO,EAAS,YAAY,IAAI,SAAS,GAAG,YAAY,IAAM,YAAa,CACtEC,GAAwBR,EAAS,KAAM,mDAAmD,EAC1F,MACF,CAMA,GAAIO,EAAS,YAAY,IAAI,YAAY,GAAG,YAAY,IAAM,UAAW,CACvEC,GAAwBR,EAAS,KAAM,oDAAoD,EAC3F,MACF,CASA,IAAMS,EAAcF,EAAS,YAAY,IAAI,sBAAsB,EAC7DG,EAASf,GAAO,WAAW,MAAM,EAAE,OAAOU,EAAW5B,EAAG,EAAE,OAAO,QAAQ,EAC/E,GAAIgC,IAAgBC,EAAQ,CAC1BF,GAAwBR,EAAS,KAAM,yDAAyD,EAChG,MACF,CASA,IAAMW,EAAeJ,EAAS,YAAY,IAAI,0BAA0B,EACpEK,EAEJ,GAAID,IAAiB,OACnBC,EAAa9B,GAAgB6B,CAAY,EAErC,CAACC,EAAW,IAAI,oBAAoB,GAAG,CACzCJ,GAAwBR,EAAS,KAAM,iDAAiD,EACxF,MACF,CAQF,IAAMa,EAAcN,EAAS,YAAY,IAAI,wBAAwB,EAErE,GAAIM,IAAgB,MAQd,CAPqBrB,GAAe,yBAA0BW,EAAQ,WAAW,EAO/D,SAASU,CAAW,EAAG,CAC3CL,GAAwBR,EAAS,KAAM,gDAAgD,EACvF,MACF,CAGFO,EAAS,OAAO,GAAG,OAAQP,EAAQ,YAAY,EAC/CO,EAAS,OAAO,GAAG,QAASP,EAAQ,aAAa,EACjDO,EAAS,OAAO,GAAG,QAASP,EAAQ,aAAa,EAE7Cb,GAAS,KAAK,gBAChBA,GAAS,KAAK,QAAQ,CACpB,QAASoB,EAAS,OAAO,QAAQ,EACjC,SAAUM,EACV,WAAYF,CACd,CAAC,EAGHX,EAAQ,iBAAmB,GAC3BA,EAAQ,wBAAwBO,EAAUK,CAAU,CACtD,CACF,CAAC,CAGH,CAQA,SAASE,GAA0BC,EAAQC,EAAMC,EAAQC,EAAW,GAAO,CAezE,GAbAF,IAAS,KAGTC,IAAW,GAGPC,GAAUhC,GAA2B8B,EAAMC,CAAM,EAOjD,EAAAlC,GAASgC,EAAO,UAAU,GAAK/B,GAAU+B,EAAO,UAAU,GAEvD,GAAI,CAAC9B,GAAc8B,EAAO,UAAU,EAEzCP,GAAwBO,CAAM,EAC9BA,EAAO,WAAarC,GAAO,gBAClB,CAACqC,EAAO,WAAW,IAAIpC,GAAoB,IAAI,GAAK,CAACoC,EAAO,WAAW,IAAIpC,GAAoB,QAAQ,EAAG,CAKnH,IAAMwC,EAAQ,IAAI1B,GASdwB,EAAO,SAAW,GAAKD,IAAS,OAClCA,EAAO,KAITtB,GAAOsB,IAAS,MAAQ,OAAO,UAAUA,CAAI,CAAC,EAE1CA,IAAS,MAAQC,EAAO,SAAW,EACrCE,EAAM,UAAYvC,GACToC,IAAS,MAAQC,IAAW,MACrCE,EAAM,UAAY,OAAO,YAAY,CAAC,EACtCA,EAAM,UAAU,cAAcH,EAAM,CAAC,GAC5BA,IAAS,MAAQC,IAAW,MAGrCE,EAAM,UAAY,OAAO,YAAY,EAAI,OAAO,WAAWF,CAAM,CAAC,EAClEE,EAAM,UAAU,cAAcH,EAAM,CAAC,EAErCG,EAAM,UAAU,MAAMF,EAAQ,EAAG,OAAO,GAExCE,EAAM,UAAYvC,GAGpBmC,EAAO,OAAO,MAAMI,EAAM,YAAYtC,GAAQ,KAAK,CAAC,EAEpDkC,EAAO,WAAW,IAAIpC,GAAoB,IAAI,EAK9CoC,EAAO,WAAarC,GAAO,OAC7B,MAEEqC,EAAO,WAAarC,GAAO,OAE/B,CAQA,SAAS8B,GAAyBR,EAASgB,EAAMC,EAAQ,CAKnDhC,GAAce,EAAQ,UAAU,GAClCc,GAAyBd,EAASgB,EAAMC,EAAQ,EAAK,EAGvDjB,EAAQ,WAAW,MAAM,EAErBA,EAAQ,QAAQ,YAAc,IAChCA,EAAQ,OAAO,QAAQ,EAGzBA,EAAQ,OAAOgB,EAAMC,CAAM,CAC7B,CAEAzC,GAAO,QAAU,CACf,6BAAAoB,GACA,wBAAAY,GACA,yBAAAM,EACF,ICpUA,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,iBAAAC,GAAkB,qBAAAC,EAAqB,EAAI,EAAQ,WAAW,EAChE,CAAE,wBAAAC,EAAwB,EAAI,KAE9BC,GAAO,OAAO,KAAK,CAAC,EAAM,EAAM,IAAM,GAAI,CAAC,EAC3CC,GAAU,OAAO,SAAS,EAC1BC,GAAU,OAAO,SAAS,EAE1BC,GAAN,KAAwB,CAEtBC,GAEAC,GAAW,CAAC,EAEZ,YAAaC,EAAY,CACvB,KAAKD,GAAS,wBAA0BC,EAAW,IAAI,4BAA4B,EACnF,KAAKD,GAAS,oBAAsBC,EAAW,IAAI,wBAAwB,CAC7E,CAEA,WAAYC,EAAOC,EAAKC,EAAU,CAMhC,GAAI,CAAC,KAAKL,GAAU,CAClB,IAAIM,EAAaZ,GAEjB,GAAI,KAAKO,GAAS,oBAAqB,CACrC,GAAI,CAACN,GAAwB,KAAKM,GAAS,mBAAmB,EAAG,CAC/DI,EAAS,IAAI,MAAM,gCAAgC,CAAC,EACpD,MACF,CAEAC,EAAa,OAAO,SAAS,KAAKL,GAAS,mBAAmB,CAChE,CAEA,KAAKD,GAAWP,GAAiB,CAAE,WAAAa,CAAW,CAAC,EAC/C,KAAKN,GAASH,EAAO,EAAI,CAAC,EAC1B,KAAKG,GAASF,EAAO,EAAI,EAEzB,KAAKE,GAAS,GAAG,OAASO,GAAS,CACjC,KAAKP,GAASH,EAAO,EAAE,KAAKU,CAAI,EAChC,KAAKP,GAASF,EAAO,GAAKS,EAAK,MACjC,CAAC,EAED,KAAKP,GAAS,GAAG,QAAUQ,GAAQ,CACjC,KAAKR,GAAW,KAChBK,EAASG,CAAG,CACd,CAAC,CACH,CAEA,KAAKR,GAAS,MAAMG,CAAK,EACrBC,GACF,KAAKJ,GAAS,MAAMJ,EAAI,EAG1B,KAAKI,GAAS,MAAM,IAAM,CACxB,IAAMS,EAAO,OAAO,OAAO,KAAKT,GAASH,EAAO,EAAG,KAAKG,GAASF,EAAO,CAAC,EAEzE,KAAKE,GAASH,EAAO,EAAE,OAAS,EAChC,KAAKG,GAASF,EAAO,EAAI,EAEzBO,EAAS,KAAMI,CAAI,CACrB,CAAC,CACH,CACF,EAEAjB,GAAO,QAAU,CAAE,kBAAAO,EAAkB,ICrErC,IAAAW,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpCC,GAAS,EAAQ,aAAa,EAC9B,CAAE,aAAAC,GAAc,QAAAC,GAAS,OAAAC,GAAQ,YAAAC,GAAa,oBAAAC,EAAoB,EAAI,KACtE,CAAE,SAAAC,EAAS,EAAI,KACf,CACJ,kBAAAC,GACA,cAAAC,GACA,yBAAAC,GACA,WAAAC,GACA,eAAAC,GACA,kBAAAC,GACA,oBAAAC,EACF,EAAI,KACE,CAAE,wBAAAC,EAAwB,EAAI,KAC9B,CAAE,mBAAAC,EAAmB,EAAI,KACzB,CAAE,kBAAAC,EAAkB,EAAI,KAOxBC,GAAN,cAAyBlB,EAAS,CAChCmB,GAAW,CAAC,EACZC,GAAkB,EAClBC,GAAc,EACdC,GAAQ,GAERC,GAASrB,GAAa,KAEtBsB,GAAQ,CAAC,EACTC,GAAa,CAAC,EAGdC,GAGAC,GAEA,YAAaC,EAASC,EAAY,CAChC,MAAM,EAEN,KAAKF,GAAWC,EAChB,KAAKF,GAAcG,GAAqB,IAAI,IAExC,KAAKH,GAAY,IAAI,oBAAoB,GAC3C,KAAKA,GAAY,IAAI,qBAAsB,IAAIT,GAAkBY,CAAU,CAAC,CAEhF,CAMA,OAAQC,EAAOC,EAAGC,EAAU,CAC1B,KAAKb,GAAS,KAAKW,CAAK,EACxB,KAAKT,IAAeS,EAAM,OAC1B,KAAKR,GAAQ,GAEb,KAAK,IAAIU,CAAQ,CACnB,CAOA,IAAKA,EAAU,CACb,KAAO,KAAKV,IACV,GAAI,KAAKC,KAAWrB,GAAa,KAAM,CAErC,GAAI,KAAKmB,GAAc,EACrB,OAAOW,EAAS,EAGlB,IAAMC,EAAS,KAAK,QAAQ,CAAC,EACvBC,GAAOD,EAAO,CAAC,EAAI,OAAU,EAC7BE,EAASF,EAAO,CAAC,EAAI,GACrBG,GAAUH,EAAO,CAAC,EAAI,OAAU,IAEhCI,EAAa,CAACH,GAAOC,IAAWhC,GAAQ,aACxCmC,EAAgBL,EAAO,CAAC,EAAI,IAE5BM,EAAON,EAAO,CAAC,EAAI,GACnBO,EAAOP,EAAO,CAAC,EAAI,GACnBQ,EAAOR,EAAO,CAAC,EAAI,GAEzB,GAAI,CAACxB,GAAc0B,CAAM,EACvB,OAAApB,GAAwB,KAAKY,GAAU,KAAM,yBAAyB,EAC/DK,EAAS,EAGlB,GAAII,EACF,OAAArB,GAAwB,KAAKY,GAAU,KAAM,wBAAwB,EAC9DK,EAAS,EAYlB,GAAIO,IAAS,GAAK,CAAC,KAAKb,GAAY,IAAI,oBAAoB,EAAG,CAC7DX,GAAwB,KAAKY,GAAU,KAAM,4BAA4B,EACzE,MACF,CAEA,GAAIa,IAAS,GAAKC,IAAS,EAAG,CAC5B1B,GAAwB,KAAKY,GAAU,KAAM,gCAAgC,EAC7E,MACF,CAEA,GAAIU,GAAc,CAACxB,GAAkBsB,CAAM,EAAG,CAE5CpB,GAAwB,KAAKY,GAAU,KAAM,oCAAoC,EACjF,MACF,CAIA,GAAId,GAAkBsB,CAAM,GAAK,KAAKV,GAAW,OAAS,EAAG,CAC3DV,GAAwB,KAAKY,GAAU,KAAM,6BAA6B,EAC1E,MACF,CAEA,GAAI,KAAKH,GAAM,YAAca,EAAY,CAEvCtB,GAAwB,KAAKY,GAAU,KAAM,sCAAsC,EACnF,MACF,CAIA,IAAKW,EAAgB,KAAOD,IAAezB,GAAeuB,CAAM,EAAG,CACjEpB,GAAwB,KAAKY,GAAU,KAAM,8CAA8C,EAC3F,MACF,CAEA,GAAIb,GAAoBqB,CAAM,GAAK,KAAKV,GAAW,SAAW,GAAK,CAAC,KAAKD,GAAM,WAAY,CACzFT,GAAwB,KAAKY,GAAU,KAAM,+BAA+B,EAC5E,MACF,CAEIW,GAAiB,KACnB,KAAKd,GAAM,cAAgBc,EAC3B,KAAKf,GAASrB,GAAa,WAClBoC,IAAkB,IAC3B,KAAKf,GAASrB,GAAa,iBAClBoC,IAAkB,MAC3B,KAAKf,GAASrB,GAAa,kBAGzBW,GAAkBsB,CAAM,IAC1B,KAAKX,GAAM,WAAaW,EACxB,KAAKX,GAAM,WAAae,IAAS,GAGnC,KAAKf,GAAM,OAASW,EACpB,KAAKX,GAAM,OAASY,EACpB,KAAKZ,GAAM,IAAMU,EACjB,KAAKV,GAAM,WAAaa,CAC1B,SAAW,KAAKd,KAAWrB,GAAa,iBAAkB,CACxD,GAAI,KAAKmB,GAAc,EACrB,OAAOW,EAAS,EAGlB,IAAMC,EAAS,KAAK,QAAQ,CAAC,EAE7B,KAAKT,GAAM,cAAgBS,EAAO,aAAa,CAAC,EAChD,KAAKV,GAASrB,GAAa,SAC7B,SAAW,KAAKqB,KAAWrB,GAAa,iBAAkB,CACxD,GAAI,KAAKmB,GAAc,EACrB,OAAOW,EAAS,EAGlB,IAAMC,EAAS,KAAK,QAAQ,CAAC,EACvBS,EAAQT,EAAO,aAAa,CAAC,EAQnC,GAAIS,EAAQ,GAAK,GAAK,EAAG,CACvB3B,GAAwB,KAAKY,GAAU,KAAM,uCAAuC,EACpF,MACF,CAEA,IAAMgB,EAAQV,EAAO,aAAa,CAAC,EAEnC,KAAKT,GAAM,eAAiBkB,GAAS,GAAKC,EAC1C,KAAKpB,GAASrB,GAAa,SAC7B,SAAW,KAAKqB,KAAWrB,GAAa,UAAW,CACjD,GAAI,KAAKmB,GAAc,KAAKG,GAAM,cAChC,OAAOQ,EAAS,EAGlB,IAAMY,EAAO,KAAK,QAAQ,KAAKpB,GAAM,aAAa,EAElD,GAAIZ,GAAe,KAAKY,GAAM,MAAM,EAClC,KAAKF,GAAQ,KAAK,kBAAkBsB,CAAI,EACxC,KAAKrB,GAASrB,GAAa,aAEvB,CAAC,KAAKsB,GAAM,WACd,KAAK,eAAeoB,CAAI,EAMpB,CAAC,KAAKpB,GAAM,YAAc,KAAKA,GAAM,KACvCd,GAAyB,KAAKiB,GAAU,KAAKH,GAAM,WAAY,KAAK,iBAAiB,CAAC,EAGxF,KAAKD,GAASrB,GAAa,SACtB,CACL,KAAKwB,GAAY,IAAI,oBAAoB,EAAE,WAAWkB,EAAM,KAAKpB,GAAM,IAAK,CAACqB,EAAOC,IAAS,CAC3F,GAAID,EAAO,CACT9B,GAAwB,KAAKY,GAAU,KAAMkB,EAAM,OAAO,EAC1D,MACF,CAIA,GAFA,KAAK,eAAeC,CAAI,EAEpB,CAAC,KAAKtB,GAAM,IAAK,CACnB,KAAKD,GAASrB,GAAa,KAC3B,KAAKoB,GAAQ,GACb,KAAK,IAAIU,CAAQ,EACjB,MACF,CAEAtB,GAAyB,KAAKiB,GAAU,KAAKH,GAAM,WAAY,KAAK,iBAAiB,CAAC,EAEtF,KAAKF,GAAQ,GACb,KAAKC,GAASrB,GAAa,KAC3B,KAAK,IAAI8B,CAAQ,CACnB,CAAC,EAED,KAAKV,GAAQ,GACb,KACF,CAEJ,CAEJ,CAOA,QAASyB,EAAG,CACV,GAAIA,EAAI,KAAK1B,GACX,MAAM,IAAI,MAAM,2CAA2C,EACtD,GAAI0B,IAAM,EACf,OAAO1C,GAGT,KAAKgB,IAAe0B,EAEpB,IAAMC,EAAQ,KAAK7B,GAAS,CAAC,EAE7B,GAAI6B,EAAM,OAASD,EAEjB,YAAK5B,GAAS,CAAC,EAAI6B,EAAM,SAASD,EAAGC,EAAM,MAAM,EAC1CA,EAAM,SAAS,EAAGD,CAAC,EACrB,GAAIC,EAAM,SAAWD,EAE1B,OAAO,KAAK5B,GAAS,MAAM,EACtB,CACL,IAAI8B,EAAS,EAEPhB,EAAS,OAAO,gBAAgBc,CAAC,EACvC,KAAOE,IAAWF,GAAG,CACnB,IAAMG,EAAO,KAAK/B,GAAS,CAAC,EACtBgC,EAASD,EAAK,OAEpB,GAAIC,EAASF,IAAWF,EAAG,CACzBd,EAAO,IAAI,KAAKd,GAAS,MAAM,EAAG8B,CAAM,EACxC,KACF,SAAWE,EAASF,EAASF,EAAG,CAC9Bd,EAAO,IAAIiB,EAAK,SAAS,EAAGH,EAAIE,CAAM,EAAGA,CAAM,EAC/C,KAAK9B,GAAS,CAAC,EAAI+B,EAAK,SAASH,EAAIE,CAAM,EAC3C,KACF,MACEhB,EAAO,IAAI,KAAKd,GAAS,MAAM,EAAG8B,CAAM,EACxCA,GAAUE,CAEd,CAEA,OAAOlB,CACT,CACF,CAEA,eAAgBmB,EAAU,CACxB,KAAKhC,IAAmBgC,EAAS,OACjC,KAAK3B,GAAW,KAAK2B,CAAQ,CAC/B,CAEA,kBAAoB,CAClB,IAAMC,EAAY,KAAK5B,GAEvB,GAAI4B,EAAU,SAAW,EAEvB,YAAKjC,GAAkB,EAChBiC,EAAU,MAAM,EAGzB,IAAIJ,EAAS,EAEPK,EAAS,OAAO,gBAAgB,KAAKlC,EAAe,EAE1D,QAASmC,EAAI,EAAGA,EAAIF,EAAU,OAAQ,EAAEE,EAAG,CACzC,IAAMtB,EAASoB,EAAUE,CAAC,EAC1BD,EAAO,IAAIrB,EAAQgB,CAAM,EACzBA,GAAUhB,EAAO,MACnB,CAEA,YAAKR,GAAa,CAAC,EACnB,KAAKL,GAAkB,EAEhBkC,CACT,CAEA,eAAgBR,EAAM,CACpB7C,GAAO6C,EAAK,SAAW,CAAC,EAIxB,IAAIU,EASJ,GAPIV,EAAK,QAAU,IAIjBU,EAAOV,EAAK,aAAa,CAAC,GAGxBU,IAAS,QAAa,CAAChD,GAAkBgD,CAAI,EAC/C,MAAO,CAAE,KAAM,KAAM,OAAQ,sBAAuB,MAAO,EAAK,EAKlE,IAAIC,EAASX,EAAK,SAAS,CAAC,EAGxBW,EAAO,CAAC,IAAM,KAAQA,EAAO,CAAC,IAAM,KAAQA,EAAO,CAAC,IAAM,MAC5DA,EAASA,EAAO,SAAS,CAAC,GAG5B,GAAI,CACFA,EAAS9C,GAAW8C,CAAM,CAC5B,MAAQ,CACN,MAAO,CAAE,KAAM,KAAM,OAAQ,gBAAiB,MAAO,EAAK,CAC5D,CAEA,MAAO,CAAE,KAAAD,EAAM,OAAAC,EAAQ,MAAO,EAAM,CACtC,CAMA,kBAAmBb,EAAM,CACvB,GAAM,CAAE,OAAAT,EAAQ,cAAAG,CAAc,EAAI,KAAKd,GAEvC,GAAIW,IAAWhC,GAAQ,MAAO,CAC5B,GAAImC,IAAkB,EACpB,OAAAvB,GAAwB,KAAKY,GAAU,KAAM,0CAA0C,EAChF,GAKT,GAFA,KAAKH,GAAM,UAAY,KAAK,eAAeoB,CAAI,EAE3C,KAAKpB,GAAM,UAAU,MAAO,CAC9B,GAAM,CAAE,KAAAgC,EAAM,OAAAC,CAAO,EAAI,KAAKjC,GAAM,UAEpC,OAAAT,GAAwB,KAAKY,GAAU6B,EAAMC,CAAM,EAC5C,EACT,CAIA,GAAI,CAAC,KAAK9B,GAAS,WAAW,IAAIrB,GAAoB,IAAI,GAAK,CAAC,KAAKqB,GAAS,WAAW,IAAIrB,GAAoB,QAAQ,EAAG,CAK1H,IAAIsC,EAAOvC,GACP,KAAKmB,GAAM,UAAU,OACvBoB,EAAO,OAAO,YAAY,CAAC,EAC3BA,EAAK,cAAc,KAAKpB,GAAM,UAAU,KAAM,CAAC,GAEjD,IAAMkC,EAAa,IAAI1C,GAAmB4B,CAAI,EAE9C,KAAKjB,GAAS,OAAO,MAAM+B,EAAW,YAAYvD,GAAQ,KAAK,CAAC,EAChE,KAAKwB,GAAS,WAAW,IAAIrB,GAAoB,IAAI,CACvD,CAKA,YAAKqB,GAAS,WAAavB,GAAO,QAClC,KAAKuB,GAAS,WAAW,IAAIrB,GAAoB,QAAQ,EAElD,EACT,SAAW6B,IAAWhC,GAAQ,MAM5B,GAAI,CAAC,KAAKwB,GAAS,WAAW,IAAIrB,GAAoB,QAAQ,EAAG,CAC/D,IAAMqD,EAAQ,IAAI3C,GAAmB4B,CAAI,EAEzC,KAAKjB,GAAS,OAAO,MAAMgC,EAAM,YAAYxD,GAAQ,IAAI,CAAC,EAEtDI,GAAS,KAAK,gBAChBA,GAAS,KAAK,QAAQ,CACpB,QAASqC,CACX,CAAC,CAEL,OACST,IAAWhC,GAAQ,MAKxBI,GAAS,KAAK,gBAChBA,GAAS,KAAK,QAAQ,CACpB,QAASqC,CACX,CAAC,EAIL,MAAO,EACT,CAEA,IAAI,aAAe,CACjB,OAAO,KAAKpB,GAAM,SACpB,CACF,EAEAzB,GAAO,QAAU,CACf,WAAAmB,EACF,ICrcA,IAAA0C,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,mBAAAC,EAAmB,EAAI,KACzB,CAAE,QAAAC,GAAS,UAAAC,EAAU,EAAI,KACzBC,GAAa,KASbC,GAAN,KAAgB,CAIdC,GAAS,IAAIF,GAKbG,GAAW,GAGXC,GAEA,YAAaC,EAAQ,CACnB,KAAKD,GAAUC,CACjB,CAEA,IAAKC,EAAMC,EAAIC,EAAM,CACnB,GAAIA,IAAST,GAAU,KAAM,CAC3B,GAAK,KAAKI,GAaH,CAEL,IAAMM,EAAO,CACX,QAAS,KACT,SAAUF,EACV,MAAOG,GAAYJ,EAAME,CAAI,CAC/B,EACA,KAAKN,GAAO,KAAKO,CAAI,CACvB,SAnBMD,IAAST,GAAU,KAAM,CAE3B,GAAM,CAAE,EAAGY,EAAM,EAAGC,CAAK,EAAIf,GAAmB,oBAAoBS,CAAI,EACxE,KAAKF,GAAQ,KAAK,EAClB,KAAKA,GAAQ,MAAMO,CAAI,EACvB,KAAKP,GAAQ,MAAMQ,EAAML,CAAE,EAC3B,KAAKH,GAAQ,OAAO,CACtB,MAEE,KAAKA,GAAQ,MAAMM,GAAYJ,EAAME,CAAI,EAAGD,CAAE,EAWlD,MACF,CAGA,IAAME,EAAO,CACX,QAASH,EAAK,YAAY,EAAE,KAAMO,GAAO,CACvCJ,EAAK,QAAU,KACfA,EAAK,MAAQC,GAAYG,EAAIL,CAAI,CACnC,CAAC,EACD,SAAUD,EACV,MAAO,IACT,EAEA,KAAKL,GAAO,KAAKO,CAAI,EAEhB,KAAKN,IACR,KAAKW,GAAK,CAEd,CAEA,KAAMA,IAAQ,CACZ,KAAKX,GAAW,GAChB,IAAMY,EAAQ,KAAKb,GACnB,KAAO,CAACa,EAAM,QAAQ,GAAG,CACvB,IAAMN,EAAOM,EAAM,MAAM,EAErBN,EAAK,UAAY,MACnB,MAAMA,EAAK,QAGb,KAAKL,GAAQ,MAAMK,EAAK,MAAOA,EAAK,QAAQ,EAE5CA,EAAK,SAAWA,EAAK,MAAQ,IAC/B,CACA,KAAKN,GAAW,EAClB,CACF,EAEA,SAASO,GAAaM,EAAMR,EAAM,CAChC,OAAO,IAAIX,GAAmBoB,GAASD,EAAMR,CAAI,CAAC,EAAE,YAAYA,IAAST,GAAU,KAAOD,GAAQ,KAAOA,GAAQ,MAAM,CACzH,CAEA,SAASmB,GAAUD,EAAMR,EAAM,CAC7B,OAAQA,EAAM,CACZ,KAAKT,GAAU,KACf,KAAKA,GAAU,WACb,OAAO,IAAI,WAAWiB,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,EACrE,KAAKjB,GAAU,YACf,KAAKA,GAAU,KACb,OAAO,IAAI,WAAWiB,CAAI,CAC9B,CACF,CAEApB,GAAO,QAAU,CAAE,UAAAK,EAAU,IC5G7B,IAAAiB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,CAAO,EAAI,KACb,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,0BAAAC,EAA0B,EAAI,KAChC,CAAE,0BAAAC,GAA2B,OAAAC,GAAQ,oBAAAC,GAAqB,UAAAC,GAAW,QAAAC,EAAQ,EAAI,KACjF,CACJ,aAAAC,GACA,cAAAC,GACA,UAAAC,GACA,mBAAAC,GACA,UAAAC,GACA,WAAAC,GACA,cAAAC,GACA,aAAAC,EACF,EAAI,KACE,CAAE,6BAAAC,GAA8B,yBAAAC,GAA0B,wBAAAC,EAAwB,EAAI,KACtF,CAAE,WAAAC,EAAW,EAAI,KACjB,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CAAE,oBAAAC,EAAoB,EAAI,KAC1B,CAAE,MAAAC,EAAM,EAAI,EAAQ,WAAW,EAC/B,CAAE,WAAAC,GAAY,WAAAC,GAAY,uBAAAC,EAAuB,EAAI,KACrD,CAAE,UAAAC,EAAU,EAAI,KAChB,CAAE,SAAAC,EAAS,EAAI,KAqBfC,GAAN,MAAMC,UAAkB,WAAY,CAClCC,GAAU,CACR,KAAM,KACN,MAAO,KACP,MAAO,KACP,QAAS,IACX,EAEAC,GAAkB,EAClBC,GAAY,GACZC,GAAc,GAGdC,GAGAC,GAAW,CACT,wBAAyB,CAACC,EAAUC,IAAe,KAAKC,GAAyBF,EAAUC,CAAU,EACrG,OAAQ,CAACE,EAAMC,IAAW,KAAKC,GAAQF,EAAMC,CAAM,EACnD,UAAW,CAACE,EAAQC,IAAS,KAAKC,GAAWF,EAAQC,CAAI,EACzD,cAAgBE,GAAQ3B,GAAwB,KAAKiB,GAAU,KAAMU,EAAI,OAAO,EAChF,cAAe,IAAM,KAAKC,GAAe,EACzC,aAAeC,GAAU,CAClB,KAAKC,GAAQ,MAAMD,CAAK,GAC3B,KAAKZ,GAAS,OAAO,MAAM,CAE/B,EACA,cAAgBU,GAAQ,CACtB,KAAKV,GAAS,WAAa/B,GAAO,QAE9BuB,GAAS,YAAY,gBACvBA,GAAS,YAAY,QAAQkB,CAAG,EAGlC,KAAKV,GAAS,OAAO,QAAQ,CAC/B,EACA,cAAe,IAAM,KAAKc,GAAe,EAEzC,WAAY7C,GAAO,WACnB,OAAQ,KACR,WAAY,IAAI,IAChB,WAAY,KACZ,iBAAkB,EACpB,EAEA8C,GACAC,GAEAH,GAMA,YAAaI,EAAKC,EAAY,CAAC,EAAG,CAChC,MAAM,EAENrD,EAAO,KAAK,kBAAkB,IAAI,EAElC,IAAMsD,EAAS,wBACftD,EAAO,oBAAoB,UAAW,EAAGsD,CAAM,EAE/C,IAAMC,EAAUvD,EAAO,WAAW,mDAAmD,EAAEqD,EAAWC,EAAQ,SAAS,EAEnHF,EAAMpD,EAAO,WAAW,UAAUoD,CAAG,EACrCC,EAAYE,EAAQ,UAGpB,IAAMC,EAAUtD,GAA0B,eAAe,QAGnDuD,EAAY1C,GAAaqC,EAAKI,CAAO,EAY3C,GARI,OAAOH,GAAc,WACvBA,EAAY,CAACA,CAAS,GAOpBA,EAAU,SAAW,IAAI,IAAIA,EAAU,IAAIK,GAAKA,EAAE,YAAY,CAAC,CAAC,EAAE,KACpE,MAAM,IAAI,aAAa,uCAAwC,aAAa,EAG9E,GAAIL,EAAU,OAAS,GAAK,CAACA,EAAU,MAAMK,GAAK/C,GAAmB+C,CAAC,CAAC,EACrE,MAAM,IAAI,aAAa,uCAAwC,aAAa,EAI9E,KAAKR,GAAO,IAAI,IAAIO,EAAU,IAAI,EAGlC,IAAME,EAASzD,GAA0B,eAKzC,KAAKiC,GAAS,WAAanB,GACzByC,EACAJ,EACAM,EACA,KAAKxB,GACLoB,CACF,EAKA,KAAKpB,GAAS,WAAaN,EAAU,WAQrC,KAAKsB,GAAc,MACrB,CAOA,MAAOZ,EAAO,OAAWC,EAAS,OAAW,CAC3CxC,EAAO,WAAW,KAAM6B,CAAS,EAI7BU,IAAS,SACXA,EAAOvC,EAAO,WAAW,gBAAgB,EAAEuC,EAH9B,kBAG4C,OAAQ,CAAE,MAAO,EAAK,CAAC,GAG9EC,IAAW,SACbA,EAASxC,EAAO,WAAW,UAAUwC,CAAM,GAI7CD,IAAS,KAGTC,IAAW,GAGXvB,GAAyB,KAAKkB,GAAUI,EAAMC,EAAQ,EAAI,CAC5D,CAMA,KAAMG,EAAM,CACV3C,EAAO,WAAW,KAAM6B,CAAS,EAEjC,IAAMyB,EAAS,iBAOf,GANAtD,EAAO,oBAAoB,UAAW,EAAGsD,CAAM,EAE/CX,EAAO3C,EAAO,WAAW,kBAAkB2C,EAAMW,EAAQ,MAAM,EAI3D9C,GAAa,KAAK2B,GAAS,UAAU,EACvC,MAAM,IAAI,aAAa,yBAA0B,mBAAmB,EAOtE,GAAI,GAAC1B,GAAc,KAAK0B,GAAS,UAAU,GAAKzB,GAAU,KAAKyB,GAAS,UAAU,GAKlF,GAAI,OAAOQ,GAAS,SAAU,CAY5B,IAAMiB,EAAS,OAAO,KAAKjB,CAAI,EAE/B,KAAKZ,IAAmB6B,EAAO,WAC/B,KAAK1B,GAAW,IAAI0B,EAAQ,IAAM,CAChC,KAAK7B,IAAmB6B,EAAO,UACjC,EAAGtD,GAAU,IAAI,CACnB,MAAWgB,GAAM,cAAcqB,CAAI,GAajC,KAAKZ,IAAmBY,EAAK,WAC7B,KAAKT,GAAW,IAAIS,EAAM,IAAM,CAC9B,KAAKZ,IAAmBY,EAAK,UAC/B,EAAGrC,GAAU,WAAW,GACf,YAAY,OAAOqC,CAAI,GAahC,KAAKZ,IAAmBY,EAAK,WAC7B,KAAKT,GAAW,IAAIS,EAAM,IAAM,CAC9B,KAAKZ,IAAmBY,EAAK,UAC/B,EAAGrC,GAAU,UAAU,GACdN,EAAO,GAAG,KAAK2C,CAAI,IAY5B,KAAKZ,IAAmBY,EAAK,KAC7B,KAAKT,GAAW,IAAIS,EAAM,IAAM,CAC9B,KAAKZ,IAAmBY,EAAK,IAC/B,EAAGrC,GAAU,IAAI,EAErB,CAEA,IAAI,YAAc,CAChB,OAAAN,EAAO,WAAW,KAAM6B,CAAS,EAG1B,KAAKM,GAAS,UACvB,CAEA,IAAI,gBAAkB,CACpB,OAAAnC,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKE,EACd,CAEA,IAAI,KAAO,CACT,OAAA/B,EAAO,WAAW,KAAM6B,CAAS,EAG1B5B,GAAc,KAAKiD,EAAI,CAChC,CAEA,IAAI,YAAc,CAChB,OAAAlD,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKI,EACd,CAEA,IAAI,UAAY,CACd,OAAAjC,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKG,EACd,CAEA,IAAI,QAAU,CACZ,OAAAhC,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKC,GAAQ,IACtB,CAEA,IAAI,OAAQ+B,EAAI,CACd7D,EAAO,WAAW,KAAM6B,CAAS,EAE7B,KAAKC,GAAQ,MACf,KAAK,oBAAoB,OAAQ,KAAKA,GAAQ,IAAI,EAGhD,OAAO+B,GAAO,YAChB,KAAK/B,GAAQ,KAAO+B,EACpB,KAAK,iBAAiB,OAAQA,CAAE,GAEhC,KAAK/B,GAAQ,KAAO,IAExB,CAEA,IAAI,SAAW,CACb,OAAA9B,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKC,GAAQ,KACtB,CAEA,IAAI,QAAS+B,EAAI,CACf7D,EAAO,WAAW,KAAM6B,CAAS,EAE7B,KAAKC,GAAQ,OACf,KAAK,oBAAoB,QAAS,KAAKA,GAAQ,KAAK,EAGlD,OAAO+B,GAAO,YAChB,KAAK/B,GAAQ,MAAQ+B,EACrB,KAAK,iBAAiB,QAASA,CAAE,GAEjC,KAAK/B,GAAQ,MAAQ,IAEzB,CAEA,IAAI,SAAW,CACb,OAAA9B,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKC,GAAQ,KACtB,CAEA,IAAI,QAAS+B,EAAI,CACf7D,EAAO,WAAW,KAAM6B,CAAS,EAE7B,KAAKC,GAAQ,OACf,KAAK,oBAAoB,QAAS,KAAKA,GAAQ,KAAK,EAGlD,OAAO+B,GAAO,YAChB,KAAK/B,GAAQ,MAAQ+B,EACrB,KAAK,iBAAiB,QAASA,CAAE,GAEjC,KAAK/B,GAAQ,MAAQ,IAEzB,CAEA,IAAI,WAAa,CACf,OAAA9B,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKC,GAAQ,OACtB,CAEA,IAAI,UAAW+B,EAAI,CACjB7D,EAAO,WAAW,KAAM6B,CAAS,EAE7B,KAAKC,GAAQ,SACf,KAAK,oBAAoB,UAAW,KAAKA,GAAQ,OAAO,EAGtD,OAAO+B,GAAO,YAChB,KAAK/B,GAAQ,QAAU+B,EACvB,KAAK,iBAAiB,UAAWA,CAAE,GAEnC,KAAK/B,GAAQ,QAAU,IAE3B,CAEA,IAAI,YAAc,CAChB,OAAA9B,EAAO,WAAW,KAAM6B,CAAS,EAE1B,KAAKsB,EACd,CAEA,IAAI,WAAYW,EAAM,CACpB9D,EAAO,WAAW,KAAM6B,CAAS,EAE7BiC,IAAS,QAAUA,IAAS,cAC9B,KAAKX,GAAc,OAEnB,KAAKA,GAAcW,CAEvB,CAKAxB,GAA0BF,EAAU2B,EAAkB,CAGpD,KAAK5B,GAAS,OAASC,EAAS,OAEhC,IAAM4B,EAAS,IAAI7C,GAAW,KAAKgB,GAAU4B,CAAgB,EAC7DC,EAAO,GAAG,QAAS,IAAM,KAAK7B,GAAS,cAAc,CAAC,EACtD6B,EAAO,GAAG,QAAUnB,GAAQ,KAAKV,GAAS,cAAcU,CAAG,CAAC,EAE5D,KAAKG,GAAUgB,EACf,KAAK9B,GAAa,IAAIR,GAAUU,EAAS,MAAM,EAG/C,KAAKD,GAAS,WAAa/B,GAAO,KAKlC,IAAMiC,EAAaD,EAAS,YAAY,IAAI,0BAA0B,EAElEC,IAAe,OACjB,KAAKJ,GAAcI,GAMrB,IAAM4B,EAAW7B,EAAS,YAAY,IAAI,wBAAwB,EAE9D6B,IAAa,OACf,KAAKjC,GAAYiC,GAInBrD,GAAU,OAAQ,IAAI,CACxB,CAEA6B,GAASF,EAAMC,EAAQ,CACjBA,GAEF5B,GAAU,QAAS,KAAM,CAACkD,EAAMI,IAAS,IAAI3C,GAAWuC,EAAMI,CAAI,EAAG,CACnE,MAAO,IAAI,MAAM1B,CAAM,EACvB,QAASA,CACX,CAAC,EAGE,KAAKL,GAAS,mBACjB,KAAKA,GAAS,WAAa/B,GAAO,OAIlCQ,GAAU,QAAS,KAAM,CAACkD,EAAMI,IAAS,IAAI1C,GAAWsC,EAAMI,CAAI,EAAG,CACnE,SAAU,GAAO,KAAA3B,EAAM,OAAAC,CACzB,CAAC,EAEL,CAEAI,GAAYkB,EAAMnB,EAAM,CAEtB,GAAI,KAAKR,GAAS,aAAe/B,GAAO,KACtC,OAIF,IAAI+D,EAEJ,GAAIL,IAASvD,GAAQ,KAGnB,GAAI,CACF4D,EAAetD,GAAW8B,CAAI,CAChC,MAAQ,CACNzB,GAAwB,KAAKiB,GAAU,KAAM,uCAAuC,EACpF,MACF,MACS2B,IAASvD,GAAQ,SACtB,KAAK4C,KAAgB,OAIvBgB,EAAe,IAAI,KAAK,CAACxB,CAAI,CAAC,EAK9BwB,EAAerD,GAAc6B,CAAI,GAOrC/B,GAAU,UAAW,KAAMa,GAAwB,CACjD,OAAQ,KAAKyB,GAAK,OAClB,KAAMiB,CACR,CAAC,CACH,CAEArB,IAAkB,CAChB,KAAKX,GAAS,OAAO,OAAO,CAC9B,CAMAc,IAAkB,CAIhB,IAAMmB,EACJ,KAAKjC,GAAS,WAAW,IAAI9B,GAAoB,IAAI,GACrD,KAAK8B,GAAS,WAAW,IAAI9B,GAAoB,QAAQ,EAEvDkC,EAAO,KACPC,EAAS,GAEP6B,EAAS,KAAKrB,GAAQ,YAExBqB,GAAU,CAACA,EAAO,OACpB9B,EAAO8B,EAAO,MAAQ,KACtB7B,EAAS6B,EAAO,QACN,KAAKlC,GAAS,WAAW,IAAI9B,GAAoB,QAAQ,IAMnEkC,EAAO,MAIT,KAAKJ,GAAS,WAAa/B,GAAO,OAiBlCQ,GAAU,QAAS,KAAM,CAACkD,EAAMI,IAAS,IAAI1C,GAAWsC,EAAMI,CAAI,EAAG,CACnE,SAAAE,EAAU,KAAA7B,EAAM,OAAAC,CAClB,CAAC,EAEGb,GAAS,MAAM,gBACjBA,GAAS,MAAM,QAAQ,CACrB,UAAW,KACX,KAAAY,EACA,OAAAC,CACF,CAAC,CAEL,CACF,EAGAZ,GAAU,WAAaA,GAAU,UAAU,WAAaxB,GAAO,WAE/DwB,GAAU,KAAOA,GAAU,UAAU,KAAOxB,GAAO,KAEnDwB,GAAU,QAAUA,GAAU,UAAU,QAAUxB,GAAO,QAEzDwB,GAAU,OAASA,GAAU,UAAU,OAASxB,GAAO,OAEvD,OAAO,iBAAiBwB,GAAU,UAAW,CAC3C,WAAYzB,GACZ,KAAMA,GACN,QAASA,GACT,OAAQA,GACR,IAAKiB,GACL,WAAYA,GACZ,eAAgBA,GAChB,OAAQA,GACR,QAASA,GACT,QAASA,GACT,MAAOA,GACP,UAAWA,GACX,WAAYA,GACZ,KAAMA,GACN,WAAYA,GACZ,SAAUA,GACV,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,YACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CACF,CAAC,EAED,OAAO,iBAAiBQ,GAAW,CACjC,WAAYzB,GACZ,KAAMA,GACN,QAASA,GACT,OAAQA,EACV,CAAC,EAEDH,EAAO,WAAW,qBAAqB,EAAIA,EAAO,kBAChDA,EAAO,WAAW,SACpB,EAEAA,EAAO,WAAW,kCAAkC,EAAI,SAAUsE,EAAGhB,EAAQiB,EAAU,CACrF,OAAIvE,EAAO,KAAK,KAAKsE,CAAC,IAAMtE,EAAO,KAAK,MAAM,QAAU,OAAO,YAAYsE,EAClEtE,EAAO,WAAW,qBAAqB,EAAEsE,CAAC,EAG5CtE,EAAO,WAAW,UAAUsE,EAAGhB,EAAQiB,CAAQ,CACxD,EAGAvE,EAAO,WAAW,cAAgBA,EAAO,oBAAoB,CAC3D,CACE,IAAK,YACL,UAAWA,EAAO,WAAW,kCAAkC,EAC/D,aAAc,IAAM,IAAI,MAAM,CAAC,CACjC,EACA,CACE,IAAK,aACL,UAAWA,EAAO,WAAW,IAC7B,aAAc,IAAMqB,GAAoB,CAC1C,EACA,CACE,IAAK,UACL,UAAWrB,EAAO,kBAAkBA,EAAO,WAAW,WAAW,CACnE,CACF,CAAC,EAEDA,EAAO,WAAW,mDAAmD,EAAI,SAAUsE,EAAG,CACpF,OAAItE,EAAO,KAAK,KAAKsE,CAAC,IAAMtE,EAAO,KAAK,MAAM,QAAU,EAAE,OAAO,YAAYsE,GACpEtE,EAAO,WAAW,cAAcsE,CAAC,EAGnC,CAAE,UAAWtE,EAAO,WAAW,kCAAkC,EAAEsE,CAAC,CAAE,CAC/E,EAEAtE,EAAO,WAAW,kBAAoB,SAAUsE,EAAG,CACjD,OAAItE,EAAO,KAAK,KAAKsE,CAAC,IAAMtE,EAAO,KAAK,MAAM,SACxCA,EAAO,GAAG,KAAKsE,CAAC,GAIhB,YAAY,OAAOA,CAAC,GAAKhD,GAAM,cAAcgD,CAAC,GACzCA,EAIJtE,EAAO,WAAW,UAAUsE,CAAC,CACtC,EAEAvE,GAAO,QAAU,CACf,UAAA6B,EACF,IC7qBA,IAAA4C,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,2BAAAC,EAA2B,EAAI,KACjC,CAAE,WAAAC,EAAW,EAAI,KACjB,CAAE,oBAAAC,EAAoB,EAAI,IAE1BC,GAAN,MAAMC,UAAuB,YAAa,CACxCC,GACAC,GAEA,YAAaC,EAAU,GAAIC,EAAO,OAAW,CAO3C,GANAD,EAAUR,GAAO,WAAW,UAAUQ,EAAS,iBAAkB,SAAS,EAI1E,MAAMA,EAAS,gBAAgB,EAE3BC,IAASP,GACX,OACSO,IAAS,OAClBA,EAAOT,GAAO,WAAW,mBAAmBS,CAAI,GAIlD,IAAIC,EAAOD,EAAK,WAAa,KAGvBE,EAASF,EAAK,QAAU,GAG9BR,GAA2BS,EAAMC,CAAM,EAGnCA,EAAO,SAAW,GAAKD,IAAS,OAClCA,EAAO,KAIT,KAAKJ,GAAaI,EAGlB,KAAKH,GAAUI,CACjB,CAEA,IAAI,WAAa,CACf,OAAO,KAAKL,EACd,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKC,EACd,CAOA,OAAO,gCAAiCC,EAASE,EAAMC,EAAQ,CAC7D,IAAMC,EAAQ,IAAIP,EAAeG,EAASN,EAAU,EACpD,OAAAU,EAAMN,GAAaI,EACnBE,EAAML,GAAUI,EACTC,CACT,CACF,EAEM,CAAE,gCAAAC,EAAgC,EAAIT,GAC5C,OAAOA,GAAe,gCAEtB,OAAO,iBAAiBA,GAAe,UAAW,CAChD,UAAWD,GACX,OAAQA,GACR,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,iBACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CACF,CAAC,EAEDH,GAAO,GAAG,eAAiBA,GAAO,KAAK,kBAAkBI,EAAc,EAEvEL,GAAO,QAAU,CAAE,eAAAK,GAAgB,gCAAAS,EAAgC,IClFnE,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,sBAAAC,GAAuB,0BAAAC,EAA0B,EAAI,KACvD,CAAE,OAAAC,GAAQ,QAAAC,GAAS,oBAAAC,EAAoB,EAAI,KAC3C,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,aAAAC,GAAc,mBAAAC,GAAoB,cAAAC,GAAe,WAAAC,EAAW,EAAI,KAClE,CAAE,6BAAAC,GAA8B,wBAAAC,GAAyB,yBAAAC,EAAyB,EAAI,KACtF,CAAE,MAAAC,EAAM,EAAI,EAAQ,WAAW,EAC/B,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,mBAAAC,EAAmB,EAAI,KACzB,CAAE,WAAAC,EAAW,EAAI,KACjB,CAAE,eAAAC,GAAgB,gCAAAC,EAAgC,EAAI,KACtD,CAAE,gBAAAC,EAAgB,EAAI,KACtB,CAAE,oBAAAC,EAAoB,EAAI,IAE5BC,GAA6B,GAE3BC,GAAN,KAAsB,CAGpBC,GAIAC,GAIAC,GAIAC,GAEAC,GAIAC,GAGAC,GAAoB,GAGpBC,GAAW,CAET,wBAAyB,CAACC,EAAUC,IAAe,KAAKC,GAAyBF,EAAUC,CAAU,EACrG,OAAQ,CAACE,EAAOC,IAAY,CAAC,EAC7B,UAAW,CAACC,EAAQC,IAAS,KAAKC,GAAWF,EAAQC,CAAI,EACzD,cAAgBE,GAAQ5B,GAAwB,KAAKmB,GAAU,KAAMS,EAAI,OAAO,EAChF,cAAe,IAAM,KAAKT,GAAS,OAAO,OAAO,EACjD,aAAeU,GAAU,CAClB,KAAKC,GAAQ,MAAMD,CAAK,GAC3B,KAAKV,GAAS,OAAO,MAAM,CAE/B,EACA,cAAgBS,GAAQ,CACtB,KAAKT,GAAS,WAAa5B,GAAO,QAE9BY,GAAS,YAAY,gBACvBA,GAAS,YAAY,QAAQyB,CAAG,EAGlC,KAAKT,GAAS,OAAO,QAAQ,CAC/B,EACA,cAAe,IAAM,KAAKY,GAAe,EAEzC,WAAYxC,GAAO,WACnB,OAAQ,KACR,WAAY,IAAI,IAChB,WAAY,KACZ,iBAAkB,EACpB,EAGAuC,GAEA,YAAaE,EAAKC,EAAU,OAAW,CAChCvB,KACH,QAAQ,YAAY,oEAAqE,CACvF,KAAM,YACR,CAAC,EACDA,GAA6B,IAG/BhB,GAAO,oBAAoB,UAAW,EAAG,WAAW,EAEpDsC,EAAMtC,GAAO,WAAW,UAAUsC,CAAG,EACjCC,IAAY,OACdA,EAAUvC,GAAO,WAAW,uBAAuBuC,CAAO,GAI5D,IAAMC,EAAU5C,GAA0B,eAAe,QAGnD6C,EAAYxC,GAAaqC,EAAKE,CAAO,EAGrCE,EAAYH,EAAQ,UAG1B,GAAIG,EAAU,SAAW,IAAI,IAAIA,EAAU,IAAIC,GAAKA,EAAE,YAAY,CAAC,CAAC,EAAE,KACpE,MAAM,IAAI,aAAa,uCAAwC,aAAa,EAG9E,GAAID,EAAU,OAAS,GAAK,CAACA,EAAU,MAAMC,GAAKzC,GAAmByC,CAAC,CAAC,EACrE,MAAM,IAAI,aAAa,uCAAwC,aAAa,EAc9E,GAVA,KAAKzB,GAAOuB,EAAU,SAAS,EAG/B,KAAKtB,GAAiBxB,GAAsB,EAC5C,KAAKyB,GAAiBzB,GAAsB,EAMxC4C,EAAQ,QAAU,KAAM,CAE1B,IAAMK,EAASL,EAAQ,OAIvB,GAAIK,EAAO,QAAS,CAClB,KAAKzB,GAAe,OAAOyB,EAAO,MAAM,EACxC,KAAKxB,GAAe,OAAOwB,EAAO,MAAM,EACxC,MACF,CAGAA,EAAO,iBAAiB,QAAS,IAAM,CAEhCzC,GAAc,KAAKsB,GAAS,UAAU,IAEzCnB,GAAwB,KAAKmB,EAAQ,EAGrC,KAAKA,GAAS,WAAa5B,GAAO,QAGlC,KAAKsB,GAAe,OAAOyB,EAAO,MAAM,EACxC,KAAKxB,GAAe,OAAOwB,EAAO,MAAM,EAGxC,KAAKpB,GAAoB,GAE7B,EAAG,CAAE,KAAM,EAAK,CAAC,CACnB,CAGA,IAAMqB,EAASjD,GAA0B,eAIzC,KAAK6B,GAAS,WAAapB,GACzBoC,EACAC,EACAG,EACA,KAAKpB,GACLc,CACF,CACF,CAGA,IAAI,KAAO,CACT,OAAO,KAAKrB,GAAK,SAAS,CAC5B,CAGA,IAAI,QAAU,CACZ,OAAO,KAAKC,GAAe,OAC7B,CAGA,IAAI,QAAU,CACZ,OAAO,KAAKC,GAAe,OAC7B,CAGA,MAAO0B,EAAY,OAAW,CACxBA,IAAc,OAChBA,EAAY9C,GAAO,WAAW,mBAAmB8C,CAAS,GAI5D,IAAMC,EAAOD,EAAU,WAAa,KAG9BE,EAASF,EAAU,OAGzBvC,GAAyB,KAAKkB,GAAUsB,EAAMC,EAAQ,EAAI,CAC5D,CAEAC,GAAQd,EAAO,CAEb,IAAMe,EAAUvD,GAAsB,EAGlCqC,EAAO,KAGPD,EAAS,KAGb,GAAI,YAAY,OAAOI,CAAK,GAAK3B,GAAM,cAAc2B,CAAK,EAExDH,EAAO,IAAI,WAAW,YAAY,OAAOG,CAAK,EAAI,IAAI,WAAWA,EAAM,OAAQA,EAAM,WAAYA,EAAM,UAAU,EAAIA,CAAK,EAG1HJ,EAASjC,GAAQ,WACZ,CAKL,IAAIqD,EAEJ,GAAI,CACFA,EAASnD,GAAO,WAAW,UAAUmC,CAAK,CAC5C,OAASiB,EAAG,CACVF,EAAQ,OAAOE,CAAC,EAChB,MACF,CAGApB,EAAO,IAAI,YAAY,EAAE,OAAOmB,CAAM,EAGtCpB,EAASjC,GAAQ,IACnB,CAMA,GAAI,CAAC,KAAK2B,GAAS,WAAW,IAAI1B,GAAoB,IAAI,GAAK,CAAC,KAAK0B,GAAS,WAAW,IAAI1B,GAAoB,QAAQ,EAAG,CAC1H,IAAMsD,EAAQ,IAAI3C,GAAmBsB,CAAI,EAEzC,KAAKP,GAAS,OAAO,MAAM4B,EAAM,YAAYtB,CAAM,EAAG,IAAM,CAC1DmB,EAAQ,QAAQ,MAAS,CAC3B,CAAC,CACH,CAGA,OAAOA,CACT,CAGAtB,GAA0BF,EAAU4B,EAAkB,CACpD,KAAK7B,GAAS,OAASC,EAAS,OAEhC,IAAM6B,EAAS,IAAI5C,GAAW,KAAKc,GAAU6B,CAAgB,EAC7DC,EAAO,GAAG,QAAS,IAAM,KAAK9B,GAAS,cAAc,CAAC,EACtD8B,EAAO,GAAG,QAAUrB,GAAQ,KAAKT,GAAS,cAAcS,CAAG,CAAC,EAE5D,KAAKE,GAAUmB,EAGf,KAAK9B,GAAS,WAAa5B,GAAO,KAMlC,IAAM8B,EAAa2B,GAAoB,GAGjCE,EAAW9B,EAAS,YAAY,IAAI,wBAAwB,GAAK,GAMjE+B,EAAW,IAAI,eAAe,CAClC,MAAQC,GAAe,CACrB,KAAKpC,GAA4BoC,CACnC,EACA,KAAMA,EAAY,CAChB,IAAIvB,EACJ,KAAOuB,EAAW,YAAc,IAAMvB,EAAQT,EAAS,OAAO,KAAK,KAAO,MACxEgC,EAAW,QAAQvB,CAAK,CAE5B,EACA,OAASa,GAAW,KAAKW,GAAQX,CAAM,CACzC,CAAC,EAOKY,EAAW,IAAI,eAAe,CAClC,MAAQzB,GAAU,KAAKc,GAAOd,CAAK,EACnC,MAAO,IAAM5B,GAAyB,KAAKkB,GAAU,KAAM,IAAI,EAC/D,MAAQuB,GAAW,KAAKa,GAAkBb,CAAM,CAClD,CAAC,EAGD,KAAK3B,GAAkBoC,EAGvB,KAAKlC,GAAkBqC,EAGvB,KAAKzC,GAAe,QAAQ,CAC1B,WAAAQ,EACA,SAAA6B,EACA,SAAAC,EACA,SAAAG,CACF,CAAC,CACH,CAGA3B,GAAY6B,EAAM9B,EAAM,CAEtB,GAAI,KAAKP,GAAS,aAAe5B,GAAO,KACtC,OASF,IAAIsC,EAEJ,GAAI2B,IAAShE,GAAQ,KACnB,GAAI,CACFqC,EAAQ/B,GAAW4B,CAAI,CACzB,MAAQ,CACN1B,GAAwB,KAAKmB,GAAU,uCAAuC,EAC9E,MACF,MACSqC,IAAShE,GAAQ,SAC1BqC,EAAQ,IAAI,WAAWH,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,GAItE,KAAKV,GAA0B,QAAQa,CAAK,CAG9C,CAGAE,IAAkB,CAChB,IAAM0B,EACJ,KAAKtC,GAAS,WAAW,IAAI1B,GAAoB,IAAI,GACrD,KAAK0B,GAAS,WAAW,IAAI1B,GAAoB,QAAQ,EAM3D,GAHA,KAAK0B,GAAS,WAAa5B,GAAO,OAG9B,KAAK2B,GACP,OAIG,KAAKC,GAAS,kBACjB,KAAKN,GAAe,OAAO,IAAIP,GAAe,qBAAqB,CAAC,EAGtE,IAAMoD,EAAS,KAAK5B,GAAQ,YAUxBW,EAAOiB,GAAQ,MAAQ,KAEvB,CAAC,KAAKvC,GAAS,WAAW,IAAI1B,GAAoB,IAAI,GAAK,CAAC,KAAK0B,GAAS,WAAW,IAAI1B,GAAoB,QAAQ,IACvHgD,EAAO,MAIT,IAAMC,EAASgB,GAAQ,QAAU,KAAO,GAAKlD,GAAgB,OAAO,KAAKkD,EAAO,MAAM,CAAC,EAGvF,GAAID,EAEF,KAAK1C,GAAgB,OAAO,EAAE,MAAM,IAAM,CAAC,CAAC,EAGvC,KAAKE,GAAgB,QACxB,KAAKA,GAAgB,MAAM,IAAI,aAAa,gDAAiD,mBAAmB,CAAC,EAInH,KAAKH,GAAe,QAAQ,CAC1B,UAAW2B,EACX,OAAAC,CACF,CAAC,MACI,CAIL,IAAMiB,EAAQpD,GAAgC,gBAAiBkC,EAAMC,CAAM,EAG3E,KAAK1B,GAA0B,MAAM2C,CAAK,EAG1C,KAAK1C,GAAgB,MAAM0C,CAAK,EAGhC,KAAK7C,GAAe,OAAO6C,CAAK,CAClC,CACF,CAEAJ,GAAmBb,EAAQ,CAEzB,IAAID,EAAO,KAGPmB,EAAe,GAGflE,GAAO,GAAG,eAAegD,CAAM,IAEjCD,EAAOC,EAAO,UAGdkB,EAAelB,EAAO,QAKxBzC,GAAyB,KAAKkB,GAAUsB,EAAMmB,CAAY,CAC5D,CAGAP,GAASX,EAAQ,CACf,KAAKa,GAAkBb,CAAM,CAC/B,CACF,EAEA,OAAO,iBAAiB/B,GAAgB,UAAW,CACjD,IAAKF,GACL,OAAQA,GACR,OAAQA,GACR,MAAOA,GACP,CAAC,OAAO,WAAW,EAAG,CACpB,MAAO,kBACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CACF,CAAC,EAEDf,GAAO,WAAW,uBAAyBA,GAAO,oBAAoB,CACpE,CACE,IAAK,YACL,UAAWA,GAAO,kBAAkBA,GAAO,WAAW,SAAS,EAC/D,aAAc,IAAM,CAAC,CACvB,EACA,CACE,IAAK,SACL,UAAWA,GAAO,kBAAkBA,GAAO,WAAW,WAAW,EACjE,aAAc,IAAM,IACtB,CACF,CAAC,EAEDA,GAAO,WAAW,mBAAqBA,GAAO,oBAAoB,CAChE,CACE,IAAK,YACL,UAAYmE,GAAMnE,GAAO,WAAW,gBAAgB,EAAEmE,EAAG,CAAE,aAAc,EAAK,CAAC,CACjF,EACA,CACE,IAAK,SACL,UAAWnE,GAAO,WAAW,UAC7B,aAAc,IAAM,EACtB,CACF,CAAC,EAEDN,GAAO,QAAU,CAAE,gBAAAuB,EAAgB,ICpenC,IAAAmD,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAOA,SAASC,GAAoBC,EAAO,CAElC,OAAOA,EAAM,QAAQ,IAAQ,IAAM,EACrC,CAOA,SAASC,GAAeD,EAAO,CAC7B,GAAIA,EAAM,SAAW,EAAG,MAAO,GAC/B,QAASE,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAChC,GAAIF,EAAM,WAAWE,CAAC,EAAI,IAAQF,EAAM,WAAWE,CAAC,EAAI,GAAM,MAAO,GAEvE,MAAO,EACT,CAGA,SAASC,GAAOC,EAAI,CAClB,OAAO,IAAI,QAASC,GAAY,CAC9B,WAAWA,EAASD,CAAE,EAAE,MAAM,CAChC,CAAC,CACH,CAEAN,GAAO,QAAU,CACf,mBAAAC,GACA,cAAAE,GACA,MAAAE,EACF,ICpCA,IAAAG,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,GAAM,CAAE,UAAAC,EAAU,EAAI,EAAQ,aAAa,EACrC,CAAE,cAAAC,GAAe,mBAAAC,EAAmB,EAAI,KAKxCC,GAAM,CAAC,IAAM,IAAM,GAAI,EAIvBC,GAAK,GAILC,GAAK,GAILC,GAAQ,GAIRC,GAAQ,GAmBRC,GAAN,cAAgCR,EAAU,CAIxC,MAMA,SAAW,GAKX,UAAY,GAKZ,cAAgB,GAKhB,OAAS,KAET,IAAM,EAEN,MAAQ,CACN,KAAM,OACN,MAAO,OACP,GAAI,OACJ,MAAO,MACT,EAQA,YAAaS,EAAU,CAAC,EAAG,CAGzBA,EAAQ,mBAAqB,GAE7B,MAAMA,CAAO,EAEb,KAAK,MAAQA,EAAQ,qBAAuB,CAAC,EACzCA,EAAQ,OACV,KAAK,KAAOA,EAAQ,KAExB,CAQA,WAAYC,EAAOC,EAAWC,EAAU,CACtC,GAAIF,EAAM,SAAW,EAAG,CACtBE,EAAS,EACT,MACF,CAeA,GARI,KAAK,OACP,KAAK,OAAS,OAAO,OAAO,CAAC,KAAK,OAAQF,CAAK,CAAC,EAEhD,KAAK,OAASA,EAKZ,KAAK,SACP,OAAQ,KAAK,OAAO,OAAQ,CAC1B,IAAK,GAEH,GAAI,KAAK,OAAO,CAAC,IAAMP,GAAI,CAAC,EAAG,CAE7BS,EAAS,EACT,MACF,CAGA,KAAK,SAAW,GAGhBA,EAAS,EACT,OACF,IAAK,GAGH,GACE,KAAK,OAAO,CAAC,IAAMT,GAAI,CAAC,GACxB,KAAK,OAAO,CAAC,IAAMA,GAAI,CAAC,EACxB,CAGAS,EAAS,EACT,MACF,CAIA,KAAK,SAAW,GAChB,MACF,IAAK,GAGH,GACE,KAAK,OAAO,CAAC,IAAMT,GAAI,CAAC,GACxB,KAAK,OAAO,CAAC,IAAMA,GAAI,CAAC,GACxB,KAAK,OAAO,CAAC,IAAMA,GAAI,CAAC,EACxB,CAEA,KAAK,OAAS,OAAO,MAAM,CAAC,EAG5B,KAAK,SAAW,GAGhBS,EAAS,EACT,MACF,CAEA,KAAK,SAAW,GAChB,MACF,QAII,KAAK,OAAO,CAAC,IAAMT,GAAI,CAAC,GACxB,KAAK,OAAO,CAAC,IAAMA,GAAI,CAAC,GACxB,KAAK,OAAO,CAAC,IAAMA,GAAI,CAAC,IAGxB,KAAK,OAAS,KAAK,OAAO,SAAS,CAAC,GAItC,KAAK,SAAW,GAChB,KACJ,CAGF,KAAO,KAAK,IAAM,KAAK,OAAO,QAAQ,CAGpC,GAAI,KAAK,cAAe,CAOtB,GAAI,KAAK,UAAW,CAGlB,GAAI,KAAK,OAAO,KAAK,GAAG,IAAMC,GAAI,CAChC,KAAK,OAAS,KAAK,OAAO,SAAS,KAAK,IAAM,CAAC,EAC/C,KAAK,IAAM,EACX,KAAK,UAAY,GAWjB,QACF,CACA,KAAK,UAAY,EACnB,CAEA,GAAI,KAAK,OAAO,KAAK,GAAG,IAAMA,IAAM,KAAK,OAAO,KAAK,GAAG,IAAMC,GAAI,CAK5D,KAAK,OAAO,KAAK,GAAG,IAAMA,KAC5B,KAAK,UAAY,IAGnB,KAAK,OAAS,KAAK,OAAO,SAAS,KAAK,IAAM,CAAC,EAC/C,KAAK,IAAM,GAET,KAAK,MAAM,OAAS,QAAa,KAAK,MAAM,OAAS,KAAK,MAAM,IAAM,KAAK,MAAM,QACjF,KAAK,aAAa,KAAK,KAAK,EAE9B,KAAK,WAAW,EAChB,QACF,CAGA,KAAK,cAAgB,GACrB,QACF,CAIA,GAAI,KAAK,OAAO,KAAK,GAAG,IAAMD,IAAM,KAAK,OAAO,KAAK,GAAG,IAAMC,GAAI,CAI5D,KAAK,OAAO,KAAK,GAAG,IAAMA,KAC5B,KAAK,UAAY,IAKnB,KAAK,UAAU,KAAK,OAAO,SAAS,EAAG,KAAK,GAAG,EAAG,KAAK,KAAK,EAG5D,KAAK,OAAS,KAAK,OAAO,SAAS,KAAK,IAAM,CAAC,EAE/C,KAAK,IAAM,EAIX,KAAK,cAAgB,GACrB,QACF,CAEA,KAAK,KACP,CAEAO,EAAS,CACX,CAMA,UAAWC,EAAMC,EAAO,CAItB,GAAID,EAAK,SAAW,EAClB,OAKF,IAAME,EAAgBF,EAAK,QAAQP,EAAK,EACxC,GAAIS,IAAkB,EACpB,OAGF,IAAIC,EAAQ,GACRC,EAAQ,GAGZ,GAAIF,IAAkB,GAAI,CAMxBC,EAAQH,EAAK,SAAS,EAAGE,CAAa,EAAE,SAAS,MAAM,EAKvD,IAAIG,EAAaH,EAAgB,EAC7BF,EAAKK,CAAU,IAAMX,IACvB,EAAEW,EAKJD,EAAQJ,EAAK,SAASK,CAAU,EAAE,SAAS,MAAM,CAInD,MAGEF,EAAQH,EAAK,SAAS,MAAM,EAC5BI,EAAQ,GAKV,OAAQD,EAAO,CACb,IAAK,OACCF,EAAME,CAAK,IAAM,OACnBF,EAAME,CAAK,EAAIC,EAEfH,EAAME,CAAK,GAAK;AAAA,EAAKC,CAAK,GAE5B,MACF,IAAK,QACChB,GAAcgB,CAAK,IACrBH,EAAME,CAAK,EAAIC,GAEjB,MACF,IAAK,KACCf,GAAmBe,CAAK,IAC1BH,EAAME,CAAK,EAAIC,GAEjB,MACF,IAAK,QACCA,EAAM,OAAS,IACjBH,EAAME,CAAK,EAAIC,GAEjB,KACJ,CACF,CAKA,aAAcH,EAAO,CACfA,EAAM,OAASb,GAAca,EAAM,KAAK,IAC1C,KAAK,MAAM,iBAAmB,SAASA,EAAM,MAAO,EAAE,GAGpDA,EAAM,IAAMZ,GAAmBY,EAAM,EAAE,IACzC,KAAK,MAAM,YAAcA,EAAM,IAI7BA,EAAM,OAAS,QACjB,KAAK,KAAK,CACR,KAAMA,EAAM,OAAS,UACrB,QAAS,CACP,KAAMA,EAAM,KACZ,YAAa,KAAK,MAAM,YACxB,OAAQ,KAAK,MAAM,MACrB,CACF,CAAC,CAEL,CAEA,YAAc,CACZ,KAAK,MAAQ,CACX,KAAM,OACN,MAAO,OACP,GAAI,OACJ,MAAO,MACT,CACF,CACF,EAEAf,GAAO,QAAU,CACf,kBAAAS,EACF,IC9YA,IAAAW,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAEA,GAAM,CAAE,SAAAC,EAAS,EAAI,EAAQ,aAAa,EACpC,CAAE,SAAAC,EAAS,EAAI,KACf,CAAE,YAAAC,EAAY,EAAI,KAClB,CAAE,OAAAC,EAAO,EAAI,KACb,CAAE,kBAAAC,EAAkB,EAAI,KACxB,CAAE,cAAAC,EAAc,EAAI,KACpB,CAAE,uBAAAC,EAAuB,EAAI,KAC7B,CAAE,eAAAC,EAAe,EAAI,KACrB,CAAE,MAAAC,EAAM,EAAI,KACZ,CAAE,oBAAAC,EAAoB,EAAI,IAC1B,CAAE,0BAAAC,EAA0B,EAAI,KAElCC,GAAqB,GAYnBC,GAA0B,IAe1BC,GAAa,EAObC,GAAO,EAMPC,GAAS,EAMTC,GAAY,YAMZC,GAAkB,kBAUlBC,GAAN,MAAMC,UAAoB,WAAY,CACpCC,GAAU,CACR,KAAM,KACN,MAAO,KACP,QAAS,IACX,EAEAC,GACAC,GAAmB,GAKnBC,GAAcV,GAEdW,GAAW,KACXC,GAAc,KAEdC,GAKAC,GAQA,YAAaC,EAAKC,EAAsB,CAAC,EAAG,CAE1C,MAAM,EAEN1B,GAAO,KAAK,kBAAkB,IAAI,EAElC,IAAM2B,EAAS,0BACf3B,GAAO,oBAAoB,UAAW,EAAG2B,CAAM,EAE1CnB,KACHA,GAAqB,GACrB,QAAQ,YAAY,kEAAmE,CACrF,KAAM,WACR,CAAC,GAGHiB,EAAMzB,GAAO,WAAW,UAAUyB,CAAG,EACrCC,EAAsB1B,GAAO,WAAW,oBAAoB0B,EAAqBC,EAAQ,qBAAqB,EAE9G,KAAKJ,GAAcG,EAAoB,WACvC,KAAKF,GAAS,CACZ,YAAa,GACb,iBAAkBf,EACpB,EAIA,IAAMmB,EAAWrB,GAEbsB,EAEJ,GAAI,CAEFA,EAAY,IAAI,IAAIJ,EAAKG,EAAS,eAAe,OAAO,EACxD,KAAKJ,GAAO,OAASK,EAAU,MACjC,OAASC,EAAG,CAEV,MAAM,IAAI,aAAaA,EAAG,aAAa,CACzC,CAGA,KAAKZ,GAAOW,EAAU,KAGtB,IAAIE,EAAqBlB,GAKrBa,EAAoB,kBAAoB,KAC1CK,EAAqBjB,GACrB,KAAKK,GAAmB,IAK1B,IAAMa,EAAc,CAClB,SAAU,SACV,UAAW,GAEX,KAAM,OACN,YAAaD,IAAuB,YAChC,cACA,OACJ,SAAU,aACZ,EAGAC,EAAY,OAASzB,GAA0B,eAG/CyB,EAAY,YAAc,CAAC,CAAC,SAAU,CAAE,KAAM,SAAU,MAAO,mBAAoB,CAAC,CAAC,EAGrFA,EAAY,MAAQ,WAGpBA,EAAY,UAAY,QAExBA,EAAY,QAAU,CAAC,IAAI,IAAI,KAAKd,EAAI,CAAC,EAGzC,KAAKG,GAAWtB,GAAYiC,CAAW,EAEvC,KAAKC,GAAS,CAChB,CAQA,IAAI,YAAc,CAChB,OAAO,KAAKb,EACd,CAOA,IAAI,KAAO,CACT,OAAO,KAAKF,EACd,CAMA,IAAI,iBAAmB,CACrB,OAAO,KAAKC,EACd,CAEAc,IAAY,CACV,GAAI,KAAKb,KAAgBR,GAAQ,OAEjC,KAAKQ,GAAcV,GAEnB,IAAMwB,EAAc,CAClB,QAAS,KAAKb,GACd,WAAY,KAAKE,EACnB,EAGMY,EAA+BC,GAAa,CAC5ChC,GAAegC,CAAQ,IACzB,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,EACrC,KAAK,MAAM,GAGb,KAAKC,GAAW,CAClB,EAGAH,EAAY,yBAA2BC,EAGvCD,EAAY,gBAAmBE,GAAa,CAG1C,GAAIhC,GAAegC,CAAQ,EAOzB,GAAIA,EAAS,QAAS,CACpB,KAAK,MAAM,EACX,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,EACrC,MAIF,KAAO,CACL,KAAKC,GAAW,EAChB,MACF,CAKF,IAAMC,EAAcF,EAAS,YAAY,IAAI,eAAgB,EAAI,EAC3DG,EAAWD,IAAgB,KAAOpC,GAAcoC,CAAW,EAAI,UAC/DE,EAAmBD,IAAa,WAAaA,EAAS,UAAY,oBACxE,GACEH,EAAS,SAAW,KACpBI,IAAqB,GACrB,CACA,KAAK,MAAM,EACX,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,EACrC,MACF,CAUA,KAAKpB,GAAcT,GACnB,KAAK,cAAc,IAAI,MAAM,MAAM,CAAC,EAGpC,KAAKa,GAAO,OAASY,EAAS,QAAQA,EAAS,QAAQ,OAAS,CAAC,EAAE,OAEnE,IAAMK,EAAoB,IAAIxC,GAAkB,CAC9C,oBAAqB,KAAKuB,GAC1B,KAAOkB,GAAU,CACf,KAAK,cAAcvC,GACjBuC,EAAM,KACNA,EAAM,OACR,CAAC,CACH,CACF,CAAC,EAED7C,GAASuC,EAAS,KAAK,OACrBK,EACCE,GAAU,CAEPA,GAAO,UAAY,KAEnB,KAAK,MAAM,EACX,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,EAEzC,CAAC,CACL,EAEA,KAAKrB,GAAcxB,GAASoC,CAAW,CACzC,CAMA,KAAMG,IAAc,CASd,KAAKjB,KAAgBR,KAGzB,KAAKQ,GAAcV,GAGnB,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,EAGrC,MAAML,GAAM,KAAKmB,GAAO,gBAAgB,EAMpC,KAAKJ,KAAgBV,KASrB,KAAKc,GAAO,YAAY,QAC1B,KAAKH,GAAS,YAAY,IAAI,gBAAiB,KAAKG,GAAO,YAAa,EAAI,EAI9E,KAAKS,GAAS,GAChB,CAMA,OAAS,CACPjC,GAAO,WAAW,KAAMgB,CAAW,EAE/B,KAAKI,KAAgBR,KACzB,KAAKQ,GAAcR,GACnB,KAAKU,GAAY,MAAM,EACvB,KAAKD,GAAW,KAClB,CAEA,IAAI,QAAU,CACZ,OAAO,KAAKJ,GAAQ,IACtB,CAEA,IAAI,OAAQ2B,EAAI,CACV,KAAK3B,GAAQ,MACf,KAAK,oBAAoB,OAAQ,KAAKA,GAAQ,IAAI,EAGhD,OAAO2B,GAAO,YAChB,KAAK3B,GAAQ,KAAO2B,EACpB,KAAK,iBAAiB,OAAQA,CAAE,GAEhC,KAAK3B,GAAQ,KAAO,IAExB,CAEA,IAAI,WAAa,CACf,OAAO,KAAKA,GAAQ,OACtB,CAEA,IAAI,UAAW2B,EAAI,CACb,KAAK3B,GAAQ,SACf,KAAK,oBAAoB,UAAW,KAAKA,GAAQ,OAAO,EAGtD,OAAO2B,GAAO,YAChB,KAAK3B,GAAQ,QAAU2B,EACvB,KAAK,iBAAiB,UAAWA,CAAE,GAEnC,KAAK3B,GAAQ,QAAU,IAE3B,CAEA,IAAI,SAAW,CACb,OAAO,KAAKA,GAAQ,KACtB,CAEA,IAAI,QAAS2B,EAAI,CACX,KAAK3B,GAAQ,OACf,KAAK,oBAAoB,QAAS,KAAKA,GAAQ,KAAK,EAGlD,OAAO2B,GAAO,YAChB,KAAK3B,GAAQ,MAAQ2B,EACrB,KAAK,iBAAiB,QAASA,CAAE,GAEjC,KAAK3B,GAAQ,MAAQ,IAEzB,CACF,EAEM4B,GAA+B,CACnC,WAAY,CACV,UAAW,KACX,aAAc,GACd,WAAY,GACZ,MAAOnC,GACP,SAAU,EACZ,EACA,KAAM,CACJ,UAAW,KACX,aAAc,GACd,WAAY,GACZ,MAAOC,GACP,SAAU,EACZ,EACA,OAAQ,CACN,UAAW,KACX,aAAc,GACd,WAAY,GACZ,MAAOC,GACP,SAAU,EACZ,CACF,EAEA,OAAO,iBAAiBG,GAAa8B,EAA4B,EACjE,OAAO,iBAAiB9B,GAAY,UAAW8B,EAA4B,EAE3E,OAAO,iBAAiB9B,GAAY,UAAW,CAC7C,MAAOT,GACP,QAASA,GACT,UAAWA,GACX,OAAQA,GACR,WAAYA,GACZ,IAAKA,GACL,gBAAiBA,EACnB,CAAC,EAEDN,GAAO,WAAW,oBAAsBA,GAAO,oBAAoB,CACjE,CACE,IAAK,kBACL,UAAWA,GAAO,WAAW,QAC7B,aAAc,IAAM,EACtB,EACA,CACE,IAAK,aACL,UAAWA,GAAO,WAAW,GAC/B,CACF,CAAC,EAEDJ,GAAO,QAAU,CACf,YAAAmB,GACA,wBAAAN,EACF,ICneA,IAAAqC,GAAAC,EAAA,CAAAC,GAAAC,IAAA,cAEA,IAAMC,GAAS,KACTC,GAAa,KACbC,GAAO,KACPC,GAAe,KACfC,GAAQ,KACRC,GAAa,KACbC,GAAoB,KACpBC,GAAa,KACbC,GAAS,IACTC,GAAO,IACP,CAAE,qBAAAC,EAAqB,EAAIF,GAC3BG,GAAM,KACNC,GAAiB,KACjBC,GAAa,KACbC,GAAY,KACZC,GAAW,KACXC,GAAa,KACbC,GAAe,KACf,CAAE,oBAAAC,GAAqB,oBAAAC,EAAoB,EAAI,KAC/CC,GAAmB,KACnBC,GAAkB,KAExB,OAAO,OAAOpB,GAAW,UAAWU,EAAG,EAEvCZ,EAAO,QAAQ,WAAaE,GAC5BF,EAAO,QAAQ,OAASC,GACxBD,EAAO,QAAQ,KAAOG,GACtBH,EAAO,QAAQ,aAAeI,GAC9BJ,EAAO,QAAQ,MAAQK,GACvBL,EAAO,QAAQ,WAAaM,GAC5BN,EAAO,QAAQ,kBAAoBO,GACnCP,EAAO,QAAQ,WAAaQ,GAC5BR,EAAO,QAAQ,aAAekB,GAE9BlB,EAAO,QAAQ,iBAAmBqB,GAClCrB,EAAO,QAAQ,gBAAkBsB,GACjCtB,EAAO,QAAQ,aAAe,CAC5B,SAAU,KACV,cAAe,KACf,MAAO,KACP,KAAM,KACN,IAAK,KACL,MAAO,IACT,EAEAA,EAAO,QAAQ,YAAc,CAC3B,iBAAkB,IACpB,EAEA,IAAMuB,GAAmB,KACzBvB,EAAO,QAAQ,YAAY,iBAAmBuB,GAE9CvB,EAAO,QAAQ,eAAiBa,GAChCb,EAAO,QAAQ,OAASS,GACxBT,EAAO,QAAQ,KAAO,CACpB,aAAcU,GAAK,aACnB,mBAAoBA,GAAK,kBAC3B,EAEA,SAASc,GAAgBC,EAAI,CAC3B,MAAO,CAACC,EAAKC,EAAMC,IAAY,CAM7B,GALI,OAAOD,GAAS,aAClBC,EAAUD,EACVA,EAAO,MAGL,CAACD,GAAQ,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAY,EAAEA,aAAe,KAClF,MAAM,IAAIf,GAAqB,aAAa,EAG9C,GAAIgB,GAAQ,MAAQ,OAAOA,GAAS,SAClC,MAAM,IAAIhB,GAAqB,cAAc,EAG/C,GAAIgB,GAAQA,EAAK,MAAQ,KAAM,CAC7B,GAAI,OAAOA,EAAK,MAAS,SACvB,MAAM,IAAIhB,GAAqB,mBAAmB,EAGpD,IAAIkB,EAAOF,EAAK,KACXA,EAAK,KAAK,WAAW,GAAG,IAC3BE,EAAO,IAAIA,CAAI,IAGjBH,EAAM,IAAI,IAAIhB,GAAK,YAAYgB,CAAG,EAAE,OAASG,CAAI,CACnD,MACOF,IACHA,EAAO,OAAOD,GAAQ,SAAWA,EAAM,CAAC,GAG1CA,EAAMhB,GAAK,SAASgB,CAAG,EAGzB,GAAM,CAAE,MAAAI,EAAO,WAAAC,EAAaZ,GAAoB,CAAE,EAAIQ,EAEtD,GAAIG,EACF,MAAM,IAAInB,GAAqB,mDAAmD,EAGpF,OAAOc,EAAG,KAAKM,EAAY,CACzB,GAAGJ,EACH,OAAQD,EAAI,OACZ,KAAMA,EAAI,OAAS,GAAGA,EAAI,QAAQ,GAAGA,EAAI,MAAM,GAAKA,EAAI,SACxD,OAAQC,EAAK,SAAWA,EAAK,KAAO,MAAQ,MAC9C,EAAGC,CAAO,CACZ,CACF,CAEA5B,EAAO,QAAQ,oBAAsBoB,GACrCpB,EAAO,QAAQ,oBAAsBmB,GAErC,IAAMa,GAAY,KAA2B,MAC7ChC,EAAO,QAAQ,MAAQ,eAAsBiC,EAAMC,EAAU,OAAW,CACtE,GAAI,CACF,OAAO,MAAMF,GAAUC,EAAMC,CAAO,CACtC,OAASC,EAAK,CACZ,MAAIA,GAAO,OAAOA,GAAQ,UACxB,MAAM,kBAAkBA,CAAG,EAGvBA,CACR,CACF,EACAnC,EAAO,QAAQ,QAAU,KAAmC,QAC5DA,EAAO,QAAQ,SAAW,KAAoC,SAC9DA,EAAO,QAAQ,QAAU,KAAmC,QAC5DA,EAAO,QAAQ,SAAW,KAAoC,SAE9D,GAAM,CAAE,gBAAAoC,GAAiB,gBAAAC,EAAgB,EAAI,KAE7CrC,EAAO,QAAQ,gBAAkBoC,GACjCpC,EAAO,QAAQ,gBAAkBqC,GAEjC,GAAM,CAAE,aAAAC,EAAa,EAAI,KACnB,CAAE,WAAAC,EAAW,EAAI,KAIvBvC,EAAO,QAAQ,OAAS,IAAIsC,GAAaC,EAAU,EAEnD,GAAM,CAAE,aAAAC,GAAc,WAAAC,GAAY,cAAAC,GAAe,UAAAC,GAAW,YAAAC,EAAY,EAAI,KAE5E5C,EAAO,QAAQ,aAAewC,GAC9BxC,EAAO,QAAQ,WAAayC,GAC5BzC,EAAO,QAAQ,cAAgB0C,GAC/B1C,EAAO,QAAQ,UAAY2C,GAC3B3C,EAAO,QAAQ,YAAc4C,GAE7B,GAAM,CAAE,cAAAC,GAAe,mBAAAC,EAAmB,EAAI,KAE9C9C,EAAO,QAAQ,cAAgB6C,GAC/B7C,EAAO,QAAQ,mBAAqB8C,GAEpC,GAAM,CAAE,WAAAC,GAAY,WAAAC,GAAY,aAAAC,EAAa,EAAI,KACjDjD,EAAO,QAAQ,UAAY,KAAyC,UACpEA,EAAO,QAAQ,WAAa+C,GAC5B/C,EAAO,QAAQ,WAAagD,GAC5BhD,EAAO,QAAQ,aAAeiD,GAE9BjD,EAAO,QAAQ,gBAAkB,KAAsD,gBACvFA,EAAO,QAAQ,eAAiB,KAAqD,eAErFA,EAAO,QAAQ,QAAUwB,GAAeZ,GAAI,OAAO,EACnDZ,EAAO,QAAQ,OAASwB,GAAeZ,GAAI,MAAM,EACjDZ,EAAO,QAAQ,SAAWwB,GAAeZ,GAAI,QAAQ,EACrDZ,EAAO,QAAQ,QAAUwB,GAAeZ,GAAI,OAAO,EACnDZ,EAAO,QAAQ,QAAUwB,GAAeZ,GAAI,OAAO,EAEnDZ,EAAO,QAAQ,WAAac,GAC5Bd,EAAO,QAAQ,SAAWgB,GAC1BhB,EAAO,QAAQ,UAAYe,GAC3Bf,EAAO,QAAQ,WAAaiB,GAE5B,GAAM,CAAE,YAAAiC,EAAY,EAAI,KAExBlD,EAAO,QAAQ,YAAckD,KCjL7B,IAAAC,GAAA,GAAAC,GAAAD,GAAA,qBAAAE,GAAA,wBAAAC,KCGO,SAASC,GAAgBC,EAAmD,CACjF,OAAI,OAAOA,GAAQ,WACVA,EAGDC,GAAmBA,EAAO,SAASD,CAAG,CAChD,CCkBO,SAASE,GAAuBC,EAAS,CAC9C,OAAOA,CACT,CC7BA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,KCeO,SAASC,MAAaC,EAAc,CACzC,OAAQC,GAAcA,CACxB,CCjBA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,OAAAE,GAAA,YAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,YAAAC,GAAA,cAAAC,GAAA,UAAAC,GAAA,YAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,SAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,YAAAC,GAAA,WAAAC,GAAA,YAAAC,GAAA,QAAAC,GAAA,UAAAC,GAAA,kBAAAC,GAAA,cAAAC,GAAA,UAAAC,GAAA,WAAAC,KAAA,IAAIC,GAAaC,GAAqBC,GAAUC,GAAMC,GAAM,GACxD,OAAO,QAAY,MACrB,CAAE,YAAAJ,GAAa,oBAAAC,GAAqB,SAAAC,GAAU,KAAAC,EAAK,EAAI,QAAQ,KAAO,CAAC,EACxEC,GAAQ,QAAQ,QAAU,QAAQ,OAAO,OAGnC,IAAM/B,GAAI,CAChB,QAAS,CAAC4B,IAAuBC,IAAY,MAAQC,KAAS,SAC7DH,IAAe,MAAQA,KAAgB,KAAOI,GAEhD,EAEA,SAASC,GAAKC,EAAGC,EAAG,CACnB,IAAIC,EAAM,IAAI,OAAO,WAAWD,CAAC,IAAK,GAAG,EACrCE,EAAO,QAAQH,CAAC,IAAKI,EAAQ,QAAQH,CAAC,IAE1C,OAAO,SAAUI,EAAK,CACrB,MAAI,CAACtC,GAAE,SAAWsC,GAAO,KAAaA,EAC/BF,GAAU,EAAE,GAAGE,GAAK,QAAQD,CAAK,EAAIC,EAAI,QAAQH,EAAKE,EAAQD,CAAI,EAAIE,GAAOD,CACrF,CACD,CAGO,IAAMf,GAAQU,GAAK,EAAG,CAAC,EACjBrB,GAAOqB,GAAK,EAAG,EAAE,EACjBnB,GAAMmB,GAAK,EAAG,EAAE,EAChBb,GAASa,GAAK,EAAG,EAAE,EACnBR,GAAYQ,GAAK,EAAG,EAAE,EACtBd,GAAUc,GAAK,EAAG,EAAE,EACpBf,GAASe,GAAK,EAAG,EAAE,EACnBT,GAAgBS,GAAK,EAAG,EAAE,EAG1BvB,GAAQuB,GAAK,GAAI,EAAE,EACnBX,GAAMW,GAAK,GAAI,EAAE,EACjBjB,GAAQiB,GAAK,GAAI,EAAE,EACnBN,GAASM,GAAK,GAAI,EAAE,EACpBtB,GAAOsB,GAAK,GAAI,EAAE,EAClBZ,GAAUY,GAAK,GAAI,EAAE,EACrBpB,GAAOoB,GAAK,GAAI,EAAE,EAClBP,GAAQO,GAAK,GAAI,EAAE,EACnBlB,GAAOkB,GAAK,GAAI,EAAE,EAClBhB,GAAOgB,GAAK,GAAI,EAAE,EAGlB/B,GAAU+B,GAAK,GAAI,EAAE,EACrB1B,GAAQ0B,GAAK,GAAI,EAAE,EACnB5B,GAAU4B,GAAK,GAAI,EAAE,EACrBxB,GAAWwB,GAAK,GAAI,EAAE,EACtB9B,GAAS8B,GAAK,GAAI,EAAE,EACpB3B,GAAY2B,GAAK,GAAI,EAAE,EACvB7B,GAAS6B,GAAK,GAAI,EAAE,EACpBzB,GAAUyB,GAAK,GAAI,EAAE,ECjDlC,IAAMO,GAAmB,IACnBC,GAAS,CAAC,QAAS,SAAU,OAAQ,UAAW,OAAQ,KAAK,EAE7DC,GAAmD,CAAC,EACtDC,GAAgB,KAAK,IAAI,EACzBC,GAAY,EAEVC,GAAa,OAAO,QAAY,IAAc,QAAQ,IAAM,CAAC,EAEnE,WAAW,QAAUA,GAAW,OAAS,GACzC,WAAW,eAAiBA,GAAW,aAAeA,GAAW,eAAiB,OAAS,GAa3F,IAAMC,GAAW,CACf,OAAOC,EAAgB,CACjB,OAAOA,GAAc,WACvB,WAAW,MAAQA,EAEvB,EACA,SAAU,CACR,IAAMC,EAAO,WAAW,MACxB,kBAAW,MAAQ,GACZA,CACT,EAEA,QAAQD,EAAmB,CAEzB,IAAME,EAA+B,WAAW,MAAM,MAAM,GAAG,EAAE,IAAKC,GAC7DA,EAAE,QAAQ,qBAAsB,MAAM,CAC9C,EAGKC,EAAaF,EAAmB,KAAMG,GACtCA,IAAsB,IAAMA,EAAkB,CAAC,IAAM,IAAY,GAE9DL,EAAU,MAAM,OAAOK,EAAkB,MAAM,GAAG,EAAE,KAAK,IAAI,EAAI,GAAG,CAAC,CAC7E,EAGKC,EAAaJ,EAAmB,KAAMG,GACtCA,IAAsB,IAAMA,EAAkB,CAAC,IAAM,IAAY,GAE9DL,EAAU,MAAM,OAAOK,EAAkB,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,EAAI,GAAG,CAAC,CACtF,EAED,OAAOD,GAAc,CAACE,CACxB,EACA,IAAK,IAAIC,IAAmB,CAC1B,GAAM,CAACP,EAAWQ,EAAQ,GAAGC,CAAI,EAAIF,GAGX,QAAQ,MAAQ,QAAQ,KAGhC,GAAGP,CAAS,IAAIQ,CAAM,GAAI,GAAGC,CAAI,CACrD,EACA,WAAY,CAAC,CACf,EAYA,SAASC,GAAYV,EAAmB,CACtC,IAAMW,EAAgB,CACpB,MAAOjB,GAAOG,KAAcH,GAAO,MAAM,EACzC,QAASK,GAAS,QAAQC,CAAS,EACnC,UAAWA,EACX,IAAKD,GAAS,IACd,OAAQ,IAAM,CAAC,CACjB,EAEMa,EAAY,IAAIL,IAAgB,CACpC,GAAM,CAAE,QAAAM,EAAS,UAAAb,EAAW,MAAAc,EAAO,IAAAC,CAAI,EAAIJ,EAY3C,GATIJ,EAAK,SAAW,GAClBZ,GAAY,KAAK,CAACK,EAAW,GAAGO,CAAI,CAAC,EAInCZ,GAAY,OAASF,IACvBE,GAAY,MAAM,EAGhBI,GAAS,QAAQC,CAAS,GAAKa,EAAS,CAC1C,IAAMG,EAAaT,EAAK,IAAKU,GACvB,OAAOA,GAAQ,SACVA,EAGFC,GAAcD,CAAG,CACzB,EAEKE,EAAK,IAAI,KAAK,IAAI,EAAIvB,EAAa,KACzCA,GAAgB,KAAK,IAAI,EAErB,WAAW,aACbmB,EAAIK,GAAMN,CAAK,EAAEO,GAAKrB,CAAS,CAAC,EAAG,GAAGgB,EAAYI,GAAMN,CAAK,EAAEK,CAAE,CAAC,EAElEJ,EAAIf,EAAW,GAAGgB,EAAYG,CAAE,CAEpC,CACF,EAEA,OAAO,IAAI,MAAMP,EAAW,CAC1B,IAAK,CAACU,EAAGC,IAASZ,EAAcY,CAAI,EACpC,IAAK,CAACD,EAAGC,EAAMC,IAAWb,EAAcY,CAAI,EAAIC,CAClD,CAAC,CACH,CAEA,IAAMC,GAAQ,IAAI,MAAMf,GAAa,CACnC,IAAK,CAACY,EAAGC,IAASxB,GAASwB,CAAI,EAC/B,IAAK,CAACD,EAAGC,EAAMC,IAAWzB,GAASwB,CAAI,EAAIC,CAC7C,CAAC,EAED,SAASN,GAAcM,EAAYE,EAAS,EAAG,CAC7C,IAAMC,EAAQ,IAAI,IAElB,OAAO,KAAK,UACVH,EACA,CAACI,EAAKJ,IAAU,CACd,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,GAAIG,EAAM,IAAIH,CAAK,EACjB,MAAO,eAGTG,EAAM,IAAIH,CAAK,CACjB,SAAW,OAAOA,GAAU,SAC1B,OAAOA,EAAM,SAAS,EAGxB,OAAOA,CACT,EACAE,CACF,CACF,CASO,SAASG,GAAQC,EAAW,KAAc,CAC/C,IAAMC,EAAOpC,GACV,IAAI,CAAC,CAACK,EAAc,GAAAO,CAAI,IAChB,GAAGP,CAAS,IAAIO,EACpB,IAAKU,GACA,OAAOA,GAAQ,SACVA,EAEA,KAAK,UAAUA,CAAG,CAE5B,EACA,KAAK,GAAG,CAAC,EACb,EACA,KAAK;AAAA,CAAI,EAEZ,OAAIc,EAAK,OAASD,EACTC,EAGFA,EAAK,MAAM,CAACD,CAAQ,CAC7B,CAEO,SAASE,IAAY,CAC1BrC,GAAY,OAAS,CACvB,CAGA,IAAOsC,GAAQC,GC9JR,IAAMC,GAAgC,CAC3C,SACA,eACA,uBACA,uBACA,uBACA,qBACA,qBACA,qBACA,4BACA,4BACA,4BACA,0BACA,0BACA,0BACA,aACA,2BACA,iCACA,iCACA,cACA,mBACA,qBACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,SACA,KACF,EC5DA,IAAMC,GAAiC,kBAQhC,SAASC,GAAeC,EAA4BC,EAAoB,CAC7E,IAAMC,EAAQD,IAAS,MACvB,OAAID,EAAa,SAAS,SAAS,EAC1BE,EAAQ,wBAA0B,gBAAgBF,CAAY,YAC5DA,EAAa,SAAS,QAAQ,EAChCE,EACH,GAAGJ,EAA8B,cACjC,GAAGA,EAA8B,IAAIE,CAAY,cAE9CE,EACH,GAAGJ,EAA8B,WACjC,GAAGA,EAA8B,IAAIE,CAAY,UAEzD,CCxBA,OAAOG,OAAQ,qBACf,OAAOC,OAAQ,mBACf,OAAOC,OAAQ,UCYR,IAAMC,GAAUC,OAAOC,IAAI,qBAAA,EAMrBC,GAAaF,OAAOC,IAAI,wBAAA,EAIxBE,GAAqB,mCCdrBC,GAAYC,GACvBC,GAAQD,GAA0B,OAAVA,GAAU,UAGvBE,GACXC,GAEgBA,GAAAA,CAAAA,CAAAA,EACYC,EAAAA,EAYjBC,GAAeA,CAC1BC,EACAN,EACAO,IAAAA,CAEA,GAAIL,GAAUI,CAAAA,EAAU,CACtB,IAAMZ,EAAUY,EAAQF,EAAAA,EAAAA,EAAAA,CAClBI,QAAEA,EAAOC,WAAEA,CAAAA,EAAef,EAAQgB,MAAMV,CAAAA,EAI9C,OAHIQ,GAAWC,GACbE,OAAOC,KAAKH,CAAAA,EAAYI,QAASC,GAAQP,EAAOO,EAAKL,EAAWK,CAAAA,CAAAA,CAAAA,EAE3DN,CACT,CAEA,GAAIT,GAASO,CAAAA,EAAU,CACrB,GAAA,CAAKP,GAASC,CAAAA,EAAQ,MAAA,GAGtB,GAAIe,MAAMC,QAAQV,CAAAA,EAAU,CAC1B,GAAA,CAAKS,MAAMC,QAAQhB,CAAAA,EAAQ,MAAA,GAC3B,IAAIiB,EAAgB,CAAA,EAChBC,EAAc,CAAA,EACdC,EAAiC,CAAA,EAErC,QAAWC,KAAKd,EAAQM,KAAAA,EAAQ,CAC9B,IAAMS,EAAaf,EAAQc,CAAAA,EACvBlB,GAAUmB,CAAAA,GAAeA,EAAWjB,EAAAA,EACtCe,EAAiBG,KAAKD,CAAAA,EACbF,EAAiBI,OAC1BL,EAAYI,KAAKD,CAAAA,EAEjBJ,EAAcK,KAAKD,CAAAA,CAEvB,CAEA,GAAIF,EAAiBI,OAAQ,CAC3B,GAAIJ,EAAiBI,OAAS,EAC5B,MAAU,IAAAC,MACR,0FAAA,EAIJ,GAAIxB,EAAMuB,OAASN,EAAcM,OAASL,EAAYK,OACpD,MAAA,GAGF,IAAME,EAAczB,EAAM0B,MAAM,EAAGT,EAAcM,MAAAA,EAC3CI,EACJT,EAAYK,SAAW,EAAI,CAAA,EAAKvB,EAAM0B,MAAAA,CAAOR,EAAYK,MAAAA,EACrDK,EAAe5B,EAAM0B,MACzBT,EAAcM,OACdL,EAAYK,SAAW,EAAIM,IAAAA,CAAYX,EAAYK,MAAAA,EAGrD,OACEN,EAAca,MAAM,CAACC,EAAYX,IAC/Bf,GAAa0B,EAAYN,EAAYL,CAAAA,EAAIb,CAAAA,CAAAA,GAE3CW,EAAYY,MAAM,CAACC,EAAYX,IAC7Bf,GAAa0B,EAAYJ,EAAUP,CAAAA,EAAIb,CAAAA,CAAAA,IAExCY,EAAiBI,SAAW,GAEzBlB,GAAac,EAAiB,CAAA,EAAIS,EAAcrB,CAAAA,EAExD,CAEA,OAAOD,EAAQiB,SAAWvB,EAAMuB,QAC5BjB,EAAQwB,MAAM,CAACC,EAAYX,IACzBf,GAAa0B,EAAY/B,EAAMoB,CAAAA,EAAIb,CAAAA,CAAAA,CAG3C,CAEA,OAAOyB,QAAQC,QAAQ3B,CAAAA,EAASwB,MAAOI,GAAAA,CACrC,IAAMH,EAAazB,EAAQ4B,CAAAA,EAE3B,OACGA,KAAKlC,GAnFLE,GAFPC,EAqFuC4B,CAAAA,GAnFhB5B,EAAEC,EAAAA,EAAAA,EAAmB+B,cAAgB,aAoFtD9B,GAAa0B,EAAY/B,EAAMkC,CAAAA,EAAI3B,CAAAA,EAtFzCJ,IAAAA,CAsF+C,CAAA,CAG/C,CAEA,OAAOQ,OAAOyB,GAAGpC,EAAOM,CAAAA,CAAO,EAIpB+B,GAAoB/B,GAAAA,CAAAA,IAELgC,EAAAC,EAAAC,EAD1B,OAAIzC,GAASO,CAAAA,EACPJ,GAAUI,CAAAA,GACZgC,GAAAC,GAAOC,EAAAlC,EAAQF,EAAAA,EAAAA,GAAmBiC,mBAAgB,KAAhBA,OAA3BE,EAAAE,KAAAD,CAAAA,IAA+CF,KAAAA,EAAI,CAAA,EAExDvB,MAAMC,QAAQV,CAAAA,EAAiBoC,GAAQpC,EAAS+B,EAAAA,EAC7CK,GAAQ/B,OAAOgC,OAAOrC,CAAAA,EAAU+B,EAAAA,EAElC,CAAA,CAAA,EAIIK,GAAUA,CACrBE,EACAC,IACQD,EAAGE,OAAY,CAACC,EAAK5C,IAAM4C,EAAIC,OAAOH,EAAE1C,CAAAA,CAAAA,EAAK,CAAA,CAAA,EEAvD,SAAS8C,GACPC,EAAAA,CAEA,OAAOC,OAAOC,OAAOF,EAAS,CAC5BG,SAAUA,IAAMA,GAASH,CAAAA,EACzBI,IAAMC,GAAYC,GAAaN,EAASK,CAAAA,EACxCE,GAAKF,GAAYG,GAAMR,EAASK,CAAAA,EAChCI,OAASC,GACPA,IADOA,OACaD,GAAOT,CAAAA,EAAWS,GAAOC,EAAKV,CAAAA,CAAAA,CAAAA,CAExD,CAyCgB,SAAAW,GAGdC,EAAAA,CACA,OAAOC,GAAU,CACfC,CAACA,EAAAA,EAAO,KACC,CACLC,MAAsBC,GAAAA,CACpB,IAAIC,EAAwC,CAAA,EACtCC,EAAWA,CAACC,EAAaH,IAAAA,CAC7BC,EAAWE,CAAAA,EAAOH,CACpB,EACA,OAAIA,IAAJ,QACEI,GAAiBR,CAAAA,EAASS,QAASF,GACjCD,EAASC,EAAAA,MAAKG,CAAAA,EAET,CAAEC,QAAAA,GAAeN,WAAAA,CAAAA,GAGnB,CAAEM,QADOC,GAAaZ,EAASI,EAAOE,CAAAA,EAC3BD,WAAAA,CAAAA,CAAAA,EAEpBG,iBAAkBA,IAAMA,GAAiBR,CAAAA,EACzCa,YAAa,UAAA,EAAA,CAAA,CAIrB,CA6NgB,SAAAC,MAGXC,EAAAA,CACH,OAAOC,GAAU,CACfC,CAACA,EAAAA,EAAU,KAAA,CACTC,MAAQC,GAAAA,CACN,IAAIC,EAAwC,CAAA,EACtCC,EAAWA,CAACC,EAAaH,IAAAA,CAC7BC,EAAWE,CAAAA,EAAOH,CAAAA,EAKpB,MAAO,CAAEI,QAHQR,EAAuCS,MAAOC,GAC7DC,GAAaD,EAAGN,EAAOE,CAAAA,CAAAA,EAEPD,WAAAA,CAAAA,CAAAA,EAEpBO,iBAAkBA,IAChBC,GAAQb,EAAuCY,EAAAA,EACjDE,YAAa,KAAA,EAAA,CAAA,CAGnB,CAegB,SAAAC,MAGXf,EAAAA,CACH,OAAOC,GAAU,CACfC,CAACA,EAAAA,EAAU,KAAA,CACTC,MAAsBC,GAAAA,CACpB,IAAIC,EAAwC,CAAA,EACtCC,EAAWA,CAACC,EAAaH,IAAAA,CAC7BC,EAAWE,CAAAA,EAAOH,CACpB,EAQA,OAPAS,GACEb,EACAY,EAAAA,EACAI,QAAST,GAAQD,EAASC,EAAAA,MAAKU,CAAAA,EAI1B,CAAET,QAHQR,EAAuCkB,KAAMR,GAC5DC,GAAaD,EAAGN,EAAOE,CAAAA,CAAAA,EAEPD,WAAAA,CAAAA,CAAAA,EAEpBO,iBAAkBA,IAChBC,GAAQb,EAAuCY,EAAAA,EACjDE,YAAa,IAAA,EAAA,CAAA,CAGnB,CAiDM,SAAUK,EACdC,EAAAA,CAKA,MAAO,CACLlB,CAACA,EAAAA,EAAU,KAAA,CACTC,MAAsBC,IAA2B,CAC/CI,QAASa,EAAQD,EAAUhB,CAAAA,CAAAA,EAAAA,EAAAA,CAInC,CAmCgB,SAAAkB,MACXC,EAAAA,CAEH,IAAMhB,EACe,OAAZgB,EAAK,CAAA,GAAO,SAAWA,EAAK,CAAA,EAAA,OAC/BC,EACJD,EAAKE,SAAW,EACZF,EAAK,CAAA,EACc,OAAZA,EAAK,CAAA,GAAO,SAAP,OAEZA,EAAK,CAAA,EACX,OAAOtB,GAAU,CACfC,CAACA,EAAAA,EAAQ,KACA,CACLC,MAAQC,GAAAA,CACN,IAAIC,EAAsC,CACxC,CAACE,GAAOmB,EAAAA,EAA6BtB,CAAAA,EAKvC,MAAO,CACLI,QACEgB,IADFhB,QAGMG,GAAaa,EAASpB,EAPbE,CAACC,EAAaH,IAAAA,CAC7BC,EAAWE,CAAAA,EAAOH,CAAAA,CAAAA,EAOlBC,WAAYA,CAAAA,CAAAA,EAGhBO,iBAAkBA,IAChB,CAACL,GAAOmB,EAAAA,EAA4BC,OAClCH,IADkCG,OACV,CAAA,EAAKf,GAAiBY,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAK1D,CAMA,SAASI,GAAYC,EAAAA,CACnB,OAAoB,OAANA,GAAM,QACtB,CAEA,SAASC,GAAYD,EAAAA,CACnB,OAAoB,OAANA,GAAM,QACtB,CAMA,SAASE,GAAYF,EAAAA,CACnB,OAAoB,OAANA,GAAM,QACtB,CA8BO,IAAMG,GAAkB/B,GAAUkB,EAhDzC,SAAmBU,EAAAA,CACjB,MAAA,EACF,CAAA,CAAA,EA8CO,IA2GDI,GACJC,GAEAC,OAAOC,OAAOC,GAAUH,CAAAA,EAAU,CAChCI,WAAaC,GAAAA,CACXN,OAAAA,GAAgBO,GAAaN,GAvFjCO,EAuFqDF,EArFrDG,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAML,WAAWG,CAAAA,CAAAA,EAAAA,CAAAA,EAFpDA,IAAAA,CAuF2D,EACzDI,SAAWN,GAAAA,CACTN,OAAAA,GAAgBO,GAAaN,GA3EjCY,EA2EmDP,EAzEnDG,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAME,SAASC,CAAAA,CAAAA,EAAAA,CAAAA,EAFlDA,IAAAA,CA2EyD,EACvDC,UAAYC,GACVf,GAAgBO,GAAaN,GAhEUc,GAC3CN,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAMM,QAAUD,CAAAA,GA+DCA,CAAAA,CAAAA,CAAAA,EAClDC,OAASC,GACPjB,GAAgBO,GAAaN,GAtDOgB,GACxCR,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAMM,SAAWC,CAAAA,GAqDHA,CAAAA,CAAAA,CAAAA,EAC/CC,UAAYC,GACVnB,GAAgBO,GAAaN,GA5CUkB,GAC3CV,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAMM,QAAUG,CAAAA,GA2CCA,CAAAA,CAAAA,CAAAA,EAClDC,SAAWd,GAAAA,CACTN,OAAAA,GAAgBO,GAAaN,GAjCjCoB,EAiCmDf,EA/BnDG,EAAMC,GAAUC,GAASD,CAAAA,GAAUA,EAAMU,SAASC,CAAAA,CAAAA,EAAAA,CAAAA,EAFlDA,IAAAA,CAiCyD,EACvDC,MAAQhB,GAAAA,CAAgBN,OAAAA,GAAgBO,GAAaN,GApBvDsB,EAoBsEjB,EAlBtEG,EAAMC,GAAUC,GAASD,CAAAA,GAAUc,EAAQd,EAAMe,MAAMF,CAAAA,CAAAA,EAAAA,CAAAA,EAFvDA,IAAAA,CAqBC,CAAA,CAAA,EAWUG,GAAwB1B,GAAgBS,EAAKE,EAAAA,CAAAA,EA0HpDgB,GACJ1B,GAEAC,OAAOC,OAAOC,GAAUH,CAAAA,EAAU,CAChC2B,QAASA,CAACb,EAAaI,IACrBQ,GAAgBpB,GAAaN,GAnHnB2B,CACdb,EACAI,IAEAV,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUK,GAAOL,GAASS,GAAOT,CAAAA,GA+GRK,EAAKI,CAAAA,CAAAA,CAAAA,EACrDW,GAAKX,GAAgBQ,GAAgBpB,GAAaN,GApGpDkB,GAEAV,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,EAAQS,CAAAA,GAkGqBA,CAAAA,CAAAA,CAAAA,EAC9DY,GAAKhB,GAAgBY,GAAgBpB,GAAaN,GAvFpDc,GAEAN,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,EAAQK,CAAAA,GAqFqBA,CAAAA,CAAAA,CAAAA,EAC9DiB,IAAMb,GAAgBQ,GAAgBpB,GAAaN,GA1ErDkB,GAEAV,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,GAASS,CAAAA,GAwEsBA,CAAAA,CAAAA,CAAAA,EAChEc,IAAMlB,GAAgBY,GAAgBpB,GAAaN,GA7DrDc,GAEAN,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,GAASK,CAAAA,GA2DsBA,CAAAA,CAAAA,CAAAA,EAChEmB,IAAKA,IAAMP,GAAgBpB,GAAaN,EAhD1CQ,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUyB,OAAOC,UAAU1B,CAAAA,CAAAA,CAAAA,CAAAA,EAiDlD2B,OAAQA,IAAMV,GAAgBpB,GAAaN,EArC7CQ,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUyB,OAAOG,SAAS5B,CAAAA,CAAAA,CAAAA,CAAAA,EAsCjD6B,SAAUA,IAAMZ,GAAgBpB,GAAaN,EA1B/CQ,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,EAAQ,CAAA,CAAA,CAAA,EA2BzC8B,SAAUA,IAAMb,GAAgBpB,GAAaN,EAf/CQ,EAAMC,GAAUmB,GAASnB,CAAAA,GAAUA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,EA2BhC+B,GAAwBd,GAAgBlB,EAAKoB,EAAAA,CAAAA,EAsGpDa,GACJzC,GAEAC,OAAOC,OAAOC,GAAUH,CAAAA,EAAU,CAChC2B,QAASA,CAACb,EAAaI,IACrBuB,GAAgBnC,GAAaN,GA/Fb0C,CAKpB5B,EACAI,IAEAV,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUK,GAAOL,GAASS,GAAOT,CAAAA,GAuFFK,EAAKI,CAAAA,CAAAA,CAAAA,EAC3DW,GAAKX,GAAgBuB,GAAgBnC,GAAaN,GA5EpDkB,GAEAV,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,EAAQS,CAAAA,GA0E2BA,CAAAA,CAAAA,CAAAA,EACpEY,GAAKhB,GAAgB2B,GAAgBnC,GAAaN,GA/DpDc,GAEAN,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,EAAQK,CAAAA,GA6D2BA,CAAAA,CAAAA,CAAAA,EACpEiB,IAAMb,GACJuB,GAAgBnC,GAAaN,GAnDjCkB,GAEAV,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,GAASS,CAAAA,GAiDQA,CAAAA,CAAAA,CAAAA,EAClDc,IAAMlB,GACJ2B,GAAgBnC,GAAaN,GAvCjCc,GAEAN,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,GAASK,CAAAA,GAqCQA,CAAAA,CAAAA,CAAAA,EAClDwB,SAAUA,IAAMG,GAAgBnC,GAAaN,EA1B/CQ,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,EAAQ,CAAA,CAAA,CAAA,EA2BzC8B,SAAUA,IAAME,GAAgBnC,GAAaN,EAf/CQ,EAAMC,GAAUkC,GAASlC,CAAAA,GAAUA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,EA0BhCmC,GAAwBH,GAAgBjC,EAAKmC,EAAAA,CAAAA,EAU7CE,GAA0B1C,GAAUK,EAtcjD,SAAsBsC,EAAAA,CACpB,OAAoB,OAANA,GAAM,SACtB,CAAA,CAAA,EA8caC,GAAwB5C,GAAUK,EAxc/C,SAAqBsC,EAAAA,CACnB,OAAoB,OAANA,GAAM,QACtB,CAAA,CAAA,EAgdaE,GAA0B7C,GAAUK,EA9cjD,SAAsBsC,EAAAA,CACpB,OAAOA,GAAAA,IACT,CAAA,CAAA,EAsdaG,GAAkC9C,GAAUK,EApdzD,SAAuBsC,EAAAA,CACrB,OAAOA,GAAAA,IACT,CAAA,CAAA,EC9oBM,IAAOI,GAAP,cAAkCC,KAAAA,CACtCC,YAAmBC,EAAAA,CACjB,IAAIC,EACJ,GAAA,CACEA,EAAiBC,KAAKC,UAAUH,CAAAA,CAClC,MAASI,CACPH,EAAiBD,CACnB,CACAK,MAAM,oDAAoDJ,CAAAA,EAAAA,EAAkBK,KAP3DN,MAAAA,OAAAM,KAAKN,MAALA,CAQnB,CAAA,ECHIO,GAA+B,CACnCC,QAAAA,GACAC,MAAAA,MAAOC,EAmBO,SAAAC,GACdF,EAAAA,CAEA,OAAO,IAAIG,GAAgBH,EAAOF,EAAAA,CACpC,CAWA,IAAMK,GAAN,MAAMA,CAAAA,CACJb,YAAoBC,EAAsBa,EAAAA,CAAyBP,KAA/CN,MAAAA,OAAAM,KAAsBO,MAAAA,OAAtBP,KAAKN,MAALA,EAAsBM,KAAKO,MAALA,CAA4B,CAEtEC,QAAQC,EAAAA,CACN,GAAIT,KAAKO,MAAML,QAAS,OAAA,KAExB,IAAMQ,EACJD,EAAKA,EAAKE,OAAS,CAAA,EAEfC,EAA6B,CAACH,EAAK,CAAA,CAAA,EACrCI,EAEAJ,EAAKE,SAAW,GAAwB,OAAZF,EAAK,CAAA,GAAO,WAE1CI,EAAYJ,EAAK,CAAA,EACRA,EAAKE,OAAS,GAEvBC,EAASE,KAAAA,GAAQL,EAAKM,MAAM,EAAGN,EAAKE,OAAS,CAAA,CAAA,EAG/C,IAAIK,EAAAA,GACAC,EAAoC,CAAA,EAClCC,EAASA,CAACC,EAAahB,IAAAA,CAC3Ba,EAAAA,GACAC,EAASE,CAAAA,EAAOhB,CAClB,EAYMI,EAAAA,CATJK,EAASQ,KAAMC,GAAYC,GAAaD,EAASrB,KAAKN,MAAOwB,CAAAA,CAAAA,GAC5DL,GAAAA,CAAoBA,EAAUb,KAAKN,KAAAA,EAalCO,GAJA,CACEC,QAAAA,GACAC,MAAOO,EATMM,EACfO,MAA8BN,EAC5BA,EAASM,EAAAA,EACTN,EACFjB,KAAKN,MAKwBM,KAAKN,KAAAA,CAAAA,EAItC,OAAW,IAAAY,EAAgBN,KAAKN,MAAOa,CAAAA,CACzC,CAEAiB,KACEX,EACAH,EAAAA,CAEA,GAAIV,KAAKO,MAAML,QAAS,OAAWF,KAEnC,IAAME,EAAUuB,EAAQZ,EAAUb,KAAKN,KAAAA,EAEvC,OAAO,IAAIY,EACTN,KAAKN,MACLQ,EACI,CAAEA,QAAAA,GAAeC,MAAOO,EAAQV,KAAKN,MAAOM,KAAKN,KAAAA,CAAAA,EACjDO,EAAAA,CAER,CAEAyB,UAAUhB,EAAAA,CACR,OAAIV,KAAKO,MAAML,QAAgBF,KAAKO,MAAMJ,MACnCO,EAAQV,KAAKN,KAAAA,CACtB,CAEAiC,YAAAA,CACE,GAAI3B,KAAKO,MAAML,QAAS,OAAWF,KAACO,MAAMJ,MAE1C,MAAU,IAAAZ,GAAmBS,KAAKN,KAAAA,CACpC,CAEAkC,KAAAA,CACE,OAAW5B,KAAC2B,WAAAA,CACd,CAEAE,YAAAA,CACE,OAAO7B,IACT,CAAA,ENzHF,OAAS,aAAA8B,OAAiB,YOHnB,IAAMC,GAAO,CAClB,KAAMC,GAAO,aAAa,CAC5B,EACaC,GAAS,CACpB,KAAM,IAAM,CAAC,QAAQ,IAAI,uBAC3B,EAIO,SAASC,GAAKC,KAAiBC,EAAuB,CACvDC,GAAO,KAAK,GACd,QAAQ,KAAK,GAAGC,GAAK,IAAI,IAAIH,CAAO,GAAI,GAAGC,CAAc,CAE7D,CPLA,IAAMG,GAAOC,GAAUC,GAAG,IAAI,EAExBC,GAAQC,GAAM,qBAAqB,EAEnCC,GAA0B,CAAC,QAAS,QAAS,OAAO,EA0D1D,eAAsBC,IAA8B,CAClD,IAAMC,EAAWC,GAAG,SAAS,EACvBC,EAAO,QAAQ,KACrB,GAAIF,IAAa,UAAW,CAC1B,IAAMG,EAAU,MAAMC,GAAiB,iBAAiB,EACxD,GAAID,GAAWA,EAAQ,KAAK,EAAE,OAAS,EAAG,CAExC,IAAME,EADQ,YACM,KAAKF,CAAO,EAChC,GAAIE,EACF,MAAO,CACL,SAAU,UACV,aAAc,UAAUA,EAAM,CAAC,CAAC,GAChC,KAAAH,CACF,CAEJ,CACF,CAEA,GAAIF,IAAa,QACf,MAAO,CACL,SAAAA,EACA,KAAAE,CACF,EAGF,IAAMI,EAAa,MAAMC,GAAc,EACjCC,EAAgB,MAAMC,GAAiB,EACvCC,EAAsBC,GAA2B,CAAE,KAAAT,EAAM,cAAAM,EAAe,aAAcF,EAAW,YAAa,CAAC,EAC/G,CAAE,OAAAM,CAAO,EAAI,MAAMC,GAAcH,CAAmB,EAE1D,MAAO,CACL,SAAU,QACV,OAAAE,EACA,KAAAV,EACA,cAAAM,EACA,GAAGF,CACL,CACF,CAEO,SAASQ,GAAYC,EAAoC,CAC9D,IAAMC,EAAU,uBACVC,EAAc,4BAEdC,EAAUF,EAAQ,KAAKD,CAAc,EACrCI,EAAMD,GAAWA,EAAQ,CAAC,GAAKA,EAAQ,CAAC,EAAE,YAAY,GAAM,GAE5DE,EAAcH,EAAY,KAAKF,CAAc,EAC7CM,EAAUD,GAAeA,EAAY,CAAC,GAAKA,EAAY,CAAC,EAAE,YAAY,GAAM,GAiB5Ed,EAAagB,GAAM,CAAE,GAAAH,EAAI,OAAAE,CAAO,CAAC,EACpC,KACC,CAAE,GAAI,QAAS,EACf,CAAC,CAAE,GAAIE,CAAe,KACnB,CACC,aAAc,OACd,aAAcA,EACd,eAAAA,CACF,EACJ,EACC,KACC,CAAE,GAAI,UAAW,EACjB,CAAC,CAAE,GAAIA,CAAe,KACnB,CACC,aAAc,MACd,aAAc,SACd,eAAAA,CACF,EACJ,EACC,KACC,CAAE,GAAI,OAAQ,EACd,CAAC,CAAE,GAAIA,CAAe,KACnB,CACC,aAAc,QACd,eAAAA,EACA,aAAc,OAChB,EACJ,EACC,KACC,CAAE,GAAI,QAAS,EACf,CAAE,GAAI,QAAS,EACf,CAAC,CAAE,GAAIA,CAAe,KACnB,CACC,aAAc,SACd,aAAc,SACd,eAAAA,CACF,EACJ,EACC,KACC,CAAE,GAAI,MAAO,EACb,CAAE,GAAI,QAAS,EACf,CAAE,GAAI,QAAS,EACf,CAAC,CAAE,GAAIA,CAAe,KACnB,CACC,aAAc,OACd,aAAc,OACd,eAAAA,CACF,EACJ,EACC,KACC,CAAC,CAAE,OAAAF,CAAO,IAAMA,EAAO,SAAS,QAAQ,GAAKA,EAAO,SAAS,QAAQ,EACrE,CAAC,CAAE,GAAIE,CAAe,KACnB,CACC,aAAc,SACd,aAAc,SACd,eAAAA,CACF,EACJ,EACC,KACC,CAAC,CAAE,OAAAF,CAAO,IAAMF,IAAO,QAAUE,EAAO,SAAS,MAAM,EACvD,CAAC,CAAE,GAAIE,CAAe,KACnB,CACC,aAAc,SACd,aAAc,OACd,eAAAA,CACF,EACJ,EACC,KACC,CAAC,CAAE,OAAAF,CAAO,IACRA,EAAO,SAAS,QAAQ,GAAKA,EAAO,SAAS,QAAQ,GAAKA,EAAO,SAAS,MAAM,GAAKA,EAAO,SAAS,MAAM,EAC7G,CAAC,CAAE,GAAIE,CAAe,KACnB,CACC,aAAc,OACd,aAAc,OACd,eAAAA,CACF,EACJ,EACC,UAAU,CAAC,CAAE,GAAIA,CAAe,KAExB,CACL,aAAc,OACd,aAAc,OACd,eAAAA,CACF,EACD,EAEH,OAAA3B,GAAM;AAAA,EAAuB,KAAK,UAAUU,EAAY,KAAM,CAAC,CAAC,EAAE,EAC3DA,CACT,CAEA,eAAsBC,IAAqC,CAGzD,IAAMiB,EAAgB,kBACtB,GAAI,CACF,IAAMT,EAAiB,MAAMU,GAAG,SAASD,EAAe,CAAE,SAAU,OAAQ,CAAC,EAC7E,OAAOV,GAAYC,CAAc,CACnC,MAAY,CACV,MAAO,CACL,aAAc,OACd,aAAc,OACd,eAAgB,MAClB,CACF,CACF,CAMO,SAASW,GAAoBC,EAAuD,CACzF,IAAMtB,EAAQ,4BAA4B,KAAKsB,CAAK,EACpD,GAAItB,EAAO,CACT,IAAMuB,EAAiB,GAAGvB,EAAM,CAAC,CAAC,KAClC,OAAOwB,GAAmBD,CAAc,CAC1C,CAGF,CAMO,SAASE,GAAmBH,EAA2C,CAC5E,IAAMtB,EAAQ,0BAA0B,KAAKsB,CAAK,EAClD,GAAItB,EAAO,CACT,IAAMuB,EAAiB,GAAGvB,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,GAAK,IAAI,KACrD,OAAOwB,GAAmBD,CAAc,CAC1C,CAGF,CAEA,SAASC,GAAmB1B,EAA6C,CACvE,IAAM4B,GAAoB,IAAM,CAC9B,GAAIC,GAAW7B,CAAO,EACpB,OAAOA,EAMT,IAAM8B,EAAe9B,EAAQ,MAAM,GAAG,EACtC,OAAA8B,EAAa,CAAC,EAAI,IACXA,EAAa,KAAK,GAAG,CAC9B,GAAG,EAGH,GAAInC,GAAwB,SAASiC,CAAgB,EACnD,OAAOA,CAIX,CAQO,SAASpB,GAA2BuB,EAAwC,CACjF,OAAOZ,GAAMY,CAAI,EACd,KAAK,CAAE,aAAc,MAAO,EAAG,KAE9BtC,GAAM,6CAA6C,EAC5C,CAAC,OAAQ,UAAU,EAC3B,EACA,KAAK,CAAE,aAAc,QAAS,EAAG,CAAC,CAAE,cAAAY,CAAc,KAEjDZ,GAAM,4DAA4D,EAC3D,CAAC,YAAYY,CAAa,aAAc,QAAQA,CAAa,YAAY,EACjF,EACA,KAAK,CAAE,aAAc,MAAO,EAAG,KAE9BZ,GAAM,2CAA2C,EAC1C,CAAC,SAAU,YAAY,EAC/B,EACA,UAAU,CAAC,CAAE,aAAAuC,EAAc,KAAAjC,EAAM,cAAAM,CAAc,KAE9CZ,GAAM,+CAA+CuC,CAAY,QAAQjC,CAAI,KAAKM,CAAa,GAAG,EAC3F,CAAC,EACT,CACL,CAsBA,eAAsBK,GAAcH,EAAiE,CACnG,IAAM0B,EAAkB,wBAClBC,EAAqD,MAAMC,GAAsB5B,CAAmB,EAE1G,GAAI2B,EAAgC,CAClCzC,GAAM,uDAAuDyC,CAA8B,EAAE,EAC7F,IAAME,EAAgBT,GAAmBO,CAA8B,EAEvE,GADAzC,GAAM,iCAAiC2C,CAAa,EAAE,EAClDA,EACF,MAAO,CAAE,OAAQA,EAAe,SAAU,sBAAuB,CAErE,CAEA3C,GAAM,oDAAoD,EAC1D,IAAI4C,EAAqC,MAAMpC,GAW7C,yEAAyEgC,CAAe,EAC1F,EASA,GAPKI,IAIHA,EAAiB,MAAMF,GAAsB,CAAC,SAAU,aAAc,OAAQ,UAAU,CAAC,GAGvFE,EAAgB,CAClB5C,GAAM,iEAAiE4C,CAAc,EAAE,EACvF,IAAMD,EAAgBT,GAAmBU,CAAc,EAEvD,GADA5C,GAAM,iCAAiC2C,CAAa,EAAE,EAClDA,EACF,MAAO,CAAE,OAAQA,EAAe,SAAU,UAAW,CAEzD,CAIA,IAAME,EAAyC,MAAMrC,GAAiB,oBAAoB,EAE1F,GAAIqC,EAAoB,CACtB7C,GAAM,sCAAsC6C,CAAkB,EAAE,EAChE,IAAMC,EAAiBhB,GAAoBe,CAAkB,EAE7D,GADA7C,GAAM,kCAAkC8C,CAAc,EAAE,EACpDA,EACF,MAAO,CAAE,OAAQA,EAAgB,SAAU,gBAAiB,CAEhE,CAGA,OAAA9C,GAAM,8DAA8D,EAC7D,CAAC,CACV,CAOA,eAAe0C,GAAsBK,EAAuB,CAC1D,QAAWC,KAAOD,EAAa,CAC7B,IAAM/B,EAAS,MAAMiC,GAAWD,CAAG,EACnC,GAAIhC,EACF,OAAOA,CAEX,CAEF,CAOA,eAAeiC,GAAWC,EAAmB,CAC3C,GAAI,CAEF,OADoB,MAAMrB,GAAG,QAAQqB,CAAS,GAC3B,KAAMC,GAAUA,EAAM,WAAW,YAAY,GAAK,CAACA,EAAM,WAAW,aAAa,CAAC,CACvG,OAAS,EAAG,CACV,GAAI,EAAE,OAAS,SACb,OAEF,MAAM,CACR,CACF,CAKA,eAAsBC,IAA2D,CAC/E,GAAM,CAAE,aAAAC,CAAa,EAAI,MAAMC,GAAwB,EACvD,OAAOD,CACT,CAIA,SAASE,GAAsBjB,EAAmD,CAChF,OAAOA,EAAK,eAAiB,MAC/B,CAUA,IAAIkB,GAAkD,CAAC,EAEvD,eAAsBC,IAAyE,CAC7F,GAAIC,GAAsBF,EAAwB,EAChD,OAAO,QAAQ,QAAQ,CAAE,GAAGA,GAA0B,SAAU,EAAK,CAAC,EAGxE,IAAMG,EAAO,MAAMC,GAAM,EACnBC,EAAeC,GAA0CH,CAAI,EACnE,OAAAH,GAA2B,CAAE,GAAGG,EAAM,aAAAE,CAAa,EAC5C,CAAE,GAAIL,GAA2C,SAAU,EAAM,CAC1E,CAKO,SAASM,GAA0CH,EAAiC,CACzF,GAAM,CAAE,SAAAI,EAAU,KAAAC,EAAM,cAAAC,EAAe,OAAAC,EAAQ,aAAAC,EAAc,aAAAC,EAAc,eAAAC,CAAe,EAAIV,EAE1FI,IAAa,SAAW,CAAC,CAAC,MAAO,OAAO,EAAE,SAASC,CAAI,GACzDM,GACE,+GAA+GN,CAAI,kKAAkKC,CAAa,IACpS,EAIF,IAAMM,EAAgB,QACtB,GAAIR,IAAa,SAAWG,IAAW,OAAW,CAKhD,IAAMM,EAAoBC,GAAM,CAAE,aAAAL,CAAa,CAAC,EAC7C,KAAK,CAAE,aAAc,QAAS,EAAG,IACzB,2PACR,EACA,UAAU,IACF,kEACR,EAEHE,GACE,mHAAmHC,CAAa;AAAA,EACpIC,CAAiB,EACf,CACF,CAGA,IAAME,EAAgB,SAMtB,GALIX,IAAa,SAAWI,IAAiB,QAC3CQ,GAAM,cAAcN,CAAc,gDAAgDK,CAAa,IAAI,EAIjGX,IAAa,UAAYC,IAAS,QACpC,MAAO,eAGT,GAAID,IAAa,SACf,MAAO,SAGT,GAAIA,IAAa,QACf,MAAO,UAGT,GAAIA,IAAa,UACf,OAAOI,EAGT,GAAIJ,IAAa,UACf,MAAO,UAGT,GAAIA,IAAa,SACf,MAAO,SAGT,GAAIA,IAAa,SAAWI,IAAiB,QAC3C,MAAO,cAGT,GAAIJ,IAAa,SAAWC,IAAS,QAGnC,MAAO,GADUG,IAAiB,OAAS,mBAAqB,aAC9C,YAAYD,GAAUK,CAAa,GAGvD,GAAIR,IAAa,SAAWC,IAAS,MAEnC,MAAO,qBAAqBE,GAAUK,CAAa,GAGrD,GAAIR,IAAa,SAAWI,IAAiB,OAAQ,CACnD,IAAMS,EAAO,aAKb,MAJI,CAACV,GAIDW,GAAWX,CAAM,EAEZU,EAGA,GAAGA,CAAI,YAAYV,CAAM,EAEpC,CAGA,OAAIH,IAAa,SAAWI,GAAgBD,EACnC,GAAGC,CAAY,YAAYD,CAAM,IAGtCH,IAAa,SACfO,GAAK,+BAA+BP,CAAQ,wDAAwD,EAIlGG,EACK,GAAGQ,CAAa,YAAYR,CAAM,GAIvCC,EACK,GAAGA,CAAY,YAAYI,CAAa,GAK1C,GAAGG,CAAa,YAAYH,CAAa,GAClD,CAMA,eAAeO,GAAgBC,EAAsD,CACnF,GAAI,CACF,OAAO,MAAMA,EAAW,CAC1B,MAAY,CACV,MACF,CACF,CAKA,SAASC,GAAiBC,EAAiB,CACzC,OAAOH,GAAa,SAAY,CAC9B,IAAMI,EAAS,MAAMC,GAAKF,CAAO,EAEjC,OAAAN,GAAM,YAAYM,CAAO,4BAA4BC,EAAO,MAAM,GAAG,EAC9DA,EAAO,MAChB,CAAC,CACH,CAQA,eAAsBE,IAAgD,CACpE,OAAI,OAAOC,GAAG,SAAe,WACpBA,GAAG,QAAW,GAEV,MAAML,GAAiB,UAAU,IACjC,KAAK,CACpB,CAGA,SAASH,GAAWX,EAAkF,CACpG,OAAOA,EAAO,WAAW,IAAI,CAC/B,CQrnBA,IAAMoB,GAAc,KAEPC,GAAkBD,GAAY,QCKpC,SAASE,GAAoBC,EAAqD,CACvF,IAAMC,EAAuBC,GAAwB,EACrD,OAAID,IACAD,GAAiB,OAAO,aAAe,UAClC,UACEA,GAAiB,OAAO,aAAe,SACzC,SACEA,GAAiB,OAAO,aAAe,SACzC,SAEAG,GAAqB,EAEhC,CAEA,SAASD,IAA0B,CACjC,IAAME,EAAa,QAAQ,IAAI,0BAC/B,OAAIA,IAAe,UACV,UACEA,IAAe,SACjB,SACEA,IAAe,SACjB,SAEP,MAEJ,CAEA,SAASD,IAAyC,CAChD,MAAO,SACT,CCpCA,IAAAE,GAA+B,SAiE/B,IAAAC,GAA+B,SA7D/B,OAAOC,OAAU,YAEjB,IAAMC,GAAQC,GAAM,gBAAgB,EAC7B,SAASC,IAAiB,CAC/B,OAAOH,GAAK,KAAK,UAAW,KAAK,CACnC,CACO,IAAMI,qBAgEbC,GAAK,KAAK,UAAW,wBAAwB,EAC7CA,GAAK,KAAK,UAAW,8BAA8B,EACnDA,GAAK,KAAK,UAAW,sCAAsC,EAC3DA,GAAK,KAAK,UAAW,sCAAsC,EAC3DA,GAAK,KAAK,UAAW,sCAAsC,EAC3DA,GAAK,KAAK,UAAW,kCAAkC,EACvDA,GAAK,KAAK,UAAW,oCAAoC,EACzDA,GAAK,KAAK,UAAW,oCAAoC,EACzDA,GAAK,KAAK,UAAW,oCAAoC,EACzDA,GAAK,KAAK,UAAW,oCAAoC,EAGzDA,GAAK,KAAK,UAAW,sCAAsC,EAC3DA,GAAK,KAAK,UAAW,4CAA4C,EACjEA,GAAK,KAAK,UAAW,iDAAiD,EACtEA,GAAK,KAAK,UAAW,iDAAiD,EACtEA,GAAK,KAAK,UAAW,iDAAiD,EACtEA,GAAK,KAAK,UAAW,sDAAsD,EAC3EA,GAAK,KAAK,UAAW,sDAAsD,EAC3EA,GAAK,KAAK,UAAW,sDAAsD,EAC3EA,GAAK,KAAK,UAAW,uCAAuC,EAC5DA,GAAK,KAAK,UAAW,qDAAqD,EAC1EA,GAAK,KAAK,UAAW,+CAA+C,EACpEA,GAAK,KAAK,UAAW,+CAA+C,EACpEA,GAAK,KAAK,UAAW,+CAA+C,EACpEA,GAAK,KAAK,UAAW,kCAAkC,ECnGvD,OAAOC,OAAQ,UAEf,IAAMC,GAAQC,GAAM,YAAY,EAEzB,SAASC,GAAWC,EAAoB,CAG7C,GAAI,QAAQ,WAAa,QAAS,OAElC,IAAMC,EAAIL,GAAG,SAASI,CAAI,EACpBE,EAAUD,EAAE,KAAO,GAAK,EAAI,EAClC,GAAIA,EAAE,OAASC,EAAS,CACtBL,GAAM,4BAA4BG,CAAI,WAAW,EACjD,MACF,CACA,IAAMG,EAAQD,EAAQ,SAAS,CAAC,EAAE,MAAM,EAAE,EAC1CL,GAAM,8BAA8BG,CAAI,EAAE,EAC1CJ,GAAG,UAAUI,EAAMG,CAAK,CAC1B,CCnBA,IAAAC,GAAsB,WAEP,SAARC,GAA6BC,EAAQ,CAC3C,IAAMC,KAAS,GAAAC,SAAUF,CAAM,EAE/B,GAAIC,IAAW,EACd,OAAOD,EAGR,IAAMG,EAAQ,IAAI,OAAO,WAAWF,CAAM,IAAK,IAAI,EAEnD,OAAOD,EAAO,QAAQG,EAAO,EAAE,CAChC,CCZO,IAAMC,GAA2B,kBAE3BC,GAA2B,GAAGD,EAAwB,IAa5D,SAASE,GACdC,EAC0C,CAC1C,OAAOA,GAAkB,SAAS,EAAE,WAAW,GAAGF,EAAwB,IAAI,GAAK,EACrF,CAEO,SAASG,GACdD,EAC6C,CAC7C,GAAI,CAACD,GAAiBC,CAAgB,EACpC,MAAO,GAGT,GAAM,CAAE,KAAAE,CAAK,EAAI,IAAI,IAAIF,CAAgB,EAEzC,OAAOE,EAAK,SAAS,WAAW,GAAKA,EAAK,SAAS,WAAW,GAAKA,EAAK,SAAS,OAAO,CAC1F,CC9BA,IAAAC,GAAmB,SAEZ,SAASC,GAAqBC,EAAiC,CACpE,OAAO,OAAO,IAAIC,GAAqBD,CAAM,CAAC,CAChD,CAEO,IAAMC,GAAN,KAA2B,CAChC,YAA6BD,EAAyB,CAAzB,YAAAA,CAA0B,CACvD,UAAmB,CACjB,GAAM,CAAE,OAAAA,CAAO,EAAI,KAGbE,EAAWF,EAAO,SAAS,WAAa,QAAQA,EAAO,SAAS,UAAU,KAAOA,EAAO,SAAS,MAEjGG,EAAM,KAAK,MACf,KAAK,UAAU,CACb,SAAAD,EACA,cAAeE,GAA8BJ,EAAO,aAAa,CACnE,CAAC,CACH,EAEA,MAAO,aAAaA,EAAO,IAAI;AAAA,KACjC,GAAAK,SAAOC,GAAqBH,CAAG,EAAG,CAAC,CAAC;AAAA,EAEpC,CACF,EAEO,SAASC,GAA8BG,EAAwC,CACpF,IAAIC,EACJ,GAAID,EAAc,OAAS,EAAG,CAC5B,IAAME,EAA0BF,EAAc,KAAMG,GAAWA,EAAO,aAAe,IAAI,EACrFD,EACFD,EAAQ,QAAQC,EAAwB,UAAU,KAElDD,EAAQD,EAAc,IAAKG,GAAYA,EAAO,OAAS,SAAWA,EAAO,KAAM,CAEnF,MACEF,EAAQ,OAGV,OAAOA,CACT,CAEO,SAASF,GAAqBH,EAAa,CAChD,IAAMQ,EAAY,OAAO,KAAKR,CAAG,EAAE,OAAO,CAACS,EAAKC,IAAS,KAAK,IAAID,EAAKC,EAAK,MAAM,EAAG,CAAC,EACtF,OAAO,OAAO,QAAQV,CAAG,EACtB,IAAI,CAAC,CAACW,EAAKN,CAAK,IAAM,GAAGM,EAAI,OAAOH,CAAS,CAAC,MAAMI,GAAcP,CAAK,CAAC,EAAE,EAC1E,KAAK;AAAA,CAAI,CACd,CAEA,SAASO,GAAcP,EAAY,CACjC,OAAO,KAAK,MACV,KAAK,UAAUA,EAAO,CAACQ,EAAGR,IACpB,MAAM,QAAQA,CAAK,EACd,IAAIA,EAAM,IAAKS,GAAY,KAAK,UAAUA,CAAO,CAAC,EAAE,KAAK,IAAI,CAAC,IAEhE,KAAK,UAAUT,CAAK,CAC5B,CACH,CACF,CC5DA,IAAAU,GAAA,GAAAC,GAAAD,GAAA,WAAAE,GAAA,SAAAC,GAAA,QAAAC,GAAA,UAAAC,GAAA,WAAAC,GAAA,SAAAC,GAAA,SAAAC,KAEO,IAAMC,GAAO,CAClB,MAAOC,GAAI,cAAc,EACzB,KAAMC,GAAO,aAAa,EAC1B,KAAMC,GAAK,aAAa,EACxB,MAAOC,GAAK,cAAc,CAC5B,EACaC,GAAS,CACpB,KAAM,IAAM,CAAC,QAAQ,IAAI,uBAC3B,EACO,SAASC,MAAOC,EAAa,CAClC,QAAQ,IAAI,GAAGA,CAAI,CACrB,CACO,SAASC,GAAKC,KAAiBC,EAAuB,CACvDL,GAAO,KAAK,GACd,QAAQ,KAAK,GAAGL,GAAK,IAAI,IAAIS,CAAO,GAAI,GAAGC,CAAc,CAE7D,CACO,SAASC,GAAKF,KAAiBC,EAAuB,CAC3D,QAAQ,KAAK,GAAGV,GAAK,IAAI,IAAIS,CAAO,GAAI,GAAGC,CAAc,CAC3D,CACO,SAASE,GAAMH,KAAiBC,EAAuB,CAC5D,QAAQ,MAAM,GAAGV,GAAK,KAAK,IAAIS,CAAO,GAAI,GAAGC,CAAc,CAC7D,CACO,SAASG,GAAMJ,KAAiBC,EAAuB,CAC5D,QAAQ,IAAI,GAAGV,GAAK,KAAK,IAAIS,CAAO,GAAI,GAAGC,CAAc,CAC3D,CCDO,SAASI,GAAYC,EAAYC,EAA6B,CACnE,MAAM,IAAI,MAAMA,CAAY,CAC9B,CCLA,OAAOC,OAAY,cACnB,OAAOC,OAAU,YAGF,SAARC,GAAwBC,EAAYC,EAAe,CACxD,OAAOC,GAAaF,EAAYC,CAAO,CACzC,CAGO,SAASC,GAAaF,EAAYC,EAAS,CAChD,OAAID,EACKG,GAAiBH,EAAYC,CAAO,EAEpC,IAAIG,GAAWH,CAAO,CAEjC,CAEO,SAASE,GAAiBH,EAAYC,EAAS,CACpD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,qBAAqB,EAEvC,GAAI,CAACA,EAAW,SACd,MAAM,IAAI,MAAM,6BAA6B,EAE/C,IAAMK,EAAK,IAAID,GAAWH,CAAO,EACjC,OAAAD,EAAW,KAAKK,CAAE,EACXA,CACT,CAMO,SAASD,GAAsBH,EAAS,CAC7CJ,GAAO,UAAU,KAAK,KAAMI,CAAO,EACnCA,EAAUA,GAAW,CAAC,EAItB,KAAK,eAAe,WAAa,GACjC,KAAK,YAAc,CAAC,EACpB,KAAK,gBAAkBA,EAAQ,gBAAkB,GACjD,KAAK,sBAAwB,GAG7B,KAAK,GAAG,OAAQ,SAAqBK,EAAK,CACnC,KAAK,UAEJA,aAAeT,GAAO,WACxB,KAAK,SAAYS,EAAY,eAAe,SAGlD,CAAC,CACH,CACAR,GAAK,SAASM,GAAYP,GAAO,SAAS,EAE1CO,GAAW,UAAU,WAAa,SAAUG,EAAOC,EAAUC,EAAM,CAEjED,EAAWA,GAAY,OAEnB,OAAO,SAASD,CAAK,IACnBC,GAAY,UACdD,EAAQA,EAAM,SAAS,EACvBC,EAAW,QAEXD,EAAQA,EAAM,SAASC,CAAQ,GAGnC,KAAK,eAAiBA,EAEtB,IAAME,EAAQH,EAAM,MAAM,aAAa,EAGnC,KAAK,uBAAyBA,EAAM,CAAC,GAAK;AAAA,GAC5CG,EAAM,MAAM,EAGV,KAAK,YAAY,OAAS,IAC5B,KAAK,YAAY,KAAK,YAAY,OAAS,CAAC,GAAKA,EAAM,CAAC,EACxDA,EAAM,MAAM,GAGd,KAAK,sBAAwBH,EAAMA,EAAM,OAAS,CAAC,GAAK,KACxD,KAAK,YAAc,KAAK,YAAY,OAAOG,CAAK,EAChD,KAAK,YAAYF,EAAU,EAAGC,CAAI,CACpC,EAEAL,GAAW,UAAU,YAAc,SAAUI,EAAUG,EAAMF,EAAM,CAEjE,KAAO,KAAK,YAAY,OAASE,GAAM,CACrC,IAAMC,EAAO,KAAK,YAAY,MAAM,EAEpC,IAAI,KAAK,iBAAmBA,EAAK,OAAS,IACpC,CAAC,KAAK,KAAK,KAAK,UAAUA,EAAMJ,CAAQ,CAAC,EAAG,CAE9C,IAAMK,EAAO,KACb,aAAa,UAAY,CACvBA,EAAK,YAAYL,EAAUG,EAAMF,CAAI,CACvC,CAAC,EACD,MACF,CAEJ,CACAA,EAAK,CACP,EAEAL,GAAW,UAAU,OAAS,SAAUK,EAAM,CAC5C,KAAK,YAAY,KAAK,eAAgB,EAAGA,CAAI,CAC/C,EAGAL,GAAW,UAAU,UAAY,SAAUQ,EAAME,EAAe,CAC9D,OAAI,KAAK,UAAY,KAAK,UAAYA,EAC7B,OAAO,KAAKF,EAAME,CAAa,EAAE,SAAS,KAAK,QAAQ,EACrD,KAAK,SAEPF,EAEA,OAAO,KAAKA,EAAME,CAAa,CAE1C,EC/Ie,SAARC,GAA2B,CAAC,UAAAC,EAAY,EAAK,EAAI,CAAC,EAAG,CAG3D,IAAMC,EAAU,CACf,0JACA,0DACD,EAAE,KAAK,GAAG,EAEV,OAAO,IAAI,OAAOA,EAASD,EAAY,OAAY,GAAG,CACvD,CCPA,IAAME,GAAQC,GAAU,EAET,SAARC,GAA2BC,EAAQ,CACzC,GAAI,OAAOA,GAAW,SACrB,MAAM,IAAI,UAAU,gCAAgC,OAAOA,CAAM,IAAI,EAMtE,OAAOA,EAAO,QAAQH,GAAO,EAAE,CAChC,CCbA,OAAOI,OAAU,YASV,SAASC,GAAYC,EAA0B,CACpD,OAAIF,GAAK,MAAQA,GAAK,MAAM,IACnBE,EAEFA,EAAS,MAAMF,GAAK,GAAG,EAAE,KAAKA,GAAK,MAAM,GAAG,CACrD,CCbA,IAAAG,GAAmB,SACnB,OAAOC,OAAQ,UAEf,OAAOC,OAAU,YC4BV,SAASC,GAAaC,EAA6D,CAExF,IAAMC,EAAcD,EAAO,iBAAmB,CAAC,EAAI,QAAQ,IAErDE,EAAeC,GACHA,EAAS,MAAM,6BAA6B,GAGjD,OAAO,SAAUC,EAAQC,EAAO,CACvC,IAAMC,EAAQ,4BAA4B,KAAKD,CAAK,EACpD,GAAI,CAACC,EACH,OAAOF,EAGT,IAAMG,EAASD,EAAM,CAAC,EAElBE,EAAOC,EAEX,GAAIF,IAAW,KACbE,EAAcH,EAAM,CAAC,EACrBE,EAAQC,EAAY,QAAQ,MAAO,GAAG,MACjC,CACL,IAAMC,EAAMJ,EAAM,CAAC,EACnBG,EAAcH,EAAM,CAAC,EAAE,UAAUC,EAAO,MAAM,EAE9CC,EAAQ,OAAO,eAAe,KAAKP,EAAaS,CAAG,EAAIT,EAAYS,CAAG,EAAIV,EAAO,OAAQU,CAAG,GAAK,GAGjGF,EAAQN,EAAYM,CAAK,CAC3B,CAEA,OAAOJ,EAAO,QAAQK,EAAaD,CAAK,CAC1C,EAAGL,CAAQ,GAAKA,EAIpB,QAAWQ,KAAaX,EAAO,OAAQ,CACrC,IAAMQ,EAAQ,OAAO,eAAe,KAAKP,EAAaU,CAAS,EAAIV,EAAYU,CAAS,EAAIX,EAAO,OAAOW,CAAS,EAEnHX,EAAO,OAAOW,CAAS,EAAIT,EAAYM,CAAM,CAC/C,CAEA,QAAWI,KAAcZ,EAAO,OAC9BC,EAAYW,CAAU,EAAIZ,EAAO,OAAOY,CAAU,EAGpD,OAAOZ,CACT,CDvEA,IAAMa,GAAQC,GAAM,mBAAmB,EAuBhC,SAASC,GACd,CACE,YAAAC,EACA,cAAAC,CACF,EAIAC,EAAqD,CACnD,cAAe,MACjB,EACW,CACX,IAAMC,EAAcC,GAAQJ,CAAW,EACnCE,EAAK,gBAAkB,QAEzBG,GAAkBF,EAAaF,EAAeC,EAAK,aAAa,EAGlE,IAAII,EAA4C,KAWhD,OAVKC,GAAWJ,GAAa,KAAMF,CAAa,IAC9CK,EAAgBF,GAAQH,CAAa,GAInC,CAACE,GAAe,CAACG,GACnBT,GAAM,iCAAiC,EAIrCS,GAAe,aAAa,MACvB,QAAQ,MAAME,GAAIC,GAAK,oBAAoB,CAAC,EAAIH,EAAc,aAAa,KAAK,EAIlF,CACL,QAHe,CAACH,GAAa,QAASG,GAAe,OAAO,EAAE,OAAO,OAAO,EAG1D,KAAK;AAAA,CAAI,EAC3B,OAAQ,CACN,GAAGH,GAAa,cAAc,OAC9B,GAAGG,GAAe,cAAc,MAClC,CACF,CACF,CAIA,SAASD,GACPF,EACAO,EACAC,EACA,CACA,IAAMC,EAAgBT,GAAa,aAAa,OAC1CU,EAAgB,CAACN,GAAWJ,GAAa,KAAMO,CAAO,EAC5D,GAAIE,GAAiBF,GAAWG,GAAiBC,GAAG,WAAWJ,CAAO,EAAG,CACvE,IAAMK,EAAY,GAAAC,QAAO,MAAMF,GAAG,aAAaJ,CAAO,CAAC,EACjDO,EAAsB,CAAC,EAC7B,QAAWC,KAAKH,EACVH,EAAcM,CAAC,IAAMH,EAAUG,CAAC,GAClCD,EAAU,KAAKC,CAAC,EAGpB,GAAID,EAAU,OAAS,EAAG,CAExB,IAAME,EAAsBC,GAAK,SAAS,QAAQ,IAAI,EAAGjB,EAAa,IAAI,EACpEkB,EAAkBD,GAAK,SAAS,QAAQ,IAAI,EAAGV,CAAO,EAC5D,GAAIC,IAAS,QAAS,CACpB,IAAMW,EAAU,sCAAsCL,EAAU,OAAS,EAAI,IAAM,EAAE,OAAOM,GAC1FJ,CACF,CAAC,QAAQI,GAAUF,CAAe,CAAC;AAAA;AAAA,EAEzCJ,EAAU,IAAKO,GAAa,KAAKf,GAAKe,CAAQ,CAAC,EAAE,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA;AAAA,qCAE1BD,GAAUF,CAAe,CAAC,OAAOE,GAC5DJ,CACF,CAAC;AAAA,EACD,MAAM,IAAI,MAAMG,CAAO,CACzB,SAAWX,IAAS,OAAQ,CAC1B,IAAMW,EAAU,uBAAuBL,EAAU,OAAS,EAAI,IAAM,EAAE,IAAIA,EACvE,IAAKQ,GAAMhB,GAAKgB,CAAC,CAAC,EAClB,KAAK,IAAI,CAAC,OAAOF,GAAUJ,CAAmB,CAAC,QAAQI,GAAUF,CAAe,CAAC;AAAA,gBAC5EE,GAAUF,CAAe,CAAC,4BAA4BE,GAAUJ,CAAmB,CAAC;AAAA,QAE5F,QAAQ,KAAK,GAAGO,GAAO,cAAc,CAAC,IAAIJ,CAAO,EAAE,CACrD,CACF,CACF,CACF,CAEO,SAASlB,GAAQM,EAAgE,CACtF,GAAIiB,GAAOjB,CAAO,EAAG,CACnBb,GAAM,qCAAqCa,CAAO,EAAE,EAEpD,IAAMkB,EAAe,GAAAZ,QAAO,OAAO,CACjC,KAAMN,EAQN,MAAO,QAAQ,IAAI,oBAAsB,GAAO,MAClD,CAAC,EAID,MAAO,CACL,aAHyBmB,GAAaD,CAAY,EAIlD,QAASE,GAAI,qCAAqCV,GAAK,SAAS,QAAQ,IAAI,EAAGV,CAAO,CAAC,EAAE,EACzF,KAAMA,CACR,CACF,MACEb,GAAM,sCAAsCa,CAAO,EAAE,EAEvD,OAAO,IACT,CACO,SAASH,GAAWwB,EAAkCC,EAAkC,CAC7F,OAAOD,GAASC,GAASZ,GAAK,QAAQW,CAAK,IAAMX,GAAK,QAAQY,CAAK,CACrE,CAEO,SAASL,GAAOM,EAA2C,CAChE,MAAO,GAAQA,GAAKnB,GAAG,WAAWmB,CAAC,EACrC,CExJO,SAASC,GAAeC,EAAgBC,EAA2B,CACxE,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAQC,CAAG,CACzD,CCFO,SAASC,GACdC,EACAC,EACc,CACd,IAAMC,EAAS,CAAC,EAEhB,QAAWC,KAAO,OAAO,KAAKH,CAAM,EAClCE,EAAOC,CAAG,EAAIF,EAAOD,EAAOG,CAAG,EAAQA,CAAQ,EAGjD,OAAOD,CACT,CCFO,SAASE,GAAqBC,EAAYC,EAAmD,CAClG,GAAID,EAAM,SAAW,EACnB,OAEF,IAAIE,EAASF,EAAM,CAAC,EAEpB,QAASG,EAAI,EAAGA,EAAIH,EAAM,OAAQG,IACXF,EAAWC,EAAQF,EAAMG,CAAC,CAAC,EAE7B,IACjBD,EAASF,EAAMG,CAAC,GAGpB,OAAOD,CACT,CCfO,SAASE,EAAaC,EAAuBC,EAAc,CAChE,OAAO,eAAeD,EAAa,OAAQ,CACzC,MAAOC,EACP,aAAc,EAChB,CAAC,CACH,CCXA,IAAMC,GAAgB,IAAI,IAEbC,GAAW,CAACC,EAAaC,KAAoBC,IAAoB,CACvEJ,GAAc,IAAIE,CAAG,IACxBF,GAAc,IAAIE,CAAG,EACrBG,GAAKF,EAAS,GAAGC,CAAI,EAEzB,ECPO,IAAME,EAAN,MAAMC,UAAwC,KAAM,CACzD,cACA,UACA,UAEA,YAAYC,EAAiBC,EAAuBC,EAAoB,CACtE,MAAMF,CAAO,EACb,KAAK,KAAO,kCAEZ,KAAK,cAAgBC,EACrB,KAAK,UAAYC,EACjB,MAAM,kBAAkBH,CAA+B,CACzD,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,iCACT,CACF,EAEAI,EAAaL,EAAiC,iCAAiC,ECTxE,IAAMM,GAAN,cAA4C,KAAqC,CACtF,KACA,KACA,cACA,gBAEA,YAAYC,EAAiB,CAAE,KAAAC,EAAM,cAAAC,EAAe,KAAAC,EAAM,gBAAAC,CAAgB,EAAqB,CAC7F,MAAMJ,CAAO,EACb,KAAK,KAAO,gCAEZ,KAAK,KAAOC,EACZ,KAAK,cAAgBC,EACrB,KAAK,KAAOC,EACZ,OAAO,eAAe,KAAM,kBAAmB,CAC7C,MAAOC,EACP,WAAY,GACZ,SAAU,EACZ,CAAC,CACH,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,+BACT,CACF,EAEAC,EAAaN,GAA+B,+BAA+B,ECjCpE,IAAMO,GAAN,cAAyC,KAAM,CACpD,cAEA,YAAYC,EAAiBC,EAAuB,CAClD,MAAMD,CAAO,EACb,KAAK,KAAO,6BAEZ,KAAK,cAAgBC,CACvB,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,4BACT,CACF,EAEAC,EAAaH,GAA4B,4BAA4B,ECP9D,IAAMI,GAAN,cAA8C,KAAqC,CACxF,cACA,gBAEA,YAAYC,EAAiB,CAAE,cAAAC,EAAe,gBAAAC,CAAgB,EAAuB,CACnF,MAAMF,CAAO,EACb,KAAK,KAAO,kCAEZ,KAAK,cAAgBC,EACrB,OAAO,eAAe,KAAM,kBAAmB,CAC7C,MAAOC,EACP,SAAU,GACV,WAAY,EACd,CAAC,CACH,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,iCACT,CACF,EAEAC,EAAaJ,GAAiC,iCAAiC,ECxBxE,IAAMK,GAAN,cAA0C,KAAM,CACrD,KAAO,8BACP,cAEA,YAAYC,EAAiB,CAAE,cAAAC,CAAc,EAAY,CACvD,MAAMD,CAAO,EACb,KAAK,cAAgBC,CACvB,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,6BACT,CACF,EACAC,EAAaH,GAA6B,6BAA6B,ECfhE,IAAMI,GAAN,KAAkB,CACf,KAAO,IAAI,IAEnB,IAAIC,EAAuB,CACzB,OAAO,KAAK,KAAK,IAAIA,CAAG,GAAG,KAC7B,CAEA,IAAIA,EAAQC,EAAgB,CAC1B,KAAK,KAAK,IAAID,EAAK,CAAE,MAAAC,CAAM,CAAC,CAC9B,CAEA,YAAYD,EAAQE,EAAoB,CACtC,IAAMC,EAAS,KAAK,KAAK,IAAIH,CAAG,EAChC,GAAIG,EACF,OAAOA,EAAO,MAEhB,IAAMF,EAAQC,EAAO,EACrB,YAAK,IAAIF,EAAKC,CAAK,EACZA,CACT,CACF,ECXO,SAASG,GAA+BC,EAA0B,CACvE,OAAQA,EAAK,UAAU,EAAG,CAAC,EAAE,YAAY,EAAIA,EAAK,UAAU,CAAC,CAC/D,CCVO,SAASC,GACdC,EACAC,EACe,CACf,IAAMC,EAAqB,CAAC,EAE5B,QAAWC,KAAOH,EAAY,CAC5B,IAAMI,EAAMD,EAAIF,CAAI,EACpBC,EAAIE,CAAG,EAAID,CACb,CAEA,OAAOD,CACT,CCZO,SAASG,GAAgBC,EAAmC,CACjE,IAAIC,EAEJ,MAAO,CACL,KAAM,CACJ,OAAIA,IAGJA,EAAkB,CAAE,MAAOD,EAAQ,CAAE,GAC9BC,EAAgB,KACzB,CACF,CACF,CCMO,SAASC,GAAuBC,EAAiD,CACtF,MAAO,CACL,OAAQC,GAAmBD,EAAc,MAAM,EAC/C,MAAOC,GAAmBD,EAAc,KAAK,EAC7C,MAAOC,GAAmBD,EAAc,KAAK,CAC/C,CACF,CAqBA,SAASE,GAA+CC,EAAqD,CAC3G,IAAMC,EAA0C,CAAC,EACjD,OAAW,CAAE,KAAAC,EAAM,GAAGC,CAAK,IAAKH,EAC9BC,EAAOC,CAAI,EAAIC,EAEjB,OAAOF,CACT,CCvDO,SAASG,GAAOC,EAA+B,CACpD,OACEA,aAAiB,MAEjB,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,eAE9C,CAEO,SAASC,GAAYC,EAAY,CACtC,OAAOA,EAAK,SAAS,IAAM,cAC7B,CCIA,IAAIC,GAAY,KAIdC,GAAa,IAGbC,GAAW,mBAGXC,GAAO,qgCAGPC,GAAK,qgCAILC,GAAW,CAOT,UAAW,GAiBX,SAAU,EAeV,OAAQ,EAIR,SAAU,GAIV,SAAW,GAIX,KAAM,CAACL,GAIP,KAAMA,GAGN,OAAQ,EACV,EAMAM,GAASC,GACTC,EAAW,GAEXC,GAAe,kBACfC,GAAkBD,GAAe,qBACjCE,GAAyBF,GAAe,2BACxCG,GAAoBH,GAAe,qBACnCI,GAAM,mBAENC,GAAY,KAAK,MACjBC,GAAU,KAAK,IAEfC,GAAW,6CACXC,GAAQ,yDACRC,GAAU,gDACVC,GAAY,qCAEZC,GAAO,IACPC,EAAW,EACXC,GAAmB,iBAEnBC,GAAiBpB,GAAK,OAAS,EAC/BqB,GAAepB,GAAG,OAAS,EAG3BqB,EAAI,CAAE,YAAaZ,EAAI,EA0EzBY,EAAE,cAAgBA,EAAE,IAAM,UAAY,CACpC,IAAIC,EAAI,IAAI,KAAK,YAAY,IAAI,EACjC,OAAIA,EAAE,EAAI,IAAGA,EAAE,EAAI,GACZC,EAASD,CAAC,CACnB,EAQAD,EAAE,KAAO,UAAY,CACnB,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAWAF,EAAE,UAAYA,EAAE,MAAQ,SAAUG,EAAKC,EAAK,CAC1C,IAAIC,EACFJ,EAAI,KACJK,EAAOL,EAAE,YAGX,GAFAE,EAAM,IAAIG,EAAKH,CAAG,EAClBC,EAAM,IAAIE,EAAKF,CAAG,EACd,CAACD,EAAI,GAAK,CAACC,EAAI,EAAG,OAAO,IAAIE,EAAK,GAAG,EACzC,GAAIH,EAAI,GAAGC,CAAG,EAAG,MAAM,MAAMnB,GAAkBmB,CAAG,EAClD,OAAAC,EAAIJ,EAAE,IAAIE,CAAG,EACNE,EAAI,EAAIF,EAAMF,EAAE,IAAIG,CAAG,EAAI,EAAIA,EAAM,IAAIE,EAAKL,CAAC,CACxD,EAWAD,EAAE,WAAaA,EAAE,IAAM,SAAUO,EAAG,CAClC,IAAIC,EAAGC,EAAGC,EAAKC,EACbV,EAAI,KACJW,EAAKX,EAAE,EACPY,GAAMN,EAAI,IAAIN,EAAE,YAAYM,CAAC,GAAG,EAChCO,EAAKb,EAAE,EACPc,EAAKR,EAAE,EAGT,GAAI,CAACK,GAAM,CAACC,EACV,MAAO,CAACC,GAAM,CAACC,EAAK,IAAMD,IAAOC,EAAKD,EAAKF,IAAOC,EAAK,EAAI,CAACD,EAAKE,EAAK,EAAI,EAAI,GAIhF,GAAI,CAACF,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAAG,OAAOD,EAAG,CAAC,EAAIE,EAAKD,EAAG,CAAC,EAAI,CAACE,EAAK,EAGxD,GAAID,IAAOC,EAAI,OAAOD,EAGtB,GAAIb,EAAE,IAAMM,EAAE,EAAG,OAAON,EAAE,EAAIM,EAAE,EAAIO,EAAK,EAAI,EAAI,GAMjD,IAJAJ,EAAME,EAAG,OACTD,EAAME,EAAG,OAGJL,EAAI,EAAGC,EAAIC,EAAMC,EAAMD,EAAMC,EAAKH,EAAIC,EAAG,EAAED,EAC9C,GAAII,EAAGJ,CAAC,IAAMK,EAAGL,CAAC,EAAG,OAAOI,EAAGJ,CAAC,EAAIK,EAAGL,CAAC,EAAIM,EAAK,EAAI,EAAI,GAI3D,OAAOJ,IAAQC,EAAM,EAAID,EAAMC,EAAMG,EAAK,EAAI,EAAI,EACpD,EAgBAd,EAAE,OAASA,EAAE,IAAM,UAAY,CAC7B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,EAGFA,EAAE,EAAE,CAAC,GAEVe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAIL,EAC9CU,EAAK,SAAW,EAEhBL,EAAIiB,GAAOZ,EAAMa,GAAiBb,EAAML,CAAC,CAAC,EAE1CK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,IAAY,GAAKA,IAAY,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAZtD,IAAIX,EAAK,CAAC,EAHb,IAAIA,EAAK,GAAG,CAgB/B,EAmBAN,EAAE,SAAWA,EAAE,KAAO,UAAY,CAChC,IAAIoB,EAAGC,EAAGC,EAAGC,EAAGC,EAAKC,EAAGC,EAAIC,EAAGC,EAAIC,EACjC5B,EAAI,KACJK,EAAOL,EAAE,YAEX,GAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAG,OAAO,IAAIK,EAAKL,CAAC,EAoClD,IAnCAlB,EAAW,GAGX0C,EAAIxB,EAAE,EAAIX,GAAQW,EAAE,EAAIA,EAAG,EAAI,CAAC,EAI5B,CAACwB,GAAK,KAAK,IAAIA,CAAC,GAAK,KACvBH,EAAIQ,GAAe7B,EAAE,CAAC,EACtBmB,EAAInB,EAAE,GAGFwB,GAAKL,EAAIE,EAAE,OAAS,GAAK,KAAGA,GAAMG,GAAK,GAAKA,GAAK,GAAK,IAAM,MAChEA,EAAInC,GAAQgC,EAAG,EAAI,CAAC,EAGpBF,EAAI/B,IAAW+B,EAAI,GAAK,CAAC,GAAKA,EAAI,IAAMA,EAAI,EAAI,GAAK,IAEjDK,GAAK,IACPH,EAAI,KAAOF,GAEXE,EAAIG,EAAE,cAAc,EACpBH,EAAIA,EAAE,MAAM,EAAGA,EAAE,QAAQ,GAAG,EAAI,CAAC,EAAIF,GAGvCG,EAAI,IAAIjB,EAAKgB,CAAC,EACdC,EAAE,EAAItB,EAAE,GAERsB,EAAI,IAAIjB,EAAKmB,EAAE,SAAS,CAAC,EAG3BC,GAAMN,EAAId,EAAK,WAAa,IAW1B,GANAqB,EAAIJ,EACJK,EAAKD,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EACvBE,EAAUD,EAAG,KAAK3B,CAAC,EACnBsB,EAAIQ,GAAOF,EAAQ,KAAK5B,CAAC,EAAE,MAAM0B,CAAC,EAAGE,EAAQ,KAAKD,CAAE,EAAGF,EAAK,EAAG,CAAC,EAG5DI,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGD,CAAE,KAAOJ,EAAIQ,GAAeP,EAAE,CAAC,GAAG,MAAM,EAAGG,CAAE,EAK5E,GAJAJ,EAAIA,EAAE,MAAMI,EAAK,EAAGA,EAAK,CAAC,EAItBJ,GAAK,QAAU,CAACE,GAAOF,GAAK,OAAQ,CAItC,GAAI,CAACE,IACHtB,EAASyB,EAAGP,EAAI,EAAG,CAAC,EAEhBO,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAAE,GAAG1B,CAAC,GAAG,CAC7BsB,EAAII,EACJ,KACF,CAGFD,GAAM,EACNF,EAAM,CACR,KAAO,EAID,CAAC,CAACF,GAAK,CAAC,CAACA,EAAE,MAAM,CAAC,GAAKA,EAAE,OAAO,CAAC,GAAK,OAGxCpB,EAASqB,EAAGH,EAAI,EAAG,CAAC,EACpBC,EAAI,CAACE,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAAE,GAAGtB,CAAC,GAG/B,KACF,CAIJ,OAAAlB,EAAW,GAEJmB,EAASqB,EAAGH,EAAGd,EAAK,SAAUe,CAAC,CACxC,EAOArB,EAAE,cAAgBA,EAAE,GAAK,UAAY,CACnC,IAAIgC,EACFC,EAAI,KAAK,EACTX,EAAI,IAEN,GAAIW,EAAG,CAML,GALAD,EAAIC,EAAE,OAAS,EACfX,GAAKU,EAAI3C,GAAU,KAAK,EAAIO,CAAQ,GAAKA,EAGzCoC,EAAIC,EAAED,CAAC,EACHA,EAAG,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIV,IAChCA,EAAI,IAAGA,EAAI,EACjB,CAEA,OAAOA,CACT,EAwBAtB,EAAE,UAAYA,EAAE,IAAM,SAAUO,EAAG,CACjC,OAAOwB,GAAO,KAAM,IAAI,KAAK,YAAYxB,CAAC,CAAC,CAC7C,EAQAP,EAAE,mBAAqBA,EAAE,SAAW,SAAUO,EAAG,CAC/C,IAAIN,EAAI,KACNK,EAAOL,EAAE,YACX,OAAOC,EAAS6B,GAAO9B,EAAG,IAAIK,EAAKC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAGD,EAAK,UAAWA,EAAK,QAAQ,CAChF,EAOAN,EAAE,OAASA,EAAE,GAAK,SAAUO,EAAG,CAC7B,OAAO,KAAK,IAAIA,CAAC,IAAM,CACzB,EAQAP,EAAE,MAAQ,UAAY,CACpB,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAQAF,EAAE,YAAcA,EAAE,GAAK,SAAUO,EAAG,CAClC,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAQAP,EAAE,qBAAuBA,EAAE,IAAM,SAAUO,EAAG,CAC5C,IAAIF,EAAI,KAAK,IAAIE,CAAC,EAClB,OAAOF,GAAK,GAAKA,IAAM,CACzB,EA4BAL,EAAE,iBAAmBA,EAAE,KAAO,UAAY,CACxC,IAAIK,EAAGiB,EAAGN,EAAIC,EAAIiB,EAChBjC,EAAI,KACJK,EAAOL,EAAE,YACTkC,EAAM,IAAI7B,EAAK,CAAC,EAElB,GAAI,CAACL,EAAE,SAAS,EAAG,OAAO,IAAIK,EAAKL,EAAE,EAAI,IAAQ,GAAG,EACpD,GAAIA,EAAE,OAAO,EAAG,OAAOkC,EAEvBnB,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC9CK,EAAK,SAAW,EAChB4B,EAAMjC,EAAE,EAAE,OAONiC,EAAM,IACR7B,EAAI,KAAK,KAAK6B,EAAM,CAAC,EACrBZ,GAAK,EAAIc,GAAQ,EAAG/B,CAAC,GAAG,SAAS,IAEjCA,EAAI,GACJiB,EAAI,gCAGNrB,EAAIoC,GAAa/B,EAAM,EAAGL,EAAE,MAAMqB,CAAC,EAAG,IAAIhB,EAAK,CAAC,EAAG,EAAI,EAMvD,QAHIgC,EACF9B,EAAIH,EACJkC,EAAK,IAAIjC,EAAK,CAAC,EACVE,KACL8B,EAAUrC,EAAE,MAAMA,CAAC,EACnBA,EAAIkC,EAAI,MAAMG,EAAQ,MAAMC,EAAG,MAAMD,EAAQ,MAAMC,CAAE,CAAC,CAAC,CAAC,EAG1D,OAAOrC,EAASD,EAAGK,EAAK,UAAYU,EAAIV,EAAK,SAAWW,EAAI,EAAI,CAClE,EAiCAjB,EAAE,eAAiBA,EAAE,KAAO,UAAY,CACtC,IAAIK,EAAGW,EAAIC,EAAIiB,EACbjC,EAAI,KACJK,EAAOL,EAAE,YAEX,GAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAG,OAAO,IAAIK,EAAKL,CAAC,EAQlD,GANAe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC9CK,EAAK,SAAW,EAChB4B,EAAMjC,EAAE,EAAE,OAENiC,EAAM,EACRjC,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,EAAG,EAAI,MAC/B,CAWLI,EAAI,IAAM,KAAK,KAAK6B,CAAG,EACvB7B,EAAIA,EAAI,GAAK,GAAKA,EAAI,EAEtBJ,EAAIA,EAAE,MAAM,EAAImC,GAAQ,EAAG/B,CAAC,CAAC,EAC7BJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,EAAG,EAAI,EAOpC,QAJIuC,EACFC,EAAK,IAAInC,EAAK,CAAC,EACfoC,EAAM,IAAIpC,EAAK,EAAE,EACjBqC,EAAM,IAAIrC,EAAK,EAAE,EACZD,KACLmC,EAAUvC,EAAE,MAAMA,CAAC,EACnBA,EAAIA,EAAE,MAAMwC,EAAG,KAAKD,EAAQ,MAAME,EAAI,MAAMF,CAAO,EAAE,KAAKG,CAAG,CAAC,CAAC,CAAC,CAEpE,CAEA,OAAArC,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASD,EAAGe,EAAIC,EAAI,EAAI,CACjC,EAmBAjB,EAAE,kBAAoBA,EAAE,KAAO,UAAY,CACzC,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAETyB,GAAO9B,EAAE,KAAK,EAAGA,EAAE,KAAK,EAAGK,EAAK,UAAYU,EAAIV,EAAK,SAAWW,CAAE,GAR/C,IAAIX,EAAKL,EAAE,CAAC,CASxC,EAsBAD,EAAE,cAAgBA,EAAE,KAAO,UAAY,CACrC,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTI,EAAIJ,EAAE,IAAI,EAAE,IAAI,CAAC,EACjBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEZ,OAAID,IAAM,GACDA,IAAM,EAETJ,EAAE,MAAM,EAAI2C,GAAMtC,EAAMU,EAAIC,CAAE,EAAI,IAAIX,EAAK,CAAC,EAE5C,IAAIA,EAAK,GAAG,EAGdL,EAAE,OAAO,EAAU2C,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,GAIxDX,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAGhBL,EAAI,IAAIK,EAAK,CAAC,EAAE,MAAML,CAAC,EAAE,IAAIA,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAEpDK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,CAAC,EAClB,EAsBAD,EAAE,wBAA0BA,EAAE,MAAQ,UAAY,CAChD,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIA,EAAE,IAAI,CAAC,EAAU,IAAIK,EAAKL,EAAE,GAAG,CAAC,EAAI,EAAI,GAAG,EAC1CA,EAAE,SAAS,GAEhBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAI,KAAK,IAAIf,EAAE,CAAC,EAAGA,EAAE,GAAG,CAAC,EAAI,EACxDK,EAAK,SAAW,EAChBvB,EAAW,GAEXkB,EAAIA,EAAE,MAAMA,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAKA,CAAC,EAErClB,EAAW,GACXuB,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,GAAG,GAdc,IAAIK,EAAKL,CAAC,CAetC,EAmBAD,EAAE,sBAAwBA,EAAE,MAAQ,UAAY,CAC9C,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,MAAI,CAACA,EAAE,SAAS,GAAKA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAElDe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,EAAI,KAAK,IAAI,KAAK,IAAIf,EAAE,CAAC,EAAGA,EAAE,GAAG,CAAC,EAAI,EAC5DK,EAAK,SAAW,EAChBvB,EAAW,GAEXkB,EAAIA,EAAE,MAAMA,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAKA,CAAC,EAEpClB,EAAW,GACXuB,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,GAAG,EACd,EAsBAD,EAAE,yBAA2BA,EAAE,MAAQ,UAAY,CACjD,IAAIgB,EAAIC,EAAI4B,EAAKC,EACf7C,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,GAAK,EAAU,IAAIK,EAAKL,EAAE,IAAI,EAAE,GAAG,CAAC,EAAIA,EAAE,EAAI,EAAIA,EAAE,OAAO,EAAIA,EAAI,GAAG,GAE5Ee,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVwC,EAAM7C,EAAE,GAAG,EAEP,KAAK,IAAI6C,EAAK9B,CAAE,EAAI,EAAI,CAACf,EAAE,EAAI,EAAUC,EAAS,IAAII,EAAKL,CAAC,EAAGe,EAAIC,EAAI,EAAI,GAE/EX,EAAK,UAAYuC,EAAMC,EAAM7C,EAAE,EAE/BA,EAAI8B,GAAO9B,EAAE,KAAK,CAAC,EAAG,IAAIK,EAAK,CAAC,EAAE,MAAML,CAAC,EAAG4C,EAAM7B,EAAI,CAAC,EAEvDV,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,GAAG,EAETK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,EAAG,IArBQ,IAAIK,EAAK,GAAG,CAsBxC,EAwBAN,EAAE,YAAcA,EAAE,KAAO,UAAY,CACnC,IAAI+C,EAAQ1C,EACVW,EAAIC,EACJhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCI,EAAIJ,EAAE,IAAI,EAAE,IAAI,CAAC,EACjBe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEND,IAAM,GAGJA,IAAM,GACR0C,EAASH,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,EAC1C8B,EAAO,EAAI9C,EAAE,EACN8C,GAIF,IAAIzC,EAAK,GAAG,GAKrBA,EAAK,UAAYU,EAAK,EACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,IAAI,IAAIK,EAAK,CAAC,EAAE,MAAML,EAAE,MAAMA,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAE7DK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAEThB,EAAE,MAAM,CAAC,GAClB,EAqBAD,EAAE,eAAiBA,EAAE,KAAO,UAAY,CACtC,IAAIQ,EAAGC,EAAGJ,EAAG,EAAG2C,EAAIrB,EAAGJ,EAAGsB,EAAKI,EAC7BhD,EAAI,KACJK,EAAOL,EAAE,YACTe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAEZ,GAAKL,EAAE,SAAS,EAOT,IAAIA,EAAE,OAAO,EAClB,OAAO,IAAIK,EAAKL,CAAC,EACZ,GAAIA,EAAE,IAAI,EAAE,GAAG,CAAC,GAAKe,EAAK,GAAKjB,GACpC,OAAAwB,EAAIqB,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,GAAI,EACtCM,EAAE,EAAItB,EAAE,EACDsB,MAZU,CACjB,GAAI,CAACtB,EAAE,EAAG,OAAO,IAAIK,EAAK,GAAG,EAC7B,GAAIU,EAAK,GAAKjB,GACZ,OAAAwB,EAAIqB,GAAMtC,EAAMU,EAAK,EAAGC,CAAE,EAAE,MAAM,EAAG,EACrCM,EAAE,EAAItB,EAAE,EACDsB,CAEX,CAmBA,IAXAjB,EAAK,UAAYuC,EAAM7B,EAAK,GAC5BV,EAAK,SAAW,EAQhBD,EAAI,KAAK,IAAI,GAAIwC,EAAMjD,EAAW,EAAI,CAAC,EAElCY,EAAIH,EAAGG,EAAG,EAAEA,EAAGP,EAAIA,EAAE,IAAIA,EAAE,MAAMA,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAW/D,IATAlB,EAAW,GAEX0B,EAAI,KAAK,KAAKoC,EAAMjD,CAAQ,EAC5B,EAAI,EACJqD,EAAKhD,EAAE,MAAMA,CAAC,EACdsB,EAAI,IAAIjB,EAAKL,CAAC,EACd+C,EAAK/C,EAGEO,IAAM,IAOX,GANAwC,EAAKA,EAAG,MAAMC,CAAE,EAChBtB,EAAIJ,EAAE,MAAMyB,EAAG,IAAI,GAAK,CAAC,CAAC,EAE1BA,EAAKA,EAAG,MAAMC,CAAE,EAChB1B,EAAII,EAAE,KAAKqB,EAAG,IAAI,GAAK,CAAC,CAAC,EAErBzB,EAAE,EAAEd,CAAC,IAAM,OAAQ,IAAKD,EAAIC,EAAGc,EAAE,EAAEf,CAAC,IAAMmB,EAAE,EAAEnB,CAAC,GAAKA,KAAK,CAG/D,OAAIH,IAAGkB,EAAIA,EAAE,MAAM,GAAMlB,EAAI,CAAE,GAE/BtB,EAAW,GAEJmB,EAASqB,EAAGjB,EAAK,UAAYU,EAAIV,EAAK,SAAWW,EAAI,EAAI,CAClE,EAOAjB,EAAE,SAAW,UAAY,CACvB,MAAO,CAAC,CAAC,KAAK,CAChB,EAOAA,EAAE,UAAYA,EAAE,MAAQ,UAAY,CAClC,MAAO,CAAC,CAAC,KAAK,GAAKX,GAAU,KAAK,EAAIO,CAAQ,EAAI,KAAK,EAAE,OAAS,CACpE,EAOAI,EAAE,MAAQ,UAAY,CACpB,MAAO,CAAC,KAAK,CACf,EAOAA,EAAE,WAAaA,EAAE,MAAQ,UAAY,CACnC,OAAO,KAAK,EAAI,CAClB,EAOAA,EAAE,WAAaA,EAAE,MAAQ,UAAY,CACnC,OAAO,KAAK,EAAI,CAClB,EAOAA,EAAE,OAAS,UAAY,CACrB,MAAO,CAAC,CAAC,KAAK,GAAK,KAAK,EAAE,CAAC,IAAM,CACnC,EAOAA,EAAE,SAAWA,EAAE,GAAK,SAAUO,EAAG,CAC/B,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAOAP,EAAE,kBAAoBA,EAAE,IAAM,SAAUO,EAAG,CACzC,OAAO,KAAK,IAAIA,CAAC,EAAI,CACvB,EAiCAP,EAAE,UAAYA,EAAE,IAAM,SAAUkD,EAAM,CACpC,IAAIC,EAAUlB,EAAGmB,EAAa/C,EAAGgD,EAAKC,EAAK5B,EAAIH,EAC7CgC,EAAM,KACNjD,EAAOiD,EAAI,YACXvC,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVkD,EAAQ,EAGV,GAAIN,GAAQ,KACVA,EAAO,IAAI5C,EAAK,EAAE,EAClB6C,EAAW,OACN,CAKL,GAJAD,EAAO,IAAI5C,EAAK4C,CAAI,EACpBjB,EAAIiB,EAAK,EAGLA,EAAK,EAAI,GAAK,CAACjB,GAAK,CAACA,EAAE,CAAC,GAAKiB,EAAK,GAAG,CAAC,EAAG,OAAO,IAAI5C,EAAK,GAAG,EAEhE6C,EAAWD,EAAK,GAAG,EAAE,CACvB,CAKA,GAHAjB,EAAIsB,EAAI,EAGJA,EAAI,EAAI,GAAK,CAACtB,GAAK,CAACA,EAAE,CAAC,GAAKsB,EAAI,GAAG,CAAC,EACtC,OAAO,IAAIjD,EAAK2B,GAAK,CAACA,EAAE,CAAC,EAAI,KAASsB,EAAI,GAAK,EAAI,IAAMtB,EAAI,EAAI,GAAK,EAKxE,GAAIkB,EACF,GAAIlB,EAAE,OAAS,EACboB,EAAM,OACD,CACL,IAAKhD,EAAI4B,EAAE,CAAC,EAAG5B,EAAI,KAAO,GAAIA,GAAK,GACnCgD,EAAMhD,IAAM,CACd,CAyBF,GAtBAtB,EAAW,GACX2C,EAAKV,EAAKwC,EACVF,EAAMG,GAAiBF,EAAK7B,CAAE,EAC9B0B,EAAcD,EAAWO,GAAQpD,EAAMoB,EAAK,EAAE,EAAI+B,GAAiBP,EAAMxB,CAAE,EAG3EH,EAAIQ,GAAOuB,EAAKF,EAAa1B,EAAI,CAAC,EAgB9BiC,GAAoBpC,EAAE,EAAGlB,EAAIW,EAAIC,CAAE,EAErC,EAME,IALAS,GAAM,GACN4B,EAAMG,GAAiBF,EAAK7B,CAAE,EAC9B0B,EAAcD,EAAWO,GAAQpD,EAAMoB,EAAK,EAAE,EAAI+B,GAAiBP,EAAMxB,CAAE,EAC3EH,EAAIQ,GAAOuB,EAAKF,EAAa1B,EAAI,CAAC,EAE9B,CAAC2B,EAAK,CAGJ,CAACvB,GAAeP,EAAE,CAAC,EAAE,MAAMlB,EAAI,EAAGA,EAAI,EAAE,EAAI,GAAK,OACnDkB,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,GAG3B,KACF,OACO2C,GAAoBpC,EAAE,EAAGlB,GAAK,GAAIY,CAAE,GAG/C,OAAAlC,EAAW,GAEJmB,EAASqB,EAAGP,EAAIC,CAAE,CAC3B,EAgDAjB,EAAE,MAAQA,EAAE,IAAM,SAAUO,EAAG,CAC7B,IAAI0B,EAAGb,EAAGZ,EAAGC,EAAGJ,EAAG6B,EAAKlB,EAAIC,EAAIL,EAAIgD,EAAIC,EAAMhD,EAC5CZ,EAAI,KACJK,EAAOL,EAAE,YAKX,GAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,EAGb,MAAI,CAACN,EAAE,GAAK,CAACM,EAAE,EAAGA,EAAI,IAAID,EAAK,GAAG,EAGzBL,EAAE,EAAGM,EAAE,EAAI,CAACA,EAAE,EAKlBA,EAAI,IAAID,EAAKC,EAAE,GAAKN,EAAE,IAAMM,EAAE,EAAIN,EAAI,GAAG,EAEvCM,EAIT,GAAIN,EAAE,GAAKM,EAAE,EACX,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFN,EAAE,KAAKM,CAAC,EASjB,GANAK,EAAKX,EAAE,EACPY,EAAKN,EAAE,EACPS,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAGN,CAACM,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAAG,CAGpB,GAAIA,EAAG,CAAC,EAAGN,EAAE,EAAI,CAACA,EAAE,UAGXK,EAAG,CAAC,EAAGL,EAAI,IAAID,EAAKL,CAAC,MAIzB,QAAO,IAAIK,EAAKW,IAAO,EAAI,GAAK,CAAC,EAEtC,OAAOlC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,CAC1C,CAYA,GAPAa,EAAI/B,GAAUkB,EAAE,EAAIX,CAAQ,EAC5BgE,EAAKvE,GAAUY,EAAE,EAAIL,CAAQ,EAE7BgB,EAAKA,EAAG,MAAM,EACdP,EAAIuD,EAAKxC,EAGLf,EAAG,CAyBL,IAxBAwD,EAAOxD,EAAI,EAEPwD,GACF5B,EAAIrB,EACJP,EAAI,CAACA,EACL6B,EAAMrB,EAAG,SAEToB,EAAIpB,EACJO,EAAIwC,EACJ1B,EAAMtB,EAAG,QAMXJ,EAAI,KAAK,IAAI,KAAK,KAAKQ,EAAKpB,CAAQ,EAAGsC,CAAG,EAAI,EAE1C7B,EAAIG,IACNH,EAAIG,EACJyB,EAAE,OAAS,GAIbA,EAAE,QAAQ,EACLzB,EAAIH,EAAGG,KAAMyB,EAAE,KAAK,CAAC,EAC1BA,EAAE,QAAQ,CAGZ,KAAO,CASL,IALAzB,EAAII,EAAG,OACPsB,EAAMrB,EAAG,OACTgD,EAAOrD,EAAI0B,EACP2B,IAAM3B,EAAM1B,GAEXA,EAAI,EAAGA,EAAI0B,EAAK1B,IACnB,GAAII,EAAGJ,CAAC,GAAKK,EAAGL,CAAC,EAAG,CAClBqD,EAAOjD,EAAGJ,CAAC,EAAIK,EAAGL,CAAC,EACnB,KACF,CAGFH,EAAI,CACN,CAaA,IAXIwD,IACF5B,EAAIrB,EACJA,EAAKC,EACLA,EAAKoB,EACL1B,EAAE,EAAI,CAACA,EAAE,GAGX2B,EAAMtB,EAAG,OAIJJ,EAAIK,EAAG,OAASqB,EAAK1B,EAAI,EAAG,EAAEA,EAAGI,EAAGsB,GAAK,EAAI,EAGlD,IAAK1B,EAAIK,EAAG,OAAQL,EAAIH,GAAI,CAE1B,GAAIO,EAAG,EAAEJ,CAAC,EAAIK,EAAGL,CAAC,EAAG,CACnB,IAAKC,EAAID,EAAGC,GAAKG,EAAG,EAAEH,CAAC,IAAM,GAAIG,EAAGH,CAAC,EAAId,GAAO,EAChD,EAAEiB,EAAGH,CAAC,EACNG,EAAGJ,CAAC,GAAKb,EACX,CAEAiB,EAAGJ,CAAC,GAAKK,EAAGL,CAAC,CACf,CAGA,KAAOI,EAAG,EAAEsB,CAAG,IAAM,GAAItB,EAAG,IAAI,EAGhC,KAAOA,EAAG,CAAC,IAAM,EAAGA,EAAG,MAAM,EAAG,EAAEQ,EAGlC,OAAKR,EAAG,CAAC,GAETL,EAAE,EAAIK,EACNL,EAAE,EAAIuD,GAAkBlD,EAAIQ,CAAC,EAEtBrC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,GALrB,IAAID,EAAKW,IAAO,EAAI,GAAK,CAAC,CAM/C,EA2BAjB,EAAE,OAASA,EAAE,IAAM,SAAUO,EAAG,CAC9B,IAAIwD,EACF9D,EAAI,KACJK,EAAOL,EAAE,YAKX,OAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,GAAKA,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,EAAU,IAAID,EAAK,GAAG,EAGnD,CAACC,EAAE,GAAKN,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,EAChBC,EAAS,IAAII,EAAKL,CAAC,EAAGK,EAAK,UAAWA,EAAK,QAAQ,GAI5DvB,EAAW,GAEPuB,EAAK,QAAU,GAIjByD,EAAIhC,GAAO9B,EAAGM,EAAE,IAAI,EAAG,EAAG,EAAG,CAAC,EAC9BwD,EAAE,GAAKxD,EAAE,GAETwD,EAAIhC,GAAO9B,EAAGM,EAAG,EAAGD,EAAK,OAAQ,CAAC,EAGpCyD,EAAIA,EAAE,MAAMxD,CAAC,EAEbxB,EAAW,GAEJkB,EAAE,MAAM8D,CAAC,EAClB,EASA/D,EAAE,mBAAqBA,EAAE,IAAM,UAAY,CACzC,OAAOgE,GAAmB,IAAI,CAChC,EAQAhE,EAAE,iBAAmBA,EAAE,GAAK,UAAY,CACtC,OAAOyD,GAAiB,IAAI,CAC9B,EAQAzD,EAAE,QAAUA,EAAE,IAAM,UAAY,CAC9B,IAAIC,EAAI,IAAI,KAAK,YAAY,IAAI,EACjC,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFC,EAASD,CAAC,CACnB,EAwBAD,EAAE,KAAOA,EAAE,IAAM,SAAUO,EAAG,CAC5B,IAAI0D,EAAOhC,EAAGb,EAAGZ,EAAGH,EAAG6B,EAAKlB,EAAIC,EAAIL,EAAIC,EACtCZ,EAAI,KACJK,EAAOL,EAAE,YAKX,GAHAM,EAAI,IAAID,EAAKC,CAAC,EAGV,CAACN,EAAE,GAAK,CAACM,EAAE,EAGb,MAAI,CAACN,EAAE,GAAK,CAACM,EAAE,EAAGA,EAAI,IAAID,EAAK,GAAG,EAMxBL,EAAE,IAAGM,EAAI,IAAID,EAAKC,EAAE,GAAKN,EAAE,IAAMM,EAAE,EAAIN,EAAI,GAAG,GAEjDM,EAIT,GAAIN,EAAE,GAAKM,EAAE,EACX,OAAAA,EAAE,EAAI,CAACA,EAAE,EACFN,EAAE,MAAMM,CAAC,EASlB,GANAK,EAAKX,EAAE,EACPY,EAAKN,EAAE,EACPS,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAGN,CAACM,EAAG,CAAC,GAAK,CAACC,EAAG,CAAC,EAIjB,OAAKA,EAAG,CAAC,IAAGN,EAAI,IAAID,EAAKL,CAAC,GAEnBlB,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,EAa1C,GAPAF,EAAIhB,GAAUY,EAAE,EAAIL,CAAQ,EAC5BwB,EAAI/B,GAAUkB,EAAE,EAAIX,CAAQ,EAE5BgB,EAAKA,EAAG,MAAM,EACdJ,EAAIH,EAAIe,EAGJZ,EAAG,CAuBL,IArBIA,EAAI,GACNyB,EAAIrB,EACJJ,EAAI,CAACA,EACL0B,EAAMrB,EAAG,SAEToB,EAAIpB,EACJO,EAAIf,EACJ6B,EAAMtB,EAAG,QAIXP,EAAI,KAAK,KAAKW,EAAKpB,CAAQ,EAC3BsC,EAAM7B,EAAI6B,EAAM7B,EAAI,EAAI6B,EAAM,EAE1B1B,EAAI0B,IACN1B,EAAI0B,EACJD,EAAE,OAAS,GAIbA,EAAE,QAAQ,EACHzB,KAAMyB,EAAE,KAAK,CAAC,EACrBA,EAAE,QAAQ,CACZ,CAcA,IAZAC,EAAMtB,EAAG,OACTJ,EAAIK,EAAG,OAGHqB,EAAM1B,EAAI,IACZA,EAAI0B,EACJD,EAAIpB,EACJA,EAAKD,EACLA,EAAKqB,GAIFgC,EAAQ,EAAGzD,GACdyD,GAASrD,EAAG,EAAEJ,CAAC,EAAII,EAAGJ,CAAC,EAAIK,EAAGL,CAAC,EAAIyD,GAAStE,GAAO,EACnDiB,EAAGJ,CAAC,GAAKb,GAUX,IAPIsE,IACFrD,EAAG,QAAQqD,CAAK,EAChB,EAAE7C,GAKCc,EAAMtB,EAAG,OAAQA,EAAG,EAAEsB,CAAG,GAAK,GAAItB,EAAG,IAAI,EAE9C,OAAAL,EAAE,EAAIK,EACNL,EAAE,EAAIuD,GAAkBlD,EAAIQ,CAAC,EAEtBrC,EAAWmB,EAASK,EAAGS,EAAIC,CAAE,EAAIV,CAC1C,EASAP,EAAE,UAAYA,EAAE,GAAK,SAAUkE,EAAG,CAChC,IAAI7D,EACFJ,EAAI,KAEN,GAAIiE,IAAM,QAAUA,IAAM,CAAC,CAACA,GAAKA,IAAM,GAAKA,IAAM,EAAG,MAAM,MAAMjF,GAAkBiF,CAAC,EAEpF,OAAIjE,EAAE,GACJI,EAAI8D,GAAalE,EAAE,CAAC,EAChBiE,GAAKjE,EAAE,EAAI,EAAII,IAAGA,EAAIJ,EAAE,EAAI,IAEhCI,EAAI,IAGCA,CACT,EAQAL,EAAE,MAAQ,UAAY,CACpB,IAAIC,EAAI,KACNK,EAAOL,EAAE,YAEX,OAAOC,EAAS,IAAII,EAAKL,CAAC,EAAGA,EAAE,EAAI,EAAGK,EAAK,QAAQ,CACrD,EAkBAN,EAAE,KAAOA,EAAE,IAAM,UAAY,CAC3B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,KAAK,IAAIf,EAAE,EAAGA,EAAE,GAAG,CAAC,EAAIL,EAC9CU,EAAK,SAAW,EAEhBL,EAAImE,GAAK9D,EAAMa,GAAiBb,EAAML,CAAC,CAAC,EAExCK,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,GAAW,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAb9B,IAAIX,EAAK,GAAG,CAcxC,EAeAN,EAAE,WAAaA,EAAE,KAAO,UAAY,CAClC,IAAIqB,EAAGC,EAAGI,EAAIH,EAAGC,EAAKG,EACpB1B,EAAI,KACJgC,EAAIhC,EAAE,EACNmB,EAAInB,EAAE,EACNwB,EAAIxB,EAAE,EACNK,EAAOL,EAAE,YAGX,GAAIwB,IAAM,GAAK,CAACQ,GAAK,CAACA,EAAE,CAAC,EACvB,OAAO,IAAI3B,EAAK,CAACmB,GAAKA,EAAI,IAAM,CAACQ,GAAKA,EAAE,CAAC,GAAK,IAAMA,EAAIhC,EAAI,GAAK,EAgCnE,IA7BAlB,EAAW,GAGX0C,EAAI,KAAK,KAAK,CAACxB,CAAC,EAIZwB,GAAK,GAAKA,GAAK,KACjBH,EAAIQ,GAAeG,CAAC,GAEfX,EAAE,OAASF,GAAK,GAAK,IAAGE,GAAK,KAClCG,EAAI,KAAK,KAAKH,CAAC,EACfF,EAAI/B,IAAW+B,EAAI,GAAK,CAAC,GAAKA,EAAI,GAAKA,EAAI,GAEvCK,GAAK,IACPH,EAAI,KAAOF,GAEXE,EAAIG,EAAE,cAAc,EACpBH,EAAIA,EAAE,MAAM,EAAGA,EAAE,QAAQ,GAAG,EAAI,CAAC,EAAIF,GAGvCG,EAAI,IAAIjB,EAAKgB,CAAC,GAEdC,EAAI,IAAIjB,EAAKmB,EAAE,SAAS,CAAC,EAG3BC,GAAMN,EAAId,EAAK,WAAa,IAQ1B,GAJAqB,EAAIJ,EACJA,EAAII,EAAE,KAAKI,GAAO9B,EAAG0B,EAAGD,EAAK,EAAG,CAAC,CAAC,EAAE,MAAM,EAAG,EAGzCI,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGD,CAAE,KAAOJ,EAAIQ,GAAeP,EAAE,CAAC,GAAG,MAAM,EAAGG,CAAE,EAK5E,GAJAJ,EAAIA,EAAE,MAAMI,EAAK,EAAGA,EAAK,CAAC,EAItBJ,GAAK,QAAU,CAACE,GAAOF,GAAK,OAAQ,CAItC,GAAI,CAACE,IACHtB,EAASyB,EAAGP,EAAI,EAAG,CAAC,EAEhBO,EAAE,MAAMA,CAAC,EAAE,GAAG1B,CAAC,GAAG,CACpBsB,EAAII,EACJ,KACF,CAGFD,GAAM,EACNF,EAAM,CACR,KAAO,EAID,CAAC,CAACF,GAAK,CAAC,CAACA,EAAE,MAAM,CAAC,GAAKA,EAAE,OAAO,CAAC,GAAK,OAGxCpB,EAASqB,EAAGH,EAAI,EAAG,CAAC,EACpBC,EAAI,CAACE,EAAE,MAAMA,CAAC,EAAE,GAAGtB,CAAC,GAGtB,KACF,CAIJ,OAAAlB,EAAW,GAEJmB,EAASqB,EAAGH,EAAGd,EAAK,SAAUe,CAAC,CACxC,EAgBArB,EAAE,QAAUA,EAAE,IAAM,UAAY,CAC9B,IAAIgB,EAAIC,EACNhB,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAKA,EAAE,SAAS,EACZA,EAAE,OAAO,EAAU,IAAIK,EAAKL,CAAC,GAEjCe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SACVA,EAAK,UAAYU,EAAK,GACtBV,EAAK,SAAW,EAEhBL,EAAIA,EAAE,IAAI,EACVA,EAAE,EAAI,EACNA,EAAI8B,GAAO9B,EAAG,IAAIK,EAAK,CAAC,EAAE,MAAML,EAAE,MAAMA,CAAC,CAAC,EAAE,KAAK,EAAGe,EAAK,GAAI,CAAC,EAE9DV,EAAK,UAAYU,EACjBV,EAAK,SAAWW,EAETf,EAASpB,IAAY,GAAKA,IAAY,EAAImB,EAAE,IAAI,EAAIA,EAAGe,EAAIC,EAAI,EAAI,GAfhD,IAAIX,EAAK,GAAG,CAgBxC,EAwBAN,EAAE,MAAQA,EAAE,IAAM,SAAUO,EAAG,CAC7B,IAAI0D,EAAO7C,EAAGZ,EAAGH,EAAGkB,EAAG8C,EAAI1C,EAAGjB,EAAKC,EACjCV,EAAI,KACJK,EAAOL,EAAE,YACTW,EAAKX,EAAE,EACPY,GAAMN,EAAI,IAAID,EAAKC,CAAC,GAAG,EAKzB,GAHAA,EAAE,GAAKN,EAAE,EAGL,CAACW,GAAM,CAACA,EAAG,CAAC,GAAK,CAACC,GAAM,CAACA,EAAG,CAAC,EAE/B,OAAO,IAAIP,EAAK,CAACC,EAAE,GAAKK,GAAM,CAACA,EAAG,CAAC,GAAK,CAACC,GAAMA,GAAM,CAACA,EAAG,CAAC,GAAK,CAACD,EAI5D,IAIA,CAACA,GAAM,CAACC,EAAKN,EAAE,EAAI,EAAIA,EAAE,EAAI,CAAC,EAoBpC,IAjBAa,EAAI/B,GAAUY,EAAE,EAAIL,CAAQ,EAAIP,GAAUkB,EAAE,EAAIX,CAAQ,EACxDc,EAAME,EAAG,OACTD,EAAME,EAAG,OAGLH,EAAMC,IACRY,EAAIX,EACJA,EAAKC,EACLA,EAAKU,EACL8C,EAAK3D,EACLA,EAAMC,EACNA,EAAM0D,GAIR9C,EAAI,CAAC,EACL8C,EAAK3D,EAAMC,EACNH,EAAI6D,EAAI7D,KAAMe,EAAE,KAAK,CAAC,EAG3B,IAAKf,EAAIG,EAAK,EAAEH,GAAK,GAAI,CAEvB,IADAyD,EAAQ,EACH5D,EAAIK,EAAMF,EAAGH,EAAIG,GACpBmB,EAAIJ,EAAElB,CAAC,EAAIQ,EAAGL,CAAC,EAAII,EAAGP,EAAIG,EAAI,CAAC,EAAIyD,EACnC1C,EAAElB,GAAG,EAAIsB,EAAIhC,GAAO,EACpBsE,EAAQtC,EAAIhC,GAAO,EAGrB4B,EAAElB,CAAC,GAAKkB,EAAElB,CAAC,EAAI4D,GAAStE,GAAO,CACjC,CAGA,KAAO,CAAC4B,EAAE,EAAE8C,CAAE,GAAI9C,EAAE,IAAI,EAExB,OAAI0C,EAAO,EAAE7C,EACRG,EAAE,MAAM,EAEbhB,EAAE,EAAIgB,EACNhB,EAAE,EAAIuD,GAAkBvC,EAAGH,CAAC,EAErBrC,EAAWmB,EAASK,EAAGD,EAAK,UAAWA,EAAK,QAAQ,EAAIC,CACjE,EAaAP,EAAE,SAAW,SAAU0B,EAAIT,EAAI,CAC7B,OAAOqD,GAAe,KAAM,EAAG5C,EAAIT,CAAE,CACvC,EAaAjB,EAAE,gBAAkBA,EAAE,KAAO,SAAUuE,EAAItD,EAAI,CAC7C,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAGX,OADAA,EAAI,IAAIK,EAAKL,CAAC,EACVsE,IAAO,OAAetE,GAE1BuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAEjBf,EAASD,EAAGsE,EAAKtE,EAAE,EAAI,EAAGgB,CAAE,EACrC,EAWAjB,EAAE,cAAgB,SAAUuE,EAAItD,EAAI,CAClC,IAAIwD,EACFxE,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIsE,IAAO,OACTE,EAAMC,GAAezE,EAAG,EAAI,GAE5BuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBhB,EAAIC,EAAS,IAAII,EAAKL,CAAC,EAAGsE,EAAK,EAAGtD,CAAE,EACpCwD,EAAMC,GAAezE,EAAG,GAAMsE,EAAK,CAAC,GAG/BtE,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAmBAzE,EAAE,QAAU,SAAUuE,EAAItD,EAAI,CAC5B,IAAIwD,EAAKlE,EACPN,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIsE,IAAO,OACTE,EAAMC,GAAezE,CAAC,GAEtBuE,GAAWD,EAAI,EAAG/F,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBV,EAAIL,EAAS,IAAII,EAAKL,CAAC,EAAGsE,EAAKtE,EAAE,EAAI,EAAGgB,CAAE,EAC1CwD,EAAMC,GAAenE,EAAG,GAAOgE,EAAKhE,EAAE,EAAI,CAAC,GAKtCN,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAcAzE,EAAE,WAAa,SAAU2E,EAAM,CAC7B,IAAI1C,EAAG2C,EAAIC,EAAIC,EAAI1D,EAAGf,EAAGiB,EAAGyD,EAAIC,EAAIhE,EAAI+C,EAAGxC,EACzCtB,EAAI,KACJW,EAAKX,EAAE,EACPK,EAAOL,EAAE,YAEX,GAAI,CAACW,EAAI,OAAO,IAAIN,EAAKL,CAAC,EAU1B,GARA+E,EAAKJ,EAAK,IAAItE,EAAK,CAAC,EACpBuE,EAAKE,EAAK,IAAIzE,EAAK,CAAC,EAEpB2B,EAAI,IAAI3B,EAAKuE,CAAE,EACfzD,EAAIa,EAAE,EAAIkC,GAAavD,CAAE,EAAIX,EAAE,EAAI,EACnCI,EAAIe,EAAIxB,EACRqC,EAAE,EAAE,CAAC,EAAI3C,GAAQ,GAAIe,EAAI,EAAIT,EAAWS,EAAIA,CAAC,EAEzCsE,GAAQ,KAGVA,EAAOvD,EAAI,EAAIa,EAAI+C,MACd,CAEL,GADA1D,EAAI,IAAIhB,EAAKqE,CAAI,EACb,CAACrD,EAAE,MAAM,GAAKA,EAAE,GAAG0D,CAAE,EAAG,MAAM,MAAM/F,GAAkBqC,CAAC,EAC3DqD,EAAOrD,EAAE,GAAGW,CAAC,EAAKb,EAAI,EAAIa,EAAI+C,EAAM1D,CACtC,CAOA,IALAvC,EAAW,GACXuC,EAAI,IAAIhB,EAAKwB,GAAelB,CAAE,CAAC,EAC/BI,EAAKV,EAAK,UACVA,EAAK,UAAYc,EAAIR,EAAG,OAAShB,EAAW,EAG1CmE,EAAIhC,GAAOT,EAAGW,EAAG,EAAG,EAAG,CAAC,EACxB6C,EAAKF,EAAG,KAAKb,EAAE,MAAMc,CAAE,CAAC,EACpBC,EAAG,IAAIH,CAAI,GAAK,GACpBC,EAAKC,EACLA,EAAKC,EACLA,EAAKE,EACLA,EAAKD,EAAG,KAAKhB,EAAE,MAAMe,CAAE,CAAC,EACxBC,EAAKD,EACLA,EAAK7C,EACLA,EAAIX,EAAE,MAAMyC,EAAE,MAAMe,CAAE,CAAC,EACvBxD,EAAIwD,EAGN,OAAAA,EAAK/C,GAAO4C,EAAK,MAAMC,CAAE,EAAGC,EAAI,EAAG,EAAG,CAAC,EACvCE,EAAKA,EAAG,KAAKD,EAAG,MAAME,CAAE,CAAC,EACzBJ,EAAKA,EAAG,KAAKE,EAAG,MAAMD,CAAE,CAAC,EACzBE,EAAG,EAAIC,EAAG,EAAI/E,EAAE,EAGhBsB,EAAIQ,GAAOiD,EAAIH,EAAIzD,EAAG,CAAC,EAAE,MAAMnB,CAAC,EAAE,IAAI,EAAE,IAAI8B,GAAOgD,EAAIH,EAAIxD,EAAG,CAAC,EAAE,MAAMnB,CAAC,EAAE,IAAI,CAAC,EAAI,EAC7E,CAAC+E,EAAIH,CAAE,EAAI,CAACE,EAAIH,CAAE,EAExBtE,EAAK,UAAYU,EACjBjC,EAAW,GAEJwC,CACT,EAaAvB,EAAE,cAAgBA,EAAE,MAAQ,SAAU0B,EAAIT,EAAI,CAC5C,OAAOqD,GAAe,KAAM,GAAI5C,EAAIT,CAAE,CACxC,EAmBAjB,EAAE,UAAY,SAAUO,EAAGU,EAAI,CAC7B,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAIX,GAFAA,EAAI,IAAIK,EAAKL,CAAC,EAEVM,GAAK,KAAM,CAGb,GAAI,CAACN,EAAE,EAAG,OAAOA,EAEjBM,EAAI,IAAID,EAAK,CAAC,EACdW,EAAKX,EAAK,QACZ,KAAO,CASL,GARAC,EAAI,IAAID,EAAKC,CAAC,EACVU,IAAO,OACTA,EAAKX,EAAK,SAEVkE,GAAWvD,EAAI,EAAG,CAAC,EAIjB,CAAChB,EAAE,EAAG,OAAOM,EAAE,EAAIN,EAAIM,EAG3B,GAAI,CAACA,EAAE,EACL,OAAIA,EAAE,IAAGA,EAAE,EAAIN,EAAE,GACVM,CAEX,CAGA,OAAIA,EAAE,EAAE,CAAC,GACPxB,EAAW,GACXkB,EAAI8B,GAAO9B,EAAGM,EAAG,EAAGU,EAAI,CAAC,EAAE,MAAMV,CAAC,EAClCxB,EAAW,GACXmB,EAASD,CAAC,IAIVM,EAAE,EAAIN,EAAE,EACRA,EAAIM,GAGCN,CACT,EAQAD,EAAE,SAAW,UAAY,CACvB,MAAO,CAAC,IACV,EAaAA,EAAE,QAAU,SAAU0B,EAAIT,EAAI,CAC5B,OAAOqD,GAAe,KAAM,EAAG5C,EAAIT,CAAE,CACvC,EA8CAjB,EAAE,QAAUA,EAAE,IAAM,SAAUO,EAAG,CAC/B,IAAI,EAAGF,EAAGW,EAAIO,EAAGN,EAAI,EACnBhB,EAAI,KACJK,EAAOL,EAAE,YACTgF,EAAK,EAAE1E,EAAI,IAAID,EAAKC,CAAC,GAGvB,GAAI,CAACN,EAAE,GAAK,CAACM,EAAE,GAAK,CAACN,EAAE,EAAE,CAAC,GAAK,CAACM,EAAE,EAAE,CAAC,EAAG,OAAO,IAAID,EAAKhB,GAAQ,CAACW,EAAGgF,CAAE,CAAC,EAIvE,GAFAhF,EAAI,IAAIK,EAAKL,CAAC,EAEVA,EAAE,GAAG,CAAC,EAAG,OAAOA,EAKpB,GAHAe,EAAKV,EAAK,UACVW,EAAKX,EAAK,SAENC,EAAE,GAAG,CAAC,EAAG,OAAOL,EAASD,EAAGe,EAAIC,CAAE,EAMtC,GAHA,EAAI5B,GAAUkB,EAAE,EAAIX,CAAQ,EAGxB,GAAKW,EAAE,EAAE,OAAS,IAAMF,EAAI4E,EAAK,EAAI,CAACA,EAAKA,IAAOpF,GACpD,OAAA0B,EAAI2D,GAAO5E,EAAML,EAAGI,EAAGW,CAAE,EAClBT,EAAE,EAAI,EAAI,IAAID,EAAK,CAAC,EAAE,IAAIiB,CAAC,EAAIrB,EAASqB,EAAGP,EAAIC,CAAE,EAM1D,GAHA,EAAIhB,EAAE,EAGF,EAAI,EAAG,CAGT,GAAI,EAAIM,EAAE,EAAE,OAAS,EAAG,OAAO,IAAID,EAAK,GAAG,EAM3C,IAHKC,EAAE,EAAE,CAAC,EAAI,IAAM,IAAG,EAAI,GAGvBN,EAAE,GAAK,GAAKA,EAAE,EAAE,CAAC,GAAK,GAAKA,EAAE,EAAE,QAAU,EAC3C,OAAAA,EAAE,EAAI,EACCA,CAEX,CAcA,OARAI,EAAIf,GAAQ,CAACW,EAAGgF,CAAE,EAClB,EAAI5E,GAAK,GAAK,CAAC,SAASA,CAAC,EACrBhB,GAAU4F,GAAM,KAAK,IAAI,KAAOnD,GAAe7B,EAAE,CAAC,CAAC,EAAI,KAAK,KAAOA,EAAE,EAAI,EAAE,EAC3E,IAAIK,EAAKD,EAAI,EAAE,EAAE,EAKjB,EAAIC,EAAK,KAAO,GAAK,EAAIA,EAAK,KAAO,EAAU,IAAIA,EAAK,EAAI,EAAI,EAAI,EAAI,CAAC,GAE7EvB,EAAW,GACXuB,EAAK,SAAWL,EAAE,EAAI,EAMtBI,EAAI,KAAK,IAAI,IAAK,EAAI,IAAI,MAAM,EAGhCkB,EAAIyC,GAAmBzD,EAAE,MAAMkD,GAAiBxD,EAAGe,EAAKX,CAAC,CAAC,EAAGW,CAAE,EAG3DO,EAAE,IAGJA,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,EAIrB2C,GAAoBpC,EAAE,EAAGP,EAAIC,CAAE,IACjC,EAAID,EAAK,GAGTO,EAAIrB,EAAS8D,GAAmBzD,EAAE,MAAMkD,GAAiBxD,EAAG,EAAII,CAAC,CAAC,EAAG,CAAC,EAAG,EAAI,EAAG,CAAC,EAG7E,CAACyB,GAAeP,EAAE,CAAC,EAAE,MAAMP,EAAK,EAAGA,EAAK,EAAE,EAAI,GAAK,OACrDO,EAAIrB,EAASqB,EAAGP,EAAK,EAAG,CAAC,KAK/BO,EAAE,EAAI,EACNxC,EAAW,GACXuB,EAAK,SAAWW,EAETf,EAASqB,EAAGP,EAAIC,CAAE,EAC3B,EAcAjB,EAAE,YAAc,SAAU0B,EAAIT,EAAI,CAChC,IAAIwD,EACFxE,EAAI,KACJK,EAAOL,EAAE,YAEX,OAAIyB,IAAO,OACT+C,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,GAEpEkE,GAAW9C,EAAI,EAAGlD,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,EAExBhB,EAAIC,EAAS,IAAII,EAAKL,CAAC,EAAGyB,EAAIT,CAAE,EAChCwD,EAAMC,GAAezE,EAAGyB,GAAMzB,EAAE,GAAKA,EAAE,GAAKK,EAAK,SAAUoB,CAAE,GAGxDzB,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAiBAzE,EAAE,oBAAsBA,EAAE,KAAO,SAAU0B,EAAIT,EAAI,CACjD,IAAIhB,EAAI,KACNK,EAAOL,EAAE,YAEX,OAAIyB,IAAO,QACTA,EAAKpB,EAAK,UACVW,EAAKX,EAAK,WAEVkE,GAAW9C,EAAI,EAAGlD,EAAU,EAExByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,GAGnBf,EAAS,IAAII,EAAKL,CAAC,EAAGyB,EAAIT,CAAE,CACrC,EAUAjB,EAAE,SAAW,UAAY,CACvB,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTwE,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,EAEtE,OAAOL,EAAE,MAAM,GAAK,CAACA,EAAE,OAAO,EAAI,IAAMwE,EAAMA,CAChD,EAOAzE,EAAE,UAAYA,EAAE,MAAQ,UAAY,CAClC,OAAOE,EAAS,IAAI,KAAK,YAAY,IAAI,EAAG,KAAK,EAAI,EAAG,CAAC,CAC3D,EAQAF,EAAE,QAAUA,EAAE,OAAS,UAAY,CACjC,IAAIC,EAAI,KACNK,EAAOL,EAAE,YACTwE,EAAMC,GAAezE,EAAGA,EAAE,GAAKK,EAAK,UAAYL,EAAE,GAAKK,EAAK,QAAQ,EAEtE,OAAOL,EAAE,MAAM,EAAI,IAAMwE,EAAMA,CACjC,EAoDA,SAAS3C,GAAeG,EAAG,CACzB,IAAIzB,EAAGH,EAAG8E,EACRC,EAAkBnD,EAAE,OAAS,EAC7BwC,EAAM,GACNzC,EAAIC,EAAE,CAAC,EAET,GAAImD,EAAkB,EAAG,CAEvB,IADAX,GAAOzC,EACFxB,EAAI,EAAGA,EAAI4E,EAAiB5E,IAC/B2E,EAAKlD,EAAEzB,CAAC,EAAI,GACZH,EAAIT,EAAWuF,EAAG,OACd9E,IAAGoE,GAAOY,GAAchF,CAAC,GAC7BoE,GAAOU,EAGTnD,EAAIC,EAAEzB,CAAC,EACP2E,EAAKnD,EAAI,GACT3B,EAAIT,EAAWuF,EAAG,OACd9E,IAAGoE,GAAOY,GAAchF,CAAC,EAC/B,SAAW2B,IAAM,EACf,MAAO,IAIT,KAAOA,EAAI,KAAO,GAAIA,GAAK,GAE3B,OAAOyC,EAAMzC,CACf,CAGA,SAASwC,GAAWhE,EAAGL,EAAKC,EAAK,CAC/B,GAAII,IAAM,CAAC,CAACA,GAAKA,EAAIL,GAAOK,EAAIJ,EAC9B,MAAM,MAAMnB,GAAkBuB,CAAC,CAEnC,CAQA,SAASmD,GAAoB1B,EAAGzB,EAAGS,EAAIqE,EAAW,CAChD,IAAIC,EAAIlF,EAAGkB,EAAGiE,EAGd,IAAKnF,EAAI4B,EAAE,CAAC,EAAG5B,GAAK,GAAIA,GAAK,GAAI,EAAEG,EAGnC,MAAI,EAAEA,EAAI,GACRA,GAAKZ,EACL2F,EAAK,IAELA,EAAK,KAAK,MAAM/E,EAAI,GAAKZ,CAAQ,EACjCY,GAAKZ,GAMPS,EAAIf,GAAQ,GAAIM,EAAWY,CAAC,EAC5BgF,EAAKvD,EAAEsD,CAAE,EAAIlF,EAAI,EAEbiF,GAAa,KACX9E,EAAI,GACFA,GAAK,EAAGgF,EAAKA,EAAK,IAAM,EACnBhF,GAAK,IAAGgF,EAAKA,EAAK,GAAK,GAChCjE,EAAIN,EAAK,GAAKuE,GAAM,OAASvE,EAAK,GAAKuE,GAAM,OAASA,GAAM,KAASA,GAAM,GAE3EjE,GAAKN,EAAK,GAAKuE,EAAK,GAAKnF,GAAKY,EAAK,GAAKuE,EAAK,GAAKnF,EAAI,KACnD4B,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAM,IAAMf,GAAQ,GAAIkB,EAAI,CAAC,EAAI,IAC/CgF,GAAMnF,EAAI,GAAKmF,GAAM,KAAOvD,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAM,IAAM,EAG3DG,EAAI,GACFA,GAAK,EAAGgF,EAAKA,EAAK,IAAO,EACpBhF,GAAK,EAAGgF,EAAKA,EAAK,IAAM,EACxBhF,GAAK,IAAGgF,EAAKA,EAAK,GAAK,GAChCjE,GAAK+D,GAAarE,EAAK,IAAMuE,GAAM,MAAQ,CAACF,GAAarE,EAAK,GAAKuE,GAAM,MAEzEjE,IAAM+D,GAAarE,EAAK,IAAMuE,EAAK,GAAKnF,GACvC,CAACiF,GAAarE,EAAK,GAAMuE,EAAK,GAAKnF,EAAI,KACrC4B,EAAEsD,EAAK,CAAC,EAAIlF,EAAI,IAAO,IAAMf,GAAQ,GAAIkB,EAAI,CAAC,EAAI,EAIlDe,CACT,CAMA,SAASkE,GAAYhB,EAAKiB,EAAQC,EAAS,CAOzC,QANIlF,EACFmF,EAAM,CAAC,CAAC,EACRC,EACArF,EAAI,EACJsF,EAAOrB,EAAI,OAENjE,EAAIsF,GAAO,CAChB,IAAKD,EAAOD,EAAI,OAAQC,KAASD,EAAIC,CAAI,GAAKH,EAE9C,IADAE,EAAI,CAAC,GAAKnH,GAAS,QAAQgG,EAAI,OAAOjE,GAAG,CAAC,EACrCC,EAAI,EAAGA,EAAImF,EAAI,OAAQnF,IACtBmF,EAAInF,CAAC,EAAIkF,EAAU,IACjBC,EAAInF,EAAI,CAAC,IAAM,SAAQmF,EAAInF,EAAI,CAAC,EAAI,GACxCmF,EAAInF,EAAI,CAAC,GAAKmF,EAAInF,CAAC,EAAIkF,EAAU,EACjCC,EAAInF,CAAC,GAAKkF,EAGhB,CAEA,OAAOC,EAAI,QAAQ,CACrB,CAQA,SAAS1E,GAAOZ,EAAML,EAAG,CACvB,IAAII,EAAG6B,EAAK3B,EAEZ,GAAIN,EAAE,OAAO,EAAG,OAAOA,EAMvBiC,EAAMjC,EAAE,EAAE,OACNiC,EAAM,IACR7B,EAAI,KAAK,KAAK6B,EAAM,CAAC,EACrB3B,GAAK,EAAI6B,GAAQ,EAAG/B,CAAC,GAAG,SAAS,IAEjCA,EAAI,GACJE,EAAI,gCAGND,EAAK,WAAaD,EAElBJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAE,MAAMM,CAAC,EAAG,IAAID,EAAK,CAAC,CAAC,EAGjD,QAAS,EAAID,EAAG,KAAM,CACpB,IAAI0F,EAAQ9F,EAAE,MAAMA,CAAC,EACrBA,EAAI8F,EAAM,MAAMA,CAAK,EAAE,MAAMA,CAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CACrD,CAEA,OAAAzF,EAAK,WAAaD,EAEXJ,CACT,CAMA,IAAI8B,GAAU,UAAY,CAGxB,SAASiE,EAAgB/F,EAAGI,EAAG6C,EAAM,CACnC,IAAI+C,EACFhC,EAAQ,EACRzD,EAAIP,EAAE,OAER,IAAKA,EAAIA,EAAE,MAAM,EAAGO,KAClByF,EAAOhG,EAAEO,CAAC,EAAIH,EAAI4D,EAClBhE,EAAEO,CAAC,EAAIyF,EAAO/C,EAAO,EACrBe,EAAQgC,EAAO/C,EAAO,EAGxB,OAAIe,GAAOhE,EAAE,QAAQgE,CAAK,EAEnBhE,CACT,CAEA,SAASiG,EAAQC,EAAGC,EAAGC,EAAIC,EAAI,CAC7B,IAAI9F,EAAGe,EAEP,GAAI8E,GAAMC,EACR/E,EAAI8E,EAAKC,EAAK,EAAI,OAElB,KAAK9F,EAAIe,EAAI,EAAGf,EAAI6F,EAAI7F,IACtB,GAAI2F,EAAE3F,CAAC,GAAK4F,EAAE5F,CAAC,EAAG,CAChBe,EAAI4E,EAAE3F,CAAC,EAAI4F,EAAE5F,CAAC,EAAI,EAAI,GACtB,KACF,CAIJ,OAAOe,CACT,CAEA,SAASgF,EAASJ,EAAGC,EAAGC,EAAInD,EAAM,CAIhC,QAHI1C,EAAI,EAGD6F,KACLF,EAAEE,CAAE,GAAK7F,EACTA,EAAI2F,EAAEE,CAAE,EAAID,EAAEC,CAAE,EAAI,EAAI,EACxBF,EAAEE,CAAE,EAAI7F,EAAI0C,EAAOiD,EAAEE,CAAE,EAAID,EAAEC,CAAE,EAIjC,KAAO,CAACF,EAAE,CAAC,GAAKA,EAAE,OAAS,GAAIA,EAAE,MAAM,CACzC,CAEA,OAAO,SAAUlG,EAAGM,EAAGS,EAAIC,EAAIsD,EAAIrB,EAAM,CACvC,IAAIsD,EAAKpF,EAAGZ,EAAGH,EAAGoG,EAASC,EAAMC,EAAMC,EAAO7C,EAAG8C,EAAIC,EAAKC,EAAMC,EAAMtF,EAAIC,EAAGsF,EAAIC,GAAIC,GACnFC,GAAIC,GACJ/G,GAAOL,EAAE,YACTqH,GAAOrH,EAAE,GAAKM,EAAE,EAAI,EAAI,GACxBK,GAAKX,EAAE,EACPY,EAAKN,EAAE,EAGT,GAAI,CAACK,IAAM,CAACA,GAAG,CAAC,GAAK,CAACC,GAAM,CAACA,EAAG,CAAC,EAE/B,OAAO,IAAIP,GACT,CAACL,EAAE,GAAK,CAACM,EAAE,IAAMK,GAAKC,GAAMD,GAAG,CAAC,GAAKC,EAAG,CAAC,EAAI,CAACA,GAAM,IAGpDD,IAAMA,GAAG,CAAC,GAAK,GAAK,CAACC,EAAKyG,GAAO,EAAIA,GAAO,CAAC,EAmBjD,IAhBIpE,GACFuD,EAAU,EACVrF,EAAInB,EAAE,EAAIM,EAAE,IAEZ2C,EAAOvD,GACP8G,EAAU7G,EACVwB,EAAI/B,GAAUY,EAAE,EAAIwG,CAAO,EAAIpH,GAAUkB,EAAE,EAAIkG,CAAO,GAGxDW,GAAKvG,EAAG,OACRqG,GAAKtG,GAAG,OACRmD,EAAI,IAAIzD,GAAKgH,EAAI,EACjBT,EAAK9C,EAAE,EAAI,CAAC,EAIPvD,EAAI,EAAGK,EAAGL,CAAC,IAAMI,GAAGJ,CAAC,GAAK,GAAIA,IAAI,CAavC,GAXIK,EAAGL,CAAC,GAAKI,GAAGJ,CAAC,GAAK,IAAIY,IAEtBJ,GAAM,MACRU,EAAKV,EAAKV,GAAK,UACfW,EAAKX,GAAK,UACDiE,EACT7C,EAAKV,GAAMf,EAAE,EAAIM,EAAE,GAAK,EAExBmB,EAAKV,EAGHU,EAAK,EACPmF,EAAG,KAAK,CAAC,EACTH,EAAO,OACF,CAOL,GAJAhF,EAAKA,EAAK+E,EAAU,EAAI,EACxBjG,EAAI,EAGA4G,IAAM,EAAG,CAMX,IALA/G,EAAI,EACJQ,EAAKA,EAAG,CAAC,EACTa,KAGQlB,EAAI0G,IAAM7G,IAAMqB,IAAMlB,IAC5BmB,EAAItB,EAAI6C,GAAQtC,GAAGJ,CAAC,GAAK,GACzBqG,EAAGrG,CAAC,EAAImB,EAAId,EAAK,EACjBR,EAAIsB,EAAId,EAAK,EAGf6F,EAAOrG,GAAKG,EAAI0G,EAGlB,KAAO,CAiBL,IAdA7G,EAAI6C,GAAQrC,EAAG,CAAC,EAAI,GAAK,EAErBR,EAAI,IACNQ,EAAKmF,EAAgBnF,EAAIR,EAAG6C,CAAI,EAChCtC,GAAKoF,EAAgBpF,GAAIP,EAAG6C,CAAI,EAChCkE,GAAKvG,EAAG,OACRqG,GAAKtG,GAAG,QAGVqG,EAAKG,GACLN,EAAMlG,GAAG,MAAM,EAAGwG,EAAE,EACpBL,EAAOD,EAAI,OAGJC,EAAOK,IAAKN,EAAIC,GAAM,EAAI,EAEjCM,GAAKxG,EAAG,MAAM,EACdwG,GAAG,QAAQ,CAAC,EACZF,GAAMtG,EAAG,CAAC,EAENA,EAAG,CAAC,GAAKqC,EAAO,GAAG,EAAEiE,GAEzB,GACE9G,EAAI,EAGJmG,EAAMN,EAAQrF,EAAIiG,EAAKM,GAAIL,CAAI,EAG3BP,EAAM,GAGRQ,EAAOF,EAAI,CAAC,EACRM,IAAML,IAAMC,EAAOA,EAAO9D,GAAQ4D,EAAI,CAAC,GAAK,IAGhDzG,EAAI2G,EAAOG,GAAM,EAUb9G,EAAI,GACFA,GAAK6C,IAAM7C,EAAI6C,EAAO,GAG1ByD,EAAOX,EAAgBnF,EAAIR,EAAG6C,CAAI,EAClC0D,EAAQD,EAAK,OACbI,EAAOD,EAAI,OAGXN,EAAMN,EAAQS,EAAMG,EAAKF,EAAOG,CAAI,EAGhCP,GAAO,IACTnG,IAGAkG,EAASI,EAAMS,GAAKR,EAAQS,GAAKxG,EAAI+F,EAAO1D,CAAI,KAO9C7C,GAAK,IAAGmG,EAAMnG,EAAI,GACtBsG,EAAO9F,EAAG,MAAM,GAGlB+F,EAAQD,EAAK,OACTC,EAAQG,GAAMJ,EAAK,QAAQ,CAAC,EAGhCJ,EAASO,EAAKH,EAAMI,EAAM7D,CAAI,EAG1BsD,GAAO,KACTO,EAAOD,EAAI,OAGXN,EAAMN,EAAQrF,EAAIiG,EAAKM,GAAIL,CAAI,EAG3BP,EAAM,IACRnG,IAGAkG,EAASO,EAAKM,GAAKL,EAAOM,GAAKxG,EAAIkG,EAAM7D,CAAI,IAIjD6D,EAAOD,EAAI,QACFN,IAAQ,IACjBnG,IACAyG,EAAM,CAAC,CAAC,GAIVD,EAAGrG,GAAG,EAAIH,EAGNmG,GAAOM,EAAI,CAAC,EACdA,EAAIC,GAAM,EAAInG,GAAGqG,CAAE,GAAK,GAExBH,EAAM,CAAClG,GAAGqG,CAAE,CAAC,EACbF,EAAO,UAGDE,IAAOC,IAAMJ,EAAI,CAAC,IAAM,SAAWpF,KAE7CgF,EAAOI,EAAI,CAAC,IAAM,MACpB,CAGKD,EAAG,CAAC,GAAGA,EAAG,MAAM,CACvB,CAGA,GAAIJ,GAAW,EACb1C,EAAE,EAAI3C,EACNvC,GAAU6H,MACL,CAGL,IAAKlG,EAAI,EAAGH,EAAIwG,EAAG,CAAC,EAAGxG,GAAK,GAAIA,GAAK,GAAIG,IACzCuD,EAAE,EAAIvD,EAAIY,EAAIqF,EAAU,EAExBvG,EAAS6D,EAAGQ,EAAKvD,EAAK+C,EAAE,EAAI,EAAI/C,EAAIC,EAAIyF,CAAI,CAC9C,CAEA,OAAO3C,CACT,CACF,EAAG,EAOF,SAAS7D,EAASD,EAAGyB,EAAIT,EAAIsG,EAAa,CACzC,IAAIC,EAAQ,EAAG/G,EAAGJ,EAAGmF,EAAIiC,EAASzF,EAAGpB,EAAI8G,EACvCpH,EAAOL,EAAE,YAGX0H,EAAK,GAAIjG,GAAM,KAAM,CAInB,GAHAd,EAAKX,EAAE,EAGH,CAACW,EAAI,OAAOX,EAWhB,IAAKuH,EAAS,EAAGnH,EAAIO,EAAG,CAAC,EAAGP,GAAK,GAAIA,GAAK,GAAImH,IAI9C,GAHA,EAAI9F,EAAK8F,EAGL,EAAI,EACN,GAAK5H,EACLa,EAAIiB,EACJM,EAAIpB,EAAG8G,EAAM,CAAC,EAGdlC,EAAKxD,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,EAAI,GAAK,UAE5CiH,EAAM,KAAK,MAAM,EAAI,GAAK9H,CAAQ,EAClCS,EAAIO,EAAG,OACH8G,GAAOrH,EACT,GAAIkH,EAAa,CAGf,KAAOlH,KAAOqH,GAAM9G,EAAG,KAAK,CAAC,EAC7BoB,EAAIwD,EAAK,EACTgC,EAAS,EACT,GAAK5H,EACLa,EAAI,EAAIb,EAAW,CACrB,KACE,OAAM+H,MAEH,CAIL,IAHA3F,EAAI3B,EAAIO,EAAG8G,CAAG,EAGTF,EAAS,EAAGnH,GAAK,GAAIA,GAAK,GAAImH,IAGnC,GAAK5H,EAILa,EAAI,EAAIb,EAAW4H,EAGnBhC,EAAK/E,EAAI,EAAI,EAAIuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,EAAI,GAAK,CAC1D,CAmBF,GAfA8G,EAAcA,GAAe7F,EAAK,GAChCd,EAAG8G,EAAM,CAAC,IAAM,SAAWjH,EAAI,EAAIuB,EAAIA,EAAI1C,GAAQ,GAAIkI,EAAS/G,EAAI,CAAC,GAMvEgH,EAAUxG,EAAK,GACVuE,GAAM+B,KAAiBtG,GAAM,GAAKA,IAAOhB,EAAE,EAAI,EAAI,EAAI,IACxDuF,EAAK,GAAKA,GAAM,IAAMvE,GAAM,GAAKsG,GAAetG,GAAM,IAGpD,EAAI,EAAIR,EAAI,EAAIuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,CAAC,EAAI,EAAIG,EAAG8G,EAAM,CAAC,GAAK,GAAM,GACvEzG,IAAOhB,EAAE,EAAI,EAAI,EAAI,IAEvByB,EAAK,GAAK,CAACd,EAAG,CAAC,EACjB,OAAAA,EAAG,OAAS,EACR6G,GAGF/F,GAAMzB,EAAE,EAAI,EAGZW,EAAG,CAAC,EAAItB,GAAQ,IAAKM,EAAW8B,EAAK9B,GAAYA,CAAQ,EACzDK,EAAE,EAAI,CAACyB,GAAM,GAIbd,EAAG,CAAC,EAAIX,EAAE,EAAI,EAGTA,EAiBT,GAbI,GAAK,GACPW,EAAG,OAAS8G,EACZrH,EAAI,EACJqH,MAEA9G,EAAG,OAAS8G,EAAM,EAClBrH,EAAIf,GAAQ,GAAIM,EAAW,CAAC,EAI5BgB,EAAG8G,CAAG,EAAIjH,EAAI,GAAKuB,EAAI1C,GAAQ,GAAIkI,EAAS/G,CAAC,EAAInB,GAAQ,GAAImB,CAAC,EAAI,GAAKJ,EAAI,GAGzEoH,EACF,OAGE,GAAIC,GAAO,EAAG,CAGZ,IAAK,EAAI,EAAGjH,EAAIG,EAAG,CAAC,EAAGH,GAAK,GAAIA,GAAK,GAAI,IAEzC,IADAA,EAAIG,EAAG,CAAC,GAAKP,EACRA,EAAI,EAAGI,GAAK,GAAIA,GAAK,GAAIJ,IAG1B,GAAKA,IACPJ,EAAE,IACEW,EAAG,CAAC,GAAKjB,KAAMiB,EAAG,CAAC,EAAI,IAG7B,KACF,KAAO,CAEL,GADAA,EAAG8G,CAAG,GAAKrH,EACPO,EAAG8G,CAAG,GAAK/H,GAAM,MACrBiB,EAAG8G,GAAK,EAAI,EACZrH,EAAI,CACN,CAKJ,IAAK,EAAIO,EAAG,OAAQA,EAAG,EAAE,CAAC,IAAM,GAAIA,EAAG,IAAI,CAC7C,CAEA,OAAI7B,IAGEkB,EAAE,EAAIK,EAAK,MAGbL,EAAE,EAAI,KACNA,EAAE,EAAI,KAGGA,EAAE,EAAIK,EAAK,OAGpBL,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAKLA,CACT,CAGA,SAASyE,GAAezE,EAAG2H,EAAOlG,EAAI,CACpC,GAAI,CAACzB,EAAE,SAAS,EAAG,OAAO4H,GAAkB5H,CAAC,EAC7C,IAAII,EACFe,EAAInB,EAAE,EACNwE,EAAM3C,GAAe7B,EAAE,CAAC,EACxBiC,EAAMuC,EAAI,OAEZ,OAAImD,GACElG,IAAOrB,EAAIqB,EAAKQ,GAAO,EACzBuC,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,EAAIY,GAAchF,CAAC,EACjD6B,EAAM,IACfuC,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,GAGzCA,EAAMA,GAAOxE,EAAE,EAAI,EAAI,IAAM,MAAQA,EAAE,GAC9BmB,EAAI,GACbqD,EAAM,KAAOY,GAAc,CAACjE,EAAI,CAAC,EAAIqD,EACjC/C,IAAOrB,EAAIqB,EAAKQ,GAAO,IAAGuC,GAAOY,GAAchF,CAAC,IAC3Ce,GAAKc,GACduC,GAAOY,GAAcjE,EAAI,EAAIc,CAAG,EAC5BR,IAAOrB,EAAIqB,EAAKN,EAAI,GAAK,IAAGqD,EAAMA,EAAM,IAAMY,GAAchF,CAAC,MAE5DA,EAAIe,EAAI,GAAKc,IAAKuC,EAAMA,EAAI,MAAM,EAAGpE,CAAC,EAAI,IAAMoE,EAAI,MAAMpE,CAAC,GAC5DqB,IAAOrB,EAAIqB,EAAKQ,GAAO,IACrBd,EAAI,IAAMc,IAAKuC,GAAO,KAC1BA,GAAOY,GAAchF,CAAC,IAInBoE,CACT,CAIA,SAASX,GAAkB0D,EAAQ,EAAG,CACpC,IAAIxF,EAAIwF,EAAO,CAAC,EAGhB,IAAM,GAAK5H,EAAUoC,GAAK,GAAIA,GAAK,GAAI,IACvC,OAAO,CACT,CAGA,SAAS0B,GAAQpD,EAAMoB,EAAIV,EAAI,CAC7B,GAAIU,EAAK5B,GAGP,MAAAf,EAAW,GACPiC,IAAIV,EAAK,UAAYU,GACnB,MAAM9B,EAAsB,EAEpC,OAAOgB,EAAS,IAAII,EAAK5B,EAAI,EAAGgD,EAAI,EAAG,EAAI,CAC7C,CAGA,SAASkB,GAAMtC,EAAMoB,EAAIT,EAAI,CAC3B,GAAIS,EAAK3B,GAAc,MAAM,MAAMb,EAAsB,EACzD,OAAOgB,EAAS,IAAII,EAAK3B,EAAE,EAAG+C,EAAIT,EAAI,EAAI,CAC5C,CAGA,SAASkD,GAAaqD,EAAQ,CAC5B,IAAIxF,EAAIwF,EAAO,OAAS,EACtBtF,EAAMF,EAAIpC,EAAW,EAKvB,GAHAoC,EAAIwF,EAAOxF,CAAC,EAGRA,EAAG,CAGL,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIE,IAG7B,IAAKF,EAAIwF,EAAO,CAAC,EAAGxF,GAAK,GAAIA,GAAK,GAAIE,GACxC,CAEA,OAAOA,CACT,CAGA,SAASmD,GAAchF,EAAG,CAExB,QADIyH,EAAK,GACFzH,KAAMyH,GAAM,IACnB,OAAOA,CACT,CAUA,SAAS5C,GAAO5E,EAAML,EAAGqB,EAAGN,EAAI,CAC9B,IAAIuG,EACFhG,EAAI,IAAIjB,EAAK,CAAC,EAIdD,EAAI,KAAK,KAAKW,EAAKpB,EAAW,CAAC,EAIjC,IAFAb,EAAW,KAEF,CAOP,GANIuC,EAAI,IACNC,EAAIA,EAAE,MAAMtB,CAAC,EACT8H,GAASxG,EAAE,EAAGlB,CAAC,IAAGkH,EAAc,KAGtCjG,EAAIjC,GAAUiC,EAAI,CAAC,EACfA,IAAM,EAAG,CAGXA,EAAIC,EAAE,EAAE,OAAS,EACbgG,GAAehG,EAAE,EAAED,CAAC,IAAM,GAAG,EAAEC,EAAE,EAAED,CAAC,EACxC,KACF,CAEArB,EAAIA,EAAE,MAAMA,CAAC,EACb8H,GAAS9H,EAAE,EAAGI,CAAC,CACjB,CAEA,OAAAtB,EAAW,GAEJwC,CACT,CAGA,SAASyG,GAAM1G,EAAG,CAChB,OAAOA,EAAE,EAAEA,EAAE,EAAE,OAAS,CAAC,EAAI,CAC/B,CAMA,SAAS2G,GAAS3H,EAAM4H,EAAM5G,EAAG,CAK/B,QAJIjB,EAAGE,EACLN,EAAI,IAAIK,EAAK4H,EAAK,CAAC,CAAC,EACpB1H,EAAI,EAEC,EAAEA,EAAI0H,EAAK,QAAS,CAIzB,GAHA3H,EAAI,IAAID,EAAK4H,EAAK1H,CAAC,CAAC,EAGhB,CAACD,EAAE,EAAG,CACRN,EAAIM,EACJ,KACF,CAEAF,EAAIJ,EAAE,IAAIM,CAAC,GAEPF,IAAMiB,GAAKjB,IAAM,GAAKJ,EAAE,IAAMqB,KAChCrB,EAAIM,EAER,CAEA,OAAON,CACT,CAkCA,SAAS+D,GAAmB/D,EAAGyB,EAAI,CACjC,IAAI0B,EAAaI,EAAO/C,EAAG0H,EAAKC,EAAKzG,EAAGkB,EACtCrB,EAAM,EACNhB,EAAI,EACJH,EAAI,EACJC,EAAOL,EAAE,YACTgB,EAAKX,EAAK,SACVU,EAAKV,EAAK,UAGZ,GAAI,CAACL,EAAE,GAAK,CAACA,EAAE,EAAE,CAAC,GAAKA,EAAE,EAAI,GAE3B,OAAO,IAAIK,EAAKL,EAAE,EACbA,EAAE,EAAE,CAAC,EAAQA,EAAE,EAAI,EAAI,EAAI,IAAlB,EACVA,EAAE,EAAIA,EAAE,EAAI,EAAI,EAAIA,EAAI,GAAK,EAanC,IAVIyB,GAAM,MACR3C,EAAW,GACX8D,EAAM7B,GAEN6B,EAAMnB,EAGRC,EAAI,IAAIrB,EAAK,MAAO,EAGbL,EAAE,EAAI,IAGXA,EAAIA,EAAE,MAAM0B,CAAC,EACbtB,GAAK,EAUP,IALAmD,EAAQ,KAAK,IAAIlE,GAAQ,EAAGe,CAAC,CAAC,EAAI,KAAK,KAAO,EAAI,EAAI,EACtDwC,GAAOW,EACPJ,EAAc+E,EAAMC,EAAM,IAAI9H,EAAK,CAAC,EACpCA,EAAK,UAAYuC,IAER,CAKP,GAJAsF,EAAMjI,EAASiI,EAAI,MAAMlI,CAAC,EAAG4C,EAAK,CAAC,EACnCO,EAAcA,EAAY,MAAM,EAAE5C,CAAC,EACnCmB,EAAIyG,EAAI,KAAKrG,GAAOoG,EAAK/E,EAAaP,EAAK,CAAC,CAAC,EAEzCf,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGkB,CAAG,IAAMf,GAAesG,EAAI,CAAC,EAAE,MAAM,EAAGvF,CAAG,EAAG,CAE7E,IADApC,EAAIJ,EACGI,KAAK2H,EAAMlI,EAASkI,EAAI,MAAMA,CAAG,EAAGvF,EAAK,CAAC,EAOjD,GAAInB,GAAM,KAER,GAAIF,EAAM,GAAKmC,GAAoByE,EAAI,EAAGvF,EAAMW,EAAOvC,EAAIO,CAAG,EAC5DlB,EAAK,UAAYuC,GAAO,GACxBO,EAAc+E,EAAMxG,EAAI,IAAIrB,EAAK,CAAC,EAClCE,EAAI,EACJgB,QAEA,QAAOtB,EAASkI,EAAK9H,EAAK,UAAYU,EAAIC,EAAIlC,EAAW,EAAI,MAG/D,QAAAuB,EAAK,UAAYU,EACVoH,CAEX,CAEAA,EAAMzG,CACR,CACF,CAkBA,SAAS8B,GAAiBlD,EAAGmB,EAAI,CAC/B,IAAI2G,EAAGC,EAAIlF,EAAahC,EAAGmH,EAAW/G,EAAK4G,EAAKzG,EAAGkB,EAAK2F,EAAIvF,EAC1D3B,EAAI,EACJkC,EAAQ,GACRvD,EAAIM,EACJK,EAAKX,EAAE,EACPK,EAAOL,EAAE,YACTgB,EAAKX,EAAK,SACVU,EAAKV,EAAK,UAGZ,GAAIL,EAAE,EAAI,GAAK,CAACW,GAAM,CAACA,EAAG,CAAC,GAAK,CAACX,EAAE,GAAKW,EAAG,CAAC,GAAK,GAAKA,EAAG,QAAU,EACjE,OAAO,IAAIN,EAAKM,GAAM,CAACA,EAAG,CAAC,EAAI,KAASX,EAAE,GAAK,EAAI,IAAMW,EAAK,EAAIX,CAAC,EAcrE,GAXIyB,GAAM,MACR3C,EAAW,GACX8D,EAAM7B,GAEN6B,EAAMnB,EAGRpB,EAAK,UAAYuC,GAAOW,EACxB6E,EAAIvG,GAAelB,CAAE,EACrB0H,EAAKD,EAAE,OAAO,CAAC,EAEX,KAAK,IAAIjH,EAAInB,EAAE,CAAC,EAAI,MAAQ,CAa9B,KAAOqI,EAAK,GAAKA,GAAM,GAAKA,GAAM,GAAKD,EAAE,OAAO,CAAC,EAAI,GACnDpI,EAAIA,EAAE,MAAMM,CAAC,EACb8H,EAAIvG,GAAe7B,EAAE,CAAC,EACtBqI,EAAKD,EAAE,OAAO,CAAC,EACf/G,IAGFF,EAAInB,EAAE,EAEFqI,EAAK,GACPrI,EAAI,IAAIK,EAAK,KAAO+H,CAAC,EACrBjH,KAEAnB,EAAI,IAAIK,EAAKgI,EAAK,IAAMD,EAAE,MAAM,CAAC,CAAC,CAEtC,KAKE,QAAA1G,EAAI+B,GAAQpD,EAAMuC,EAAM,EAAG7B,CAAE,EAAE,MAAMI,EAAI,EAAE,EAC3CnB,EAAIwD,GAAiB,IAAInD,EAAKgI,EAAK,IAAMD,EAAE,MAAM,CAAC,CAAC,EAAGxF,EAAMW,CAAK,EAAE,KAAK7B,CAAC,EACzErB,EAAK,UAAYU,EAEVU,GAAM,KAAOxB,EAASD,EAAGe,EAAIC,EAAIlC,EAAW,EAAI,EAAIkB,EAa7D,IATAuI,EAAKvI,EAKLmI,EAAMG,EAAYtI,EAAI8B,GAAO9B,EAAE,MAAM,CAAC,EAAGA,EAAE,KAAK,CAAC,EAAG4C,EAAK,CAAC,EAC1DI,EAAK/C,EAASD,EAAE,MAAMA,CAAC,EAAG4C,EAAK,CAAC,EAChCO,EAAc,IAEL,CAIP,GAHAmF,EAAYrI,EAASqI,EAAU,MAAMtF,CAAE,EAAGJ,EAAK,CAAC,EAChDlB,EAAIyG,EAAI,KAAKrG,GAAOwG,EAAW,IAAIjI,EAAK8C,CAAW,EAAGP,EAAK,CAAC,CAAC,EAEzDf,GAAeH,EAAE,CAAC,EAAE,MAAM,EAAGkB,CAAG,IAAMf,GAAesG,EAAI,CAAC,EAAE,MAAM,EAAGvF,CAAG,EAc1E,GAbAuF,EAAMA,EAAI,MAAM,CAAC,EAIbhH,IAAM,IAAGgH,EAAMA,EAAI,KAAK1E,GAAQpD,EAAMuC,EAAM,EAAG7B,CAAE,EAAE,MAAMI,EAAI,EAAE,CAAC,GACpEgH,EAAMrG,GAAOqG,EAAK,IAAI9H,EAAKgB,CAAC,EAAGuB,EAAK,CAAC,EAQjCnB,GAAM,KACR,GAAIiC,GAAoByE,EAAI,EAAGvF,EAAMW,EAAOvC,EAAIO,CAAG,EACjDlB,EAAK,UAAYuC,GAAOW,EACxB7B,EAAI4G,EAAYtI,EAAI8B,GAAOyG,EAAG,MAAM,CAAC,EAAGA,EAAG,KAAK,CAAC,EAAG3F,EAAK,CAAC,EAC1DI,EAAK/C,EAASD,EAAE,MAAMA,CAAC,EAAG4C,EAAK,CAAC,EAChCO,EAAc5B,EAAM,MAEpB,QAAOtB,EAASkI,EAAK9H,EAAK,UAAYU,EAAIC,EAAIlC,EAAW,EAAI,MAG/D,QAAAuB,EAAK,UAAYU,EACVoH,EAIXA,EAAMzG,EACNyB,GAAe,CACjB,CACF,CAIA,SAASyE,GAAkB5H,EAAG,CAE5B,OAAO,OAAOA,EAAE,EAAIA,EAAE,EAAI,CAAC,CAC7B,CAMA,SAASwI,GAAaxI,EAAGwE,EAAK,CAC5B,IAAIrD,EAAGZ,EAAG0B,EAoBV,KAhBKd,EAAIqD,EAAI,QAAQ,GAAG,GAAK,KAAIA,EAAMA,EAAI,QAAQ,IAAK,EAAE,IAGrDjE,EAAIiE,EAAI,OAAO,IAAI,GAAK,GAGvBrD,EAAI,IAAGA,EAAIZ,GACfY,GAAK,CAACqD,EAAI,MAAMjE,EAAI,CAAC,EACrBiE,EAAMA,EAAI,UAAU,EAAGjE,CAAC,GACfY,EAAI,IAGbA,EAAIqD,EAAI,QAILjE,EAAI,EAAGiE,EAAI,WAAWjE,CAAC,IAAM,GAAIA,IAAI,CAG1C,IAAK0B,EAAMuC,EAAI,OAAQA,EAAI,WAAWvC,EAAM,CAAC,IAAM,GAAI,EAAEA,EAAI,CAG7D,GAFAuC,EAAMA,EAAI,MAAMjE,EAAG0B,CAAG,EAElBuC,EAAK,CAYP,GAXAvC,GAAO1B,EACPP,EAAE,EAAImB,EAAIA,EAAIZ,EAAI,EAClBP,EAAE,EAAI,CAAC,EAMPO,GAAKY,EAAI,GAAKxB,EACVwB,EAAI,IAAGZ,GAAKZ,GAEZY,EAAI0B,EAAK,CAEX,IADI1B,GAAGP,EAAE,EAAE,KAAK,CAACwE,EAAI,MAAM,EAAGjE,CAAC,CAAC,EAC3B0B,GAAOtC,EAAUY,EAAI0B,GAAMjC,EAAE,EAAE,KAAK,CAACwE,EAAI,MAAMjE,EAAGA,GAAKZ,CAAQ,CAAC,EACrE6E,EAAMA,EAAI,MAAMjE,CAAC,EACjBA,EAAIZ,EAAW6E,EAAI,MACrB,MACEjE,GAAK0B,EAGP,KAAO1B,KAAMiE,GAAO,IACpBxE,EAAE,EAAE,KAAK,CAACwE,CAAG,EAET1F,IAGEkB,EAAE,EAAIA,EAAE,YAAY,MAGtBA,EAAE,EAAI,KACNA,EAAE,EAAI,KAGGA,EAAE,EAAIA,EAAE,YAAY,OAG7BA,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,GAId,MAGEA,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,EAGV,OAAOA,CACT,CAMA,SAASyI,GAAWzI,EAAGwE,EAAK,CAC1B,IAAIvB,EAAM5C,EAAMqI,EAAS,EAAGC,EAAS1G,EAAK2G,EAAGjI,EAAIgD,EAEjD,GAAIa,EAAI,QAAQ,GAAG,EAAI,IAErB,GADAA,EAAMA,EAAI,QAAQ,eAAgB,IAAI,EAClC/E,GAAU,KAAK+E,CAAG,EAAG,OAAOgE,GAAaxI,EAAGwE,CAAG,UAC1CA,IAAQ,YAAcA,IAAQ,MACvC,MAAK,CAACA,IAAKxE,EAAE,EAAI,KACjBA,EAAE,EAAI,IACNA,EAAE,EAAI,KACCA,EAGT,GAAIT,GAAM,KAAKiF,CAAG,EAChBvB,EAAO,GACPuB,EAAMA,EAAI,YAAY,UACblF,GAAS,KAAKkF,CAAG,EAC1BvB,EAAO,UACEzD,GAAQ,KAAKgF,CAAG,EACzBvB,EAAO,MAEP,OAAM,MAAMjE,GAAkBwF,CAAG,EAgCnC,IA5BA,EAAIA,EAAI,OAAO,IAAI,EAEf,EAAI,GACNoE,EAAI,CAACpE,EAAI,MAAM,EAAI,CAAC,EACpBA,EAAMA,EAAI,UAAU,EAAG,CAAC,GAExBA,EAAMA,EAAI,MAAM,CAAC,EAKnB,EAAIA,EAAI,QAAQ,GAAG,EACnBmE,EAAU,GAAK,EACftI,EAAOL,EAAE,YAEL2I,IACFnE,EAAMA,EAAI,QAAQ,IAAK,EAAE,EACzBvC,EAAMuC,EAAI,OACV,EAAIvC,EAAM,EAGVyG,EAAUzD,GAAO5E,EAAM,IAAIA,EAAK4C,CAAI,EAAG,EAAG,EAAI,CAAC,GAGjDtC,EAAK6E,GAAYhB,EAAKvB,EAAMvD,EAAI,EAChCiE,EAAKhD,EAAG,OAAS,EAGZ,EAAIgD,EAAIhD,EAAG,CAAC,IAAM,EAAG,EAAE,EAAGA,EAAG,IAAI,EACtC,OAAI,EAAI,EAAU,IAAIN,EAAKL,EAAE,EAAI,CAAC,GAClCA,EAAE,EAAI6D,GAAkBlD,EAAIgD,CAAE,EAC9B3D,EAAE,EAAIW,EACN7B,EAAW,GAQP6J,IAAS3I,EAAI8B,GAAO9B,EAAG0I,EAASzG,EAAM,CAAC,GAGvC2G,IAAG5I,EAAIA,EAAE,MAAM,KAAK,IAAI4I,CAAC,EAAI,GAAKvJ,GAAQ,EAAGuJ,CAAC,EAAIC,GAAQ,IAAI,EAAGD,CAAC,CAAC,GACvE9J,EAAW,GAEJkB,EACT,CAQA,SAASmE,GAAK9D,EAAML,EAAG,CACrB,IAAII,EACF6B,EAAMjC,EAAE,EAAE,OAEZ,GAAIiC,EAAM,EACR,OAAOjC,EAAE,OAAO,EAAIA,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,CAAC,EAQpDI,EAAI,IAAM,KAAK,KAAK6B,CAAG,EACvB7B,EAAIA,EAAI,GAAK,GAAKA,EAAI,EAEtBJ,EAAIA,EAAE,MAAM,EAAImC,GAAQ,EAAG/B,CAAC,CAAC,EAC7BJ,EAAIoC,GAAa/B,EAAM,EAAGL,EAAGA,CAAC,EAO9B,QAJI8I,EACFtG,EAAK,IAAInC,EAAK,CAAC,EACfoC,EAAM,IAAIpC,EAAK,EAAE,EACjBqC,EAAM,IAAIrC,EAAK,EAAE,EACZD,KACL0I,EAAS9I,EAAE,MAAMA,CAAC,EAClBA,EAAIA,EAAE,MAAMwC,EAAG,KAAKsG,EAAO,MAAMrG,EAAI,MAAMqG,CAAM,EAAE,MAAMpG,CAAG,CAAC,CAAC,CAAC,EAGjE,OAAO1C,CACT,CAIA,SAASoC,GAAa/B,EAAMgB,EAAGrB,EAAGM,EAAGyI,EAAc,CACjD,IAAIvI,EAAGkB,EAAGsH,EAAGhG,EACXzC,EAAI,EACJQ,EAAKV,EAAK,UACVD,EAAI,KAAK,KAAKW,EAAKpB,CAAQ,EAM7B,IAJAb,EAAW,GACXkE,EAAKhD,EAAE,MAAMA,CAAC,EACdgJ,EAAI,IAAI3I,EAAKC,CAAC,IAEL,CAMP,GALAoB,EAAII,GAAOkH,EAAE,MAAMhG,CAAE,EAAG,IAAI3C,EAAKgB,IAAMA,GAAG,EAAGN,EAAI,CAAC,EAClDiI,EAAID,EAAezI,EAAE,KAAKoB,CAAC,EAAIpB,EAAE,MAAMoB,CAAC,EACxCpB,EAAIwB,GAAOJ,EAAE,MAAMsB,CAAE,EAAG,IAAI3C,EAAKgB,IAAMA,GAAG,EAAGN,EAAI,CAAC,EAClDW,EAAIsH,EAAE,KAAK1I,CAAC,EAERoB,EAAE,EAAEtB,CAAC,IAAM,OAAQ,CACrB,IAAKI,EAAIJ,EAAGsB,EAAE,EAAElB,CAAC,IAAMwI,EAAE,EAAExI,CAAC,GAAKA,KAAK,CACtC,GAAIA,GAAK,GAAI,KACf,CAEAA,EAAIwI,EACJA,EAAI1I,EACJA,EAAIoB,EACJA,EAAIlB,EACJD,GACF,CAEA,OAAAzB,EAAW,GACX4C,EAAE,EAAE,OAAStB,EAAI,EAEVsB,CACT,CAIA,SAASS,GAAQgE,EAAG,EAAG,CAErB,QADI9E,EAAI8E,EACD,EAAE,GAAG9E,GAAK8E,EACjB,OAAO9E,CACT,CAIA,SAASH,GAAiBb,EAAML,EAAG,CACjC,IAAI0B,EACFuH,EAAQjJ,EAAE,EAAI,EACdkJ,EAAKvG,GAAMtC,EAAMA,EAAK,UAAW,CAAC,EAClCyC,EAASoG,EAAG,MAAM,EAAG,EAIvB,GAFAlJ,EAAIA,EAAE,IAAI,EAENA,EAAE,IAAI8C,CAAM,EACd,OAAAjE,GAAWoK,EAAQ,EAAI,EAChBjJ,EAKT,GAFA0B,EAAI1B,EAAE,SAASkJ,CAAE,EAEbxH,EAAE,OAAO,EACX7C,GAAWoK,EAAQ,EAAI,MAClB,CAIL,GAHAjJ,EAAIA,EAAE,MAAM0B,EAAE,MAAMwH,CAAE,CAAC,EAGnBlJ,EAAE,IAAI8C,CAAM,EACd,OAAAjE,GAAWkJ,GAAMrG,CAAC,EAAKuH,EAAQ,EAAI,EAAMA,EAAQ,EAAI,EAC9CjJ,EAGTnB,GAAWkJ,GAAMrG,CAAC,EAAKuH,EAAQ,EAAI,EAAMA,EAAQ,EAAI,CACvD,CAEA,OAAOjJ,EAAE,MAAMkJ,CAAE,EAAE,IAAI,CACzB,CAQA,SAAS7E,GAAerE,EAAG0F,EAASjE,EAAIT,EAAI,CAC1C,IAAIiC,EAAM9B,EAAGZ,EAAGH,EAAG6B,EAAKuF,EAAShD,EAAK7D,EAAIL,EACxCD,EAAOL,EAAE,YACT2H,EAAQlG,IAAO,OAWjB,GATIkG,GACFpD,GAAW9C,EAAI,EAAGlD,EAAU,EACxByC,IAAO,OAAQA,EAAKX,EAAK,SACxBkE,GAAWvD,EAAI,EAAG,CAAC,IAExBS,EAAKpB,EAAK,UACVW,EAAKX,EAAK,UAGR,CAACL,EAAE,SAAS,EACdwE,EAAMoD,GAAkB5H,CAAC,MACpB,CAoCL,IAnCAwE,EAAMC,GAAezE,CAAC,EACtBO,EAAIiE,EAAI,QAAQ,GAAG,EAOfmD,GACF1E,EAAO,EACHyC,GAAW,GACbjE,EAAKA,EAAK,EAAI,EACLiE,GAAW,IACpBjE,EAAKA,EAAK,EAAI,IAGhBwB,EAAOyC,EAOLnF,GAAK,IACPiE,EAAMA,EAAI,QAAQ,IAAK,EAAE,EACzBlE,EAAI,IAAID,EAAK,CAAC,EACdC,EAAE,EAAIkE,EAAI,OAASjE,EACnBD,EAAE,EAAIkF,GAAYf,GAAenE,CAAC,EAAG,GAAI2C,CAAI,EAC7C3C,EAAE,EAAIA,EAAE,EAAE,QAGZK,EAAK6E,GAAYhB,EAAK,GAAIvB,CAAI,EAC9B9B,EAAIc,EAAMtB,EAAG,OAGNA,EAAG,EAAEsB,CAAG,GAAK,GAAItB,EAAG,IAAI,EAE/B,GAAI,CAACA,EAAG,CAAC,EACP6D,EAAMmD,EAAQ,OAAS,QAClB,CAyBL,GAxBIpH,EAAI,EACNY,KAEAnB,EAAI,IAAIK,EAAKL,CAAC,EACdA,EAAE,EAAIW,EACNX,EAAE,EAAImB,EACNnB,EAAI8B,GAAO9B,EAAGM,EAAGmB,EAAIT,EAAI,EAAGiC,CAAI,EAChCtC,EAAKX,EAAE,EACPmB,EAAInB,EAAE,EACNwH,EAAU5I,IAIZ2B,EAAII,EAAGc,CAAE,EACTrB,EAAI6C,EAAO,EACXuE,EAAUA,GAAW7G,EAAGc,EAAK,CAAC,IAAM,OAEpC+F,EAAUxG,EAAK,GACVT,IAAM,QAAUiH,KAAaxG,IAAO,GAAKA,KAAQhB,EAAE,EAAI,EAAI,EAAI,IAChEO,EAAIH,GAAKG,IAAMH,IAAMY,IAAO,GAAKwG,GAAWxG,IAAO,GAAKL,EAAGc,EAAK,CAAC,EAAI,GACrET,KAAQhB,EAAE,EAAI,EAAI,EAAI,IAE1BW,EAAG,OAASc,EAER+F,EAGF,KAAO,EAAE7G,EAAG,EAAEc,CAAE,EAAIwB,EAAO,GACzBtC,EAAGc,CAAE,EAAI,EACJA,IACH,EAAEN,EACFR,EAAG,QAAQ,CAAC,GAMlB,IAAKsB,EAAMtB,EAAG,OAAQ,CAACA,EAAGsB,EAAM,CAAC,EAAG,EAAEA,EAAI,CAG1C,IAAK1B,EAAI,EAAGiE,EAAM,GAAIjE,EAAI0B,EAAK1B,IAAKiE,GAAOhG,GAAS,OAAOmC,EAAGJ,CAAC,CAAC,EAGhE,GAAIoH,EAAO,CACT,GAAI1F,EAAM,EACR,GAAIyD,GAAW,IAAMA,GAAW,EAAG,CAEjC,IADAnF,EAAImF,GAAW,GAAK,EAAI,EACnB,EAAEzD,EAAKA,EAAM1B,EAAG0B,IAAOuC,GAAO,IAEnC,IADA7D,EAAK6E,GAAYhB,EAAKvB,EAAMyC,CAAO,EAC9BzD,EAAMtB,EAAG,OAAQ,CAACA,EAAGsB,EAAM,CAAC,EAAG,EAAEA,EAAI,CAG1C,IAAK1B,EAAI,EAAGiE,EAAM,KAAMjE,EAAI0B,EAAK1B,IAAKiE,GAAOhG,GAAS,OAAOmC,EAAGJ,CAAC,CAAC,CACpE,MACEiE,EAAMA,EAAI,OAAO,CAAC,EAAI,IAAMA,EAAI,MAAM,CAAC,EAI3CA,EAAOA,GAAOrD,EAAI,EAAI,IAAM,MAAQA,CACtC,SAAWA,EAAI,EAAG,CAChB,KAAO,EAAEA,GAAIqD,EAAM,IAAMA,EACzBA,EAAM,KAAOA,CACf,SACM,EAAErD,EAAIc,EAAK,IAAKd,GAAKc,EAAKd,KAAOqD,GAAO,SACnCrD,EAAIc,IAAKuC,EAAMA,EAAI,MAAM,EAAGrD,CAAC,EAAI,IAAMqD,EAAI,MAAMrD,CAAC,EAE/D,CAEAqD,GAAOkB,GAAW,GAAK,KAAOA,GAAW,EAAI,KAAOA,GAAW,EAAI,KAAO,IAAMlB,CAClF,CAEA,OAAOxE,EAAE,EAAI,EAAI,IAAMwE,EAAMA,CAC/B,CAIA,SAASsD,GAASnC,EAAK1D,EAAK,CAC1B,GAAI0D,EAAI,OAAS1D,EACf,OAAA0D,EAAI,OAAS1D,EACN,EAEX,CAyDA,SAASkH,GAAInJ,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CASA,SAASoJ,GAAKpJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASqJ,GAAMrJ,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CAWA,SAASsJ,GAAItJ,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,KAAKM,CAAC,CAC3B,CAUA,SAASiJ,GAAKvJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASwJ,GAAMxJ,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CAUA,SAASyJ,GAAKzJ,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAAS0J,GAAM1J,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,MAAM,CAC3B,CA4BA,SAAS2J,GAAMrJ,EAAGN,EAAG,CACnBM,EAAI,IAAI,KAAKA,CAAC,EACdN,EAAI,IAAI,KAAKA,CAAC,EACd,IAAI,EACFe,EAAK,KAAK,UACVC,EAAK,KAAK,SACV4B,EAAM7B,EAAK,EAGb,MAAI,CAACT,EAAE,GAAK,CAACN,EAAE,EACb,EAAI,IAAI,KAAK,GAAG,EAGP,CAACM,EAAE,GAAK,CAACN,EAAE,GACpB,EAAI2C,GAAM,KAAMC,EAAK,CAAC,EAAE,MAAM5C,EAAE,EAAI,EAAI,IAAO,GAAI,EACnD,EAAE,EAAIM,EAAE,GAGC,CAACN,EAAE,GAAKM,EAAE,OAAO,GAC1B,EAAIN,EAAE,EAAI,EAAI2C,GAAM,KAAM5B,EAAIC,CAAE,EAAI,IAAI,KAAK,CAAC,EAC9C,EAAE,EAAIV,EAAE,GAGC,CAACA,EAAE,GAAKN,EAAE,OAAO,GAC1B,EAAI2C,GAAM,KAAMC,EAAK,CAAC,EAAE,MAAM,EAAG,EACjC,EAAE,EAAItC,EAAE,GAGCN,EAAE,EAAI,GACf,KAAK,UAAY4C,EACjB,KAAK,SAAW,EAChB,EAAI,KAAK,KAAKd,GAAOxB,EAAGN,EAAG4C,EAAK,CAAC,CAAC,EAClC5C,EAAI2C,GAAM,KAAMC,EAAK,CAAC,EACtB,KAAK,UAAY7B,EACjB,KAAK,SAAWC,EAChB,EAAIV,EAAE,EAAI,EAAI,EAAE,MAAMN,CAAC,EAAI,EAAE,KAAKA,CAAC,GAEnC,EAAI,KAAK,KAAK8B,GAAOxB,EAAGN,EAAG4C,EAAK,CAAC,CAAC,EAG7B,CACT,CAUA,SAASgH,GAAK5J,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CASA,SAAS6J,GAAK7J,EAAG,CACf,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAWA,SAAS8J,GAAM9J,EAAGE,EAAKC,EAAK,CAC1B,OAAO,IAAI,KAAKH,CAAC,EAAE,MAAME,EAAKC,CAAG,CACnC,CAqBA,SAAS4J,GAAOC,EAAK,CACnB,GAAI,CAACA,GAAO,OAAOA,GAAQ,SAAU,MAAM,MAAMjL,GAAe,iBAAiB,EACjF,IAAIwB,EAAGqI,EAAGqB,EACRC,EAAcF,EAAI,WAAa,GAC/BG,EAAK,CACH,YAAa,EAAG5L,GAChB,WAAY,EAAG,EACf,WAAY,CAACD,GAAW,EACxB,WAAY,EAAGA,GACf,OAAQ,EAAGA,GACX,OAAQ,CAACA,GAAW,EACpB,SAAU,EAAG,CACf,EAEF,IAAKiC,EAAI,EAAGA,EAAI4J,EAAG,OAAQ5J,GAAK,EAE9B,GADIqI,EAAIuB,EAAG5J,CAAC,EAAG2J,IAAa,KAAKtB,CAAC,EAAIjK,GAASiK,CAAC,IAC3CqB,EAAID,EAAIpB,CAAC,KAAO,OACnB,GAAIxJ,GAAU6K,CAAC,IAAMA,GAAKA,GAAKE,EAAG5J,EAAI,CAAC,GAAK0J,GAAKE,EAAG5J,EAAI,CAAC,EAAG,KAAKqI,CAAC,EAAIqB,MACjE,OAAM,MAAMjL,GAAkB4J,EAAI,KAAOqB,CAAC,EAKnD,GADIrB,EAAI,SAAUsB,IAAa,KAAKtB,CAAC,EAAIjK,GAASiK,CAAC,IAC9CqB,EAAID,EAAIpB,CAAC,KAAO,OACnB,GAAIqB,IAAM,IAAQA,IAAM,IAASA,IAAM,GAAKA,IAAM,EAChD,GAAIA,EACF,GAAI,OAAO,OAAU,KAAe,SACjC,OAAO,iBAAmB,OAAO,aAClC,KAAKrB,CAAC,EAAI,OAEV,OAAM,MAAM1J,EAAiB,OAG/B,KAAK0J,CAAC,EAAI,OAGZ,OAAM,MAAM5J,GAAkB4J,EAAI,KAAOqB,CAAC,EAI9C,OAAO,IACT,CAUA,SAASG,GAAIpK,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASqK,GAAKrK,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAQA,SAASsK,GAAMN,EAAK,CAClB,IAAIzJ,EAAGqI,EAAGuB,EASV,SAAStB,EAAQoB,EAAG,CAClB,IAAI9I,EAAGZ,EAAGmB,EACR1B,EAAI,KAGN,GAAI,EAAEA,aAAa6I,GAAU,OAAO,IAAIA,EAAQoB,CAAC,EAMjD,GAFAjK,EAAE,YAAc6I,EAEZ0B,GAAkBN,CAAC,EAAG,CACxBjK,EAAE,EAAIiK,EAAE,EAEJnL,EACE,CAACmL,EAAE,GAAKA,EAAE,EAAIpB,EAAQ,MAGxB7I,EAAE,EAAI,IACNA,EAAE,EAAI,MACGiK,EAAE,EAAIpB,EAAQ,MAGvB7I,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAERA,EAAE,EAAIiK,EAAE,EACRjK,EAAE,EAAIiK,EAAE,EAAE,MAAM,IAGlBjK,EAAE,EAAIiK,EAAE,EACRjK,EAAE,EAAIiK,EAAE,EAAIA,EAAE,EAAE,MAAM,EAAIA,EAAE,GAG9B,MACF,CAIA,GAFAvI,EAAI,OAAOuI,EAEPvI,IAAM,SAAU,CAClB,GAAIuI,IAAM,EAAG,CACXjK,EAAE,EAAI,EAAIiK,EAAI,EAAI,GAAK,EACvBjK,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,EACR,MACF,CAUA,GARIiK,EAAI,GACNA,EAAI,CAACA,EACLjK,EAAE,EAAI,IAENA,EAAE,EAAI,EAIJiK,IAAM,CAAC,CAACA,GAAKA,EAAI,IAAK,CACxB,IAAK9I,EAAI,EAAGZ,EAAI0J,EAAG1J,GAAK,GAAIA,GAAK,GAAIY,IAEjCrC,EACEqC,EAAI0H,EAAQ,MACd7I,EAAE,EAAI,IACNA,EAAE,EAAI,MACGmB,EAAI0H,EAAQ,MACrB7I,EAAE,EAAI,EACNA,EAAE,EAAI,CAAC,CAAC,IAERA,EAAE,EAAImB,EACNnB,EAAE,EAAI,CAACiK,CAAC,IAGVjK,EAAE,EAAImB,EACNnB,EAAE,EAAI,CAACiK,CAAC,GAGV,MACF,CAGA,GAAIA,EAAI,IAAM,EAAG,CACVA,IAAGjK,EAAE,EAAI,KACdA,EAAE,EAAI,IACNA,EAAE,EAAI,KACN,MACF,CAEA,OAAOwI,GAAaxI,EAAGiK,EAAE,SAAS,CAAC,CACrC,CAEA,GAAIvI,IAAM,SACR,OAAKnB,EAAI0J,EAAE,WAAW,CAAC,KAAO,IAC5BA,EAAIA,EAAE,MAAM,CAAC,EACbjK,EAAE,EAAI,KAEFO,IAAM,KAAI0J,EAAIA,EAAE,MAAM,CAAC,GAC3BjK,EAAE,EAAI,GAGDP,GAAU,KAAKwK,CAAC,EAAIzB,GAAaxI,EAAGiK,CAAC,EAAIxB,GAAWzI,EAAGiK,CAAC,EAGjE,GAAIvI,IAAM,SACR,OAAIuI,EAAI,GACNA,EAAI,CAACA,EACLjK,EAAE,EAAI,IAENA,EAAE,EAAI,EAGDwI,GAAaxI,EAAGiK,EAAE,SAAS,CAAC,EAGrC,MAAM,MAAMjL,GAAkBiL,CAAC,CACjC,CA2DA,GAzDApB,EAAQ,UAAY9I,EAEpB8I,EAAQ,SAAW,EACnBA,EAAQ,WAAa,EACrBA,EAAQ,WAAa,EACrBA,EAAQ,YAAc,EACtBA,EAAQ,cAAgB,EACxBA,EAAQ,gBAAkB,EAC1BA,EAAQ,gBAAkB,EAC1BA,EAAQ,gBAAkB,EAC1BA,EAAQ,iBAAmB,EAC3BA,EAAQ,OAAS,EAEjBA,EAAQ,OAASA,EAAQ,IAAMkB,GAC/BlB,EAAQ,MAAQyB,GAChBzB,EAAQ,UAAY0B,GAEpB1B,EAAQ,IAAMM,GACdN,EAAQ,KAAOO,GACfP,EAAQ,MAAQQ,GAChBR,EAAQ,IAAMS,GACdT,EAAQ,KAAOU,GACfV,EAAQ,MAAQW,GAChBX,EAAQ,KAAOY,GACfZ,EAAQ,MAAQa,GAChBb,EAAQ,MAAQc,GAChBd,EAAQ,KAAOe,GACff,EAAQ,KAAOgB,GACfhB,EAAQ,MAAQiB,GAChBjB,EAAQ,IAAMuB,GACdvB,EAAQ,KAAOwB,GACfxB,EAAQ,IAAM2B,GACd3B,EAAQ,IAAM4B,GACd5B,EAAQ,MAAQ6B,GAChB7B,EAAQ,MAAQ8B,GAChB9B,EAAQ,GAAK+B,GACb/B,EAAQ,IAAMgC,GACdhC,EAAQ,MAAQiC,GAChBjC,EAAQ,KAAOkC,GACflC,EAAQ,IAAM1I,GACd0I,EAAQ,IAAM3I,GACd2I,EAAQ,IAAMmC,GACdnC,EAAQ,IAAMoC,GACdpC,EAAQ,IAAMX,GACdW,EAAQ,OAASqC,GACjBrC,EAAQ,MAAQsC,GAChBtC,EAAQ,KAAOxB,GACfwB,EAAQ,IAAMuC,GACdvC,EAAQ,KAAOwC,GACfxC,EAAQ,KAAOyC,GACfzC,EAAQ,IAAM0C,GACd1C,EAAQ,IAAMV,GACdU,EAAQ,IAAM2C,GACd3C,EAAQ,KAAO4C,GACf5C,EAAQ,MAAQ6C,GAEZ1B,IAAQ,SAAQA,EAAM,CAAC,GACvBA,GACEA,EAAI,WAAa,GAEnB,IADAG,EAAK,CAAC,YAAa,WAAY,WAAY,WAAY,OAAQ,OAAQ,SAAU,QAAQ,EACpF5J,EAAI,EAAGA,EAAI4J,EAAG,QAAcH,EAAI,eAAepB,EAAIuB,EAAG5J,GAAG,CAAC,IAAGyJ,EAAIpB,CAAC,EAAI,KAAKA,CAAC,GAIrF,OAAAC,EAAQ,OAAOmB,CAAG,EAEXnB,CACT,CAWA,SAAS2B,GAAIxK,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAUA,SAASmK,GAAIzK,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CASA,SAAS0K,GAAM1K,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAYA,SAAS2K,IAAQ,CACf,IAAIpK,EAAGc,EACLK,EAAI,IAAI,KAAK,CAAC,EAIhB,IAFA5C,EAAW,GAENyB,EAAI,EAAGA,EAAI,UAAU,QAExB,GADAc,EAAI,IAAI,KAAK,UAAUd,GAAG,CAAC,EACtBc,EAAE,EAMIK,EAAE,IACXA,EAAIA,EAAE,KAAKL,EAAE,MAAMA,CAAC,CAAC,OAPb,CACR,GAAIA,EAAE,EACJ,OAAAvC,EAAW,GACJ,IAAI,KAAK,GAAK,EAEvB4C,EAAIL,CACN,CAKF,OAAAvC,EAAW,GAEJ4C,EAAE,KAAK,CAChB,CAQA,SAAS6I,GAAkBP,EAAK,CAC9B,OAAOA,aAAenB,IAAWmB,GAAOA,EAAI,cAAgB7K,IAAO,EACrE,CAUA,SAASyL,GAAG5K,EAAG,CACb,OAAO,IAAI,KAAKA,CAAC,EAAE,GAAG,CACxB,CAaA,SAAS6K,GAAI7K,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAUA,SAASyK,GAAK/K,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CAAC,CAC1B,CAUA,SAAS8K,GAAM9K,EAAG,CAChB,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,EAAE,CAC3B,CASA,SAASG,IAAM,CACb,OAAO6H,GAAS,KAAM,UAAW,EAAE,CACrC,CASA,SAAS9H,IAAM,CACb,OAAO8H,GAAS,KAAM,UAAW,CAAC,CACpC,CAWA,SAASgD,GAAIhL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS2K,GAAIjL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS4H,GAAIlI,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAWA,SAAS4K,GAAOzJ,EAAI,CAClB,IAAIO,EAAGb,EAAGf,EAAGiB,EACX,EAAI,EACJC,EAAI,IAAI,KAAK,CAAC,EACdiE,EAAK,CAAC,EAOR,GALI9D,IAAO,OAAQA,EAAK,KAAK,UACxB8C,GAAW9C,EAAI,EAAGlD,EAAU,EAEjC6B,EAAI,KAAK,KAAKqB,EAAK9B,CAAQ,EAEtB,KAAK,OAIH,GAAI,OAAO,gBAGhB,IAFAqC,EAAI,OAAO,gBAAgB,IAAI,YAAY5B,CAAC,CAAC,EAEtC,EAAIA,GACTiB,EAAIW,EAAE,CAAC,EAIHX,GAAK,MACPW,EAAE,CAAC,EAAI,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAKnDuD,EAAG,GAAG,EAAIlE,EAAI,YAKT,OAAO,YAAa,CAK7B,IAFAW,EAAI,OAAO,YAAY5B,GAAK,CAAC,EAEtB,EAAIA,GAGTiB,EAAIW,EAAE,CAAC,GAAKA,EAAE,EAAI,CAAC,GAAK,IAAMA,EAAE,EAAI,CAAC,GAAK,MAAQA,EAAE,EAAI,CAAC,EAAI,MAAS,IAGlEX,GAAK,MACP,OAAO,YAAY,CAAC,EAAE,KAAKW,EAAG,CAAC,GAK/BuD,EAAG,KAAKlE,EAAI,GAAG,EACf,GAAK,GAIT,EAAIjB,EAAI,CACV,KACE,OAAM,MAAMlB,EAAiB,MA9C7B,MAAO,EAAIkB,GAAImF,EAAG,GAAG,EAAI,KAAK,OAAO,EAAI,IAAM,EA2DjD,IAVAnF,EAAImF,EAAG,EAAE,CAAC,EACV9D,GAAM9B,EAGFS,GAAKqB,IACPJ,EAAIhC,GAAQ,GAAIM,EAAW8B,CAAE,EAC7B8D,EAAG,CAAC,GAAKnF,EAAIiB,EAAI,GAAKA,GAIjBkE,EAAG,CAAC,IAAM,EAAG,IAAKA,EAAG,IAAI,EAGhC,GAAI,EAAI,EACNpE,EAAI,EACJoE,EAAK,CAAC,CAAC,MACF,CAIL,IAHApE,EAAI,GAGGoE,EAAG,CAAC,IAAM,EAAGpE,GAAKxB,EAAU4F,EAAG,MAAM,EAG5C,IAAKnF,EAAI,EAAGiB,EAAIkE,EAAG,CAAC,EAAGlE,GAAK,GAAIA,GAAK,GAAIjB,IAGrCA,EAAIT,IAAUwB,GAAKxB,EAAWS,EACpC,CAEA,OAAAkB,EAAE,EAAIH,EACNG,EAAE,EAAIiE,EAECjE,CACT,CAWA,SAAS6J,GAAMnL,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,KAAK,QAAQ,CACzD,CAcA,SAASqH,GAAKrH,EAAG,CACf,OAAAA,EAAI,IAAI,KAAKA,CAAC,EACPA,EAAE,EAAKA,EAAE,EAAE,CAAC,EAAIA,EAAE,EAAI,EAAIA,EAAE,EAAKA,EAAE,GAAK,GACjD,CAUA,SAASoL,GAAIpL,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASqL,GAAKrL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAUA,SAASsL,GAAKtL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CAWA,SAASuL,GAAIvL,EAAGM,EAAG,CACjB,OAAO,IAAI,KAAKN,CAAC,EAAE,IAAIM,CAAC,CAC1B,CAYA,SAAS6H,IAAM,CACb,IAAI5H,EAAI,EACN0H,EAAO,UACPjI,EAAI,IAAI,KAAKiI,EAAK1H,CAAC,CAAC,EAGtB,IADAzB,EAAW,GACJkB,EAAE,GAAK,EAAEO,EAAI0H,EAAK,QAASjI,EAAIA,EAAE,KAAKiI,EAAK1H,CAAC,CAAC,EACpD,OAAAzB,EAAW,GAEJmB,EAASD,EAAG,KAAK,UAAW,KAAK,QAAQ,CAClD,CAUA,SAASwL,GAAIxL,EAAG,CACd,OAAO,IAAI,KAAKA,CAAC,EAAE,IAAI,CACzB,CAUA,SAASyL,GAAKzL,EAAG,CACf,OAAO,IAAI,KAAKA,CAAC,EAAE,KAAK,CAC1B,CASA,SAAS0L,GAAM1L,EAAG,CAChB,OAAOC,EAASD,EAAI,IAAI,KAAKA,CAAC,EAAGA,EAAE,EAAI,EAAG,CAAC,CAC7C,CAGAD,EAAE,OAAO,IAAI,4BAA4B,CAAC,EAAIA,EAAE,SAChDA,EAAE,OAAO,WAAW,EAAI,UAGjB,IAAI8I,GAAU9I,EAAE,YAAcuK,GAAM3L,EAAQ,EAGnDF,GAAO,IAAIoK,GAAQpK,EAAI,EACvBC,GAAK,IAAImK,GAAQnK,EAAE,EAEnB,IAAOiN,GAAQ9C,GC7yJR,SAAS+C,GAAgBC,EAAwC,CACtE,OAAIC,GAAQ,UAAUD,CAAK,EAClB,GAGPA,IAAU,MACV,OAAOA,GAAU,UACjB,OAAOA,EAAM,GAAS,UACtB,OAAOA,EAAM,GAAS,UACtB,OAAOA,EAAM,SAAe,YAC5B,MAAM,QAAQA,EAAM,CAAI,CAE5B,CChBA,IAAAE,GAAA,GAAAC,GAAAD,GAAA,iBAAAE,GAAA,8BAAAC,KCEO,SAASC,GAA0BC,EAA0C,CAClF,MAAO,CACL,KAAMA,EAAc,KACpB,OAAQA,EAAc,OAAO,IAAKC,GAAMA,EAAE,IAAI,CAChD,CACF,CCoPO,IAAKC,QACVA,EAAA,WAAa,aACbA,EAAA,kBAAoB,oBACpBA,EAAA,UAAY,YACZA,EAAA,iBAAmB,mBACnBA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,oBAAsB,sBACtBA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,oBAAsB,sBACtBA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,aAAe,eAnBLA,QAAA,IC1PZ,IAAAC,GAAyB,SCDzB,OAAOC,OAAQ,UCIR,IAAMC,GAAe,CAC1B,QAASC,GACT,OAAQA,GACR,MAAQC,GAAMC,GAAKC,GAAKF,CAAC,CAAC,EAC1B,YAAaE,GACb,UAAWH,GACX,SAAUA,GACV,SAAWC,GAAMC,GAAKC,GAAKF,CAAC,CAAC,EAC7B,OAASA,GAAMC,GAAKE,GAAMH,CAAC,CAAC,EAC5B,QAASI,GACT,OAAQL,GACR,QAASM,EACX,ECdA,IAAMC,GAAYC,GAAgBA,EAQ5BC,GAAa,CAAC,EAShBC,GAAW,EAEJC,EAAa,CACtB,OAAQF,GAAM,OAASA,GAAM,MAAM,OACnC,4BAA6BA,GAAM,OAASA,GAAM,MAAM,4BACxD,KAAM,CACJ,OAAQ,SAAUG,EAAa,CAC7B,GAAIA,aAAkBC,GAAO,CAC3B,IAAMC,EAAiBF,EACvB,OAAO,IAAIC,GAAMC,EAAU,KAAMH,EAAM,KAAK,OAAOG,EAAU,OAAO,EAAGA,EAAU,KAAK,CACxF,KAAO,QAAI,MAAM,QAAQF,CAAM,EACtBA,EAAO,IAAID,EAAM,KAAK,MAAM,EAE5BC,EACJ,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,UAAW,GAAG,CAE7B,EAEA,KAAM,SAAUG,EAAG,CACjB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAC,EAAE,MAAM,EAAG,EAAE,CACtD,EAEA,MAAO,SAAUC,EAAK,CACpB,OAAKA,EAAI,MACP,OAAO,eAAeA,EAAK,OAAQ,CAAE,MAAO,EAAEN,EAAS,CAAC,EAEnDM,EAAI,IACb,EAGA,MAAO,SAASC,EAAUF,EAAGG,EAAe,CAC1C,IAAIC,EACFC,EACAC,EAAOV,EAAM,KAAK,KAAKI,CAAC,EAG1B,OAFAG,EAAUA,GAAW,CAAC,EAEdG,EAAM,CACZ,IAAK,SAEH,GADAD,EAAKT,EAAM,KAAK,MAAMI,CAAC,EACnBG,EAAQE,CAAE,EACZ,OAAOF,EAAQE,CAAE,EAEnBD,EAAQ,CAAC,EACTD,EAAQE,CAAE,EAAID,EAEd,QAAWG,KAAOP,EACZA,EAAE,eAAeO,CAAG,IACtBH,EAAMG,CAAG,EAAIL,EAAUF,EAAEO,CAAG,EAAGJ,CAAO,GAI1C,OAAOC,EAET,IAAK,QAEH,OADAC,EAAKT,EAAM,KAAK,MAAMI,CAAC,EACnBG,EAAQE,CAAE,EACLF,EAAQE,CAAE,GAEnBD,EAAQ,CAAC,EACTD,EAAQE,CAAE,EAAID,EAEdJ,EAAE,QAAQ,SAAUQ,EAAGC,EAAG,CACxBL,EAAMK,CAAC,EAAIP,EAAUM,EAAGL,CAAO,CACjC,CAAC,EAEMC,GAET,QACE,OAAOJ,CACX,CACF,CACF,EAEA,UAAW,CACT,OAAQ,SAAUK,EAAIK,EAAO,CAC3B,IAAMC,EAAOf,EAAM,KAAK,MAAMA,EAAM,UAAUS,CAAE,CAAC,EAEjD,QAAWE,KAAOG,EAChBC,EAAKJ,CAAG,EAAIG,EAAMH,CAAG,EAGvB,OAAOI,CACT,EAWA,aAAc,SAAUC,EAAQC,EAAQC,EAAQC,EAAM,CACpDA,EAAOA,GAAQnB,EAAM,UACrB,IAAMoB,EAAUD,EAAKH,CAAM,EACrBK,EAAM,CAAC,EAEb,QAAWC,KAASF,EAClB,GAAIA,EAAQ,eAAeE,CAAK,EAAG,CACjC,GAAIA,GAASL,EACX,QAAWM,KAAYL,EACjBA,EAAO,eAAeK,CAAQ,IAChCF,EAAIE,CAAQ,EAAIL,EAAOK,CAAQ,GAMhCL,EAAO,eAAeI,CAAK,IAC9BD,EAAIC,CAAK,EAAIF,EAAQE,CAAK,EAE9B,CAGF,IAAME,EAAML,EAAKH,CAAM,EACvB,OAAAG,EAAKH,CAAM,EAAIK,EAGfrB,EAAM,UAAU,IAAIA,EAAM,UAAW,SAAqBW,EAAKc,EAAO,CAChEA,IAAUD,GAAOb,GAAOK,IAC1B,KAAKL,CAAG,EAAIU,EAEhB,CAAC,EAEMA,CACT,EAGA,IAAK,SAASK,EAAItB,EAAGuB,EAAUjB,EAAYH,EAAe,CACxDA,EAAUA,GAAW,CAAC,EAEtB,IAAMqB,EAAQ5B,EAAM,KAAK,MAEzB,QAAWa,KAAKT,EACd,GAAIA,EAAE,eAAeS,CAAC,EAAG,CACvBc,EAAS,KAAKvB,EAAGS,EAAGT,EAAES,CAAC,EAAGH,GAAQG,CAAC,EAEnC,IAAMgB,EAAWzB,EAAES,CAAC,EAClBiB,EAAe9B,EAAM,KAAK,KAAK6B,CAAQ,EAErCC,IAAiB,UAAY,CAACvB,EAAQqB,EAAMC,CAAQ,CAAC,GACvDtB,EAAQqB,EAAMC,CAAQ,CAAC,EAAI,GAC3BH,EAAIG,EAAUF,EAAU,KAAMpB,CAAO,GAC5BuB,IAAiB,SAAW,CAACvB,EAAQqB,EAAMC,CAAQ,CAAC,IAC7DtB,EAAQqB,EAAMC,CAAQ,CAAC,EAAI,GAC3BH,EAAIG,EAAUF,EAAUd,EAAGN,CAAO,EAEtC,CAEJ,CACF,EACA,QAAS,CAAC,EAEV,UAAW,SAAUwB,EAAMX,EAASY,EAAU,CAC5C,IAAMC,EAAW,CACf,KAAMF,EACN,QAASX,EACT,SAAUY,CACZ,EACA,OAAAhC,EAAM,MAAM,IAAI,kBAAmBiC,CAAG,EACtCA,EAAI,OAASjC,EAAM,SAASiC,EAAI,KAAMA,EAAI,OAAO,EACjDjC,EAAM,MAAM,IAAI,iBAAkBiC,CAAG,EAC9B/B,GAAM,UAAUF,EAAM,KAAK,OAAOiC,EAAI,MAAM,EAAGA,EAAI,QAAQ,CACpE,EAEA,aAAc,SAAUF,EAAMG,EAAQd,EAASe,EAAOC,EAAUC,EAASC,EAAc,CACrF,QAAWhB,KAASF,EAAS,CAC3B,GAAI,CAACA,EAAQ,eAAeE,CAAK,GAAK,CAACF,EAAQE,CAAK,EAClD,SAGF,GAAIA,GAASgB,EACX,OAGF,IAAIC,EAAWnB,EAAQE,CAAK,EAC5BiB,EAAWvC,EAAM,KAAK,KAAKuC,CAAQ,IAAM,QAAUA,EAAW,CAACA,CAAQ,EAEvE,QAASC,EAAI,EAAGA,EAAID,EAAS,OAAQ,EAAEC,EAAG,CACxC,IAAIC,EAAUF,EAASC,CAAC,EACtBxB,EAASyB,EAAQ,OACjBC,EAAa,CAAC,CAACD,EAAQ,WACvBE,EAAS,CAAC,CAACF,EAAQ,OACnBG,EAAmB,EACnBC,EAAQJ,EAAQ,MAElB,GAAIE,GAAU,CAACF,EAAQ,QAAQ,OAAQ,CAErC,IAAMK,EAAQL,EAAQ,QAAQ,SAAS,EAAE,MAAM,UAAU,EAAE,CAAC,EAC5DA,EAAQ,QAAU,OAAOA,EAAQ,QAAQ,OAAQK,EAAQ,GAAG,CAC9D,CAEAL,EAAUA,EAAQ,SAAWA,EAG7B,QAAS5B,EAAIsB,EAAOY,GAAMX,EAAUvB,EAAIqB,EAAO,OAAQa,IAAOb,EAAOrB,CAAC,EAAE,OAAQ,EAAEA,EAAG,CACnF,IAAIhB,GAAMqC,EAAOrB,CAAC,EAElB,GAAIqB,EAAO,OAASH,EAAK,OAEvB,OAGF,GAAIlC,cAAeK,GACjB,SAGF,GAAIyC,GAAU9B,GAAKqB,EAAO,OAAS,EAAG,CACpCO,EAAQ,UAAYM,GACpB,IAAIC,EAAQP,EAAQ,KAAKV,CAAI,EAC7B,GAAI,CAACiB,EACH,MAGF,IAAIC,EAAOD,EAAM,OAASN,EAAaM,EAAM,CAAC,EAAE,OAAS,GACvDE,EAAKF,EAAM,MAAQA,EAAM,CAAC,EAAE,OAC5BG,EAAItC,EACJuC,EAAIL,GAEN,QAASM,EAAMnB,EAAO,OAAQiB,EAAIE,IAAQD,EAAIF,GAAO,CAAChB,EAAOiB,CAAC,EAAE,MAAQ,CAACjB,EAAOiB,EAAI,CAAC,EAAE,QAAU,EAAEA,EACjGC,GAAKlB,EAAOiB,CAAC,EAAE,OAEXF,GAAQG,IACV,EAAEvC,EACFkC,GAAMK,GAKV,GAAIlB,EAAOrB,CAAC,YAAaX,GACvB,SAIFoD,EAASH,EAAItC,EACbhB,GAAMkC,EAAK,MAAMgB,GAAKK,CAAC,EACvBJ,EAAM,OAASD,EACjB,KAAO,CACLN,EAAQ,UAAY,EAEpB,IAAIO,EAAQP,EAAQ,KAAK5C,EAAG,EAC1ByD,EAAS,CACb,CAEA,GAAI,CAACN,EAAO,CACV,GAAIX,EACF,MAGF,QACF,CAEIK,IACFE,EAAmBI,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,OAAS,GAGlD,IAAIC,EAAOD,EAAM,MAAQJ,EACvBI,EAAQA,EAAM,CAAC,EAAE,MAAMJ,CAAgB,EACvCM,EAAKD,EAAOD,EAAM,OAClB/B,EAASpB,GAAI,MAAM,EAAGoD,CAAI,EAC1BM,EAAQ1D,GAAI,MAAMqD,CAAE,EAEtB,IAAMM,GAAY,CAAC3C,EAAGyC,CAAM,EAExBrC,IACF,EAAEJ,EACFkC,IAAO9B,EAAO,OACduC,GAAK,KAAKvC,CAAM,GAGlB,IAAMwC,GAAU,IAAIvD,GAAMoB,EAAON,EAAShB,EAAM,SAASgD,EAAOhC,CAAM,EAAIgC,EAAOH,EAAOG,EAAOL,CAAM,EAYrG,GAVAa,GAAK,KAAKC,EAAO,EAEbF,GACFC,GAAK,KAAKD,CAAK,EAGjB,MAAM,UAAU,OAAO,MAAMrB,EAAQsB,EAAI,EAErCF,GAAU,GAAGtD,EAAM,aAAa+B,EAAMG,EAAQd,EAASP,EAAGkC,GAAK,GAAMzB,CAAK,EAE1Ee,EAAS,KACf,CACF,CACF,CACF,EAEA,SAAU,SAAUN,EAAMX,EAAS,CACjC,IAAMc,EAAS,CAACH,CAAI,EAEd2B,EAAOtC,EAAQ,KAErB,GAAIsC,EAAM,CACR,QAAWpC,KAASoC,EAClBtC,EAAQE,CAAK,EAAIoC,EAAKpC,CAAK,EAG7B,OAAOF,EAAQ,IACjB,CAEA,OAAApB,EAAM,aAAa+B,EAAMG,EAAQd,EAAS,EAAG,EAAG,EAAK,EAE9Cc,CACT,EAEA,MAAO,CACL,IAAK,CAAC,EAEN,IAAK,SAAUyB,EAAMhC,EAAU,CAC7B,IAAMiC,EAAQ5D,EAAM,MAAM,IAE1B4D,EAAMD,CAAI,EAAIC,EAAMD,CAAI,GAAK,CAAC,EAE9BC,EAAMD,CAAI,EAAE,KAAKhC,CAAQ,CAC3B,EAEA,IAAK,SAAUgC,EAAM1B,EAAK,CACxB,IAAM4B,EAAY7D,EAAM,MAAM,IAAI2D,CAAI,EAEtC,GAAI,GAACE,GAAa,CAACA,EAAU,QAI7B,QAAShD,EAAI,EAAGc,EAAWA,EAAWkC,EAAUhD,GAAG,GACjDc,EAASM,CAAG,CAEhB,CACF,EAEA,MAAO/B,EACT,EAEAF,EAAM,UAAU,MAAQ,CACtB,QAAS,CACP,CACE,QAAS,kCACT,WAAY,EACd,EACA,CACE,QAAS,mBACT,WAAY,GACZ,OAAQ,EACV,CACF,EACA,OAAQ,CACN,QAAS,iDACT,OAAQ,EACV,EACA,aAAc,CACZ,QAAS,iGACT,WAAY,GACZ,OAAQ,CACN,YAAa,OACf,CACF,EACA,QAAS,6GACT,QAAS,qBACT,SAAU,YACV,OAAQ,wDACR,SAAU,0DACV,YAAa,eACf,EAEAA,EAAM,UAAU,WAAaA,EAAM,UAAU,OAAO,QAAS,CAC3D,aAAc,CACZA,EAAM,UAAU,MAAM,YAAY,EAClC,CACE,QAAS,0FACT,WAAY,EACd,CACF,EACA,QAAS,CACP,CACE,QAAS,kCACT,WAAY,EACd,EACA,CACE,QACE,6WACF,WAAY,EACd,CACF,EACA,OACE,gOAEF,SAAU,kFACV,SAAU,gGACZ,CAAC,EAEDA,EAAM,UAAU,WAAW,YAAY,EAAE,CAAC,EAAE,QAC1C,uEAEFA,EAAM,UAAU,aAAa,aAAc,UAAW,CACpD,MAAO,CACL,QACE,2HACF,WAAY,GACZ,OAAQ,EACV,EAEA,oBAAqB,CACnB,QACE,8JACF,MAAO,UACT,EACA,UAAW,CACT,CACE,QAAS,wGACT,WAAY,GACZ,OAAQA,EAAM,UAAU,UAC1B,EACA,CACE,QAAS,gDACT,OAAQA,EAAM,UAAU,UAC1B,EACA,CACE,QAAS,oDACT,WAAY,GACZ,OAAQA,EAAM,UAAU,UAC1B,EACA,CACE,QACE,qcACF,WAAY,GACZ,OAAQA,EAAM,UAAU,UAC1B,CACF,EACA,SAAU,2BACZ,CAAC,EAEGA,EAAM,UAAU,QAClBA,EAAM,UAAU,OAAO,IAAI,WAAW,SAAU,YAAY,EAG9DA,EAAM,UAAU,GAAKA,EAAM,UAAU,WAErCA,EAAM,UAAU,WAAaA,EAAM,UAAU,OAAO,aAAc,CAEhE,QACE,2YACF,QAAS,uFACX,CAAC,EAEDA,EAAM,UAAU,GAAKA,EAAM,UAAU,WAE9B,SAASE,GAAiBQ,EAAMoD,EAASjB,EAAOkB,EAAkBpB,EAAc,CACrF,KAAK,KAAOjC,EACZ,KAAK,QAAUoD,EACf,KAAK,MAAQjB,EAEb,KAAK,QAAUkB,GAAc,IAAI,OAAS,EAC1C,KAAK,OAAS,CAAC,CAACpB,CAClB,CAEAzC,GAAM,UAAY,SAAUE,EAAG4B,EAAgB,CAC7C,OAAI,OAAO5B,GAAK,SACPA,EAGL,MAAM,QAAQA,CAAC,EACVA,EACJ,IAAI,SAAU4D,EAAS,CACtB,OAAO9D,GAAM,UAAU8D,EAAShC,CAAQ,CAC1C,CAAC,EACA,KAAK,EAAE,EAGLiC,GAAsB7D,EAAE,IAAI,EAAEA,EAAE,OAAO,CAChD,EAEA,SAAS6D,GAAsBC,EAAoB,CACjD,OAAOC,GAAMD,CAAU,GAAKtE,EAC9B,CC5eO,SAASwE,GAAYC,EAAa,CACvC,OAAOC,GAAUD,EAAKE,EAAM,UAAU,UAAU,CAClD,CAEA,SAASD,GAAUD,EAAaG,EAA2B,CAEzD,OADeD,EAAM,SAASF,EAAKG,CAAO,EAC5B,IAAKC,GAAMC,GAAM,UAAUD,CAAC,CAAC,EAAE,KAAK,EAAE,CACtD,CCRO,SAASE,GAAOC,EAAqB,CAC1C,OAAOC,GAAMD,CAAG,CAClB,CJOO,IAAME,GAAN,MAAMC,CAAgB,CAIlB,gBACD,MAER,OAAO,KAAKC,EAA0C,CACpD,IAAIC,EACJ,GAAI,CACFA,EAAUC,GAAG,aAAaF,EAAU,OAAO,CAC7C,MAAY,CACV,OAAO,IACT,CAEA,OAAOD,EAAgB,YAAYE,CAAO,CAC5C,CAEA,OAAO,YAAYA,EAAkC,CACnD,IAAME,EAAQF,EAAQ,MAAM,OAAO,EAEnC,OAAO,IAAIF,EAAgB,EAAGI,CAAK,CACrC,CAEQ,YAAYC,EAAmBD,EAAiB,CACtD,KAAK,gBAAkBC,EACvB,KAAK,MAAQD,CACf,CAKA,IAAI,gBAAyB,CAC3B,OAAO,KAAK,gBAAkB,KAAK,MAAM,OAAS,CACpD,CASA,UAAUE,EAAoBC,EAAkD,CAC9E,GAAID,EAAa,KAAK,iBAAmBA,EAAa,KAAK,MAAM,OAAS,KAAK,gBAC7E,OAAO,KAET,IAAME,EAAMF,EAAa,KAAK,gBACxBG,EAAW,CAAC,GAAG,KAAK,KAAK,EAC/B,OAAAA,EAASD,CAAG,EAAID,EAAME,EAASD,CAAG,CAAC,EAC5B,IAAIR,EAAgB,KAAK,gBAAiBS,CAAQ,CAC3D,CASA,SAASF,EAAsE,CAC7E,OAAO,IAAIP,EACT,KAAK,gBACL,KAAK,MAAM,IAAI,CAACU,EAAMC,IAAMJ,EAAMG,EAAM,KAAK,gBAAkBC,CAAC,CAAC,CACnE,CACF,CAOA,OAAOL,EAAwC,CAC7C,OAAO,KAAK,MAAMA,EAAa,KAAK,eAAe,CACrD,CASA,gBAAgBM,EAAgBC,EAA8B,CAC5D,OAAO,KAAK,SAAS,CAACH,EAAMJ,IACtBA,IAAeM,EACV,GAAGC,CAAG,IAAIH,CAAI,GAEhB,KAAKA,CAAI,EACjB,CACH,CAgBA,MAAMI,EAAkBC,EAAiC,CACvD,IAAMC,EAAc,KAAK,MAAM,MAAMF,EAAW,EAAGC,CAAM,EAAE,KAAK;AAAA,CAAI,EACpE,OAAO,IAAIf,EAAgBc,EAAUG,GAAOD,CAAW,EAAE,MAAM;AAAA,CAAI,CAAC,CACtE,CAOA,WAA6B,CAC3B,IAAME,EAAcC,GAAY,KAAK,SAAS,CAAC,EAC/C,OAAO,IAAInB,EAAgB,KAAK,gBAAiBkB,EAAY,MAAM;AAAA,CAAI,CAAC,CAC1E,CAEA,UAAmB,CACjB,OAAO,KAAK,MAAM,KAAK;AAAA,CAAI,CAC7B,CACF,EDtGA,IAAME,GAAwB,CAC5B,IAAAC,GACA,KAAAC,GACA,IAAAC,GACA,KAAAC,GACA,UAAAC,GACA,gBAAkBC,GAAWA,EAAO,UAAU,CAChD,EAEMC,GAAyB,CAC7B,IAAMC,GAAQA,EACd,KAAOA,GAAQA,EACf,IAAMA,GAAQA,EACd,KAAOA,GAAQA,EACf,UAAYA,GAAQA,EACpB,gBAAkBF,GAAWA,CAC/B,EAWA,SAASG,GAAyB,CAChC,QAAAC,EACA,eAAAC,EACA,QAAAC,EACA,cAAAC,CACF,EAA8C,CAC5C,MAAO,CACL,aAAc,UAAUF,CAAc,KACtC,QAAAD,EACA,QAASE,GAAW,GACpB,cAAAC,CACF,CACF,CAEO,SAASC,GACd,CAAE,SAAAC,EAAU,QAAAL,EAAS,eAAAC,EAAgB,QAAAC,EAAS,cAAAC,CAAc,EAC5DG,EACgC,CAChC,IAAMC,EAAqBR,GAAyB,CAAE,QAAAC,EAAS,eAAAC,EAAgB,QAAAC,EAAS,cAAAC,CAAc,CAAC,EAOvG,GAJI,CAACE,GAAY,OAAO,OAAW,KAI/B,QAAQ,IAAI,WAAa,aAC3B,OAAOE,EAGT,IAAMC,EAAeH,EAAS,YAAY,EAC1C,GAAI,CAACG,GAAgB,CAACA,EAAa,YAAc,CAACA,EAAa,aAC7D,OAAOD,EAGT,IAAME,EAAmB,KAAK,IAAI,EAAGD,EAAa,WAAa,CAAC,EAC5DZ,EAASc,GAAgB,KAAKF,EAAa,QAAQ,GAAG,MAAMC,EAAkBD,EAAa,UAAU,EACnGG,EAAiBf,GAAQ,OAAOY,EAAa,UAAU,EAC7D,GAAIZ,GAAUe,EAAgB,CAC5B,IAAMC,EAAuBC,GAAUF,CAAc,EAC/CG,EAAqBC,GAAqBJ,CAAc,EAC9D,GAAI,CAACG,EACH,OAAOP,EAETA,EAAmB,aAAe,GAAGO,EAAmB,IAAI,IAC5DP,EAAmB,SAAWC,EAEzBN,IACHN,EAASA,EAAO,UAAUY,EAAa,WAAaQ,GAASA,EAAK,MAAM,EAAGF,EAAmB,iBAAiB,CAAC,GAGlHlB,EAASU,EAAO,gBAAgBV,CAAM,EACtC,IAAMqB,EAAoB,OAAOrB,EAAO,cAAc,EAAE,OAMxD,GALAW,EAAmB,aAAeX,EAC/B,SAAS,CAACoB,EAAME,IAAeZ,EAAO,KAAK,OAAOY,CAAU,EAAE,SAASD,CAAiB,CAAC,EAAI,IAAMD,CAAI,EACvG,SAAUA,GAASV,EAAO,IAAIU,CAAI,CAAC,EACnC,gBAAgBR,EAAa,WAAYF,EAAO,KAAKA,EAAO,IAAI,QAAG,CAAC,CAAC,EAEpEH,EAAe,CACjB,IAAIgB,EAAcP,EAAuBK,EAAoB,EAC7DE,GAAe,EAIfZ,EAAmB,iBAAgB,GAAAa,SAAajB,EAAegB,CAAW,EAAE,MAAMA,CAAW,CAC/F,CACF,CACA,OAAOZ,CACT,CAEA,SAASQ,GAAqBjB,EAAiE,CAC7F,IAAMuB,EAAa,OAAO,KAAUC,EAAW,EAAE,KAAK,GAAG,EAEnDC,EADS,IAAI,OAAO,OAAO,SAASF,CAAU,KAAK,EACpC,KAAKvB,CAAG,EAC7B,GAAIyB,EAAO,CACT,IAAMC,EAAoBD,EAAM,MAAQA,EAAM,CAAC,EAAE,OAI3CE,EAAiB3B,EAAI,YAAY,IAAKyB,EAAM,KAAK,EAAI,EAC3D,MAAO,CACL,KAAMzB,EAAI,MAAM2B,EAAgBD,CAAiB,EACjD,kBAAAA,CACF,CACF,CACA,OAAO,IACT,CAEA,SAASX,GAAUG,EAAsB,CACvC,IAAIU,EAAa,EACjB,QAASC,EAAI,EAAGA,EAAIX,EAAK,OAAQW,IAAK,CACpC,GAAIX,EAAK,OAAOW,CAAC,IAAM,IACrB,OAAOD,EAETA,GACF,CAEA,OAAOA,CACT,CAEA,SAASE,GACP,CAAE,aAAAC,EAAc,SAAAC,EAAU,QAAA9B,EAAS,QAAAE,EAAS,aAAA6B,EAAc,cAAA5B,CAAc,EACxEG,EACA,CACA,IAAM0B,EAAkB,CAAC,EAAE,EAErBC,EAAcH,EAAW,MAAQ,IAYvC,GAXI5B,GACF8B,EAAM,KAAK1B,EAAO,IAAI,4CAA4CA,EAAO,KAAK,OAAO,CAAC,0BAA0B,CAAC,EACjH0B,EAAM,KAAK1B,EAAO,IAAI,sBAAsBA,EAAO,KAAK,KAAKuB,CAAY,IAAI,CAAC,cAAcI,CAAW,EAAE,CAAC,GAE1GD,EAAM,KAAK1B,EAAO,IAAI,WAAWA,EAAO,KAAK,KAAKuB,CAAY,IAAI,CAAC,cAAcI,CAAW,EAAE,CAAC,EAG7FH,GACFE,EAAM,KAAK1B,EAAO,UAAU4B,GAAwBJ,CAAQ,CAAC,CAAC,EAG5DC,EAAc,CAChBC,EAAM,KAAK,EAAE,EAEb,IAAMG,EAAmB,CAACJ,EAAa,SAAS,CAAC,EAE7C5B,IACFgC,EAAiB,KAAKhC,CAAa,EACnCgC,EAAiB,KAAK7B,EAAO,IAAI,GAAG,CAAC,GAEvC0B,EAAM,KAAKG,EAAiB,KAAK,EAAE,CAAC,EAChChC,GACF6B,EAAM,KAAK,EAAE,CAEjB,MACEA,EAAM,KAAK,EAAE,EACT7B,GACF6B,EAAM,KAAK7B,CAAa,EAE1B6B,EAAM,KAAK,EAAE,EAGf,OAAAA,EAAM,KAAKhC,CAAO,EACXgC,EAAM,KAAK;AAAA,CAAI,CACxB,CAEA,SAASE,GAAwBJ,EAAkC,CACjE,IAAMM,EAAQ,CAACN,EAAS,QAAQ,EAChC,OAAIA,EAAS,YACXM,EAAM,KAAK,OAAON,EAAS,UAAU,CAAC,EAGpCA,EAAS,cACXM,EAAM,KAAK,OAAON,EAAS,YAAY,CAAC,EAGnCM,EAAM,KAAK,GAAG,CACvB,CAEO,SAASC,GAA8BC,EAAyB,CACrE,IAAMhC,EAASgC,EAAK,WAAahD,GAAgBO,GAC7CU,EAaF,OAAAA,EAAqBH,GAAsBkC,EAAMhC,CAAM,EAGlDsB,GAAsBrB,EAAoBD,CAAM,CACzD,CMzOA,IAAAiC,GAAwB,SCsBjB,SAASC,GAAgBC,EAAmBC,EAA8BC,EAAgC,CAC/G,IAAMC,EAAYC,GAAkBJ,CAAK,EACnCK,EAASC,GAA+BH,CAAS,EACjDI,EAAYC,GAAoBH,CAAM,EACxCE,EACFE,GAAqBF,EAAWN,EAAMC,CAAU,EAEhDD,EAAK,gBAAgB,IAAM,eAAe,CAE9C,CAEA,SAASG,GAAkBJ,EAAoC,CAC7D,OAAOA,EAAM,OAAO,QAASA,GACvBA,EAAM,OAAS,QACVI,GAAkBJ,CAAK,EAEzB,CAACA,CAAK,CACd,CACH,CAYA,SAASM,GAA+BI,EAA4B,CAClE,IAAMC,EAAmB,IAAI,IACvBC,EAA0B,CAAC,EAEjC,QAAWZ,KAASU,EAAW,CAC7B,GAAIV,EAAM,OAAS,sBAAuB,CACxCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAEA,IAAMa,EAAM,GAAGb,EAAM,cAAc,KAAK,GAAG,CAAC,IAAIA,EAAM,aAAa,KAAK,GAAG,CAAC,GACtEc,EAAYH,EAAiB,IAAIE,CAAG,EACrCC,EAGHH,EAAiB,IAAIE,EAAK,CACxB,GAAGb,EACH,SAAU,CACR,GAAGA,EAAM,SACT,UAAWe,GAAaD,EAAU,SAAS,UAAWd,EAAM,SAAS,SAAS,CAChF,CACF,CAAC,EARDW,EAAiB,IAAIE,EAAKb,CAAK,CAUnC,CAEA,OAAAY,EAAO,KAAK,GAAGD,EAAiB,OAAO,CAAC,EACjCC,CACT,CAEA,SAASG,GAAgBC,EAAWC,EAAgB,CAClD,MAAO,CAAC,GAAG,IAAI,IAAID,EAAK,OAAOC,CAAI,CAAC,CAAC,CACvC,CAcA,SAAST,GAAoBU,EAAyB,CACpD,OAAOC,GAAkBD,EAAQ,CAACE,EAAQC,IAAW,CACnD,IAAMC,EAAcC,GAAsBH,CAAM,EAC1CI,EAAcD,GAAsBF,CAAM,EAChD,OAAIC,IAAgBE,EACXF,EAAcE,EAEhBC,GAAkBL,CAAM,EAAIK,GAAkBJ,CAAM,CAC7D,CAAC,CACH,CAEA,SAASE,GAAsBvB,EAA8B,CAC3D,IAAI0B,EAAQ,EACZ,OAAI,MAAM,QAAQ1B,EAAM,aAAgB,IACtC0B,GAAS1B,EAAM,cAAiB,QAG9B,MAAM,QAAQA,EAAM,YAAe,IACrC0B,GAAS1B,EAAM,aAAgB,QAE1B0B,CACT,CAoBA,SAASD,GAAkBzB,EAAsC,CAC/D,OAAQA,EAAM,KAAM,CAClB,IAAK,uBACL,IAAK,gBACH,MAAO,IACT,IAAK,sBACH,MAAO,IACT,IAAK,0BACH,MAAO,IACT,QACE,MAAO,EACX,CACF,CCpJO,IAAM2B,GAAN,KAAyD,CAE9D,YACWC,EACAC,EACT,CAFS,UAAAD,EACA,WAAAC,CACR,CAJI,WAAa,GAMpB,cAAe,CACb,YAAK,WAAa,GACX,IACT,CAEA,MAAMC,EAA2B,CAC/B,GAAM,CACJ,OAAQ,CAAE,MAAAC,CAAM,CAClB,EAAID,EAAO,QAEXA,EAAO,gBAAgBC,EAAM,KAAK,WAAa,IAAM,GAAG,CAAC,EACzDD,EAAO,MAAMC,EAAM,KAAK,IAAI,CAAC,EAExB,KAAK,YACRD,EAAO,MAAMC,EAAM,GAAG,CAAC,EAGzBD,EAAO,MAAMC,EAAM,IAAI,CAAC,EACpB,OAAO,KAAK,OAAU,SACxBD,EAAO,MAAMC,EAAM,KAAK,KAAK,CAAC,EAE9BD,EAAO,MAAM,KAAK,KAAK,CAE3B,CACF,ECfAE,KCZO,IAAMC,GAAN,KAAsC,CAO3C,YACEC,EAAiB,EACRC,EACT,CADS,aAAAA,EAET,KAAK,cAAgBD,CACvB,CAXQ,MAAkB,CAAC,EACnB,YAAc,GACd,cAAgB,EAChB,aACA,yBAeR,MAAME,EAAiD,CACrD,OAAI,OAAOA,GAAU,SACnB,KAAK,aAAeA,EAEpBA,EAAM,MAAM,IAAI,EAEX,IACT,CAWA,YACEC,EACAC,EACAC,EAA6C,CAACC,EAAMC,IAAMA,EAAE,MAAMD,CAAI,EAChE,CACN,IAAME,EAAOJ,EAAO,OAAS,EAC7B,QAAS,EAAI,EAAG,EAAIA,EAAO,OAAQ,IACjCC,EAAUD,EAAO,CAAC,EAAG,IAAI,EACrB,IAAMI,GACR,KAAK,MAAML,CAAS,EAGxB,OAAO,IACT,CAOA,UAAUM,EAAgD,CACxD,OAAO,KAAK,MAAMA,CAAI,EAAE,QAAQ,CAClC,CAMA,SAAgB,CACd,KAAK,MAAM,KAAK,KAAK,oBAAoB,CAAC,EAC1C,KAAK,YAAc,GACnB,KAAK,aAAe,OAEpB,IAAMC,EAA2B,KAAK,yBACtC,YAAK,yBAA2B,OAChCA,IAA2B,EACpB,IACT,CAmBA,WAAWC,EAAwC,CACjD,YAAK,OAAO,EACZA,EAAS,IAAI,EACb,KAAK,SAAS,EACP,IACT,CAWA,iBAAiBA,EAAsB,CACrC,YAAK,yBAA2BA,EACzB,IACT,CAMA,QAAe,CACb,YAAK,gBACE,IACT,CAMA,UAAiB,CACf,OAAI,KAAK,cAAgB,GACvB,KAAK,gBAEA,IACT,CAWA,gBAAgBC,EAAsB,CACpC,YAAK,aAAeA,EACb,IACT,CAEA,UAAW,CACT,OAAO,KAAK,MAAM,OAAO,KAAK,oBAAoB,CAAC,EAAE,KAAK;AAAA,CAAI,CAChE,CAEA,sBAAuB,CACrB,OAAO,KAAK,YAAY,MAC1B,CAEQ,qBAA8B,CACpC,IAAMH,EAAO,KAAK,YAAY,SAAS,KAAK,YAAY,OAAS,EAAc,KAAK,aAAa,EACjG,OAAI,KAAK,aACA,KAAK,aAAeA,EAAK,MAAM,CAAC,EAElCA,CACT,CACF,ED5IAI,KE3BO,IAAMC,GAAN,KAAqD,CAC1D,YAAmBC,EAAc,CAAd,WAAAA,CAAe,CAClC,MAAMC,EAA2B,CAC/BA,EAAO,MAAM,KAAK,KAAK,CACzB,CAEA,aAAoB,CAClB,KAAK,MAAM,YAAY,CACzB,CACF,ECAA,IAAMC,GAAQC,GAAgBA,EAEjBC,GAAyB,CACpC,KAAMF,GACN,IAAKA,GACL,MAAOA,GACP,IAAKA,GACL,QAAS,EACX,EAEaG,GAAuB,CAClC,KAAAC,GACA,IAAAC,GACA,MAAAC,GACA,IAAAC,GACA,QAAS,EACX,EASaC,GAAqC,CAChD,MAAMC,EAAQ,CACZA,EAAO,UAAU,GAAG,CACtB,CACF,ECtCO,IAAMC,GAAN,KAAmD,CAGxD,YAAmBC,EAAkB,CAAlB,cAAAA,CAAmB,CAF9B,aAAe,GACf,MAAkBC,GAAQA,EAGlC,WAAkB,CAChB,YAAK,aAAe,GACb,IACT,CAEA,SAASC,EAAsB,CAC7B,YAAK,MAAQA,EACN,IACT,CAEA,MAAMC,EAA2B,CAC/B,IAAMC,EAAcD,EAAO,qBAAqB,EAChDA,EAAO,MAAM,KAAK,MAAM,KAAK,QAAQ,CAAC,EAClC,KAAK,cACPA,EAAO,iBAAiB,IAAM,CAC5BA,EAAO,MAAM,IAAI,OAAOC,CAAW,CAAC,EAAE,UAAU,KAAK,MAAM,IAAI,OAAO,KAAK,SAAS,MAAM,CAAC,CAAC,CAC9F,CAAC,CAEL,CACF,ECzBO,IAAeC,GAAf,KAAkD,CAShD,SAAW,GAElB,aAAoB,CAClB,YAAK,SAAW,GACT,IACT,CAGF,ECbO,IAAMC,GAAN,cAAyBC,EAAM,CAC5B,MAAsB,CAAC,EAE/B,QAAQC,EAAmB,CACzB,YAAK,MAAM,KAAK,IAAIC,GAAWD,CAAI,CAAC,EAC7B,IACT,CAEA,SAASE,EAAuC,CAC9C,OAAO,KAAK,MAAMA,CAAK,CACzB,CAES,eAAwB,CAC/B,OAAI,KAAK,MAAM,SAAW,EACjB,EAEY,KAAK,IAAI,GAAG,KAAK,MAAM,IAAKF,GAASA,EAAK,MAAM,cAAc,CAAC,CAAC,EAC/D,CACxB,CAES,MAAMG,EAA2B,CACxC,GAAI,KAAK,MAAM,SAAW,EAAG,CAC3B,KAAK,WAAWA,CAAM,EACtB,MACF,CACA,KAAK,eAAeA,CAAM,CAC5B,CAEQ,WAAWA,EAAqB,CACtC,IAAMC,EAAS,IAAIC,GAAgB,IAAI,EACnC,KAAK,UACPD,EAAO,SAASD,EAAO,QAAQ,OAAO,GAAG,EAAE,UAAU,EAEvDA,EAAO,MAAMC,CAAM,CACrB,CAEQ,eAAeD,EAAqB,CAC1C,GAAM,CAAE,OAAAG,CAAO,EAAIH,EAAO,QAE1BA,EACG,UAAU,GAAG,EACb,WAAW,IAAMA,EAAO,YAAYI,GAAiB,KAAK,KAAK,EAAE,QAAQ,CAAC,EAC1E,MAAM,GAAG,EAER,KAAK,UACPJ,EAAO,iBAAiB,IAAM,CAC5BA,EAAO,UAAUG,EAAO,IAAI,IAAI,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAC/D,CAAC,CAEL,CAES,UAAsB,CAE/B,CACF,EC1BO,IAAME,GAAN,MAAMC,UAAoBC,EAAM,CAC7B,OAAsC,CAAC,EACvC,YAAuC,CAAC,EAEhD,SAASC,EAAoB,CAC3B,KAAK,OAAOA,EAAM,IAAI,EAAIA,CAC5B,CAEA,cAAcC,EAAmC,CAC/C,KAAK,YAAY,KAAKA,CAAU,CAClC,CAEA,SAASC,EAAsC,CAC7C,OAAO,KAAK,OAAOA,CAAG,CACxB,CAEA,aAAaC,EAAmC,CAC9C,GAAM,CAACC,EAAM,GAAGC,CAAI,EAAIF,EAClBG,EAAa,KAAK,SAASF,CAAI,EACrC,GAAI,CAACE,EACH,OAEF,IAAIN,EAAeM,EACnB,QAAWC,KAAWF,EAAM,CAC1B,IAAIG,EAOJ,GALIR,EAAM,iBAAiBF,EACzBU,EAAYR,EAAM,MAAM,SAASO,CAAO,EAC/BP,EAAM,iBAAiBS,KAChCD,EAAYR,EAAM,MAAM,SAAS,OAAOO,CAAO,CAAC,GAE9C,CAACC,EACH,OAEFR,EAAQQ,CACV,CACA,OAAOR,CACT,CAEA,kBAAkBG,EAAgB,CAChC,OAAIA,EAAK,SAAW,EACX,KAEF,KAAK,aAAaA,CAAI,GAAG,KAClC,CAEA,SAASD,EAAa,CACpB,MAAO,EAAQ,KAAK,SAASA,CAAG,CAClC,CAEA,iBAAkB,CAChB,KAAK,OAAS,CAAC,CACjB,CAEA,YAAYA,EAAa,CACvB,OAAO,KAAK,OAAOA,CAAG,CACxB,CAEA,WAAY,CACV,OAAO,KAAK,MACd,CAEA,SAAmB,CACjB,OAAO,OAAO,KAAK,KAAK,MAAM,EAAE,SAAW,CAC7C,CAEA,cAAcA,EAAgC,CAC5C,OAAO,KAAK,SAASA,CAAG,GAAG,KAC7B,CAEA,yBAAyBC,EAAmC,CAE1D,IAAIO,EAAmB,KACvB,QAAWH,KAAWJ,EAAM,CAC1B,GAAI,EAAEO,aAAqBZ,GACzB,OAEF,IAAMa,EAAOD,EAAU,qBAAqBH,CAAO,EACnD,GAAI,CAACI,EACH,OAGFD,EAAYC,CACd,CAEA,OAAOD,CACT,CAEA,uBAAuBP,EAA6C,CAClE,IAAMS,EAAa,KAAK,mBAAmB,EAC3C,GAAI,CAACA,EACH,OAGF,IAAIC,EAASD,EAEb,QAAWL,KAAWJ,EAAM,CAC1B,IAAMQ,EAAOE,EAAO,MAAM,cAAcN,CAAO,EAC/C,GAAI,CAACI,GAAQ,EAAEA,aAAgBb,GAC7B,OAGF,IAAMgB,EAAaH,EAAK,mBAAmB,EAC3C,GAAI,CAACG,EACH,OAEFD,EAASC,CACX,CAEA,OAAOD,CACT,CAEA,oBAAkD,CAChD,IAAME,EAAS,KAAK,SAAS,QAAQ,GAAG,MAAM,SAAS,EACvD,GAAIA,EACF,MAAO,CAAE,KAAM,SAAU,MAAOA,CAAO,EAGzC,IAAMC,EAAU,KAAK,SAAS,SAAS,GAAG,MAAM,SAAS,EACzD,GAAIA,EACF,MAAO,CAAE,KAAM,UAAW,MAAOA,CAAQ,CAG7C,CAEA,qBAAqBd,EAAgC,CACnD,OAAO,KAAK,mBAAmB,GAAG,MAAM,OAAOA,CAAG,EAAE,KACtD,CAES,eAAwB,CAC/B,IAAMe,EAAS,OAAO,OAAO,KAAK,MAAM,EACxC,OAAIA,EAAO,QAAU,EACZ,EAEa,KAAK,IAAI,GAAGA,EAAO,IAAKC,GAAMA,EAAE,cAAc,CAAC,CAAC,EAC/C,CACzB,CAES,MAAMC,EAA2B,CACxC,IAAMF,EAAS,OAAO,OAAO,KAAK,MAAM,EACxC,GAAIA,EAAO,SAAW,GAAK,KAAK,YAAY,SAAW,EAAG,CACxD,KAAK,WAAWE,CAAM,EACtB,MACF,CAEA,KAAK,kBAAkBA,EAAQF,CAAM,CACvC,CAES,UAAwB,CAC/B,OAAO,IACT,CAEQ,WAAWE,EAAqB,CACtC,IAAMC,EAAS,IAAIC,GAAgB,IAAI,EACnC,KAAK,UACPD,EAAO,SAASD,EAAO,QAAQ,OAAO,GAAG,EAAE,UAAU,EAGvDA,EAAO,MAAMC,CAAM,CACrB,CAEQ,kBAAkBD,EAAqBF,EAAuB,CACpEE,EAAO,UAAU,GAAG,EAAE,WAAW,IAAM,CACrCA,EAAO,YAAYG,GAAiB,CAAC,GAAGL,EAAQ,GAAG,KAAK,WAAW,CAAC,EAAE,QAAQ,CAChF,CAAC,EAEDE,EAAO,MAAM,GAAG,EACZ,KAAK,UACPA,EAAO,iBAAiB,IAAM,CAC5BA,EAAO,UAAUA,EAAO,QAAQ,OAAO,IAAI,IAAI,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAC9E,CAAC,CAEL,CACF,EC5MO,IAAMI,GAAN,cAA0BC,EAAM,CACrC,YAAqBC,EAAc,CACjC,MAAM,EADa,UAAAA,CAErB,CAES,eAAwB,CAC/B,OAAO,KAAK,KAAK,MACnB,CAES,MAAMC,EAA2B,CACxC,IAAMC,EAAS,IAAIC,GAAgB,KAAK,IAAI,EACxC,KAAK,UACPD,EAAO,UAAU,EAAE,SAASD,EAAO,QAAQ,OAAO,GAAG,EAEvDA,EAAO,MAAMC,CAAM,CACrB,CAES,UAAsB,CAE/B,CACF,ECtBO,IAAME,GAAN,KAAyD,CACtD,OAA8B,CAAC,EAEvC,SAASC,EAAcC,EAAe,CACpC,YAAK,OAAO,KAAK,CACf,MAAMC,EAAQ,CACZ,GAAM,CAAE,MAAAC,EAAO,IAAAC,CAAI,EAAIF,EAAO,QAAQ,OACtCA,EAAO,MAAMC,EAAMC,EAAI,GAAGJ,CAAI,KAAKC,CAAK,EAAE,CAAC,CAAC,EAAE,gBAAgBE,EAAMC,EAAI,GAAG,CAAC,CAAC,CAC/E,CACF,CAAC,EACM,IACT,CAEA,MAAMF,EAA2B,CAC/B,GAAM,CACJ,OAAQ,CAAE,MAAAC,CAAM,CAClB,EAAID,EAAO,QACXA,EACG,UAAUC,EAAM,GAAG,CAAC,EACpB,WAAW,IAAM,CAChBD,EAAO,YAAYG,GAAiB,KAAK,MAAM,EAAE,QAAQ,CAC3D,CAAC,EACA,MAAMF,EAAM,GAAG,CAAC,EAChB,gBAAgBA,EAAM,GAAG,CAAC,CAC/B,CACF,EZcO,SAASG,GACdC,EACAC,EACAC,EACM,CACN,OAAQF,EAAM,KAAM,CAClB,IAAK,0BACHG,GAAkCH,EAAOC,CAAI,EAC7C,MACF,IAAK,kBACHG,GAA0BJ,EAAOC,CAAI,EACrC,MACF,IAAK,iBACHI,GAAyBL,EAAOC,EAAMC,CAAU,EAChD,MACF,IAAK,wBACHI,GAAgCN,EAAOC,CAAI,EAC3C,MACF,IAAK,wBACHM,GAAgCP,EAAOC,CAAI,EAC3C,MACF,IAAK,kBACHO,GAA0BR,EAAOC,CAAI,EACrC,MACF,IAAK,oBACHQ,GAA4BT,EAAOC,CAAI,EACvC,MACF,IAAK,0BACHS,GAAkCV,EAAOC,CAAI,EAC7C,MACF,IAAK,sBACHU,GAA8BX,EAAOC,CAAI,EACzC,MACF,IAAK,uBACHW,GAA+BZ,EAAOC,CAAI,EAC1C,MACF,IAAK,gBACHY,GAAwBb,EAAOC,CAAI,EACnC,MACF,IAAK,oBACHa,GAA4Bd,EAAOC,CAAI,EACvC,MACF,IAAK,qBACHc,GAA6Bf,EAAOC,CAAI,EACxC,MACF,IAAK,QACHe,GAAgBhB,EAAOC,EAAMC,CAAU,EACvC,MACF,QACE,MAAM,IAAI,MAAM,oBAAsBF,EAAM,IAAI,CACpD,CACF,CAEA,SAASG,GAAkCH,EAAqCiB,EAAkC,CAChH,IAAMC,EAASD,EAAS,UAAU,yBAAyBjB,EAAM,aAAa,GAAG,SAAS,EACtFkB,IACFA,EAAO,SAASlB,EAAM,UAAU,GAAG,YAAY,EAC/CkB,EAAO,SAASlB,EAAM,WAAW,GAAG,YAAY,GAGlDiB,EAAS,gBACNE,GACC,UAAUA,EAAO,KAAK,QAAQ,CAAC,QAAQA,EAAO,MAAM,KAAKnB,EAAM,UAAU,IAAI,CAAC,OAAOmB,EAAO,MAC1F,KAAKnB,EAAM,WAAW,IACxB,CAAC,SAASmB,EAAO,IAAI,UAAU,CAAC,oBACpC,CACF,CAEA,SAASf,GAA0BJ,EAA6BiB,EAAkC,CAChG,GAAM,CAACG,EAAeC,CAAK,EAAIC,GAAUtB,EAAM,aAAa,EACtDuB,EAAavB,EAAM,WAEnBkB,EAASD,EAAS,UAAU,uBAAuBG,CAAa,GAAG,MACzE,GAAIF,IACFA,EAAO,SAASG,CAAK,GAAG,YAAY,EAEhCE,GACF,QAAWF,KAASE,EAAW,OACzBF,EAAM,YACRH,EAAO,cAAc,IAAIM,GAAsBH,EAAM,KAAM,MAAM,CAAC,EAM1EJ,EAAS,gBAAiBE,GAAW,CACnC,IAAIM,EAAM,wBAAwBN,EAAO,IAAI,KAAKE,CAAK,IAAI,CAAC,QAAQF,EAAO,KAAK,SAAS,CAAC,aAC1F,OAAII,EACFE,GAAO,aAAaN,EAAO,KAAKI,EAAW,IAAI,CAAC,KAAKG,GAAwBP,CAAM,CAAC,GAEpFM,GAAO,IAGTA,GAAO;AAAA,YAAeN,EAAO,KAAK,SAAS,CAAC,2CACrCM,CACT,CAAC,CACH,CAEA,SAASpB,GACPL,EACAiB,EACAf,EACA,CACA,IAAMyB,EAAeV,EAAS,UAAU,yBAAyBjB,EAAM,aAAa,GAAG,SAAS,EAChG,GAAI2B,EAAc,CAChB,IAAMC,EAAOD,EAAa,SAAS,MAAM,GAAG,MAAM,SAAS,EAC3D,GAAIC,EAAM,CACRC,GAA6B7B,EAAOiB,EAAUW,CAAI,EAClD,MACF,CACA,GAAID,EAAa,SAAS,QAAQ,EAAG,CACnCG,GAA+B9B,EAAOiB,CAAQ,EAC9C,MACF,CACF,CAEA,GAAIf,IAAa6B,GAAa/B,EAAM,WAAW,IAAI,CAAC,EAAG,CACrDgC,GAAmChC,EAAOiB,CAAQ,EAClD,MACF,CAGAA,EAAS,gBAAgB,IAAM,qBAAqBjB,EAAM,cAAc,KAAK,GAAG,CAAC,aAAa,CAChG,CAGA,SAAS6B,GACP7B,EACAiB,EACAgB,EACA,CACAA,EAAU,gBAAgB,EAC1B,QAAWZ,KAASrB,EAAM,WAAW,OACnCiC,EAAU,cAAc,IAAIT,GAAsBH,EAAM,KAAM,OAAO,CAAC,EAGxEJ,EAAS,gBAAiBE,GACjB,OAAOA,EAAO,IAAI,MAAM,CAAC,gDAAgDA,EAAO,KACrFnB,EAAM,WAAW,IACnB,CAAC,qDACF,CACH,CAGA,SAAS8B,GAA+B9B,EAA4BiB,EAAkC,CACpG,IAAMM,EAAavB,EAAM,WACnBkC,EAAYjB,EAAS,UAAU,uBAAuBjB,EAAM,aAAa,GAAG,MAC5EmC,EAAUD,GAAW,QAAQ,GAAK,GAEpCA,IA+BFA,EAAU,gBAAgB,EAC1BE,GAAwBF,EAAWX,CAAU,GAG/CN,EAAS,gBAAiBE,GACpBgB,EACK,OAAOhB,EAAO,IAAI,UAAU,CAAC,uBAAuBA,EAAO,KAChEI,EAAW,IACb,CAAC,uBAAuBG,GAAwBP,CAAM,CAAC,GAElD,OAAOA,EAAO,IAAI,UAAU,CAAC,uBAAuBA,EAAO,KAAKI,EAAW,IAAI,CAAC,UAAUJ,EAAO,KACtG,2BACF,CAAC,GACF,CACH,CAGA,SAASa,GAAmChC,EAA4BiB,EAAkC,CACxG,IAAMoB,EAAsB,IAAIC,GAChC,QAAWjB,KAASrB,EAAM,WAAW,OAC9BqB,EAAM,YACTgB,EAAoB,SAAShB,EAAM,KAAM,OAAO,EAIpD,IAAMkB,EAAiB,IAAIf,GAAsB,OAAQa,CAAmB,EAAE,aAAa,EAE3F,GAAIrC,EAAM,cAAc,SAAW,EACjCiB,EAAS,UAAU,cAAcsB,CAAc,MAC1C,CACL,GAAM,CAACC,EAAYC,CAAS,EAAInB,GAAUtB,EAAM,aAAa,EAEvDqB,EADSJ,EAAS,UAAU,uBAAuBuB,CAAU,GAAG,MAAM,SAAS,GAC/D,SAASC,CAAS,EACxC,GAAIpB,EAAO,CACT,IAAMqB,EAAarB,GAAO,MAAM,SAAS,GAAK,IAAIsB,GAClDD,EAAW,cAAcH,CAAc,EACvClB,EAAM,MAAQqB,CAChB,CACF,CAGAzB,EAAS,gBAAiBE,GACjB,cAAcA,EAAO,IAAI,MAAM,CAAC,oDAAoDA,EAAO,KAChGnB,EAAM,WAAW,IACnB,CAAC,qDACF,CACH,CAEA,SAASM,GAAgCN,EAAmCiB,EAAkC,CAC5G,IAAM2B,EAAeC,GAAqB7C,EAAM,cAAeiB,CAAQ,EACvE,GAAI2B,EAAa,aAAe,UAAW,CACzCA,EAAa,MAAM,YAAY,EAC/B,IAAME,EAASF,EAAa,OAC5B,OAAQA,EAAa,WAAY,CAC/B,IAAK,SACHR,GAAwBU,EAAQ9C,EAAM,UAAU,EAChD,MACF,IAAK,UACH+C,GAAwBD,EAAQ9C,EAAM,UAAU,EAChD,MACF,IAAK,OACHgD,GAAuBF,EAAQ9C,EAAM,UAAU,EAC/C,KACJ,CACF,CACAiB,EAAS,gBAAiBE,GAAW,CACnC,IAAM8B,EAAQ,CAAC,iBAAiB9B,EAAO,IAAI,KAAKyB,EAAa,SAAS,IAAI,CAAC,EAAE,EAC7E,OAAIA,EAAa,aAAe,WAC9BK,EAAM,KAAK,OAAO9B,EAAO,KAAKyB,EAAa,UAAU,CAAC,YAAY,EAEpEK,EAAM,KAAK,YAAY9B,EAAO,KAAK,KAAKnB,EAAM,WAAW,IAAI,IAAI,CAAC,GAAG,EACrEiD,EAAM,KAAKvB,GAAwBP,CAAM,CAAC,EACnC8B,EAAM,KAAK,GAAG,CACvB,CAAC,CACH,CAEA,SAAS1C,GAAgCP,EAAmCiB,EAAkC,CAC5G,IAAM2B,EAAeC,GAAqB7C,EAAM,cAAeiB,CAAQ,EACnE2B,EAAa,aAAe,WAC9BA,EAAa,MAAM,MAAM,YAAY,EAGvC3B,EAAS,gBAAiBE,GACjB,uCAAuCA,EAAO,IAAIyB,EAAa,SAAS,CAAC,OAAO5C,EAAM,eAAe,EAC7G,CACH,CAEA,SAASQ,GAA0BR,EAA6BiB,EAAkC,CAChG,IAAMiC,EAAUlD,EAAM,aAAa,CAAC,EAC9BkC,EAAYjB,EAAS,UAAU,yBAAyBjB,EAAM,aAAa,GAAG,SAAS,EAEzFkC,IACFA,EAAU,SAASgB,CAAO,GAAG,YAAY,EACzCC,GAAwBjB,EAAWlC,EAAM,SAAS,GAGpDiB,EAAS,gBAAiBE,GACxBiC,GACEjC,EACA+B,EACAlD,EAAM,UAAU,IAAKqD,GAAQA,EAAI,IAAI,CACvC,CACF,CACF,CAEA,SAAS5C,GAA4BT,EAA+BiB,EAAkC,CACpG,GAAM,CAACqC,EAAeJ,CAAO,EAAI5B,GAAUtB,EAAM,YAAY,EACvDkC,EAAYjB,EAAS,UAAU,yBAAyBjB,EAAM,aAAa,GAAG,SAAS,EAE7F,GAAIkC,EAAW,CACbA,EAAU,aAAalC,EAAM,YAAY,GAAG,YAAY,EACxD,IAAMuD,EAAYrB,EAAU,kBAAkBoB,CAAa,GAAG,SAAS,EACnEC,GACFC,GAAoBD,EAAWvD,EAAM,SAAS,CAElD,CAEAiB,EAAS,gBAAiBE,GACxBiC,GACEjC,EACA+B,EACAlD,EAAM,UAAU,OAAO,IAAKyD,GAAMA,EAAE,IAAI,CAC1C,CACF,CACF,CAEA,SAASL,GAAuBjC,EAAgB+B,EAAiBQ,EAAmB,CAClF,IAAMT,EAAQ,CAAC,sBAAsB9B,EAAO,IAAI+B,CAAO,CAAC,KAAK,EACvDS,EAAaC,GAAcV,EAASQ,CAAO,EAEjD,OAAIC,GACFV,EAAM,KAAK,kBAAkB9B,EAAO,MAAMwC,CAAU,CAAC,KAAK,EAGxDD,EAAQ,OAAS,GACnBT,EAAM,KAAKvB,GAAwBP,CAAM,CAAC,EAGrC8B,EAAM,KAAK,GAAG,CACvB,CAEA,SAASvC,GAAkCV,EAAqCC,EAA8B,CAC5G,IAAI4D,EAEJ5D,EAAK,gBAAiBkB,GAChB0C,GAAe,iBAAiBC,IAAeD,EAAc,MAAM,OAAS,OACvE,cAAc1C,EAAO,MAAM4C,CAAY,CAAC,kBAAkB5C,EAAO,IAAI,MAAM,CAAC,IAE9E,cAAcA,EAAO,MAAM4C,CAAY,CAAC,gBAChD,EACD,IAAM7B,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACzF,GAAI,CAACkC,EACH,OAGF,GAAM,CAACqB,EAAWQ,CAAY,EAAIzC,GAAUtB,EAAM,YAAY,EACxDgE,EAAmB,IAAI1B,GACvBQ,EAASZ,EAAU,kBAAkBqB,CAAS,GAAG,SAAS,EAChE,GAAKT,EASL,IALAe,EAAgBf,EAAO,SAASiB,CAAY,EACxCF,GACFf,EAAO,YAAYiB,CAAY,EAG7B/D,EAAM,WAAW,SAAW,GAAKA,EAAM,WAAW,CAAC,EAAE,OAAS,SAAU,CAC1E,QAAWqB,KAASrB,EAAM,WAAW,CAAC,EAAE,OACtCgE,EAAiB,SAAS3C,EAAM,KAAMA,EAAM,UAAU,KAAK,KAAK,CAAC,EAGnEyB,EAAO,cAAc,IAAItB,GAAsBuC,EAAcC,CAAgB,EAAE,aAAa,CAAC,CAC/F,KAAO,CACL,IAAMC,EAAWjE,EAAM,WAAW,IAAIkE,EAAgB,EAAE,KAAK,KAAK,EAClEpB,EAAO,cAAc,IAAItB,GAAsBuC,EAAcE,CAAQ,EAAE,aAAa,CAAC,CACvF,CAEA,GAAIjE,EAAM,sBAAuB,CAC/BkC,EAAU,aAAalC,EAAM,qBAAqB,GAAG,YAAY,EACjE,GAAM,CAAC,CAAEmE,CAAqB,EAAI7C,GAAUtB,EAAM,qBAAqB,EACvEC,EAAK,gBAAiBkB,GACb,cAAcA,EAAO,MAAM4C,CAAY,CAAC,qCAAqC5C,EAAO,MACzFgD,CACF,CAAC,kBACF,CACH,EACF,CAEA,SAASD,GAAiBE,EAAmC,CAC3D,OAAIA,EAAY,OAAS,OAChB,GAAGF,GAAiBE,EAAY,WAAW,CAAC,KAE9CA,EAAY,IACrB,CAEA,SAASzD,GAA8BX,EAAiCC,EAA8B,CACpG,IAAMiD,EAAUlD,EAAM,SAAS,KACzBkC,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACrFkC,GACFA,EAAU,kBAAkBlC,EAAM,YAAY,GAAG,YAAY,EAG/DC,EAAK,gBAAiBkB,GAAW,CAC/B,IAAMkD,EAAWC,GACf,KACAtE,EAAM,SAAS,UAAU,IAAKuE,GAASpD,EAAO,MAAMoD,CAAI,CAAC,CAC3D,EAEA,MAAO,cAAcpD,EAAO,KAAK+B,CAAO,CAAC,wCAAwCmB,CAAQ,cAAclD,EAAO,IAC5GnB,EAAM,YACR,CAAC,GACH,CAAC,CACH,CAEA,SAASY,GAA+BZ,EAAkCC,EAA8B,CACtG,IAAMiD,EAAUlD,EAAM,SAAS,KACzBkC,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACrFkC,GACFA,EAAU,kBAAkBlC,EAAM,YAAY,GAAG,YAAY,EAG/DC,EAAK,gBAAiBkB,GAAW,CAC/B,IAAM8B,EAAQ,CAAC,gCAAgC9B,EAAO,KAAK+B,CAAO,CAAC,IAAI,EAKvE,GAJIlD,EAAM,iBACRiD,EAAM,KAAK,KAAKjD,EAAM,eAAe,EAAE,EAEzCiD,EAAM,KAAK,GAAG,EACVjD,EAAM,SAAS,UAAU,OAAS,EAAG,CACvC,IAAMqE,EAAWC,GACf,KACAtE,EAAM,SAAS,UAAU,IAAKuE,GAASpD,EAAO,MAAMoD,CAAI,CAAC,CAC3D,EACAtB,EAAM,KAAK,aAAaoB,CAAQ,GAAG,CACrC,CACA,OAAOpB,EAAM,KAAK,EAAE,CACtB,CAAC,CACH,CAEA,SAASpC,GAAwBb,EAA2BC,EAA8B,CACxF,IAAMiD,EAAUlD,EAAM,SAAS,KACzBkC,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACrFwE,EACJ,GAAItC,EAAW,CAEb,IAAMuC,EADQvC,EAAU,aAAalC,EAAM,YAAY,GAClC,MACrByE,GAAO,YAAY,EACfA,aAAiBX,KACnBU,EAAeC,EAAM,KAEzB,CAEAxE,EAAK,gBAAiBkB,GAAW,CAC/B,IAAM8B,EAAkB,CAAC,qBAAqB,EAC9C,OAAIuB,GACFvB,EAAM,KAAK9B,EAAO,IAAIqD,CAAY,CAAC,EAErCvB,EAAM,KAAK,4CAA4C9B,EAAO,KAAK+B,CAAO,CAAC,IAAI,EAExED,EAAM,KAAK,GAAG,CACvB,CAAC,CACH,CAEA,SAASnC,GAA4Bd,EAA+BC,EAA8B,CAChG,IAAM8D,EAAe/D,EAAM,aAAaA,EAAM,aAAa,OAAS,CAAC,EAC/DkC,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACzF,GAAIkC,EAAW,CACb,IAAMwC,EAAWxC,EAAU,kBAAkBlC,EAAM,YAAY,GAAG,SAAS,EACvE0E,GACFlB,GAAoBkB,EAAU1E,EAAM,SAAS,CAEjD,CAEAC,EAAK,gBAAiBkB,GAAW,CAC/B,IAAM8B,EAAQ,CAAC,cAAc9B,EAAO,KAAK4C,CAAY,CAAC,cAAc5C,EAAO,KAAKnB,EAAM,UAAU,IAAI,CAAC,QAAQ,EAC7G,OAAIA,EAAM,YAAY,gBAAkB,EAClCA,EAAM,YAAY,eACpBiD,EAAM,KACJ,GAAG9B,EAAO,MAAM,iBAAiB,CAAC,IAAImD,GACpC,KACAtE,EAAM,YAAY,eAAe,IAAKyD,GAAM,KAAKtC,EAAO,KAAKsC,CAAC,CAAC,IAAI,CACrE,CAAC,aACH,EAEAR,EAAM,KAAK,GAAG9B,EAAO,MAAM,cAAc,CAAC,YAAY,EAGxD8B,EAAM,KAAK,GAAG9B,EAAO,MAAM,YAAYnB,EAAM,YAAY,aAAa,EAAE,CAAC,aAAa,EAExFiD,EAAM,KAAKvB,GAAwBP,CAAM,CAAC,EACnC8B,EAAM,KAAK,GAAG,CACvB,CAAC,CACH,CAEA,SAASlC,GAA6Bf,EAAgCC,EAA8B,CAClG,IAAM8D,EAAe/D,EAAM,aAAaA,EAAM,aAAa,OAAS,CAAC,EAC/DkC,EAAYjC,EAAK,UAAU,yBAAyBD,EAAM,aAAa,GAAG,SAAS,EACrF2E,EAA8B,CAAC,EACnC,GAAIzC,EAAW,CACb,IAAMwC,EAAWxC,EAAU,kBAAkBlC,EAAM,YAAY,GAAG,SAAS,EACvE0E,IACFA,EAAS,YAAY,EACrBC,EAAoB,OAAO,KAAKD,EAAS,UAAU,CAAC,EAExD,CAEAzE,EAAK,gBAAiBkB,GAAW,CAC/B,IAAM8B,EAAQ,CAAC,cAAc9B,EAAO,KAAK4C,CAAY,CAAC,cAAc5C,EAAO,KAAKnB,EAAM,UAAU,IAAI,CAAC,QAAQ,EAC7G,OAAIA,EAAM,YAAY,gBAAkB,GAAKA,EAAM,YAAY,eAAiB,EAC9EiD,EAAM,KAAK,GAAG9B,EAAO,MAAM,aAAa,CAAC,YAAY,EAC5CnB,EAAM,YAAY,eAAiB,EAC5CiD,EAAM,KAAK,GAAG9B,EAAO,MAAM,aAAa,CAAC,YAAY,EAErD8B,EAAM,KAAK,GAAG9B,EAAO,MAAM,WAAWnB,EAAM,YAAY,aAAa,EAAE,CAAC,aAAa,EAGvFiD,EAAM,KACJ,oBAAoBqB,GAClB,MACAK,EAAkB,IAAKtB,GAAQlC,EAAO,IAAIkC,CAAG,CAAC,CAChD,CAAC,iBACH,EAEIrD,EAAM,YAAY,gBAAkB,EACtCiD,EAAM,KAAK,MAAM,EAEjBA,EAAM,KAAK,GAAGjD,EAAM,YAAY,aAAa,GAAG,EAG3CiD,EAAM,KAAK,GAAG,CACvB,CAAC,CACH,CAEA,SAASb,GAAwBF,EAAwBX,EAAmC,CAC1F,QAAWF,KAASE,EAAW,OACxBW,EAAU,SAASb,EAAM,IAAI,GAChCa,EAAU,cAAc,IAAIV,GAAsBH,EAAM,KAAM,MAAM,CAAC,CAG3E,CAEA,SAAS0B,GAAwBb,EAAwBX,EAAmC,CAC1F,QAAWF,KAASE,EAAW,OACzBF,EAAM,YAAc,CAACa,EAAU,SAASb,EAAM,IAAI,GACpDa,EAAU,cAAc,IAAIV,GAAsBH,EAAM,KAAM,MAAM,CAAC,CAG3E,CAEA,SAAS2B,GAAuBd,EAAwBX,EAAmC,CACzF,QAAWF,KAASE,EAAW,OACzB,CAACW,EAAU,SAASb,EAAM,IAAI,GAAK,CAACA,EAAM,YAC5Ca,EAAU,cAAc,IAAIV,GAAsBH,EAAM,KAAM,MAAM,CAAC,CAG3E,CAEA,SAAS8B,GAAwByB,EAA8B3E,EAA6B,CAC1F,QAAWoD,KAAOpD,EACX2E,EAAgB,SAASvB,EAAI,IAAI,GACpCuB,EAAgB,cAAc,IAAIpD,GAAsB6B,EAAI,KAAMA,EAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAGlG,CAEA,SAASR,GAAqBzB,EAAyBH,EAAkC,CACvF,GAAM,CAACuB,EAAYC,CAAS,EAAInB,GAAUF,CAAa,EAEjDO,EAAeV,EAAS,UAAU,yBAAyBuB,CAAU,GAAG,SAAS,EACvF,GAAI,CAACb,EACH,MAAO,CAAE,WAAY,UAAoB,UAAAc,CAAU,EAErD,IAAMoC,EAASlD,EAAa,cAAc,QAAQ,GAAG,SAAS,EACxDmD,EAAUnD,EAAa,cAAc,SAAS,GAAG,SAAS,EAC1DC,EAAOD,EAAa,cAAc,MAAM,GAAG,SAAS,EACtDN,EAAQwD,GAAQ,SAASpC,CAAS,EACtC,OAAIoC,GAAUxD,EACL,CAAE,WAAY,SAAmB,OAAQwD,EAAQ,MAAAxD,EAAO,UAAAoB,CAAU,GAE3EpB,EAAQyD,GAAS,SAASrC,CAAS,EAC/BqC,GAAWzD,EACN,CAAE,WAAY,UAAoB,MAAAA,EAAO,OAAQyD,EAAS,UAAArC,CAAU,GAG7EpB,EAAQO,GAAM,SAASa,CAAS,EAC5Bb,GAAQP,EACH,CAAE,WAAY,OAAiB,MAAAA,EAAO,OAAQO,EAAM,UAAAa,CAAU,EAEhE,CAAE,WAAY,UAAoB,UAAAA,CAAU,GACrD,CAEA,SAASe,GAAoBV,EAAqBiC,EAAiC,CACjF,GAAIA,EAAU,OAAS,SAIvB,QAAW1D,KAAS0D,EAAU,OACvBjC,EAAO,SAASzB,EAAM,IAAI,GAC7ByB,EAAO,cAAc,IAAItB,GAAsBH,EAAM,KAAMA,EAAM,UAAU,KAAK,KAAK,CAAC,CAAC,CAG7F,CAEA,SAASC,GAAU0D,EAA2D,CAC5E,IAAM5D,EAAgB,CAAC,GAAG4D,CAAI,EACxBvC,EAAYrB,EAAc,IAAI,EACpC,GAAI,CAACqB,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,MAAO,CAACrB,EAAeqB,CAAS,CAClC,CAEA,SAASf,GAAwB,CAAE,MAAAuD,EAAO,QAAAC,CAAQ,EAAW,CAC3D,MAAO,0BAA4BA,EAAU,aAAaD,EAAM,OAAO,CAAC,GAAK,iBAAmB,GAClG,CAEA,SAASX,GAAoBa,EAA2BC,EAAyB,CAC/E,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhB,IAAMC,EAAY,CAAC,GAAGD,CAAK,EACrBE,EAAWD,EAAU,IAAI,EAC/B,MAAO,GAAGA,EAAU,KAAK,IAAI,CAAC,IAAIF,CAAW,IAAIG,CAAQ,EAC3D,CAKA,IAAMC,GAAoB,EAE1B,SAAS3B,GAAc4B,EAAa9B,EAAuC,CACzE,IAAI+B,EAAc,IACdC,EAEJ,QAAWC,KAAUjC,EAAS,CAC5B,IAAMkC,KAAe,GAAAC,SAAYL,EAAKG,CAAM,EACxCC,EAAeL,IAGfK,EAAeH,IACjBA,EAAcG,EACdF,EAASC,EAEb,CACA,OAAOD,CACT,CaxpBO,IAAMI,GAAN,KAA2E,CAChE,UACA,KACA,SACA,OACA,OAEhB,YAAYC,EAAkBC,EAAcC,EAAsBC,EAAiBC,EAAiB,CAClG,KAAK,UAAYJ,EACjB,KAAK,KAAOC,EACZ,KAAK,SAAWC,EAChB,KAAK,OAASC,EACd,KAAK,OAASC,CAChB,CAEA,qBAAsB,CACpB,IAAMC,EAAa,KAAK,OAAS,OAAS,GACpCC,EAAa,KAAK,OAAS,OAAS,GAE1C,MAAO,GAAGD,CAAU,GAAGC,CAAU,GAAG,KAAK,QAAQ,iBAAiB,KAAK,SAAS,GAClF,CACF,EAEO,SAASC,GAAWC,EAAoD,CAC7E,OAAOA,aAAiBT,EAC1B,CCvBA,IAAMU,GAAS,OAAO,EAUhBC,GAAkB,IAAI,QAKNC,GAAf,KAA+B,CACpC,YAAYC,EAAc,CACpBA,IAAQH,GACVC,GAAgB,IAAI,KAAM,UAAU,KAAK,SAAS,CAAC,EAAE,EAErDA,GAAgB,IAAI,KAAM,cAAc,KAAK,cAAc,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAEvF,CAIA,UAAW,CACT,OAAO,KAAK,YAAY,IAC1B,CAEA,UAAW,CACT,OAAOA,GAAgB,IAAI,IAAI,CACjC,CACF,EAEMG,GAAN,cAAiCF,EAAgB,CACtC,eAAgB,CACvB,MAAO,WACT,CACF,EAEMG,GAAN,cAAqBD,EAAmB,CAG7BE,EACX,EACAC,GAAaF,GAAQ,QAAQ,EAE7B,IAAMG,GAAN,cAAuBJ,EAAmB,CAG/BK,EACX,EACAF,GAAaC,GAAU,UAAU,EAEjC,IAAME,GAAN,cAAsBN,EAAmB,CAG9BO,EACX,EACAJ,GAAaG,GAAS,SAAS,EAExB,IAAME,GAAmB,CAC9B,QAAS,CACP,OAAAP,GACA,SAAAG,GACA,QAAAE,EACF,EACA,UAAW,CACT,OAAQ,IAAIL,GAAOL,EAAM,EACzB,SAAU,IAAIQ,GAASR,EAAM,EAC7B,QAAS,IAAIU,GAAQV,EAAM,CAC7B,CACF,EASA,SAASO,GAAaM,EAAuBC,EAAc,CACzD,OAAO,eAAeD,EAAa,OAAQ,CACzC,MAAOC,EACP,aAAc,EAChB,CAAC,CACH,CCtFA,IAAMC,GAAY,KACLC,GAAN,KAAsD,CAE3D,YACWC,EACFC,EACP,CAFS,UAAAD,EACF,WAAAC,CACN,CAJH,SAAW,GAMX,aAAc,CACZ,KAAK,SAAW,EAClB,CAEA,eAAgB,CACd,OAAO,KAAK,KAAK,OAAS,KAAK,MAAM,cAAc,EAAIH,GAAU,MACnE,CAEA,MAAMI,EAA2B,CAC/B,IAAMF,EAAO,IAAIG,GAAgB,KAAK,IAAI,EACtC,KAAK,UACPH,EAAK,UAAU,EAAE,SAASE,EAAO,QAAQ,OAAO,GAAG,EAErDA,EAAO,MAAMF,CAAI,EAAE,MAAMF,EAAS,EAAE,MAAM,KAAK,KAAK,CACtD,CACF,ECZO,IAAMM,GAAN,KAA0D,CACtD,UACD,cAAiC,CAAC,EAE1C,YAAYC,EAAmB,CAC7B,KAAK,UAAYA,CACnB,CAEA,MAAMC,EAA2B,CAC/BA,EAAO,MAAM,KAAK,SAAS,CAC7B,CAEA,gBAAgBC,EAAyB,CACvC,KAAK,cAAc,KAAKA,CAAQ,CAClC,CAEA,kBAAkBC,EAAwB,CACxC,OAAO,KAAK,cAAc,IAAKC,GAAoBA,EAAgBD,CAAM,CAAC,EAAE,KAAK;AAAA,CAAI,CACvF,CACF,EAWO,SAASE,GAA4BL,EAA4D,CACtG,OAAO,IAAID,GAAuBO,GAAiBN,CAAI,CAAC,CAC1D,CAEA,SAASM,GAAiBC,EAA2C,CACnE,IAAMC,EAAS,IAAIC,GAEnB,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQJ,CAAW,EAAG,CACtD,IAAMK,EAAQ,IAAIC,GAAYH,EAAKI,GAAgBH,CAAK,CAAC,EACzDH,EAAO,SAASI,CAAK,CACvB,CACA,OAAOJ,CACT,CAEA,SAASM,GAAgBH,EAAgB,CACvC,GAAI,OAAOA,GAAU,SACnB,OAAO,IAAII,GAAY,KAAK,UAAUJ,CAAK,CAAC,EAG9C,GAAI,OAAOA,GAAU,UAAY,OAAOA,GAAU,UAChD,OAAO,IAAII,GAAY,OAAOJ,CAAK,CAAC,EAGtC,GAAI,OAAOA,GAAU,SACnB,OAAO,IAAII,GAAY,GAAGJ,CAAK,GAAG,EAGpC,GAAIA,IAAU,KACZ,OAAO,IAAII,GAAY,MAAM,EAG/B,GAAIJ,IAAU,OACZ,OAAO,IAAII,GAAY,WAAW,EAGpC,GAAIC,GAAgBL,CAAK,EACvB,OAAO,IAAII,GAAY,uBAAuBJ,EAAM,QAAQ,CAAC,IAAI,EAGnE,GAAIA,aAAiB,WACnB,OAAI,OAAO,SAASA,CAAK,EAChB,IAAII,GAAY,gBAAgBJ,EAAM,UAAU,GAAG,EAErD,IAAII,GAAY,kBAAkBJ,EAAM,UAAU,GAAG,EAG9D,GAAIA,aAAiB,KAAM,CACzB,IAAMM,EAAUC,GAAYP,CAAK,EAAIA,EAAM,YAAY,EAAI,eAC3D,OAAO,IAAII,GAAY,aAAaE,CAAO,IAAI,CACjD,CAEA,OAAIN,aAAiBQ,GACZ,IAAIJ,GAAY,UAAUJ,EAAM,SAAS,CAAC,EAAE,EAGjDS,GAAWT,CAAK,EACX,IAAII,GAAY,UAAUM,GAAaV,EAAM,SAAS,CAAC,YAAYA,EAAM,IAAI,EAAE,EAGpF,MAAM,QAAQA,CAAK,EACdW,GAAgBX,CAAK,EAG1B,OAAOA,GAAU,SACZL,GAAiBK,CAAqC,EAGxD,IAAII,GAAY,OAAO,UAAU,SAAS,KAAKJ,CAAK,CAAC,CAC9D,CAEA,SAASW,GAAgBC,EAAkB,CACzC,IAAMC,EAAS,IAAIC,GACnB,QAAWC,KAAQH,EACjBC,EAAO,QAAQV,GAAgBY,CAAI,CAAC,EAEtC,OAAOF,CACT,CAEO,SAASG,GAAeC,EAAkCC,EAA0B,CACzF,IAAM1B,EAAS0B,IAAgB,SAAWC,GAAeC,GAEnDC,EAAUJ,EAAS,kBAAkBzB,CAAM,EAC3CH,EAAO,IAAIiC,GAAO,EAAG,CAAE,OAAA9B,CAAO,CAAC,EAAE,MAAMyB,CAAQ,EAAE,SAAS,EAEhE,MAAO,CAAE,QAAAI,EAAS,KAAAhC,CAAK,CACzB,CC/GO,SAASkC,GAAyB,CACvC,KAAAC,EACA,OAAAC,EACA,YAAAC,EACA,SAAAC,EACA,eAAAC,EACA,cAAAC,EACA,WAAAC,CACF,EAA2B,CACzB,IAAMC,EAAWC,GAA4BR,CAAI,EACjD,QAAWS,KAASR,EAClBS,GAAqBD,EAAOF,EAAUD,CAAU,EAGlD,GAAM,CAAE,QAAAK,EAAS,KAAMC,CAAa,EAAIC,GAAeN,EAAUL,CAAW,EAEtEY,EAAqBC,GAA8B,CACvD,QAAAJ,EACA,SAAAR,EACA,eAAAC,EACA,WAAYF,IAAgB,SAC5B,cAAeU,CACjB,CAAC,EAED,MAAM,IAAII,GAA4BF,EAAoB,CAAE,cAAAT,CAAc,CAAC,CAC7E,CCxCO,SAASY,GAAkBC,EAAc,CAC9C,OAAOA,EAAK,QAAQ,KAAOC,GAAQA,EAAI,YAAY,CAAC,CACtD,CC2BO,SAASC,GACdC,EACAC,EACAC,EACA,CACA,IAAMC,EAASC,GAAkBF,CAAa,EAC9C,MAAI,CAACD,EAAU,QAAU,EAAEA,EAAU,OAAO,YAAcA,EAAU,OAAOE,CAAM,GACxEH,EAGFK,GAAoB,CACzB,GAAGL,EACH,GAAGM,GAA2BL,EAAU,KAAMD,EAAwBC,EAAU,OAAO,UAAU,EACjG,GAAGK,GAA2BL,EAAU,KAAMD,EAAwBC,EAAU,OAAOE,CAAM,CAAC,CAChG,CAAC,CACH,CAEO,SAASE,GAAoBE,EAAsD,CACxF,IAAMC,EAAQ,IAAIC,GACZC,EAAe,CAACC,EAAmBC,IAChCJ,EAAM,YAAYG,EAAW,IAC9BC,EAAc,IAAID,CAAS,EACtB,CAACA,CAAS,GAEnBC,EAAc,IAAID,CAAS,EACtBJ,EAAeI,CAAS,EAGtBJ,EAAeI,CAAS,EAAE,MAAM,QAASE,GAAaH,EAAaG,EAAUD,CAAa,CAAC,EAFzF,CAACD,CAAS,EAGpB,EAGH,OAAOG,GAAgBP,EAAiBQ,IAC/B,CACL,GAAGA,EACH,MAAOL,EAAaK,EAAM,KAAM,IAAI,GAAK,CAC3C,EACD,CACH,CAEA,SAAST,GACPU,EACAhB,EACAiB,EACmB,CACnB,OAAKA,EAIEH,GAAgBG,EAAa,CAAC,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAGR,KAAe,CACtE,KAAMA,EACN,MAAOO,EAAQ,OAAO,KAAKA,CAAK,EAAE,OAAQE,GAAQF,EAAME,CAAG,CAAC,EAAI,CAAC,EACjE,QAASC,GAAerB,EAAwBW,EAAWQ,CAAO,CACpE,EAAE,EAPO,CAAC,CAQZ,CAEA,SAASE,GACPrB,EACAW,EACAW,EACwB,CACxB,IAAMC,EAAkBvB,IAAyBW,CAAS,GAAG,QAC7D,OAAKY,EAGGC,GACCF,EAAY,CAAE,GAAGE,EAAO,CAACb,CAAS,EAAGY,EAAgBC,CAAK,CAAE,CAAC,EAH7DF,CAKX,CAEO,SAASG,GACdC,EACAnB,EACW,CACX,GAAI,CAACA,EACH,OAAOmB,EAET,IAAMC,EAAS,CAAE,GAAGD,CAAU,EAE9B,QAAWX,KAAS,OAAO,OAAOR,CAAc,EAC9C,GAAKmB,EAAUX,EAAM,IAAI,EAIzB,QAAWa,KAAcb,EAAM,MAC7BY,EAAOC,CAAU,EAAI,GAGzB,OAAOD,CACT,CAuCO,SAASE,GACdC,EACAvB,EACU,CACV,GAAI,CAACA,EACH,OAAOuB,EAET,IAAMH,EAAS,CAAE,GAAGG,CAAS,EAE7B,QAAWf,KAAS,OAAO,OAAOR,CAAc,EAC9C,GAAI,CAAAuB,EAASf,EAAM,IAAI,EAIvB,QAAWa,KAAcb,EAAM,MAC7B,OAAOY,EAAOC,CAAU,EAG5B,OAAOD,CACT,CC9KA,IAAMI,GAAN,KAA+B,CAyB7B,YACSC,EACAC,EACP,CAFO,eAAAD,EACA,cAAAC,CACN,CA3BK,oBAAsB,IAAIC,GAC1B,qBAAuB,IAAIA,GAC3B,oBAAsB,IAAIA,GAE1B,iBAAmBC,GAAa,IACjC,KAAK,UAAU,OAIb,CACL,GAAG,KAAK,UAAU,uBAAuB,EACzC,GAAG,KAAK,UAAU,MACpB,EANS,KAAK,UAAU,uBAAuB,CAOhD,EAEO,eAAiBA,GAAa,IAAM,CAC1C,IAAMF,EAAkC,KAAK,UAAU,0BAA0B,GAAK,CAAC,EACjFG,EAAS,KAAK,UAAkC,OAAO,iBAC7D,OAAKA,EAGEH,EAAS,OAAOG,CAAK,EAFnBH,CAGX,CAAC,EAOD,qBAAqBI,EAAsD,CACzE,OAAO,KAAK,oBAAoB,YAAYA,EAAe,IAClDC,GAAkB,KAAK,UAAU,qBAAqBD,CAAa,EAAG,KAAK,UAAWA,CAAa,CAC3G,CACH,CAEA,wBAAgD,CAC9C,OAAO,KAAK,iBAAiB,IAAI,CACnC,CAEA,sBAAsBA,EAA6C,CACjE,OAAO,KAAK,qBAAqB,YAAYA,EAAe,IAAM,CAChE,IAAME,EAAcC,GAAkBH,CAAa,EACnD,MAAI,CAAC,KAAK,UAAU,OAAS,EAAE,KAAK,UAAU,MAAME,CAAW,GAAK,KAAK,UAAU,MAAM,YAChF,KAAK,UAAU,sBAAsBF,CAAa,EAGpD,CACL,GAAG,KAAK,UAAU,sBAAsBA,CAAa,EACrD,GAAG,KAAK,UAAU,MAAM,WACxB,GAAG,KAAK,UAAU,MAAME,CAAW,CACrC,CACF,CAAC,CACH,CAGA,qBAAqBA,EAA+BE,EAAmB,CACrE,OAAO,KAAK,oBAAoB,YAAY,GAAGF,CAAW,IAAIE,CAAS,GAAI,IAAM,CAC/E,IAAMC,EAAU,KAAK,UAAU,qBAAqBH,EAAaE,CAAS,GAAK,CAAC,EAC1EE,EAA2B,CAAC,EAC5BC,EAAQ,KAAK,UAAU,MAE7B,MAAI,CAACA,GAAS,EAAEA,EAAML,CAAW,GAAKK,EAAM,YAAiBA,EAAMH,CAAS,GAAKG,EAAM,gBAC9EF,GAGLE,EAAML,CAAW,IAAM,SACrBK,EAAML,CAAW,EAAEE,CAAS,IAAM,QACpCE,EAAO,KAAKC,EAAML,CAAW,EAAEE,CAAS,CAAC,EAIvCG,EAAML,CAAW,EAAE,iBAAsB,QAC3CI,EAAO,KAAKC,EAAML,CAAW,EAAE,cAAiB,GAMhDA,IAAgB,SAAWK,EAAM,aAAkB,SACjDA,EAAM,WAAcH,CAAS,IAAM,QACrCE,EAAO,KAAKC,EAAM,WAAcH,CAAS,CAAC,EAIxCG,EAAM,WAAc,iBAAsB,QAC5CD,EAAO,KAAKC,EAAM,WAAc,cAAiB,GAKjDA,EAAMH,CAAS,IAAM,QACvBE,EAAO,KAAKC,EAAMH,CAAS,CAAmB,EAI5CG,EAAM,iBAAsB,QAC9BD,EAAO,KAAKC,EAAM,cAAmC,EAGhDF,EAAQ,OAAOC,CAAM,EAC9B,CAAC,CACH,CAEA,2BAA4B,CAC1B,OAAO,KAAK,eAAe,IAAI,CACjC,CACF,EAYaE,GAAN,MAAMC,CAAqB,CACxB,YAAoBC,EAAiC,CAAjC,UAAAA,CAAkC,CAE9D,OAAO,OAAQ,CACb,OAAO,IAAID,CACb,CAEA,OAAO,OAAOd,EAA0B,CACtC,OAAO,IAAIc,EAAqB,IAAIf,GAAyBC,CAAS,CAAC,CACzE,CAEA,SAAmB,CACjB,OAAO,KAAK,OAAS,MACvB,CAEA,OAAOA,EAA0B,CAC/B,OAAO,IAAIc,EAAqB,IAAIf,GAAyBC,EAAW,KAAK,IAAI,CAAC,CACpF,CAEA,qBAAqBK,EAAsD,CACzE,OAAO,KAAK,MAAM,qBAAqBA,CAAa,CACtD,CAEA,wBAAyB,CACvB,OAAO,KAAK,MAAM,uBAAuB,CAC3C,CAEA,sBAAsBA,EAAuB,CAC3C,OAAO,KAAK,MAAM,sBAAsBA,CAAa,CACvD,CAEA,qBAAqBE,EAAqBE,EAAmB,CAC3D,OAAO,KAAK,MAAM,qBAAqBF,EAAaE,CAAS,GAAK,CAAC,CACrE,CAEA,2BAA4B,CAC1B,OAAO,KAAK,MAAM,0BAA0B,GAAK,CAAC,CACpD,CACF,EClKO,IAAMO,GAAN,KAAwE,CAC7E,YAA4BC,EAAY,CAAZ,UAAAA,CAAa,CAC3C,EAEO,SAASC,GAAQC,EAAiD,CACvE,OAAOA,aAAiBH,EAC1B,CAEO,SAASI,GAAYH,EAAsC,CAChE,OAAO,IAAID,GAAUC,CAAI,CAC3B,CCXA,IAAMI,GAAS,OAAO,EAETC,GAAN,KAAW,CAChB,YAAYC,EAAgB,CAC1B,GAAIA,IAAUF,GACZ,MAAM,IAAI,MAAM,+CAA+C,CAEnE,CAEA,YAAeG,EAAgC,CAC7C,OAAIA,IAAU,OACLC,GAEFD,CACT,CACF,EAEaC,GAAO,IAAIH,GAAKD,EAAM,EAE5B,SAASK,GAAOF,EAA+B,CACpD,OAAOA,aAAiBF,EAC1B,CCYA,IAAMK,GAA4D,CAChE,WAAY,aACZ,kBAAmB,oBACnB,UAAW,YACX,iBAAkB,mBAClB,SAAU,WACV,MAAO,YACP,OAAQ,YACR,WAAY,aACZ,oBAAqB,sBACrB,OAAQ,YACR,WAAY,aACZ,oBAAqB,sBACrB,OAAQ,YACR,OAAQ,YACR,WAAY,aACZ,WAAY,aACZ,SAAU,WACV,UAAW,YACX,QAAS,UACT,cAAe,gBACf,QAAS,UACT,aAAc,cAChB,EAsBMC,GAAiC,gDAEhC,SAASC,GAAmB,CACjC,UAAAC,EACA,OAAAC,EACA,KAAAC,EACA,iBAAAC,EACA,WAAAC,EAAaC,GAAqB,MAAM,EACxC,SAAAC,EACA,aAAAC,EACA,YAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,WAAAC,CACF,EAA+B,CAC7B,IAAMC,EAAU,IAAIC,GAAiB,CACnC,iBAAAV,EACA,UAAAH,EACA,OAAAC,EACA,SAAUC,EACV,SAAAI,EACA,WAAAF,EACA,cAAe,CAAC,EAChB,aAAc,CAAC,EACf,eAAgBG,EAChB,YAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,WAAAC,CACF,CAAC,EACD,MAAO,CACL,UAAAX,EACA,OAAQH,GAAyBI,CAAM,EACvC,MAAOa,GAAwBZ,EAAMU,CAAO,CAC9C,CACF,CAEA,SAASE,GACP,CAAE,OAAAC,EAAQ,QAAAC,EAAS,GAAGd,CAAK,EAAY,CAAC,EACxCU,EACoB,CACpB,IAAMK,EAAOf,EAAK,KAClB,cAAOA,EAAK,KACL,CACL,UAAWgB,GAAyBhB,EAAMU,CAAO,EACjD,UAAWO,GAAsBJ,EAAQC,EAASC,EAAML,CAAO,CACjE,CACF,CAEA,SAASO,GACPJ,EACAC,EACAC,EACAL,EACkB,CAClB,OAAIG,GACEC,EACFJ,EAAQ,qBAAqB,CAC3B,KAAM,0BACN,WAAY,UACZ,YAAa,SACb,cAAeA,EAAQ,iBAAiB,CAC1C,CAAC,EACQK,GACTL,EAAQ,qBAAqB,CAC3B,KAAM,0BACN,WAAY,OACZ,YAAa,SACb,cAAeA,EAAQ,iBAAiB,CAC1C,CAAC,EAEIQ,GAAwBL,EAAQH,CAAO,GAGzCS,GAAwBT,EAASI,EAASC,CAAI,CACvD,CAEA,SAASI,GACPT,EACAI,EACAC,EACA,CACA,IAAMK,EAAiC,CAAC,EAExC,OAAIV,EAAQ,aAAe,CAACA,EAAQ,YAAY,IAC9CU,EAAa,YAAc,GAC3BA,EAAa,SAAW,IAGtBN,GACFO,GAAqBD,EAAcN,EAASJ,CAAO,EAGrDY,GAAWF,EAAcL,EAAML,CAAO,EAE/BU,CACT,CAEA,SAASC,GAAqBD,EAAgCN,EAAoBJ,EAA2B,CAC3G,OAAW,CAACa,EAAKC,CAAK,IAAK,OAAO,QAAQV,CAAO,EAAG,CAClD,GAAIW,GAAOD,CAAK,EACd,SAEF,IAAME,EAAgBhB,EAAQ,cAAca,CAAG,EAE/C,GADAI,GAA8BH,EAAOE,CAAa,EAC9CF,IAAU,IAASA,IAAU,OAAW,CAC1CJ,EAAaG,CAAG,EAAI,GACpB,QACF,CAEA,IAAMK,EAAQlB,EAAQ,UAAUa,CAAG,EAQnC,GAPIK,GAASA,EAAM,OAAS,UAC1BlB,EAAQ,qBAAqB,CAC3B,KAAM,kBACN,cAAeA,EAAQ,iBAAiB,EAAE,OAAOa,CAAG,EACpD,WAAYb,EAAQ,yBAAyB,CAC/C,CAAC,EAECkB,EAAO,CACTR,EAAaG,CAAG,EAAIX,GAAwBY,IAAU,GAAO,CAAC,EAAIA,EAAOE,CAAa,EACtF,QACF,CAEA,GAAIF,IAAU,GAAM,CAClBJ,EAAaG,CAAG,EAAI,GACpB,QACF,CAMAH,EAAaG,CAAG,EAAIX,GAAwBY,EAAOE,CAAa,CAClE,CACF,CAEA,SAASJ,GAAWF,EAAgCS,EAAiCnB,EAA2B,CAC9G,IAAMoB,EAAiBpB,EAAQ,kBAAkB,EAC3CqB,EAAgB,CAAE,GAAGrB,EAAQ,cAAc,EAAG,GAAGmB,CAAU,EAC3DG,EAAyBC,GAA2BF,EAAeD,CAAc,EACvF,OAAW,CAACP,EAAKC,CAAK,IAAK,OAAO,QAAQQ,CAAsB,EAAG,CACjE,GAAIP,GAAOD,CAAK,EACd,SAEFG,GAA8BH,EAAOd,EAAQ,cAAca,CAAG,CAAC,EAC/D,IAAMK,EAAQlB,EAAQ,UAAUa,CAAG,EAC/BO,IAAiBP,CAAG,GAAK,CAACK,IAG9BR,EAAaG,CAAG,EAAI,CAACC,EACvB,CACF,CAEA,SAASN,GAAwBL,EAAmBH,EAA2B,CAC7E,IAAMU,EAAiC,CAAC,EAClCU,EAAiBpB,EAAQ,kBAAkB,EAC3CwB,EAA2BC,GAA2BtB,EAAQiB,CAAc,EAElF,OAAW,CAACP,EAAKC,CAAK,IAAK,OAAO,QAAQU,CAAwB,EAAG,CACnE,GAAIT,GAAOD,CAAK,EACd,SAEF,IAAME,EAAgBhB,EAAQ,cAAca,CAAG,EAC/CI,GAA8BH,EAAOE,CAAa,EAClD,IAAME,EAAQlB,EAAQ,UAAUa,CAAG,EACnC,GAAI,EAAAO,IAAiBP,CAAG,GAAK,CAACK,GAG9B,IAAIJ,IAAU,IAASA,IAAU,QAAaC,GAAOD,CAAK,EAAG,CAC3DJ,EAAaG,CAAG,EAAI,GACpB,QACF,CACA,GAAIC,IAAU,GAAM,CACdI,GAAO,OAAS,SAClBR,EAAaG,CAAG,EAAIX,GAAwB,CAAC,EAAGc,CAAa,EAE7DN,EAAaG,CAAG,EAAI,GAEtB,QACF,CACAH,EAAaG,CAAG,EAAIX,GAAwBY,EAAOE,CAAa,EAClE,CACA,OAAON,CACT,CAEA,SAASgB,GACPC,EACA3B,EACmB,CACnB,GAAI2B,IAAY,KACd,OAAO,KAGT,GAAI,OAAOA,GAAY,UAAY,OAAOA,GAAY,UAAY,OAAOA,GAAY,UACnF,OAAOA,EAGT,GAAI,OAAOA,GAAY,SACrB,MAAO,CAAE,MAAO,SAAU,MAAO,OAAOA,CAAO,CAAE,EAGnD,GAAIC,GAAOD,CAAO,EAAG,CACnB,GAAIE,GAAYF,CAAO,EACrB,MAAO,CAAE,MAAO,WAAY,MAAOA,EAAQ,YAAY,CAAE,EAEzD3B,EAAQ,qBAAqB,CAC3B,KAAM,uBACN,cAAeA,EAAQ,iBAAiB,EACxC,aAAcA,EAAQ,gBAAgB,EACtC,SAAU,CACR,KAAMA,EAAQ,gBAAgB,EAC9B,UAAW,CAAC,MAAM,CACpB,EACA,gBAAiB,iCACnB,CAAC,CAEL,CAEA,GAAI8B,GAAQH,CAAO,EACjB,MAAO,CAAE,MAAO,QAAS,MAAOA,EAAQ,IAAK,EAG/C,GAAII,GAAWJ,CAAO,EACpB,MAAO,CAAE,MAAO,WAAY,MAAO,CAAE,KAAMA,EAAQ,KAAM,WAAYA,EAAQ,SAAU,CAAE,EAG3F,GAAI,MAAM,QAAQA,CAAO,EACvB,OAAOK,GAAwBL,EAAS3B,CAAO,EAGjD,GAAI,YAAY,OAAO2B,CAAO,EAAG,CAC/B,GAAM,CAAE,OAAAM,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAIR,EAC3C,MAAO,CAAE,MAAO,QAAS,MAAO,OAAO,KAAKM,EAAQC,EAAYC,CAAU,EAAE,SAAS,QAAQ,CAAE,CACjG,CAEA,GAAIC,GAAgBT,CAAO,EACzB,OAAOA,EAAQ,OAGjB,GAAIU,GAAgBV,CAAO,EACzB,MAAO,CAAE,MAAO,UAAW,MAAOA,EAAQ,QAAQ,CAAE,EAGtD,GAAIA,aAAmBW,GAAiB,CACtC,GAAIX,IAAYY,GAAiB,UAAUZ,EAAQ,SAAS,CAAC,EAC3D,MAAM,IAAI,MAAM,yBAAyB,EAE3C,MAAO,CAAE,MAAO,OAAQ,MAAOA,EAAQ,SAAS,CAAE,CACpD,CAEA,GAAIa,GAAkBb,CAAO,EAC3B,OAAOA,EAAQ,OAAO,EAGxB,GAAI,OAAOA,GAAY,SACrB,OAAOrB,GAAyBqB,EAAS3B,CAAO,EAGlDA,EAAQ,qBAAqB,CAC3B,KAAM,uBACN,cAAeA,EAAQ,iBAAiB,EACxC,aAAcA,EAAQ,gBAAgB,EACtC,SAAU,CACR,KAAMA,EAAQ,gBAAgB,EAC9B,UAAW,CAAC,CACd,EACA,gBAAiB,0BAA0B,OAAO,UAAU,SAAS,KACnE2B,CACF,CAAC,8EACH,CAAC,CACH,CAEA,SAASrB,GACPmC,EACAzC,EACoD,CACpD,GAAIyC,EAAO,MACT,MAAO,CAAE,MAAO,MAAO,MAAOA,CAAO,EAEvC,IAAMC,EAA4C,CAAC,EACnD,QAAW7B,KAAO4B,EAAQ,CACxB,IAAM3B,EAAQ2B,EAAO5B,CAAG,EAClBG,EAAgBhB,EAAQ,aAAaa,CAAG,EAC1CE,GAAOD,CAAK,IAGZA,IAAU,OACZ4B,EAAO7B,CAAG,EAAIa,GAAwBZ,EAAOE,CAAa,EACjDhB,EAAQ,mBAAmB,uBAAuB,GAC3DA,EAAQ,qBAAqB,CAC3B,KAAM,uBACN,aAAcgB,EAAc,gBAAgB,EAC5C,cAAehB,EAAQ,iBAAiB,EACxC,SAAU,CAAE,KAAMA,EAAQ,gBAAgB,EAAG,UAAW,CAAC,CAAE,EAC3D,gBAAiBd,EACnB,CAAC,EAEL,CACA,OAAOwD,CACT,CAEA,SAASV,GAAwBW,EAAuB3C,EAAgD,CACtG,IAAM0C,EAA8B,CAAC,EACrC,QAASE,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,IAAMC,EAAc7C,EAAQ,aAAa,OAAO4C,CAAC,CAAC,EAC5C9B,EAAQ6B,EAAMC,CAAC,EACrB,GAAI9B,IAAU,QAAaC,GAAOD,CAAK,EAAG,CACxC,IAAMgC,EAAYhC,IAAU,OAAY,YAAc,cACtDd,EAAQ,qBAAqB,CAC3B,KAAM,uBACN,cAAe6C,EAAY,iBAAiB,EAC5C,aAAcA,EAAY,gBAAgB,EAC1C,SAAU,CACR,KAAM,GAAG7C,EAAQ,gBAAgB,CAAC,IAAI4C,CAAC,IACvC,UAAW,CAAC,CACd,EACA,gBAAiB,iBAAiBE,CAAS,uDAAuDA,CAAS,WAC7G,CAAC,CACH,CACAJ,EAAO,KAAKhB,GAAwBZ,EAAO+B,CAAW,CAAC,CACzD,CACA,OAAOH,CACT,CAEA,SAASN,GAAgBtB,EAA6C,CACpE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQA,EAAM,0BAA+B,EAC7F,CAEA,SAAS0B,GAAkB1B,EAA+C,CACxE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,OAAOA,EAAM,QAAc,UACnF,CAEA,SAASG,GAA8BH,EAAgBd,EAA2B,CAC5Ec,IAAU,QAAad,EAAQ,mBAAmB,uBAAuB,GAC3EA,EAAQ,qBAAqB,CAC3B,KAAM,wBACN,cAAeA,EAAQ,iBAAiB,EACxC,gBAAiBd,EACnB,CAAC,CAEL,CAkBA,IAAMe,GAAN,MAAM8C,CAAiB,CAErB,YAAoBC,EAAuB,CAAvB,YAAAA,EACd,KAAK,OAAO,YAEd,KAAK,YACH,KAAK,OAAO,iBAAiB,OAAO,KAAK,OAAO,SAAS,GACzD,KAAK,OAAO,iBAAiB,MAAM,KAAK,OAAO,SAAS,EAE9D,CARgB,YAUhB,qBAAqBC,EAA+B,CAClDC,GAAyB,CACvB,OAAQ,CAACD,CAAK,EACd,eAAgB,KAAK,OAAO,eAC5B,KAAM,KAAK,OAAO,UAAY,CAAC,EAC/B,SAAU,KAAK,OAAO,SACtB,YAAa,KAAK,OAAO,YACzB,cAAe,KAAK,OAAO,cAC3B,WAAY,KAAK,OAAO,UAC1B,CAAC,CACH,CAEA,kBAAmB,CACjB,OAAO,KAAK,OAAO,aACrB,CAEA,iBAAkB,CAChB,OAAO,KAAK,OAAO,YACrB,CAEA,iBAAkB,CAChB,OAAO,KAAK,OAAO,aAAa,KAAK,OAAO,aAAa,OAAS,CAAC,CACrE,CAEA,0BAA8D,CAC5D,GAAI,GAAC,KAAK,OAAO,WAAa,CAAC,KAAK,aAGpC,MAAO,CACL,KAAM,KAAK,OAAO,UAClB,OAAQ,KAAK,YAAY,OAAO,IAAK/B,IAAW,CAC9C,KAAMA,EAAM,KACZ,SAAU,UACV,WAAYA,EAAM,OAAS,QAC7B,EAAE,CACJ,CACF,CAEA,aAAc,CACZ,MAAO,CAAC,aAAc,WAAY,gBAAiB,UAAW,cAAc,EAAE,SAAS,KAAK,OAAO,MAAM,CAC3G,CAEA,mBAAmBiC,EAAwB,CACzC,OAAO,KAAK,OAAO,gBAAgB,SAASA,CAAc,CAC5D,CAEA,mBAAoB,CAClB,GAAK,KAAK,OAAO,UAIjB,OAAO,KAAK,OAAO,WAAW,qBAAqB,KAAK,OAAO,SAAS,CAC1E,CAEA,UAAUC,EAAc,CACtB,OAAO,KAAK,aAAa,OAAO,KAAMlC,GAAUA,EAAM,OAASkC,CAAI,CACrE,CAEA,cAAcC,EAAmB,CAC/B,IAAMnC,EAAQ,KAAK,UAAUmC,CAAS,EAChCjE,EAAY8B,GAAO,OAAS,SAAWA,EAAM,KAAO,OAE1D,OAAO,IAAI6B,EAAiB,CAC1B,GAAG,KAAK,OACR,UAAA3D,EACA,cAAe,KAAK,OAAO,cAAc,OAAOiE,CAAS,CAC3D,CAAC,CACH,CAEA,eAAyC,CACvC,OAAI,KAAK,OAAO,WAAa,KAAK,sBAAsB,EAC/C,KAAK,OAAO,aAAaC,GAAa,KAAK,OAAO,SAAS,CAAC,GAAK,CAAC,EAEpE,CAAC,CACV,CAEA,uBAAiC,CAC/B,OAAQ,KAAK,OAAO,OAAQ,CAC1B,IAAK,YACL,IAAK,mBACL,IAAK,oBACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,sBACL,IAAK,SACL,IAAK,SACL,IAAK,sBACL,IAAK,SACH,MAAO,GACT,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,aACL,IAAK,QACL,IAAK,YACL,IAAK,WACH,MAAO,GACT,QACEC,GAAY,KAAK,OAAO,OAAQ,gBAAgB,CACpD,CACF,CAEA,aAAaF,EAAmB,CAC9B,OAAO,IAAIN,EAAiB,CAC1B,GAAG,KAAK,OACR,aAAc,KAAK,OAAO,aAAa,OAAOM,CAAS,CACzD,CAAC,CACH,CACF,ECtiBA,SAASG,GAAwBC,EAAgB,CAC/C,GAAI,CAACA,EAAO,gBAAgB,SAAS,EACnC,MAAM,IAAIC,GAA4B,2EAA4E,CAChH,cAAeD,EAAO,cACxB,CAAC,CAEL,CAEO,IAAME,GAAN,KAAoB,CACjB,QAER,YAAYF,EAAgB,CAC1B,KAAK,QAAUA,CACjB,CASA,WAAWG,EAA2C,CACpD,OAAAJ,GAAwB,KAAK,OAAO,EAE7B,KAAK,QAAQ,QAAQ,QAAQ,CAAE,OAAQ,aAAc,GAAGI,CAAQ,CAAC,CAC1E,CAQA,KAAKA,EAA4C,CAC/C,OAAAJ,GAAwB,KAAK,OAAO,EAE7B,KAAK,QAAQ,QAAQ,QAAQ,CAAE,OAAQ,OAAQ,GAAGI,CAAQ,CAAC,CACpE,CACF,EChDO,SAASC,GAAmBC,EAAgBC,EAAoC,CACrF,IAAMC,EAAWC,GAAa,IAAMC,GAA2BH,CAAgB,CAAC,EAEhF,OAAO,eAAeD,EAAQ,OAAQ,CACpC,IAAK,IAAME,EAAS,IAAI,CAC1B,CAAC,CACH,CAEA,SAASE,GAA2BH,EAA8C,CAKhF,MAAO,CACL,UAAW,CACT,OAAQI,GAAcJ,EAAiB,MAAM,EAC7C,MAAOI,GAAcJ,EAAiB,KAAK,EAC3C,MAAOI,GAAcJ,EAAiB,KAAK,CAC7C,CACF,CACF,CAEA,SAASI,GAAiBC,EAAqD,CAC7E,OAAO,OAAO,QAAQA,CAAG,EAAE,IAAI,CAAC,CAACC,EAAMC,CAAK,KAAO,CAAE,KAAAD,EAAM,GAAGC,CAAM,EAAE,CACxE,CCrBA,IAAMC,GAAY,IAAI,QAChBC,GAAiB,mBAIVC,GAAN,KAA0D,CAG/D,YAAYC,EAAaC,EAAgB,CACvCJ,GAAU,IAAI,KAAM,CAClB,IAAAG,EACA,OAAAC,CACF,CAAC,EAED,OAAO,eAAe,KAAMH,GAAgB,CAAE,MAAOA,EAAe,CAAC,CACvE,CAEA,IAAI,KAAc,CAChB,OAAOD,GAAU,IAAI,IAAI,EAAG,GAC9B,CAEA,IAAI,QAAiB,CACnB,OAAOA,GAAU,IAAI,IAAI,EAAG,MAC9B,CACF,EAIO,SAASK,GAAsBF,EAAa,CACjD,MAAO,IAAIC,IAAW,IAAIF,GAASC,EAAKC,CAAM,CAChD,CAIO,SAASE,GAAWC,EAA0C,CACnE,OAAOA,GAAS,MAAQA,EAAMN,EAAc,IAAMA,EACpD,CCrCA,IAAAO,GAA0C,SAE1C,OAAS,iBAAAC,OAAqB,mBAC9B,OAAS,gBAAAC,OAAoB,cAC7B,OAAOC,OAAQ,UACf,OAAOC,OAAU,YCIX,IAAOC,GAAP,MAAOC,CAAG,CAId,YAAYC,EAA+BC,EAA8B,CACvE,GAAID,EAAW,OAAS,IAAMC,EAAU,OACtC,MAAID,EAAW,SAAW,EAClB,IAAI,UAAU,4BAA4B,EAG5C,IAAI,UACR,YAAYA,EAAW,MAAM,oBAC3BA,EAAW,OAAS,CACtB,SAAS,EAIb,IAAME,EAAeD,EAAU,OAC7B,CAACE,EAAKC,IAAUD,GAAOC,aAAiBL,EAAMK,EAAM,OAAO,OAAS,GACpE,CAAC,EAGH,KAAK,OAAS,IAAI,MAAMF,CAAY,EACpC,KAAK,QAAU,IAAI,MAAMA,EAAe,CAAC,EAEzC,KAAK,QAAQ,CAAC,EAAIF,EAAW,CAAC,EAI9B,IAAIK,EAAI,EACNC,EAAM,EACR,KAAOD,EAAIJ,EAAU,QAAQ,CAC3B,IAAMM,EAAQN,EAAUI,GAAG,EACrBG,EAAYR,EAAWK,CAAC,EAG9B,GAAIE,aAAiBR,EAAK,CAExB,KAAK,QAAQO,CAAG,GAAKC,EAAM,QAAQ,CAAC,EAEpC,IAAIE,EAAa,EACjB,KAAOA,EAAaF,EAAM,OAAO,QAC/B,KAAK,OAAOD,GAAK,EAAIC,EAAM,OAAOE,GAAY,EAC9C,KAAK,QAAQH,CAAG,EAAIC,EAAM,QAAQE,CAAU,EAI9C,KAAK,QAAQH,CAAG,GAAKE,OAErB,KAAK,OAAOF,GAAK,EAAIC,EACrB,KAAK,QAAQD,CAAG,EAAIE,EAG1B,CAEA,IAAI,KAAG,CACL,IAAML,EAAM,KAAK,QAAQ,OACrBE,EAAI,EACJD,EAAQ,KAAK,QAAQ,CAAC,EAC1B,KAAOC,EAAIF,GAAKC,GAAS,IAAI,KAAK,QAAQC,GAAG,CAAC,GAC9C,OAAOD,CACT,CAEA,IAAI,WAAS,CACX,IAAMD,EAAM,KAAK,QAAQ,OACrBE,EAAI,EACJD,EAAQ,KAAK,QAAQ,CAAC,EAC1B,KAAOC,EAAIF,GAAKC,GAAS,IAAIC,CAAC,GAAG,KAAK,QAAQA,GAAG,CAAC,GAClD,OAAOD,CACT,CAEA,IAAI,MAAI,CACN,IAAMD,EAAM,KAAK,QAAQ,OACrBE,EAAI,EACJD,EAAQ,KAAK,QAAQ,CAAC,EAC1B,KAAOC,EAAIF,GAAKC,GAAS,IAAIC,CAAC,GAAG,KAAK,QAAQA,GAAG,CAAC,GAClD,OAAOD,CACT,CAEA,SAAO,CACL,MAAO,CACL,IAAK,KAAK,IACV,UAAW,KAAK,UAChB,KAAM,KAAK,KACX,OAAQ,KAAK,OAEjB,GAMI,SAAUM,GACdC,EACAC,EAAY,IACZC,EAAS,GACTC,EAAS,GAAE,CAEX,GAAIH,EAAO,SAAW,EACpB,MAAM,IAAI,UACR,6FAA6F,EAIjG,OAAO,IAAIb,GACT,CAACe,EAAQ,GAAG,MAAMF,EAAO,OAAS,CAAC,EAAE,KAAKC,CAAS,EAAGE,CAAM,EAC5DH,CAAM,CAEV,CAsCM,SAAUI,GAAIC,EAAa,CAC/B,OAAO,IAAIC,GAAI,CAACD,CAAK,EAAG,CAAA,CAAE,CAC5B,CAKO,IAAME,GAAQH,GAAI,EAAE,EAKb,SAAPI,GACLC,KACGC,EAA2B,CAE9B,OAAO,IAAIJ,GAAIG,EAASC,CAAM,CAChC,CCvKO,SAASC,GAAoBC,EAAqC,CACvE,MAAO,CACL,SAAU,CACR,OAAO,OAAO,KAAKA,CAAM,CAC3B,EAEA,iBAAiBC,EAAK,CACpB,OAAOD,EAAOC,CAAG,CACnB,CACF,CACF,CCXO,SAASC,GAAYC,EAAsBC,EAA6C,CAC7F,MAAO,CACL,SAAU,CACR,MAAO,CAACD,CAAG,CACb,EAEA,kBAAmB,CACjB,OAAOC,EAAQ,CACjB,CACF,CACF,CCPO,SAASC,GACdC,EAC8B,CAC9B,IAAMC,EAAQ,IAAIC,GAClB,MAAO,CACL,SAAU,CACR,OAAOF,EAAU,QAAQ,CAC3B,EAEA,iBAAiBG,EAAK,CACpB,OAAOF,EAAM,YAAYE,EAAK,IAAMH,EAAU,iBAAiBG,CAAG,CAAC,CACrE,EAEA,sBAAsBA,EAAK,CACzB,OAAOH,EAAU,wBAAwBG,CAAG,CAC9C,CACF,CACF,CC5BO,IAAMC,GAA4B,CACvC,WAAY,GACZ,aAAc,GACd,SAAU,EACZ,EAEO,SAASC,GAAuCC,EAA8B,CACnF,IAAMC,EAAW,IAAI,IAAID,CAAO,EAChC,MAAO,CACL,eAAgB,IAAM,OAAO,UAC7B,yBAA0B,IAAMF,GAChC,IAAK,CAACI,EAAWC,IAA0BF,EAAS,IAAIE,CAAI,EAC5D,IAAK,CAACD,EAAWC,EAAuBC,IAC/BH,EAAS,IAAIE,CAAI,GAAK,QAAQ,IAAID,EAAQC,EAAMC,CAAK,EAE9D,QAAS,IAAM,CAAC,GAAGH,CAAQ,CAC7B,CACF,CCYA,IAAMI,GAAgB,OAAO,IAAI,4BAA4B,EAYtD,SAASC,GAAuCC,EAAWC,EAAkC,CAClG,IAAMC,EAAiBC,GAAgBF,CAAM,EACvCG,EAAkB,IAAI,IAEtBC,EAAQ,IAAI,MAAML,EAAQ,CAC9B,IAAIA,EAAQM,EAAM,CAEhB,GAAIF,EAAgB,IAAIE,CAAI,EAC1B,OAAON,EAAOM,CAAI,EAIpB,IAAMC,EAAQL,EAAe,IAAII,CAAI,EACrC,OAAIC,EACKA,EAAM,iBAAiBD,CAAI,EAI7BN,EAAOM,CAAI,CACpB,EAEA,IAAIN,EAAQM,EAAM,CAChB,GAAIF,EAAgB,IAAIE,CAAI,EAC1B,MAAO,GAET,IAAMC,EAAQL,EAAe,IAAII,CAAI,EACrC,OAAIC,EACKA,EAAM,MAAMD,CAAI,GAAK,GAGvB,QAAQ,IAAIN,EAAQM,CAAI,CACjC,EAEA,QAAQN,EAAQ,CACd,IAAMQ,EAAaC,GAAgB,QAAQ,QAAQT,CAAM,EAAGE,CAAc,EACpEQ,EAAYD,GAAgB,MAAM,KAAKP,EAAe,KAAK,CAAC,EAAGA,CAAc,EACnF,MAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAGM,EAAY,GAAGE,EAAW,GAAGN,CAAe,CAAC,CAAC,CACvE,EAEA,IAAIJ,EAAQM,EAAMK,EAAO,CAEvB,OADcT,EAAe,IAAII,CAAI,GAC1B,wBAAwBA,CAAI,GAAG,WAAa,GAC9C,IAETF,EAAgB,IAAIE,CAAI,EACjB,QAAQ,IAAIN,EAAQM,EAAMK,CAAK,EACxC,EAEA,yBAAyBX,EAAQM,EAAM,CACrC,IAAMM,EAAW,QAAQ,yBAAyBZ,EAAQM,CAAI,EAC9D,GAAIM,GAAY,CAACA,EAAS,aAExB,OAAOA,EAGT,IAAML,EAAQL,EAAe,IAAII,CAAI,EACrC,OAAIC,EACEA,EAAM,sBACD,CACL,GAAGM,GACH,GAAGN,GAAO,sBAAsBD,CAAI,CACtC,EAEKO,GAGFD,CACT,EAEA,eAAeZ,EAAQc,EAAUC,EAAY,CAC3C,OAAAX,EAAgB,IAAIU,CAAQ,EACrB,QAAQ,eAAed,EAAQc,EAAUC,CAAU,CAC5D,EAEA,eAAgB,IAAM,OAAO,SAC/B,CAAC,EAED,OAAAV,EAAMP,EAAa,EAAI,UAAY,CAIjC,IAAMkB,EAAQ,CAAE,GAAG,IAAK,EACxB,cAAOA,EAAMlB,EAAa,EACnBkB,CACT,EACOX,CACT,CAEA,SAASF,GAAgBF,EAA+B,CACtD,IAAMC,EAAiB,IAAI,IAC3B,QAAWK,KAASN,EAAQ,CAC1B,IAAMgB,EAAOV,EAAM,QAAQ,EAC3B,QAAWW,KAAOD,EAChBf,EAAe,IAAIgB,EAAKX,CAAK,CAEjC,CACA,OAAOL,CACT,CAEA,SAASO,GAAgBQ,EAA8Bf,EAA2D,CAChH,OAAOe,EAAK,OAAQC,GACJhB,EAAe,IAAIgB,CAAG,GACtB,MAAMA,CAAG,GAAK,EAC7B,CACH,CC/IO,SAASC,GAAiBC,EAA2D,CAC1F,MAAO,CACL,SAAU,CACR,OAAOA,CACT,EAEA,KAAM,CACJ,MAAO,EACT,EAEA,kBAAmB,CAEnB,CACF,CACF,CCZO,SAASC,GACdC,EACAC,EACyB,CACzB,MAAO,CACL,MAAAD,EACA,YAAaC,GAAa,OAAS,QAAU,CAAE,eAAgBA,EAAY,QAAQ,cAAe,EAAI,MACxG,CACF,CCNO,SAASC,GAAqBC,EAAuB,CAC1D,GAAIA,IAAS,OACX,MAAO,GAET,IAAMC,EAAOC,GAA4BF,CAAI,EAE7C,OADe,IAAIG,GAAO,EAAG,CAAE,OAAQC,EAAe,CAAC,EACzC,MAAMH,CAAI,EAAE,SAAS,CACrC,CCTA,IAAMI,GAA6B,QAE5B,SAASC,GACd,CAAE,MAAAC,EAAO,kBAAAC,CAAkB,EAC3BC,EACAC,EACiE,CACjE,OAAIF,EAAkB,WACb,IAAIG,GAA8BC,GAAqBJ,EAAmBE,CAAc,EAAG,CAChG,KAAMF,EAAkB,WACxB,cAAAC,EACA,KAAMD,EAAkB,KACxB,gBAAiBA,EAAkB,iBACrC,CAAC,EAGI,IAAIK,GAAgCN,EAAO,CAChD,cAAAE,EACA,gBAAiBD,EAAkB,iBACrC,CAAC,CACH,CAEA,SAASI,GAAqBE,EAAoDJ,EAAwB,CACxG,IAAIK,EAAUD,EAAgB,QAC9B,OACGJ,IAAmB,cAAgBA,IAAmB,YAAcA,IAAmB,UACxFI,EAAgB,aAAeT,KAE/BU,GACE;AAAA,oHAGGA,CACT,CCrCA,IAAIC,GAAmB,YAMvB,SAASC,GAAMC,EAAa,CAC1B,IAAIC,EAAQD,EAAY,MAAM;AAAA,CAAI,EAClC,OAAOC,EAAM,OAAO,SAAUC,EAAOC,EAAM,CACzC,IAAIC,EAAcC,GAAYF,CAAI,GAAKG,GAAWH,CAAI,GAAKI,GAAWJ,CAAI,GAAKK,GAAUL,CAAI,GAAKM,GAASN,CAAI,EAE/G,OAAIC,GACFF,EAAM,KAAKE,CAAW,EAGjBF,CACT,EAAG,CAAC,CAAC,CACP,CACA,IAAIQ,GAAW,gJACXC,GAAe,gCAEnB,SAASN,GAAYF,EAAM,CACzB,IAAIS,EAAQF,GAAS,KAAKP,CAAI,EAE9B,GAAI,CAACS,EACH,OAAO,KAGT,IAAIC,EAAWD,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAE,QAAQ,QAAQ,IAAM,EAEtDE,EAASF,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAE,QAAQ,MAAM,IAAM,EAElDG,EAAWJ,GAAa,KAAKC,EAAM,CAAC,CAAC,EAEzC,OAAIE,GAAUC,GAAY,OAExBH,EAAM,CAAC,EAAIG,EAAS,CAAC,EAErBH,EAAM,CAAC,EAAIG,EAAS,CAAC,EAErBH,EAAM,CAAC,EAAIG,EAAS,CAAC,GAGhB,CACL,KAAOF,EAAsB,KAAXD,EAAM,CAAC,EACzB,WAAYA,EAAM,CAAC,GAAKd,GACxB,UAAWe,EAAW,CAACD,EAAM,CAAC,CAAC,EAAI,CAAC,EACpC,WAAYA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,KACnC,OAAQA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,IACjC,CACF,CAEA,IAAII,GAAU,oHAEd,SAASV,GAAWH,EAAM,CACxB,IAAIS,EAAQI,GAAQ,KAAKb,CAAI,EAE7B,OAAKS,EAIE,CACL,KAAMA,EAAM,CAAC,EACb,WAAYA,EAAM,CAAC,GAAKd,GACxB,UAAW,CAAC,EACZ,WAAY,CAACc,EAAM,CAAC,EACpB,OAAQA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,IACjC,EATS,IAUX,CAEA,IAAIK,GAAU,sIACVC,GAAc,gDAElB,SAASX,GAAWJ,EAAM,CACxB,IAAIS,EAAQK,GAAQ,KAAKd,CAAI,EAE7B,GAAI,CAACS,EACH,OAAO,KAGT,IAAIE,EAASF,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAE,QAAQ,SAAS,EAAI,GACnDG,EAAWG,GAAY,KAAKN,EAAM,CAAC,CAAC,EAExC,OAAIE,GAAUC,GAAY,OAExBH,EAAM,CAAC,EAAIG,EAAS,CAAC,EACrBH,EAAM,CAAC,EAAIG,EAAS,CAAC,EACrBH,EAAM,CAAC,EAAI,MAGN,CACL,KAAMA,EAAM,CAAC,EACb,WAAYA,EAAM,CAAC,GAAKd,GACxB,UAAWc,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,MAAM,GAAG,EAAI,CAAC,EAC7C,WAAYA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,KACnC,OAAQA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,IACjC,CACF,CAEA,IAAIO,GAAmB,+DAEvB,SAASV,GAASN,EAAM,CACtB,IAAIS,EAAQO,GAAiB,KAAKhB,CAAI,EAEtC,OAAKS,EAIE,CACL,KAAMA,EAAM,CAAC,EACb,WAAYA,EAAM,CAAC,GAAKd,GACxB,UAAW,CAAC,EACZ,WAAY,CAACc,EAAM,CAAC,EACpB,OAAQA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,IACjC,EATS,IAUX,CAEA,IAAIQ,GAAS,gGAEb,SAASZ,GAAUL,EAAM,CACvB,IAAIS,EAAQQ,GAAO,KAAKjB,CAAI,EAE5B,OAAKS,EAIE,CACL,KAAMA,EAAM,CAAC,EACb,WAAYA,EAAM,CAAC,GAAKd,GACxB,UAAW,CAAC,EACZ,WAAY,CAACc,EAAM,CAAC,EACpB,OAAQA,EAAM,CAAC,EAAI,CAACA,EAAM,CAAC,EAAI,IACjC,EATS,IAUX,CC9GA,IAAMS,GAAN,KAA2C,CACzC,aAAqC,CACnC,OAAO,IACT,CACF,EAEaC,GAAN,KAA0C,CACvC,OACR,aAAc,CACZ,KAAK,OAAS,IAAI,KACpB,CACA,aAAqC,CACnC,IAAMC,EAAQ,KAAK,OAAO,MAC1B,GAAI,CAACA,EACH,OAAO,KAIT,IAAMC,EAF+BC,GAAMF,CAAK,EAEtB,KAAMG,GAAM,CAEpC,GAAI,CAACA,EAAE,KACL,MAAO,GAIT,IAAMC,EAAYC,GAAYF,EAAE,IAAI,EACpC,OACEC,IAAc,eACd,CAACA,EAAU,SAAS,SAAS,GAC7B,CAACA,EAAU,SAAS,+BAA+B,GACnD,CAACA,EAAU,SAAS,oBAAoB,GACxC,CAACA,EAAU,SAAS,qBAAqB,GACzC,CAACA,EAAU,SAAS,kBAAkB,GACtC,CAACA,EAAU,SAAS,sBAAsB,GAC1C,CAACA,EAAU,WAAW,WAAW,GACjC,CAACD,EAAE,WAAW,SAAS,MAAM,GAC7B,CAACA,EAAE,WAAW,SAAS,aAAa,GACpC,CAACA,EAAE,WAAW,SAAS,QAAQ,GAC/BA,EAAE,WAAW,MAAM,GAAG,EAAE,OAAS,CAErC,CAAC,EAED,MAAI,CAACF,GAAS,CAACA,EAAM,KACZ,KAGF,CACL,SAAUA,EAAM,KAChB,WAAYA,EAAM,WAClB,aAAcA,EAAM,MACtB,CACF,CACF,EAEO,SAASK,GAAYC,EAAoC,CAC9D,OACEA,IAAgB,UAKZ,OAAO,kBAAqB,YAAcA,IAAgB,UACrD,IAAI,iBAEJ,IAAIT,GAGN,IAAIC,EAEf,CC5FO,IAAMS,GAAe,CAC1B,KAAM,GACN,OAAQ,GACR,KAAM,GACN,KAAM,GACN,KAAM,EACR,ECKO,SAASC,GAAgBC,EAAiB,CAAC,EAAG,CACnD,IAAMC,EAAQC,GAAuBF,CAAI,EAGzC,OAFwB,OAAO,QAAQC,CAAK,EAErB,OACrB,CAACE,EAAe,CAACC,EAAKC,CAAK,KACrBC,GAAaF,CAAG,IAAM,OAExBD,EAAc,OAAWC,CAAG,EAAI,CAAE,OAAQC,CAAM,EAEhDF,EAAcC,CAAG,EAAIC,EAGhBF,GAGT,CAAE,OAAQ,CAAC,CAAE,CACf,CACF,CAOA,SAASD,GAAuBF,EAAiB,CAAC,EAAG,CACnD,OAAI,OAAOA,EAAK,QAAc,UACrB,CAAE,GAAGA,EAAM,OAAQ,CAAE,KAAMA,EAAK,MAAU,CAAE,EAG9CA,CACT,CAQO,SAASO,GAAeP,EAAiB,CAAC,EAAG,CAClD,OAAQQ,IACF,OAAOR,EAAK,QAAc,YAC5BQ,EAAK,OAAYA,EAAK,OAAU,MAG3BA,EAEX,CASO,SAASC,GAAUT,EAAgBU,EAA0B,CAClE,IAAMC,EAAoBJ,GAAeP,CAAI,EAE7C,OAAOU,EAAY,CACjB,OAAQ,YACR,SAAUC,EACV,WAAYZ,EACd,CAAC,EAAEC,CAAI,CACT,CChEA,SAASY,GAAgBC,EAAiB,CAAC,EAAG,CAC5C,GAAM,CAAE,OAAAC,EAAQ,GAAGC,CAAM,EAAIF,EAE7B,OAAI,OAAOC,GAAW,SACbF,GAAyB,CAAE,GAAGG,EAAO,OAAQD,CAAO,CAAC,EAErDF,GAAyB,CAAE,GAAGG,EAAO,OAAQ,CAAE,KAAM,EAAK,CAAE,CAAC,CAExE,CAQO,SAASC,GAAeH,EAAiB,CAAC,EAAG,CAClD,OAAI,OAAOA,EAAK,QAAc,SACpBI,GAAiBD,GAAwBH,CAAI,EAAEI,CAAI,EAAE,OAErDA,GAAiBD,GAAwBH,CAAI,EAAEI,CAAI,EAAE,OAAU,IAE3E,CAQO,SAASC,GAAML,EAAgBM,EAA0B,CAC9D,OAAOA,EAAY,CACjB,OAAQ,QACR,SAAUH,GAAeH,CAAI,EAC7B,WAAYD,EACd,CAAC,EAAEC,CAAI,CACT,CCnCA,SAASO,GAAgBC,EAAiB,CAAC,EAAG,CAC5C,IAAMC,EAAQF,GAAyBC,CAAI,EAG3C,GAAI,MAAM,QAAQC,EAAM,EAAK,EAC3B,QAAWC,KAAOD,EAAM,GAClB,OAAOC,GAAQ,WACjBD,EAAM,OAAUC,CAAG,EAAI,SAGlB,OAAOD,EAAM,IAAU,WAChCA,EAAM,OAAUA,EAAM,EAAK,EAAI,IAGjC,OAAOA,CACT,CAQO,SAASE,GAAeH,EAAiB,CAAC,EAAG,CAClD,OAAQI,IACF,OAAOJ,GAAO,QAAc,WAC9BI,EAAK,QAASC,GAAQ,CACpBA,EAAI,OAAYA,EAAI,OAAU,IAChC,CAAC,EAGID,EAEX,CAQO,SAASE,GAAQN,EAAgBO,EAA0B,CAChE,OAAOA,EAAY,CACjB,OAAQ,UACR,SAAUJ,GAAeH,CAAI,EAC7B,WAAYD,EACd,CAAC,EAAEC,CAAI,CACT,CCzCO,SAASQ,GAAgBC,EAAgBC,EAAgBC,EAA0B,CAExF,GAAID,IAAW,YAAa,OAAQE,GAAwBC,GAAUD,EAAUD,CAAW,EAC3F,GAAID,IAAW,QAAS,OAAQE,GAAwBE,GAAMF,EAAUD,CAAW,EACnF,GAAID,IAAW,UAAW,OAAQE,GAAwBG,GAAQH,EAAUD,CAAW,CAGzF,CChBO,SAASK,GAAiBC,EAAmBC,EAAiC,CACnF,IAAMC,EAAmBD,EAAM,OAAO,OAAQE,GAAU,CAACA,EAAM,YAAY,EACrEC,EAAeC,GAAMH,EAAkB,MAAM,EACnD,OAAO,IAAI,MACT,CAAC,EACD,CACE,IAAII,EAAQC,EAAM,CAChB,GAAIA,KAAQD,GAAU,OAAOC,GAAS,SACpC,OAAOD,EAAOC,CAAI,EAEpB,IAAMC,EAAYJ,EAAaG,CAAI,EACnC,GAAIC,EACF,OAAO,IAAIC,GAAaT,EAAWO,EAAMC,EAAU,KAAMA,EAAU,OAAQA,EAAU,OAAS,MAAM,CAIxG,EACA,GAAGE,GAAqB,OAAO,KAAKN,CAAY,CAAC,CACnD,CACF,CACF,CCzBA,IAAMO,GAAQC,GAA2B,MAAM,QAAQA,CAAE,EAAIA,EAAKA,EAAG,MAAM,GAAG,EAMjEC,GAAU,CAACC,EAAGC,IAAiBJ,GAAKI,CAAE,EAAE,OAAO,CAACD,EAAGE,IAAMF,GAAKA,EAAEE,CAAC,EAAGF,CAAC,EAarEG,GAAU,CAACH,EAAQC,EAAuBG,IACrDP,GAAKI,CAAE,EAAE,YAAY,CAACG,EAAGF,EAAG,EAAGJ,IAAO,OAAO,OAAO,CAAC,EAAGC,GAAQC,EAAGF,EAAG,MAAM,EAAG,CAAC,CAAC,EAAG,CAAE,CAACI,CAAC,EAAGE,CAAE,CAAC,EAAGA,CAAC,ECLpG,SAASC,GAAgBC,EAAyBC,EAAyB,CACzE,OAAID,IAAmB,QAAaC,IAAiB,OAAkB,CAAC,EAEjE,CAAC,GAAGA,EAAc,SAAUD,CAAc,CACnD,CA6BA,SAASE,GAAgBC,EAAoBC,EAAoBC,EAAkC,CACjG,OAAID,IAAa,OAAkBD,GAAY,CAAC,EAEzCG,GAAQF,EAAUC,EAAcF,GAAY,EAAI,CACzD,CAmBO,SAASI,GACdC,EACAC,EACAC,EACAV,EACAC,EACAU,EACA,CAKA,IAAMC,EAHYJ,EAAO,kBAAkB,OAAOC,CAAa,EAG3B,OAAO,OACzC,CAACI,EAAKC,KAAW,CAAE,GAAGD,EAAK,CAACC,EAAM,IAAI,EAAGA,CAAM,GAC/C,CAAC,CACH,EAGA,OAAQC,GAAwB,CAC9B,IAAMC,EAAWC,GAAYT,EAAO,YAAY,EAE1CH,EAAeN,GAAgBC,EAAgBC,CAAY,EAC3DiB,EAAehB,GAAgBa,EAAUJ,EAAcN,CAAY,EACnEc,EAAgBT,EAAY,CAAE,SAAUL,EAAc,SAAAW,CAAS,CAAC,EAAEE,CAAY,EAG9EE,EAAUC,GAAWb,EAAQC,CAAa,EAGhD,OAAO,IAAI,MAAMU,EAAe,CAC9B,IAAIG,EAAQC,EAAc,CAExB,GAAI,CAACH,EAAQ,SAASG,CAAI,EAAG,OAAOD,EAAOC,CAAI,EAI/C,IAAMC,EAAY,CADIZ,EAAkBW,CAAI,EAAE,KACZb,EAAaa,CAAI,EAC7CE,EAAW,CAACpB,EAAca,CAAY,EAG5C,OAAOX,GAAYC,EAAQ,GAAGgB,EAAW,GAAGC,CAAQ,CACtD,EACA,GAAGC,GAAqB,CAAC,GAAGN,EAAS,GAAG,OAAO,oBAAoBD,CAAa,CAAC,CAAC,CACpF,CAAC,CACH,CACF,CAGA,SAASE,GAAWb,EAAgBC,EAAuB,CACzD,OAAOD,EAAO,kBAAkB,OAAOC,CAAa,EAAE,OACnD,OAAQK,GAAUA,EAAM,OAAS,QAAQ,EACzC,IAAKA,GAAUA,EAAM,IAAI,CAC9B,CCxGA,IAAMa,GAAc,CAClB,aACA,oBACA,YACA,mBACA,SACA,SACA,SACA,QACF,EACMC,GAAiB,CAAC,YAAa,QAAS,SAAS,EAQhD,SAASC,GAAWC,EAAgBC,EAAuB,CAChE,IAAMC,EAAkBF,EAAO,YAAY,sBAAsBC,CAAa,GAAK,CAAC,EAE9EE,EAAS,CACbC,GAAkBJ,EAAQC,CAAa,EACvCI,GAAoBL,EAAQC,CAAa,EACzCK,GAAoBJ,CAAe,EACnCK,GAAY,OAAQ,IAAMN,CAAa,EACvCM,GAAY,QAAS,IAAMN,CAAa,EACxCM,GAAY,UAAW,IAAMP,EAAO,cAAc,CACpD,EAEA,OAAOQ,GAAqB,CAAC,EAAGL,CAAM,CACxC,CAQA,SAASC,GAAkBJ,EAAgBC,EAAoD,CAE7F,IAAMQ,EAAcC,GAAkBT,CAAa,EAC7CU,EAAU,OAAO,KAAUC,EAAW,EAAE,OAAO,OAAO,EAE5D,MAAO,CACL,SAAU,CACR,OAAOD,CACT,EAEA,iBAAiBE,EAAK,CACpB,IAAMC,EAAiBD,EAIjBE,EAAUC,GAAuDC,GAAwB,CAC7F,IAAMC,EAAWC,GAAYnB,EAAO,YAAY,EAEhD,OAAOA,EAAO,qBACXoB,GAAgB,CACf,IAAMC,EAAgC,CAEpC,KAAMJ,EACN,SAAU,CAAC,EAGX,OAAQH,EACR,MAAOb,EAGP,aAAc,GAAGQ,CAAW,IAAII,CAAG,GACnC,YAAAJ,EAGA,YAAAW,EAGA,SAAUF,CACZ,EAEA,OAAOlB,EAAO,SAAS,CAAE,GAAGqB,EAAQ,GAAGL,CAAe,CAAC,CACzD,EACA,CACE,OAAQF,EACR,KAAMG,EACN,MAAOhB,CACT,CACF,CACF,EAGA,OAAKJ,GAAkC,SAASiB,CAAc,EACrDQ,GAAYtB,EAAQC,EAAec,CAAM,EAI9CQ,GAAqBV,CAAG,EACnBW,GAAgBxB,EAAQa,EAAKE,CAAM,EAGrCA,EAAO,CAAC,CAAC,CAClB,CACF,CACF,CAEA,SAASQ,GAAqBR,EAA2D,CACvF,OAAQjB,GAAqC,SAASiB,CAAM,CAC9D,CAEA,SAASV,GAAoBL,EAAgBC,EAAuB,CAClE,OAAOwB,GACLlB,GAAY,SAAU,IAAM,CAC1B,IAAMmB,EAAQ1B,EAAO,kBAAkB,OAAOC,CAAa,EAC3D,OAAO0B,GAAiB1B,EAAeyB,CAAK,CAC9C,CAAC,CACH,CACF,CCrIO,SAASE,GAAkBC,EAAc,CAC9C,OAAOA,EAAK,QAAQ,KAAOC,GAAQA,EAAI,YAAY,CAAC,CACtD,CCQA,IAAMC,GAAY,OAAO,EASlB,SAASC,GAA+BC,EAAgB,CAC7D,IAAMC,EAAS,CACbC,GAAUF,CAAM,EAChBG,GAAYH,CAAM,EAClBI,GAAYN,GAAW,IAAME,CAAM,EACnCI,GAAY,UAAW,IAAMJ,EAAO,cAAc,CACpD,EACMK,EAAmBL,EAAO,YAAY,uBAAuB,EACnE,OAAIK,GACFJ,EAAO,KAAKK,GAAoBD,CAAgB,CAAC,EAE5CE,GAAqBP,EAAQC,CAAM,CAC5C,CAEA,SAASC,GAAUF,EAAqC,CACtD,IAAMQ,EAAY,OAAO,eAAeR,EAAO,eAAe,EACxDS,EAAU,CAAC,GAAG,IAAI,IAAI,OAAO,oBAAoBD,CAAS,CAAC,CAAC,EAElE,MAAO,CACL,SAAU,CACR,OAAOC,CACT,EAEA,iBAAiBC,EAAM,CACrB,OAAOV,EAAOU,CAAI,CACpB,CACF,CACF,CAEA,SAASP,GAAYH,EAAqC,CACxD,IAAMW,EAAgB,OAAO,KAAKX,EAAO,kBAAkB,MAAM,EAC3DY,EAAcD,EAAc,IAAIE,EAAiB,EACjDJ,EAAU,CAAC,GAAG,IAAI,IAAIE,EAAc,OAAOC,CAAW,CAAC,CAAC,EAE9D,OAAOE,GAAgB,CACrB,SAAU,CACR,OAAOL,CACT,EAEA,iBAAiBC,EAAM,CACrB,IAAMK,EAAgBC,GAAkBN,CAAI,EAE5C,GAAIV,EAAO,kBAAkB,OAAOe,CAAa,IAAM,OACrD,OAAOE,GAAWjB,EAAQe,CAAa,EAIzC,GAAIf,EAAO,kBAAkB,OAAOU,CAAI,IAAM,OAC5C,OAAOO,GAAWjB,EAAQU,CAAI,CAIlC,EAEA,sBAAsBQ,EAAK,CACzB,GAAI,CAACN,EAAY,SAASM,CAAG,EAC3B,MAAO,CAAE,WAAY,EAAM,CAI/B,CACF,CAAC,CACH,CAEO,SAASC,GAAiCnB,EAAwB,CACvE,OAAIA,EAAOF,EAAS,EACXE,EAAOF,EAAS,EAElBE,CACT,CCrFO,SAASoB,GAAuBC,EAAiE,CACtG,GAAI,OAAOA,GAAc,WACvB,OAAOA,EAAU,IAAI,EAGvB,GAAIA,EAAU,QAAQ,mBAAoB,CACxC,IAAMC,EAASD,EAAU,OAAO,mBAChC,KAAK,gBAAgB,QAAU,IAAIC,EAAO,KAAK,gBAAgB,uBAAuB,CACxF,CAEA,IAAMC,EAAY,OAAO,OAAO,KAAK,gBAAiB,CACpD,YAAa,CAAE,MAAO,KAAK,YAAY,OAAOF,CAAS,CAAE,EACzD,eAAgB,CAAE,MAAO,KAAM,aAAc,EAAK,EAClD,IAAK,CAAE,MAAO,MAAU,CAC1B,CAAC,EAED,OAAOG,GAA+BD,CAAS,CACjD,CCQO,SAASE,GAAsB,CAAE,OAAAC,EAAQ,UAAAC,EAAW,OAAAC,EAAQ,KAAAC,EAAM,WAAAC,CAAW,EAAwB,CAC1G,IAAMC,EAAiBD,EAAW,qBAAqBH,CAAS,EAChE,GAAI,CAACI,EACH,OAAOL,EAGT,IAAMM,EAAkD,CAAC,EACnDC,EAAuC,CAAC,EAE9C,QAAWC,KAAS,OAAO,OAAOH,CAAc,EAAG,CACjD,GAAIF,EAAM,CACR,GAAIA,EAAKK,EAAM,IAAI,EACjB,SAEF,IAAMC,EAASD,EAAM,MAAM,OAAQE,GAASP,EAAKO,CAAI,CAAC,EAClDD,EAAO,OAAS,GAClBF,EAAc,KAAKI,GAAiBF,CAAM,CAAC,CAE/C,SAAWP,EAAQ,CACjB,GAAI,CAACA,EAAOM,EAAM,IAAI,EACpB,SAGF,IAAMC,EAASD,EAAM,MAAM,OAAQE,GAAS,CAACR,EAAOQ,CAAI,CAAC,EACrDD,EAAO,OAAS,GAClBF,EAAc,KAAKI,GAAiBF,CAAM,CAAC,CAE/C,CAEIG,GAAYZ,EAAQQ,EAAM,KAAK,GACjCF,EAAyB,KACvBO,GAAsBL,EAAOM,GAAqBd,EAAQM,CAAwB,CAAC,CACrF,CAEJ,CAEA,OAAIA,EAAyB,OAAS,GAAKC,EAAc,OAAS,EACzDO,GAAqBd,EAAQ,CAAC,GAAGM,EAA0B,GAAGC,CAAa,CAAC,EAE9EP,CACT,CAEA,SAASY,GAAYZ,EAAgBe,EAA4B,CAC/D,OAAOA,EAAiB,MAAOC,GAAaC,GAAejB,EAAQgB,CAAQ,CAAC,CAC9E,CAEA,SAASH,GAAsBL,EAAsBR,EAAqC,CACxF,OAAOkB,GAAgBC,GAAYX,EAAM,KAAM,IAAMA,EAAM,QAAQR,CAAM,CAAC,CAAC,CAC7E,CCxDO,SAASoB,GAAiB,CAAE,QAAAC,EAAS,OAAAC,EAAQ,KAAAC,EAAM,iBAAAC,EAAkB,UAAAC,CAAU,EAAgB,CACpG,GAAI,MAAM,QAAQH,CAAM,EAAG,CACzB,QAASI,EAAI,EAAGA,EAAIJ,EAAO,OAAQI,IACjCJ,EAAOI,CAAC,EAAIN,GAAiB,CAC3B,OAAQE,EAAOI,CAAC,EAChB,KAAAH,EACA,UAAAE,EACA,iBAAAD,EACA,QAAAH,CACF,CAAC,EAEH,OAAOC,CACT,CACA,IAAMK,EAAcN,EAAQC,EAAQG,EAAWF,CAAI,GAAKD,EACxD,OAAIC,EAAK,SACPK,GAAY,CACV,gBAAiBL,EAAK,QACtB,OAAQI,EACR,gBAAiBF,EACjB,iBAAAD,EACA,QAAAH,CACF,CAAC,EAECE,EAAK,QACPK,GAAY,CACV,gBAAiBL,EAAK,OACtB,OAAQI,EACR,gBAAiBF,EACjB,iBAAAD,EACA,QAAAH,CACF,CAAC,EAEIM,CACT,CAUA,SAASC,GAAY,CAAE,gBAAAC,EAAiB,OAAAP,EAAQ,gBAAAQ,EAAiB,iBAAAN,EAAkB,QAAAH,CAAQ,EAAsB,CAC/G,OAAW,CAACU,EAAWC,CAAS,IAAK,OAAO,QAAQH,CAAe,EAAG,CACpE,GAAI,CAACG,GAAaV,EAAOS,CAAS,GAAK,MAAQE,GAAOD,CAAS,EAC7D,SAGF,IAAME,EADcV,EAAiB,OAAOM,CAAe,EACjC,OAAO,KAAMI,GAAUA,EAAM,OAASH,CAAS,EACzE,GAAI,CAACG,GAASA,EAAM,OAAS,UAAY,CAACA,EAAM,aAC9C,SAEF,IAAMX,EAAO,OAAOS,GAAc,SAAWA,EAAY,CAAC,EAC1DV,EAAOS,CAAS,EAAIX,GAAiB,CACnC,QAAAC,EACA,OAAQC,EAAOS,CAAS,EACxB,KAAAR,EACA,UAAWW,EAAM,KACjB,iBAAAV,CACF,CAAC,CACH,CACF,CCjEO,SAASW,GAAyB,CACvC,OAAAC,EACA,UAAAC,EACA,KAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,WAAAC,CACF,EAAmC,CASjC,OAJIF,EAAW,QAAQ,GAAKH,GAAU,MAAQ,OAAOA,GAAW,UAI5D,CADUI,EAAiB,OAAOH,CAAS,EAEtCD,EAGFM,GAAiB,CACtB,OAAAN,EACA,KAAME,GAAQ,CAAC,EACf,UAAAD,EACA,iBAAAG,EACA,QAAS,CAACG,EAAOC,EAAeN,IAAS,CACvC,IAAMO,EAASC,GAAkBF,CAAa,EAC9C,OAAOG,GAAsB,CAC3B,OAAQJ,EACR,UAAWE,EACX,OAAQP,EAAK,OAGb,KAAMA,EAAK,OAAS,OAAY,CAAE,GAAGG,IAAaI,CAAM,EAAG,GAAGP,EAAK,IAAK,EACxE,WAAAC,CACF,CAAC,CACH,CACF,CAAC,CACH,CC5DA,IAAMS,GAAW,CAAC,WAAY,cAAe,MAAO,eAAgB,UAAU,EAEjEC,GAAoBD,GCU1B,SAASE,GAAcC,EAAoD,CAChF,GAAIA,aAAgBC,GAClB,OAAOC,GAASF,CAAI,EAGtB,GAAIG,GAAWH,CAAI,EACjB,OAAOI,GAAcJ,CAAI,EAG3B,GAAI,MAAM,QAAQA,CAAI,EAAG,CACvB,IAAMK,EAAsB,CAACL,EAAK,CAAC,CAAC,EAEpC,QAASM,EAAI,EAAGA,EAAIN,EAAK,OAAQM,IAC/BD,EAAMC,CAAC,EAAIC,GAAeP,EAAKM,CAAC,CAAiB,EAGnD,OAAOD,CACT,CACA,IAAMA,EAAgB,CAAC,EACvB,QAAWG,KAAKR,EACdK,EAAMG,CAAC,EAAID,GAAeP,EAAKQ,CAAC,CAAC,EAEnC,OAAOH,CACT,CAEA,SAASH,GAASO,EAAoB,CACpC,OAAO,IAAIR,GAAIQ,EAAS,QAASA,EAAS,MAAM,CAClD,CAEA,SAASL,GAAcK,EAA4C,CACjE,OAAO,IAAIC,GAASD,EAAS,IAAKA,EAAS,MAAM,CACnD,CAGA,SAASF,GAAeI,EAA+B,CACrD,GAAI,OAAOA,GAAM,UAAYA,GAAK,MAAQA,aAAaC,IAAmBC,GAAWF,CAAC,EACpF,OAAOA,EAGT,GAAIG,GAAgBH,CAAC,EACnB,OAAO,IAAII,GAAQJ,EAAE,QAAQ,CAAC,EAGhC,GAAIK,GAAOL,CAAC,EACV,OAAO,IAAI,KAAK,CAACA,CAAC,EAGpB,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAOA,EAAE,MAAM,CAAC,EAGlB,GAAI,MAAM,QAAQA,CAAC,EAAG,CACpB,IAAIH,EAAIG,EAAE,OACNM,EACJ,IAAKA,EAAO,MAAMT,CAAC,EAAGA,KACpBS,EAAKT,CAAC,EAAID,GAAeI,EAAEH,CAAC,CAAC,EAE/B,OAAOS,CACT,CAEA,GAAI,OAAON,GAAM,SAAU,CACzB,IAAMM,EAAO,CAAC,EACd,QAAWT,KAAKG,EACVH,IAAM,YACR,OAAO,eAAeS,EAAMT,EAAG,CAC7B,MAAOD,GAAeI,EAAEH,CAAC,CAAC,EAC1B,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,CAAC,EAEDS,EAAKT,CAAC,EAAID,GAAeI,EAAEH,CAAC,CAAC,EAGjC,OAAOS,CACT,CAEAC,GAAYP,EAAG,eAAe,CAChC,CCnFA,SAASQ,GACPC,EACAC,EACAC,EACAC,EAAI,EACJ,CACA,OAAOH,EAAO,qBAAsBI,GAAgB,CAElD,IAAMC,EAAkBJ,EAAO,qBAY/B,MARI,gBAAiBA,GAAUG,IAAgB,SACzCH,EAAO,aAAa,OAAS,SAC1BA,EAAO,YAAY,KAAK,KAAK,EAEpCA,EAAO,YAAcG,GAInBD,IAAMD,EAAS,OACVF,EAAO,gBAAgBC,CAAM,EAI/BC,EAASC,CAAC,EAAE,CACjB,MAAOF,EAAO,MACd,UAAWA,EAAO,MAAQA,EAAO,OAASA,EAAO,aACjD,KAAMK,GAAcL,EAAO,MAAQ,CAAC,CAAC,EAErC,iBAAkBA,EAClB,MAAO,CAACM,EAAMC,EAAmBP,IAAW,CAG1C,IAAMQ,EAAkBD,EAAiB,qBACzC,OAAAA,EAAiB,qBAAuBE,GAA4BL,EAAiBI,CAAe,EACpGD,EAAiB,KAAOD,EAEjBR,GAA6BC,EAAQQ,EAAkBN,EAAUC,EAAI,CAAC,CAC/E,CACF,CAAC,CACH,CAAC,CACH,CAEO,SAASQ,GAAqBX,EAAgBC,EAA6C,CAChG,GAAM,CAAE,YAAAW,EAAa,OAAAC,EAAQ,aAAAC,CAAa,EAAIb,EACxCc,EAAYH,EAAcC,EAASC,EAGzC,GAAId,EAAO,YAAY,QAAQ,EAC7B,OAAOA,EAAO,gBAAgBC,CAAM,EAItC,IAAMe,EAAMhB,EAAO,YAAY,qBAAqBY,GAAe,QAASG,CAAS,EAErF,OAAOhB,GAA6BC,EAAQC,EAAQe,CAAG,CACzD,CAIO,SAASC,GAAmCC,EAAoC,CACrF,OAAQC,GAA8B,CACpC,IAAMlB,EAAS,CAAE,SAAAkB,CAAS,EACpBC,EAAYD,EAAS,CAAC,EAAE,WAAW,0BAA0B,EACnE,OAAKC,EAAU,OAIRC,GAA6BpB,EAAQmB,EAAW,EAAGF,CAAY,EAH7DA,EAAajB,CAAM,CAI9B,CACF,CAEO,SAASoB,GACdpB,EACAmB,EACAjB,EACAe,EACA,CACA,GAAIf,IAAMiB,EAAU,OAClB,OAAOF,EAAajB,CAAM,EAG5B,IAAMqB,EAAYrB,EAAO,qBACnBG,EAAcH,EAAO,SAAS,CAAC,EAAE,YACvC,OAAOmB,EAAUjB,CAAC,EAAE,CAClB,KAAM,CACJ,QAASF,EAAO,SAAS,IAAKsB,IAAa,CACzC,MAAOA,EAAQ,UACf,UAAWA,EAAQ,OACnB,KAAMA,EAAQ,IAChB,EAAE,EACF,YAAanB,EACT,CACE,eAAgBA,EAAY,OAAS,QAAUA,EAAY,eAAiB,MAC9E,EACA,MACN,EACA,iBAAkBH,EAClB,MAAMuB,EAAOhB,EAAmBP,EAAQ,CACtC,IAAMwB,EAAYjB,EAAiB,qBACnC,OAAAA,EAAiB,qBAAuBE,GAA4BY,EAAWG,CAAS,EACjFJ,GAA6Bb,EAAkBY,EAAWjB,EAAI,EAAGe,CAAY,CACtF,CACF,CAAC,CACH,CAEA,IAAMQ,GAAgDC,GAAMA,EAC5D,SAASjB,GAA4BY,EAAYI,GAAWD,EAAYC,GAA8C,CACpH,OAAQC,GAAML,EAAUG,EAAUE,CAAC,CAAC,CACtC,CChHA,IAAMC,GAAQC,GAAM,eAAe,EAO7BC,GAAmB,CACvB,OAAQ,SACR,aAAc,SAChB,EAaO,SAASC,GAAqB,CAAE,YAAAC,EAAa,OAAAC,EAAQ,cAAAC,EAAe,UAAAC,CAAU,EAAW,CAK9F,GAJAP,GAAM,mCAAoCI,CAAW,EACrDJ,GAAM,8BAA+BK,CAAM,EAGvCD,IAAgB,IAGhB,EAAAG,GAAW,QAGT,OAFWA,EAAU,OAAO,YAAcA,EAAU,OAAO,QAEzC,WAOpBF,GAAUA,KAAUH,GAAkB,CACxC,IAAMM,EAAU,sDAAsDH,CAAM;AAAA;AAAA,+BAEjDH,GAAiBG,CAAM,CAAC,SAEnD,cAAQ,MAAMG,CAAO,EAGf,IAAIC,EAAgCD,EAASF,CAAa,CAClE,CACF,CCtDO,SAASI,GACdC,EACAC,EACa,CACb,OAAKD,EAIDA,EAAQ,YACHA,EAAQ,YAGbA,EAAQ,cAEH,CAAE,CADiBC,EAAgB,CAAC,CAChB,EAAG,CAAE,IAAKD,EAAQ,aAAc,CAAE,EAExD,CAAC,EAXC,CAAC,CAYZ,CCZA,IAAAE,GAAkB,SADlB,OAAS,SAAAC,OAAa,qBAEtB,OAAOC,OAAQ,UAEf,IAAAC,GAAmB,SCVnB,OAAOC,OAAQ,UAEf,OAAOC,OAAU,YACjB,OAAOC,OAAY,cACnB,OAAQ,aAAAC,OAAgB,YCJxB,OAAQ,aAAAC,OAAgB,YACxB,OAAOC,OAAY,cAEnB,IAAMC,GAAmBF,GAAUC,GAAO,WAAW,EAE/CE,GAAoB,qEAAqE,MAAM,EAAE,EACjGC,GAAoB,aAAa,MAAM,EAAE,EACzCC,GAA4B,sBAAsB,MAAM,EAAE,EAC1DC,GAA2B,mGAAmG,MAAM,EAAE,EACtIC,GAAyB,iEAAiE,MAAM,EAAE,EAElGC,GAA8B,CAACC,EAAQC,IAAe,CAE3D,IAAMC,EAAiBD,EAAW,OAC5BE,EAAoB,KAAK,MAAM,MAAUD,CAAc,EAAIA,EAAkB,EAC7EE,EAAgB,EAAI,KAAK,KAAK,IAAMJ,CAAM,EAC5CK,EAAS,GACTC,EAAe,EAEnB,KAAOA,EAAeN,GAAQ,CAC7B,IAAMO,EAAUf,GAAO,YAAYY,CAAa,EAC5CI,EAAkB,EAEtB,KAAOA,EAAkBJ,GAAiBE,EAAeN,GAAQ,CAChE,IAAMS,EAAeF,EAAQ,aAAaC,CAAe,EACzDA,GAAmB,EACf,EAAAC,EAAeN,KAInBE,GAAUJ,EAAWQ,EAAeP,CAAc,EAClDI,IACD,CACD,CAEA,OAAOD,CACR,EAEMK,GAAmC,MAAOV,EAAQC,IAAe,CAEtE,IAAMC,EAAiBD,EAAW,OAC5BE,EAAoB,KAAK,MAAM,MAAUD,CAAc,EAAIA,EAAkB,EAC7EE,EAAgB,EAAI,KAAK,KAAK,IAAMJ,CAAM,EAC5CK,EAAS,GACTC,EAAe,EAEnB,KAAOA,EAAeN,GAAQ,CAC7B,IAAMO,EAAU,MAAMd,GAAiBW,CAAa,EAChDI,EAAkB,EAEtB,KAAOA,EAAkBJ,GAAiBE,EAAeN,GAAQ,CAChE,IAAMS,EAAeF,EAAQ,aAAaC,CAAe,EACzDA,GAAmB,EACf,EAAAC,EAAeN,KAInBE,GAAUJ,EAAWQ,EAAeP,CAAc,EAClDI,IACD,CACD,CAEA,OAAOD,CACR,EAEMM,GAAsB,CAACC,EAAYC,EAAMb,IAAWR,GAAO,YAAYoB,CAAU,EAAE,SAASC,CAAI,EAAE,MAAM,EAAGb,CAAM,EAEjHc,GAA2B,MAAOF,EAAYC,EAAMb,KAC1C,MAAMP,GAAiBmB,CAAU,GAClC,SAASC,CAAI,EAAE,MAAM,EAAGb,CAAM,EAGvCe,GAAe,IAAI,IAAI,CAC5B,OACA,MACA,SACA,WACA,UACA,kBACA,kBACA,cACD,CAAC,EAEKC,GAAkB,CAACjB,EAA6BY,IAAwB,CAAC,CAAC,OAAAX,EAAQ,KAAAa,EAAM,WAAAZ,CAAU,IAAM,CAC7G,GAAI,EAAED,GAAU,GAAK,OAAO,SAASA,CAAM,GAC1C,MAAM,IAAI,UAAU,wDAAwD,EAG7E,GAAIa,IAAS,QAAaZ,IAAe,OACxC,MAAM,IAAI,UAAU,wCAAwC,EAG7D,GAAIA,IAAe,QAAa,OAAOA,GAAe,SACrD,MAAM,IAAI,UAAU,oCAAoC,EAGzD,GAAI,CAACc,GAAa,IAAIF,CAAI,EACzB,MAAM,IAAI,UAAU,iBAAiBA,CAAI,EAAE,EAO5C,GAJIA,IAAS,QAAaZ,IAAe,SACxCY,EAAO,OAGJA,IAAS,OAAUA,IAAS,QAAaZ,IAAe,OAC3D,OAAOU,EAAoB,KAAK,KAAKX,EAAS,EAAG,EAAG,MAAOA,CAAM,EAGlE,GAAIa,IAAS,SACZ,OAAOF,EAAoB,KAAK,KAAKX,EAAS,GAAI,EAAG,SAAUA,CAAM,EAGtE,GAAIa,IAAS,WACZ,OAAOd,EAA4BC,EAAQN,EAAiB,EAG7D,GAAImB,IAAS,UACZ,OAAOd,EAA4BC,EAAQL,EAAiB,EAG7D,GAAIkB,IAAS,kBACZ,OAAOd,EAA4BC,EAAQJ,EAAyB,EAGrE,GAAIiB,IAAS,kBACZ,OAAOd,EAA4BC,EAAQH,EAAwB,EAGpE,GAAIgB,IAAS,eACZ,OAAOd,EAA4BC,EAAQF,EAAsB,EAGlE,GAAIG,EAAW,SAAW,EACzB,MAAM,IAAI,UAAU,sEAAsE,EAG3F,GAAIA,EAAW,OAAS,MACvB,MAAM,IAAI,UAAU,kEAAkE,EAGvF,OAAOF,EAA4BC,EAAQC,EAAW,MAAM,EAAE,CAAC,CAChE,EAEMgB,GAAqBD,GAAgBjB,GAA6BY,EAAmB,EAE3FM,GAAmB,MAAQD,GAAgBN,GAAkCI,EAAwB,EAErG,IAAOI,GAAQD,GCjJA,SAARE,IAAgC,CACtC,OAAOC,GAAmB,CAAC,OAAQ,EAAE,CAAC,CACvC,CFEA,IAAAC,GAAoB,WAsDpB,IAAAC,GAAgD,WAnD1CC,GAAWC,GAAUC,GAAO,QAAQ,EAEpCC,GAAU,CAACC,EAAS,KAAOC,GAAK,KAAK,GAAAC,QAASF,EAASG,GAAa,CAAC,EAYpE,SAASC,GAAc,CAAC,KAAAC,EAAM,UAAAC,CAAS,EAAI,CAAC,EAAG,CACrD,GAAID,EAAM,CACT,GAA+BC,GAAc,KAC5C,MAAM,IAAI,MAAM,2DAA2D,EAG5E,OAAOC,GAAK,KAAKC,GAAmB,EAAGH,CAAI,CAC5C,CAEA,OAAOI,GAAQ,GAAgCH,GAAc,KAAO,GAAK,IAAMA,EAAU,QAAQ,MAAO,EAAE,EAC3G,CAIO,SAASI,GAAmB,CAAC,OAAAC,EAAS,EAAE,EAAI,CAAC,EAAG,CACtD,IAAMC,EAAYC,GAAQF,CAAM,EAChC,OAAAG,GAAG,UAAUF,CAAS,EACfA,CACR,CGxBO,SAASG,GAAWC,EAA6C,CACtE,OAAI,OAAOA,GAAQ,SACVA,EAEAA,EAAI,OAEf,CAEO,SAASC,GAAaD,EAAsB,CACjD,GAAIA,EAAI,QAAQ,QAAS,CACvB,IAAIE,EAAMF,EAAI,QAAQ,QACtB,OAAIA,EAAI,QAAQ,OACdE,GAAO,OAAOF,EAAI,OAAO,IAAI,GACzBA,EAAI,QAAQ,OACdE,GAAO,IAAIF,EAAI,OAAO,IAAI,IAExBA,EAAI,QAAQ,SACdE,GAAO,IAAIF,EAAI,OAAO,MAAM,KAG5BA,EAAI,QAAQ,SACdE,GAAO;AAAA,EAAKF,EAAI,QAAQ,MAAM,IAEzBE,CACT,CAEA,MAAO,eACT,CAEO,SAASC,GAAQC,EAAuB,CAC7C,OAAOA,EAAI,QAAQ,UAAY,OACjC,CAEO,SAASC,GAAUC,EAAsB,CAC9C,OAAOA,EAAE,WAAa,OAAOA,EAAE,OAAU,UAAY,OAAOA,EAAE,QAAW,QAC3E,CAEO,SAASC,GAAeD,EAAsB,CACnD,OAAOD,GAAUC,CAAC,IAAMA,EAAE,QAAU,SAAWA,EAAE,QAAQ,SAAS,SAAS,aAAa,EAC1F,CAmCO,SAASE,GAAWC,EAA8B,CAEvD,IAAMC,EADUC,GAAWF,EAAQ,MAAM,EACP,QAAWA,EAAQ,MAAM,YAAY,EACvE,MAAO,CACL,GAAGA,EACH,MAAAC,EACA,UAAW,IAAI,KAAKD,EAAQ,SAAS,CACvC,CACF,CAEA,SAASE,GAAWC,EAAuC,CACzD,MAAO,EAAQA,EAAO,KACxB,CC9FO,IAAMC,GAAN,cAAoC,KAAM,CAC/C,cACQ,SAER,YAAY,CAAE,cAAAC,EAAe,MAAAC,CAAM,EAA8B,CAC/D,IAAMC,EAAYC,GAAaF,CAAK,EACpC,MAAMC,GAAa,eAAe,EAElC,KAAK,SAAWE,GAAQH,CAAK,EAC7B,KAAK,cAAgBD,CACvB,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,uBACT,CAEO,SAAmB,CACxB,OAAO,KAAK,QACd,CACF,EAEAK,EAAaN,GAAuB,uBAAuB,EC1B3D,OAAOO,OAAQ,UACf,OAAOC,OAAU,YCDV,SAASC,GAA8BC,EAAiC,CAC7E,GAAM,CAAE,oBAAAC,CAAoB,EAAID,EAEhC,MAAO,QAAQC,CAAmB;AAAA;AAAA,EAElCC,GAA4BF,CAAK,CAAC,EACpC,CAEA,SAASE,GAA4BF,EAAiC,CACpE,GAAM,CAAE,UAAAG,EAAW,uBAAAC,EAAwB,oBAAAH,CAAoB,EAAID,EAC7DK,EAAwB,CAAE,WAAY,KAAM,MAAOJ,CAAoB,EACvEK,EAAgB,CAAC,GAAGF,EAAwBC,CAAqB,EAEvE,OAAOE,GAAqB,CAAE,GAAGJ,EAAW,cAAAG,CAAc,CAAC,CAC7D,CChBO,SAASE,GAAyBC,EAAiC,CACxE,GAAM,CAAE,oBAAAC,CAAoB,EAAID,EAEhC,MAAO,gEAAgEC,CAAmB,IAC5F,CCJO,SAASC,GAA+BC,EAAiC,CAC9E,GAAM,CAAE,kBAAAC,CAAkB,EAAID,EAK9B,MAAO;AAAA,EAHuB,CAAC,GAAG,IAAI,IAAIC,CAAiB,CAAC,EACL,IAAKC,GAAa,KAAKA,CAAQ,EAAE,EAAE,KAAK;AAAA,CAAI,CAG3E,EAC1B,CCLO,SAASC,GAAkCC,EAAiC,CACjF,GAAM,CAAE,oBAAAC,CAAoB,EAAID,EAEhC,MAAO,GAAGE,GAAyBF,CAAK,CAAC;AAAA;AAAA,qGAE0DC,CAAmB;AAAA,EACtHE,GAA8BH,CAAK,CAAC;AAAA;AAAA,EAEpCI,GAA+BJ,CAAK,CAAC,EACvC,CCdO,SAASK,GAAqCC,EAAgB,CACnE,MAAO;AAAA,+DACsDA,CAAM,EACrE,CCDO,SAASC,GAA6BC,EAAiC,CAC5E,GAAM,CAAE,WAAAC,CAAW,EAAID,EAEvB,OAAIC,GAAY,MAAM,2BAA2B,EACxC;AAAA;AAAA,2GAGF,EACT,CCJO,SAASC,GAAiCC,EAAiC,CAChF,GAAM,CAAE,gBAAAC,CAAgB,EAAID,EAE5B,MAAO,GAAGE,GAAyBF,CAAK,CAAC,GAAGG,GAA6BH,CAAK,CAAC;AAAA;AAAA,0DAEvBC,CAAe;AAAA,eAC1DA,CAAe,+CAA+CD,EAAM,gBAAgB;AAAA;AAAA,EAEjGI,GAAqC,wCAAwC,CAAC;AAAA;AAAA,EAE9EC,GAA+BL,CAAK,CAAC,EACvC,CCZO,SAASM,GAAmCC,EAAiC,CAClF,GAAM,CAAE,oBAAAC,EAAqB,uBAAAC,CAAuB,EAAIF,EAClDG,EAAqBD,EAAuB,KAAME,GAAOA,EAAG,MAAM,EAExE,MAAO,GAAGC,GAAyBL,CAAK,CAAC;AAAA;AAAA,yDAGvCG,GAAoB,OAAS,SAC/B,0CAA0CF,CAAmB;AAAA,EAC7DK,GAA8BN,CAAK,CAAC;AAAA;AAAA,EAEpCO,GAA+BP,CAAK,CAAC,EACvC,CCXO,SAASQ,GAAiCC,EAAiC,CAChF,GAAM,CAAE,gBAAAC,CAAgB,EAAID,EAE5B,MAAO,GAAGE,GAAyBF,CAAK,CAAC,GAAGG,GAA6BH,CAAK,CAAC;AAAA;AAAA,wDAEzBC,CAAe;AAAA,oDACnBA,CAAe,yBAAyBD,EAAM,gBAAgB;AAAA;AAAA,EAEhHI,GAAqC,wCAAwC,CAAC;AAAA;AAAA,EAE9EC,GAA+BL,CAAK,CAAC,EACvC,CTFA,IAAMM,GAAQC,GAAM,yCAAyC,EAGvDC,GAAmB,IAAM,IAAI,OAAO,8BAA4C,EAUtF,eAAsBC,GAAkBC,EAA8BC,EAAsB,CAE1F,IAAMC,EACJ,CACE,OAAQ,QAAQ,IAAI,2BACpB,QAAS,QAAQ,IAAI,2BACvB,EAAEF,CAAU,GAAKC,EAAO,WAE1B,GAAIC,IAAe,OAAW,OAAOA,EAGrC,GAAM,CAAE,WAAAC,EAAY,kBAAAC,CAAkB,EAAI,MAAMC,GAAeL,EAAYC,CAAM,EAMjF,GAJAL,GAAM,aAAcO,CAAU,EAG1BA,IAAe,QAAaH,IAAe,UAAyBM,GAAWH,CAAU,EACzFA,IAAe,OAAW,OAAQF,EAAO,WAAaE,EAG1D,IAAMI,EAAe,MAAMC,GAAkC,EACvDC,EAAyBR,EAAO,WAAW,eAAiB,CAAC,EAC7DS,EAAwBD,EAAuB,KAAME,GAAOA,EAAG,MAAM,EACrEC,EAAyB,CAACH,EAAuB,KAAME,GAAOA,EAAG,QAAUJ,CAAY,EACvFM,EAAuB,WAAW,MAAMf,GAAiB,CAAC,IAAM,KAEhEgB,EAAuC,CAC3C,kBAAAV,EACA,uBAAAK,EACA,UAAWR,EAAO,UAClB,oBAAqBM,EACrB,gBAAiBQ,GAAmBf,EAAYO,CAAY,EAC5D,iBAAkBS,GAAK,SAAS,QAAQ,IAAI,EAAGf,EAAO,OAAO,EAC7D,WAAY,IAAI,MAAM,EAAE,KAC1B,EAEIgB,EACJ,MAAIP,GAAyBE,EAC3BK,EAAeC,GAAmCJ,CAAU,EACnDF,EACTK,EAAeE,GAAkCL,CAAU,EAClDD,EACTI,EAAeG,GAAiCN,CAAU,EAE1DG,EAAeI,GAAiCP,CAAU,EAGtD,IAAIQ,EAAgCL,EAAchB,EAAO,aAAc,CAC/E,CASA,eAAeI,GAAeL,EAA8BC,EAAsB,CAChF,IAAMM,EAAe,MAAMC,GAAkC,EACvDJ,EAA8B,CAAC,EAE/BmB,EAA4B,CAChCtB,EAAO,QACPe,GAAK,QAAQ,UAAW,IAAI,EAC5Bf,EAAO,WAAW,QAAQ,OAAS,UACnCe,GAAK,QAAQ,UAAW,yBAAyB,EACjD,sBACAf,EAAO,GACT,EAEI,WAAW,SAAS,mBAAmB,GACzCsB,EAAgB,KAAKC,GAAe,CAAC,EAGvC,QAAWC,KAAYF,EAAiB,CACtC,IAAMG,EAAaX,GAAmBf,EAAYO,CAAY,EACxDJ,EAAaa,GAAK,KAAKS,EAAUC,CAAU,EAGjD,GADAtB,EAAkB,KAAKqB,CAAQ,EAC3BE,GAAG,WAAWxB,CAAU,EAC1B,MAAO,CAAE,WAAAA,EAAY,kBAAAC,CAAkB,CAE3C,CAEA,MAAO,CAAE,WAAY,OAAW,kBAAAA,CAAkB,CACpD,CASO,SAASW,GAAmBf,EAA8BO,EAA4B,CAC3F,OAAIP,IAAe,UACV4B,GAAerB,EAAc,IAAI,EAEjC,gBAAgBA,CAAY,GAAGA,IAAiB,UAAY,OAAS,EAAE,EAElF,CUhIO,SAASsB,GAAUC,EAAwB,CAChD,OAAKA,EAIHA,EAEG,QAAQ,QAAS,KAAK,EAEtB,QAAQ,oCAAsCC,GACtC,GAAGA,EAAO,CAAC,CAAC,GACpB,EATI,EAWX,CCTO,SAASC,GAAcC,EAAsB,CAClD,OAAOA,EACJ,MAAM;AAAA,CAAI,EACV,IAAKC,GACGA,EACJ,QAAQ,+EAAgF,EAAE,EAC1F,QAAQ,cAAe,EAAE,CAC7B,EACA,KAAK;AAAA,CAAI,CACd,CCbA,IAAAC,GAA8B,SAEvB,SAASC,GAAkB,CAChC,MAAAC,EACA,KAAAC,EAAO,SACP,KAAAC,EAAO,SACP,SAAAC,EAAW,iBACX,KAAAC,CACF,EAMW,CACT,SAAO,GAAAC,SAAkB,CACvB,KAAAJ,EACA,KAAAC,EACA,SAAAC,EACA,MAAAH,EACA,KAAAI,CACF,CAAC,CACH,CCbO,SAASE,GAAwB,CACtC,QAAAC,EACA,aAAAC,EACA,MAAAC,EACA,YAAAC,EACA,cAAAC,EACA,SAAAC,EACA,MAAAC,CACF,EAAuB,CACrB,IAAMC,EAAUC,GAAQ,KAAQF,GAAO,QAAU,EAAE,EAC7CG,EAAOC,GAAcC,GAAUJ,CAAO,CAAC,EACvCK,EAAWT,EAAc;AAAA;AAAA,EAA0BA,CAAW;AAAA,QAAa,GAC3EU,EAAOF,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKkB,QAAQ,SAAS,OAAO,EAAE,CAAC;AAAA,sBAC3BV,GAAc,OAAO,EAAE,CAAC;AAAA,sBACxBD,GAAS,OAAO,EAAE,CAAC;AAAA,sBACnBI,GAAe,OAAO,EAAE,CAAC;AAAA,sBACzBC,GAAU,OAAO,EAAE,CAAC;AAAA;AAAA,EAExCO,CAAQ;AAAA;AAAA;AAAA;AAAA,EAIRH,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeJH,EAAQQ,GAAUR,CAAK,EAAI,EAAE;AAAA;AAAA,CAG7B,EAEMS,EAAMC,GAAkB,CAAE,MAAAd,EAAO,KAAAW,CAAK,CAAC,EAC7C,MAAO,GAAGX,CAAK;AAAA;AAAA;AAAA;AAAA,EAIfe,GAAUF,CAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,CAMhB,CCpEA,IAAAG,GAAsB,SAYhBC,GAAS,IAAM,KAMrB,SAASC,GAAiBC,EAAyC,CACjE,GAAIA,IAAS,OACX,MAAM,IAAI,MAAM,gCAAgC,CAEpD,CAKO,IAAMC,GAAN,KAAiB,CACd,MAER,aAAc,CAAC,CASf,aAAa,YAAmBC,EAA8BC,EAAoC,CAChG,IAAMC,EAAY,MAAMF,EAExB,OAAIE,EAAU,YAAc,IACnBD,EAAQC,CAAS,EAGnBA,CACT,CAQA,KAAKC,EAAmBC,EAAwB,CAC1C,KAAK,QAET,KAAK,MAAQ,IAAKR,GAAO,GAAE,KAAMO,EAAK,CACpC,YAAa,IACb,oBAAqB,IACrB,eAAgB,EAChB,YAAa,EACb,GAAGC,CACL,CAAC,EACH,CAWA,MAAM,IACJC,EACAC,EACAC,EACAC,EACAC,EAAgB,GACI,CACpBZ,GAAc,KAAK,KAAK,EAExB,IAAMG,EAAW,MAAM,KAAK,MAAM,QAAQ,CACxC,KAAMM,EACN,OAAQD,EACR,QAAS,CACP,eAAgB,mBAChB,GAAGE,CACL,EACA,KAAMC,CACR,CAAC,EAEKE,EAAa,QAAM,GAAAC,SAAUX,EAAS,IAAI,EAEhD,MAAO,CACL,WAAYA,EAAS,WACrB,QAASA,EAAS,QAClB,KAAMS,EAAgB,KAAK,MAAMC,CAAU,EAAIA,CACjD,CACF,CAUA,KACEJ,EACAE,EACAD,EACAE,EACA,CACA,OAAO,KAAK,IAAO,OAAQH,EAAUC,EAASC,EAAMC,CAAa,CACnE,CASA,IAAOG,EAAcL,EAAiD,CACpE,OAAO,KAAK,IAAO,MAAOK,EAAML,CAAO,CACzC,CAKA,OAAQ,CACF,KAAK,OACP,KAAK,MAAM,MAAM,IAAM,CAEvB,CAAC,EAGH,KAAK,MAAQ,MACf,CACF,EpB1GA,IAAMM,GAAQC,GAAM,eAAe,EAG7BC,GAAS,IAAIC,IAAS,CAAC,EAMvBC,GAAqC,CAAC,GAAGC,GAAe,QAAQ,EAYhEC,GAA0B,CAAC,EAE3BC,GAAa,QAAQ,IAAI,uBAAyB,EAAI,EACtDC,GAAsB,QAAQ,IAAI,uBAAyB,EAAI,EAExDC,GAAN,KAAgD,CACrD,KAAO,eACC,OACA,WACA,WACA,WACA,IACA,MACA,gBACA,kBACA,MACA,cACA,yBACA,WAAa,EACb,eACA,UACA,YACA,mBACA,IACA,cACA,WAAa,GACb,sBACA,oBAIA,aACA,oBACA,aACA,eACA,oBACA,mBACA,WACA,UACA,YACA,mBACA,eACA,cAMR,YAAYC,EAAsB,CAChC,KAAK,OAASA,EACd,KAAK,IAAMA,EAAO,IAClB,KAAK,IAAM,KAAK,WAAWA,EAAO,GAAG,EACrC,KAAK,gBAAkBA,EAAO,iBAAmB,GACjD,KAAK,kBAAoBA,EAAO,mBAAqB,GACrD,KAAK,cAAgBA,EAAO,cAC5B,KAAK,WAAaA,EAAO,WACzB,KAAK,WAAaA,EAAO,YAAc,GACvC,KAAK,WAAaA,EAAO,YAAc,GACvC,KAAK,cAAgBA,EAAO,cAC5B,KAAK,MAAQA,EAAO,OAAS,CAAC,EAC9B,KAAK,eAAiBA,EAAO,eAC7B,KAAK,WAAa,IAAIC,GAEtB,KAAK,cAAgBC,GAAc,CAAE,UAAW,QAAS,CAAC,EAC1DC,GAAG,cAAc,KAAK,cAAeH,EAAO,YAAY,EAGxD,IAAMI,EAAiB,OAAO,KAAKJ,EAAO,mBAAmB,EAAE,CAAC,EAC1DK,EAAgBL,EAAO,oBAAoBI,CAAc,GAAG,IASlE,GARIA,IAAmB,QAAaC,IAAkB,SACpD,KAAK,oBAAsB,CAAC,CAAE,KAAMD,EAAgB,IAAKC,CAAc,CAAC,GAG1EC,GAAU,EAEV,KAAK,eAAiBN,EAAO,eAEzB,KAAK,cACP,GAAI,CAACN,GAAmB,SAAS,KAAK,YAA4B,GAAK,CAACS,GAAG,WAAW,KAAK,YAAY,EACrG,MAAM,IAAII,EACR,WAAWC,GAAI,4BAA4B,CAAC,IAAIA,GAC9CC,GAAK,KAAK,YAAY,CACxB,CAAC,6BAA6BC,GAAMhB,GAAmB,KAAK,IAAI,CAAC,CAAC;AAAA,sBACtDgB,GAAM,iBAAiB,CAAC,oCACpC,KAAK,aACP,OAGG,KAAK,uBAAuB,EAE/B,KAAK,iBACPnB,GAAM,OAAO,GAAG,EAElBK,GAAQ,KAAK,IAAI,CACnB,CAMQ,SAASe,EAAoB,CAC/BC,GAAeD,CAAG,IACpB,KAAK,UAAY,IAAIE,GAAsB,CACzC,cAAe,KAAK,cACpB,MAAOF,CACT,CAAC,EACG,KAAK,UAAU,QAAQ,IACrB,KAAK,QACP,KAAK,YAAcG,GAAmB,KAAK,KAAK,GAE9C,KAAK,uBAAuB,QAC9B,KAAK,sBAAsB,OAAO,GAI1C,CAEQ,WAAWC,EAAqB,CACtC,OAAIZ,GAAG,WAAWY,CAAG,GAAKZ,GAAG,UAAUY,CAAG,EAAE,YAAY,EAC/CA,EAGF,QAAQ,IAAI,CACrB,CAEA,aAAaC,EAA+B,CAC1C,KAAK,mBAAqBA,CAC5B,CAEA,MAAM,UAAW,CACf,GAAI,KAAK,mBACP,GAAI,CACF,MAAM,KAAK,mBAAmB,CAChC,OAAS,EAAG,CACV,QAAQ,MAAM,CAAC,CACjB,CAEJ,CAEA,MAAc,wBAAgD,CAC5D,OAAI,KAAK,oBACA,KAAK,qBAGd,KAAK,oBAAsB,KAAK,cAAc,eAAe,kBAAmB,IAC9EC,GAAkC,CACpC,EAEO,KAAK,oBACd,CAEQ,kBAA2B,CACjC,OAAI,KAAK,oBACA,KAAK,UAAU,KAAK,mBAAmB,EAGzC,IACT,CAKA,MAAM,OAAuB,CACvB,KAAK,aACP,MAAM,KAAK,YAIb,IAAMC,EAAU,CAAE,MAAO,EAAG,EACtBC,EAAqB,SAAY,CACrC,GAAI,CACF,MAAM,KAAK,cAAc,eAAe,eAAgB,IAAM,KAAK,uBAAuB,CAAC,CAC7F,OAASC,EAAG,CACV,MAAIA,EAAE,YAAc,IAAQF,EAAQ,MAAQ,IAC1CA,EAAQ,QACR,MAAMC,EAAmB,GAGrBC,CACR,CACF,EAEMC,EAAU,SAAY,CAQ1B,GAPK,KAAK,eACR,KAAK,aACL,KAAK,aAAeF,EAAmB,GAGzC,MAAM,KAAK,aAEP,CAAC,KAAK,OAAS,CAAC,KAAK,eACvB,MAAM,IAAIG,GAAgC,gEAAiE,CACzG,cAAe,KAAK,aACtB,CAAC,CAEL,EAEA,OAAI,KAAK,aACAD,EAAQ,EAGV,KAAK,cAAc,eAAe,UAAWA,CAAO,CAC7D,CAEQ,kBAAmB,CACzB,IAAME,EAA8B,CAClC,gBAAiB,KAAK,aACxB,EAEA,OAAI,KAAK,aACPA,EAAI,YAAc,QAGhB,KAAK,sBACPA,EAAI,sBAAwB,KAAK,iBAAiB,GAGhD,CAAC,QAAQ,IAAI,UAAY,KAAK,aAChCA,EAAI,eAAiB,KAGhB,CACL,GAAG,KAAK,IACR,GAAG,QAAQ,IACX,GAAGA,EAEH,eAAgB,QAAQ,IAAI,gBAAkB,IAC9C,SAAU,QAAQ,IAAI,UAAY,MACpC,CACF,CAEA,MAAc,wBAAwC,CACpD,MAAM,KAAK,cAAc,EAEzB,IAAMC,EAAQ,MAAMvB,GAAW,YAAY,KAAK,WAAW,IAAiB,aAAa,EAAIwB,GAC3F,KAAK,iBAAiBA,CAAM,CAC9B,EAEA,KAAK,cAAc,oBAAoBD,EAAM,KAAK,KAAK,CACzD,CAEQ,eAA+B,CAErC,OAAO,IAAI,QAAQ,MAAOE,EAASC,IAAW,CAK5C,GAJA,MAAM,IAAI,QAASC,GAAM,QAAQ,SAASA,CAAC,CAAC,EACxC,KAAK,aACP,MAAM,KAAK,YAET,KAAK,eAAgB,CACvB,GAAI,CACF,KAAK,WAAW,KAAK,KAAK,cAAc,EACxC,QAAM,GAAAC,SAAO,IAAM,KAAK,WAAW,IAAI,SAAS,EAAG,CACjD,QAAS,EACX,CAAC,CACH,OAAST,EAAG,CACV,OAAOO,EAAOP,CAAC,CACjB,CACA,OAAOM,EAAQ,CACjB,CACA,GAAI,EACE,KAAK,OAAO,WAAc,KAAK,OAAS,CAAC,KAAK,OAAO,SACvDpC,GAAM,6DAA6D,EAIrE,KAAK,UAAY,OACjBE,GAAO,oBAAoB,EAC3B,KAAK,yBAA2B,OAEhCF,GAAM,OAAQ,KAAK,GAAG,EAEtB,IAAMwC,EAAa,MAAMC,YAA2C,KAAK,MAAM,EAEzEC,EAAiB,KAAK,kBAAoB,CAAC,SAAS,EAAI,CAAC,EAEzDC,EAAQ,CACZ,uBACA,mBACA,0BACA,GAAG,KAAK,MACR,GAAGD,CACL,EAEAC,EAAM,KAAK,SAAU,GAAG,EACxBA,EAAM,KAAK,oBAAqB,MAAM,EAEtC3C,GAAM,CAAE,MAAA2C,CAAM,CAAC,EAEf,IAAMV,EAAM,KAAK,iBAAiB,EAuLlC,GArLA,KAAK,MAAQW,GAAMJ,EAAYG,EAAO,CACpC,IAAAV,EACA,IAAK,KAAK,IACV,YAAa,GACb,MAAO,CAAC,SAAU,OAAQ,MAAM,CAClC,CAAC,EAEDY,GAAO,KAAK,MAAM,MAAM,EAAE,GAAG,OAASC,GAAQ,CAC5C,IAAMC,EAAO,OAAOD,CAAG,EACvB9C,GAAM,SAAU+C,CAAI,EAEpB,GAAI,CACF,IAAMC,EAAO,KAAK,MAAMD,CAAI,EAC5B,GAAI,OAAOC,EAAK,SAAa,MAC3BhD,GAAMgD,CAAI,EACV,KAAK,SAASA,CAAI,EACd,KAAK,qBAAqB,CAC5B,IAAM3B,EAAM,IAAIJ,EAAgC+B,EAAK,QAAS,KAAK,cAAgBA,EAAK,UAAU,EAClG,KAAK,oBAAoB,OAAO3B,CAAG,CACrC,CAEJ,MAAY,CACN,CAAC0B,EAAK,SAAS,oBAAoB,GAAK,CAACA,EAAK,SAAS,eAAe,IACxE,KAAK,YAAc;AAAA,EAAOA,EAE9B,CACF,CAAC,EAEDF,GAAO,KAAK,MAAM,MAAM,EAAE,GAAG,OAASC,GAAQ,CAC5C,IAAMC,EAAO,OAAOD,CAAG,EAEvB,GAAI,CACF,IAAME,EAAO,KAAK,MAAMD,CAAI,EAG5B,GAFA/C,GAAM,SAAUiD,GAAWD,CAAI,CAAC,EAG9B,KAAK,qBACLA,EAAK,QAAU,QACfA,EAAK,SAAW,wBAChBA,EAAK,QAAQ,SAAS,WAAW,kCAAkC,EACnE,CACA,IAAME,EAAKF,EAAK,OAAO,GACjBG,EAAOH,EAAK,OAAO,KAEzB,GAAIE,IAAO,QAAaC,IAAS,OAAW,CAC1C,KAAK,oBAAoB,OACvB,IAAIlC,EACF,iIACA,KAAK,aACP,CACF,EACA,MACF,CAEA,KAAK,WAAW,KAAK,UAAUiC,CAAE,IAAIC,CAAI,EAAE,EAC3C,KAAK,oBAAoB,QAAQ,EACjC,KAAK,oBAAsB,MAC7B,CAKA,GAAI,OAAOH,EAAK,SAAa,IAAa,CACxC,IAAMI,EAAMC,GAAWL,CAAI,EAEQ1B,GAAe8B,CAAG,EAEnD,KAAK,SAASA,CAAG,EACRA,EAAI,QAAU,QACvB,KAAK,WAAW,KAAKA,EAAI,MAAO,CAC9B,UAAWA,EAAI,UACf,MAAOA,EAAI,OAAO,MAClB,OAAQA,EAAI,OAAO,OACnB,SAAUA,EAAI,OAAO,YACrB,OAAQA,EAAI,MACd,CAAC,EAED,KAAK,WAAW,KAAKA,EAAI,MAAuB,CAC9C,UAAWA,EAAI,UACf,QAASA,EAAI,OAAO,QACpB,OAAQA,EAAI,MACd,CAAC,CAEL,MACE,KAAK,SAASJ,CAAI,CAEtB,OAASlB,EAAG,CACV9B,GAAM8B,EAAGiB,CAAI,CACf,CACF,CAAC,EAED,KAAK,MAAM,GAAG,OAASO,GAAe,CAGpC,GAFApD,GAAO,uBAAuB,EAC9B,KAAK,aAAe,OAChB,KAAK,mBAAoB,CAC3B,KAAK,mBAAmB,QAAQoD,CAAI,EACpC,MACF,CAIA,GAHA,KAAK,WAAW,MAAM,EAGlBA,IAAS,GAAK,KAAK,qBAAuB,KAAK,aAAe,EAAG,CACnE,IAAIjC,EACAyB,EAAM,KAAK,WAEX,KAAK,YACPA,EAAMG,GAAW,KAAK,SAAS,GAE7BK,IAAS,MACXjC,EAAM,IAAIJ,EACR,iCAAiCqC,CAAI;AAAA,EAAOR,EAC5C,KAAK,aACP,EACAzB,EAAI,UAAY,IACP,KAAK,OAAO,YACrBA,EAAM,IAAIJ,EACR,2CAA2C,KAAK,MAAM,UAAU;AAAA,sCAC1CuB,CAAU;AAAA,EAAuBM,EACvD,KAAK,aACP,EACAzB,EAAI,UAAY,IAEhBA,EAAM,IAAIJ,EAAgC6B,EAAK,KAAK,aAAc,EAGpE,KAAK,oBAAoB,OAAOzB,CAAG,CACrC,CACK,KAAK,QAGN,KAAK,WAGLiC,IAAS,KACX,KAAK,SAAS,CACZ,UAAW,IAAI,KACf,OAAQ,6BACR,MAAO,QACP,OAAQ,CACN,QAAS;AAAA,iFAEX,CACF,CAAC,EAEL,CAAC,EAED,KAAK,MAAM,GAAG,QAAUjC,GAAc,CACpC,KAAK,SAAS,CACZ,UAAW,IAAI,KACf,OAAQ,8BACR,MAAO,QACP,OAAQ,CACN,QAAS,gCAAgCA,CAAG,EAC9C,CACF,CAAC,EACDgB,EAAOhB,CAAG,CACZ,CAAC,EAED,KAAK,MAAM,GAAG,QAAS,CAACiC,EAAMC,IAAiB,CAC7C,KAAK,WAAW,MAAM,EAEtB,IAAIC,EAEAF,IAAS,MAAQC,IAAW,WAAa,KAAK,MAChDC,EAAS,IAAIC,GACX,KAAK,wBAAwB,2CAA2C,EACxE,KAAK,aACP,EACSH,IAAS,KAAOC,IAAW,MAAQ,KAAK,YACjDC,EAAS,KAAK,WAGZA,GACF,KAAK,WAAW,KAAK,QAAS,CAC5B,QAASA,EAAO,QAChB,UAAW,IAAI,KACf,OAAQ,6BACV,CAAC,CAEL,CAAC,EAEG,KAAK,UACP,OAAOnB,EAAO,IAAIpB,EAAgCgC,GAAW,KAAK,SAAS,EAAG,KAAK,aAAc,CAAC,EAGpG,GAAI,CACF,MAAM,IAAI,QAAc,CAACb,EAASC,IAAW,CAC3C,KAAK,oBAAsB,CAAE,QAAAD,EAAS,OAAAC,CAAO,CAC/C,CAAC,CACH,OAAShB,EAAK,CACZ,WAAK,OAAO,KAAK,EACXA,CACR,EAGM,SAAY,CAChB,GAAI,CACF,IAAMqC,EAAgB,MAAM,KAAK,QAAQ,EAAI,EAC7C1D,GAAM,mBAAmB,KAAK,aAAa,EAAE,EAC7CA,GAAM,mBAAmB0D,CAAa,EAAE,EACxC1D,GAAM,oBAAoB,KAAK,cAAc,EAAE,CACjD,OAAS8B,EAAG,CACV9B,GAAM8B,CAAC,CACT,CACF,GAAG,EAEH,KAAK,YAAc,OACnBM,EAAQ,CACV,OAASN,EAAG,CACVO,EAAOP,CAAC,CACV,CACF,CAAC,CACH,CAEA,MAAM,MAAsB,CAC1B,IAAM6B,EAAS,UACR,KAAK,cACR,KAAK,YAAc,KAAK,MAAM,GAGzB,KAAK,aAGd,OAAO,KAAK,cAAc,eAAe,aAAcA,CAAM,CAC/D,CAKA,MAAM,OAAuB,CAM3B,GALI,KAAK,cACP,MAAM,KAAK,aAGb,MAAM,IAAI,QAASvB,GAAY,QAAQ,SAASA,CAAO,CAAC,EACpD,KAAK,sBACP,GAAI,CACF,MAAM,KAAK,qBACb,MAAY,CAEZ,CAEF,IAAIwB,EACA,KAAK,QACP5D,GAAM,wBAAwB,EAC1B,KAAK,eACPA,GAAM,2BAA2B,EACjC,MAAM,KAAK,cAEbA,GAAM,gCAAgC,EAClC,KAAK,MAAM,WAAa,KAC1B4D,EAAmB,IAAI,QAAQ,CAACxB,EAASC,IAAW,CAClD,KAAK,mBAAqB,CAAE,QAAAD,EAAS,OAAAC,CAAO,CAC9C,CAAC,EAEDrC,GAAM,iCAAkC,KAAK,MAAM,QAAQ,EAE7D,KAAK,WAAW,MAAM,EACtB,KAAK,MAAM,KAAK,EAChB,KAAK,MAAQ,QAEX4D,GACF,MAAMA,EAER,MAAM,IAAI,QAAS,GAAM,QAAQ,SAAS,CAAC,CAAC,EAC5C,KAAK,aAAe,OACpB,KAAK,mBAAqB,MAC5B,CAEA,KAAKL,EAAsB,CACzB,KAAK,yBAA2BA,EAChC,KAAK,OAAO,KAAK,EACjB,KAAK,WAAW,MAAM,CACxB,CAEA,MAAM,QAAQM,EAAW,GAAO,CAC9B,OAAI,KAAK,gBAAkB,CAACA,EACnB,KAAK,gBAEd,KAAK,eAAiB,KAAK,gBAAgB,EACpC,KAAK,eACd,CAEA,MAAM,iBAAkB,CACtB,IAAMC,EAAa,MAAMrB,YAA2C,KAAK,MAAM,EAEzEN,EAAS,QAAM,GAAA4B,SAAMD,EAAY,CAAC,WAAW,CAAC,EAEpD,YAAK,YAAc3B,EAAO,OACnB,KAAK,WACd,CAEA,MAAM,QACJ6B,EACA,CAAE,YAAAC,EAAa,OAAAC,EAAS,EAAG,QAAAC,EAAS,uBAAAC,CAAuB,EACxB,CACnC,MAAM,KAAK,MAAM,EACjB,IAAMC,EAAkC,CAAC,EACrCJ,IACFI,EAAQ,YAAcJ,GAGpBG,IACFC,EAAQ,kBAAkB,EAAID,EAAuB,IAGvD,IAAME,EAAW,KAAK,UAAUN,CAAK,EACrC,KAAK,sBAAwBrD,GAAW,YAAY,KAAK,WAAW,KAAK,IAAK2D,EAAUD,CAAO,EAAIlC,GACjG,KAAK,iBAAiBA,CAAM,CAC9B,EACA,KAAK,UAAYmC,EAEjB,GAAI,CACF,GAAM,CAAE,KAAAvB,CAAK,EAAI,MAAM,KAAK,sBAM5B,GAJIA,EAAK,YAAY,QACnB,KAAK,cAAc,oBAAoBA,EAAK,WAAW,MAAM,EAG3DA,EAAK,OACP,MAAIA,EAAK,OAAO,SAAW,EACnBwB,GAAuBxB,EAAK,OAAO,CAAC,EAAG,KAAK,cAAgB,KAAK,OAAO,cAAe,EAGzF,IAAIf,GAAgC,KAAK,UAAUe,EAAK,MAAM,EAAG,CAAE,cAAe,KAAK,aAAe,CAAC,EAI/G,OAAI,KAAK,WAAa,IACpB,KAAK,WAAa,GAGpB,KAAK,sBAAwB,OACtB,CAAE,KAAAA,CAAK,CAChB,OAASjB,EAAQ,CACf5B,GAAO,UAAW4B,CAAC,EAEnB,GAAM,CAAE,MAAA0C,EAAO,YAAAC,CAAY,EAAI,MAAM,KAAK,mBAAmB3C,CAAC,EAG9D,GAAIoC,GAAU1D,IAAuBiE,GAAe,CAACN,EACnD,OAAAjE,GAAO,oBAAoB,EACpB,KAAK,QAAQ8D,EAAO,CAAE,YAAAC,EAAa,OAAQC,EAAS,EAAG,QAAAC,EAAS,uBAAAC,CAAuB,CAAC,EAGjG,MAAMI,CACR,CACF,CAEA,MAAM,aACJE,EACA,CAAE,YAAAT,EAAa,YAAAU,EAAa,OAAAT,EAAS,EAAG,cAAAU,CAAc,EAChB,CACtC,MAAM,KAAK,MAAM,EAEjB,IAAMP,EAAkC,CAAC,EACrCJ,IACFI,EAAQ,YAAcJ,GAGxB,IAAMY,EAAMF,GAAa,OAAS,MAAQA,EAAY,QAAU,OAC5DE,IACFR,EAAQ,kBAAkB,EAAIQ,EAAI,IAGpC,IAAMC,EAAUC,GAAuBL,EAASC,CAAW,EAE3D,YAAK,UAAY,KAAK,UAAUG,CAAO,EACvC,KAAK,sBAAwBnE,GAAW,YAAY,KAAK,WAAW,KAAK,IAAK,KAAK,UAAW0D,CAAO,EAAIlC,GACvG,KAAK,iBAAiBA,CAAM,CAC9B,EAEO,KAAK,sBACT,KAAK,CAAC,CAAE,KAAAY,CAAK,IAAM,CACdA,EAAK,YAAY,QACnB,KAAK,cAAc,oBAAoBA,EAAK,WAAW,MAAM,EAG/D,GAAM,CAAE,YAAAiC,CAAY,EAAIjC,EAExB,GAAI,MAAM,QAAQiC,CAAW,EAC3B,OAAOA,EAAY,IAAK7C,IAClBA,EAAO,YAAY,QACrB,KAAK,cAAc,oBAAoBA,EAAO,WAAW,MAAM,EAG7DA,EAAO,QAAUA,EAAO,OAAO,OAAS,EACnCoC,GAAuBpC,EAAO,OAAO,CAAC,EAAG,KAAK,cAAgB,KAAK,OAAO,cAAe,EAG3F,CACL,KAAMA,CACR,EACD,EAED,MAAMoC,GAAuBxB,EAAK,OAAO,CAAC,EAAG,KAAK,cAAgB,KAAK,OAAO,cAAe,CAEjG,CAAC,EACA,MAAM,MAAOjB,GAAM,CAClB,GAAM,CAAE,MAAA0C,EAAO,YAAAC,CAAY,EAAI,MAAM,KAAK,mBAAmB3C,CAAC,EAC9D,GAAI2C,GAAe,CAACG,GAEdV,GAAU1D,GACZ,OAAO,KAAK,aAAakE,EAAS,CAChC,YAAAT,EACA,YAAAU,EACA,OAAQT,EAAS,EACjB,cAAAU,CACF,CAAC,EAIL,MAAMJ,CACR,CAAC,CACL,CAwBA,MAAM,YAAYS,EAAaZ,EAAgCa,EAAW,CAGxE,GAFA,MAAM,KAAK,MAAM,EAEbD,IAAW,QAAS,CACtB,IAAME,EAAc,KAAK,UAAU,CACjC,SAAUD,EAAI,QACd,QAASA,EAAI,QACb,gBAAiBA,EAAI,cACvB,CAAC,EAEK/C,EAAS,MAAMxB,GAAW,YAC9B,KAAK,WAAW,KACd,qBACAwE,EACAd,CACF,EACClC,GAAW,KAAK,iBAAiBA,CAAM,CAC1C,EAEA,OAAIA,EAAO,KAAK,YAAY,QAC1B,KAAK,cAAc,oBAAoBA,EAAO,KAAK,WAAW,MAAM,EAG/DA,EAAO,IAChB,SAAW8C,IAAW,SAAU,CAC9B,IAAM9C,EAAS,MAAMxB,GAAW,YAC9B,KAAK,WAAW,KAA+B,gBAAgBuE,EAAI,EAAE,UAAW,OAAWb,CAAO,EACjGlC,GAAW,KAAK,iBAAiBA,CAAM,CAC1C,EAEIA,EAAO,KAAK,YAAY,QAC1B,KAAK,cAAc,oBAAoBA,EAAO,KAAK,WAAW,MAAM,CAExE,SAAW8C,IAAW,WAAY,CAChC,IAAM9C,EAAS,MAAMxB,GAAW,YAC9B,KAAK,WAAW,KAA+B,gBAAgBuE,EAAI,EAAE,YAAa,OAAWb,CAAO,EACnGlC,GAAW,KAAK,iBAAiBA,CAAM,CAC1C,EAEIA,EAAO,KAAK,YAAY,QAC1B,KAAK,cAAc,oBAAoBA,EAAO,KAAK,WAAW,MAAM,CAExE,CAGF,CAEA,IAAY,gBAAiB,CAC3B,OAAO,KAAK,YAAc5B,EAC5B,CAQQ,wBAAwB6E,EAAa,GAAO,CAElD,GADAlF,GAAO,0BAA2B,KAAK,WAAY,KAAK,cAAc,EAClE,KAAK,YAAc,KAAK,gBAAkBkF,GAAa,CACzD,IAAMC,EAAY,KAAK,UAGvB,MADA,KAAK,UAAY,OACbA,EAAU,QAAQ,EACd,IAAI5B,GAA2B,KAAK,wBAAwBR,GAAWoC,CAAS,CAAC,EAAG,KAAK,aAAc,EAEvG,IAAIrD,GAAgC,KAAK,wBAAwBiB,GAAWoC,CAAS,CAAC,EAAG,CAC7F,cAAe,KAAK,aACtB,CAAC,CAEL,CACF,CAEQ,wBAAwBC,EAAe,CAC7C,OAAOC,GAAwB,CAC7B,aAAc,KAAK,aACnB,MAAAD,EACA,QAAS,KAAK,cACd,cAAe,KAAK,YACpB,SAAU,KAAK,mBACf,MAAO,KAAK,SACd,CAAC,CACH,CASQ,mBAAqB,MAC3Bd,GACwE,CACxExE,GAAM,CAAE,MAAAwE,CAAM,CAAC,EAGX,KAAK,cACP,MAAM,KAAK,aAKb,IAAMgB,EAAiB,CACrB,aACA,eACA,iBACA,iBACA,oBACA,iBACF,EAAE,SAAShB,EAAM,IAAc,EAE/B,GAAIA,aAAiBiB,GACnB,MAAO,CAAE,MAAAjB,EAAO,YAAa,EAAM,EAGrC,GAAI,CAIF,GAHA,KAAK,wBAAwB,EAGzB,KAAK,uBAAuB,WAC9B,KAAK,wBAAwB,UACpBgB,EAAgB,CACzB,GAAI,KAAK,0BAA4B,CAAC,KAAK,OAAO,UAChD,MAAM,IAAIxD,GACR,0CAA0C,KAAK,wBAAwB;AAAA;AAAA;AAAA;AAAA,qEAKvE,CAAE,cAAe,KAAK,aAAe,CACvC,EAKF,GAFA,KAAK,wBAAwB,EAEzB,KAAK,WAAazB,GAAY,CAGhC,QAASmF,EAAI,EAAGA,EAAI,EAAGA,IACrB,MAAM,IAAI,QAASpD,GAAM,WAAWA,EAAG,EAAE,CAAC,EAC1C,KAAK,wBAAwB,EAAI,EAGnC,MAAM,IAAI,MAAM;AAAA,4GACkF,CACpG,CACF,CAEA,WAAK,wBAAwB,EAAI,EAE3BkC,CACR,OAAS1C,EAAG,CACV,MAAO,CAAE,MAAOA,EAAG,YAAa0D,CAAe,CACjD,CACF,EAIA,MAAM,QAAQ,CAAE,OAAAG,EAAQ,aAAAC,CAAa,EAAoD,CACvF,MAAM,KAAK,MAAM,EACjB,IAAMC,EAAgBF,IAAW,OAOjC,OANiB,MAAM,KAAK,WAAW,KACrC,mBAAmB,mBAAmBA,CAAM,CAAC,GAC7C,KAAK,UAAUC,CAAY,EAC3B,KACAC,CACF,GACgB,IAClB,CAMA,iBAAoB1D,EAA0B,CAC5C,IAAM2D,EAAW3D,EAAO,KAElB4D,EAAUD,EAAS,YAAwD,OACjF,MAAIC,GACF,KAAK,cAAc,oBAAoBA,CAAM,EAGzC,IAAIN,GAA8BK,EAAS,QAAmB,CAClE,KAAMA,EAAS,WACf,cAAe,KAAK,cACpB,KAAMA,EAAS,IACjB,CAAC,CACH,CAEA,wBAAwC,CACtC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CACF,EAEA,SAASE,GAAYC,EAAiBC,EAAO,GAAO,CAClD,QAAQ,KAAKD,EAAgB,SAAY,CACvC,QAAWE,KAAU7F,GACnB,MAAM6F,EAAO,SAAS,EACtBA,EAAO,KAAKF,CAAO,EAErB3F,GAAQ,OAAO,EAAGA,GAAQ,MAAM,EAI5B4F,GAAQ,QAAQ,cAAcD,CAAO,IAAM,GAC7C,QAAQ,KAAK,CAEjB,CAAC,CACH,CAEA,IAAIG,GAAmB,GACvB,SAASpF,IAAY,CACdoF,KACHJ,GAAY,YAAY,EACxBA,GAAY,MAAM,EAClBA,GAAY,SAAU,EAAI,EAC1BA,GAAY,UAAW,EAAI,EAC3BA,GAAY,UAAW,EAAI,EAC3BI,GAAmB,GAEvB,CAEA,SAAS5E,GAAmB6E,EAA2C,CACrE,OAAO,IAAI,QAASjE,GAAY,CAC9BiE,EAAa,KAAK,OAAQjE,CAAO,EACjCiE,EAAa,KAAK,CACpB,CAAC,CACH,CqBh/BO,SAASC,GAAYC,EAAUC,EAAwB,CAC5D,MAAM,IAAI,MAAMA,CAAO,CACzB,CC6DA,SAASC,GAAcC,EAAgD,CACrE,OAAOA,IAAU,MAAQ,OAAOA,GAAS,UAAY,OAAOA,EAAM,OAAa,QACjF,CA8BA,SAASC,GACPC,EACAC,EACc,CACd,IAAMC,EAAS,CAAC,EAEhB,QAAWC,KAAO,OAAO,KAAKH,CAAM,EAClCE,EAAOC,CAAG,EAAIF,EAAOD,EAAOG,CAAG,EAAQA,CAAQ,EAGjD,OAAOD,CACT,CAEO,SAASE,GAAwBF,EAA0B,CAChE,OAAIA,IAAW,KACNA,EAGL,MAAM,QAAQA,CAAM,EACfA,EAAO,IAAIE,EAAuB,EAGvC,OAAOF,GAAW,SAChBG,GAAcH,CAAM,EACfI,GAAuBJ,CAAM,EAIlCA,EAAO,cAAgB,MAAQA,EAAO,YAAY,OAAS,SACtDA,EAGFH,GAAgBG,EAAQE,EAAuB,EAGjDF,CACT,CAEA,SAASI,GAAuB,CAAE,MAAAC,EAAO,MAAAC,CAAM,EAAyC,CACtF,OAAQD,EAAO,CACb,IAAK,SACH,OAAO,OAAOC,CAAK,EACrB,IAAK,QAAS,CACZ,GAAM,CAAE,OAAAC,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAI,OAAO,KAAKH,EAAO,QAAQ,EACtE,OAAO,IAAI,WAAWC,EAAQC,EAAYC,CAAU,CACtD,CACA,IAAK,WACH,OAAO,IAAI,KAAKH,CAAK,EACvB,IAAK,UACH,OAAO,IAAII,GAAQJ,CAAK,EAC1B,IAAK,OACH,OAAO,KAAK,MAAMA,CAAK,EACzB,QACEK,GAAYL,EAAO,sBAAsB,CAC7C,CACF,CC3JE,IAAAM,GAAW,SCMb,IAAMC,GAAS,IAAM,WAAW,SAAS,SAAS,OAAS,OAKrDC,GAAQ,IAAM,CAAC,CAAC,WAAW,KAAO,CAAC,CAAC,WAAW,SAAS,UAAU,IAKlEC,GAAS,IAAM,CAAC,CAAC,WAAW,KAK5BC,GAAY,IAAM,OAAO,WAAW,SAAY,SAKhDC,GAAc,IAAM,OAAO,WAAW,aAAgB,SAMtDC,GAAY,IAAM,WAAW,WAAW,YAAc,qBAE5D,SAASC,IAA6B,CAqBpC,MAnBsB,CACpB,CAACH,GAAW,SAAS,EACrB,CAACC,GAAa,YAAY,EAC1B,CAACC,GAAW,SAAS,EACrB,CAACH,GAAQ,MAAM,EACf,CAACD,GAAO,KAAK,EACb,CAACD,GAAQ,MAAM,CACjB,EASK,QAASO,GAAWA,EAAM,CAAC,EAAE,EAAI,CAACA,EAAM,CAAC,CAAC,EAAI,CAAC,CAAE,EACjD,GAAG,CAAC,GAAK,EAGhB,CAEA,IAAMC,GAAsB,CAC1B,KAAM,UACN,QAAS,qBACT,KAAM,uBACN,QAAS,yBACT,aACE,sKACJ,EAQO,SAASC,IAA+B,CAC7C,IAAMC,EAAYJ,GAAc,EAEhC,MAAO,CACL,GAAII,EAEJ,WAAYF,GAAoBE,CAAS,GAAKA,EAC9C,OAAQ,CAAC,UAAW,OAAQ,UAAW,YAAY,EAAE,SAASA,CAAS,CACzE,CACF,CC9EO,SAASC,GAAqB,CACnC,kBAAAC,EACA,oBAAAC,EACA,IAAAC,EACA,cAAAC,CACF,EAKG,CACD,IAAIC,EACEC,EAAiB,OAAO,KAAKL,CAAiB,EAAE,CAAC,EACjDM,EAAgBN,EAAkBK,CAAc,GAAG,IACnDE,EAAcN,EAAoBI,CAAc,GAAG,IAazD,GAXIA,IAAmB,OACrBD,EAAc,OACLG,EACTH,EAAcG,EACLD,GAAe,MACxBF,EAAcE,EAAc,MACnBA,GAAe,aACxBF,EAAcF,EAAII,EAAc,UAAU,GAIxCA,GAAe,aAAe,QAAaF,IAAgB,OAiB7D,MAAM,IAAII,EACR,0CAA0CF,EAAc,UAAU,IAClEH,CACF,EAIF,GAAIC,IAAgB,OAClB,MAAM,IAAII,EACR,+DACAL,CACF,EAGF,OAAOC,CACT,CC5DO,IAAeK,GAAf,cAAyC,KAAM,CAG7C,cACA,MAEP,YAAYC,EAAiBC,EAA6B,CACxD,MAAMD,CAAO,EAEb,KAAK,cAAgBC,EAAK,cAC1B,KAAK,MAAQA,EAAK,KACpB,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,OAAO,KAAK,IACd,CACF,ECfO,IAAeC,GAAf,cAAsCC,EAAkB,CAC7D,YAEA,YAAYC,EAAiBC,EAA0B,CACrD,MAAMD,EAASC,CAAI,EAEnB,KAAK,YAAcA,EAAK,aAAe,EACzC,CACF,ECdO,SAASC,EAAgBC,EAASC,EAAoB,CAC3D,MAAO,CACL,GAAGD,EACH,YAAaC,CACf,CACF,CCEO,IAAMC,GAAN,cAAqCC,EAAe,CAClD,KAAO,yBACP,KAAO,QAEd,YAAYC,EAAiBC,EAAkC,CAC7D,MAAMD,EAASE,EAAaD,EAAM,EAAK,CAAC,CAC1C,CACF,EACAE,EAAaL,GAAwB,wBAAwB,ECKtD,SAASM,GAAgBC,EAA+C,CAC7E,IAAMC,EAAY,CAAE,cAAeD,EAAQ,aAAc,EACnDE,EAAS,OAAO,KAAKF,EAAQ,iBAAiB,EAAE,CAAC,EACjDG,EAAaC,GAAqB,CACtC,kBAAmBJ,EAAQ,kBAC3B,oBAAqBA,EAAQ,oBAC7B,cAAeA,EAAQ,cACvB,IAAK,CAAE,GAAGA,EAAQ,IAAK,GAAI,OAAO,QAAY,IAAc,QAAQ,IAAM,CAAC,CAAG,CAChF,CAAC,EAEGK,EACJ,GAAI,CACFA,EAAM,IAAI,IAAIF,CAAU,CAC1B,MAAQ,CACN,MAAM,IAAIG,GACR,iCAAiCJ,CAAM,yDACvCD,CACF,CACF,CAEA,GAAM,CAAE,SAAAM,EAAU,aAAAC,CAAa,EAAIH,EAEnC,GAAIE,IAAa,WAAaA,IAAaE,GACzC,MAAM,IAAIH,GACR,iCAAiCJ,CAAM,mFACvCD,CACF,EAGF,IAAMS,EAASF,EAAa,IAAI,SAAS,EACzC,GAAIE,IAAW,MAAQA,EAAO,OAAS,EACrC,MAAM,IAAIJ,GACR,iCAAiCJ,CAAM,2CACvCD,CACF,EAKF,IAAIU,EAAaC,GAAoBP,CAAG,EAAI,QAAU,SAElD,QAAQ,IAAI,oCAAsCA,EAAI,aAAa,IAAI,UAAU,IACnFM,EAAa,SAOf,IAAME,EAAU,IAAI,IAAIR,EAAI,KAAK,QAAQE,EAAUI,CAAU,CAAC,EAE9D,MAAO,CAAE,OAAAD,EAAQ,IAAKG,CAAQ,CAChC,CCvEA,IAAAC,GAA+B,SAmBlBC,GAAN,KAAoB,CAChB,OACA,cACA,SACA,WACA,WAET,YAAY,CACV,OAAAC,EACA,cAAAC,EACA,SAAAC,EACA,WAAAC,EACA,WAAAC,CACF,EAMG,CACD,KAAK,OAASJ,EACd,KAAK,cAAgBC,EACrB,KAAK,SAAWC,EAChB,KAAK,WAAaC,EAClB,KAAK,WAAaC,CACpB,CAEA,MAAM,CAAE,YAAAC,EAAa,cAAAC,CAAc,EAA0B,CAAC,EAAsB,CAClF,IAAMC,EAA6B,CACjC,OAAQ,mBACR,cAAe,UAAU,KAAK,MAAM,GACpC,eAAgB,mBAChB,qBAAsB,KAAK,WAC3B,wBAAyB,iBAC3B,EAEI,KAAK,cAAc,UAAU,IAC/BA,EAAQ,YAAcF,GAAe,KAAK,cAAc,eAAe,GAGrEC,IACFC,EAAQ,kBAAkB,EAAID,GAGhC,IAAME,EAAmB,KAAKC,GAAsB,EAEpD,OAAID,EAAiB,OAAS,IAC5BD,EAAQ,qBAAqB,EAAIC,EAAiB,KAAK,IAAI,GAGtDD,CACT,CAEAE,IAAkC,CAChC,IAAMD,EAA6B,CAAC,EAEpC,OAAI,KAAK,cAAc,UAAU,GAC/BA,EAAiB,KAAK,SAAS,EAG7B,KAAK,UACPA,EAAiB,KAAK,KAAK,QAAQ,EAGjC,KAAK,YACPA,EAAiB,KAAK,OAAO,EAGxBA,CACT,CACF,ECrFO,SAASE,GAAuBC,EAAoC,CACzE,OAAOA,EAAU,CAAC,EAAI,IAAMA,EAAU,CAAC,EAAI,GAC7C,CAKO,SAASC,GAAwBD,EAAkC,CACxE,OAAO,IAAI,KAAKD,GAAuBC,CAAS,CAAC,CACnD,CCNO,IAAME,GAAN,cAA+BC,EAAe,CAC5C,KAAO,mBACP,KAAO,QAEd,YAAYC,EAA4B,CACtC,MAAM,+BAAgCC,EAAaD,EAAM,EAAI,CAAC,CAChE,CACF,EACAE,EAAaJ,GAAkB,kBAAkB,ECR1C,IAAMK,GAAN,cAAqCC,EAAe,CAClD,KAAO,yBACP,KAAO,QAEd,YAAYC,EAAiBC,EAAkC,CAC7D,MAAMD,EAASE,EAAaD,EAAM,EAAK,CAAC,CAC1C,CACF,EACAE,EAAaL,GAAwB,wBAAwB,ECTtD,IAAeM,GAAf,cAAyCC,EAAe,CAC7D,SAEA,YAAYC,EAAiBC,EAA6B,CACxD,MAAMD,EAASC,CAAI,EAEnB,KAAK,SAAWA,EAAK,SAGrB,IAAMC,EAAY,KAAK,SAAS,QAAQ,IAAI,mBAAmB,EAC/D,GAAIA,EAAW,CACb,IAAMC,EAAgB,wBAAwBD,CAAS,IACvD,KAAK,QAAU,KAAK,QAAU,IAAMC,CACtC,CACF,CACF,ECdO,IAAMC,GAAN,cAAiCC,EAAkB,CACjD,KAAO,qBACP,KAAO,QAEd,YAAYC,EAA6B,CACvC,MAAM,8BAA+BC,EAAaD,EAAM,EAAI,CAAC,CAC/D,CACF,EACAE,EAAaJ,GAAoB,oBAAoB,ECR9C,IAAMK,GAA8B,qDAE9BC,GAAN,cAA8BC,EAAkB,CAC9C,KAAO,kBACP,KAAO,QAEd,YAAYC,EAA2BC,EAAkBC,EAAe,CACtE,MAAMD,GAAWJ,GAA6BM,EAAaH,EAAM,EAAK,CAAC,EACnEE,IAAM,KAAK,KAAOA,EACxB,CACF,EACAE,EAAaN,GAAiB,iBAAiB,ECXxC,IAAMO,GAAN,cAAsCC,EAAkB,CACtD,KAAO,0BACP,KAAO,QACP,KAEP,YAAYC,EAAmCC,EAAgB,CAC7D,MAAM,0CAA2CC,EAAaF,EAAM,EAAI,CAAC,EACzE,KAAK,KAAOC,CACd,CACF,EACAE,EAAaL,GAAyB,yBAAyB,ECVxD,IAAMM,GAAN,cAAiCC,EAAkB,CACjD,KAAO,qBACP,KAAO,QACP,KAEP,YAAYC,EAA8BC,EAAiBC,EAAgB,CACzE,MAAMD,EAASE,EAAaH,EAAM,EAAI,CAAC,EACvC,KAAK,KAAOE,CACd,CACF,EACAE,EAAaN,GAAoB,oBAAoB,ECV9C,IAAMO,GAAN,cAA6CC,EAAkB,CAC7D,KAAO,iCACP,KAAO,QAEd,YAAYC,EAA0C,CACpD,MAAM,kCAAmCC,EAAaD,EAAM,EAAK,CAAC,CACpE,CACF,EACAE,EAAaJ,GAAgC,gCAAgC,ECRtE,IAAMK,GAAkC,oBAElCC,GAAN,cAAkCC,EAAkB,CAClD,KAAO,sBACP,KAAO,QAEd,YAAYC,EAA+BC,EAAUJ,GAAiC,CACpF,MAAMI,EAASC,EAAaF,EAAM,EAAK,CAAC,CAC1C,CACF,EACAG,EAAaL,GAAqB,qBAAqB,ECVhD,IAAMM,GAAgD,gCAEhDC,GAAN,cAA0CC,EAAkB,CAC1D,KAAO,8BACP,KAAO,QAEd,YAAYC,EAAuCC,EAAUJ,GAA+C,CAC1G,MAAMI,EAASC,EAAaF,EAAM,EAAK,CAAC,CAC1C,CACF,EACAG,EAAaL,GAA6B,6BAA6B,ECVhE,IAAMM,GAAkC,iCAOlCC,GAAN,cAAkCC,EAAkB,CAClD,KAAO,sBACP,KAAO,QAEd,YAAYC,EAA+BC,EAAUJ,GAAiC,CACpF,MAAMI,EAASC,EAAaF,EAAM,EAAK,CAAC,CAC1C,CACF,EACAG,EAAaL,GAAqB,qBAAqB,ECfhD,IAAMM,GAA4B,oCAE5BC,GAAN,cAA4BC,EAAkB,CAC5C,KAAO,gBACP,KAAO,QAEd,YAAYC,EAAyBC,EAAUJ,GAA2B,CACxE,MAAMI,EAASC,EAAaF,EAAM,EAAK,CAAC,CAC1C,CACF,EACAG,EAAaL,GAAe,eAAe,ECVpC,IAAMM,GAA+B,uBAE/BC,GAAN,cAA0BC,EAAkB,CAC1C,KAAO,cACP,KAAO,QACP,KAEP,YAAYC,EAAuBC,EAAkBC,EAAiB,CACpE,MAAMD,GAAWJ,GAA8BM,EAAaH,EAAM,EAAI,CAAC,EACvE,KAAK,KAAOE,CACd,CACF,EACAE,EAAaN,GAAa,aAAa,ECZhC,IAAMO,GAA+B,6CAE/BC,GAAN,cAAgCC,EAAkB,CAChD,KAAO,oBACP,KAAO,QAEd,YAAYC,EAA6BC,EAAUJ,GAA8B,CAC/E,MAAMI,EAASC,EAAaF,EAAM,EAAK,CAAC,CAC1C,CACF,EACAG,EAAaL,GAAmB,mBAAmB,ECV5C,IAAMM,GAAiC,oCAEjCC,GAAN,cAAiCC,EAAkB,CACjD,KAAO,qBACP,KAAO,QAEd,YAAYC,EAA8BC,EAAUJ,GAAgC,CAClF,MAAMI,EAASC,EAAaF,EAAM,EAAI,CAAC,CACzC,CACF,EACAG,EAAaL,GAAoB,oBAAoB,EC0BrD,eAAeM,GAAqBC,EAAgD,CAClF,IAAIC,EAEJ,GAAI,CACFA,EAAO,MAAMD,EAAS,KAAK,CAC7B,MAAQ,CACN,MAAO,CAAE,KAAM,YAAa,CAC9B,CAEA,GAAI,CACF,IAAME,EAAQ,KAAK,MAAMD,CAAI,EAE7B,GAAI,OAAOC,GAAU,SACnB,OAAQA,EAAO,CACb,IAAK,yBACH,MAAO,CAAE,KAAM,iBAAkB,KAAMA,CAAM,EAC/C,QACE,MAAO,CAAE,KAAM,mBAAoB,KAAMA,CAAM,CACnD,CAGF,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,GAAI,aAAcA,GAAS,YAAaA,GAAS,eAAgBA,EAC/D,MAAO,CAAE,KAAM,mBAAoB,KAAMA,CAAM,EAGjD,GAAI,qBAAsBA,GAAS,oCAAqCA,GAAS,wBAAyBA,EAAO,CAC/G,IAAMC,EAAU,OAAO,OAAOD,CAAe,EAAE,CAAC,EAAU,OAC1D,OAAI,OAAOC,GAAW,UAAY,CAAC,CAAC,gBAAiB,2BAA2B,EAAE,SAASA,CAAM,EACxF,CAAE,KAAM,mBAAoB,KAAMD,CAAM,EAE1C,CAAE,KAAM,iBAAkB,KAAMA,CAAM,CAC/C,CACF,CAEA,MAAO,CAAE,KAAM,mBAAoB,KAAMA,CAAM,CACjD,MAAQ,CACN,OAAOD,IAAS,GAAK,CAAE,KAAM,YAAa,EAAI,CAAE,KAAM,mBAAoB,KAAMA,CAAK,CACvF,CACF,CAEA,eAAsBG,GAAgBJ,EAAoBK,EAA4D,CACpH,GAAIL,EAAS,GAAI,OAEjB,IAAMM,EAAO,CAAE,cAAAD,EAAe,SAAAL,CAAS,EACjCE,EAAQ,MAAMH,GAAqBC,CAAQ,EAEjD,GAAIE,EAAM,OAAS,mBACjB,MAAM,IAAIK,GAA8BL,EAAM,KAAK,QAAS,CAAE,KAAMA,EAAM,KAAK,WAAY,cAAAG,CAAc,CAAC,EAG5G,GAAIH,EAAM,OAAS,iBAAkB,CACnC,GAAIA,EAAM,OAAS,yBACjB,MAAM,IAAIM,GAAYF,EAAM,2BAA2B,EAGzD,GAAI,qBAAsBJ,EAAM,KAAM,CACpC,GAAIA,EAAM,KAAK,iBAAiB,SAAW,gBACzC,OAAO,IAAIO,GAAmBH,CAAI,EAEpC,GAAIJ,EAAM,KAAK,iBAAiB,SAAW,4BACzC,MAAM,IAAIQ,GAA+BJ,CAAI,EAE/C,GAAI,uBAAwBJ,EAAM,KAAK,iBAAiB,OAAQ,CAC9D,GAAM,CAAE,IAAAS,EAAK,KAAAC,CAAK,EAAIV,EAAM,KAAK,iBAAiB,OAAO,mBACzD,MAAM,IAAIW,GAAmBP,EAAMK,EAAKC,CAAI,CAC9C,CACA,GAAI,4BAA6BV,EAAM,KAAK,iBAAiB,OAAQ,CACnE,GAAM,CAAE,IAAAS,EAAK,WAAAG,CAAW,EAAIZ,EAAM,KAAK,iBAAiB,OAAO,wBAC/D,MAAM,IAAIa,EAAgCJ,EAAKN,EAAeS,CAAU,CAC1E,CACA,GAAI,uBAAwBZ,EAAM,KAAK,iBAAiB,OAAQ,CAC9D,GAAM,CAAE,KAAAU,CAAK,EAAIV,EAAM,KAAK,iBAAiB,OAAO,mBACpD,MAAM,IAAIc,GAAwBV,EAAMM,CAAI,CAC9C,CACF,CAEA,GAAI,oCAAqCV,EAAM,KAAM,CACnD,IAAMe,EAAyE,CAC7E,aAAc,6CACd,wBAAyB,wEACzB,sBAAuB,yCACzB,EACA,MAAM,IAAIC,GAA4BZ,EAAMW,EAAgBf,EAAM,KAAK,gCAAgC,MAAM,CAAC,CAChH,CAEA,GAAI,wBAAyBA,EAAM,KACjC,MAAM,IAAIiB,GAAoBb,EAAMJ,EAAM,KAAK,oBAAoB,MAAM,CAE7E,CAEA,GAAIF,EAAS,SAAW,KAAOA,EAAS,SAAW,IACjD,MAAM,IAAIoB,GAAkBd,EAAMe,GAAkBC,GAA8BpB,CAAK,CAAC,EAG1F,GAAIF,EAAS,SAAW,IACtB,OAAO,IAAIuB,GAAcjB,EAAMe,GAAkBG,GAA2BtB,CAAK,CAAC,EAGpF,GAAIF,EAAS,SAAW,IACtB,MAAM,IAAIyB,GAAmBnB,EAAMe,GAAkBK,GAAgCxB,CAAK,CAAC,EAG7F,GAAIF,EAAS,SAAW,IACtB,MAAM,IAAI2B,GAAoBrB,EAAMe,GAAkBO,GAAiC1B,CAAK,CAAC,EAG/F,GAAIF,EAAS,QAAU,IACrB,MAAM,IAAIQ,GAAYF,EAAMe,GAAkBQ,GAA8B3B,CAAK,CAAC,EAGpF,GAAIF,EAAS,QAAU,IACrB,MAAM,IAAI8B,GAAgBxB,EAAMe,GAAkBU,GAA6B7B,CAAK,CAAC,CAIzF,CAEA,SAASmB,GAAkBW,EAAwBC,EAAsC,CACvF,OAAIA,EAAU,OAAS,aACdD,EAEF,GAAGA,CAAc,KAAK,KAAK,UAAUC,CAAS,CAAC,EACxD,CCrKO,SAASC,GAAQC,EAA4B,CAClD,IAAMC,EAAY,KAAK,IAAI,EAAGD,CAAC,EAAI,GAC7BE,EAAS,KAAK,KAAK,KAAK,OAAO,EAAID,CAAS,EAAI,KAAK,KAAKA,EAAY,CAAC,EACvEE,EAAQF,EAAYC,EAE1B,OAAO,IAAI,QAASE,GAAS,WAAW,IAAMA,EAAKD,CAAK,EAAGA,CAAK,CAAC,CACnE,CCCA,IAAME,GAAY,mEACX,SAASC,GAASC,EAAa,CACpC,IAAMC,EAAQ,IAAI,YAAY,EAAE,OAAOD,CAAG,EACtCE,EAAS,GACPC,EAAaF,EAAM,WACnBG,EAAgBD,EAAa,EAC7BE,EAAaF,EAAaC,EAE5BE,EAAWC,EAAWC,EAAWC,EACjCC,EAGJ,QAASC,EAAI,EAAGA,EAAIN,EAAYM,EAAIA,EAAI,EAEtCD,EAAST,EAAMU,CAAC,GAAK,GAAOV,EAAMU,EAAI,CAAC,GAAK,EAAKV,EAAMU,EAAI,CAAC,EAG5DL,GAAKI,EAAQ,WAAa,GAC1BH,GAAKG,EAAQ,SAAW,GACxBF,GAAKE,EAAQ,OAAS,EACtBD,EAAIC,EAAQ,GAGZR,GAAUJ,GAAUQ,CAAC,EAAIR,GAAUS,CAAC,EAAIT,GAAUU,CAAC,EAAIV,GAAUW,CAAC,EAIpE,OAAIL,GAAiB,GACnBM,EAAQT,EAAMI,CAAU,EAExBC,GAAKI,EAAQ,MAAQ,EAGrBH,GAAKG,EAAQ,IAAM,EAEnBR,GAAUJ,GAAUQ,CAAC,EAAIR,GAAUS,CAAC,EAAI,MAC/BH,GAAiB,IAC1BM,EAAST,EAAMI,CAAU,GAAK,EAAKJ,EAAMI,EAAa,CAAC,EAEvDC,GAAKI,EAAQ,QAAU,GACvBH,GAAKG,EAAQ,OAAS,EAGtBF,GAAKE,EAAQ,KAAO,EAEpBR,GAAUJ,GAAUQ,CAAC,EAAIR,GAAUS,CAAC,EAAIT,GAAUU,CAAC,EAAI,KAGlDN,CACT,CCvDO,SAASU,GAAsBC,EAA4B,CAKhE,GAJyB,CAAC,CAACA,EAAa,WAAW,gBAAgB,KAAMC,GAChEA,EAAQ,YAAY,EAAE,SAAS,SAAS,CAChD,EAGC,MAAM,IAAIC,EACR,6MAIAF,EAAa,aACf,CAEJ,CCKE,IAAAG,GAAgB,CACd,gBAAiB,cACjB,0BAA2B,oDAC3B,uBAAwB,cACxB,uBAAwB,aAC1B,ECnBK,IAAMC,GAAN,cAA2BC,EAAe,CACxC,KAAO,eACP,KAAO,QAEd,YAAYC,EAAiBC,EAAwB,CACnD,MAAM;AAAA,EAAoCD,CAAO,GAAIE,EAAaD,EAAM,EAAI,CAAC,CAC/E,CACF,EACAE,EAAaL,GAAc,cAAc,ECTzC,eAAsBM,GACpBC,EACAC,EACAC,EAAkDC,GAAUA,EACzC,CACnB,GAAM,CAAE,cAAAC,EAAe,GAAGC,CAAa,EAAIJ,EACrCK,EAAiBJ,EAAY,KAAK,EAExC,GAAI,CACF,OAAO,MAAMI,EAAeN,EAAKK,CAAY,CAC/C,OAASE,EAAO,CACd,IAAMC,EAAWD,EAAgB,SAAW,gBAC5C,MAAM,IAAIE,GAAaD,EAAS,CAAE,cAAAJ,EAAe,MAAOG,CAAM,CAAC,CACjE,CACF,CCdA,IAAMG,GAAc,gCACdC,GAAQC,GAAM,+BAA+B,EAEnD,eAAeC,GAAkBC,EAAcC,EAAsB,CACnE,IAAMC,EAAgBC,GAAa,yBAAyB,EACtDC,EAAgBH,EAAO,eAAiB,UAK9C,GAAI,QAAQ,IAAI,yCAA2C,WAAW,wCACpE,OAAO,QAAQ,IAAI,yCAA2C,WAAW,wCAI3E,GAAID,EAAK,SAAS,YAAY,GAAKI,IAAkB,SAAWA,IAAkB,YAChF,OAAOA,EAGT,GAAM,CAACC,EAASC,CAAM,EAAIF,GAAe,MAAM,GAAG,GAAK,CAAC,EAGxD,GAAIE,IAAW,QAAaV,GAAY,KAAKS,CAAO,EAClD,OAAOA,EAKT,GAAIC,IAAW,QAAaF,IAAkB,SAAWA,IAAkB,YAAa,CACtF,GAAM,CAACC,CAAO,EAAIH,EAAc,MAAM,GAAG,GAAK,CAAC,EACzC,CAACK,EAAOC,EAAOC,CAAK,EAAIJ,EAAQ,MAAM,GAAG,EAIzCK,EAASC,GAAa,KAAKJ,CAAK,IAAIC,CAAK,IAAIC,CAAK,EAAE,EACpDG,EAAM,MAAMC,GAAQH,EAAQ,CAAE,cAAAN,CAAc,CAAC,EAEnD,GAAI,CAACQ,EAAI,GACP,MAAM,IAAI,MACR,2DAA2DA,EAAI,MAAM,IACnEA,EAAI,UAEN,oBAAqB,MAAMA,EAAI,KAAK,GAAM,cAAc,EAC1D,EAMF,IAAME,EAAa,MAAMF,EAAI,KAAK,EAClCf,GAAM,wCAAyCiB,EAAW,MAAM,EAEhE,IAAIC,EACJ,GAAI,CACFA,EAAa,KAAK,MAAMD,CAAU,CACpC,OAASE,EAAG,CACV,cAAQ,MAAM,kDAAmDF,CAAU,EACrEE,CACR,CAEA,OAAOD,EAAW,OACpB,CAGA,MAAM,IAAIE,GAAuB,iEAAkE,CACjG,cAAAb,CACF,CAAC,CACH,CAOA,eAAsBc,GAAiBlB,EAAcC,EAAsB,CACzE,IAAMI,EAAU,MAAMN,GAAkBC,EAAMC,CAAM,EAEpD,OAAAJ,GAAM,UAAWQ,CAAO,EAEjBA,CACT,CAWA,SAASM,GAAaN,EAAiB,CACrC,OAAO,UAAU,4BAA4BA,CAAO,eAAe,CACrE,CC3DA,IAAMc,GAAc,EAEdC,GAAQC,GAAM,+BAA+B,EA2BtCC,GAAN,KAAgE,CACrE,KAAO,kBAEC,aACC,iBACD,kBACA,OACA,WACA,IAEA,cACA,WACA,cACA,oBACA,KACA,cACA,aACA,SAER,YAAYC,EAAsB,CAChCC,GAAsBD,CAAM,EAE5B,KAAK,OAASA,EACd,KAAK,IAAMA,EAAO,IAElB,KAAK,aAAeE,GAASF,EAAO,YAAY,EAChD,KAAK,kBAAoBA,EAAO,kBAChC,KAAK,iBAAmBA,EAAO,iBAC/B,KAAK,cAAgBA,EAAO,cAC5B,KAAK,WAAaA,EAAO,cACzB,KAAK,WAAaA,EAAO,WACzB,KAAK,cAAgBA,EAAO,aAC9B,CAEA,QAAiB,CACf,OAAO,KAAK,cAAc,MAC5B,CAIA,SAAU,CACR,OAAO,KAAK,UACd,CAQA,MAAM,OAAQ,CACR,KAAK,eAAiB,QACxB,MAAM,KAAK,aAGb,KAAK,cAAgB,SAAY,CAC/B,GAAM,CAAE,OAAAG,EAAQ,IAAAC,CAAI,EAAI,KAAK,gBAAgB,EAE7C,KAAK,KAAOA,EAAI,KAChB,KAAK,SAAWA,EAAI,SACpB,KAAK,cAAgB,IAAIC,GAAc,CACrC,OAAAF,EACA,cAAe,KAAK,cACpB,SAAU,KAAK,OAAO,UAAY,QAClC,WAAY,KAAK,OAAO,WACxB,WAAY,KAAK,UACnB,CAAC,EAED,KAAK,oBAAsB,MAAMG,GAAiB,KAAK,KAAM,KAAK,MAAM,EAExET,GAAM,OAAQ,KAAK,IAAI,EACvBA,GAAM,WAAY,KAAK,QAAQ,CACjC,GAAG,EAEH,MAAM,KAAK,YACb,CAEA,MAAM,MAAO,CAAC,CAEN,4BAA4BU,EAA+C,CAC7EA,GAAY,MAAM,QACpBA,EAAW,KAAK,QAASC,GAAQ,CAC/B,OAAQA,EAAI,MAAO,CACjB,IAAK,QACL,IAAK,QACHX,GAAMW,CAAG,EACT,MAEF,IAAK,QACL,IAAK,OACL,IAAK,OAAQ,CACX,KAAK,WAAW,KAAKA,EAAI,MAAO,CAC9B,UAAWC,GAAwBD,EAAI,SAAS,EAChD,QAASA,EAAI,WAAW,SAAW,GACnC,OAAQA,EAAI,QAAU,cACxB,CAAC,EACD,KACF,CAEA,IAAK,QAAS,CACZ,KAAK,WAAW,KAAK,QAAS,CAC5B,MAAOA,EAAI,WAAW,OAAS,GAE/B,UAAWC,GAAwBD,EAAI,SAAS,EAChD,SAAUA,EAAI,WAAW,aAAe,EACxC,OAAQA,EAAI,WAAW,QAAU,GACjC,OAAQA,EAAI,QAAU,cACxB,CAAC,EAED,KACF,CAEA,QACEA,EAAI,KACR,CACF,CAAC,EAGCD,GAAY,QAAQ,QACtB,KAAK,cAAc,oBAAoBA,EAAW,MAAM,CAE5D,CAEA,cAAe,CACb,MAAM,IAAI,MAAM,gEAAgE,CAClF,CAEA,MAAc,IAAIG,EAAgB,CAChC,aAAM,KAAK,MAAM,EAEV,GAAG,KAAK,QAAQ,KAAK,KAAK,IAAI,IAAI,KAAK,mBAAmB,IAAI,KAAK,gBAAgB,IAAIA,CAAM,EACtG,CAEA,MAAc,cAAe,CAC3B,IAAMC,EAAc,CAClB,KAAM,eACN,SAAU,EACZ,EAEA,OAAO,KAAK,cAAc,eAAeA,EAAa,SAAY,CAChE,IAAMC,EAAW,MAAMC,GAAQ,MAAM,KAAK,IAAI,QAAQ,EAAG,CACvD,OAAQ,MACR,QAAS,KAAK,cAAc,MAAM,EAClC,KAAM,KAAK,aACX,cAAe,KAAK,aACtB,CAAC,EAEID,EAAS,IACZf,GAAM,yBAA0Be,EAAS,MAAM,EAGjD,IAAME,EAAQ,MAAMC,GAAgBH,EAAU,KAAK,aAAa,EAEhE,GAAIE,EACF,WAAK,WAAW,KAAK,OAAQ,CAC3B,QAAS,iCAAiCA,EAAM,OAAO,GACvD,UAAW,IAAI,KACf,OAAQ,EACV,CAAC,EACKA,EAEN,KAAK,WAAW,KAAK,OAAQ,CAC3B,QAAS,8BAA8B,KAAK,gBAAgB,IAC5D,UAAW,IAAI,KACf,OAAQ,EACV,CAAC,CAEL,CAAC,CACH,CAEA,QACEE,EACA,CAAE,YAAAC,EAAa,uBAAAC,EAAwB,qBAAAC,CAAqB,EAC5D,CACA,OAAO,KAAK,gBAAmB,CAC7B,KAAMH,EACN,YAAAC,EACA,uBAAAC,EACA,qBAAAC,CACF,CAAC,CACH,CAEA,MAAM,aACJC,EACA,CAAE,YAAAH,EAAa,YAAAI,EAAa,qBAAAF,CAAqB,EACX,CACtC,IAAMD,EAAyBG,GAAa,OAAS,MAAQA,EAAY,QAAU,OAE7EC,EAAOC,GAAuBH,EAASC,CAAW,EASxD,OAPoB,MAAM,KAAK,gBAAyB,CACtD,KAAAC,EACA,qBAAAH,EACA,uBAAAD,EACA,YAAAD,CACF,CAAC,GAEkB,IAAKO,IAClBA,EAAO,YACT,KAAK,4BAA4BA,EAAO,UAAU,EAGhD,WAAYA,EACP,KAAK,mCAAmCA,EAAO,MAAM,EAGvDA,EACR,CACH,CAEQ,gBAAkD,CACxD,KAAAF,EACA,YAAAL,EACA,qBAAAE,EACA,uBAAAD,CACF,EAA4G,CAC1G,OAAO,KAAK,UAAU,CACpB,aAAc,WACd,SAAU,MAAO,CAAE,YAAAO,CAAY,IAAM,CACnC,IAAMrB,EAAMc,EACR,GAAGA,EAAuB,QAAQ,QAAQ,WAC1C,MAAM,KAAK,IAAI,SAAS,EAE5BO,EAAYrB,CAAG,EAEf,IAAMQ,EAAW,MAAMC,GACrBT,EACA,CACE,OAAQ,OACR,QAAS,KAAK,cAAc,MAAM,CAAE,YAAAa,EAAa,cAAeC,GAAwB,EAAG,CAAC,EAC5F,KAAM,KAAK,UAAUI,CAAI,EACzB,cAAe,KAAK,aACtB,EACAH,CACF,EAEKP,EAAS,IACZf,GAAM,0BAA2Be,EAAS,MAAM,EAGlD,MAAM,KAAK,YAAY,MAAMG,GAAgBH,EAAU,KAAK,aAAa,CAAC,EAE1E,IAAMY,EAAU,MAAMZ,EAAS,KAAK,EAMpC,GAJIY,EAAO,YACT,KAAK,4BAA4BA,EAAO,UAAU,EAGhD,WAAYA,EACd,MAAM,KAAK,mCAAmCA,EAAO,MAAM,EAG7D,MAAI,gBAAiBA,EAKZA,EAAO,YASTA,CAGT,CACF,CAAC,CACH,CAYA,MAAM,YAAYd,EAAagB,EAAgCC,EAAW,CACxE,IAAMC,EAAiB,CACrB,MAAO,WACP,OAAQ,aACR,SAAU,cACZ,EAEA,OAAO,KAAK,UAAU,CACpB,aAAc,GAAGA,EAAelB,CAAM,CAAC,eACvC,SAAU,MAAO,CAAE,YAAAe,CAAY,IAAM,CACnC,GAAIf,IAAW,QAAS,CACtB,IAAMY,EAAO,KAAK,UAAU,CAC1B,SAAUK,EAAI,QACd,QAASA,EAAI,QACb,gBAAiBA,EAAI,cACvB,CAAC,EAEKvB,EAAM,MAAM,KAAK,IAAI,mBAAmB,EAE9CqB,EAAYrB,CAAG,EAEf,IAAMQ,EAAW,MAAMC,GAAQT,EAAK,CAClC,OAAQ,OACR,QAAS,KAAK,cAAc,MAAM,CAAE,YAAasB,EAAQ,WAAY,CAAC,EACtE,KAAAJ,EACA,cAAe,KAAK,aACtB,CAAC,EAED,MAAM,KAAK,YAAY,MAAMP,GAAgBH,EAAU,KAAK,aAAa,CAAC,EAE1E,IAAMY,EAAU,MAAMZ,EAAS,KAAK,EAE9B,CAAE,WAAAL,CAAW,EAAIiB,EACnBjB,GACF,KAAK,4BAA4BA,CAAU,EAG7C,IAAMsB,EAAKL,EAAO,GACZM,EAAWN,EAAO,YAAY,EAAE,SAEtC,MAAO,CAAE,GAAAK,EAAI,QAAS,CAAE,SAAAC,CAAS,CAAE,CACrC,KAAO,CACL,IAAM1B,EAAM,GAAGuB,EAAI,QAAQ,QAAQ,IAAIjB,CAAM,GAE7Ce,EAAYrB,CAAG,EAEf,IAAMQ,EAAW,MAAMC,GAAQT,EAAK,CAClC,OAAQ,OACR,QAAS,KAAK,cAAc,MAAM,CAAE,YAAasB,EAAQ,WAAY,CAAC,EACtE,cAAe,KAAK,aACtB,CAAC,EAED,MAAM,KAAK,YAAY,MAAMX,GAAgBH,EAAU,KAAK,aAAa,CAAC,EAE1E,IAAMY,EAAU,MAAMZ,EAAS,KAAK,EAE9B,CAAE,WAAAL,CAAW,EAAIiB,EACnBjB,GACF,KAAK,4BAA4BA,CAAU,EAG7C,MACF,CACF,CACF,CAAC,CACH,CAEQ,iBAAkB,CACxB,OAAOwB,GAAgB,CACrB,cAAe,KAAK,cACpB,IAAK,KAAK,IACV,kBAAmB,KAAK,kBACxB,oBAAqB,KAAK,OAAO,mBACnC,CAAC,CACH,CAIA,SAA8C,CAC5C,MAAM,IAAIC,GAAuB,+CAAgD,CAC/E,cAAe,KAAK,aACtB,CAAC,CACH,CAEA,MAAc,UAAaC,EAGZ,CACb,QAASC,EAAU,GAAKA,IAAW,CACjC,IAAMT,EAAerB,GAAgB,CACnC,KAAK,WAAW,KAAK,OAAQ,CAC3B,QAAS,WAAWA,CAAG,OAAO8B,CAAO,IACrC,UAAW,IAAI,KACf,OAAQ,EACV,CAAC,CACH,EAEA,GAAI,CACF,OAAO,MAAMD,EAAK,SAAS,CAAE,YAAAR,CAAY,CAAC,CAC5C,OAASU,EAAG,CAEV,GADI,EAAEA,aAAaC,KACf,CAACD,EAAE,YAAa,MAAMA,EAC1B,GAAID,GAAWtC,GACb,MAAIuC,aAAaE,GACTF,EAAE,MAEFA,EAIV,KAAK,WAAW,KAAK,OAAQ,CAC3B,QAAS,WAAWD,EAAU,CAAC,IAAItC,EAAW,eAAeqC,EAAK,YAAY,KAAKE,EAAE,SAAW,WAAW,GAC3G,UAAW,IAAI,KACf,OAAQ,EACV,CAAC,EAED,IAAMG,EAAQ,MAAMC,GAAQL,CAAO,EAEnC,KAAK,WAAW,KAAK,OAAQ,CAC3B,QAAS,kBAAkBI,CAAK,KAChC,UAAW,IAAI,KACf,OAAQ,EACV,CAAC,CACH,CACF,CACF,CAEA,MAAc,YAAYxB,EAAkD,CAC1E,GAAIA,aAAiB0B,GACnB,YAAM,KAAK,aAAa,EAClB,IAAIH,GAAiB,CACzB,cAAe,KAAK,cACpB,MAAOvB,CACT,CAAC,EACI,GAAIA,EACT,MAAMA,CAEV,CAEQ,mCACN2B,EACiE,CAEjE,OAAIA,EAAO,SAAW,EACbC,GAAuBD,EAAO,CAAC,EAAG,KAAK,OAAO,cAAe,KAAK,OAAO,cAAe,EAExF,IAAIE,GAAgC,KAAK,UAAUF,CAAM,EAAG,CACjE,cAAe,KAAK,OAAO,aAC7B,CAAC,CAEL,CAEA,wBAAwC,CACtC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,CACF,EC9bO,SAASG,GAA6B,CAC3C,IAAAC,EACA,QAAAC,EACA,WAAAC,EACA,gBAAAC,CACF,EAA2E,CACzE,IAAMC,EAAW,CAAC,EACZC,EAAS,CAAC,EAEVC,EAAeC,GAAsC,CACzDH,EAAS,KAAK,CAAE,KAAM,UAAW,MAAOG,CAAM,CAAC,CACjD,EAEMC,EAAaD,GAAoB,CACrC,IAAME,EAAQF,EAAM,KAAK;AAAA,CAAI,EAC7BF,EAAO,KAAK,CAAE,KAAM,QAAS,MAAAI,CAAM,CAAC,CACtC,EAEMC,EAA0B,EAAQV,GAAK,WAAW,WAAW,EAC7DW,EAAwBC,GAAiBZ,CAAG,EAC5Ca,EAAwB,EAAQZ,EAChCa,EAAwBJ,GAA2BC,EAGvD,CAACE,GACDX,GACAY,GACAX,IAAoB,UACpBA,IAAoB,sBAEpBG,EAAY,CACV,uBACA,iGACF,CAAC,EAGH,IAAMS,EAAyBD,GAAyB,CAACZ,EAGrDW,IAA0BE,GAA0BZ,IAAoB,UACtEA,IAAoB,OACtBK,EAAU,CACR,yGACA,uGACF,CAAC,EACSN,EAKDQ,GACTF,EAAU,CACR,8FACA,mGACF,CAAC,EARDA,EAAU,CACR,6GACA,sGACF,CAAC,GASL,IAAMQ,EAAU,CACd,WAAYD,EACZ,IAAKJ,EACL,eAAgBE,CAClB,EAEA,SAASI,EAAmBC,EAA8B,CACxD,OAAOA,EAAI,OAAS,CACtB,CAEA,OAAID,EAAgBZ,CAAM,EACjB,CACL,GAAI,GACJ,YAAa,CACX,SAAAD,EACA,OAAAC,CACF,EACA,QAAAW,CACF,EAGK,CACL,GAAI,GACJ,YAAa,CAAE,SAAAZ,CAAS,EACxB,QAAAY,CACF,CACF,CCjIO,SAASG,GAAkB,CAAE,WAAAC,EAAa,EAAK,EAA0BC,EAAoC,CAClH,IAAIC,EAEJ,GAAI,CACFA,EAAMC,GAAqB,CACzB,kBAAmBF,EAAa,kBAChC,oBAAqBA,EAAa,oBAClC,IAAK,CAAE,GAAGA,EAAa,IAAK,GAAG,QAAQ,GAAI,EAC3C,cAAeA,EAAa,aAC9B,CAAC,CACH,MAAQ,CAGR,CAEA,GAAM,CAAE,GAAAG,EAAI,QAAAC,EAAS,YAAAC,CAAY,EAAIC,GAA6B,CAChE,IAAAL,EACA,QAASD,EAAa,QACtB,WAAAD,EACA,gBAAiB,QACnB,CAAC,EAED,QAAWQ,KAAWF,EAAY,SAChCG,GAAS,GAAGD,EAAQ,KAAK,EAG3B,GAAI,CAACJ,EAAI,CACP,IAAMM,EAAQJ,EAAY,OAAO,CAAC,EAClC,MAAM,IAAIK,GAA4BD,EAAM,MAAO,CAAE,cAAeT,EAAa,aAAc,CAAC,CAClG,CAEA,IAAMW,EAAaC,GAAoBZ,EAAa,SAAU,EAExDa,EAA0BF,IAAe,UACzCG,EAAyBH,IAAe,SACxCI,EAAyBJ,IAAe,SAYxCK,GAAkCZ,EAAQ,YAAcA,EAAQ,MAAQ,CAACA,EAAQ,eAOlF,OAAIA,EAAQ,WAA+D,IAAIa,GAAgBjB,CAAY,GACvGI,EAAQ,eAERU,EAAiE,IAAII,GAAalB,CAAY,GAC9FI,EAAQ,WAI+B,IAAIc,GAAalB,CAAY,GAQ/E,CChFO,SAASmB,GAAmB,CAAE,UAAAC,CAAU,EAAqB,CAClE,OAAOA,GAAW,iBAAmB,CAAC,CACxC,CCTO,IAAMC,GAAwBC,IAAqB,CACxD,QAAAA,CACF,GCCO,IAAMC,GAA0BC,GAC9BA,EAAI,QAAQ,OAAO,CAACC,EAAKC,EAAKC,IAAQ,GAAGF,CAAG,KAAKE,CAAG,GAAGD,CAAG,EAAE,ECA9D,SAASE,GAAuBC,EAA2B,CAChE,GAAI,CACF,OAAOC,GAA+BD,EAAY,MAAM,CAC1D,MAAgB,CAGd,OAAOC,GAA+BD,EAAY,MAAM,CAC1D,CACF,CAEA,SAASC,GAA+BD,EAAmBE,EAA8C,CACvG,OAAO,KAAK,UAAUF,EAAW,IAAKG,GAAcC,GAAgBD,EAAWD,CAAmB,CAAC,CAAC,CACtG,CAEA,SAASE,GAAgBD,EAAgBD,EAA+C,CACtF,GAAI,MAAM,QAAQC,CAAS,EACzB,OAAOA,EAAU,IAAKE,GAASD,GAAgBC,EAAMH,CAAmB,CAAC,EAE3E,GAAI,OAAOC,GAAc,SACvB,MAAO,CACL,aAAc,SACd,cAAeA,EAAU,SAAS,CACpC,EAGF,GAAIG,GAAOH,CAAS,EAClB,MAAO,CACL,aAAc,OACd,cAAeA,EAAU,OAAO,CAClC,EAGF,GAAII,GAAQ,UAAUJ,CAAS,EAC7B,MAAO,CACL,aAAc,UACd,cAAeA,EAAU,OAAO,CAClC,EAGF,GAAI,OAAO,SAASA,CAAS,EAC3B,MAAO,CACL,aAAc,QACd,cAAeA,EAAU,SAAS,QAAQ,CAC5C,EAGF,GAAIK,GAAkBL,CAAS,EAC7B,MAAO,CACL,aAAc,QACd,cAAe,OAAO,KAAKA,CAAS,EAAE,SAAS,QAAQ,CACzD,EAGF,GAAI,YAAY,OAAOA,CAAS,EAAG,CACjC,GAAM,CAAE,OAAAM,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAIR,EAC3C,MAAO,CACL,aAAc,QACd,cAAe,OAAO,KAAKM,EAAQC,EAAYC,CAAU,EAAE,SAAS,QAAQ,CAC9E,CACF,CAEA,OAAI,OAAOR,GAAc,UAAYD,IAAwB,OACpDU,GAAiBT,CAAS,EAG5BA,CACT,CAEA,SAASK,GAAkBK,EAAsC,CAC/D,OAAIA,aAAiB,aAAeA,aAAiB,kBAC5C,GAGL,OAAOA,GAAU,UAAYA,IAAU,KAClCA,EAAM,OAAO,WAAW,IAAM,eAAiBA,EAAM,OAAO,WAAW,IAAM,oBAG/E,EACT,CAEA,SAASD,GAAiBE,EAAmB,CAC3C,GAAI,OAAOA,GAAQ,UAAYA,IAAQ,KACrC,OAAOA,EAGT,GAAI,OAAOA,EAAI,QAAW,WACxB,OAAOA,EAAI,OAAO,EAMpB,GAAI,MAAM,QAAQA,CAAG,EACnB,OAAOA,EAAI,IAAIC,EAAuB,EAGxC,IAAMC,EAAS,CAAC,EAEhB,QAAWC,KAAO,OAAO,KAAKH,CAAa,EACzCE,EAAOC,CAAG,EAAIF,GAAwBD,EAAIG,CAAG,CAAC,EAGhD,OAAOD,CACT,CAEA,SAASD,GAAwBF,EAAqB,CACpD,OAAI,OAAOA,GAAU,SACZA,EAAM,SAAS,EAGjBD,GAAiBC,CAAK,CAC/B,CC1GA,IAAMK,GAAW,iBAEXC,GAAQC,GAAM,eAAe,EAG5B,SAASC,GAAWC,EAAwBC,EAAeC,EAAmBC,EAAqB,CACxG,GAAI,EAAAH,IAAmB,cAAgBA,IAAmB,gBAGtDE,EAAO,OAAS,GAAKN,GAAS,KAAKK,CAAK,EAE1C,MAAM,IAAI,MAAM,uBAAuBE,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAOrD,CAED,CAOO,IAAMC,GACX,CAAC,CAAE,aAAAC,EAAc,eAAAL,CAAe,IAC/BM,GAAuB,CAEtB,IAAIC,EAAc,GACdC,EACJ,GAAIC,GAAWH,CAAI,EACjBC,EAAcD,EAAK,IACnBE,EAAa,CACX,OAAQE,GAAuBJ,EAAK,MAAM,EAC1C,wBAAyB,EAC3B,UACS,MAAM,QAAQA,CAAI,EAAG,CAE9B,GAAM,CAACL,EAAO,GAAGC,CAAM,EAAII,EAC3BC,EAAcN,EACdO,EAAa,CACX,OAAQE,GAAuBR,GAAU,CAAC,CAAC,EAC3C,wBAAyB,EAC3B,CACF,KAEE,QAAQF,EAAgB,CACtB,IAAK,SACL,IAAK,QAAS,CACZO,EAAcD,EAAK,IACnBE,EAAa,CACX,OAAQE,GAAuBJ,EAAK,MAAM,EAC1C,wBAAyB,EAC3B,EACA,KACF,CAEA,IAAK,cACL,IAAK,aACL,IAAK,WAAY,CACfC,EAAcD,EAAK,KAEnBE,EAAa,CACX,OAAQE,GAAuBJ,EAAK,MAAM,EAC1C,wBAAyB,EAC3B,EACA,KACF,CAEA,IAAK,YAAa,CAChBC,EAAcI,GAAuBL,CAAI,EACzCE,EAAa,CACX,OAAQE,GAAuBJ,EAAK,MAAM,EAC1C,wBAAyB,EAC3B,EACA,KACF,CACA,QACE,MAAM,IAAI,MAAM,OAAON,CAAc,8BAA8BK,CAAY,EAAE,CAErF,CAGF,OAAIG,GAAY,OACdX,GAAM,UAAUQ,CAAY,IAAIE,CAAW,KAAKC,EAAW,MAAM,GAAG,EAEpEX,GAAM,UAAUQ,CAAY,IAAIE,CAAW,GAAG,EAGzC,CAAE,MAAOA,EAAa,WAAAC,CAAW,CAC1C,EAKWI,GAAiG,CAC5G,4BAA4BC,EAAK,CAC/B,MAAO,CAACA,EAAI,QAAS,GAAGA,EAAI,MAAM,CACpC,EAEA,4BAA4BC,EAAa,CACvC,GAAM,CAACC,EAAS,GAAGb,CAAM,EAAIY,EAC7B,OAAO,IAAIE,GAAID,EAASb,CAAM,CAChC,CACF,EAEae,GAA2E,CACtF,4BAA4BJ,EAAK,CAC/B,MAAO,CAACA,CAAG,CACb,EAEA,4BAA4BC,EAAa,CACvC,OAAOA,EAAY,CAAC,CACtB,CACF,ECvGO,SAASI,GAA2BC,EAA8D,CACvG,OAAO,SACLC,EACAC,EAC+B,CAC/B,IAAIC,EACEC,EAAY,CAACC,EAAsBL,IAAwC,CAC/E,GAAI,CAEF,OAAIK,IAAwB,QAAaA,GAAqB,OAAS,MAC7DF,IAAYG,GAAeL,EAASI,CAAmB,CAAC,EAI3DC,GAAeL,EAASI,CAAmB,CAAC,CACrD,OAASE,EAAO,CAGd,OAAO,QAAQ,OAAOA,CAAK,CAC7B,CACF,EAEA,MAAO,CACL,IAAI,MAAO,CACT,OAAOL,CACT,EAEA,KAAKM,EAAaC,EAAY,CAC5B,OAAOL,EAAU,EAAE,KAAKI,EAAaC,CAAU,CACjD,EACA,MAAMA,EAAY,CAChB,OAAOL,EAAU,EAAE,MAAMK,CAAU,CACrC,EACA,QAAQC,EAAW,CACjB,OAAON,EAAU,EAAE,QAAQM,CAAS,CACtC,EAEA,mBAAmBC,EAAkB,CACnC,IAAMR,EAAUC,EAAUO,CAAgB,EAE1C,OAAIR,EAAQ,mBAEHA,EAAQ,mBAAmBQ,CAAgB,EAG7CR,CACT,EACA,CAAC,OAAO,WAAW,EAAG,eACxB,CACF,CACF,CAEA,SAASG,GAAkBM,EAA4B,CACrD,OAAI,OAAOA,EAAM,MAAY,WACpBA,EAGF,QAAQ,QAAQA,CAAK,CAC9B,CC9EA,IAAMC,GAAeC,GAAQ,MAAM,GAAG,EAAE,CAAC,EAE5BC,GAAuC,CAClD,WAAY,CACV,MAAO,EACT,EACA,gBAAiB,CAIf,MAAO,aACT,EAEA,qBAAsB,CAAC,EAEvB,kBAAmB,CAEnB,EAEA,eAAkBC,EAAuCC,EAA8B,CACrF,OAAOA,EAAS,CAClB,CACF,EAOMC,GAAN,KAAoD,CAClD,WAAqB,CACnB,OAAO,KAAK,uBAAuB,EAAE,UAAU,CACjD,CACA,eAAeC,EAAkB,CAC/B,OAAO,KAAK,uBAAuB,EAAE,eAAeA,CAAO,CAC7D,CAEA,oBAAoBC,EAAqB,CACvC,OAAO,KAAK,uBAAuB,EAAE,oBAAoBA,CAAK,CAChE,CAEA,kBAAmB,CACjB,OAAO,KAAK,uBAAuB,EAAE,iBAAiB,CACxD,CACA,eAAkBJ,EAAuCC,EAA8B,CACrF,OAAO,KAAK,uBAAuB,EAAE,eAAeD,EAASC,CAAQ,CACvE,CAEQ,wBAAwC,CAE9C,IAAMI,EAAuC,WAAW,IAAIR,EAAY,yBAAyB,EAC3FS,EAAsC,WAAW,uBAEvD,OACED,GAAsC,QAItCC,GAAqC,QACrCP,EAEJ,CACF,EAEO,SAASQ,IAAkC,CAChD,OAAO,IAAIL,EACb,CC3DO,SAASM,GAA8BC,EAAeC,EAAqB,IAAM,CAAC,EAAG,CAC1F,IAAIC,EACEC,EAAO,IAAI,QAAmBC,GAASF,EAAUE,CAAI,EAE3D,MAAO,CACL,KAAKC,EAAa,CAChB,MAAI,EAAEL,IAAU,GAAGE,EAAQD,EAAG,CAAC,EAExBI,IAAcF,CAA2B,CAClD,CACF,CACF,CCfO,SAASG,GAAYC,EAAuE,CACjG,OAAI,OAAOA,GAAQ,SACVA,EAEFA,EAAI,OAA6B,CAACC,EAAKC,IAAS,CACrD,IAAMC,EAAe,OAAOD,GAAS,SAAWA,EAAOA,EAAK,MAC5D,OAAIC,IAAiB,QACZF,EAEJA,IAGDC,IAAS,QAAUD,IAAQ,QAEtB,OAJAE,CAOX,EAAG,MAAS,CACd,CCpBO,SAASC,GAAcC,EAAuD,CACnF,OAAO,OAAOA,EAAM,iBAAuB,QAC7C,CCJO,SAASC,GAAWC,EAAsC,CAC/D,GAAIA,EAAM,SAAW,cAAgBA,EAAM,SAAW,oBACpD,OAEF,IAAMC,EAAkB,CAAC,EACzB,OAAID,EAAM,WACRC,EAAM,KAAKD,EAAM,SAAS,EAGxBA,EAAM,MAAM,WACdC,EAAM,KAAKC,GAAgBF,EAAM,MAAM,SAAS,CAAC,EAEnDC,EAAM,KAAKC,GAAgBF,EAAM,MAAM,SAAS,CAAC,EAE1CC,EAAM,KAAK,EAAE,CACtB,CAEA,SAASC,GAAgBC,EAAqB,CAW5C,MAAO,IAVW,OAAO,KAAKA,CAAG,EAC9B,KAAK,EACL,IAAKC,GAAQ,CACZ,IAAMC,EAAQF,EAAIC,CAAG,EACrB,OAAI,OAAOC,GAAU,UAAYA,IAAU,KAClC,IAAID,CAAG,IAAIF,GAAgBG,CAAK,CAAC,IAEnCD,CACT,CAAC,EAEkB,KAAK,GAAG,CAAC,GAChC,CC7BA,IAAME,GAA6C,CACjD,UAAW,GACX,aAAc,GACd,WAAY,GACZ,oBAAqB,GACrB,UAAW,GACX,WAAY,GACZ,UAAW,GACX,WAAY,GACZ,UAAW,GACX,iBAAkB,GAClB,SAAU,GACV,QAAS,GACT,WAAY,GACZ,kBAAmB,GACnB,QAAS,GACT,SAAU,GACV,cAAe,GACf,WAAY,GACZ,oBAAqB,GACrB,UAAW,GACX,UAAW,EACb,EAEO,SAASC,GAAQC,EAAkC,CACxD,OAAOF,GAASE,CAAM,CACxB,CCbO,IAAMC,GAAN,KAA8B,CAGnC,YAAoBC,EAA+B,CAA/B,aAAAA,EAClB,KAAK,QAAU,CAAC,CAClB,CAJA,QACQ,WAAa,GAKrB,QAAQC,EAA0B,CAChC,IAAMC,EAAO,KAAK,QAAQ,QAAQD,CAAO,EACzC,OAAKC,GAGA,KAAK,QAAQA,CAAI,IACpB,KAAK,QAAQA,CAAI,EAAI,CAAC,EAGjB,KAAK,aACR,KAAK,WAAa,GAClB,QAAQ,SAAS,IAAM,CACrB,KAAK,gBAAgB,EACrB,KAAK,WAAa,EACpB,CAAC,IAIE,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,KAAK,QAAQF,CAAI,EAAE,KAAK,CACtB,QAAAD,EACA,QAAAE,EACA,OAAAC,CACF,CAAC,CACH,CAAC,GArBQ,KAAK,QAAQ,aAAaH,CAAO,CAsB5C,CAEQ,iBAAkB,CACxB,QAAWI,KAAO,KAAK,QAAS,CAC9B,IAAMC,EAAQ,KAAK,QAAQD,CAAG,EAC9B,OAAO,KAAK,QAAQA,CAAG,EAInBC,EAAM,SAAW,EACnB,KAAK,QACF,aAAaA,EAAM,CAAC,EAAE,OAAO,EAC7B,KAAMC,GAAW,CACZA,aAAkB,MACpBD,EAAM,CAAC,EAAE,OAAOC,CAAM,EAEtBD,EAAM,CAAC,EAAE,QAAQC,CAAM,CAE3B,CAAC,EACA,MAAOC,GAAM,CACZF,EAAM,CAAC,EAAE,OAAOE,CAAC,CACnB,CAAC,GAEHF,EAAM,KAAK,CAACG,EAAGC,IAAM,KAAK,QAAQ,WAAWD,EAAE,QAASC,EAAE,OAAO,CAAC,EAClE,KAAK,QACF,YAAYJ,EAAM,IAAKK,GAAMA,EAAE,OAAO,CAAC,EACvC,KAAMC,GAAY,CACjB,GAAIA,aAAmB,MACrB,QAASC,EAAI,EAAGA,EAAIP,EAAM,OAAQO,IAChCP,EAAMO,CAAC,EAAE,OAAOD,CAAO,MAGzB,SAASC,EAAI,EAAGA,EAAIP,EAAM,OAAQO,IAAK,CACrC,IAAMC,EAAQF,EAAQC,CAAC,EACnBC,aAAiB,MACnBR,EAAMO,CAAC,EAAE,OAAOC,CAAK,EAErBR,EAAMO,CAAC,EAAE,QAAQC,CAAK,CAE1B,CAEJ,CAAC,EACA,MAAON,GAAM,CACZ,QAASK,EAAI,EAAGA,EAAIP,EAAM,OAAQO,IAChCP,EAAMO,CAAC,EAAE,OAAOL,CAAC,CAErB,CAAC,EAEP,CACF,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,YACT,CACF,EC5FA,SAASO,GAAiBC,EAAqCC,EAAyB,CACtF,GAAIA,IAAU,KACZ,OAAOA,EAGT,OAAQD,EAAM,CACZ,IAAK,SACH,OAAO,OAAOC,CAAe,EAE/B,IAAK,QAAS,CACZ,GAAM,CAAE,OAAAC,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAI,OAAO,KAAKH,EAAiB,QAAQ,EAChF,OAAO,IAAI,WAAWC,EAAQC,EAAYC,CAAU,CACtD,CAEA,IAAK,UACH,OAAO,IAAIC,GAAQJ,CAAe,EAEpC,IAAK,WACL,IAAK,OACH,OAAO,IAAI,KAAKA,CAAe,EAEjC,IAAK,OACH,OAAO,IAAI,KAAK,cAAcA,CAAK,GAAG,EAExC,IAAK,eACH,OAAQA,EAAoB,IAAKK,GAAeP,GAAiB,SAAUO,CAAC,CAAC,EAC/E,IAAK,cACH,OAAQL,EAAoB,IAAKK,GAAeP,GAAiB,QAASO,CAAC,CAAC,EAC9E,IAAK,gBACH,OAAQL,EAAoB,IAAKK,GAAeP,GAAiB,UAAWO,CAAC,CAAC,EAChF,IAAK,iBACH,OAAQL,EAAoB,IAAKK,GAAeP,GAAiB,WAAYO,CAAC,CAAC,EACjF,IAAK,aACH,OAAQL,EAAoB,IAAKK,GAAeP,GAAiB,OAAQO,CAAC,CAAC,EAC7E,IAAK,aACH,OAAQL,EAAoB,IAAKK,GAAeP,GAAiB,OAAQO,CAAC,CAAC,EAE7E,QACE,OAAOL,CACX,CACF,CAIO,SAASM,GAAqBC,EAA6C,CAChF,IAAMC,EAA6C,CAAC,EAE9CC,EAAsBC,GAAgCH,CAAQ,EAEpE,QAASI,EAAI,EAAGA,EAAIJ,EAAS,KAAK,OAAQI,IAAK,CAC7C,IAAMC,EAAML,EAAS,KAAKI,CAAC,EACrBE,EAAY,CAAE,GAAGJ,CAAoB,EAE3C,QAASK,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BD,EAAUN,EAAS,QAAQO,CAAC,CAAC,EAAIhB,GAAiBS,EAAS,MAAMO,CAAC,EAAGF,EAAIE,CAAC,CAAC,EAG7EN,EAAqB,KAAKK,CAAS,CACrC,CAEA,OAAOL,CACT,CAEA,SAASE,GAAgCH,EAA6C,CACpF,IAAMK,EAAM,CAAC,EAEb,QAASD,EAAI,EAAGA,EAAIJ,EAAS,QAAQ,OAAQI,IAC3CC,EAAIL,EAAS,QAAQI,CAAC,CAAC,EAAI,KAG7B,OAAOC,CACT,CC3CA,IAAMG,GAAQC,GAAM,+BAA+B,EA8BtCC,GAAN,KAAqB,CAC1B,OACA,WACQ,WAER,YAAYC,EAAgBC,EAAyB,CACnD,KAAK,WAAaA,EAClB,KAAK,OAASD,EAEd,KAAK,WAAa,IAAIE,GAAW,CAC/B,YAAaC,GAAmC,MAAO,CAAE,SAAAC,EAAU,qBAAAC,CAAqB,IAAM,CAC5F,GAAM,CAAE,YAAAC,EAAa,cAAAC,CAAc,EAAIH,EAAS,CAAC,EAC3CI,EAAUJ,EAAS,IAAKK,GAAMA,EAAE,aAAa,EAC7CC,EAAc,KAAK,OAAO,eAAe,eAAeH,CAAa,EAKrEI,EAAgBP,EAAS,KAAMK,GAAMG,GAAQH,EAAE,cAAc,MAAM,CAAC,EAS1E,OAPgB,MAAM,KAAK,OAAO,QAAQ,aAAaD,EAAS,CAC9D,YAAAE,EACA,YAAaG,GAAsBP,CAAW,EAC9C,cAAAK,EACA,qBAAAN,CACF,CAAC,GAEc,IAAI,CAACS,EAAQC,IAAM,CAChC,GAAID,aAAkB,MACpB,OAAOA,EAGT,GAAI,CACF,OAAO,KAAK,qBAAqBV,EAASW,CAAC,EAAGD,CAAM,CACtD,OAASE,EAAO,CACd,OAAOA,CACT,CACF,CAAC,CACH,CAAC,EAED,aAAc,MAAOC,GAAY,CAC/B,IAAMC,EACJD,EAAQ,aAAa,OAAS,MAAQE,GAAyBF,EAAQ,WAAW,EAAI,OAElFG,EAAW,MAAM,KAAK,OAAO,QAAQ,QAAQH,EAAQ,cAAe,CACxE,YAAa,KAAK,OAAO,eAAe,eAAe,EACvD,uBAAAC,EACA,QAASN,GAAQK,EAAQ,cAAc,MAAM,EAC7C,qBAAsBA,EAAQ,oBAChC,CAAC,EACD,OAAO,KAAK,qBAAqBA,EAASG,CAAQ,CACpD,EAEA,QAAUH,GACJA,EAAQ,aAAa,GAChB,eAAeA,EAAQ,YAAY,EAAE,GAGvCI,GAAWJ,EAAQ,aAAa,EAGzC,WAAWK,EAAUC,EAAU,CAC7B,OAAID,EAAS,aAAa,OAAS,SAAWC,EAAS,aAAa,OAAS,QACpED,EAAS,YAAY,MAAQC,EAAS,YAAY,MAEpD,CACT,CACF,CAAC,CACH,CAEA,MAAM,QAAQC,EAAuB,CACnC,GAAI,CACF,OAAO,MAAM,KAAK,WAAW,QAAQA,CAAM,CAC7C,OAASR,EAAO,CACd,GAAM,CAAE,aAAAS,EAAc,SAAAC,EAAU,YAAApB,EAAa,KAAAqB,EAAM,UAAAC,CAAU,EAAIJ,EACjE,KAAK,yBAAyB,CAC5B,MAAAR,EACA,aAAAS,EACA,SAAAC,EACA,YAAApB,EACA,KAAAqB,EACA,UAAAC,EACA,WAAYJ,EAAO,UACrB,CAAC,CACH,CACF,CAEA,qBAAqB,CAAE,SAAAK,EAAU,SAAAC,CAAS,EAAkBV,EAAsC,CAChG,IAAMW,EAAOX,GAAU,KAKjBN,EAAS,KAAK,OAAOiB,EAAMF,EAAUC,CAAQ,EACnD,OAAI,QAAQ,IAAI,uBACP,CAAE,KAAMhB,CAAO,EAEjBA,CACT,CAMA,yBAAyBU,EAAkC,CACzD,GAAI,CACF,KAAK,mBAAmBA,CAAM,CAChC,OAASQ,EAAK,CACZ,MAAI,KAAK,YACP,KAAK,WAAW,KAAK,QAAS,CAAE,QAASA,EAAI,QAAS,OAAQR,EAAO,aAAc,UAAW,IAAI,IAAO,CAAC,EAEtGQ,CACR,CACF,CAEA,mBAAmB,CACjB,MAAAhB,EACA,aAAAS,EACA,SAAAC,EACA,YAAApB,EACA,KAAAqB,EACA,UAAAC,EACA,WAAAK,CACF,EAA6B,CAG3B,GAFApC,GAAMmB,CAAK,EAEPkB,GAAwBlB,EAAOV,CAAW,EAG5C,MAAMU,EAGR,GAAIA,aAAiBmB,IAAiCC,GAAkBpB,CAAK,EAAG,CAC9E,IAAMqB,EAAkBC,GAAuBtB,EAAM,IAA6B,EAClFuB,GAAyB,CACvB,KAAAZ,EACA,OAAQ,CAACU,CAAe,EACxB,SAAAX,EACA,YAAa,KAAK,OAAO,aACzB,eAAgBD,EAChB,cAAe,KAAK,OAAO,eAC3B,WAAAQ,CACF,CAAC,CACH,CAEA,IAAIO,EAAUxB,EAAM,QAapB,GAZIU,IACFc,EAAUC,GAA8B,CACtC,SAAAf,EACA,eAAgBD,EAChB,QAAST,EAAM,QACf,WAAY,KAAK,OAAO,eAAiB,SACzC,QAAAwB,CACF,CAAC,GAGHA,EAAU,KAAK,gBAAgBA,CAAO,EAElCxB,EAAM,KAAM,CACd,IAAM0B,EAAOd,EAAY,CAAE,UAAAA,EAAW,GAAGZ,EAAM,IAAK,EAAIA,EAAM,KAC9D,MAAM,IAAImB,GAA8BK,EAAS,CAC/C,KAAMxB,EAAM,KACZ,cAAe,KAAK,OAAO,eAC3B,KAAA0B,EACA,gBAAiB1B,EAAM,eACzB,CAAC,CACH,KAAO,IAAIA,EAAM,QACf,MAAM,IAAI2B,GAA2BH,EAAS,KAAK,OAAO,cAAc,EACnE,GAAIxB,aAAiB4B,GAC1B,MAAM,IAAIA,GAAgCJ,EAAS,CACjD,cAAe,KAAK,OAAO,eAC3B,gBAAiBxB,EAAM,eACzB,CAAC,EACI,GAAIA,aAAiB6B,EAC1B,MAAM,IAAIA,EAAgCL,EAAS,KAAK,OAAO,cAAc,EACxE,GAAIxB,aAAiB2B,GAC1B,MAAM,IAAIA,GAA2BH,EAAS,KAAK,OAAO,cAAc,EAG1E,MAAAxB,EAAM,cAAgB,KAAK,OAAO,eAE5BA,CACR,CAEA,gBAAgBwB,EAAS,CACvB,OAAI,KAAK,OAAO,cAAgB,KAAK,OAAO,eAAiB,SACpDM,GAAUN,CAAO,EAEnBA,CACT,CAEA,OAAOT,EAAeF,EAAoBC,EAAqB,CAQ7D,GAPI,CAACC,IAGDA,EAAK,OACPA,EAAOA,EAAK,MAGV,CAACA,GACH,OAAOA,EAET,IAAMgB,EAAY,OAAO,KAAKhB,CAAI,EAAE,CAAC,EAC/BX,EAAW,OAAO,OAAOW,CAAI,EAAE,CAAC,EAChCiB,EAAanB,EAAS,OAAQoB,GAAQA,IAAQ,UAAYA,IAAQ,SAAS,EAC3EC,EAAoBC,GAAQ/B,EAAU4B,CAAU,EAChDI,EACJL,IAAc,WACVM,GAAqBH,CAAgC,EACpDI,GAAwBJ,CAAiB,EAEhD,OAAOpB,EAAWA,EAASsB,CAAoB,EAAIA,CACrD,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,gBACT,CACF,EAEA,SAASvC,GACPP,EAC6C,CAC7C,GAAKA,EAIL,IAAIA,EAAY,OAAS,QACvB,MAAO,CACL,KAAM,QACN,QAAS,CACP,eAAgBA,EAAY,cAC9B,CACF,EAGF,GAAIA,EAAY,OAAS,MACvB,MAAO,CACL,KAAM,MACN,QAASa,GAAyBb,CAAW,CAC/C,EAGFiD,GAAYjD,EAAa,0BAA0B,EACrD,CAEA,SAASa,GACPb,EAC4C,CAC5C,MAAO,CACL,GAAIA,EAAY,GAChB,QAASA,EAAY,OACvB,CACF,CAEA,SAAS4B,GAAwBlB,EAAYV,EAAmD,CAC9F,OAAOkD,GAAcxC,CAAK,GAAKV,GAAa,OAAS,SAAWU,EAAM,kBAAoBV,EAAY,KACxG,CAEA,SAAS8B,GAAkBpB,EAAsC,CAC/D,OACEA,EAAM,OAAS,SACfA,EAAM,OAAS,OAEnB,CASA,SAASsB,GAAuBtB,EAAqD,CACnF,GAAIA,EAAM,OAAS,QACjB,MAAO,CACL,KAAM,QACN,OAAQA,EAAM,OAAO,IAAIsB,EAAsB,CACjD,EAGF,GAAI,MAAM,QAAQtB,EAAM,aAAgB,EAAG,CACzC,GAAM,CAAC,CAAE,GAAGyC,CAAa,EAAIzC,EAAM,cAEnC,MAAO,CACL,GAAGA,EACH,cAAAyC,CACF,CACF,CAEA,OAAOzC,CACT,CCnWO,IAAM0C,GAAgBC,GCA7B,IAAAC,GAAkB,SCAX,IAAMC,GAAN,cAAqD,KAAM,CAChE,YAAYC,EAAiB,CAC3B,MAAMA,EAAU;AAAA,kDAAqD,EACrE,KAAK,KAAO,wCACd,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,wCACT,CACF,EACAC,EAAaF,GAAwC,wCAAwC,EDH7F,IAAMG,GAAkB,CACtB,cACA,gBACA,cACA,UACA,MACA,qBACA,OACA,YACF,EACMC,GAA8B,CAAC,SAAU,YAAa,SAAS,EAC/DC,GAAwB,CAAC,OAAQ,QAAS,OAAQ,OAAO,EAezDC,GAMF,CACF,YAAa,CAACC,EAAS,CAAE,gBAAAC,CAAgB,IAAM,CAC7C,GAAKD,EAGL,IAAI,OAAOA,GAAY,UAAY,MAAM,QAAQA,CAAO,EACtD,MAAM,IAAIE,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC,yDAC1C,EAGF,OAAW,CAACG,EAAKC,CAAK,IAAK,OAAO,QAAQJ,CAAO,EAAG,CAClD,GAAI,CAACC,EAAgB,SAASE,CAAG,EAAG,CAClC,IAAME,EACJC,GAAcH,EAAKF,CAAe,GAAK,2BAA2BA,EAAgB,KAAK,IAAI,CAAC,GAC9F,MAAM,IAAIC,GACR,sBAAsBC,CAAG,yCAAyCE,CAAU,EAC9E,CACF,CACA,GAAI,OAAOD,GAAU,UAAY,MAAM,QAAQA,CAAK,EAClD,MAAM,IAAIF,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC,oBAAoBG,CAAG;AAAA,uDAEjE,EAEF,GAAIC,GAAS,OAAOA,GAAU,SAC5B,OAAW,CAACG,EAAMC,CAAM,IAAK,OAAO,QAAQJ,CAAK,EAAG,CAClD,GAAIG,IAAS,MACX,MAAM,IAAIL,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC,oBAAoBG,CAAG;AAAA,uDAEjE,EAEF,GAAI,OAAOK,GAAW,SACpB,MAAM,IAAIN,GACR,iBAAiB,KAAK,UAAUM,CAAM,CAAC,oBAAoBL,CAAG;AAAA,uDAEhE,CAEJ,CAEJ,EACF,EACA,QAAS,CAACM,EAASC,IAAW,CAC5B,GAAI,CAACD,GAAWE,GAAoBD,EAAO,SAAS,IAAM,SACxD,MAAM,IAAIR,GACR,kGACF,EAGF,GAAIO,IAAY,KAIhB,IAAIA,IAAY,OACd,MAAM,IAAIP,GACR,8FACF,EAGF,GAAIS,GAAoBD,EAAO,SAAS,IAAM,SAC5C,MAAM,IAAIR,GACR,oGACF,EAEJ,EACA,cAAgBF,GAAY,CAC1B,GAAI,OAAOA,EAAY,KAAe,OAAOA,GAAY,SACvD,MAAM,IAAIE,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC;AAAA,8BAE1C,CAEJ,EACA,YAAcA,GAAY,CACxB,GAAKA,EAGL,IAAI,OAAOA,GAAY,SACrB,MAAM,IAAIE,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC,0DAC1C,EAEF,GAAI,CAACH,GAAa,SAASG,CAAsB,EAAG,CAClD,IAAMK,EAAaC,GAAcN,EAASH,EAAY,EACtD,MAAM,IAAIK,GACR,uBAAuBF,CAAO,yCAAyCK,CAAU,EACnF,CACF,EACF,EACA,IAAML,GAAY,CAChB,GAAI,CAACA,EACH,OAEF,GAAI,CAAC,MAAM,QAAQA,CAAO,EACxB,MAAM,IAAIE,GACR,iBAAiB,KAAK,UAAUF,CAAO,CAAC,kDAC1C,EAGF,SAASY,EAAiBC,EAAY,CACpC,GAAI,OAAOA,GAAU,UACf,CAACf,GAAU,SAASe,CAAiB,EAAG,CAC1C,IAAMR,EAAaC,GAAcO,EAAOf,EAAS,EACjD,MAAM,IAAII,GACR,sBAAsBW,CAAK,0CAA0CR,CAAU,EACjF,CACF,CAEJ,CAEA,QAAWS,KAAUd,EAAS,CAC5BY,EAAiBE,CAAM,EAEvB,IAAMC,EAAgB,CACpB,MAAOH,EACP,KAAOR,GAAU,CACf,IAAMY,EAAQ,CAAC,SAAU,OAAO,EAChC,GAAI,CAACA,EAAM,SAASZ,CAAK,EAAG,CAC1B,IAAMC,EAAaC,GAAcF,EAAOY,CAAK,EAC7C,MAAM,IAAId,GACR,iBAAiB,KAAK,UACpBE,CACF,CAAC,gEAAgEC,CAAU,EAC7E,CACF,CACF,CACF,EAEA,GAAIS,GAAU,OAAOA,GAAW,SAC9B,OAAW,CAACX,EAAKC,CAAK,IAAK,OAAO,QAAQU,CAAM,EAC9C,GAAIC,EAAcZ,CAAG,EACnBY,EAAcZ,CAAG,EAAEC,CAAK,MAExB,OAAM,IAAIF,GACR,oBAAoBC,CAAG,iDACzB,CAIR,CACF,EACA,mBAAqBH,GAAiB,CACpC,GAAI,CAACA,EACH,OAGF,IAAMiB,EAAUjB,EAAQ,QACxB,GAAIiB,GAAW,MAAQA,GAAW,EAChC,MAAM,IAAIf,GACR,iBAAiBe,CAAO,+GAC1B,EAGF,IAAMC,EAAUlB,EAAQ,QACxB,GAAIkB,GAAW,MAAQA,GAAW,EAChC,MAAM,IAAIhB,GACR,iBAAiBgB,CAAO,+GAC1B,CAEJ,EACA,KAAM,CAAClB,EAAkBU,IAAW,CAClC,GAAI,OAAOV,GAAY,SACrB,MAAM,IAAIE,GAAuC,4CAA4C,EAE/F,GAAIF,IAAY,KACd,MAAM,IAAIE,GAAuC,iCAAmC,EAGtF,IAAMiB,EAA0C,CAAC,EACjD,OAAW,CAACC,EAAUC,CAAW,IAAK,OAAO,QAAQrB,CAAO,EAAG,CAC7D,IAAMsB,EAAcC,GAAoBH,EAAUV,EAAO,gBAAgB,EACzE,GAAI,CAACY,EAAa,CAChBH,EAAiB,KAAK,CAAE,KAAM,eAAgB,SAAUC,CAAS,CAAC,EAClE,QACF,CACA,OAAW,CAACI,EAAWpB,CAAK,IAAK,OAAO,QAAQiB,CAAW,EAAG,CAC5D,IAAMI,EAAQH,EAAY,OAAO,KAAMG,GAAUA,EAAM,OAASD,CAAS,EACzE,GAAI,CAACC,EAAO,CACVN,EAAiB,KAAK,CAAE,KAAM,eAAgB,SAAAC,EAAU,UAAAI,CAAU,CAAC,EACnE,QACF,CACA,GAAIC,EAAM,aAAc,CACtBN,EAAiB,KAAK,CAAE,KAAM,iBAAkB,SAAAC,EAAU,UAAAI,CAAU,CAAC,EACrE,QACF,CACI,OAAOpB,GAAU,WACnBe,EAAiB,KAAK,CAAE,KAAM,oBAAqB,SAAAC,EAAU,UAAAI,CAAU,CAAC,CAE5E,CACF,CACA,GAAIL,EAAiB,OAAS,EAC5B,MAAM,IAAIjB,GACRwB,GAA2B1B,EAAoCmB,CAAgB,CACjF,CAEJ,EACA,WAAaf,GAAU,CACrB,GAAI,CAACA,EACH,OAEF,IAAMuB,EAAY,CAAC,QAAS,SAAU,gBAAgB,EACtD,GAAI,OAAOvB,GAAU,SACnB,MAAM,IAAIF,GACR,iBAAiB,KAAK,UAAUE,CAAK,CAAC,+CACxC,EAEF,OAAW,CAACD,CAAG,IAAK,OAAO,QAAQC,CAAK,EACtC,GAAI,CAACuB,EAAU,SAASxB,CAAG,EAAG,CAC5B,IAAME,EAAaC,GAAcH,EAAKwB,CAAS,EAC/C,MAAM,IAAIzB,GACR,oBAAoB,KAAK,UAAUC,CAAG,CAAC,0DAA0DE,CAAU,EAC7G,CACF,CAIJ,CACF,EAEO,SAASuB,GAA4B5B,EAA8BU,EAAsB,CAC9F,OAAW,CAACP,EAAKC,CAAK,IAAK,OAAO,QAAQJ,CAAO,EAAG,CAClD,GAAI,CAACJ,GAAgB,SAASO,CAAG,EAAG,CAClC,IAAME,EAAaC,GAAcH,EAAKP,EAAe,EACrD,MAAM,IAAIM,GACR,oBAAoBC,CAAG,yCAAyCE,CAAU,EAC5E,CACF,CACAN,GAAWI,CAAG,EAAEC,EAAOM,CAAM,CAC/B,CAEA,GAAIV,EAAQ,eAAiBA,EAAQ,YACnC,MAAM,IAAIE,GACR,0FACF,CAEJ,CAEA,SAASI,GAAcuB,EAAa7B,EAA2B,CAK7D,GAJIA,EAAQ,SAAW,GAInB,OAAO6B,GAAQ,SACjB,MAAO,GAGT,IAAMC,EAAcC,GAAeF,EAAK7B,CAAO,EAC/C,OAAK8B,EAIE,kBAAkBA,CAAW,KAH3B,EAIX,CAEA,SAASC,GAAeF,EAAa7B,EAAkC,CACrE,GAAIA,EAAQ,SAAW,EACrB,OAAO,KAGT,IAAMgC,EAAuBhC,EAAQ,IAAKI,IAAW,CACnD,MAAAA,EACA,YAAU,GAAA6B,SAAMJ,EAAKzB,CAAK,CAC5B,EAAE,EAEF4B,EAAqB,KAAK,CAACE,EAAGC,IACrBD,EAAE,SAAWC,EAAE,SAAW,GAAK,CACvC,EAED,IAAMC,EAAkBJ,EAAqB,CAAC,EAC9C,OAAII,EAAgB,SAAW,EACtBA,EAAgB,MAGlB,IACT,CAEA,SAASb,GAAoBH,EAAkBiB,EAA8D,CAC3G,OAAOC,GAAUD,EAAiB,OAAQjB,CAAQ,GAAKkB,GAAUD,EAAiB,MAAOjB,CAAQ,CACnG,CAEA,SAASkB,GAAaC,EAAwBpC,EAA4B,CACxE,IAAMqC,EAAW,OAAO,KAAKD,CAAG,EAAE,KAAME,GAAWC,GAAaD,CAAM,IAAMtC,CAAG,EAC/E,GAAIqC,EACF,OAAOD,EAAIC,CAAQ,CAGvB,CAEA,SAASd,GACPiB,EACAxB,EACQ,CACR,IAAMyB,EAAWC,GAA4BF,CAAU,EACvD,QAAWG,KAAS3B,EAClB,OAAQ2B,EAAM,KAAM,CAClB,IAAK,eACHF,EAAS,UAAU,SAASE,EAAM,QAAQ,GAAG,YAAY,EACzDF,EAAS,gBAAgB,IAAM,uBAAuBE,EAAM,QAAQ,GAAG,EACvE,MACF,IAAK,eACHF,EAAS,UAAU,aAAa,CAACE,EAAM,SAAUA,EAAM,SAAS,CAAC,GAAG,YAAY,EAChFF,EAAS,gBAAgB,IAAM,UAAUE,EAAM,QAAQ,kCAAkCA,EAAM,SAAS,IAAI,EAC5G,MACF,IAAK,iBACHF,EAAS,UAAU,aAAa,CAACE,EAAM,SAAUA,EAAM,SAAS,CAAC,GAAG,YAAY,EAChFF,EAAS,gBAAgB,IAAM,+EAA+E,EAC9G,MACF,IAAK,oBACHA,EAAS,UAAU,kBAAkB,CAACE,EAAM,SAAUA,EAAM,SAAS,CAAC,GAAG,YAAY,EACrFF,EAAS,gBAAgB,IAAM,4CAA4C,EAC3E,KACJ,CAEF,GAAM,CAAE,QAAAG,EAAS,KAAAC,CAAK,EAAIC,GAAeL,EAAU,WAAW,EAC9D,MAAO;AAAA;AAAA,EAAsCI,CAAI;AAAA;AAAA,EAAOD,CAAO,EACjE,CEpVO,SAASG,GACdC,EAC4C,CAC5C,OAAIA,EAAS,SAAW,EACf,QAAQ,QAAQ,CAAC,CAAsC,EAEzD,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAMC,EAAoB,IAAI,MAAMH,EAAS,MAAM,EAC/CI,EAAqB,KACrBC,EAAO,GACPC,EAAuB,EAErBC,EAAmB,IAAM,CACzBF,IAGJC,IACIA,IAAyBN,EAAS,SACpCK,EAAO,GACHD,EACFF,EAAOE,CAAS,EAEhBH,EAAQE,CAAiB,GAG/B,EAEMK,EAAqBC,GAAmB,CACvCJ,IACHA,EAAO,GACPH,EAAOO,CAAK,EAEhB,EAEA,QAASC,EAAI,EAAGA,EAAIV,EAAS,OAAQU,IACnCV,EAASU,CAAC,EAAE,KACTC,GAAW,CACVR,EAAkBO,CAAC,EAAIC,EACvBJ,EAAiB,CACnB,EACCE,GAAU,CACT,GAAI,CAACG,GAAcH,CAAK,EAAG,CACzBD,EAAkBC,CAAK,EACvB,MACF,CAEIA,EAAM,kBAAoBC,EAC5BF,EAAkBC,CAAK,GAElBL,IACHA,EAAYK,GAEdF,EAAiB,EAErB,CACF,CAEJ,CAAC,CACH,C9GJA,IAAMM,GAAQC,GAAM,eAAe,EAgBnC,OAAO,YAAe,WAAY,WAAW,YAAc,IAwG3D,IAAMC,GAAmE,CACvE,4BAA8BC,GAAUA,EACxC,4BAA8BA,GAAUA,CAC1C,EA+BMC,GAAQ,OAAO,IAAI,8BAA8B,EAEjDC,GAAmB,CACvB,GAAI,EACJ,QAAS,CACP,MAAO,EAAE,KAAK,EAChB,CACF,EAIO,SAASC,GAAgBC,EAA+B,CAC7D,MAAMC,CAAa,CACjB,gBAAkB,KAClB,kBACA,gBACA,mBACA,sBACA,cACA,wBACA,eACA,aACA,eACA,iBACA,gBACA,YACA,YAIA,QAKA,eACA,qBAAuBC,GAA2B,EAElD,YAAYC,EAAkC,CAC5CH,EAASG,GAAY,YAAY,iBAAiBH,CAAM,GAAKA,EAE7DI,GAAqBJ,CAAM,EAEvBG,GACFE,GAA4BF,EAAYH,CAAM,EAIhD,IAAMM,EAAa,IAAIC,GAAa,EAAE,GAAG,QAAS,IAAM,CAAC,CAAC,EAE1D,KAAK,YAAcC,GAAqB,MAAM,EAC9C,KAAK,iBAAmBC,GAAmBT,CAAM,EACjD,KAAK,eAAiBA,EAAO,eAAiBU,GAC9C,KAAK,gBAAkBV,EAAO,eAC9B,KAAK,YAAcG,GAAY,KAC/B,KAAK,eAAiBQ,GAAiB,EACvC,IAAMC,EAAWZ,EAAO,kBAAoB,CAC1C,YACEA,EAAO,iBAAiB,aAAea,GAAK,QAAQb,EAAO,QAASA,EAAO,iBAAiB,WAAW,EACzG,cACEA,EAAO,iBAAiB,eAAiBa,GAAK,QAAQb,EAAO,QAASA,EAAO,iBAAiB,aAAa,CAC/G,EAMIc,EACJ,GAAIX,GAAY,QAAS,CACvBW,EAAUX,EAAW,QASrB,IAAMY,EACJf,EAAO,iBAAmB,cAGtBA,EAAO,iBAAmB,cAF1B,WAIEA,EAAO,eAEf,GAAIc,EAAQ,WAAaC,EACvB,MAAM,IAAIC,EACR,wBAAwBF,EAAQ,WAAW,kBAAkBA,EAAQ,QAAQ,6CAA6CC,CAA6B,qCACvJ,KAAK,cACP,EAGF,GAAIZ,EAAW,aAAeA,EAAW,gBAAkB,OACzD,MAAM,IAAIa,EACR,4KACA,KAAK,cACP,CAEJ,CAEA,IAAMC,EACY,CAACH,GAAWF,GAAYM,GAAYN,EAAU,CAAE,cAAe,MAAO,CAAC,GACvFZ,EAAO,oBAAoB,EAE7B,GAAI,CACF,IAAMmB,EAA+BhB,GAAc,CAAC,EAC9CiB,EAAWD,EAAQ,YAAc,CAAC,EAElCE,EAAWD,EAAS,QAAU,GAChCC,GACF3B,GAAM,OAAO,eAAe,EAG9B,IAAI4B,EAAMT,GAAK,QAAQb,EAAO,QAASA,EAAO,YAAY,EAGrDuB,GAAG,WAAWD,CAAG,IACpBA,EAAMtB,EAAO,SAGfP,GAAM,UAAWO,EAAO,OAAO,EAC/BP,GAAM,eAAgBO,EAAO,YAAY,EACzCP,GAAM,MAAO6B,CAAG,EAEhB,IAAME,EAAeJ,EAAS,QAAU,CAAC,EA2EzC,GAzEID,EAAQ,YACV,KAAK,aAAeA,EAAQ,YACnB,QAAQ,IAAI,WAAa,aAClC,KAAK,aAAe,UACX,QAAQ,IAAI,SACrB,KAAK,aAAe,YAEpB,KAAK,aAAe,YAGtB,KAAK,kBAAoBnB,EAAO,iBAEhC,KAAK,cAAgB,CACnB,IAAAsB,EACA,QAAStB,EAAO,QAChB,gBAAiBqB,EACjB,kBAAmBG,EAAa,kBAChC,WAAYA,EAAa,YAAc,OACvC,eAAgBA,EAAa,SAC7B,UAAWxB,EAAO,UAClB,WAAY,KAAK,eAAiB,SAClC,SAAUmB,EAAQ,KAAQM,GAAYN,EAAQ,GAAG,EACjD,WACEA,EAAQ,KACR,GACE,OAAOA,EAAQ,KAAQ,SACnBA,EAAQ,MAAQ,QAChBA,EAAQ,IAAI,KAAMO,GAAO,OAAOA,GAAM,SAAWA,IAAM,QAAUA,EAAE,QAAU,OAAQ,GAE7F,IAAKT,GAAW,QAAU,CAAC,EAC3B,MAAO,CAAC,EACR,WAAYjB,EAAO,WACnB,aAAcA,EAAO,aACrB,cAAeA,EAAO,cACtB,cAAeA,EAAO,cACtB,gBAAiB,KAAK,iBACtB,eAAgBA,EAAO,eACvB,aAAcA,EAAO,aACrB,oBAAqB2B,GAAuBR,EAASnB,EAAO,eAAe,EAC3E,kBAAmBA,EAAO,kBAC1B,iBAAkBA,EAAO,iBACzB,cAAe,KAAK,eACpB,mBAAoB,CAClB,QAASmB,EAAQ,oBAAoB,SAAW,IAChD,QAASA,EAAQ,oBAAoB,SAAW,IAChD,eAAgBA,EAAQ,oBAAoB,cAC9C,EACA,WAAAb,EACA,UAAWN,EAAO,UAClB,QAAAc,CACF,EAEA,KAAK,wBAA0B,CAC7B,GAAG,KAAK,cAER,gBAAiB,CACf,qBAAAc,GACA,uBAAAC,GACA,uBAAAC,GACA,gCAAAC,GACA,gCAAAf,EACA,8BAAAgB,GACA,MAAOtC,GAAM,gCAAgC,EAC7C,cAAe,GAAAuC,QACf,cAAejC,EAAO,aACxB,CACF,EAEAP,GAAM,gBAAiBO,EAAO,aAAa,EAE3C,KAAK,QAAUkC,GAAkBlC,EAAQ,KAAK,aAAa,EAC3D,KAAK,gBAAkB,IAAImC,GAAe,KAAM7B,CAAU,EAEtDa,EAAQ,IACV,QAAWiB,KAAOjB,EAAQ,IAAK,CAC7B,IAAMkB,EAAQ,OAAOD,GAAQ,SAAWA,EAAMA,EAAI,OAAS,SAAWA,EAAI,MAAQ,KAC9EC,GACF,KAAK,IAAIA,EAAQC,GAAU,CACzBC,GAAO,IAAI,GAAGA,GAAO,KAAKF,CAAK,GAAK,EAAE,GAAKC,EAAmB,SAAYA,EAAqB,KAAK,CACtG,CAAC,CAEL,CAEJ,OAASE,EAAQ,CACf,MAAAA,EAAE,cAAgB,KAAK,eACjBA,CACR,CAIA,OAAQ,KAAK,eAAiBC,GAA+B,IAAI,CAEnE,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,cACT,CAEA,IAAiCC,EAAcC,EAA0C,CACvF,OAAID,IAAc,aAChB,KAAK,QAAQ,aAAaC,CAAuC,EACxDD,GACT,KAAK,cAAc,WAAW,GAAGA,EAAWC,CAAmC,EAE1E,IACT,CAEA,UAAW,CACT,GAAI,CACF,OAAO,KAAK,QAAQ,MAAM,CAC5B,OAASH,EAAQ,CACf,MAAAA,EAAE,cAAgB,KAAK,eACjBA,CACR,CACF,CAKA,MAAM,aAAc,CAClB,GAAI,CACF,MAAM,KAAK,QAAQ,KAAK,CAC1B,OAASA,EAAQ,CACf,MAAAA,EAAE,cAAgB,KAAK,eACjBA,CACR,QAAE,CAKAI,GAAU,CACZ,CACF,CAKA,oBACEC,EACAC,EACAC,EACAC,EACiB,CACjB,IAAMC,EAAiB,KAAK,gBAE5B,OAAO,KAAK,SAAS,CACnB,OAAQ,aACR,KAAAF,EACA,YAAAF,EACA,aAAAC,EACA,WAAYI,GAAmB,CAAE,aAAAJ,EAAc,eAAAG,CAAe,CAAC,EAC/D,SAAUE,GAAY,KAAK,YAAY,EACvC,SAAU,CAAC,EACX,qBAAAH,CACF,CAAC,CACH,CAUA,YAAYI,KAAsCC,EAAe,CAC/D,OAAO,KAAK,qBAAsBR,GAAgB,CAChD,GAAKO,EAA+B,MAAQ,QAAcA,EAAc,MAAQ,OAAW,CACzF,GAAM,CAACE,EAAKC,CAAU,EAAIC,GAAMJ,EAAOC,CAAM,EAC7C,OAAAI,GACE,KAAK,gBACLH,EAAI,KACJA,EAAI,OACJ,MAAM,QAAQF,CAAK,EAAI,4BAA8B,gCACvD,EACO,KAAK,oBAAoBP,EAAa,cAAeS,EAAKC,CAAU,CAC7E,CAEA,MAAM,IAAIG,GACR,gTAOA,CAAE,cAAe,KAAK,cAAe,CACvC,CACF,CAAC,CACH,CAUA,kBAAkBN,KAAkBC,EAAoB,CACtD,OAAO,KAAK,qBAAsBR,IAChCY,GAAW,KAAK,gBAAiBL,EAAOC,EAAQ,8CAA8C,EACvF,KAAK,oBAAoBR,EAAa,oBAAqB,CAACO,EAAO,GAAGC,CAAM,CAAC,EACrF,CACH,CAQA,eAAeM,EAAuC,CACpD,GAAI3D,EAAO,iBAAmB,UAC5B,MAAM,IAAI0D,GACR,OAAO1D,EAAO,cAAc,uEAC5B,CAAE,cAAe,KAAK,cAAe,CACvC,EAGF,OAAO,KAAK,qBAAsB6C,GACzB,KAAK,SAAS,CACnB,KAAMc,EACN,aAAc,iBACd,SAAU,CAAC,EACX,OAAQ,gBACR,WAAYC,GACZ,SAAUT,GAAY,KAAK,YAAY,EACvC,YAAaN,CACf,CAAC,CACF,CACH,CAKA,MAAM,kBACJA,EACAC,EACAC,EACAC,EACA,CACA,IAAMC,EAAiB,KAAK,gBAE5B,OAAO,KAAK,SAAS,CACnB,OAAQ,WACR,KAAAF,EACA,YAAAF,EACA,aAAAC,EACA,WAAYI,GAAmB,CAAE,aAAAJ,EAAc,eAAAG,CAAe,CAAC,EAC/D,SAAUE,GAAY,KAAK,YAAY,EACvC,SAAU,CAAC,EACX,qBAAAH,CACF,CAAC,CACH,CAUA,UAAUI,KAAsCC,EAAe,CAC7D,OAAO,KAAK,qBAAsBR,GAAgB,CAChD,GAAKO,EAA+B,MAAQ,QAAcA,EAAc,MAAQ,OAC9E,OAAO,KAAK,kBAAkBP,EAAa,YAAa,GAAGW,GAAMJ,EAAOC,CAAM,CAAC,EAGjF,MAAM,IAAIK,GACR,2SAOA,CAAE,cAAe,KAAK,cAAe,CACvC,CACF,CAAC,CACH,CAMA,eAAeG,EAA2B,CACxC,OAAO,KAAK,qBAAsBhB,GAAgB,CAChD,GAAI,CAAC,KAAK,gBAAgB,UAAU,EAClC,MAAM,IAAIa,GACR,mFACA,CAAE,cAAe,KAAK,cAAe,CACvC,EAEF,OAAO,KAAK,kBAAkBb,EAAa,iBAAkBgB,CAAQ,CACvE,CAAC,CACH,CAUA,gBAAgBT,KAAkBC,EAAoB,CACpD,OAAO,KAAK,qBAAsBR,GACzB,KAAK,kBAAkBA,EAAa,kBAAmB,CAACO,EAAO,GAAGC,CAAM,CAAC,CACjF,CACH,CAOA,sBAAsB,CACpB,SAAAS,EACA,QAAA3C,CACF,EAGiB,CACf,IAAM4C,EAAKjE,GAAiB,OAAO,EAC7BkE,EAAOC,GAAoBH,EAAS,MAAM,EAE1CI,EAAWJ,EAAS,IAAI,CAACK,EAASC,IAAU,CAChD,GAAID,IAAU,OAAO,WAAW,IAAM,gBACpC,MAAM,IAAI,MACR,qLACF,EAGF,IAAME,EAAiBlD,GAAS,gBAAkB,KAAK,cAAc,mBAAmB,eAClF0B,EAAc,CAAE,KAAM,QAAS,GAAAkB,EAAI,MAAAK,EAAO,eAAAC,EAAgB,KAAAL,CAAK,EACrE,OAAOG,EAAQ,qBAAqBtB,CAAW,GAAKsB,CACtD,CAAC,EAED,OAAOG,GAAaJ,CAAQ,CAC9B,CAQA,MAAM,yBAAyB,CAC7B,SAAAvB,EACA,QAAAxB,CACF,EAGG,CACD,IAAMoD,EAAU,CAAE,YAAa,KAAK,eAAe,eAAe,CAAE,EAE9DC,EAA+B,CACnC,QAASrD,GAAS,SAAW,KAAK,cAAc,mBAAmB,QACnE,QAASA,GAAS,SAAW,KAAK,cAAc,mBAAmB,QACnE,eAAgBA,GAAS,gBAAkB,KAAK,cAAc,mBAAmB,cACnF,EACMsD,EAAO,MAAM,KAAK,QAAQ,YAAY,QAASF,EAASC,CAAmB,EAE7EE,EACJ,GAAI,CAEF,IAAM7B,EAAc,CAAE,KAAM,MAAO,GAAG4B,CAAK,EAE3CC,EAAS,MAAM/B,EAAS,KAAK,iBAAiBE,CAAW,CAAC,EAG1D,MAAM,KAAK,QAAQ,YAAY,SAAU0B,EAASE,CAAI,CACxD,OAASjC,EAAQ,CAEf,YAAM,KAAK,QAAQ,YAAY,WAAY+B,EAASE,CAAI,EAAE,MAAM,IAAM,CAAC,CAAC,EAElEjC,CACR,CAEA,OAAOkC,CACT,CAEA,iBAAiB7B,EAA0D,CACzE,OAAO8B,GACLlC,GACEkC,GAAqBC,GAAiC,IAAI,EAAG,CAC3DC,GAAY,iBAAkB,IAAM,KAAK,eAAe,iBAAiBhC,CAAW,CAAC,EACrFgC,GAAY,uBAAwB,IAAM3E,GAA2B2C,CAAW,CAAC,EACjFgC,GAAYhF,GAAO,IAAMgD,EAAY,EAAE,CACzC,CAAC,CACH,EACA,CAACiC,GAAiBC,EAAiB,CAAC,CACtC,CACF,CAQA,aAAaC,EAAY7D,EAAe,CACtC,IAAIwB,EAGA,OAAOqC,GAAU,WACf,KAAK,cAAc,SAAS,cAAgB,qBAC9CrC,EAAW,IAAM,CACf,MAAM,IAAI,MACR,+MACF,CACF,EAEAA,EAAW,IAAM,KAAK,yBAAyB,CAAE,SAAUqC,EAAO,QAAA7D,CAAQ,CAAC,EAI7EwB,EAAW,IAAM,KAAK,sBAAsB,CAAE,SAAUqC,EAAO,QAAA7D,CAAQ,CAAC,EAG1E,IAAM8D,EAAc,CAClB,KAAM,cACN,WAAY,CAAE,OAAQ,cAAe,CACvC,EAEA,OAAO,KAAK,eAAe,eAAeA,EAAatC,CAAQ,CACjE,CAOA,SAASuC,EAAqD,CAE5DA,EAAe,cAAgB,KAAK,eAAe,iBAAiB,EACpE,IAAMlC,EAAuBkC,EAAe,sBAAwBvF,GAG9DwF,EAAgC,CACpC,KAAMnC,EAAqB,4BAA4BkC,EAAe,IAAI,EAC1E,SAAUA,EAAe,SACzB,iBAAkB,EAAQA,EAAe,YACzC,OAAQA,EAAe,OACvB,MAAOA,EAAe,KACxB,EAGMD,EAAc,CAClB,UAAW,CACT,KAAM,YACN,WAAY,CACV,OAAQE,EAAO,OACf,MAAOA,EAAO,MACd,KAAMA,EAAO,MAAQ,GAAGA,EAAO,KAAK,IAAIA,EAAO,MAAM,GAAKA,EAAO,MACnE,CACF,CACF,EAGMC,EAAW,MAAOC,GAAmD,CAGzE,GAAM,CAAE,iBAAAC,EAAkB,KAAAvC,EAAM,GAAGwC,CAAqB,EAAIF,EACtDG,EAAgB,CACpB,GAAGN,EACH,GAAGK,CACL,EAEIxC,IACFyC,EAAc,KAAOxC,EAAqB,4BAA4BD,CAAI,GAKxEmC,EAAe,cAAgB,QAAaI,IAAqB,IACnE,OAAOE,EAAc,YAGvB,IAAMd,EAAS,MAAMe,GAAqB,KAAMD,CAAa,EAC7D,OAAKA,EAAc,MAGZE,GAAyB,CAC9B,OAAAhB,EACA,UAAWc,EAAc,MACzB,KAAMA,EAAc,KACpB,WAAY,KAAK,YACjB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,WACnB,CAAC,EATQd,CAUX,EAEA,OAAO,KAAK,eAAe,eAAeO,EAAY,UAAW,IAG5C,IAAIU,GAAc,uBAAuB,EAC1C,gBAAgB,IAAMP,EAASD,CAAM,CAAC,CAIzD,CACH,CAEA,MAAM,gBAAgB,CACpB,KAAApC,EACA,aAAAD,EACA,SAAA8C,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EACA,WAAAxC,EACA,YAAAV,EACA,SAAAmD,EACA,cAAAC,EACA,qBAAAC,CACF,EAA0B,CACxB,GAAI,CAEFnD,EAAOQ,EAAaA,EAAWR,CAAI,EAAIA,EAEvC,IAAMkC,EAAmC,CACvC,KAAM,WACR,EAEMkB,EAAU,KAAK,eAAe,eAAelB,EAAa,IAC9DmB,GAAmB,CACjB,UAAWL,EACX,iBAAkB,KAAK,kBACvB,OAAAD,EACA,KAAA/C,EACA,aAAAD,EACA,SAAA+C,EACA,WAAY,KAAK,YACjB,YAAa,KAAK,aAClB,cAAe,KAAK,eACpB,gBAAiB,KAAK,iBACtB,WAAY,KAAK,WACnB,CAAC,CACH,EAIA,OAAInG,GAAM,QAAQ,eAAe,IAC/BD,GAAM,qBAAqB,EAC3BA,GAAM,UAAUqD,CAAY,IAAIuD,GAAqBtD,CAAI,CAAC,GAAG,EAC7DtD,GAAM,oBAAoB,EAC1BA,GAAM,KAAK,UAAU0G,EAAS,KAAM,CAAC,EAAI;AAAA,CAAI,GAG3CtD,GAAa,OAAS,SAExB,MAAMA,EAAY,KAGb,KAAK,gBAAgB,QAAQ,CAClC,cAAesD,EACf,UAAWJ,EACX,OAAAD,EACA,aAAAhD,EACA,SAAA8C,EACA,SAAAC,EACA,KAAA9C,EACA,WAAY,KAAK,YACjB,YAAAF,EACA,SAAAmD,EACA,cAAAC,EACA,aAAc,KAAK,eAAe,iBAAiB,EACnD,WAAY,KAAK,YACjB,qBAAAC,CACF,CAAC,CACH,OAAS1D,EAAG,CACV,MAAAA,EAAE,cAAgB,KAAK,eACjBA,CACR,CACF,CAEA,SAAW,IAAI8D,GAAc,IAAI,EAOjC,gBAAgBC,EAAiB,CAC/B,MAAO,CAAC,CAAC,KAAK,cAAc,iBAAiB,SAASA,CAAO,CAC/D,CAEA,yBAAyC,CACvC,OAAO,KAAK,QAAQ,uBAAuB,CAC7C,CAEA,SAAWC,EACb,CAEA,OAAOvG,CACT,CAEA,SAASuD,GAAMJ,EAAmCC,EAAkE,CAClH,OAAIoD,GAAsBrD,CAAK,EACtB,CAAC,IAAIsD,GAAItD,EAAOC,CAAM,EAAGsD,EAAkC,EAG7D,CAACvD,EAAOwD,EAAuB,CACxC,CAEA,SAASH,GAAsBI,EAA+C,CAC5E,OAAO,MAAM,QAAQA,CAAK,GAAK,MAAM,QAAQA,EAAM,GAAM,CAC3D,C+G97BA,IAAMC,GAAY,IAAI,IAAI,CACxB,SACA,WACA,kBACA,OAAO,SACP,OAAO,YACP,OAAO,mBACP,OAAO,WACT,CAAC,EAiBM,SAASC,GAA+DC,EAAkB,CAC/F,OAAO,IAAI,MAAMA,EAAY,CAC3B,IAAIC,EAAQC,EAAU,CACpB,GAAIA,KAAYD,EACd,OAAOA,EAAOC,CAAQ,EAExB,GAAI,CAAAJ,GAAU,IAAII,CAAQ,EAG1B,MAAM,IAAI,UAAU,uBAAuB,OAAOA,CAAQ,CAAC,EAAE,CAC/D,CACF,CAAC,CACH,CCtCO,SAASC,GAAiBC,EAAU,CACzCC,GAAYD,EAAU,CAAE,cAAe,MAAO,CAAC,CACjD",
"names": ["require_windows", "__commonJSMin", "exports", "module", "isexe", "sync", "fs", "checkPathExt", "path", "options", "pathext", "i", "p", "checkStat", "stat", "cb", "er", "require_mode", "__commonJSMin", "exports", "module", "isexe", "sync", "fs", "path", "options", "cb", "er", "stat", "checkStat", "checkMode", "mod", "uid", "gid", "myUid", "myGid", "u", "g", "o", "ug", "ret", "require_isexe", "__commonJSMin", "exports", "module", "fs", "core", "isexe", "sync", "path", "options", "cb", "resolve", "reject", "er", "is", "require_which", "__commonJSMin", "exports", "module", "isWindows", "path", "COLON", "isexe", "getNotFoundError", "cmd", "getPathInfo", "opt", "colon", "pathEnv", "pathExtExe", "pathExt", "which", "cb", "found", "step", "i", "resolve", "reject", "ppRaw", "pathPart", "pCmd", "p", "subStep", "ii", "ext", "er", "is", "res", "whichSync", "j", "cur", "require_path_key", "__commonJSMin", "exports", "module", "pathKey", "options", "environment", "key", "require_resolveCommand", "__commonJSMin", "exports", "module", "path", "which", "getPathKey", "resolveCommandAttempt", "parsed", "withoutPathExt", "env", "cwd", "hasCustomCwd", "shouldSwitchCwd", "resolved", "resolveCommand", "require_escape", "__commonJSMin", "exports", "module", "metaCharsRegExp", "escapeCommand", "arg", "escapeArgument", "doubleEscapeMetaChars", "require_shebang_regex", "__commonJSMin", "exports", "module", "require_shebang_command", "__commonJSMin", "exports", "module", "shebangRegex", "string", "match", "path", "argument", "binary", "require_readShebang", "__commonJSMin", "exports", "module", "fs", "shebangCommand", "readShebang", "command", "buffer", "fd", "require_parse", "__commonJSMin", "exports", "module", "path", "resolveCommand", "escape", "readShebang", "isWin", "isExecutableRegExp", "isCmdShimRegExp", "detectShebang", "parsed", "shebang", "parseNonShell", "commandFile", "needsShell", "needsDoubleEscapeMetaChars", "arg", "shellCommand", "parse", "command", "args", "options", "require_enoent", "__commonJSMin", "exports", "module", "isWin", "notFoundError", "original", "syscall", "hookChildProcess", "cp", "parsed", "originalEmit", "name", "arg1", "err", "verifyENOENT", "status", "verifyENOENTSync", "require_cross_spawn", "__commonJSMin", "exports", "module", "cp", "parse", "enoent", "spawn", "command", "args", "options", "parsed", "spawned", "spawnSync", "result", "require_strip_final_newline", "__commonJSMin", "exports", "module", "input", "LF", "CR", "require_npm_run_path", "__commonJSMin", "exports", "module", "path", "pathKey", "npmRunPath", "options", "previous", "cwdPath", "result", "execPathDir", "env", "require_mimic_fn", "__commonJSMin", "exports", "module", "mimicFn", "to", "from", "prop", "require_onetime", "__commonJSMin", "exports", "module", "mimicFn", "calledFunctions", "onetime", "function_", "options", "returnValue", "callCount", "functionName", "arguments_", "SIGNALS", "name", "number", "action", "description", "standard", "forced", "exports", "getRealtimeSignals", "length", "SIGRTMAX", "SIGRTMIN", "Array", "from", "getRealtimeSignal", "exports", "value", "index", "name", "number", "action", "description", "standard", "_os", "_core", "_realtime", "getSignals", "realtimeSignals", "SIGNALS", "map", "normalizeSignal", "exports", "name", "number", "defaultNumber", "description", "action", "forced", "standard", "signals", "constantSignal", "constants", "supported", "undefined", "_os", "_signals", "_realtime", "getSignalsByName", "reduce", "getSignalByName", "signalByNameMemo", "name", "number", "description", "supported", "action", "forced", "standard", "signalsByName", "exports", "getSignalsByNumber", "signals", "length", "SIGRTMAX", "signalsA", "Array", "from", "value", "getSignalByNumber", "Object", "assign", "signal", "findSignalByNumber", "undefined", "find", "constants", "signalA", "signalsByNumber", "require_error", "__commonJSMin", "exports", "module", "signalsByName", "getErrorPrefix", "timedOut", "timeout", "errorCode", "signal", "signalDescription", "exitCode", "isCanceled", "makeError", "stdout", "stderr", "all", "error", "command", "escapedCommand", "killed", "execaMessage", "isError", "shortMessage", "message", "require_stdio", "__commonJSMin", "exports", "module", "aliases", "hasAlias", "options", "alias", "normalizeStdio", "stdio", "length", "value", "index", "require_signals", "__commonJSMin", "exports", "module", "require_signal_exit", "__commonJSMin", "exports", "module", "process", "processOk", "assert", "signals", "isWin", "EE", "emitter", "cb", "opts", "loaded", "load", "ev", "remove", "unload", "sig", "sigListeners", "originalProcessEmit", "originalProcessReallyExit", "emit", "event", "code", "signal", "listeners", "processEmit", "processReallyExit", "arg", "ret", "require_kill", "__commonJSMin", "exports", "module", "os", "onExit", "DEFAULT_FORCE_KILL_TIMEOUT", "spawnedKill", "kill", "signal", "options", "killResult", "setKillTimeout", "shouldForceKill", "timeout", "getForceKillAfterTimeout", "t", "forceKillAfterTimeout", "isSigterm", "spawnedCancel", "spawned", "context", "timeoutKill", "reject", "setupTimeout", "killSignal", "spawnedPromise", "timeoutId", "timeoutPromise", "resolve", "safeSpawnedPromise", "validateTimeout", "setExitHandler", "cleanup", "detached", "timedPromise", "removeExitHandler", "require_is_stream", "__commonJSMin", "exports", "module", "isStream", "stream", "require_buffer_stream", "__commonJSMin", "exports", "module", "PassThroughStream", "options", "array", "encoding", "isBuffer", "objectMode", "stream", "length", "chunks", "chunk", "require_get_stream", "__commonJSMin", "exports", "module", "BufferConstants", "stream", "promisify", "bufferStream", "streamPipelinePromisified", "MaxBufferError", "getStream", "inputStream", "options", "maxBuffer", "resolve", "reject", "rejectPromise", "error", "require_merge_stream", "__commonJSMin", "exports", "module", "PassThrough", "sources", "output", "add", "isEmpty", "remove", "source", "it", "require_stream", "__commonJSMin", "exports", "module", "isStream", "getStream", "mergeStream", "handleInput", "spawned", "input", "makeAllStream", "all", "mixed", "getBufferedData", "stream", "streamPromise", "error", "getStreamPromise", "encoding", "buffer", "maxBuffer", "getSpawnedResult", "stdout", "stderr", "processDone", "stdoutPromise", "stderrPromise", "allPromise", "validateInputSync", "require_promise", "__commonJSMin", "exports", "module", "nativePromisePrototype", "descriptors", "property", "mergePromise", "spawned", "promise", "descriptor", "value", "args", "getSpawnedPromise", "resolve", "reject", "exitCode", "signal", "error", "require_command", "__commonJSMin", "exports", "module", "normalizeArgs", "file", "args", "NO_ESCAPE_REGEXP", "DOUBLE_QUOTES_REGEXP", "escapeArg", "arg", "joinCommand", "getEscapedCommand", "SPACES_REGEXP", "parseCommand", "command", "tokens", "token", "previousToken", "require_execa", "__commonJSMin", "exports", "module", "path", "childProcess", "crossSpawn", "stripFinalNewline", "npmRunPath", "onetime", "makeError", "normalizeStdio", "spawnedKill", "spawnedCancel", "setupTimeout", "validateTimeout", "setExitHandler", "handleInput", "getSpawnedResult", "makeAllStream", "validateInputSync", "mergePromise", "getSpawnedPromise", "joinCommand", "parseCommand", "getEscapedCommand", "DEFAULT_MAX_BUFFER", "getEnv", "envOption", "extendEnv", "preferLocal", "localDir", "execPath", "env", "handleArguments", "file", "args", "options", "parsed", "handleOutput", "value", "error", "execa", "command", "escapedCommand", "spawned", "dummySpawned", "errorPromise", "spawnedPromise", "timedPromise", "processDone", "context", "handlePromiseOnce", "exitCode", "signal", "timedOut", "stdoutResult", "stderrResult", "allResult", "stdout", "stderr", "all", "returnedError", "result", "scriptPath", "stdio", "defaultExecArgv", "arg", "nodePath", "nodeOptions", "require_package", "__commonJSMin", "exports", "module", "require_temp_dir", "__commonJSMin", "exports", "module", "fs", "os", "tempDirectorySymbol", "require_retry_operation", "__commonJSMin", "exports", "module", "RetryOperation", "timeouts", "options", "err", "currentTime", "timeout", "self", "fn", "timeoutOps", "counts", "mainError", "mainErrorCount", "i", "error", "message", "count", "require_retry", "__commonJSMin", "exports", "RetryOperation", "options", "timeouts", "opts", "key", "i", "a", "b", "attempt", "random", "timeout", "obj", "methods", "method", "original", "op", "args", "callback", "err", "require_retry", "__commonJSMin", "exports", "module", "require_p_retry", "__commonJSMin", "exports", "module", "retry", "networkErrorMsgs", "AbortError", "message", "decorateErrorWithCounts", "error", "attemptNumber", "options", "retriesLeft", "isNetworkError", "errorMessage", "pRetry", "input", "resolve", "reject", "operation", "require_package", "__commonJSMin", "exports", "module", "require_engines_version", "__commonJSMin", "exports", "require_min_indent", "__commonJSMin", "exports", "module", "string", "match", "a", "require_indent_string", "__commonJSMin", "exports", "module", "string", "count", "options", "regex", "require_package", "__commonJSMin", "exports", "module", "require_main", "__commonJSMin", "exports", "module", "fs", "path", "os", "crypto", "packageJson", "version", "LINE", "parse", "src", "obj", "lines", "match", "key", "value", "maybeQuote", "_parseVault", "options", "vaultPath", "_vaultPath", "result", "DotenvModule", "err", "keys", "_dotenvKey", "length", "decrypted", "i", "attrs", "_instructions", "error", "_warn", "message", "_debug", "dotenvKey", "uri", "environment", "environmentKey", "ciphertext", "possibleVaultPath", "filepath", "_resolveHome", "envPath", "_configVault", "parsed", "processEnv", "configDotenv", "dotenvPath", "encoding", "debug", "optionPaths", "lastError", "parsedAll", "e", "config", "decrypt", "encrypted", "keyStr", "nonce", "authTag", "aesgcm", "isRange", "invalidKeyLength", "decryptionFailed", "populate", "override", "require_new_github_issue_url", "__commonJSMin", "exports", "module", "options", "repoUrl", "url", "types", "type", "value", "require_js_levenshtein", "__commonJSMin", "exports", "module", "_min", "d0", "d1", "d2", "bx", "ay", "a", "b", "tmp", "la", "lb", "offset", "x", "y", "d3", "dd", "dy", "bx0", "bx1", "bx2", "bx3", "vector", "len", "init_TypeBuilder", "__esmMin", "init_KeyType", "__esmMin", "require_symbols", "__commonJSMin", "exports", "module", "require_errors", "__commonJSMin", "exports", "module", "UndiciError", "message", "options", "ConnectTimeoutError", "HeadersTimeoutError", "HeadersOverflowError", "BodyTimeoutError", "ResponseStatusCodeError", "statusCode", "headers", "body", "InvalidArgumentError", "InvalidReturnValueError", "AbortError", "RequestAbortedError", "InformationalError", "RequestContentLengthMismatchError", "ResponseContentLengthMismatchError", "ClientDestroyedError", "ClientClosedError", "SocketError", "socket", "NotSupportedError", "BalancedPoolMissingUpstreamError", "HTTPParserError", "code", "data", "ResponseExceededMaxSizeError", "RequestRetryError", "ResponseError", "SecureProxyConnectionError", "cause", "require_constants", "__commonJSMin", "exports", "module", "wellknownHeaderNames", "headerNameLowerCasedRecord", "wellknownHeaderNameBuffers", "getHeaderNameAsBuffer", "header", "buffer", "i", "key", "lowerCasedKey", "require_tree", "__commonJSMin", "exports", "module", "wellknownHeaderNames", "headerNameLowerCasedRecord", "TstNode", "_TstNode", "key", "value", "index", "length", "node", "code", "keylength", "TernarySearchTree", "tree", "i", "require_util", "__commonJSMin", "exports", "module", "assert", "kDestroyed", "kBodyUsed", "kListeners", "kBody", "IncomingMessage", "stream", "net", "Blob", "nodeUtil", "stringify", "EE", "InvalidArgumentError", "headerNameLowerCasedRecord", "tree", "nodeMajor", "nodeMinor", "v", "BodyAsyncIterable", "body", "wrapRequestBody", "isStream", "bodyLength", "isIterable", "obj", "isBlobLike", "object", "sTag", "serializePathWithQuery", "url", "queryParams", "stringified", "isValidPort", "port", "value", "isHttpOrHttpsPrefixed", "parseURL", "origin", "path", "parseOrigin", "getHostname", "host", "idx", "getServerName", "servername", "deepClone", "isAsyncIterable", "state", "isBuffer", "isDestroyed", "destroy", "err", "KEEPALIVE_TIMEOUT_EXPR", "parseKeepAliveTimeout", "val", "m", "headerNameToString", "bufferToLowerCasedHeaderName", "parseHeaders", "headers", "i", "key", "headersValue", "x", "parseRawHeaders", "headersLength", "ret", "hasContentLength", "contentDispositionIdx", "kLen", "n", "encodeRawHeaders", "buffer", "assertRequestHandler", "handler", "method", "upgrade", "isDisturbed", "getSocketInfo", "socket", "ReadableStreamFrom", "iterable", "iterator", "controller", "pull", "done", "buf", "isFormDataLike", "addAbortListener", "signal", "listener", "toUSVString", "isUSVString", "isTokenCharCode", "c", "isValidHTTPToken", "characters", "headerCharRegex", "isValidHeaderValue", "rangeHeaderRegex", "parseRangeHeader", "range", "addListener", "name", "removeAllListeners", "errorRequest", "client", "request", "kEnumerableProperty", "normalizedMethodRecordsBase", "normalizedMethodRecords", "require_diagnostics", "__commonJSMin", "exports", "module", "diagnosticsChannel", "util", "undiciDebugLog", "fetchDebuglog", "websocketDebuglog", "channels", "isTrackingClientEvents", "trackClientEvents", "debugLog", "evt", "version", "protocol", "port", "host", "error", "method", "path", "origin", "isTrackingRequestEvents", "trackRequestEvents", "statusCode", "isTrackingWebSocketEvents", "trackWebSocketEvents", "address", "websocket", "code", "reason", "err", "require_request", "__commonJSMin", "exports", "module", "InvalidArgumentError", "NotSupportedError", "assert", "isValidHTTPToken", "isValidHeaderValue", "isStream", "destroy", "isBuffer", "isFormDataLike", "isIterable", "isBlobLike", "serializePathWithQuery", "assertRequestHandler", "getServerName", "normalizedMethodRecords", "channels", "headerNameLowerCasedRecord", "invalidPathRegex", "kHandler", "Request", "origin", "path", "method", "body", "headers", "query", "idempotent", "blocking", "upgrade", "headersTimeout", "bodyTimeout", "reset", "expectContinue", "servername", "throwOnError", "handler", "rState", "err", "i", "processHeader", "header", "keys", "chunk", "abort", "statusCode", "resume", "statusText", "socket", "trailers", "error", "key", "value", "request", "val", "headerName", "arr", "require_wrap_handler", "__commonJSMin", "exports", "module", "InvalidArgumentError", "WrapHandler", "#handler", "handler", "abort", "context", "statusCode", "rawHeaders", "resume", "statusMessage", "socket", "data", "trailers", "err", "controller", "reason", "headers", "key", "val", "v", "rawTrailers", "require_dispatcher", "__commonJSMin", "exports", "module", "EventEmitter", "WrapHandler", "wrapInterceptor", "dispatch", "opts", "handler", "Dispatcher", "args", "interceptors", "interceptor", "target", "key", "require_unwrap_handler", "__commonJSMin", "exports", "module", "parseHeaders", "InvalidArgumentError", "kResume", "UnwrapController", "#paused", "#reason", "#aborted", "#abort", "abort", "reason", "UnwrapHandler", "#handler", "#controller", "handler", "context", "statusCode", "rawHeaders", "socket", "resume", "statusMessage", "data", "rawTrailers", "err", "require_dispatcher_base", "__commonJSMin", "exports", "module", "Dispatcher", "UnwrapHandler", "ClientDestroyedError", "ClientClosedError", "InvalidArgumentError", "kDestroy", "kClose", "kClosed", "kDestroyed", "kDispatch", "kOnDestroyed", "kOnClosed", "DispatcherBase", "callback", "resolve", "reject", "err", "data", "onClosed", "callbacks", "i", "onDestroyed", "opts", "handler", "require_timers", "__commonJSMin", "exports", "module", "fastNow", "RESOLUTION_MS", "TICK_MS", "fastNowTimeout", "kFastTimer", "fastTimers", "NOT_IN_LIST", "TO_BE_CLEARED", "PENDING", "ACTIVE", "onTick", "idx", "len", "timer", "refreshTimeout", "FastTimer", "callback", "delay", "arg", "timeout", "require_connect", "__commonJSMin", "exports", "module", "net", "assert", "util", "InvalidArgumentError", "ConnectTimeoutError", "timers", "noop", "tls", "SessionCache", "maxCachedSessions", "key", "ref", "sessionKey", "session", "oldestKey", "buildConnector", "allowH2", "socketPath", "timeout", "customSession", "opts", "options", "sessionCache", "hostname", "host", "protocol", "port", "servername", "localAddress", "httpSocket", "callback", "socket", "keepAliveInitialDelay", "clearConnectTimeout", "setupConnectTimeout", "cb", "err", "socketWeakRef", "s1", "s2", "fastTimer", "onConnectTimeout", "message", "enumToMap", "obj", "filter", "exceptions", "emptyFilter", "_a", "emptyExceptions", "_b", "value", "exports", "utils_1", "exports", "k", "i", "c", "require_llhttp_wasm", "__commonJSMin", "exports", "module", "Buffer", "wasmBase64", "wasmBuffer", "require_llhttp_simd_wasm", "__commonJSMin", "exports", "module", "Buffer", "wasmBase64", "wasmBuffer", "require_constants", "__commonJSMin", "exports", "module", "corsSafeListedMethods", "corsSafeListedMethodsSet", "nullBodyStatus", "redirectStatus", "redirectStatusSet", "badPorts", "badPortsSet", "referrerPolicyTokens", "referrerPolicy", "referrerPolicyTokensSet", "requestRedirect", "safeMethods", "safeMethodsSet", "requestMode", "requestCredentials", "requestCache", "requestBodyHeader", "requestDuplex", "forbiddenMethods", "forbiddenMethodsSet", "subresource", "subresourceSet", "require_global", "__commonJSMin", "exports", "module", "globalOrigin", "getGlobalOrigin", "setGlobalOrigin", "newOrigin", "parsedURL", "require_data_url", "__commonJSMin", "exports", "module", "assert", "encoder", "HTTP_TOKEN_CODEPOINTS", "HTTP_WHITESPACE_REGEX", "ASCII_WHITESPACE_REPLACE_REGEX", "HTTP_QUOTED_STRING_TOKENS", "dataURLProcessor", "dataURL", "input", "URLSerializer", "position", "mimeType", "collectASequenceOfCodePointsFast", "mimeTypeLength", "removeASCIIWhitespace", "encodedBody", "body", "stringPercentDecode", "stringBody", "isomorphicDecode", "forgivingBase64", "mimeTypeRecord", "parseMIMEType", "url", "excludeFragment", "href", "hashLength", "serialized", "collectASequenceOfCodePoints", "condition", "result", "char", "idx", "start", "bytes", "percentDecode", "isHexCharByte", "byte", "hexByteToNumber", "length", "output", "j", "i", "removeHTTPWhitespace", "type", "subtype", "typeLowercase", "subtypeLowercase", "parameterName", "parameterValue", "collectAnHTTPQuotedString", "data", "dataLength", "buffer", "extractValue", "positionStart", "value", "quoteOrBackslash", "serializeAMimeType", "parameters", "essence", "serialization", "name", "isHTTPWhiteSpace", "str", "leading", "trailing", "removeChars", "isASCIIWhitespace", "predicate", "lead", "trail", "addition", "minimizeSupportedMimeType", "require_webidl", "__commonJSMin", "exports", "module", "types", "inspect", "markAsUncloneable", "toUSVString", "UNDEFINED", "BOOLEAN", "STRING", "SYMBOL", "NUMBER", "BIGINT", "NULL", "OBJECT", "FunctionPrototypeSymbolHasInstance", "webidl", "message", "context", "plural", "V", "I", "err", "List", "prototypes", "c", "typeCheck", "length", "min", "ctx", "O", "o", "bitLength", "signedness", "opts", "upperBound", "lowerBound", "x", "n", "r", "converter", "prefix", "argument", "Iterable", "method", "seq", "index", "done", "value", "keyConverter", "valueConverter", "result", "keys", "key", "keyName", "typedKey", "typedValue", "TypeCheck", "name", "converters", "dictionary", "dict", "options", "defaultValue", "required", "hasDefault", "T", "require_util", "__commonJSMin", "exports", "module", "Transform", "zlib", "redirectStatusSet", "referrerPolicyTokens", "badPortsSet", "getGlobalOrigin", "collectASequenceOfCodePoints", "collectAnHTTPQuotedString", "removeChars", "parseMIMEType", "performance", "ReadableStreamFrom", "isValidHTTPToken", "normalizedMethodRecordsBase", "assert", "isUint8Array", "webidl", "supportedHashes", "crypto", "possibleRelevantHashes", "hash", "responseURL", "response", "urlList", "length", "responseLocationURL", "requestFragment", "location", "isValidHeaderValue", "isValidEncodedURL", "normalizeBinaryStringToUtf8", "url", "i", "code", "value", "requestCurrentURL", "request", "requestBadPort", "urlIsHttpHttpsScheme", "isErrorLike", "object", "isValidReasonPhrase", "statusText", "c", "isValidHeaderName", "potentialValue", "parseReferrerPolicy", "actualResponse", "policyHeader", "policy", "token", "setRequestReferrerPolicyOnRedirect", "crossOriginResourcePolicyCheck", "corsCheck", "TAOCheck", "appendFetchMetadata", "httpRequest", "header", "appendRequestOriginHeader", "serializedOrigin", "urlHasHttpsScheme", "sameOrigin", "coarsenTime", "timestamp", "crossOriginIsolatedCapability", "clampAndCoarsenConnectionTimingInfo", "connectionTimingInfo", "defaultStartTime", "coarsenedSharedCurrentTime", "createOpaqueTimingInfo", "timingInfo", "makePolicyContainer", "clonePolicyContainer", "policyContainer", "determineRequestsReferrer", "referrerSource", "globalOrigin", "referrerURL", "stripURLForReferrer", "referrerOrigin", "currentURL", "isURLPotentiallyTrustworthy", "originOnly", "urlIsLocal", "potentialleTrustworthyIPv4RegExp", "potentialleTrustworthyIPv6RegExp", "isOriginIPPotentiallyTrustworthy", "origin", "isOriginPotentiallyTrustworthy", "bytesMatch", "bytes", "metadataList", "parsedMetadata", "parseMetadata", "strongest", "getStrongestMetadata", "metadata", "filterMetadataListByAlgorithm", "item", "algorithm", "expectedValue", "actualValue", "compareBase64Mixed", "parseHashWithOptions", "result", "empty", "parsedToken", "pos", "tryUpgradeRequestToAPotentiallyTrustworthyURL", "A", "B", "createDeferredPromise", "res", "rej", "resolve", "reject", "isAborted", "fetchParams", "isCancelled", "normalizeMethod", "method", "serializeJavascriptValueToJSONString", "esIteratorPrototype", "createIterator", "name", "kInternalIterator", "keyIndex", "valueIndex", "FastIterableIterator", "#target", "#kind", "#index", "target", "kind", "index", "values", "len", "key", "iteratorMixin", "makeIterator", "properties", "callbackfn", "thisArg", "fullyReadBody", "body", "processBody", "processBodyError", "successSteps", "errorSteps", "reader", "e", "readAllBytes", "readableStreamClose", "controller", "err", "invalidIsomorphicEncodeValueRegex", "isomorphicEncode", "input", "failureSteps", "byteLength", "done", "chunk", "protocol", "simpleRangeHeaderValue", "allowWhitespace", "data", "position", "char", "rangeStart", "rangeStartValue", "rangeEnd", "rangeEndValue", "buildContentRange", "fullLength", "contentRange", "InflateStream", "#zlibOptions", "zlibOptions", "encoding", "callback", "createInflate", "extractMimeType", "headers", "charset", "essence", "mimeType", "getDecodeSplit", "temporaryMimeType", "gettingDecodingSplitting", "temporaryValue", "list", "textDecoder", "utf8DecodeBytes", "buffer", "EnvironmentSettingsObjectBase", "EnvironmentSettingsObject", "environmentSettingsObject", "require_formdata", "__commonJSMin", "exports", "module", "iteratorMixin", "kEnumerableProperty", "webidl", "NativeFile", "nodeUtil", "File", "FormData", "_FormData", "#state", "form", "name", "value", "filename", "prefix", "entry", "makeEntry", "idx", "depth", "options", "state", "a", "b", "output", "formData", "newState", "getFormDataState", "setFormDataState", "require_formdata_parser", "__commonJSMin", "exports", "module", "isUSVString", "bufferToLowerCasedHeaderName", "utf8DecodeBytes", "HTTP_TOKEN_CODEPOINTS", "isomorphicDecode", "makeEntry", "webidl", "assert", "NodeFile", "File", "formDataNameBuffer", "filenameBuffer", "dd", "ddcrlf", "isAsciiString", "chars", "i", "validateBoundary", "boundary", "length", "cp", "multipartFormDataParser", "input", "mimeType", "boundaryString", "parsingError", "entryList", "position", "trailing", "bufferStartsWith", "result", "parseMultipartFormDataHeaders", "name", "filename", "contentType", "encoding", "body", "boundaryIndex", "value", "headerName", "collectASequenceOfBytes", "char", "removeChars", "parseMultipartFormDataName", "at", "headerValue", "condition", "start", "buf", "leading", "predicate", "lead", "trail", "buffer", "cause", "require_body", "__commonJSMin", "exports", "module", "util", "ReadableStreamFrom", "readableStreamClose", "createDeferredPromise", "fullyReadBody", "extractMimeType", "utf8DecodeBytes", "FormData", "setFormDataState", "webidl", "Blob", "assert", "isErrored", "isDisturbed", "isArrayBuffer", "serializeAMimeType", "multipartFormDataParser", "random", "crypto", "max", "textEncoder", "noop", "hasFinalizationRegistry", "streamRegistry", "weakRef", "stream", "extractBody", "object", "keepalive", "controller", "buffer", "source", "action", "length", "type", "boundary", "prefix", "escape", "str", "normalizeLinefeeds", "value", "blobParts", "rn", "hasUnknownSizeValue", "name", "chunk", "part", "iterator", "done", "reason", "safelyExtractBody", "cloneBody", "instance", "body", "out1", "out2", "throwIfAborted", "state", "bodyMixinMethods", "getInternalState", "consumeBody", "bytes", "mimeType", "bodyMimeType", "parseJSONFromBytes", "parsed", "fd", "entries", "mixinBody", "prototype", "convertBytesToJSValue", "bodyUnusable", "promise", "errorSteps", "error", "successSteps", "data", "e", "requestOrResponse", "headers", "require_client_h1", "__commonJSMin", "exports", "module", "assert", "util", "channels", "timers", "RequestContentLengthMismatchError", "ResponseContentLengthMismatchError", "RequestAbortedError", "HeadersTimeoutError", "HeadersOverflowError", "SocketError", "InformationalError", "BodyTimeoutError", "HTTPParserError", "ResponseExceededMaxSizeError", "kUrl", "kReset", "kClient", "kParser", "kBlocking", "kRunning", "kPending", "kSize", "kWriting", "kQueue", "kNoRef", "kKeepAliveDefaultTimeout", "kHostHeader", "kPendingIdx", "kRunningIdx", "kError", "kPipelining", "kSocket", "kKeepAliveTimeoutValue", "kMaxHeadersSize", "kKeepAliveMaxTimeout", "kKeepAliveTimeoutThreshold", "kHeadersTimeout", "kBodyTimeout", "kStrictContentLength", "kMaxRequests", "kCounter", "kMaxResponseSize", "kOnError", "kResume", "kHTTPContext", "kClosed", "constants", "EMPTY_BUF", "FastBuffer", "removeAllListeners", "extractBody", "lazyllhttp", "llhttpWasmData", "mod", "p", "at", "len", "currentParser", "start", "currentBufferPtr", "currentBufferRef", "statusCode", "upgrade", "shouldKeepAlive", "llhttpInstance", "llhttpPromise", "currentBufferSize", "USE_NATIVE_TIMER", "USE_FAST_TIMER", "TIMEOUT_HEADERS", "TIMEOUT_BODY", "TIMEOUT_KEEP_ALIVE", "Parser", "client", "socket", "delay", "type", "onParserTimeout", "chunk", "llhttp", "ret", "err", "data", "ptr", "message", "buf", "request", "key", "headerName", "head", "headers", "statusText", "bodyTimeout", "keepAliveTimeout", "timeout", "pause", "maxResponseSize", "contentLength", "bytesRead", "parser", "timeoutType", "paused", "connectH1", "noop", "onHttpSocketError", "onHttpSocketReadable", "onHttpSocketEnd", "onHttpSocketClose", "onSocketClose", "writeH1", "resumeH1", "callback", "requests", "i", "headersTimeout", "shouldSendContentLength", "method", "path", "host", "blocking", "reset", "body", "expectsPayload", "bodyStream", "contentType", "bodyLength", "abort", "header", "n", "val", "writeBuffer", "writeIterable", "writeBlob", "writeStream", "finished", "writer", "AsyncWriter", "onData", "onDrain", "onClose", "onFinished", "er", "buffer", "cb", "waitForDrain", "resolve", "reject", "bytesWritten", "require_client_h2", "__commonJSMin", "exports", "module", "assert", "pipeline", "util", "RequestContentLengthMismatchError", "RequestAbortedError", "SocketError", "InformationalError", "kUrl", "kReset", "kClient", "kRunning", "kPending", "kQueue", "kPendingIdx", "kRunningIdx", "kError", "kSocket", "kStrictContentLength", "kOnError", "kMaxConcurrentStreams", "kHTTP2Session", "kResume", "kSize", "kHTTPContext", "kClosed", "kBodyTimeout", "channels", "kOpenStreams", "extractBody", "http2", "HTTP2_HEADER_AUTHORITY", "HTTP2_HEADER_METHOD", "HTTP2_HEADER_PATH", "HTTP2_HEADER_SCHEME", "HTTP2_HEADER_CONTENT_LENGTH", "HTTP2_HEADER_EXPECT", "HTTP2_HEADER_STATUS", "parseH2Headers", "headers", "result", "name", "value", "subvalue", "connectH2", "client", "socket", "session", "onHttp2SessionError", "onHttp2FrameError", "onHttp2SessionEnd", "onHttp2SessionGoAway", "onHttp2SessionClose", "onHttp2SocketError", "onHttp2SocketEnd", "onHttp2SocketClose", "onSocketClose", "request", "writeH2", "resumeH2", "err", "callback", "type", "code", "id", "errorCode", "requests", "i", "shouldSendContentLength", "method", "requestTimeout", "path", "host", "upgrade", "expectContinue", "signal", "reqHeaders", "body", "n", "key", "val", "stream", "hostname", "port", "abort", "expectsPayload", "contentLength", "bodyStream", "contentType", "header", "shouldEndStream", "writeBodyH2", "statusCode", "realHeaders", "chunk", "trailers", "writeBuffer", "writeIterable", "writeBlob", "writeStream", "h2stream", "error", "pipe", "onPipeData", "buffer", "onDrain", "cb", "waitForDrain", "resolve", "reject", "res", "require_client", "__commonJSMin", "exports", "module", "assert", "net", "http", "util", "channels", "Request", "DispatcherBase", "InvalidArgumentError", "InformationalError", "ClientDestroyedError", "buildConnector", "kUrl", "kServerName", "kClient", "kBusy", "kConnect", "kResuming", "kRunning", "kPending", "kSize", "kQueue", "kConnected", "kConnecting", "kNeedDrain", "kKeepAliveDefaultTimeout", "kHostHeader", "kPendingIdx", "kRunningIdx", "kError", "kPipelining", "kKeepAliveTimeoutValue", "kMaxHeadersSize", "kKeepAliveMaxTimeout", "kKeepAliveTimeoutThreshold", "kHeadersTimeout", "kBodyTimeout", "kStrictContentLength", "kConnector", "kMaxRequests", "kCounter", "kClose", "kDestroy", "kDispatch", "kLocalAddress", "kMaxResponseSize", "kOnError", "kHTTPContext", "kMaxConcurrentStreams", "kResume", "connectH1", "connectH2", "kClosedResolve", "getDefaultNodeMaxHeaderSize", "noop", "getPipelining", "client", "Client", "url", "maxHeaderSize", "headersTimeout", "socketTimeout", "requestTimeout", "connectTimeout", "bodyTimeout", "idleTimeout", "keepAlive", "keepAliveTimeout", "maxKeepAliveTimeout", "keepAliveMaxTimeout", "keepAliveTimeoutThreshold", "socketPath", "pipelining", "tls", "strictContentLength", "maxCachedSessions", "connect", "maxRequestsPerClient", "localAddress", "maxResponseSize", "autoSelectFamily", "autoSelectFamilyAttemptTimeout", "maxConcurrentStreams", "allowH2", "sync", "resume", "err", "onError", "value", "cb", "opts", "handler", "origin", "request", "resolve", "requests", "callback", "i", "host", "hostname", "protocol", "port", "idx", "ip", "socket", "reject", "emitDrain", "_resume", "require_fixed_queue", "__commonJSMin", "exports", "module", "FixedCircularBuffer", "data", "nextItem", "tail", "next", "require_pool_stats", "__commonJSMin", "exports", "module", "kFree", "kConnected", "kPending", "kQueued", "kRunning", "kSize", "kPool", "PoolStats", "pool", "require_pool_base", "__commonJSMin", "exports", "module", "DispatcherBase", "FixedQueue", "kConnected", "kSize", "kRunning", "kPending", "kQueued", "kBusy", "kFree", "kUrl", "kClose", "kDestroy", "kDispatch", "PoolStats", "kClients", "kNeedDrain", "kQueue", "kClosedResolve", "kOnDrain", "kOnConnect", "kOnDisconnect", "kOnConnectionError", "kGetDispatcher", "kAddClient", "kRemoveClient", "kStats", "PoolBase", "pool", "origin", "targets", "queue", "needDrain", "item", "c", "err", "client", "ret", "pending", "running", "size", "resolve", "opts", "handler", "dispatcher", "idx", "require_pool", "__commonJSMin", "exports", "module", "PoolBase", "kClients", "kNeedDrain", "kAddClient", "kGetDispatcher", "Client", "InvalidArgumentError", "util", "kUrl", "buildConnector", "kOptions", "kConnections", "kFactory", "defaultFactory", "origin", "opts", "Pool", "connections", "factory", "connect", "connectTimeout", "tls", "maxCachedSessions", "socketPath", "autoSelectFamily", "autoSelectFamilyAttemptTimeout", "allowH2", "options", "client", "dispatcher", "require_balanced_pool", "__commonJSMin", "exports", "module", "BalancedPoolMissingUpstreamError", "InvalidArgumentError", "PoolBase", "kClients", "kNeedDrain", "kAddClient", "kRemoveClient", "kGetDispatcher", "Pool", "kUrl", "parseOrigin", "kFactory", "kOptions", "kGreatestCommonDivisor", "kCurrentWeight", "kIndex", "kWeight", "kMaxWeightPerServer", "kErrorPenalty", "getGreatestCommonDivisor", "a", "b", "t", "defaultFactory", "origin", "opts", "BalancedPool", "upstreams", "factory", "upstream", "upstreamOrigin", "pool", "args", "err", "client", "result", "i", "dispatcher", "p", "counter", "maxWeightIndex", "require_agent", "__commonJSMin", "exports", "module", "InvalidArgumentError", "kClients", "kRunning", "kClose", "kDestroy", "kDispatch", "DispatcherBase", "Pool", "Client", "util", "kOnConnect", "kOnDisconnect", "kOnConnectionError", "kOnDrain", "kFactory", "kOptions", "defaultFactory", "origin", "opts", "Agent", "factory", "connect", "options", "targets", "err", "ret", "client", "handler", "key", "dispatcher", "closePromises", "destroyPromises", "require_proxy_agent", "__commonJSMin", "exports", "module", "kProxy", "kClose", "kDestroy", "URL", "Agent", "Pool", "DispatcherBase", "InvalidArgumentError", "RequestAbortedError", "SecureProxyConnectionError", "buildConnector", "kAgent", "kClient", "kProxyHeaders", "kRequestTls", "kProxyTls", "kConnectEndpoint", "defaultProtocolPort", "protocol", "defaultFactory", "origin", "opts", "noop", "ProxyAgent", "clientFactory", "url", "#getUrl", "href", "port", "username", "password", "proxyHostname", "connect", "callback", "requestedPath", "socket", "statusCode", "servername", "err", "handler", "headers", "buildHeaders", "throwIfProxyAuthIsSent", "host", "headersPair", "i", "key", "require_env_http_proxy_agent", "__commonJSMin", "exports", "module", "DispatcherBase", "kClose", "kDestroy", "kClosed", "kDestroyed", "kDispatch", "kNoProxyAgent", "kHttpProxyAgent", "kHttpsProxyAgent", "ProxyAgent", "Agent", "DEFAULT_PORTS", "EnvHttpProxyAgent", "#noProxyValue", "#noProxyEntries", "#opts", "opts", "httpProxy", "httpsProxy", "noProxy", "agentOpts", "HTTP_PROXY", "HTTPS_PROXY", "#parseNoProxy", "handler", "url", "#getProxyAgentForUrl", "err", "protocol", "hostname", "port", "#shouldProxy", "#noProxyChanged", "i", "entry", "noProxyValue", "#noProxyEnv", "noProxySplit", "noProxyEntries", "parsed", "require_retry_handler", "__commonJSMin", "exports", "module", "assert", "kRetryHandlerDefaultRetry", "RequestRetryError", "WrapHandler", "isDisturbed", "parseRangeHeader", "wrapRequestBody", "calculateRetryAfterHeader", "retryAfter", "current", "RetryHandler", "_RetryHandler", "opts", "dispatch", "handler", "retryOptions", "dispatchOpts", "retryFn", "maxRetries", "maxTimeout", "minTimeout", "timeoutFactor", "methods", "errorCodes", "statusCodes", "controller", "context", "statusCode", "headers", "socket", "err", "state", "cb", "code", "method", "counter", "retryAfterHeader", "retryTimeout", "statusMessage", "contentRange", "start", "size", "end", "range", "contentLength", "chunk", "trailers", "onRetry", "require_retry_agent", "__commonJSMin", "exports", "module", "Dispatcher", "RetryHandler", "RetryAgent", "#agent", "#options", "agent", "options", "opts", "handler", "retry", "require_readable", "__commonJSMin", "exports", "module", "assert", "Readable", "RequestAbortedError", "NotSupportedError", "InvalidArgumentError", "AbortError", "util", "ReadableStreamFrom", "kConsume", "kReading", "kBody", "kAbort", "kContentType", "kContentLength", "kUsed", "kBytesRead", "noop", "BodyReadable", "resume", "abort", "contentType", "contentLength", "highWaterMark", "err", "callback", "event", "listener", "ret", "chunk", "consumePush", "consume", "opts", "signal", "limit", "resolve", "reject", "onAbort", "encoding", "isLocked", "bodyReadable", "isUnusable", "stream", "type", "rState", "consumeFinish", "consumeStart", "state", "start", "end", "n", "consumeEnd", "chunksDecode", "chunks", "length", "buffer", "bufferLength", "chunksConcat", "offset", "i", "body", "require_api_request", "__commonJSMin", "exports", "module", "assert", "AsyncResource", "Readable", "InvalidArgumentError", "RequestAbortedError", "util", "noop", "RequestHandler", "opts", "callback", "signal", "method", "opaque", "body", "onInfo", "responseHeaders", "highWaterMark", "err", "abort", "context", "statusCode", "rawHeaders", "resume", "statusMessage", "headers", "parsedHeaders", "contentType", "contentLength", "res", "chunk", "trailers", "request", "resolve", "reject", "data", "handler", "require_abort_signal", "__commonJSMin", "exports", "module", "addAbortListener", "RequestAbortedError", "kListener", "kSignal", "abort", "self", "removeSignal", "addSignal", "signal", "require_api_stream", "__commonJSMin", "exports", "module", "assert", "finished", "AsyncResource", "InvalidArgumentError", "InvalidReturnValueError", "util", "addSignal", "removeSignal", "noop", "StreamHandler", "opts", "factory", "callback", "signal", "method", "opaque", "body", "onInfo", "responseHeaders", "err", "abort", "context", "statusCode", "rawHeaders", "resume", "statusMessage", "headers", "res", "trailers", "chunk", "stream", "resolve", "reject", "data", "handler", "require_api_pipeline", "__commonJSMin", "exports", "module", "Readable", "Duplex", "PassThrough", "assert", "AsyncResource", "InvalidArgumentError", "InvalidReturnValueError", "RequestAbortedError", "util", "addSignal", "removeSignal", "noop", "kResume", "PipelineRequest", "resume", "err", "callback", "PipelineResponse", "PipelineHandler", "opts", "handler", "signal", "method", "opaque", "onInfo", "responseHeaders", "body", "chunk", "encoding", "req", "res", "ret", "abort", "context", "statusCode", "rawHeaders", "headers", "trailers", "pipeline", "pipelineHandler", "require_api_upgrade", "__commonJSMin", "exports", "module", "InvalidArgumentError", "SocketError", "AsyncResource", "assert", "util", "addSignal", "removeSignal", "UpgradeHandler", "opts", "callback", "signal", "opaque", "responseHeaders", "abort", "context", "statusCode", "rawHeaders", "socket", "headers", "err", "upgrade", "resolve", "reject", "data", "upgradeHandler", "upgradeOpts", "require_api_connect", "__commonJSMin", "exports", "module", "assert", "AsyncResource", "InvalidArgumentError", "SocketError", "util", "addSignal", "removeSignal", "ConnectHandler", "opts", "callback", "signal", "opaque", "responseHeaders", "abort", "context", "statusCode", "rawHeaders", "socket", "headers", "err", "connect", "resolve", "reject", "data", "connectHandler", "connectOptions", "require_api", "__commonJSMin", "exports", "module", "require_mock_errors", "__commonJSMin", "exports", "module", "UndiciError", "MockNotMatchedError", "message", "require_mock_symbols", "__commonJSMin", "exports", "module", "require_mock_utils", "__commonJSMin", "exports", "module", "MockNotMatchedError", "kDispatches", "kMockAgent", "kOriginalDispatch", "kOrigin", "kGetNetConnect", "serializePathWithQuery", "STATUS_CODES", "isPromise", "matchValue", "match", "value", "lowerCaseEntries", "headers", "headerName", "headerValue", "getHeaderByName", "key", "i", "buildHeadersFromArray", "clone", "entries", "index", "matchHeaders", "mockDispatch", "matchHeaderName", "matchHeaderValue", "safeUrl", "path", "pathSegments", "qp", "matchKey", "method", "body", "pathMatch", "methodMatch", "bodyMatch", "headersMatch", "getResponseData", "data", "getMockDispatch", "mockDispatches", "basePath", "resolvedPath", "resolvedPathWithoutTrailingSlash", "removeTrailingSlash", "matchedMockDispatches", "consumed", "ignoreTrailingSlash", "addMockDispatch", "opts", "baseData", "replyData", "newMockDispatch", "deleteMockDispatch", "dispatch", "buildKey", "query", "generateKeyValues", "keys", "result", "name", "j", "getStatusText", "statusCode", "getResponse", "buffers", "handler", "trailers", "error", "delay", "persist", "timesInvoked", "times", "handleReply", "_data", "optsHeaders", "newData", "responseData", "responseHeaders", "responseTrailers", "err", "resume", "buildMockDispatch", "agent", "origin", "originalDispatch", "netConnect", "checkNetConnect", "url", "matcher", "buildMockOptions", "mockOptions", "require_mock_interceptor", "__commonJSMin", "exports", "module", "getResponseData", "buildKey", "addMockDispatch", "kDispatches", "kDispatchKey", "kDefaultHeaders", "kDefaultTrailers", "kContentLength", "kMockDispatch", "kIgnoreTrailingSlash", "InvalidArgumentError", "serializePathWithQuery", "MockScope", "mockDispatch", "waitInMs", "repeatTimes", "MockInterceptor", "opts", "mockDispatches", "parsedURL", "statusCode", "data", "responseOptions", "responseData", "contentLength", "headers", "trailers", "replyParameters", "replyOptionsCallbackOrStatusCode", "wrappedDefaultsCallback", "resolvedData", "newMockDispatch", "dispatchData", "error", "require_mock_client", "__commonJSMin", "exports", "module", "promisify", "Client", "buildMockDispatch", "kDispatches", "kMockAgent", "kClose", "kOriginalClose", "kOrigin", "kOriginalDispatch", "kConnected", "kIgnoreTrailingSlash", "MockInterceptor", "Symbols", "InvalidArgumentError", "MockClient", "origin", "opts", "require_mock_pool", "__commonJSMin", "exports", "module", "promisify", "Pool", "buildMockDispatch", "kDispatches", "kMockAgent", "kClose", "kOriginalClose", "kOrigin", "kOriginalDispatch", "kConnected", "kIgnoreTrailingSlash", "MockInterceptor", "Symbols", "InvalidArgumentError", "MockPool", "origin", "opts", "require_pending_interceptors_formatter", "__commonJSMin", "exports", "module", "Transform", "Console", "PERSISTENT", "NOT_PERSISTENT", "disableColors", "chunk", "_enc", "cb", "pendingInterceptors", "withPrettyHeaders", "method", "path", "statusCode", "persist", "times", "timesInvoked", "origin", "require_mock_agent", "__commonJSMin", "exports", "module", "kClients", "Agent", "kAgent", "kMockAgentSet", "kMockAgentGet", "kDispatches", "kIsMockActive", "kNetConnect", "kGetNetConnect", "kOptions", "kFactory", "MockClient", "MockPool", "matchValue", "buildMockOptions", "InvalidArgumentError", "UndiciError", "Dispatcher", "PendingInterceptorsFormatter", "MockAgent", "opts", "agent", "origin", "dispatcher", "handler", "matcher", "mockOptions", "client", "keyMatcher", "nonExplicitDispatcher", "mockAgentClients", "scope", "dispatch", "pending", "pendingInterceptorsFormatter", "require_global", "__commonJSMin", "exports", "module", "globalDispatcher", "InvalidArgumentError", "Agent", "getGlobalDispatcher", "setGlobalDispatcher", "agent", "require_decorator_handler", "__commonJSMin", "exports", "module", "assert", "WrapHandler", "#handler", "#onCompleteCalled", "#onErrorCalled", "#onResponseStartCalled", "handler", "args", "require_redirect_handler", "__commonJSMin", "exports", "module", "util", "kBodyUsed", "assert", "InvalidArgumentError", "EE", "redirectableStatusCodes", "kBody", "noop", "BodyAsyncIterable", "body", "RedirectHandler", "_RedirectHandler", "dispatcher", "maxRedirections", "dispatch", "opts", "originalHandler", "handler", "controller", "context", "statusCode", "headers", "socket", "statusMessage", "origin", "pathname", "search", "path", "cleanRequestHeaders", "chunk", "trailers", "error", "shouldRemoveHeader", "header", "removeContent", "unknownOrigin", "name", "ret", "i", "entries", "key", "value", "require_redirect", "__commonJSMin", "exports", "module", "RedirectHandler", "createRedirectInterceptor", "defaultMaxRedirections", "dispatch", "opts", "handler", "maxRedirections", "rest", "dispatchOpts", "redirectHandler", "require_response_error", "__commonJSMin", "exports", "module", "DecoratorHandler", "ResponseError", "ResponseErrorHandler", "#statusCode", "#contentType", "#decoder", "#headers", "#body", "_opts", "handler", "#checkContentType", "contentType", "controller", "context", "statusCode", "headers", "statusMessage", "chunk", "trailers", "err", "stackTraceLimit", "dispatch", "opts", "require_retry", "__commonJSMin", "exports", "module", "RetryHandler", "globalOpts", "dispatch", "opts", "handler", "require_dump", "__commonJSMin", "exports", "module", "InvalidArgumentError", "RequestAbortedError", "DecoratorHandler", "DumpHandler", "#maxSize", "#dumped", "#size", "#controller", "maxSize", "signal", "handler", "#abort", "reason", "controller", "context", "statusCode", "headers", "statusMessage", "contentLength", "err", "chunk", "trailers", "createDumpInterceptor", "defaultMaxSize", "dispatch", "opts", "dumpMaxSize", "dumpHandler", "require_dns", "__commonJSMin", "exports", "module", "isIP", "lookup", "DecoratorHandler", "InvalidArgumentError", "InformationalError", "maxInt", "DNSInstance", "#maxTTL", "#maxItems", "#records", "opts", "#defaultLookup", "#defaultPick", "origin", "cb", "ips", "newOpts", "err", "addresses", "records", "ip", "port", "results", "addr", "hostnameRecords", "affinity", "offset", "family", "position", "ipFamily", "timestamp", "record", "familyRecords", "meta", "DNSDispatchHandler", "#state", "#opts", "#dispatch", "#origin", "#controller", "#newOrigin", "#firstTry", "state", "handler", "dispatch", "newOrigin", "controller", "otherFamily", "dispatchOpts", "interceptorOpts", "dualStack", "instance", "origDispatchOpts", "require_cache", "__commonJSMin", "exports", "module", "safeHTTPMethods", "makeCacheKey", "opts", "headers", "x", "key", "val", "assertCacheKey", "property", "assertCacheValue", "value", "parseCacheControlHeader", "header", "output", "directives", "directive", "i", "keyValueDelimiter", "parsedValue", "foundEndingQuote", "j", "nextPart", "nextPartLength", "lastHeader", "parseVaryHeader", "varyHeader", "varyingHeaders", "trimmedHeader", "isEtagUsable", "etag", "assertCacheStore", "store", "name", "fn", "assertCacheMethods", "methods", "method", "require_date", "__commonJSMin", "exports", "module", "IMF_DAYS", "IMF_SPACES", "IMF_MONTHS", "IMF_COLONS", "ASCTIME_SPACES", "RFC850_DAYS", "parseHttpDate", "date", "now", "parseImfDate", "parseAscTimeDate", "parseRfc850Date", "spaceInx", "colonIdx", "dayName", "dayString", "day", "month", "monthIdx", "year", "hourString", "hour", "minuteString", "minute", "secondString", "second", "spaceIdx", "commaIndex", "currentYear", "currentDecade", "currentCentury", "require_cache_handler", "__commonJSMin", "exports", "module", "util", "parseCacheControlHeader", "parseVaryHeader", "isEtagUsable", "parseHttpDate", "noop", "HEURISTICALLY_CACHEABLE_STATUS_CODES", "MAX_RESPONSE_AGE", "CacheHandler", "#cacheKey", "#cacheType", "#cacheByDefault", "#store", "#handler", "#writeStream", "store", "type", "cacheByDefault", "cacheKey", "handler", "controller", "context", "statusCode", "headers", "socket", "resHeaders", "statusMessage", "downstreamOnHeaders", "cacheControlHeader", "heuristicallyCacheable", "cacheControlDirectives", "canCacheResponse", "now", "resAge", "getAge", "resDate", "staleAt", "determineStaleAt", "baseTime", "absoluteStaleAt", "varyDirectives", "deleteAt", "determineDeleteAt", "strippedHeaders", "stripNecessaryHeaders", "value", "chunk", "trailers", "err", "cacheType", "ageHeader", "age", "responseDate", "sMaxAge", "maxAge", "expiresDate", "lastModified", "isValidDate", "staleWhileRevalidate", "staleIfError", "immutable", "headersToRemove", "header", "headerName", "date", "require_memory_cache_store", "__commonJSMin", "exports", "module", "Writable", "assertCacheKey", "assertCacheValue", "MemoryCacheStore", "#maxCount", "#maxSize", "#maxEntrySize", "#size", "#count", "#entries", "opts", "key", "topLevelKey", "now", "entry", "headerName", "val", "store", "chunk", "encoding", "callback", "entries", "require_cache_revalidation_handler", "__commonJSMin", "exports", "module", "assert", "CacheRevalidationHandler", "#successful", "#callback", "#handler", "#context", "#allowErrorStatusCodes", "callback", "handler", "allowErrorStatusCodes", "_", "context", "controller", "statusCode", "headers", "socket", "statusMessage", "chunk", "trailers", "err", "require_cache", "__commonJSMin", "exports", "module", "assert", "Readable", "util", "CacheHandler", "MemoryCacheStore", "CacheRevalidationHandler", "assertCacheStore", "assertCacheMethods", "makeCacheKey", "parseCacheControlHeader", "AbortError", "needsRevalidation", "result", "cacheControlDirectives", "now", "gracePeriod", "timeLeftTillStale", "threshold", "handleUncachedResponse", "dispatch", "globalOpts", "cacheKey", "handler", "opts", "reqCacheControl", "aborted", "err", "sendCachedValue", "age", "context", "isStale", "stream", "controller", "reason", "headers", "chunk", "handleResult", "withinStaleIfErrorThreshold", "staleIfErrorExpiry", "success", "store", "methods", "cacheByDefault", "type", "safeMethodsToNotCache", "method", "require_sqlite_cache_store", "__commonJSMin", "exports", "module", "Writable", "assertCacheKey", "assertCacheValue", "DatabaseSync", "VERSION", "MAX_ENTRY_SIZE", "#maxEntrySize", "#maxCount", "#db", "#getValuesQuery", "#updateValueQuery", "#insertValueQuery", "#deleteExpiredValuesQuery", "#deleteByUrlQuery", "#countEntriesQuery", "#deleteOldValuesQuery", "opts", "key", "value", "#findValue", "url", "#makeValueUrl", "body", "size", "existingValue", "#prune", "store", "chunk", "encoding", "callback", "removed", "total", "canBeExpired", "headers", "method", "values", "now", "matches", "vary", "header", "headerValueEquals", "lhs", "rhs", "x", "i", "require_headers", "__commonJSMin", "exports", "module", "kConstruct", "kEnumerableProperty", "iteratorMixin", "isValidHeaderName", "isValidHeaderValue", "webidl", "assert", "util", "isHTTPWhiteSpaceCharCode", "code", "headerValueNormalize", "potentialValue", "i", "j", "fill", "headers", "object", "header", "appendHeader", "keys", "name", "value", "getHeadersGuard", "getHeadersList", "headersListSortAndCombine", "target", "headersList", "names", "cookies", "compareHeaderName", "a", "b", "HeadersList", "_HeadersList", "init", "isLowerCase", "lowercaseName", "exists", "delimiter", "lowerName", "cookie", "size", "array", "iterator", "firstValue", "right", "left", "pivot", "x", "Headers", "_Headers", "#guard", "#headersList", "prefix", "list", "depth", "options", "o", "guard", "setHeadersGuard", "setHeadersList", "V", "argument", "require_response", "__commonJSMin", "exports", "module", "Headers", "HeadersList", "fill", "getHeadersGuard", "setHeadersGuard", "setHeadersList", "extractBody", "cloneBody", "mixinBody", "hasFinalizationRegistry", "streamRegistry", "bodyUnusable", "util", "nodeUtil", "kEnumerableProperty", "isValidReasonPhrase", "isCancelled", "isAborted", "serializeJavascriptValueToJSONString", "isErrorLike", "isomorphicEncode", "relevantRealm", "redirectStatusSet", "nullBodyStatus", "webidl", "URLSerializer", "kConstruct", "assert", "types", "textEncoder", "Response", "_Response", "#headers", "#state", "fromInnerResponse", "makeNetworkError", "data", "init", "bytes", "body", "responseObject", "makeResponse", "initializeResponse", "url", "status", "parsedURL", "err", "value", "bodyWithType", "extractedBody", "type", "urlList", "clonedResponse", "cloneResponse", "depth", "options", "properties", "response", "newHeaders", "newState", "getResponseHeaders", "setResponseHeaders", "getResponseState", "setResponseState", "filterResponse", "newResponse", "reason", "isError", "isNetworkError", "makeFilteredResponse", "state", "target", "p", "makeAppropriateNetworkError", "fetchParams", "innerResponse", "guard", "headers", "V", "prefix", "name", "argument", "require_dispatcher_weakref", "__commonJSMin", "exports", "module", "kConnected", "kSize", "CompatWeakRef", "value", "CompatFinalizer", "finalizer", "dispatcher", "key", "require_request", "__commonJSMin", "exports", "module", "extractBody", "mixinBody", "cloneBody", "bodyUnusable", "Headers", "fillHeaders", "HeadersList", "setHeadersGuard", "getHeadersGuard", "setHeadersList", "getHeadersList", "FinalizationRegistry", "util", "nodeUtil", "isValidHTTPToken", "sameOrigin", "environmentSettingsObject", "forbiddenMethodsSet", "corsSafeListedMethodsSet", "referrerPolicy", "requestRedirect", "requestMode", "requestCredentials", "requestCache", "requestDuplex", "kEnumerableProperty", "normalizedMethodRecordsBase", "normalizedMethodRecords", "webidl", "URLSerializer", "kConstruct", "assert", "getMaxListeners", "setMaxListeners", "defaultMaxListeners", "kAbortController", "requestFinalizer", "signal", "abort", "dependentControllerMap", "abortSignalHasEventHandlerLeakWarning", "buildAbort", "acRef", "ac", "controllerList", "ref", "ctrl", "patchMethodWarning", "Request", "_Request", "#signal", "#dispatcher", "#headers", "#state", "input", "init", "prefix", "request", "fallbackMode", "baseUrl", "parsedURL", "err", "makeRequest", "origin", "window", "initHasKey", "referrer", "parsedReferrer", "mode", "method", "mayBeNormalized", "upperCase", "headersList", "headers", "name", "value", "inputBody", "initBody", "extractedBody", "contentType", "inputOrInitBody", "finalBody", "identityTransform", "clonedRequest", "cloneRequest", "list", "fromInnerRequest", "depth", "options", "properties", "newSignal", "newDispatcher", "newHeaders", "newState", "setRequestSignal", "getRequestDispatcher", "setRequestDispatcher", "setRequestHeaders", "getRequestState", "setRequestState", "newRequest", "innerRequest", "dispatcher", "guard", "V", "argument", "require_fetch", "__commonJSMin", "exports", "module", "makeNetworkError", "makeAppropriateNetworkError", "filterResponse", "makeResponse", "fromInnerResponse", "getResponseState", "HeadersList", "Request", "cloneRequest", "getRequestDispatcher", "getRequestState", "zlib", "bytesMatch", "makePolicyContainer", "clonePolicyContainer", "requestBadPort", "TAOCheck", "appendRequestOriginHeader", "responseLocationURL", "requestCurrentURL", "setRequestReferrerPolicyOnRedirect", "tryUpgradeRequestToAPotentiallyTrustworthyURL", "createOpaqueTimingInfo", "appendFetchMetadata", "corsCheck", "crossOriginResourcePolicyCheck", "determineRequestsReferrer", "coarsenedSharedCurrentTime", "createDeferredPromise", "sameOrigin", "isCancelled", "isAborted", "isErrorLike", "fullyReadBody", "readableStreamClose", "isomorphicEncode", "urlIsLocal", "urlIsHttpHttpsScheme", "urlHasHttpsScheme", "clampAndCoarsenConnectionTimingInfo", "simpleRangeHeaderValue", "buildContentRange", "createInflate", "extractMimeType", "assert", "safelyExtractBody", "extractBody", "redirectStatusSet", "nullBodyStatus", "safeMethodsSet", "requestBodyHeader", "subresourceSet", "EE", "Readable", "pipeline", "finished", "isErrored", "isReadable", "addAbortListener", "bufferToLowerCasedHeaderName", "dataURLProcessor", "serializeAMimeType", "minimizeSupportedMimeType", "getGlobalDispatcher", "webidl", "STATUS_CODES", "GET_OR_HEAD", "defaultUserAgent", "resolveObjectURL", "Fetch", "dispatcher", "reason", "error", "handleFetchDone", "response", "finalizeAndReportTiming", "fetch", "input", "init", "p", "requestObject", "e", "request", "abortFetch", "responseObject", "locallyAborted", "controller", "realResponse", "fetching", "initiatorType", "originalURL", "timingInfo", "cacheState", "markResourceTiming", "err", "processRequestBodyChunkLength", "processRequestEndOfBody", "processResponse", "processResponseEndOfBody", "processResponseConsumeBody", "useParallelQueue", "taskDestination", "crossOriginIsolatedCapability", "currentTime", "fetchParams", "mainFetch", "recursive", "currentURL", "schemeFetch", "httpFetch", "internalResponse", "processBodyError", "fetchFinale", "processBody", "bytes", "scheme", "blobURLEntry", "blob", "fullLength", "serializedFullLength", "type", "rangeHeader", "rangeValue", "rangeStart", "rangeEnd", "slicedBlob", "slicedBodyWithType", "serializedSlicedLength", "contentRange", "bodyWithType", "dataURLStruct", "mimeType", "finalizeResponse", "unsafeEndTime", "bodyInfo", "responseStatus", "processResponseEndOfBodyTask", "actualResponse", "httpNetworkOrCacheFetch", "httpRedirectFetch", "locationURL", "headerName", "isAuthenticationFetch", "isNewConnectionFetch", "httpFetchParams", "httpRequest", "httpCache", "revalidatingFlag", "includeCredentials", "contentLength", "contentLengthHeaderValue", "forwardResponse", "httpNetworkFetch", "forceNewConnection", "abort", "newConnection", "requestBody", "processBodyChunk", "processEndOfBody", "body", "status", "statusText", "headersList", "socket", "dispatch", "iterator", "pullAlgorithm", "cancelAlgorithm", "stream", "onAborted", "isFailure", "done", "value", "buffer", "url", "agent", "resolve", "reject", "connection", "rawHeaders", "resume", "codings", "location", "i", "contentEncoding", "x", "decoders", "willFollow", "coding", "onError", "chunk", "require_util", "__commonJSMin", "exports", "module", "assert", "URLSerializer", "isValidHeaderName", "urlEquals", "A", "B", "excludeFragment", "serializedA", "serializedB", "getFieldValues", "header", "values", "value", "require_cache", "__commonJSMin", "exports", "module", "kConstruct", "urlEquals", "getFieldValues", "kEnumerableProperty", "isDisturbed", "webidl", "cloneResponse", "fromInnerResponse", "getResponseState", "Request", "fromInnerRequest", "getRequestState", "fetching", "urlIsHttpHttpsScheme", "createDeferredPromise", "readAllBytes", "assert", "Cache", "_Cache", "#relevantRequestResponseList", "request", "options", "prefix", "p", "#internalMatchAll", "requests", "responsePromises", "requestList", "r", "fetchControllers", "responsePromise", "response", "fieldValues", "fieldValue", "controller", "responses", "operations", "index", "operation", "cacheJobPromise", "errorData", "#batchCacheOperations", "e", "innerRequest", "innerResponse", "clonedResponse", "bodyReadPromise", "reader", "bytes", "requestResponses", "promise", "requestResponse", "#queryCache", "requestObject", "cache", "backupCache", "addedItems", "resultList", "idx", "requestQuery", "targetStorage", "storage", "cachedRequest", "cachedResponse", "#requestMatchesCachedItem", "queryURL", "cachedURL", "requestValue", "queryValue", "maxResponses", "responseList", "responseObject", "cacheQueryOptionConverters", "require_cachestorage", "__commonJSMin", "exports", "module", "Cache", "webidl", "kEnumerableProperty", "kConstruct", "CacheStorage", "_CacheStorage", "#caches", "request", "options", "cacheList", "response", "cacheName", "prefix", "cache", "require_constants", "__commonJSMin", "exports", "module", "require_util", "__commonJSMin", "exports", "module", "isCTLExcludingHtab", "value", "i", "code", "validateCookieName", "name", "validateCookieValue", "len", "validateCookiePath", "path", "validateCookieDomain", "domain", "IMFDays", "IMFMonths", "IMFPaddedNumbers", "_", "toIMFDate", "date", "validateCookieMaxAge", "maxAge", "stringify", "cookie", "out", "part", "key", "require_parse", "__commonJSMin", "exports", "module", "maxNameValuePairSize", "maxAttributeValueSize", "isCTLExcludingHtab", "collectASequenceOfCodePointsFast", "assert", "unescape", "parseSetCookie", "header", "nameValuePair", "unparsedAttributes", "name", "value", "position", "parseUnparsedAttributes", "cookieAttributeList", "cookieAv", "attributeName", "attributeValue", "attributeNameLowercase", "expiryTime", "charCode", "deltaSeconds", "cookieDomain", "cookiePath", "enforcement", "attributeValueLowercase", "require_cookies", "__commonJSMin", "exports", "module", "parseSetCookie", "stringify", "webidl", "Headers", "brandChecks", "getCookies", "headers", "cookie", "out", "piece", "name", "value", "deleteCookie", "attributes", "prefix", "setCookie", "getSetCookies", "cookies", "pair", "parseCookie", "str", "require_events", "__commonJSMin", "exports", "module", "webidl", "kEnumerableProperty", "kConstruct", "MessageEvent", "_MessageEvent", "#eventInit", "type", "eventInitDict", "prefix", "bubbles", "cancelable", "data", "origin", "lastEventId", "source", "ports", "init", "messageEvent", "createFastMessageEvent", "CloseEvent", "_CloseEvent", "ErrorEvent", "_ErrorEvent", "eventInit", "require_constants", "__commonJSMin", "exports", "module", "uid", "staticPropertyDescriptors", "states", "sentCloseFrameState", "opcodes", "maxUnsigned16Bit", "parserStates", "emptyBuffer", "sendHints", "require_util", "__commonJSMin", "exports", "module", "states", "opcodes", "isUtf8", "collectASequenceOfCodePointsFast", "removeHTTPWhitespace", "isConnecting", "readyState", "isEstablished", "isClosing", "isClosed", "fireEvent", "e", "target", "eventFactory", "type", "init", "eventInitDict", "event", "websocketMessageReceived", "handler", "data", "toArrayBuffer", "buffer", "isValidSubprotocol", "protocol", "i", "code", "isValidStatusCode", "isControlFrame", "opcode", "isContinuationFrame", "isTextBinaryFrame", "isValidOpcode", "parseExtensions", "extensions", "position", "extensionList", "pair", "name", "value", "isValidClientWindowBits", "byte", "getURLRecord", "url", "baseURL", "urlRecord", "validateCloseCodeAndReason", "reason", "reasonBytesLength", "utf8Decode", "fatalDecoder", "require_frame", "__commonJSMin", "exports", "module", "maxUnsigned16Bit", "opcodes", "BUFFER_SIZE", "crypto", "buffer", "bufIdx", "_offset", "_size", "i", "generateMask", "WebsocketFrameSend", "data", "opcode", "frameData", "maskKey", "bodyLength", "payloadLength", "offset", "head", "require_connection", "__commonJSMin", "exports", "module", "uid", "states", "sentCloseFrameState", "emptyBuffer", "opcodes", "parseExtensions", "isClosed", "isClosing", "isEstablished", "validateCloseCodeAndReason", "channels", "makeRequest", "fetching", "Headers", "getHeadersList", "getDecodeSplit", "WebsocketFrameSend", "assert", "crypto", "establishWebSocketConnection", "url", "protocols", "client", "handler", "options", "requestURL", "request", "headersList", "keyValue", "protocol", "response", "failWebsocketConnection", "secWSAccept", "digest", "secExtension", "extensions", "secProtocol", "closeWebSocketConnection", "object", "code", "reason", "validate", "frame", "require_permessage_deflate", "__commonJSMin", "exports", "module", "createInflateRaw", "Z_DEFAULT_WINDOWBITS", "isValidClientWindowBits", "tail", "kBuffer", "kLength", "PerMessageDeflate", "#inflate", "#options", "extensions", "chunk", "fin", "callback", "windowBits", "data", "err", "full", "require_receiver", "__commonJSMin", "exports", "module", "Writable", "assert", "parserStates", "opcodes", "states", "emptyBuffer", "sentCloseFrameState", "channels", "isValidStatusCode", "isValidOpcode", "websocketMessageReceived", "utf8Decode", "isControlFrame", "isTextBinaryFrame", "isContinuationFrame", "failWebsocketConnection", "WebsocketFrameSend", "PerMessageDeflate", "ByteParser", "#buffers", "#fragmentsBytes", "#byteOffset", "#loop", "#state", "#info", "#fragments", "#extensions", "#handler", "handler", "extensions", "chunk", "_", "callback", "buffer", "fin", "opcode", "masked", "fragmented", "payloadLength", "rsv1", "rsv2", "rsv3", "upper", "lower", "body", "error", "data", "n", "first", "offset", "next", "length", "fragment", "fragments", "output", "i", "code", "reason", "closeFrame", "frame", "require_sender", "__commonJSMin", "exports", "module", "WebsocketFrameSend", "opcodes", "sendHints", "FixedQueue", "SendQueue", "#queue", "#running", "#socket", "socket", "item", "cb", "hint", "node", "createFrame", "head", "body", "ab", "#run", "queue", "data", "toBuffer", "require_websocket", "__commonJSMin", "exports", "module", "webidl", "URLSerializer", "environmentSettingsObject", "staticPropertyDescriptors", "states", "sentCloseFrameState", "sendHints", "opcodes", "isConnecting", "isEstablished", "isClosing", "isValidSubprotocol", "fireEvent", "utf8Decode", "toArrayBuffer", "getURLRecord", "establishWebSocketConnection", "closeWebSocketConnection", "failWebsocketConnection", "ByteParser", "kEnumerableProperty", "getGlobalDispatcher", "types", "ErrorEvent", "CloseEvent", "createFastMessageEvent", "SendQueue", "channels", "WebSocket", "_WebSocket", "#events", "#bufferedAmount", "#protocol", "#extensions", "#sendQueue", "#handler", "response", "extensions", "#onConnectionEstablished", "code", "reason", "#onFail", "opcode", "data", "#onMessage", "err", "#onParserDrain", "chunk", "#parser", "#onSocketClose", "#url", "#binaryType", "url", "protocols", "prefix", "options", "baseURL", "urlRecord", "p", "client", "buffer", "fn", "type", "parsedExtensions", "parser", "protocol", "init", "dataForEvent", "wasClean", "result", "V", "argument", "require_websocketerror", "__commonJSMin", "exports", "module", "webidl", "validateCloseCodeAndReason", "kConstruct", "kEnumerableProperty", "WebSocketError", "_WebSocketError", "#closeCode", "#reason", "message", "init", "code", "reason", "error", "createUnvalidatedWebSocketError", "require_websocketstream", "__commonJSMin", "exports", "module", "createDeferredPromise", "environmentSettingsObject", "states", "opcodes", "sentCloseFrameState", "webidl", "getURLRecord", "isValidSubprotocol", "isEstablished", "utf8Decode", "establishWebSocketConnection", "failWebsocketConnection", "closeWebSocketConnection", "types", "channels", "WebsocketFrameSend", "ByteParser", "WebSocketError", "createUnvalidatedWebSocketError", "utf8DecodeBytes", "kEnumerableProperty", "emittedExperimentalWarning", "WebSocketStream", "#url", "#openedPromise", "#closedPromise", "#readableStream", "#readableStreamController", "#writableStream", "#handshakeAborted", "#handler", "response", "extensions", "#onConnectionEstablished", "_code", "_reason", "opcode", "data", "#onMessage", "err", "chunk", "#parser", "#onSocketClose", "url", "options", "baseURL", "urlRecord", "protocols", "p", "signal", "client", "closeInfo", "code", "reason", "#write", "promise", "string", "e", "frame", "parsedExtensions", "parser", "protocol", "readable", "controller", "#cancel", "writable", "#closeUsingReason", "type", "wasClean", "result", "error", "reasonString", "V", "require_util", "__commonJSMin", "exports", "module", "isValidLastEventId", "value", "isASCIINumber", "i", "delay", "ms", "resolve", "require_eventsource_stream", "__commonJSMin", "exports", "module", "Transform", "isASCIINumber", "isValidLastEventId", "BOM", "LF", "CR", "COLON", "SPACE", "EventSourceStream", "options", "chunk", "_encoding", "callback", "line", "event", "colonPosition", "field", "value", "valueStart", "require_eventsource", "__commonJSMin", "exports", "module", "pipeline", "fetching", "makeRequest", "webidl", "EventSourceStream", "parseMIMEType", "createFastMessageEvent", "isNetworkError", "delay", "kEnumerableProperty", "environmentSettingsObject", "experimentalWarned", "defaultReconnectionTime", "CONNECTING", "OPEN", "CLOSED", "ANONYMOUS", "USE_CREDENTIALS", "EventSource", "_EventSource", "#events", "#url", "#withCredentials", "#readyState", "#request", "#controller", "#dispatcher", "#state", "url", "eventSourceInitDict", "prefix", "settings", "urlRecord", "e", "corsAttributeState", "initRequest", "#connect", "fetchParams", "processEventSourceEndOfBody", "response", "#reconnect", "contentType", "mimeType", "contentTypeValid", "eventSourceStream", "event", "error", "fn", "constantsPropertyDescriptors", "require_undici", "__commonJSMin", "exports", "module", "Client", "Dispatcher", "Pool", "BalancedPool", "Agent", "ProxyAgent", "EnvHttpProxyAgent", "RetryAgent", "errors", "util", "InvalidArgumentError", "api", "buildConnector", "MockClient", "MockAgent", "MockPool", "mockErrors", "RetryHandler", "getGlobalDispatcher", "setGlobalDispatcher", "DecoratorHandler", "RedirectHandler", "SqliteCacheStore", "makeDispatcher", "fn", "url", "opts", "handler", "path", "agent", "dispatcher", "fetchImpl", "init", "options", "err", "setGlobalOrigin", "getGlobalOrigin", "CacheStorage", "kConstruct", "deleteCookie", "getCookies", "getSetCookies", "setCookie", "parseCookie", "parseMIMEType", "serializeAMimeType", "CloseEvent", "ErrorEvent", "MessageEvent", "EventSource", "extensions_exports", "__export", "defineExtension", "getExtensionContext", "defineExtension", "ext", "client", "getExtensionContext", "that", "public_exports", "__export", "validator", "validator", "_args", "args", "colors_exports", "__export", "$", "bgBlack", "bgBlue", "bgCyan", "bgGreen", "bgMagenta", "bgRed", "bgWhite", "bgYellow", "black", "blue", "bold", "cyan", "dim", "gray", "green", "grey", "hidden", "inverse", "italic", "magenta", "red", "reset", "strikethrough", "underline", "white", "yellow", "FORCE_COLOR", "NODE_DISABLE_COLORS", "NO_COLOR", "TERM", "isTTY", "init", "x", "y", "rgx", "open", "close", "txt", "MAX_ARGS_HISTORY", "COLORS", "argsHistory", "lastTimestamp", "lastColor", "processEnv", "topProps", "namespace", "prev", "listenedNamespaces", "s", "isListened", "listenedNamespace", "isExcluded", "args", "format", "rest", "debugCreate", "instanceProps", "debugCall", "enabled", "color", "log", "stringArgs", "arg", "safeStringify", "ms", "colors_exports", "bold", "_", "prop", "value", "Debug", "indent", "cache", "key", "getLogs", "numChars", "logs", "clearLogs", "src_default", "Debug", "binaryTargets", "NODE_API_QUERY_ENGINE_URL_BASE", "getNodeAPIName", "binaryTarget", "type", "isUrl", "cp", "fs", "os", "matcher", "Symbol", "for", "isVariadic", "anonymousSelectKey", "isObject", "value", "Boolean", "isMatcher", "x", "symbols", "matchPattern", "pattern", "select", "matched", "selections", "match", "Object", "keys", "forEach", "key", "Array", "isArray", "startPatterns", "endPatterns", "variadicPatterns", "i", "subpattern", "push", "length", "Error", "startValues", "slice", "endValues", "middleValues", "Infinity", "every", "subPattern", "Reflect", "ownKeys", "k", "matcherType", "is", "getSelectionKeys", "_pattern$symbols$matc", "_pattern$symbols$matc2", "_pattern$symbols$matc3", "call", "flatMap", "values", "xs", "f", "reduce", "acc", "concat", "chainable", "pattern", "Object", "assign", "optional", "and", "p2", "intersection", "or", "union", "select", "key", "optional", "pattern", "chainable", "matcher", "match", "value", "selections", "selector", "key", "getSelectionKeys", "forEach", "undefined", "matched", "matchPattern", "matcherType", "intersection", "patterns", "chainable", "matcher", "match", "value", "selections", "selector", "key", "matched", "every", "p", "matchPattern", "getSelectionKeys", "flatMap", "matcherType", "union", "forEach", "undefined", "some", "when", "predicate", "Boolean", "select", "args", "pattern", "length", "symbols", "concat", "isNumber", "x", "isString", "isBigInt", "any", "stringChainable", "pattern", "Object", "assign", "chainable", "startsWith", "str", "intersection", "start", "when", "value", "isString", "endsWith", "end", "minLength", "min", "length", "len", "maxLength", "max", "includes", "substr", "regex", "expr", "Boolean", "match", "string", "numberChainable", "between", "isNumber", "lt", "gt", "lte", "gte", "int", "Number", "isInteger", "finite", "isFinite", "positive", "negative", "number", "bigintChainable", "betweenBigInt", "isBigInt", "bigint", "boolean", "x", "symbol", "nullish", "nonNullable", "NonExhaustiveError", "Error", "constructor", "input", "displayedValue", "JSON", "stringify", "e", "super", "this", "unmatched", "matched", "value", "undefined", "match", "MatchExpression", "state", "with", "args", "handler", "length", "patterns", "predicate", "push", "slice", "hasSelections", "selected", "select", "key", "some", "pattern", "matchPattern", "symbols", "when", "Boolean", "otherwise", "exhaustive", "run", "returnType", "promisify", "tags", "yellow", "should", "warn", "message", "optionalParams", "should", "tags", "exec", "promisify", "cp", "debug", "src_default", "supportedLibSSLVersions", "getos", "platform", "os", "arch", "version", "getCommandOutput", "match", "distroInfo", "resolveDistro", "archFromUname", "getArchFromUname", "libsslSpecificPaths", "computeLibSSLSpecificPaths", "libssl", "getSSLVersion", "parseDistro", "osReleaseInput", "idRegex", "idLikeRegex", "idMatch", "id", "idLikeMatch", "idLike", "z", "originalDistro", "osReleaseFile", "fs", "parseOpenSSLVersion", "input", "partialVersion", "sanitiseSSLVersion", "parseLibSSLVersion", "sanitisedVersion", "isLibssl1x", "versionSplit", "args", "familyDistro", "excludeLibssl0x", "libsslFilenameFromSpecificPath", "findLibSSLInLocations", "libsslVersion", "libsslFilename", "openSSLVersionLine", "openSSLVersion", "directories", "dir", "findLibSSL", "directory", "value", "getBinaryTargetForCurrentPlatform", "binaryTarget", "getPlatformInfoMemoized", "isPlatformInfoDefined", "memoizedPlatformWithInfo", "getPlatformInfoMemoized", "isPlatformInfoDefined", "args", "getos", "binaryTarget", "getBinaryTargetForCurrentPlatformInternal", "platform", "arch", "archFromUname", "libssl", "targetDistro", "familyDistro", "originalDistro", "warn", "defaultLibssl", "additionalMessage", "z", "defaultDistro", "debug", "base", "isLibssl1x", "discardError", "runPromise", "getCommandOutput", "command", "result", "exec", "getArchFromUname", "os", "packageJson", "version", "getClientEngineType", "generatorConfig", "engineTypeFromEnvVar", "getEngineTypeFromEnvVar", "getDefaultEngineType", "engineType", "import_engines_version", "import_engines_version", "path", "debug", "Debug", "getEnginesPath", "DEFAULT_CLI_QUERY_ENGINE_BINARY_TYPE", "path", "fs", "debug", "src_default", "chmodPlusX", "file", "s", "newMode", "base8", "import_min_indent", "stripIndent", "string", "indent", "minIndent", "regex", "PRISMA_POSTGRES_PROVIDER", "PRISMA_POSTGRES_PROTOCOL", "isPrismaPostgres", "connectionString", "isPrismaPostgresDev", "host", "import_indent_string", "printGeneratorConfig", "config", "GeneratorConfigClass", "provider", "obj", "getOriginalBinaryTargetsValue", "indent", "printDatamodelObject", "binaryTargets", "value", "binaryTargetsFromEnvVar", "object", "maxLength", "max", "curr", "key", "niceStringify", "_", "element", "logger_exports", "__export", "error", "info", "log", "query", "should", "tags", "warn", "tags", "red", "yellow", "cyan", "blue", "should", "log", "data", "warn", "message", "optionalParams", "info", "error", "query", "assertNever", "arg", "errorMessage", "stream", "util", "byline", "readStream", "options", "createStream", "createLineStream", "LineStream", "ls", "src", "chunk", "encoding", "done", "lines", "keep", "line", "self", "chunkEncoding", "ansiRegex", "onlyFirst", "pattern", "regex", "ansiRegex", "stripAnsi", "string", "path", "pathToPosix", "filePath", "import_dotenv", "fs", "path", "dotenvExpand", "config", "environment", "interpolate", "envValue", "newEnv", "match", "parts", "prefix", "value", "replacePart", "key", "configKey", "processKey", "debug", "src_default", "tryLoadEnvs", "rootEnvPath", "schemaEnvPath", "opts", "rootEnvInfo", "loadEnv", "checkForConflicts", "schemaEnvInfo", "pathsEqual", "red", "bold", "envPath", "type", "parsedRootEnv", "areNotTheSame", "fs", "envConfig", "dotenv", "conflicts", "k", "relativeRootEnvPath", "path", "relativeEnvPath", "message", "underline", "conflict", "c", "yellow", "exists", "dotenvOutput", "dotenvExpand", "dim", "path1", "path2", "p", "hasOwnProperty", "object", "key", "mapObjectValues", "object", "mapper", "result", "key", "maxWithComparator", "items", "comparator", "result", "i", "setClassName", "classObject", "name", "alreadyWarned", "warnOnce", "key", "message", "args", "warn", "PrismaClientInitializationError", "_PrismaClientInitializationError", "message", "clientVersion", "errorCode", "setClassName", "PrismaClientKnownRequestError", "message", "code", "clientVersion", "meta", "batchRequestIdx", "setClassName", "PrismaClientRustPanicError", "message", "clientVersion", "setClassName", "PrismaClientUnknownRequestError", "message", "clientVersion", "batchRequestIdx", "setClassName", "PrismaClientValidationError", "message", "clientVersion", "setClassName", "Cache", "key", "value", "create", "cached", "uncapitalize", "self", "keyBy", "collection", "prop", "acc", "obj", "key", "lazyProperty", "compute", "resultContainer", "dmmfToRuntimeDataModel", "dmmfDataModel", "buildMapForRuntime", "buildMapForRuntime", "list", "result", "name", "rest", "isDate", "value", "isValidDate", "date", "EXP_LIMIT", "MAX_DIGITS", "NUMERALS", "LN10", "PI", "DEFAULTS", "inexact", "quadrant", "external", "decimalError", "invalidArgument", "precisionLimitExceeded", "cryptoUnavailable", "tag", "mathfloor", "mathpow", "isBinary", "isHex", "isOctal", "isDecimal", "BASE", "LOG_BASE", "MAX_SAFE_INTEGER", "LN10_PRECISION", "PI_PRECISION", "P", "x", "finalise", "min", "max", "k", "Ctor", "y", "i", "j", "xdL", "ydL", "xd", "yd", "xs", "ys", "pr", "rm", "cosine", "toLessThanHalfPi", "e", "m", "n", "r", "rep", "s", "sd", "t", "t3", "t3plusx", "digitsToString", "divide", "w", "d", "len", "one", "tinyPow", "taylorSeries", "cosh2_x", "d8", "sinh2_x", "d5", "d16", "d20", "getPi", "wpr", "xsd", "halfPi", "px", "x2", "base", "isBase10", "denominator", "inf", "num", "arg", "guard", "naturalLogarithm", "getLn10", "checkRoundingDigits", "xe", "xLTy", "getBase10Exponent", "q", "naturalExponential", "carry", "z", "getPrecision", "sine", "rL", "toStringBinary", "dp", "checkInt32", "str", "finiteToString", "maxD", "d0", "d1", "d2", "n0", "n1", "yn", "intPow", "ws", "indexOfLastWord", "getZeroString", "repeating", "di", "rd", "convertBase", "baseIn", "baseOut", "arr", "arrL", "strL", "cos2x", "multiplyInteger", "temp", "compare", "a", "b", "aL", "bL", "subtract", "cmp", "logBase", "more", "prod", "prodL", "qd", "rem", "remL", "rem0", "xi", "xL", "yd0", "yL", "yz", "sign", "isTruncated", "digits", "roundUp", "xdi", "out", "isExp", "nonFiniteToString", "zs", "truncate", "isOdd", "maxOrMin", "args", "pow", "sum", "c", "c0", "numerator", "x1", "parseDecimal", "parseOther", "divisor", "isFloat", "p", "Decimal", "sin2_x", "isHyperbolic", "u", "isNeg", "pi", "abs", "acos", "acosh", "add", "asin", "asinh", "atan", "atanh", "atan2", "cbrt", "ceil", "clamp", "config", "obj", "v", "useDefaults", "ps", "cos", "cosh", "clone", "isDecimalInstance", "div", "exp", "floor", "hypot", "ln", "log", "log10", "log2", "mod", "mul", "random", "round", "sin", "sinh", "sqrt", "sub", "tan", "tanh", "trunc", "decimal_default", "isDecimalJsLike", "value", "Decimal", "src_exports", "__export", "ModelAction", "datamodelEnumToSchemaEnum", "datamodelEnumToSchemaEnum", "datamodelEnum", "v", "ModelAction", "import_indent_string", "fs", "theme", "cyan", "s", "bold", "blue", "green", "yellow", "gray", "identity", "str", "_self", "uniqueId", "Prism", "tokens", "Token", "anyTokens", "o", "obj", "deepClone", "visited", "clone", "id", "type", "key", "v", "i", "redef", "lang", "inside", "before", "insert", "root", "grammar", "ret", "token", "newToken", "old", "value", "DFS", "callback", "objId", "property", "propertyType", "text", "language", "env", "strarr", "index", "startPos", "oneshot", "target", "patterns", "j", "pattern", "lookbehind", "greedy", "lookbehindLength", "alias", "flags", "pos", "match", "from", "to", "k", "p", "len", "delNum", "after", "args", "wrapped", "rest", "name", "hooks", "callbacks", "content", "matchedStr", "element", "getColorForSyntaxKind", "syntaxKind", "theme", "highlightTS", "str", "highlight", "Prism", "grammar", "t", "Token", "dedent", "str", "stripIndent", "SourceFileSlice", "_SourceFileSlice", "filePath", "content", "fs", "lines", "firstLine", "lineNumber", "mapFn", "idx", "newLines", "line", "i", "atLine", "str", "fromLine", "toLine", "slicedLines", "dedent", "highlighted", "highlightTS", "colorsEnabled", "red", "gray", "dim", "bold", "underline", "source", "colorsDisabled", "str", "getRawTemplateParameters", "message", "originalMethod", "isPanic", "callArguments", "getTemplateParameters", "callsite", "colors", "templateParameters", "callLocation", "contextFirstLine", "SourceFileSlice", "invocationLine", "invocationLineIndent", "getIndent", "invocationCallCode", "findPrismaActionCall", "line", "numberColumnWidth", "lineNumber", "indentValue", "indentString", "allActions", "ModelAction", "match", "openingBraceIndex", "statementStart", "spaceCount", "i", "stringifyErrorMessage", "functionName", "location", "contextLines", "lines", "introSuffix", "stringifyLocationInFile", "contextLineParts", "parts", "createErrorMessageWithContext", "args", "import_js_levenshtein", "applyUnionError", "error", "args", "globalOmit", "allErrors", "flattenUnionError", "merged", "mergeInvalidArgumentTypeErrors", "bestError", "getBestScoringError", "applyValidationError", "errorList", "invalidArgsError", "result", "key", "prevError", "uniqueConcat", "head", "tail", "errors", "maxWithComparator", "errorA", "errorB", "aPathLength", "getCombinedPathLength", "bPathLength", "getErrorTypeScore", "score", "ObjectFieldSuggestion", "name", "value", "writer", "green", "init_KeyType", "Writer", "startingIndent", "context", "value", "separator", "values", "writeItem", "item", "w", "last", "line", "afterNextNewLineCallback", "callback", "symbol", "init_TypeBuilder", "ArrayField", "value", "writer", "noop", "str", "inactiveColors", "activeColors", "bold", "red", "green", "dim", "fieldsSeparator", "writer", "FormattedString", "contents", "str", "color", "writer", "paddingSize", "Value", "ArrayValue", "Value", "item", "ArrayField", "index", "writer", "output", "FormattedString", "colors", "fieldsSeparator", "ObjectValue", "_ObjectValue", "Value", "field", "suggestion", "key", "path", "head", "tail", "firstField", "segment", "nextField", "ArrayValue", "selection", "next", "thisParent", "parent", "nextParent", "select", "include", "fields", "f", "writer", "output", "FormattedString", "fieldsSeparator", "ScalarValue", "Value", "text", "writer", "string", "FormattedString", "SuggestionObjectValue", "name", "value", "writer", "green", "dim", "fieldsSeparator", "applyValidationError", "error", "args", "globalOmit", "applyMutuallyExclusiveFieldsError", "applyIncludeOnScalarError", "applyEmptySelectionError", "applyUnknownSelectionFieldError", "applyInvalidSelectionValueError", "applyUnknownArgumentError", "applyUnknownInputFieldError", "applyRequiredArgumentMissingError", "applyInvalidArgumentTypeError", "applyInvalidArgumentValueError", "applyValueTooLargeError", "applySomeFieldsMissingError", "applyTooManyFieldsGivenError", "applyUnionError", "argsTree", "object", "colors", "selectionPath", "field", "splitPath", "outputType", "ObjectFieldSuggestion", "msg", "availableOptionsMessage", "subSelection", "omit", "applyEmptySelectionErrorOmit", "applyEmptySelectionErrorSelect", "uncapitalize", "applyEmptySelectionErrorGlobalOmit", "omitValue", "selection", "isEmpty", "addSelectionSuggestions", "suggestedOmitConfig", "SuggestionObjectValue", "omitSuggestion", "parentPath", "fieldName", "fieldValue", "ObjectValue", "locateResult", "locateSelectionField", "parent", "addInclusionSuggestions", "addOmissionSuggestions", "parts", "argName", "addArgumentsSuggestions", "unknownArgumentMessage", "arg", "argParentPath", "argParent", "addInputSuggestions", "f", "options", "suggestion", "getSuggestion", "existingField", "ScalarValue", "argumentName", "objectSuggestion", "typeName", "getInputTypeName", "dependentArgumentName", "description", "expected", "joinWithPreposition", "type", "printedValue", "value", "argument", "providedArguments", "argumentsParent", "select", "include", "inputType", "path", "green", "enabled", "preposition", "items", "itemsCopy", "lastItem", "MAX_EDIT_DISTANCE", "str", "minDistance", "result", "option", "editDistance", "levenshtein", "FieldRefImpl", "modelName", "name", "fieldType", "isList", "isEnum", "listPrefix", "enumPrefix", "isFieldRef", "value", "secret", "representations", "ObjectEnumValue", "arg", "NullTypesEnumValue", "DbNull", "#_brand_DbNull", "setClassName", "JsonNull", "#_brand_JsonNull", "AnyNull", "#_brand_AnyNull", "objectEnumValues", "classObject", "name", "separator", "ObjectField", "name", "value", "writer", "FormattedString", "ArgumentsRenderingTree", "args", "writer", "renderer", "colors", "messageRenderer", "buildArgumentsRenderingTree", "buildInputObject", "inputObject", "object", "ObjectValue", "key", "value", "field", "ObjectField", "buildInputValue", "ScalarValue", "isDecimalJsLike", "dateStr", "isValidDate", "ObjectEnumValue", "isFieldRef", "uncapitalize", "buildInputArray", "array", "result", "ArrayValue", "item", "renderArgsTree", "argsTree", "errorFormat", "activeColors", "inactiveColors", "message", "Writer", "throwValidationException", "args", "errors", "errorFormat", "callsite", "originalMethod", "clientVersion", "globalOmit", "argsTree", "buildArgumentsRenderingTree", "error", "applyValidationError", "message", "renderedArgs", "renderArgsTree", "messageWithContext", "createErrorMessageWithContext", "PrismaClientValidationError", "dmmfToJSModelName", "name", "str", "getComputedFields", "previousComputedFields", "extension", "dmmfModelName", "jsName", "dmmfToJSModelName", "resolveDependencies", "getComputedFieldsFromModel", "computedFields", "cache", "Cache", "resolveNeeds", "fieldName", "visitedFields", "fieldDep", "mapObjectValues", "field", "name", "modelResult", "needs", "compute", "key", "composeCompute", "nextCompute", "previousCompute", "model", "computeEngineSideSelection", "selection", "result", "dependency", "computeEngineSideOmissions", "omission", "MergedExtensionsListNode", "extension", "previous", "Cache", "lazyProperty", "newCb", "dmmfModelName", "getComputedFields", "jsModelName", "dmmfToJSModelName", "operation", "prevCbs", "newCbs", "query", "MergedExtensionsList", "_MergedExtensionsList", "head", "ParamImpl", "name", "isParam", "value", "createParam", "secret", "Skip", "param", "value", "skip", "isSkip", "jsActionToProtocolAction", "STRICT_UNDEFINED_ERROR_MESSAGE", "serializeJsonQuery", "modelName", "action", "args", "runtimeDataModel", "extensions", "MergedExtensionsList", "callsite", "clientMethod", "errorFormat", "clientVersion", "previewFeatures", "globalOmit", "context", "SerializeContext", "serializeFieldSelection", "select", "include", "omit", "serializeArgumentsObject", "serializeSelectionSet", "createExplicitSelection", "createImplicitSelection", "selectionSet", "addIncludedRelations", "omitFields", "key", "value", "isSkip", "nestedContext", "validateSelectionForUndefined", "field", "localOmit", "computedFields", "combinedOmits", "omitWithComputedFields", "computeEngineSideOmissions", "selectWithComputedFields", "computeEngineSideSelection", "serializeArgumentsValue", "jsValue", "isDate", "isValidDate", "isParam", "isFieldRef", "serializeArgumentsArray", "buffer", "byteOffset", "byteLength", "isRawParameters", "isDecimalJsLike", "ObjectEnumValue", "objectEnumValues", "isJSONConvertible", "object", "result", "array", "i", "itemContext", "valueName", "_SerializeContext", "params", "error", "throwValidationException", "previewFeature", "name", "fieldName", "uncapitalize", "assertNever", "checkPreviewFeatureFlag", "client", "PrismaClientValidationError", "MetricsClient", "options", "defineDmmfProperty", "target", "runtimeDataModel", "dmmfLazy", "lazyProperty", "runtimeDataModelToBaseDmmf", "buildDMMFList", "map", "name", "props", "internals", "TypedSqlMarker", "TypedSql", "sql", "values", "makeTypedQueryFactory", "isTypedSql", "value", "import_package", "AsyncResource", "EventEmitter", "fs", "path", "Sql", "_Sql", "rawStrings", "rawValues", "valuesLength", "len", "value", "i", "pos", "child", "rawString", "childIndex", "join", "values", "separator", "prefix", "suffix", "raw", "value", "Sql", "empty", "sql", "strings", "values", "addObjectProperties", "object", "key", "addProperty", "key", "factory", "cacheProperties", "baseLayer", "cache", "Cache", "key", "defaultPropertyDescriptor", "defaultProxyHandlers", "ownKeys", "_ownKeys", "target", "prop", "value", "customInspect", "createCompositeProxy", "target", "layers", "keysToLayerMap", "mapKeysToLayers", "overwrittenKeys", "proxy", "prop", "layer", "targetKeys", "getExistingKeys", "layerKeys", "value", "original", "defaultPropertyDescriptor", "property", "attributes", "toLog", "keys", "key", "removeProperties", "keys", "getBatchRequestPayload", "batch", "transaction", "prettyPrintArguments", "args", "tree", "buildArgumentsRenderingTree", "Writer", "inactiveColors", "TOO_MANY_CONNECTIONS_ERROR", "prismaGraphQLToJSError", "error", "user_facing_error", "clientVersion", "activeProvider", "PrismaClientKnownRequestError", "getKnownErrorMessage", "PrismaClientUnknownRequestError", "userFacingError", "message", "UNKNOWN_FUNCTION", "parse", "stackString", "lines", "stack", "line", "parseResult", "parseChrome", "parseWinjs", "parseGecko", "parseNode", "parseJSC", "chromeRe", "chromeEvalRe", "parts", "isNative", "isEval", "submatch", "winjsRe", "geckoRe", "geckoEvalRe", "javaScriptCoreRe", "nodeRe", "DisabledCallSite", "EnabledCallSite", "stack", "frame", "parse", "t", "posixFile", "pathToPosix", "getCallSite", "errorFormat", "aggregateMap", "desugarUserArgs", "args", "_args", "desugarCountInUserArgs", "aggregateArgs", "key", "value", "aggregateMap", "createUnpacker", "data", "aggregate", "modelAction", "aggregateUnpacker", "desugarUserArgs", "args", "select", "_args", "createUnpacker", "data", "count", "modelAction", "desugarUserArgs", "args", "_args", "key", "createUnpacker", "data", "row", "groupBy", "modelAction", "applyAggregates", "client", "action", "modelAction", "userArgs", "aggregate", "count", "groupBy", "applyFieldsProxy", "modelName", "model", "scalarFieldsList", "field", "scalarFields", "keyBy", "target", "prop", "dmmfField", "FieldRefImpl", "defaultProxyHandlers", "keys", "ks", "deepGet", "o", "kp", "k", "deepSet", "v", "getNextDataPath", "fluentPropName", "prevDataPath", "getNextUserArgs", "callArgs", "prevArgs", "nextDataPath", "deepSet", "applyFluent", "client", "dmmfModelName", "modelAction", "prevUserArgs", "dmmfModelFieldMap", "acc", "field", "userArgs", "callsite", "getCallSite", "nextUserArgs", "prismaPromise", "ownKeys", "getOwnKeys", "target", "prop", "modelArgs", "dataArgs", "defaultProxyHandlers", "fluentProps", "aggregateProps", "applyModel", "client", "dmmfModelName", "modelExtensions", "layers", "modelActionsLayer", "fieldsPropertyLayer", "addObjectProperties", "addProperty", "createCompositeProxy", "jsModelName", "dmmfToJSModelName", "ownKeys", "ModelAction", "key", "dmmfActionName", "action", "paramOverrides", "userArgs", "callSite", "getCallSite", "transaction", "params", "applyFluent", "isValidAggregateName", "applyAggregates", "cacheProperties", "model", "applyFieldsProxy", "jsToDMMFModelName", "name", "str", "rawClient", "applyModelsAndClientExtensions", "client", "layers", "rootLayer", "modelsLayer", "addProperty", "clientExtensions", "addObjectProperties", "createCompositeProxy", "prototype", "allKeys", "prop", "dmmfModelKeys", "jsModelKeys", "dmmfToJSModelName", "cacheProperties", "dmmfModelName", "jsToDMMFModelName", "applyModel", "key", "unApplyModelsAndClientExtensions", "$extends", "extension", "Engine", "newClient", "applyModelsAndClientExtensions", "applyResultExtensions", "result", "modelName", "select", "omit", "extensions", "computedFields", "computedPropertiesLayers", "maskingLayers", "field", "toMask", "prop", "removeProperties", "areNeedsMet", "computedPropertyLayer", "createCompositeProxy", "neededProperties", "property", "hasOwnProperty", "cacheProperties", "addProperty", "visitQueryResult", "visitor", "result", "args", "runtimeDataModel", "modelName", "i", "visitResult", "visitNested", "includeOrSelect", "parentModelName", "fieldName", "subConfig", "isSkip", "field", "applyAllResultExtensions", "result", "modelName", "args", "extensions", "runtimeDataModel", "globalOmit", "visitQueryResult", "value", "dmmfModelName", "jsName", "dmmfToJSModelName", "applyResultExtensions", "denylist", "itxClientDenyList", "deepCloneArgs", "args", "Sql", "cloneSql", "isTypedSql", "cloneTypedSql", "clone", "i", "deepCloneValue", "k", "rawParam", "TypedSql", "x", "ObjectEnumValue", "isFieldRef", "isDecimalJsLike", "decimal_default", "isDate", "copy", "assertNever", "iterateAndCallQueryCallbacks", "client", "params", "queryCbs", "i", "transaction", "prevCustomFetch", "deepCloneArgs", "args", "__internalParams", "currCustomFetch", "composeCustomDataProxyFetch", "applyQueryExtensions", "jsModelName", "action", "clientMethod", "operation", "cbs", "createApplyBatchExtensionsFunction", "executeBatch", "requests", "callbacks", "iterateAndCallBatchCallbacks", "prevFetch", "request", "_args", "nextFetch", "noopFetch", "f", "debug", "Debug", "cachingPlatforms", "checkPlatformCaching", "postinstall", "ciName", "clientVersion", "generator", "message", "PrismaClientInitializationError", "getDatasourceOverrides", "options", "datasourceNames", "import_execa", "spawn", "fs", "import_p_retry", "fs", "path", "stream", "promisify", "promisify", "crypto", "randomBytesAsync", "urlSafeCharacters", "numericCharacters", "distinguishableCharacters", "asciiPrintableCharacters", "alphanumericCharacters", "generateForCustomCharacters", "length", "characters", "characterCount", "maxValidSelector", "entropyLength", "string", "stringLength", "entropy", "entropyPosition", "entropyValue", "generateForCustomCharactersAsync", "generateRandomBytes", "byteLength", "type", "generateRandomBytesAsync", "allowedTypes", "createGenerator", "cryptoRandomString", "crypto_random_string_default", "uniqueString", "crypto_random_string_default", "import_temp_dir", "import_temp_dir", "pipeline", "promisify", "stream", "getPath", "prefix", "path", "tempDir", "uniqueString", "temporaryFile", "name", "extension", "path", "temporaryDirectory", "getPath", "temporaryDirectory", "prefix", "directory", "getPath", "fs", "getMessage", "log", "getBacktrace", "str", "isPanic", "err", "isRustLog", "e", "isRustErrorLog", "convertLog", "rustLog", "level", "isQueryLog", "fields", "PrismaClientRustError", "clientVersion", "error", "backtrace", "getBacktrace", "isPanic", "setClassName", "fs", "path", "addRuntimeToYourBinaryTargets", "input", "runtimeBinaryTarget", "getGeneratorBlockSuggestion", "generator", "generatorBinaryTargets", "suggestedBinaryTarget", "binaryTargets", "printGeneratorConfig", "queryEngineCannotBeFound", "input", "runtimeBinaryTarget", "theseLocationsHaveBeenSearched", "input", "searchedLocations", "location", "binaryTargetsWasIncorrectlyPinned", "input", "runtimeBinaryTarget", "queryEngineCannotBeFound", "addRuntimeToYourBinaryTargets", "theseLocationsHaveBeenSearched", "weWouldAppreciateIfYouCouldShareInfo", "prisly", "howToFixEngineNotFoundNextjs", "input", "errorStack", "bundlerHasTamperedWithEngineCopy", "input", "queryEngineName", "queryEngineCannotBeFound", "howToFixEngineNotFoundNextjs", "weWouldAppreciateIfYouCouldShareInfo", "theseLocationsHaveBeenSearched", "nativeGeneratedOnDifferentPlatform", "input", "runtimeBinaryTarget", "generatorBinaryTargets", "nativeBinaryTarget", "bt", "queryEngineCannotBeFound", "addRuntimeToYourBinaryTargets", "theseLocationsHaveBeenSearched", "toolingHasTamperedWithEngineCopy", "input", "queryEngineName", "queryEngineCannotBeFound", "howToFixEngineNotFoundNextjs", "weWouldAppreciateIfYouCouldShareInfo", "theseLocationsHaveBeenSearched", "debug", "Debug", "runtimeFileRegex", "resolveEnginePath", "engineType", "config", "prismaPath", "enginePath", "searchedLocations", "findEnginePath", "chmodPlusX", "binaryTarget", "getBinaryTargetForCurrentPlatform", "generatorBinaryTargets", "hasNativeBinaryTarget", "bt", "hasMissingBinaryTarget", "clientHasBeenBundled", "errorInput", "getQueryEngineName", "path", "errorMessage", "nativeGeneratedOnDifferentPlatform", "binaryTargetsWasIncorrectlyPinned", "bundlerHasTamperedWithEngineCopy", "toolingHasTamperedWithEngineCopy", "PrismaClientInitializationError", "searchLocations", "getEnginesPath", "location", "engineName", "fs", "getNodeAPIName", "maskQuery", "query", "substr", "normalizeLogs", "logs", "l", "import_new_github_issue_url", "getGitHubIssueUrl", "title", "user", "repo", "template", "body", "newGitHubIssueUrl", "getErrorMessageWithLink", "version", "binaryTarget", "title", "description", "engineVersion", "database", "query", "gotLogs", "getLogs", "logs", "normalizeLogs", "stripAnsi", "moreInfo", "body", "maskQuery", "url", "getGitHubIssueUrl", "underline", "import_get_stream", "undici", "assertHasPool", "pool", "Connection", "response", "handler", "_response", "url", "options", "method", "endpoint", "headers", "body", "parseResponse", "bodyString", "getStream", "path", "debug", "Debug", "logger", "args", "knownBinaryTargets", "binaryTargets", "engines", "MAX_STARTS", "MAX_REQUEST_RETRIES", "BinaryEngine", "config", "Connection", "temporaryFile", "fs", "dsOverrideName", "dsOverrideUrl", "initHooks", "PrismaClientInitializationError", "red", "bold", "green", "err", "isRustErrorLog", "PrismaClientRustError", "killProcessAndWait", "cwd", "listener", "getBinaryTargetForCurrentPlatform", "retries", "retryInternalStart", "e", "startFn", "PrismaClientUnknownRequestError", "env", "trace", "result", "resolve", "reject", "r", "pRetry", "prismaPath", "resolveEnginePath", "additionalFlag", "flags", "spawn", "byline", "msg", "data", "json", "getMessage", "ip", "port", "log", "convertLog", "code", "signal", "toEmit", "PrismaClientRustPanicError", "engineVersion", "stopFn", "stopChildPromise", "forceRun", "enginePath", "execa", "query", "traceparent", "numTry", "isWrite", "interactiveTransaction", "headers", "queryStr", "prismaGraphQLToJSError", "error", "shouldRetry", "queries", "transaction", "containsWrite", "itx", "request", "getBatchRequestPayload", "batchResult", "action", "arg", "jsonOptions", "forceThrow", "lastError", "title", "getErrorMessageWithLink", "isNetworkError", "PrismaClientKnownRequestError", "i", "format", "globalLabels", "parseResponse", "response", "traces", "hookProcess", "handler", "exit", "engine", "hooksInitialized", "childProcess", "assertNever", "_", "message", "isTaggedValue", "value", "mapObjectValues", "object", "mapper", "result", "key", "deserializeJsonResponse", "isTaggedValue", "deserializeTaggedValue", "$type", "value", "buffer", "byteOffset", "byteLength", "Decimal", "assertNever", "version", "isNode", "isBun", "isDeno", "isNetlify", "isEdgeLight", "isWorkerd", "detectRuntime", "check", "runtimesPrettyNames", "getRuntime", "runtimeId", "resolveDatasourceUrl", "inlineDatasources", "overrideDatasources", "env", "clientVersion", "resolvedUrl", "datasourceName", "datasourceUrl", "overrideUrl", "PrismaClientInitializationError", "PrismaClientError", "message", "info", "DataProxyError", "PrismaClientError", "message", "info", "setRetryable", "info", "retryable", "InvalidDatasourceError", "DataProxyError", "message", "info", "setRetryable", "setClassName", "getUrlAndApiKey", "options", "errorInfo", "dsName", "serviceURL", "resolveDatasourceUrl", "url", "InvalidDatasourceError", "protocol", "searchParams", "PRISMA_POSTGRES_PROTOCOL", "apiKey", "httpScheme", "isPrismaPostgresDev", "httpUrl", "import_engines_version", "HeaderBuilder", "apiKey", "tracingHelper", "logLevel", "logQueries", "engineHash", "traceparent", "transactionId", "headers", "captureTelemetry", "#buildCaptureSettings", "convertEngineTimestamp", "timestamp", "dateFromEngineTimestamp", "ForcedRetryError", "DataProxyError", "info", "setRetryable", "setClassName", "NotImplementedYetError", "DataProxyError", "message", "info", "setRetryable", "setClassName", "DataProxyAPIError", "DataProxyError", "message", "info", "requestId", "messageSuffix", "SchemaMissingError", "DataProxyAPIError", "info", "setRetryable", "setClassName", "BAD_REQUEST_DEFAULT_MESSAGE", "BadRequestError", "DataProxyAPIError", "info", "message", "code", "setRetryable", "setClassName", "HealthcheckTimeoutError", "DataProxyAPIError", "info", "logs", "setRetryable", "setClassName", "EngineStartupError", "DataProxyAPIError", "info", "message", "logs", "setRetryable", "setClassName", "EngineVersionNotSupportedError", "DataProxyAPIError", "info", "setRetryable", "setClassName", "GATEWAY_TIMEOUT_DEFAULT_MESSAGE", "GatewayTimeoutError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "INTERACTIVE_TRANSACTION_ERROR_DEFAULT_MESSAGE", "InteractiveTransactionError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "INVALID_REQUEST_DEFAULT_MESSAGE", "InvalidRequestError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "NOT_FOUND_DEFAULT_MESSAGE", "NotFoundError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "SERVER_ERROR_DEFAULT_MESSAGE", "ServerError", "DataProxyAPIError", "info", "message", "logs", "setRetryable", "setClassName", "UNAUTHORIZED_DEFAULT_MESSAGE", "UnauthorizedError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "USAGE_EXCEEDED_DEFAULT_MESSAGE", "UsageExceededError", "DataProxyAPIError", "info", "message", "setRetryable", "setClassName", "getResponseErrorBody", "response", "text", "error", "reason", "responseToError", "clientVersion", "info", "PrismaClientKnownRequestError", "ServerError", "SchemaMissingError", "EngineVersionNotSupportedError", "msg", "logs", "EngineStartupError", "error_code", "PrismaClientInitializationError", "HealthcheckTimeoutError", "messageByReason", "InteractiveTransactionError", "InvalidRequestError", "UnauthorizedError", "buildErrorMessage", "UNAUTHORIZED_DEFAULT_MESSAGE", "NotFoundError", "NOT_FOUND_DEFAULT_MESSAGE", "UsageExceededError", "USAGE_EXCEEDED_DEFAULT_MESSAGE", "GatewayTimeoutError", "GATEWAY_TIMEOUT_DEFAULT_MESSAGE", "SERVER_ERROR_DEFAULT_MESSAGE", "BadRequestError", "BAD_REQUEST_DEFAULT_MESSAGE", "defaultMessage", "errorBody", "backOff", "n", "baseDelay", "jitter", "total", "done", "encodings", "toBase64", "str", "bytes", "base64", "byteLength", "byteRemainder", "mainLength", "a", "b", "c", "d", "chunk", "i", "checkForbiddenMetrics", "engineConfig", "feature", "PrismaClientInitializationError", "dependencies", "RequestError", "DataProxyError", "message", "info", "setRetryable", "setClassName", "request", "url", "options", "customFetch", "fetch", "clientVersion", "fetchOptions", "decoratedFetch", "error", "message", "RequestError", "semverRegex", "debug", "Debug", "_getClientVersion", "host", "config", "engineVersion", "dependencies", "clientVersion", "version", "suffix", "major", "minor", "patch", "pkgURL", "prismaPkgURL", "res", "request", "bodyAsText", "bodyAsJson", "e", "NotImplementedYetError", "getClientVersion", "MAX_RETRIES", "debug", "Debug", "DataProxyEngine", "config", "checkForbiddenMetrics", "toBase64", "apiKey", "url", "HeaderBuilder", "getClientVersion", "extensions", "log", "dateFromEngineTimestamp", "action", "spanOptions", "response", "request", "error", "responseToError", "query", "traceparent", "interactiveTransaction", "customDataProxyFetch", "queries", "transaction", "body", "getBatchRequestPayload", "result", "logHttpCall", "headers", "arg", "actionToGerund", "id", "endpoint", "getUrlAndApiKey", "NotImplementedYetError", "args", "attempt", "e", "DataProxyError", "ForcedRetryError", "delay", "backOff", "SchemaMissingError", "errors", "prismaGraphQLToJSError", "PrismaClientUnknownRequestError", "validateEngineInstanceConfig", "url", "adapter", "copyEngine", "targetBuildType", "warnings", "errors", "pushWarning", "input", "pushError", "value", "isUsingPrismaAccelerate", "isUsingPrismaPostgres", "isPrismaPostgres", "isUsingDriverAdapters", "isAccelerateUrlScheme", "isAccelerateConfigured", "isUsing", "isNonEmptyArray", "arr", "getEngineInstance", "copyEngine", "engineConfig", "url", "resolveDatasourceUrl", "ok", "isUsing", "diagnostics", "validateEngineInstanceConfig", "warning", "warnOnce", "error", "PrismaClientValidationError", "engineType", "getClientEngineType", "libraryEngineConfigured", "binaryEngineConfigured", "clientEngineConfigured", "clientEngineUsesRemoteExecutor", "DataProxyEngine", "BinaryEngine", "getPreviewFeatures", "generator", "rawCommandArgsMapper", "command", "mssqlPreparedStatement", "sql", "acc", "str", "idx", "serializeRawParameters", "parameters", "serializeRawParametersInternal", "objectSerialization", "parameter", "encodeParameter", "item", "isDate", "decimal_default", "isArrayBufferLike", "buffer", "byteOffset", "byteLength", "preprocessObject", "value", "obj", "preprocessValueInObject", "result", "key", "ALTER_RE", "debug", "Debug", "checkAlter", "activeProvider", "query", "values", "invalidCall", "rawQueryArgsMapper", "clientMethod", "args", "queryString", "parameters", "isTypedSql", "serializeRawParameters", "mssqlPreparedStatement", "templateStringMiddlewareArgsMapper", "sql", "requestArgs", "strings", "Sql", "sqlMiddlewareArgsMapper", "createPrismaPromiseFactory", "transaction", "callback", "op", "promise", "_callback", "callbackTransaction", "valueToPromise", "error", "onFulfilled", "onRejected", "onFinally", "batchTransaction", "thing", "majorVersion", "version", "disabledTracingHelper", "options", "callback", "DynamicTracingHelper", "context", "spans", "versionedPrismaInstrumentationGlobal", "fallbackPrismaInstrumentationGlobal", "getTracingHelper", "getLockCountPromise", "knock", "cb", "resolve", "lock", "res", "onFulfilled", "getLogLevel", "log", "acc", "curr", "currentLevel", "hasBatchIndex", "value", "getBatchId", "query", "parts", "buildKeysString", "obj", "key", "value", "writeMap", "isWrite", "action", "DataLoader", "options", "request", "hash", "resolve", "reject", "key", "batch", "result", "e", "a", "b", "j", "results", "i", "value", "deserializeValue", "type", "value", "buffer", "byteOffset", "byteLength", "decimal_default", "v", "deserializeRawResult", "response", "deserializedResponse", "prebuiltEmptyObject", "createPrebuiltEmptyResultObject", "i", "row", "mappedRow", "j", "debug", "Debug", "RequestHandler", "client", "logEmitter", "DataLoader", "createApplyBatchExtensionsFunction", "requests", "customDataProxyFetch", "transaction", "otelParentCtx", "queries", "r", "traceparent", "containsWrite", "isWrite", "getTransactionOptions", "result", "i", "error", "request", "interactiveTransaction", "getItxTransactionOptions", "response", "getBatchId", "requestA", "requestB", "params", "clientMethod", "callsite", "args", "modelName", "dataPath", "unpacker", "data", "err", "globalOmit", "isMismatchingBatchIndex", "PrismaClientKnownRequestError", "isValidationError", "validationError", "convertValidationError", "throwValidationException", "message", "createErrorMessageWithContext", "meta", "PrismaClientRustPanicError", "PrismaClientUnknownRequestError", "PrismaClientInitializationError", "stripAnsi", "operation", "pathForGet", "key", "extractedResponse", "deepGet", "deserializedResponse", "deserializeRawResult", "deserializeJsonResponse", "assertNever", "hasBatchIndex", "selectionPath", "clientVersion", "version", "import_js_levenshtein", "PrismaClientConstructorValidationError", "message", "setClassName", "knownProperties", "errorFormats", "logLevels", "validators", "options", "datasourceNames", "PrismaClientConstructorValidationError", "key", "value", "didYouMean", "getDidYouMean", "key1", "value1", "adapter", "config", "getClientEngineType", "validateLogLevel", "level", "option", "logValidators", "emits", "maxWait", "timeout", "validationErrors", "modelKey", "modelConfig", "modelOrType", "getModelOrTypeByKey", "fieldName", "field", "renderOmitValidationErrors", "knownKeys", "validatePrismaClientOptions", "str", "alternative", "getAlternative", "optionsWithDistances", "leven", "a", "b", "bestAlternative", "runtimeDataModel", "findByKey", "map", "foundKey", "mapKey", "uncapitalize", "omitConfig", "argsTree", "buildArgumentsRenderingTree", "error", "message", "args", "renderArgsTree", "waitForBatch", "promises", "resolve", "reject", "successfulResults", "bestError", "done", "settledPromisesCount", "settleOnePromise", "immediatelyReject", "error", "i", "result", "hasBatchIndex", "debug", "Debug", "noopMiddlewareArgsMapper", "param", "TX_ID", "BatchTxIdCounter", "getPrismaClient", "config", "PrismaClient", "createPrismaPromiseFactory", "optionsArg", "checkPlatformCaching", "validatePrismaClientOptions", "logEmitter", "EventEmitter", "MergedExtensionsList", "getPreviewFeatures", "clientVersion", "getTracingHelper", "envPaths", "path", "adapter", "expectedDriverAdapterProvider", "PrismaClientInitializationError", "loadedEnv", "tryLoadEnvs", "options", "internal", "useDebug", "cwd", "fs", "engineConfig", "getLogLevel", "o", "getDatasourceOverrides", "resolveDatasourceUrl", "getBatchRequestPayload", "prismaGraphQLToJSError", "PrismaClientUnknownRequestError", "PrismaClientKnownRequestError", "enginesVersion", "getEngineInstance", "RequestHandler", "log", "level", "event", "logger_exports", "e", "applyModelsAndClientExtensions", "eventType", "callback", "clearLogs", "transaction", "clientMethod", "args", "middlewareArgsMapper", "activeProvider", "rawQueryArgsMapper", "getCallSite", "query", "values", "sql", "argsMapper", "toSql", "checkAlter", "PrismaClientValidationError", "command", "rawCommandArgsMapper", "typedSql", "promises", "id", "lock", "getLockCountPromise", "requests", "request", "index", "isolationLevel", "waitForBatch", "headers", "optionsWithDefaults", "info", "result", "createCompositeProxy", "unApplyModelsAndClientExtensions", "addProperty", "removeProperties", "itxClientDenyList", "input", "spanOptions", "internalParams", "params", "consumer", "changedMiddlewareParams", "runInTransaction", "changedRequestParams", "requestParams", "applyQueryExtensions", "applyAllResultExtensions", "AsyncResource", "dataPath", "callsite", "action", "model", "unpacker", "otelParentCtx", "customDataProxyFetch", "message", "serializeJsonQuery", "prettyPrintArguments", "MetricsClient", "feature", "$extends", "isTemplateStringArray", "Sql", "templateStringMiddlewareArgsMapper", "sqlMiddlewareArgsMapper", "value", "allowList", "makeStrictEnum", "definition", "target", "property", "warnEnvConflicts", "envPaths", "tryLoadEnvs"]
}